3.2.1 SQL Injection
Trang web thử nghiệm là một trang đơn giản đƣợc viết bằng ngôn ngữ PHP nhằm truy xuất và hiển thị thông tin về các loại điện thoại di động. Thông tin dữ liệu đƣợc lƣu trữ trong cơ sở dữ liệu MySQL.
- Bƣớc 1: Trong vai trò hacker, tiến hành truy cập trang web và dò tìm kiếm lỗ hổng SQL Injection.
- Bƣớc 2: Khai thác lỗ hổng SQL Injection và lấy các thông tin nhạy cảm trong cơ sở dữ liệu.
- Bƣớc 3: Trong vai trò ngƣời phát triển trang web, thực hiện khắc phục các lỗ hổng SQL Injection.
- Bƣớc 4: Thử lại khả năng khai thác lỗ hổng SQL Injection sau khi đã khắc phục lỗ hổng.
3.2.2 XSS
Trang web thử nghiệm là một trang đơn giản viết bằng PHP nhằm hiển thị thông tin mà ngƣời dùng nhập vào.
Kịch bản thử nghiệm:
- Bƣớc 1: Trong vai trò hacker, tiến hành truy cập trang web và dò tìm kiếm lỗ hổng XSS.
- Bƣớc 2: Khai thác lỗ hổng XSS bằng cách lừa ngƣời dùng click vào một link có chứa script. Khi script đƣợc thực thi tại máy ngƣời dùng thì có thể thực hiện nhiều hành vi nhƣ đánh cắp cookie, phát tán mã độc …
- Bƣớc 3: Trong vai trò ngƣời phát triển trang web, thực hiện khắc phục các lỗ hổng XSS.
- Bƣớc 4: Thử lại khả năng khai thác lỗ hổng XSS sau khi đã khắc phục lỗ hổng.
3.2.3 Directory Traversal
Trang web thử nghiệm là một trang đơn giản đƣợc viết bằng ngôn ngữ PHP nhằm hiển thị nội dung của các file.
- Bƣớc 1: Trong vai trò hacker, tiến hành truy cập trang web và dò tìm kiếm lỗ hổng Directory Traversal.
- Bƣớc 2: Khai thác lỗ hổng Directory Traversal và hiển thị nội dung các file nằm trên máy chủ web.
- Bƣớc 3: Trong vai trò ngƣời phát triển trang web, thực hiện khắc phục các lỗ hổng Directory Traversal.
- Bƣớc 4: Thử lại khả năng khai thác lỗ hổng Directory Traversal sau khi đã khắc phục lỗ hổng.
3.2.4 CSRF
Trang web thử nghiệm là một trang web quản trị thông tin đƣợc phát triển trên nền tảng GetSimple CMS.
Kịch bản thử nghiệm:
- Bƣớc 1: Trong vai trò hacker, tiến hành truy cập trang web và dò tìm kiếm lỗ hổng CSRF. Do trang web đƣợc phát triển trên nền tảng mở là GetSimple CMS nên có thể tìm kiếm các thông tin về lỗ hổng của trang web từ các nguồn công bố lỗ hổng trên mạng Internet.
- Bƣớc 2: Khai thác lỗ hổng CSRF bằng cách lừa ngƣời dùng click vào một link, link này có khả năng thực hiện một tác vụ với quyền của ngƣời dùng nhƣ thêm, sửa, xóa bài viết… Sau khi click vào link đó thì tác vụ đƣợc thực hiện mà ngƣời dùng không hề biết.
3.2.5 Padding Oracle
Trang web thử nghiệm là một trang web đơn giản viết bằng ngôn ngữ .NET, trong đó có thành phần WebResource.axd và ScriptResource.axd chuyên dùng để hiển thị nội dung các tài nguyên của trang web.
- Bƣớc 1: Trong vai trò hacker, tiến hành truy cập trang web và dò tìm kiếm lỗ hổng Padding Oracle.
- Bƣớc 2: Sử dụng một số công cụ để khai thác lỗ hổng Padding Oracle và hiển thị nội dung các file nhạy cảm nằm trên máy chủ web.
- Bƣớc 3: Trong vai trò ngƣời phát triển và quản trị trang web, thực hiện khắc phục các lỗ hổng Padding Oracle.
- Bƣớc 4: Thử lại khả năng khai thác lỗ hổng Padding Oracle sau khi đã khắc phục lỗ hổng.
3.3 Kết quả thử nghiệm 3.3.1 SQL Injection
Trang web thử nghiệm là một trang web đơn giản hiển thị thông tin về các loại điện thoại di động sử dụng ngôn ngữ PHP kết nối với cơ sở dữ liệu MySQL.
Tìm kiếm lỗ hổng SQL Injection bằng cách thay đổi nội dung các biến đầu vào, ví dụ biến id:
H nh 18. Thay đổi nội dung biến id
Tiến hành khai thác lỗ hổng SQL Injection, lấy đƣợc các thông tin nhạy cảm trong cơ sở dữ liệu:
H nh 19. Lấy được các thông tin tài kho n đăng nhập
Nguyên nhân gây ra lỗ hổng SQL Injection là do biến đầu vào không đƣợc xử lý kỹ càng, không đƣợc lọc các từ khóa nguy hiểm:
Sau khi xử lý biến đầu vào, lọc các từ khóa nguy hiểm bằng một số hàm của PHP, thực hiện thử lại việc khai thác lỗ hổng SQL Injection:
3.3.2 XSS
Trang web thử nghiệm là một trang đơn giản viết bằng PHP nhằm hiển thị thông tin mà ngƣời dùng nhập vào. Về cơ bản nó giống nhƣ một form thƣờng đƣợc dùng trong các chức năng tìm kiếm thƣờng thấy hiện nay:
H nh 23. Form nhập dữ liệu và hiển thị
Tìm kiếm lỗ hổng XSS bằng cách thay đổi giá trị các biến đầu vào bằng các dữ liệu đặc biệt:
H nh 24. Lỗ hổng XSS
Lỗ hổng XSS cho ph p thực thi script tại máy ngƣời dùng, hacker có thể ch n các đoạn script độc hại vào link và lừa ngƣời dùng click vào nhằm cài đặt mã độc, lấy trộm cookie của ngƣời dùng.
H nh 25. Chèn một trang web khác vào link để lừa người dùng
Nguyên nhân gây ra lỗ hổng XSS cũng giống nhƣ lỗ hổng SQL Injection. Đó là do biến đầu vào không đƣợc xử lý kỹ càng, không đƣợc lọc các từ khóa nguy hiểm:
H nh 26. iến name không được xử lý kỹ càng
Sau khi xử lý biến đầu vào, chúng ta tiến hành lọc các từ khóa nguy hiểm bằng một số hàm của PHP và thực hiện thử lại việc khai thác lỗ hổng XSS:
H nh 28. Không khai thác được lỗ hổng XSS sau khi đã xử lý biến đầu vào
3.3.3 Directory Traversal
Trang web thử nghiệm là một trang đơn giản sử dụng hàm include của PHP để hiển thị các file nội dung thành phần:
H nh 29. Website thử nghiệm Directory Traversal
Khi ngƣời dùng click vào một link có dạng:
http://10.53.20.194/directory/index.php?file=football.php
thì webserver sẽ nạp một trang football.php lên và hiển thị. Nếu biến đầu vào file này không đƣợc xử lý kĩ càng thì có thể sẽ tồn tại lỗ hổng Directory Traversal. Có thể thay đổi biến đầu vào này bằng các nội dung đặc biệt để hiển thị các file khác trên hệ thống:
H nh 30. Hiển thị file boot.ini của hệ điều hành
Nguyên nhân gây ra lỗ hổng này là do biến đầu vào không đƣợc xử lý kỹ càng, không đƣợc lọc các ký tự nguy hiểm:
H nh 31. iến file không được xử lý kỹ càng
Sau khi xử lý biến đầu vào, lọc các từ khóa nguy hiểm bằng một số hàm của PHP, thực hiện thử lại việc khai thác lỗ hổng Directory Traversal:
H nh 32. Lọc các ký tự nguy hiểm
H nh 33. Không khai thác được lỗ hổng Directory Traversal sau khi khắc phục
3.3.4 CSRF
Website thử nghiệm đƣợc xây dựng trên nền tảng GetSimple CMS. Đây là một nền tảng mở đƣợc viết bằng ngôn ngữ PHP.
Chính các tính năng thêm, sửa, xóa này đã mắc lỗi CSRF do không kiểm tra kỹ càng quyền thực thi các tính năng đó. Hacker có thể gửi cho quản trị website một đƣờng link trong đó có ẩn giấu các chức năng trên:
H nh 36. Đường link hacker lừa gửi cho qu n trị viên
Thực chất bên trong file html, các đƣờng link với chức năng thêm, sửa, xóa bài viết của website đã đƣợc ẩn giấu kh o l o bằng các điểm ảnh có độ lớn bằng 0:
H nh 37. Nội dung ẩn bên trong file html
Nếu quản trị viên click vào đƣờng link mà hacker gửi cho thì sẽ vô tình thực thi các chức năng thêm, sửa, xóa nội dung của website và làm website thay đổi.
H nh 38. Các nội dung ban đầu của website đã bị vô t nh bị xóa
Để khắc phục lỗ hổng này, cần thêm một biến token để kiểm tra tính xác thực của các chức năng thêm, sửa, xóa nội dung website trƣớc khi thực hiện chúng.
3.3.5 Padding Oracle
Nội dung trang web thử nghiệm là một trang hiển thị thông tin về một ngân hàng đƣợc viết bằng ngôn ngữ .NET:
H nh 39. Trang web ngân hàng thử nghiệm Padding Oracle
Thành phần WebResource và ScriptResource khi hiển thị phần Page Source:
H nh 41. Sử dụng ScriptResource để hiển thị một file tài nguyên trên máy chủ
Khai thác lỗ hổng Padding Oracle bằng các công cụ trên mạng, mã hóa đƣờng dẫn tới các file trên máy chủ web, ví dụ file web.config:
H nh 43. Gửi truy vấn tới Webserver để phát hiện kh năng tồn tại lỗ hổng
H nh 45. Kết qu mã hóa cuối cùng xâu đường dẫn tới web.config
H nh 47. Sửa lại cấu h nh file web.config là Remote Only
KẾT LUẬN 4.1 Những kết quả đạt đƣợc
Sau khi hoàn thành, luận văn đã đạt đƣợc những kết quả nhƣ sau:
- Tìm hiểu tổng quan về an toàn thông tin cho mạng máy tính.
- Nghiên cứu khái niệm, nguyên nhân, bản chất của các lỗ hổng ứng dụng web sau: o Lỗ hổng SQL Injection o Lỗ hổng XSS o Lỗ hổng CSRF o Lỗ hổng Directory Traversal o Lỗ hổng Padding Oracle
- Nghiên cứu đƣa ra các cách khắc phục khi hệ thống gặp các lỗ hổng trên và cách phòng chống các lỗ hổng cho lập trình viên và quản trị viên website. - Xây dựng hệ thống website thử nghiệm việc tấn công và phòng chống các lỗ
hổng. Đây là môi trƣờng rất thuận tiện cho việc nghiên cứu, hiểu sâu bản chất của các lỗ hổng ứng dụng web.
Những kết quả đạt đƣợc nhƣ trên đã đáp ứng đƣợc các yêu cầu đặt ra ban đầu của luận văn là “Nghiên cứu các lỗ hổng ứng dụng web và cách phòng chống”.
4.2 Định hƣớng phát triển
Luận văn về cơ bản đã đáp ứng đƣợc các yêu cầu đặt ra ban đầu. Tuy nhiên do điều kiện hạn chế về thời gian và tài liệu nên các kết quả đạt đƣợc chƣa thể bao trùm hết toàn bộ các lỗ hổng ứng dụng web hiện nay.
Trong thời gian tới, nếu có điều kiện, luận văn sẽ tiếp tục phát triển và hoàn thiện các nội dung sau:
- Nghiên cứu và bổ sung thêm nội dung liên quan đến các lỗ hổng ứng dụng web khác, nhất là các lỗ hổng mới đƣợc phát hiện.
- Nghiên cứu thêm các biện pháp khắc phục, phòng chống các lỗ hổng ứng dụng web nhƣ sử dụng tƣờng lửa ứng dụng web.
- Xây dựng hệ thống website thử nghiệm trên nhiều nền tảng đang đƣợc sử dụng hiện nay nhƣ Linux, Windows Server.
TÀI LIỆU THAM KHẢO
1. Arnold K.L.Y, Kenneth G.P., Chris J.M. (2005), Padding Oracle Attacks on
CBC-mode Encryption with Secret and Random IVs, Information Security
Group - Royal Holloway - University of London, Surrey.
2. OWASP (2013), The Ten Most Critical Web Application Security Risks,
OWASP Foundation, Los Angeles.
3. Rizzo J., Thai Duong (2010), Practical Padding Oracle Attack, Blackhat
Europe 2010, Barcelona.
4. Serge V. (2002), CBC Padding: Security Flaws in SSL, IPSEC, WTLS,…,
Swiss Federal Institute of Technology, Zurich.
5. Simson G., Gene S. (2001), Web Security, Privacy & Commerce, 2nd Edition,