I.Kiến trúc tổng quan của ứng dụng Web
Các thành phần cơ bản chủ yếu trong Kiến trúc Ứng dụng Web bao gồm các Web client (thường là web browser), 1 Web server lưu trữ các web application có kết nối đến các Database server để cung cấp, thể hiện thông tin cho các web client. I.1 Web client Web client thường là 1 trình duyệt web, có giao tiếp với web server qua giao thức HTTP và hiển thị nội dung trang HTML cho người sử dụng. I.2 Web server
Web server còn gọi là HTTP deamon service thực hiện chức năng nhận yêu cầu từ phía client và xử lý các yêu cầu này để đảm bảo rằng nguồn tài nguyên yêu cầu đến là tồn tại sau đó nó chuyển yêu cầu cho web application xử lý và nhận kết quả trả về và trả lại phía client thông qua HTTP response. I.3 Web application Ta cần phải phân biệt web server và web application. Trong thực tế web server là máy chủ phục vụ web còn web application là ứng dụng web chạy trên máy chủ đó. Một web server có thể host nhiều web application khác nhau. Một ví dụ cụ thể là yêu cầu tìm kiếm từ phía client được gửi tới web server qua 1 form trên
trang search.html, từ khóa tìm kiếm này dược web server chuyển cho web application xử lý. Trong ứng dụng web động, kết quả trả về là khác nhau tùy thuộc vào yêu cầu tìm kiếm từ phía client. Web application chịu trách nhiệm sinh ra các file HTML results.htm khác nhau ứng với các yêu cầu đó. Trang HTML results.htm này sau đó được web server trả lại phía client. HTML(Hypertext markup language) và HTTP(hypertext transfer protocol) được sử dụng như là chuẩn ngôn ngữ và giao thức để truyền dẫn và hiển thị thông tin trong Kiến trúc ứng dụng Web. HTML hay ngôn ngữ đánh dấu siêu văn bản được thể hiện bằng các tags(thẻ) cho phép thể hiện lên trang web. Được định nghĩa như là một ứng dụng đơn giản của SGML, vốn được sử dụng trong các tổ chức cần đến các yêu cầu xuất bản phức tạp, HTML giờ đây đã trở thành một chuẩn Internet do tổ chức World Wide Web Consortium (W3C) duy trì. Phiên bản mới nhất của nó hiện là HTML 4.01. Tuy nhiên, HTML hiện không còn được phát triển tiếp. Người ta đã thay thế nó bằng XHTML. Giao thức cho phép truyền tin giữa web server tới web client là giao thức HTTP. Version hiện tại của giao thức HTTP là 1.1 và được mô tả trong RFC 2616. Trong giao thức HTTP, web client còn được gọi là user agent. Các user agent này gửi HTTP request tới các webserver để lấy nguồn tài nguyên mang trả lại cho người sử dụng trong đó nguồn tài nguyên được phân biệt bởi các địa chỉ duy nhất URIs(Uniform resource identifiers) hay địa chỉ URL của trang web.
I.4 Database server Chịu trách nhiệm quản lý dữ liệu cho ứng dụng web. Trong các ứng dụng web hiện đại, database server không đặt trên cùng 1 máy tính với web server. Thường đứng sau firewall để bảo mật hệ thống, chống lại nguy cơ thâm nhập máy chủ database 1 cách bất hợp pháp. Các firewall thường chỉ cho phép duy nhất kết nối từ web server tới database server. Trong các hệ thống lớn phục vụ 1 số lượng hàng ngàn client cùng gửi yêu cầu đến 1 lúc(ví dụ dantri.com.vn ) nếu chỉ có 1 web server thì sẽ bị quá tải, do vậy cần phải sử dụng nhiều web server khác nhau và các yêu cầu từ phía client đến các web server sẽ được phân phối cân bằng cho các web server khác nhau (load balancer) II. Các nguy cơ bị khai thác trong kiến trúc ứng dụng web
II.1 Nguy cơ trong giao thức HTTP và định dạng văn bản HTML Cũng như các giao thức tầng ứng dụng khác (application layer), HTTP là giao thức hướng ký tự. cú pháp 1 HTTP request và response được thể hiện dưới dạng văn bản text thuần túy nên 1 khi trao đổi thông tin quan trọng ( tài liệu mật, user name, password) bị nghe trộm(man in the middle) Hacker hoàn toàn đọc được và lấy trộm user name, password của client cũng như các thông tin mà client và web server trao đổi. Trong mạng LAN, hacker có thể dễ dàng monitor các gói tin IP trong mạng và hoàn toàn lấy được các thông tin quan trọng đó.
Hình trên là capture của 1 HTTP header khi người sử dụng đăng nhập vào 1 trang web, thông tin về user name và password được hiển thị dưới dạng cleatext và hoàn toàn không mã hóa. Dưới đây là thông tin mà 1 sniffer trên máy tính của hacker lấy được:
II.2 Nguy cơ Khai thác web server
Trên đây là địa chỉ trên thanh URL giả định mà người sử dụng gõ trên trình duyệt browser của họ. Trình duyệt tách URL này thành 3 phần: Giao thức sử dụng HTTP Tên site www.ddth.com Tên file + tham số Forumdisplay.php?f=12
Tên site được chuyển đổi thành địa chỉ IP. Trình duyệt sau đó tạo 1 kết nối tới web server có địa chỉ IP trên tại cổng 80 ( cổng mặc định cho HTTP protocol). Browser send 1 GET request tới server, yêu cầu tới file forumdisplay.php. Server gửi trả lại HTML text tương ứng sau khi xử lý trên file forumdisplay.php. Browser của người sử dụng cuối cùng đọc các thẻ HTML và hiển thị lên cho người dùng. Trên thực tế tồn tại rất nhiều web server phổ biến như Apache và IIS(internet information service) và SUN ONE web server . Tuy nhiên hàng trăm web server thường xuyên bị hacker tấn công giành quyền kiểm soát. Một trong những nguy cơ bị tấn công thường thấy là do sự cấu hình lỏng lẻo các security policy, nghe lén server và tấn công từ chối dịch vụ(Denial of service). II.2.1 Apache Risks Apache web server là 1 web server mã nguồn mở(open source) và thường được sử dụng trên các máy chủ linux hơn windows server. II.2.2 IIS Risks IIS(internet information service) là web server do microsoft phát triển, chỉ sử dụng trên các máy chủ windows server, không sử dụng cho các máy chủ khác (linux, sun..). Dưới đây là một số các lỗ hổng đã được công bố mã khai thác: 1 Apache And Microsoft IIS Range Denial of Service Vulnerability (Vulnerabilities) Rank: 349 Last modified on: 2007-01-03 00:00:00 MST URL: http://www.securityfocus.com/bid/21865 2 Microsoft IIS ASP Remote Code Execution Vulnerability (Vulnerabilities) Rank: 349 II.3 Web application risks II.3.1 HTTP Authentication BASIC Basic authentication(chứng thực cơ bản) là dạng cơ bản nhất để chứng thực quyền sử dụng của người dùng đối với ứng dụng web. Nó được định nghĩa trong http specification. Dưới đây là luồng HTTP header cơ bản bắt đầu từ khi người dùng gõ địa chỉ trang web đến khi nhập username và password
DIGEST Digest được thiết kế để cung cấp một cấp độ bảo mật cao hơn Basic authentication. Nó được mô tả trong RFC 2617. Trong digest authentication, username assword không đươc base 64 trực tiếp mà nó sử dụng 1 giá trị mà web server gửi tới gọi là none, như vậy xâu authentication gửi đi là encode MD5 của username assword +none. Mức bảo mật có cao hơn vì MD5 là mã khóa 1 chiều, nhưng MD5 cũng có thể decode được bằng thuật toán bruteforce. NTML Là sự kết hợp giữa thuânt toán chứng thực windows(windows authentication) trên giao thức HTTP. Nó hiếm được sử dụng hơn Basic và Digest vì chỉ làm việc giữa trình duyệt Internet
explorer và IIS web server nhưng hầu hết các site trên internet đều mong muốn người sử dụng có thể dùng nhiều trình duyệt khác nhau. Do vậy NTML thường chỉ được sử dụng trong các mạng INTRANET microsoft. Khả năng an toàn cao nhưng có thể bị tấn công bằng thuật toán bruteforce. II.3.2 Web form Authentication II.3.2.1 Password guessing Kĩ thuật dò password là kĩ thuật cơ bản và đơn giản nhất trong trường hợp hacker muốn đoán password để đăng nhập vào 1 trang web nào đó Dưới đây là 1 ví dụ về cách thức tấn công dò passord, cách thức tấn công này thường áp dụng là phương pháp cuối cùng vì đòi hỏi thời gian lâu nếu password cần đoán có số lượng ký tự lớn và nhiều loại ký tự:
Keep-Alive: 300 Connection: keep-alive Referer: http://www.hackerscenter.com/error.asp?type=nologin Cookie: __utmz=116171679.1179280504.1.1.utmccn=(direct)|ut mcsr=(direct)| utmcmd=(none); __utma=116171679.1609349937.1179280504.1180427494. 1180499458.8; bblastactivity=0; bblastvisit=1179283053; __utmb=116171679; __utmc=116171679; ASPSESSIONIDAQSQRSCT=ODOCHKACLPMKIAFNOLDBMDAM Content-Type: application/x-www-form-urlencoded Content-Length: 44 user=_____&password=___&submit=LogIn II.3.3 Web authorization II.3.3.1 Phân loại các hình thức tấn công Leo thang đặc quyền theo chiều ngang(horizontal privilege escalation). Đây là hình thức 1 user truy cập thông tin trái phép của 1 user khác trong hệ thống web application. Chẳng hạn trong hệ thống tài khoản ngân hàng, 1 user chỉ được phép xem và giao dịch với tài khoản của chính user đó. Nhưng hệ thống web application lại tiềm ẩn lỗi và 1 user này có thể xem và giao dịch dưới vai trò là 1 user khác. Leo thang đặc quyền theo chiều dọc(vertical privilege escalation). Đó là hình thức hacker từ 1 user bình thường trong hệ thống bằng cách khai thác lỗi của web application, hacker nâng quyền tải khoản của mình lên thành tài khoản có quyền cao hơn như tài khoản quản trị hệ thống. Từ đó nắm được quyền quản trị hệ thống. Xâm nhập tập tin trái phép(arbitrary file access). Đó là hình thức hacker xâm nhập các file không thuộc hệ thống web aplication nhờ vào lỗi của chính hệ thống web application. Chẳng hạn như truy cập các file trái phép của hệ điều hành như boot.ini hoặc /etc/passwd II.3.3 Web authorization
II.3.3.1 Phân loại các hình thức tấn công Leo thang đặc quyền theo chiều ngang(horizontal privilege escalation). Đây là hình thức 1 user truy cập thông tin trái phép của 1 user khác trong hệ thống web application. Chẳng hạn trong hệ thống tài khoản ngân hàng, 1 user chỉ được phép xem và giao dịch với tài khoản của chính user đó. Nhưng hệ thống web application lại tiềm ẩn lỗi và 1 user này có thể xem và giao dịch dưới vai trò là 1 user khác. Leo thang đặc quyền theo chiều dọc(vertical privilege escalation). Đó là hình thức hacker từ 1 user bình thường trong hệ thống bằng cách khai thác lỗi của web application, hacker nâng quyền tải khoản của mình lên thành tài khoản có quyền cao hơn như tài khoản quản trị hệ thống. Từ đó nắm được quyền quản trị hệ thống. Xâm nhập tập tin trái phép(arbitrary file access). Đó là hình thức hacker xâm nhập các file không thuộc hệ thống web aplication nhờ vào lỗi của chính hệ thống web application. Chẳng hạn như truy cập các file trái phép của hệ điều hành như boot.ini hoặc /etc/passwd III. Phân loại các cách thức tấn công dựa vào lỗi phía web application Đặc điểm chung của các lỗ hổng phía web application là sự quá tin cậy vào dữ liệu được đẩy lên từ phía web client(reliability of Client-side data). Các nhà lập trình thiếu chuyên nghiệp thường không bao giờ kiểm tra xem thông tin người dùng đưa lên có đúng quy cách hay không, có được phép đưa yêu cầu như thế hay không? Mà lại thường xuyên nhận thông tin từ phía client, không qua kiểm tra mà đưa trực tiếp vào hàm xử lý yêu cầu của client. Điều này sẽ gây ra lỗi nếu thông tin đưa vào là không đúng quy cách( chẳng hạn dữ liệu số mà client lại gửi lên là 1 string), nếu thông tin là đúng quy cách thì cũng rất có khả năng đó là yêu cầu thông tin trái phép mà lại bị bỏ qua. III.1 Thiếu kiểm tra xâu truy vấn GET (Query String) Xét truy vấn có dạng sau: http://www.mail.com/mail.aspx?mailbo...any=acme%20com Nhìn vào Url này ta thấy, đây có thể là yêu cầu check mail từ người có yêu cầu là
[email protected]. Điều đặc biệt là tham số GET mailbox=joe này có thể thay đổi trực tiếp trên Url của web browser. Nếu phía web application thiếu kiểm tra thì joe có địa chỉ mail
[email protected] có khả năng đọc mail của người khác như peter bằng cách gõ lên Url địa chỉ sau: http://www.mail.com/mail.aspx?mailbo...any=acme%20com III.2 Thiếu kiểm tra Post data (Query String) Các tham số dữ liệu kiểu post không hiện trực tiếp lên url của web browser nhưng có rất nhiều các công cụ riêng cũng như 1 số add ons cho các web browser cho phép theo dõi và chỉnh sửa các tham số này. Dưới đây là add-ons tamper data cho firefox II.3.3 Web authorization II.3.3.1 Phân loại các hình thức tấn công Leo thang đặc quyền theo chiều ngang(horizontal privilege escalation). Đây là hình thức 1 user truy cập thông tin trái phép của 1 user khác trong hệ thống web application. Chẳng hạn trong hệ thống tài khoản ngân hàng, 1 user chỉ được phép xem và giao dịch với tài khoản của chính user đó. Nhưng hệ thống web application lại tiềm ẩn lỗi và 1 user này có thể xem và giao dịch dưới vai trò là 1 user khác. Leo thang đặc quyền theo chiều dọc(vertical privilege escalation). Đó là hình thức hacker từ 1 user bình thường trong hệ thống bằng cách khai thác lỗi của web application, hacker nâng quyền tải khoản của mình lên thành tài khoản có quyền cao hơn như tài khoản quản trị hệ thống. Từ đó nắm được quyền quản trị hệ thống.
Xâm nhập tập tin trái phép(arbitrary file access). Đó là hình thức hacker xâm nhập các file không thuộc hệ thống web aplication nhờ vào lỗi của chính hệ thống web application. Chẳng hạn như truy cập các file trái phép của hệ điều hành như boot.ini hoặc /etc/passwd III. Phân loại các cách thức tấn công dựa vào lỗi phía web application Đặc điểm chung của các lỗ hổng phía web application là sự quá tin cậy vào dữ liệu được đẩy lên từ phía web client(reliability of Client-side data). Các nhà lập trình thiếu chuyên nghiệp thường không bao giờ kiểm tra xem thông tin người dùng đưa lên có đúng quy cách hay không, có được phép đưa yêu cầu như thế hay không? Mà lại thường xuyên nhận thông tin từ phía client, không qua kiểm tra mà đưa trực tiếp vào hàm xử lý yêu cầu của client. Điều này sẽ gây ra lỗi nếu thông tin đưa vào là không đúng quy cách( chẳng hạn dữ liệu số mà client lại gửi lên là 1 string), nếu thông tin là đúng quy cách thì cũng rất có khả năng đó là yêu cầu thông tin trái phép mà lại bị bỏ qua. III.1 Thiếu kiểm tra xâu truy vấn GET (Query String) Xét truy vấn có dạng sau: http://www.mail.com/mail.aspx?mailbo...any=acme%20com Nhìn vào Url này ta thấy, đây có thể là yêu cầu check mail từ người có yêu cầu là
[email protected]. Điều đặc biệt là tham số GET mailbox=joe này có thể thay đổi trực tiếp trên Url của web browser. Nếu phía web application thiếu kiểm tra thì joe có địa chỉ mail
[email protected] có khả năng đọc mail của người khác như peter bằng cách gõ lên Url địa chỉ sau: http://www.mail.com/mail.aspx?mailbo...any=acme%20com III.2 Thiếu kiểm tra Post data (Query String) Các tham số dữ liệu kiểu post không hiện trực tiếp lên url của web browser nhưng có rất nhiều các công cụ riêng cũng như 1 số add ons cho các web browser cho phép theo dõi và chỉnh sửa các tham số này. Dưới đây là add-ons tamper data cho firefox Như vậy thay vì đưa tham số Get mailbox=joe trên Url, ta có thể truyền qua tham số kiểu Post có thể an toàn hơn vì ẩn đối với người dùng. Nhưng với hacker thì đấy không phải là vấn đề phức tạp. III.3 Uri Một số nhà phát triển web thường chứa các tài liệu quan trọng trong các thư mục khác nhau hoặc tài liệu của các user trong hệ thống trong các thư mục khác nhau Ví dụ báo cáo của các user: http://ctyA.com/quangtt/baocao.doc http://ctyA.com/trungtv/baocao.doc http://ctyA.com/administration/baocao.doc Như vậy trong nhiều trường hợp, quangtt hoàn toàn có thể lấy tài liệu báo cáo của administrator hay trungtv và bất kỳ người nào khác. III.4 HTTP header Trước đây một số web firewall chốn DOS attack thường có dạng là 1trang web nhỏ và yêu cầu người dùng kích vào đó thì mới được đăng nhập vào trang web. Dây là một kỹ thuật tin cậy vào tham số HTTTP referer luôn trỏ đến trang web trước đó mà người dùng truy cập tới.
các DOS agent như flash không tự chỉnh sửa được tham số này. Nhưng hiện nay ngay cả Xflash cũng có kỹ thuật vượt qua firewall kiểu này. Như vậy quá tin cậy vào HTTP header cũng là 1 yếu tố khiến web application có thể bị khai thác. III.5 Cookies Cookies là dạng phổ biến để quản lý phiên giao dịch giữa client và server. Chẳng hạn web server có thể sử dụng cookie để xem user đã đăng nhập hay chưa, nếu đăng nhập rồi thì không yêu cầu đăng nhập lần nữa khi user xem 1 trang thông tin khác. Khi user đăng nhập, webserver sẽ gửi cookies kèm theo trong response(nếu có) các request tiếp sau của client phải truyền kèm thông số cookies trong HTTP header. Cookie: HIM_on_off=1; HIM_daucu=1; HIM_method=0; HIM_ckspell=1; bbpassword=d0ec83b9a9b534c02b1615aeaf6d86a2; bblastvisit=1179795591; bbuserid=26097; bblastactivity=0; __utmz=139177842.1179795491.1.1.utmccn=(direct)|ut mcsr=(direct)|utmcmd=(none); __utma=139177842.2116029114.1179795491.1180170773. 1180582665.5; __utmb=139177842; __utmc=139177842; PHPSESSID=upp7d9bhlusbn76pfj0ucggig5; bbsessionhash=1994461ff432120599c2a96e743b68bd Như vậy, cookies cũng có vai trò xác thực client với web application. Nếu hacker ăn cắp được cookies của client thì hacker hoàn toàn có thể giả mạo khách hàng khi giao dịch với web application. Một số nhà lập trình không chuyên còn lưu user name và password, thông tin cá nhân của client dưới dạng clear text, điều này thực sự rất nguy hiểm. III.6 Trường tham số ẩn(Hidden fields) HTML tồn tại dưới dạng clear text nên người sử dụng hoàn toàn có thể view source của trang web đó. Trong quá trình view source, ta hoàn toàn có thể thấy các tham số ứng với 1 thẻ form trong tài liệu HTML. Trong số các tham số đó có thể bao gồm các tham số ẩn