9 bước bảo mật Website Joomla!

Written by VINAORA
Friday, 08 June 2007 23:55
Bảo mt Joomla!Bảo mật cho Website Joomla là một nhân tố quan trọng góp phần bảo vệ Website trước các âm mưu tấn công có chủ đích cũng như vô tình, giúp cho Website luôn hoạt động ổn định và bền vững. Nhiều quản trị Website chỉ đặt trọng tâm vào việc thiết kế, cập nhật nội dung và giành thứ hạng cao trong các kết quả tìm kiếm mà quên đi việc đảm bảo an toàn cho Website, tới khi sự việc xảy ra thì đã quá muộn. Bài viết dưới đây sẽ giới thiệu tới các bạn 9 bước để bảo mật cho Website Joomla và giảm thiểu các nguy cơ tấn công từ Internet.

1. Sao lưu toàn bộ Website theo định kỳ

Điều đầu tiên và cũng là quan trọng nhất là bạn phải thường xuyên sao lưu toàn bộ Website bao gồm cả thư mục chứa Joomlacơ sở dữ liệu MySQL. Hãy lập lịch ít nhất một lần trong tuần (khuyến cáo là mỗi ngày một lần) để thực hiện sao lưu. Bạn sẽ tiết kiệm được rất nhiều công sức và tiền của khi Website bị tấn công và chỉ mất vài phút hoặc vài chục phút để khôi phục lại gần như toàn bộ.

2. Nâng cấp khi Joomla có phiên bản phát hành ổn định mới nhất.

Nhóm phát triển nòng cốt của Joomla luôn phát hành đều đặn vài tháng một lần phiên bản Joomla mới bao gồm cả các bản vá lỗi bảo mật và và các bản vá tăng cường hiệu suất làm việc, do vậy bạn cần kiểm tra thường xuyên trên website của Joomla (http://www.joomla.org) để kịp thời cập nhật phiên bản mới nhất.

3. Kiểm tra các thành phần mở rộng (module, component, mambot/plugin) của các hãng thứ ba

Một số Website có thể bị tấn công thông qua các lỗi bảo mật nằm trong các thành phần mở rộng được cài đặt thêm từ hãng thứ ba. Do vậy bạn cũng luôn phải chắc chắn rằng nếu mình có cài đặt các thành phần mở rộng từ hãng thứ ba thì đó phải là các phiên bản mới nhất.

Khuyến cáo: Hãy hạn chế tới mức tối đa việc cài đặt các thành phần mở rộng từ hãng thứ ba. Ngoài ra khi bạn quyết định gỡ một thành phần mở rộng nào đó khỏi hệ thống thì bạn cũng xóa cả các bảng cơ sở dữ liệu liên quan.

4. Quyền hạn đối với các thư mục

Sau khi cài đặt các thành phần mở rộng, bạn cần thiết lập quyền hạn đối với các thư mục sang chế độ CHMOD 755.

Bảo mt Joomla!

Lưu ý: Nếu quá trình cài đặt các thành phần mở rộng (component/module/language…) gặp trục trặc bạn cần chuyển các thư mục sau sang CHMOD 777. Khi cài đặt xong lại thiết lập như trên (755 đối với thư mục và 644 đối với file)

components
language
modules
mambots
templates
administrator
administrator/backups
administrator/components
administrator/modules

5. Quyền hạn đối với các tệp

Thiết lập quyền hạn đối với tất cả các tệp của bạn sang chế độ CHMOD 644.

Bảo mt Joomla!

6. Quyền hạn đối với tệp configuration.php

Đây là một điều rất quan trọng. Bạn phải chắc chắn rằng mình đã thiết lập quyền hạn cho tệp “configuration.php” sang CHMOD 644.

7. Bảo mật với .htaccess

Bản phát hành mới nhất của Joomla bao gồm cả phiên bản cập nhật cho tệp “.htaccess” để làm giảm thiểu nguy cơ tấn công từ các hacker. Do vậy bạn cần phải truyền tệp .htaccess này tới server của bạn và đổi quyền hạn sang CHMOD 644.

8. Joomla! Register Globals Emulation.

Bạn cần phải chắc chắn rằng biến “register global emulation” được thiết lập thành OFF. Hãy mở tệp “global.php“, tìm dòng define(‘RG_EMULATION’, 1) và đổi nó thành

define('RG_EMULATION', 0)

9. Register Globals

Đảm bảo rằng Register Globals được thiết lập thành OFF. Nếu không hãy liên hệ với Server của bạn để đổi nó thành OFF hoặc mở tệp .htaccess và thêm vào đoạn mã sau

php_flag register_globals off.

Tham khảo thêm

Bảo mật trong ngôn ngữ web (phần 2)

web_programming_securityGiao dịch thông qua Internet ngày càng phát triển, hàng loạt ngôn ngữ và giao thức thiết kế trang web cũng ra đời để phục vụ cho những mục đích nhất định, có thể kể các ngôn ngữ phổ biến như HTML, Perl, ASP, PHP… Bài viết này đề cập đến một vấn đề thường gặp là bảo mật và kinh nghiệm phòng tránh để tăng độ an toàn cho trang web.

Phần 2 của bài viết tiếp tục đề cập đến các vấn đề liên quan đến lập trình bảo mật web.


<applet> – Java applet

Thuộc tính này dùng để chạy Java applet. Java được thiết kế với những tính năng bảo mật cho người dùng khi duyệt các trang web có nhúng Java applet hoặc Java script, như hạn chế quyền truy cập tài nguyên trên máy (bộ nhớ, đĩa…), hạn chế thực thi các lệnh hệ thống, chỉ cho phép truy cập dữ liệu (file, thư mục) ở những vùng chỉ định của người dùng hiện tại, hạn chế truy cập vào mạng – trừ việc cho phép tạo kết nối ngược về server chứa applet.

Tuy nhiên những năm gần đây, nhiều sơ hở bảo mật của Java được khám phá:

Java chạy và gửi thông tin thường dưới dạng plain text nên có thể dùng các chương trình theo dõi gói tin để bắt các thông tin này khi chúng đang lưu thông trên mạng.

Mã Java trong các applet có thể dịch ngược để xem mã nguồn.

Mã Java khi chạy trên các hệ thống Windows 95/98/NT bị lợi dụng gây lỗi tràn bộ đệm từ đó có thể tác động đến hệ thống file hoặc thậm chí gây hỏng hệ thống.

Cơ chế bảo mật Java từng bị hạ gục ở một số trình duyệt version trước và giúp hacker thực hiện các lệnh vốn không được phép.

Kinh nghiệm phòng tránh:

Hầu hết các lỗi bảo mật của Java xuất phát từ các điểm yếu trong máy ảo Java (Java Virtual Machine) và trình duyệt phía người dùng. Dưới đây là một số thủ thuật giúp tăng độ an toàn khi truy cập các trang web có nhúng Java script hoặc Java applet:

Cập nhật các bản sửa lỗi cho hệ thống Windows và các ứng dụng mới nhất tại http://windowsupdate.microsoft.com

Nếu dùng trình duyệt Internet Explorer 6.x, hãy vào menu Tools/Internet Options, ở thẻ Security bạn chọn vùng Internet, mức an toàn là “Medium” (trung bình) –, sau đó chọn phần “Custome level”, trong hộp thoại “Security Settings” hãy di chuyển thanh trượt đến mục Java VM/Permissions và chọn mức “High safety”, tiếp tục xuống dưới ở phần Scripting/Scripting Java applets, bạn chọn Disable . Phương pháp này sẽ hạn chế trình duyệt không cho phép chạy các Java script và Java applet ở các trang web. Tuy nhiên mặt hạn chế của nó là phải bật lại chức năng nếu bạn muốn cho phép mã Java chạy ở các trang web tin cậy.

<object>, <embed>

Thuộc tính này dùng để thể hiện các đối tượng ActiveX và Java applet. Đặc biệt đối với ActiveX, lợi dụng thuộc tính này hacker có thể gửi email dạng HTML có nhúng ActiveX control và đánh lừa người dùng chạy các ActiveX control này để đoạt quyền điều khiển hệ thống hoặc chạy những chương trình quấy rối, quảng cáo. Đây cũng là một trong những phương pháp thường được lợi dụng để lan truyền virus trên mạng. Hầu hết các phiên bản sau này của các trình duyệt đều cung cấp khả năng ngăn chặn sự hoạt động của ActiveX control, tuy nhiên lại tạo ra những bất tiện đáng kể cho người dùng.

Kinh nghiệm phòng tránh:

Tương tự như cách phòng tránh cho thẻ <Java> vừa đề cập, hầu hết các lỗi bảo mật liên quan đến đối tượng nhúng xuất phát từ trình duyệt phía người dùng và một số dịch vụ của Windows. Sau đây là 1 số cách bảo vệ trình duyệt và hệ thống của bạn:

Cập nhật các bản vá lỗi mới nhất cho hệ thống Windows tại http://windowsupdate.microsoft.com

Thiết lập các thông số cho trình duyệt. Tương tự như phần <Java>, các trình duyệt thông dụng hiện nay như IE, Firefox đều cho phép người dùng thay đổi các thiết lập ngầm định giúp duyệt web an toàn hơn.

Sử dụng các phần mềm ngăn chặn popup/spyware/adsware như CounterSpy, WebRoot SpySweeper, MS AntiSpy…

PERL (PRATICAL EXTRACTION AND REPORT LANGUAGE)

Perl là ngôn ngữ lập trình cấp cao được phát triển từ năm 1987. Rất mạnh, tiện dụng và đồng thời là ngôn ngữ được phổ biến miễn phí, hỗ trợ cho hầu hết các hệ thống từ Windows x/NT/2k/XP, các phiên bản biến thể của Unix đến hệ thống AS/400, MacOS, Novell NetwarePerl… Perl đã và đang được sử dụng rộng rãi trên Internet.

Perl được dùng chủ yếu cho các xử lý phía server, tuy nhiên ta cũng có thể dùng perl để viết các ứng dụng client, thậm chí có thể tạo nên ứng dụng chạy độc lập để thực hiện một tác vụ tính toán nào đó.

Trên web server, perl thường được thực thi với CGI tạo nên cơ chế xuất thông tin ra trình duyệt web. Hãy xem ví dụ dùng perl để xử lý các thông tin nhập vào từ người dùng trong đoạn html dưới đây:

<form method=POST action=”/admin/login.pl”></form>

<html>

Username:

<input value=”” size=80 maxlength=80 name=”username”>

Password:

<input value=”” size=80 maxlength=80 name=”password”>

<input type=submit value=”Login”>

</html>

Sau khi người dùng nhập tên, mật khẩu và nhấn nút Login những thông tin này sẽ được gửi đến chương trình perl có tên login.pl nằm ở thư mục /admin/ trên web server. Chương trình login.pl sau khi xử lý sẽ gửi kết quả ngược về trình duyệt web phía người dùng.

Kinh nghiệm phòng tránh:

Khi sử dụng perl để thực hiện các xử lý phía server, ta cần lưu ý một số điểm quan trọng sau có khả năng gây nên những nguy cơ về bảo mật nghiêm trọng:

Tránh thực thi các web server dưới quyền quản trị (root trong Unix và administrator trong Windows). Các script ở web server được chạy với quyền quản trị sẽ rất nguy hiểm nếu ai đó dùng nó để thực hiện các lệnh điều khiển hệ thống. Script cgi-telnet được phổ biến trên Internet là một ví dụ cụ thể.

Luôn thực hiện tiền xử lý các thông tin người dùng nhập vào, như các giá trị tên người dùng, mật khẩu, giá cả… Tạo một chuỗi các kí tự hợp lệ tương ứng với thông tin cần nhập và lọc ra những kí tự được nhập không chính xác. Chẳng hạn với tên và mật khẩu người dùng, ta có thể giới hạn ở các kí tự hợp lệ sau: “0..9”, “a..z”, “A..Z”; không cho phép hoặc lọc bỏ các kí tự đặc biệt như: “/ \ + ) ( { } [ ] – _ =.| & !”… Một ví dụ khác về việc dùng perl thực hiện tiền xử lý với email người dùng, với yêu cầu email phải có kí hiệu @ và dấu chấm “.” ở ít nhất là phần sau dấu @:

if ($email !~ /^[\w-]+\@[\w.-]+$/){

print “<br>#Error in your email. Please re-enter<br>”;

}else{

# thực hiện xử lý đối với thông tin email hợp lệ;

}

Hạn chế không cho phép thực thi các lệnh hệ thống (shell command) như open(), fork(), system(), exec() hoặc cho thực hiện sau khi đã kiểm tra chặt chẽ các tham số truyền vào. Ở các hệ thống bảo vệ lỏng lẻo, hacker có thể lợi dụng truyền các tham số không thích hợp vào các hàm trên để thực hiện các lệnh xem thông tin và điều khiển hệ thống.

Trên các hệ thống Unix, cần thiết lập các thông số $PATH và $IFS bằng các giá trị chính xác cụ thể, tránh dùng các biến môi trường.

Ví dụ ta đặt như sau:

$ENV{“PATH”}=”/bin:/usr/bin:/opt”;

$ENV{“IFS”}=”/”;

Việc chỉ định không rõ ràng các thông tin trên có thể tạo điều kiện cho hacker sửa đổi chúng và bắt các chương trình của chúng ta phải thực thi một chương trình nguy hiểm nào đó ở nơi khác thay vì tại vị trí ta mong muốn.

Kiểm tra kích thước và chiều dài của các thông tin người dùng nhập vào hoặc dùng biến $ENV{CONTENT_LENGTH} để hạn chế chiều dài của chuỗi dữ liệu cho các yêu cầu GET/POST. Nếu không được kiểm tra chính xác, hacker có thể gửi đi một lượng dữ liệu có giá trị rất lớn hoặc rất dài gây nên các lỗi tràn bộ đệm, hỏng web server và thậm chí tìm được các điều kiện phát sinh lỗi tràn bộ đệm và thực thi các lệnh nguy hiểm từ xa.

Tránh cho phép chỉ định đường dẫn cụ thể ở các trường dữ liệu hoặc ở các tham số truyền vào các chương trình. Chỉ nên cho phép các đường dẫn mang tính tương đối, cắt bỏ các giá trị có dạng dot dot “..” hoặc slash “/\”. Ở rất nhiều chương trình web không kiểm tra đúng đã cho phép người dùng nhập các tham số ví dụ /../../../../etc/passwd (Unix) hoặc /../../../winnt/repair/sam._ (NT/2k) và dễ dàng lấy được các thông tin về mật khẩu.

Các chương trình perl được lưu trữ dưới dạng text đơn giản do đó có thể dễ dàng bị xem mã nguồn và lấy các thông tin có giá trị như tên, mật khẩu truy cập cơ sở dữ liệu… nếu hacker đoạt được quyền điều khiển hệ thống hoặc có quyền xem hệ thống file. Ta có thể dùng một số chương trình ví dụ perl2exe cho phép chuyển đổi các tệp perl dạng text sang dạng chương trình thực thi .exe, như vậy có thể tránh được việc tiết lộ mã nguồn và không cần trình thông dịch perl khi chạy.

PHP (PERSONAL HOME PAGE)

Được phát triển từ năm 1995, PHP trở thành một trong những ngôn ngữ script phía server phổ biến nhất bên cạnh Perl và ASP (Active Server Pages). Tương tự như Perl, PHP có dạng cú pháp câu lệnh đơn giản, dễ hiểu, đặc biệt thích hợp với các lập trình viên có hiểu biết về ngôn ngữ C/C++ đồng thời có ưu điểm là thực thi rất nhanh và có thể chạy ở máy client hoặc như một ứng dụng độc lập. Hiện nay người ta thường dùng PHP để thực hiện các tác vụ xử lý phía server ở các web server trên nền Unix, điển hình như Apache. Các chương trình PHP thường có phần mở rộng là .php, .php3, .php4. Mã PHP cũng có thể nhúng vào một trang HTML. Hãy xem ví dụ sau thực hiện in lên trình duyệt một chuỗi kí tự:

<!## PHP Example in HTML

<html>

<?php

echo “<br>Hello World!<br>”;

?>

</html>

Chú ý thẻ <? và ?> dùng để đánh dấu nơi bắt đầu và kết thúc mã PHP.

Đoạn mã ví dụ sau là một trang Login đơn giản, thực hiện kiểm tra thông tin người dùng và mật khẩu so với cơ sở dữ liệu:

<?

function check_user($user, $password) {
if(connect()) {
$password = substr($password, 0, 8);
$sql = “select * from users where username = $user and password =$password”;
$result = mssql_query($sql);
if (mssql_num_rows($result) == 1) {
setcookie(“user”,$user);
setcookie(“password”,$password);
return (true);
}
else {
?>

<h3>Đăng nhập không thành công!</h3>

<?
return (false);
}
}
}

if(!check_user($user, $password)) {
?>

<h1>Nhập thông tin đăng nhập:</h1>

<form action = “Login.php” method=”post”>

<P>Tên người dùng: <input type=”text” name=”user”><br>

Mật khẩu: <input type=”password” name=”password” maxlength=”8” size=”8”><br>

<input type=”submit” name=”submit” value=”Submit”>

</form>

<?

}

else {

?>

<h1>Đăng nhập thành công!</h1>

<?

}

?>

Ví dụ trên không kiểm tra giá trị tên người dùng và mật khẩu trước khi kết nối vào cơ sở dữ liệu và hacker có thể lợi dụng để chèn các kí hiệu và lệnh đặc biệt để thực thi các thao tác nguy hiểm.

Kinh nghiệm phòng tránh:

Cho đến nay, những điểm yếu của PHP được phát hiện tương tự như ở ngôn ngữ Perl. Đặc biệt khi sử dụng PHP để nhận các thông tin nhập từ người dùng thông qua trình duyệt và xử lý cơ sở dữ liệu bên dưới; hoặc thực thi các lệnh hệ thống như system(), shellexec(), exec(), passthru()… ta cần chú ý thực hiện việc kiểm tra và lọc những dữ liệu truyền vào không hợp lệ để tránh trường hợp người dùng nhập dữ liệu sai, đánh lừa hệ thống sinh ra những kết quả không mong muốn, thậm chí thực thi các lệnh từ xa.

Ví dụ sau thực hiện việc kiểm tra đơn giản trên chuỗi $value có kiểu số, dùng hàm định nghĩa sẵn trong thư viện PHP preg_match():

if (preg_match(“/^[0-9]+$/i”, $value))

echo “Invalid number!\n”;

return 1;

break;

Bổ sung cho ví dụ ở trên, ta thêm đoạn mã kiểm tra tính hợp lệ của 2 trường tên và mật khẩu, giả định rằng tên và mật khẩu chỉ được chứa các kí tự chữ và số:

<?

function check_user($user, $password)

{

//hàm ereg kiểm tra các kí tự đặc biệt trong trường Tên và Mật khẩu

if (!ereg (“([0-9,a-z,A-Z])”, $user))) return false;

if (!ereg (“([0-9,a-z,A-Z])”, $password))) return false;

if(connect()){

}

}

?>

Hàm ereg sử dụng Regular Expression để kiểm tra tính hợp lệ của dữ liệu rất nhanh và hiệu quả. Dưới đây là các ví dụ trích từ trang http://www.php.net sử dụng các hàm built-in của PHP để kiểm tra và lọc dữ liệu:

// Hàm kiểm tra tính hợp lệ của e-mail:

function check_email ($string)

{

if (ereg(“^[A-Za-z0-9_\.\-]+@[A-Za-z0-9_\.\-]”+ “+\.[A-Za-z0-9_\-][A-Za-z0-9_\-]+$”, $string, $result))

return (true);

return (false);

}

//Hàm loại bỏ các kí tự đặc:

function replace_data ($string)

{

$string = preg_replace(“/[^a-zA-Z0-9\-\.\@\_]/”, “”, $string);

return ($string);

}

Để tìm hiểu chi tiết thông tin về các hàm và các ví dụ cụ thể, các bạn hãy tham khảo thêm tại trang chủ PHP.

LỜI KẾT

Bảo mật ngôn ngữ web chỉ là một trong các bước tăng cường an toàn cho hệ thống của bạn. Trong vai trò người phát triển và quản trị web, một trang web được xem là an toàn khi máy chủ được bảo vệ và tối ưu hóa ở mức cao nhất, các ứng dụng web cần được kiểm tra độ tin cậy và tính toàn vẹn dữ liệu trước khi công bố rộng rãi đến người dùng, điều đó cần một quy trình phát triển ứng dụng mang tính chuyên nghiệp và được hoạch định rõ ràng.

Đối với người dùng, chúng ta cũng phải chủ động tự bảo vệ hệ thống của mình trước những hiểm họa tiềm tàng trên Internet bằng cách tăng cuờng các hệ thống phòng thủ như tường lửa, phòng chống virus và spyware, liên tục cập nhật các bản sửa lỗi mới nhất và đặc biệt là tuyệt đối tránh duyệt các trang web có nội dung không lành mạnh, vì chúng là những điểm có nguy cơ lây lan cao.

Bảo mật máy tính, đó là một câu chuyện dài không bao giờ kết thúc.

Nguyễn Văn Sơn
Global Cybersoft Vietnam
(theo PC World VN)

10 điểm yếu bảo mật nghiêm trọng nhất trong ứng dụng web (phần 1)

top10webvul Theo thống kê gần đây của tổ chức uy tín Gartner Group, đến 75% các cuộc tấn công thành công hiện nay dựa trên các lỗ hổng trong ứng dụng web.

Với xu thế phát triển nhanh chóng của ngành thương mại điện tử hiện nay, rất nhiều doanh nghiệp hiện đang sử dụng ứng dụng web để cung cấp dịch vụ thương mại trực tuyến, kết nối khách hàng, đối tác và nhân viên một cách hiệu quả nhất. Tuy nhiên, ứng dụng web cũng đem đến những rủi ro đáng kể mới đến an toàn của hệ thống và dữ liệu. Đa số ứng dụng web có thể bị những lỗi mà các phương cách phòng chống mạng thông thường không bảo vệ được. Lỗi và lỗ hổng trong mã nguồn của ứng dụng web có thể gây ra những hậu quả nghiêm trọng như lộ dữ liệu nhạy cảm, gây tổn thương đến toàn hệ thống hạ tầng CNTT. Sự cố bảo mật trong ứng dụng web có thể ảnh hưởng đến danh tiếng của công ty, mất mát về mặt tài chính, ảnh hưởng đến uy tín với khách hàng và các vấn đề liên quan đến ràng buộc pháp lý.

Khi một tổ chức triển khai trực tuyến một ứng dụng web, điều này đồng nghĩa với việc cho phép bất kỳ ai có kết nối Internet truy cập vào ứng dụng qua giao thức HTTP. Những cuộc tấn công nằm trong những truy cập HTTP này có khả năng vượt qua tường lửa, hệ thống lọc tầng mạng, các lớp bảo vệ hệ thống, và cả hệ thống phát hiện xâm nhập. Những thiết bị trên không thể phát hiện được những cuộc tấn công này vì các mã tấn công đều nằm trong các gói giao thức HTTP hợp lệ. Ngay cả những trang Web có mức độ bảo mật cao sử dụng SSL cũng đều cho phép tất cả các dữ liệu đi qua mà không hề kiểm tra tính hợp lệ của những dữ liệu này. Điều này có nghĩa là bảo mật ứng dụng Web là một nhân tố quan trọng nằm trong hệ thống phòng thủ ngọai vi, cùng với tường lửa và các thiết bị bảo mật khác.

Với tầm quan trọng ngày càng tăng của việc bảo vệ bảo mật cho các trang web trực tuyến, dự án mở bảo mật ứng dụng web (OWASP) được thành lập nhằm giúp các tổ chức hiểu thêm và tăng cường bảo mật cho ứng dụng và các dịch vụ web. Tổ chức OWASP đã có các thống kê về các cuộc tấn công và thiết lập một danh sách các điểm yếu nghiêm trọng nhất. Trong phạm vi của bài viết này, chúng tôi muốn giới thiệu danh sách 10 điểm yếu nghiêm trọng nhất được chọn lọc bởi dự án OWASP. Hiểu được những điểm yếu này là một trong những bước đầu tiên trong việc triển khai các phương pháp phòng chống.

top10webvul-01
Sơ đồ 0.0: Các tấn công qua cổng 80 (giao thức HTTP) không được phát hiện bởi tường lửa mạng

Danh sách 10 lỗ hổng hàng đầu:

Bảng thống kê dưới đây tóm tắt những lỗ hổng nghiêm trọng nhất của ứng dụng Web hiện nay. Mỗi lỗ hổng sẽ được bàn cụ thể thêm trong các phần kế tiếp.

Những lỗ hổng hàng đầu trong ứng dụng Web

Điểm yếu

Tóm tắt

A1

Dữ liệu đầu vào không được kiểm tra

Thông tin và dữ liệu từ các truy cập HTTP không được kiểm tra trước khi được sử dụng bởi ứng dụng web. Tin tặc có thể tận dụng những lỗi này nhằm tấn công các lớp ứng dụng phía sau thông qua ứng dụng web.

A2

Lỗi kiểm soát truy cập nguồn tài nguyên

Những giới hạn về quyền truy cập tài nguyên của người sử dụng không được thi hành đúng. Tin tặc có thể tận dụng những lỗi này nhằm truy cập vào tài khoản của người khác, xem các tập tin nhạy cảm, hoặc thi hành những chức năng không cho phép.

A3

Lỗi liên quan đến quá trình quản lý xác thực và phiên truy cập.

Quá trình xác thực và quản lý phiên truy cập không được bảo vệ tốt có thể dẫn đến việc thông tin tài khoản bị mất cắp.

A4

Lỗi Cross Site Scripting (XSS)

Ứng dụng web có thể được sử dụng như một cơ chế để chuyên chở tấn công đến trình duyệt của người sử dụng. Một cuộc tấn công thành công có thể sẽ làm lộ token của người dùng, tấn công máy đầu cuối, hoặc giả nội dung nhằm đánh lừa người sử dụng.

A5

Lỗi tràn bộ đệm

Một số module của ứng dụng Web khi được phát triển bằng những ngôn ngữ không kiểm tra dữ liệu đầu vào có thể bị crashed, và trong một số trường hợp, có thể bị lợi dụng để chiếm đoạt quyển kiểm soát của một process hoặc toàn bộ máy chủ. Những module này có thể bao gồm CGI, thư viện, drivers, và những module của máy chủ.

A6

Lỗi Injection

Ứng dụng web có thể sử dụng các dữ liệu đầu vào làm tham số cho các hàm gọi vào hệ thống. Nếu tin tặc nhúng các mã nguy hiểm trong dữ liệu đầu vào, hệ thống có thể chạy các đoạn mã nguy hiểm này.

A7

Quy trình quản lý báo lỗi

Những lỗi thông thường không được xử lý phù hợp. Nếu một tin tặc gây ra một lỗi mà ứng dụng không xử lý, họ có thể xem được thông tin về hệ thống, lợi dụng tấn công từ chối dịch vụ, làm cơ chế bảo mật thất bại, hoặc crash máy chủ.

A8

Lưu trữ thiếu an toàn

Những ứng dụng web hay sử dụng các hàm giải thuật mã hóa nhằm bảo vệ an toàn cho dữ liệu. Tuy nhiên những hàm này và các mã nguồn có thể có nhiều lỗi do lập trình viên bất cẩn, dẫn đến việc lộ thông tin quan trọng.

A9

Tứ chối dịch vụ

Tin tặc có thể tấn công làm tê liệt ứng dụng web, không cho phép người dùng truy cập ứng dụng.

A10

Quản lý cấu hình thiếu an toàn

Cầu hình an toàn cho máy chủ là một yếu tố quan trọng trong quy trình bảo vệ bảo mật cho ứng dụng web.

A1. Dữ liệu đầu vào không được kiểm tra tính hợp lệ

Ứng dụng Web sử dụng dữ liệu đầu vào trong các truy cập HTTP (hoặc trong các tập tin) nhằm xác định kết quả phản hồi. Tin tặc có thể sửa đổi bất kỳ phần nào của một truy xuất HTTP, bao gồm URL, querystring, headers, cookies, form fields, và thậm chí field ẩn (hidden fields), nhằm vượt qua các cơ chế bảo mật. Các tấn công phổ biến dạng này bao gồm:

  • Chạy lệnh hệ thống tùy chọn
  • Cross site scripting
  • Lỗi tràn bộ đệm
  • Tấn công Format string
  • SQL injection
  • Cookie poisoning
  • Sửa đổi field ẩn

Một số Web site bảo vệ chống lại loại tấn công này bằng cách thiết lập bộ lọc dữ liệu đầu vào. Vấn đề nan giải là có rất nhiều cách để mã hóa (encode) dữ liệu, và những phương cách mã hóa này không giống như các cách mã hóa thông thường khác ở chỗ là nó dễ dàng được giải mã. Tuy vậy, những nhà lập trình viên thường quên giải mã tất cả các tham số trước khi sử dụng chúng. Tham số cần phải được chuyển đổi đến dạng đơn giản nhất trước khi được kiểm tra, nếu không, dữ liệu xấu đầu vào có thể được mã hóa ẩn và vượt qua tầng bảo vệ của các module kiểm tra dữ liệu.

Một số lượng lớn ứng dụng chỉ sử dụng các cơ chế lọc phía trình duyệt để kiểm tra dữ liệu đầu vào. Các cơ chế kiểm tra phía trình duyệt rất dễ dàng được vượt qua, và ứng dụng web xem như không được bảo vệ bởi cơ chế này. Tin tặc có thể tạo ra các truy xuất HTTP không thông qua trình duyệt bằng cách sử dụng các công cụ như telnet, truy xuất thẳng đến cổng 80 của máy chủ web. Kiểm tra dữ liệu ở phía máy trình duyệt có lợi điểm về hiệu suất và tính dễ sử dụng, tuy nhiên cơ chế này không cung cấp bất cứ lợi điểm gì về bảo mật. Kiểm tra dữ liệu ở phía server đóng vai trò thiết yếu trong việc ngăn cản những cuộc tấn công dạng sửa đổi tham số đầu vào. Khi các cơ chế bảo vệ ở server đã được thiết lập, cơ chế bảo vệ phía trình duyệt có thể được sử dụng nhằm giảm bớt dung lượng các dữ liệu không hợp lệ đến máy chủ.

Sơ đồ 1.0 mô tả phương cách phổ biến của hacker hiện nay sử dụng để tấn công ứng dụng web. Trước tiên, hacker thiết lập một proxy đứng giữa trình duyệt và máy chủ ứng dụng web. Proxy này có khả năng chặn các gói dữ liệu trước khi chuyển đến máy chủ, do đó cho phép hacker sửa đổi dữ liệu truy cập và chèn các mã tấn công trước khi gửi đến ứng dụng web.

Những cuộc tấn công dạng này đang có xu hướng ngày càng phổ biến hơn do số lượng các công cụ hỗ trợ các chức năng tạo tham số bất kỳ, tạo mã tấn công, tấn công brute force đang ngày càng tăng. Hậu quả cuộc việc sử dụng các tham số không được kiểm tra không nên được xem nhẹ. Một số lượng lớn các cuộc tấn công sẽ gây khó khăn cho nhà lập trình web nếu họ không có một hệ thống tập trung kiểm tra tính hợp lệ của tất cả các truy xuất HTTP.

Các công cụ proxy dùng cho mục đích đánh giá bảo mật ứng dụng web:

top10webvul-2
Sơ đồ 1.0: Sử dụng local proxy để thay đổi tham số

A2 Lỗi kiểm soát truy cập nguồn tài nguyên

Kiểm soát truy cập tài nguyên (authorization), là cơ chế mà ứng dụng web cho phép truy cập đến nội dung, tính năng ứng dụng cho một số người sử dụng và từ chối truy cập cho một số người sử dụng khác. Những kiểm tra này được thực hiện sau quá trình xác thực, và quản lý các quyền truy cập mà người sử dụng được phép. Kiểm soát truy cập bề ngoài tưởng chừng là một vấn đề đơn giản nhưng thực tế là một vấn đề rất khó được thi hành đầy đủ. Một mô hình quản lý truy cập tài nguyên cho ứng dụng web cần được thiết kế theo sát các nội dung và hàm chức năng của một web site cung cấp.

top10webvul-3

Sơ đồ 2.0: mô tả một mô hình quản lý kiểm soát truy cập nguồn tài nguyên trung tâm

Để mô tả rõ hơn về lỗi bảo mật này, chúng tôi đưa ra một ví dụ về một dạng tấn công vào trang web portal cho một công ty cung cấp dịch vụ trực tuyến cho các thuê bao điện thoại di động. Thường thì loại web portal này cung cấp cho người sở hữu thuê bao một tài khoản trên trang web và cung cấp các dịch vụ sau:

  • Cho phép mỗi người sử dụng được phép gửi 5 tin nhắn không tốn tiền đến các thuê bao cùng mạng.
  • Cho phép người sử dụng được upload sổ địa chỉ cá nhân lên trang web và dowload khi có nhu cầu.
  • Cho phép người sử dụng được xem lịch sử cuộc gọi của máy thuê bao

Nếu cơ chế kiểm soát quyền sử dụng dịch vụ trên bị lỗi, hacker có thể có các tấn công sau:

  • Sửa đổi các tham số về số lượng giới hạn tin nhắn và có thể gửi hơn 5 tin nhắn cho phép không tốn tiền mỗi ngày.
  • Truy cập vào sổ địa chỉ của thuê bao khác.
  • Xem được lịch sử cuộc gọi của các thuê bao khác.

Những nhà lập trình viên thường không đánh giá được mức độ khó khăn trong việc xây dựng một cơ chế quản lý kiểm soát truy cập dữ liệu. Đa số những chức năng này không đựơc thiết kế từ lúc đầu mà được xây dựng kèm theo tùy tính năng của ứng dụng. Vì vậy, các chức năng kiểm soát được xây dựng ở khắp các module khác nhau trong mã nguồn. Khi ứng dụng được phát triển xong và đưa và triển khai, các mã kiểm soát này sẽ trở nên không thống nhất và gây ra nhiều lỗ hổng nghiêm trọng khó phát hiện được.

Theo vietshield.com