Từ đó luận văn khảo sát một số công cụ phần mềm nhằm phát hiện các nguy cơ bảo mật để giúp người lập trình có thể ngăn chặn sự tấn công của chúng, giảm thiểu khả năng các ứng dụn
Trang 1ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
TRỊNH THỊ DỊU
NGHIÊN CỨU MỘT SỐ DẠNG LỖ HỔNG BẢO MẬT, CÔNG CỤ PHÁT
HIỆN CHÚNG VÀ ỨNG DỤNG ĐỂ KIỂM THỬ AN NINH TRÊN
TRANG WEB TRUONGNHA.COM
LUẬN VĂN THẠC SĨ: CÔNG NGHỆ THÔNG TIN
Hà Nội - 2012
Trang 2ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
TRỊNH THỊ DỊU
NGHIÊN CỨU MỘT SỐ DẠNG LỖ HỔNG BẢO MẬT, CÔNG CỤ PHÁT HIỆN CHÚNG VÀ ỨNG DỤNG ĐỂ KIỂM THỬ AN NINH
TRÊN TRANG WEB TRUONGNHA.COM
Ngành: Công nghệ thông tin Chuyên ngành: Công nghệ phần mềm Mã số: 60 48 10
LUẬN VĂN THẠC SĨ: CÔNG NGHỆ THÔNG TIN
NGƯỜI HƯỚNG DẪN KHOA HỌC: TS TRƯƠNG ANH HOÀNG
Hà Nội - 2012
Trang 3MỤC LỤC
2
LỜI CAM ĐOAN 3
LỜI CẢM ƠN 4
DANH MỤC BẢNG BIỂU Error! Bookmark not defined DANH MỤC HÌNH VẼ 7
CHƯƠNG 1 GIỚI THIỆU 12
1.1 Tính cấp thiết của đề tài 12
1.2 Mục tiêu đề tài 13
1.3 Bố cục luận văn 13
1.4 Tổng quan về vấn đề bảo mật trên nền Web 13
1.5 Một số nguyên nhân phổ biến cho ứng dụng Web mất tính an toàn 14
1.6 Thống kê các loại tấn công 14
CHƯƠNG 2 MỘT SỐ NGUY CƠ AN NINH THƯỜNG GẶP 16
2.1 Tấn công DoS 16
2.1.1 Giới thiệu về DoS 16
2.1.2 Mục đích và các dạng tấn công DoS 16
2.1.3 Tấn công DDoS 19
2.2 Cross-Site Scripting (XSS) 22
2.2.1 Tổng quan về XSS 22
2.2.2 Ảnh hưởng do XSS gây ra 22
2.2.3 Phân loại 23
2.2.4 Cách phát hiện ra sâu XSS 26
2.2.5 Các phương pháp ngăn chặn lỗ hổng bảo mật XSS 26
2.3 Tổng quan SQL Injection 26
2.3.1 Định nghĩa 26
2.3.2 Các kỹ thuật tấn công SQL Injection 27
Bảng 2.1: Các mẫu đầu vào 28
2.3.3 Những ảnh hưởng gây ra của SQL Injection 30
2.3.4 Các phương pháp phòng chống SQL Injection phổ biến 31
CHƯƠNG 3 MỘT SỐ CÔNG CỤ PHÁT HIỆN NGUY CƠ AN NINH 32
3.1 Netsparker 32
3.2 Websecurify 34
Trang 43.3 Acunetix 37
3.4 WebScarab 45
3.5 Havij 46
3.6 Burp Suite 48
3.7 Wapiti 51
3.8 Exploit-Me 51
3.9 W3af 53
3.10 Công cụ tấn công DoS 55
CHƯƠNG 4 THỰC NGHIỆM VÀ PHÂN TÍCH KẾT QUẢ 58
4.1 Acunetix 58
4.1.1 Thực nghiệm 58
4.1.2 Phân tích thực nghiệm 58
4.2 BurpSuite 59
4.2.1 Thực nghiệm 59
4.2.2 Phân tích thực nghiệm 61
4.3 Netsparker 62
4.3.1 Thực nghiệm 62
4.3.2 Phân tích thực nghiệm 62
4.4 Skipfish 64
4.4.1 Thực nghiệm 64
4.4.2 Phân tích thực nghiệm 66
4.5 W3af 66
4.5.1 Thực nghiệm 66
4.5.2 Phân tích thực nghiệm 67
4.6 Websecurify 69
4.6.1 Thực nghiệm 69
4.6.2 Phân tích thực nghiệm 70
4.7 Tổng hợp đánh giá 70
Bảng 4.1: Danh sách các lỗ hổng trên các công cụ 71
CHƯƠNG 5 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 74
TÀI LIỆU THAM KHẢO 75
Trang 5CHƯƠNG 1 GIỚI THIỆU
Nội dung của chương 1 trình bày về tính cấp thiết, mục tiêu, bố cục của đề tài và tìm hiểu chung những vấn đề về bảo mật anh ninh trên nền Web, đưa ra một vài nguyên nhân gây ra mất an toàn an ninh trên các ứng dụng Web và các lỗ hổng thường thấy nhiều nhất hiện nay
1.1 Tính cấp thiết của đề tài
Với sự phát triển rất nhanh của các ứng dụng trên nền Web , việc bảo mật an ninh an toàn cho các trang Web là một lĩnh vực đặc biệt quan vì nó đư ợc truy cập mọi lúc mọi nơi và bất
kỳ ai Tuy vậy không phải bất kỳ nhà phát triển phần mềm Web nào cũng chú tâm đến việc bảo mật anh ninh, vì vậy nhiều ứng dụng Web vẫn tồn tại với các nguy cơ an ninh/an toàn/bảo mật (security vularability) và gây ra nhiều thiệt hại khi bị tấn công Tuy nhiên việc tìm kiếm và phát hiện ra các nguy cơ an ninh thủ công khá khó khăn trong khi đó có nhiều nguy cơ an ninh có thể phát hiện được bằng các công cụ tự động
Bên cạnh đó, các loại nguy cơ an ninh không ít, và cũng có rất nhiều công cụ tự động phát hiện nguy cơ bảo mật nên người phát triển phần mềm khi muốn kiểm tra mức độ an ninh an toàn của trang web của mình cũng gặp phải nhiều khó khăn Chính vì vậy đề tài này nghiên cứu một số kiểu tấn công đang phổ biến và các công cụ tự động phát hiện nguy cơ an ninh an toàn đồng thời thử nghiệm chúng vào phần mềm “Trường Nhà” ở trang web
http://truongnha.com Ứng dụng “Trường Nhà” là một trang Web quản lý trường học phổ
thông và hiện đang được xây dựng bởi một đội phát triển phần mềm Chính vì vậy, đề tài sẽ đi thử nghiệm vào ứng dụng này để đưa ra lỗ hổng và một vài khuyến cáo cho đội phát triển phần mềm và từ đó kiểm tra được tính đúng đắn của kết quả cũng như các khuyến cáo của luận văn đưa ra
1.2 Mục tiêu đề tài
Mục tiêu của đề tài là trình bày được tổng quan và cập nhật về các nguy cơ bảo mật, các cách thức tấn công và các cách phát hiện lỗ hổng bảo mật trên các hệ thống Web và đi sâu vào một vài loại xâu trên nền Web nổi tiếng và nguy hiểm hiện nay Từ đó luận văn khảo sát một số công cụ phần mềm nhằm phát hiện các nguy cơ bảo mật để giúp người lập trình có thể ngăn chặn sự tấn công của chúng, giảm thiểu khả năng các ứng dụng web bị ảnh hưởng bởi những lỗ hổng đó Cuối cùng luận văn đi sâu vào p hát hiện lỗ hổng cho ứng dụng hệ thống
quản lý trường học: http://truongnha.com dựa trên các công cụ đó
1.3 Bố cục luận văn
Luận văn bao gồm các chương sau:
Chương 1: Tổng quan an toàn bảo mật trên nền Web: Chương này giới thiệu về vấn
đề bảo mật, vai trò quan trọng của bảo mật trên nền web và các nguy cơ gây ra bởi việc thiếu an toàn bảo mật cho ứng dụng web
Trang 6Chương 2: Tấn công an toàn thông tin trong ứng dụng Web: Chương này mô tả về
một vài kỹ thuật tấn công an toàn Web phổ biến (DoS/DDoS, XSS, SQL injection), ví dụ
và cách thức tấn công của chúng
Chương 3: Giới thiệu một vài công cụ tìm kiếm lỗ hổng bảo mật: Chương này gi ới
thiệu một vài công cụ hỗ trợ trong việc tìm kiếm lỗ hổng trên nền Web Bên cạnh đó , chương này cũng nêu lên cách thức làm việc và các lỗ hổng mà các ứng dụ ng này có thể phát hiện ra, đưa ra được nhận xét về các công cụ
Chương 4: Thực nghiệm và phân tích kết quả: Thực nghiệm chạy một số công cụ ở
chương 3 vào việc tìm các lỗ hổng c ho ứng dụng Web là http://truongnha.com và phân
tích cách thức phương pháp chạy để tìm ra lỗi Chương 4 cũng đưa ra được một vài khuyến cáo cho các nhà phát triển phần mềm
Chương 5: Kết luận và hướng phát triển: Chương này đi trình bày những kết quả đạt
được của luận văn và hướng phát triển trong tương lai
1.4 Tổng quan về vấn đề bảo mật trên nền Web
Ngày nay, với sự phát triển mạnh mẽ của công nghệ thông tin và đặc biệt là sự ra đời hàng loạt của các trang Web đã mang l ại cho con người rất nhiều tiện ích cho các doanh nghiệp Các hoạt động giao dịch trực tuyến như thương mại điện tử hay thanh toán trực tuyến ngày càng phổ biến và được thực hiện thông qua các ứng dụng Web Ở bất kỳ đâu, khi một máy tính có nối mạng internet, con người có thể thực hiện các giao dịch của mình một cách thuận tiện và nhanh chóng Mọi thông tin của người dùng sẽ được lưu trên Web Nếu như thông tin đó bị sửa đổi với ý đồ xấu, câu truy vấn cơ sở dữ liệu có thể bị thay đổi cấu trúc, từ đó kết quả trả về sẽ khác với ý muốn của người lập trình, hoặc những kẻ lạc danh có thể đánh cắp thông tin, gây lên những thiệt hại lớn Có thể thấy việc xây dựng các trang Web động cho phép xây dựng câu truy vấn động từ đầu vào do người sử dụng cung cấp, chúng tiềm ẩn một nguy cơ mất an toàn cao nếu như không có một cơ chế kiểm tra dữ liệu đầu vào một cách chặt chẽ Tóm lại, các ứng dụng Web luôn luôn tiềm ần và có nguy cơ bị tấn công bởi các kẻ tấn công với ý đồ xấu, vậy nên vấn đề bảo mật trên nền Web luôn là cấp thiết
1.5 Một số nguyên nhân phổ biến cho ứng dụng Web mất tính an toàn
Dưới đây là một vài nguyên nhân có thể gây ra những điểm yếu đó cho ứng dụng Web:
o Thiếu nhận thức về an toàn cho ứng dụng Web của người dùng và người lập trình
o Thiếu các giải pháp bảo mật sẵn có
o Sự thúc ép sản phẩm nhanh chóng, dẫn đến các nhà lập trình làm nhanh và ẩu, quên đi việc áp dụng các giải pháp cho bảo mật
1.6 Thống kê các loại tấn công
Vấn đề an toàn b ảo mật cho một ứng dụng Web là m ột vấn đề hết sức quan trọng, bởi nó ảnh hưởng tới chất lượng an ninh của cả một hệ thống cơ quan Với tình trạng hiện tại khi
Trang 7hàng loạt các kẻ tấn công lợi dụng sơ hở của phần mềm để tấn công vào hệ thống nhằm phá hủy, ăn cắp dữ liệu thì việc làm này lại càng cấp bách và cần thiết
Nhìn biểu đồ Error! Reference source not found chúng ta thấy rằng rất nhiều loại tấn
công tồn tại nhưng trong đó có tấn công liên trang (XSS), tấn công từ chối dịch vụ (Denial of Service) và SQL Injection là chủ yếu Tiếp theo chúng ta sẽ đi nghiên cứu chi tiết về 3 loại tấn công này trong chương 2 và một vài lỗ hổng ít được chú ý hơn, chúng sẽ được miêu tả tại chương 4 khi thực thi các công cụ trên ứng dụng “Trường Nhà”
Trang 8CHƯƠNG 2 MỘT SỐ NGUY CƠ AN NINH THƯỜNG GẶP
Chương này mô tả về một vài kỹ thuật tấn công an toàn Web phổ biến như: DoS/DDoS, XSS, SQL injection, đưa ra ví dụ và cách thức tấn công của chúng
2.1 Tấn công DoS
2.1.1 Giới thiệu về DoS
Một trong những cách thức tấn công trang web có từ lâu nhưng đến giờ vẫn tồn tại và gây
ra nhiều thiệt hại cho các tổ chức mạng mà các kẻ tấn công thường sử dụng rất nhiều hiện nay
là dạng tấn công từ chối dịch vụ (DoS) DoS là một phương pháp tấn công làm tê liệt hoàn toàn máy chủ, khiến người dùng không thể truy cập được
Gần đây có rất nhiều trang web hay các tổ chức bị nhiễm dạng tấn công DoS, ví dụ như trang web của Bkav đã bị tê liệt trong suốt mấy ngày vì bị tin tặc tấn công từ chối dịch vụ DDoS Microsoft (15 tháng 8 năm 2003) đã chịu đợt tấn công DoS cực mạnh [1] Gây ra những thiệt hại không nhỏ Cuộc chiến chống lại những cuộc tấn công từ chối dịch vụ DDoS được coi là vô cùng khó khăn
2.1.2 Mục đích và các dạng tấn công DoS
Tấn công theo phương pháp DoS nhằm mục đích sau:
Chiếm băng thông mạng và làm hệ thống mạng bị quá tải, khi đó hệ thống mạng sẽ không có khả năng đáp ứng những dịch vụ khác cho người dùng bình thường
Cố gắng làm ngắt kết nối giữa hai máy, và ngăn chặn quá trình truy cập vào dịch vụ
Cố gắng ngăn chặn các dịch vụ không cho người khác có khả năng truy cập vào
Khi tấn công DoS xảy ra người dùng có cảm giác khi truy cập vào dịch Các tài nguyên
mà kẻ tấn công thường sử dụng để tấn công như là: Băng thông của hệ thống mạng, bộ nhớ, ổ đĩa, và CPU hay cấu trúc dữ liệu đều là mục tiêu của tấn công DoS
2.1.3 Tấn công DDoS
2.1.3.1 Khái niệm về DDoS
Tấn công DDoS là sự tấn công từ một mạng máy tính được thiết kế để tấn công tới một đích cụ thể nào đó Dạng tấn công này cũng nhằm mục đích giống như DoS, tuy nhiên nó được thiết lập trên nhiều địa chỉ IP khác nhau và cùng tấn công vào một đích
2.1.3.2 Phân loại tấn công DDoS
Có rất nhiều kỹ thuật tấn công DDoS, dựa trên mục đích của kiểu tấn công này, ta có thể chia DDoS thành hai loại dựa trên mục đích tấn công: Làm cạn kiệt băng thông và làm cạn
kiệt tài nguyên hệ thống Error! Reference source not found dưới đây là sơ đồ mô tả sự
phân loại các kiểu tấn công DDoS [4]
Trang 92.2 Cross-Site Scripting (XSS)
2.2.1 Tổng quan về XSS
XSS là một trong những loại tấn công Web phổ biến nhất, mục đính của chúng là nhúng các kịch bản (script) chứa mã độc vào trong một trang web và thực thi chúng ở phía máy khách Một trang Web có khả năng dễ bị tấn công XSS nhất là khi ứng dụng không kiểm tra
dữ liệu vào và tạo ra một đầu ra ngoài tầm kiểm soát của trang đó Lỗ hổng này dẫn tới rất nhiều loại tấn công, ví dụ: đánh cắp các thông tin mật Ngay cả những nhà an toàn thông tin lớn nhât như: McAfee, Symantec, Verisign cũng đã có ít nhất 30 lỗ hổng XSS trên trang Web của họ [2]
2.2.2 Phân loại
Dưới đây là một vài kiểu tấn công dạng XSS:
Tấn công liên trang dạng lưu trữ (Stored Cross site scripting)
Tấn công liên trang dạng phản chiếu (Reflected Cross site scripting)
Tấn công liên trang dựa trên DOM (DOM-based Cross site scripting)
a) Stored XSS
Stored Cross site scripting: Là một loại tấn công nguy hiểm nhất của XSS Các ứng dụng Web cho phép người sử dụng lưu trữ dữ liệu có tiềm năng gây ra loại tấn công này Stored XSS là cách tấn công mà mã độc được lưu lại trên máy chủ Web thông qua cách chèn một đoạn script nguy hiểm (thường Javascript) vào ứng dựng Web thông qua một chức năng nào
đó như là gửi bài, viết lời bình Sau đó những người dùng sau đó khi truy cập vào các chức năng này sẽ bị dính mã độc từ website có chèn mã của kẻ tấn công đó giống như mô tả ở Hình 2.1 sau
Hình 2.1: Mô hình tấn công XSS
Trang 10Ngày nay thì các ứng dụng web không còn là các trang web tĩnh nữa, mà thay vào đó là các trang web động với dữ liệu được lấy và thay đổi từ rất nhiều nguồn khác nhau Dữ liệu này chứ đựng hỗn hợp như là: text, hình ảnh và các thẻ HTML như <p>, <img>, <script> Kẻ tấn công sẽ sử dụng tính năng „comment‟ của ứng dụng web để chèn các bình luận (comment)
có chứa các thẻ script Mỗi người dùng ghé thăm sẽ tải về đoạn bình luận đó và thực thi nó trên trình duyệt của họ Giống như chức năng bình luận của Facebook hoặc những diễn đàn, kẻ tấn công có thể sử dụng để tấn công theo phương pháp này
b) Reflected XSS
Kiểu tấn công Reflected XSS được biết đến như kiểu loại 1 (non-persistent XSS), là loại tấn công XSS thường thấy nhất ngày nay Khi một ứng dụng có thể bị nhiễm loại tấn công này, nó sẽ không kiểm tra các đầu vào thông qua yêu cầu của máy khách Chương trình của kẻ tấn công được viết bởi Javascript, hoặc ActionScript, VBScript Những kẻ tấn công dạng này thường làm cho những lỗ hổng được cài đặt, ăn trộm cookies của nạn nhận, thay đổi nội dung của trang web Một trong những vấn đề quan trọng về việc khai thác các điểm yếu lỗ hổng XSS đó là việc mã hóa các ký tự Trong một số trường hợp, các máy chủ Web hoặc ứng dụng Web không thể lọc được một vài ký tự mã hóa Ví dụ, ứng dụng Web có thể lọc được thẻ <script> nhưng lại không thể lọc được '%3cscript%3e'
Hình 2.2: Mô hình tấn công Reflected XSS Trong trường hợp này, kẻ tấn công gửi một email cho nạn nhân có chứa mã độc là một đường liên kết để lấy cookie Nạn nhân sau khi nhận mail, kích lên liên kết đó và từ đó khởi tạo một yêu cầu HTTP tới ứng dụng Web và gây nhiễm cho ứng dụng Đoạn JavaScript có chứa mã độc sau đó được gửi trở lại trình duyệt của nạn nhân
2.2.3 Cách phát hiện ra sâu XSS
Trong những trang Web bị dính sâu XSS, thường là khi người sử dụng đăng nhập hoặc gửi một vài thông tin nào đó tớ máy chủ, mà kết quả được gửi về có liên quan tới thông tin của chuỗi người dùng đã nhập thì khả năng cao là đã bị dính sâu XSS Kẻ tấn công thường
Trang 11dùng thẻ <script> để nhúng vào các form của ứng dụng hoặc cũng có thể đưa vào URL Bạn
có thể thử đăng nhập với chuỗi: <script>alert(“XSS found”)</script>, nếu thấy xuất hiện một popup thì ứng dụng đó đã bị nhiễm XSS, hoặc tương tự khi nhúng nó vào URL
2.2.4 Các phương pháp ngăn chặn lỗ hổng bảo mật XSS
Để các trang Web có thể tránh được việc tấn công XSS, những nhà phát triển phần mềm nên kiểm tra cẩn thận hơn:
Kiểm tra và chỉ chấp nhận những dữ liệu hợp lệ
Có chức năng nắm giữ và từ chối nhận các dữ liệu hỏng
Thực hiện kiểm tra và sàng lọc dữ liệu một cách liên tục
2.3 Tổng quan SQL Injection
2.3.1 Định nghĩa
SQL injection là một kỹ thuật được sử dụng cho việc muốn tìm ra những điểm yếu kém của ứng dụng về cơ sở dữ liệu Nó thường được sử dụng trên các ứng dụng Web, khi mà yêu cầu nhập thông tin từ người dùng để xử lý Kỹ thuật này thường thấy trong các trường hợp yêu cầu đăng nhập vào các ứng dụng hay bất kỳ một khung đăng thông tin từ người dùng mà ứng dụng sử dụng câu truy vấn SQL injection có thể xuất hiên hiện trên bất kỳ ứng dụng web
có sử dụng các công nghệ như: ASP, ASP.NET và PHP với SQL Ví dụ như khi người sử dụng nhập thông tin vào trang đăng nhập và yêu cầu được gửi đi những thông tin về người dùng và mật khẩu sẽ được mang đi để so sánh với một tập hợp các người dùng hợp pháp trong
cơ sở dữ liệu [9]
2.3.2 Các kỹ thuật tấn công SQL Injection
Có 4 loại tấn công thuộc SQL Injection: Đăng nhập không cần mật khẩu, sử dụng câu lệnh SELECT, sử dụng các Stored-procedures, sử dụng câu lệnh INSERT [8]
2.3.3 Những ảnh hưởng gây ra của SQL Injection
Một khi kẻ tấn công đã nhận ra hệ thống có điểm yếu và có thể tiêm mã độc SQL Injection vào, chúng sẽ đưa vào các câu lệnh hoặc truy vấn SQL thông qua một trường nhập đầu vào nào đó Điều đó tương đương với việc giao cơ sở dữ liệu của bạn cho kẻ tấn công và cho phép kẻ tấn công thực thi bất kỳ một lệnh SQL nào đó bảo gồm cả câu lệnh “DROP TABLE” để xóa hẳn cơ sở dữ liệu của bạn đi
Kẻ tấn công có lẽ thực thi những trạng thái SQL một cách tùy ý trên các hệ thống có khả năng tiêm nhiễm đó Điều này gây nguy cho toàn bộ cơ sở dữ liệu của bạn hoặc làm phơi bày
ra những thông tin nhạy cảm Phụ thuộc vào back-end của cơ sở dữ liệu, khả năng tiêm nhiễm SQL Injection dẫn đến nhiều mức độ của việc truy cập dữ liệu/hệ thống của kẻ tấn công Nó
có khả năng thực thi những truy vấn tồn tại, UNION các dữ liệu một các tùy ý, sử dụng các lựa chọn con hoặc thêm vào các truy vấn theo sau
Trang 122.3.4 Các phương pháp phòng chống SQL Injection phổ biến
Các loại tấn công SQL Injection đều dựa trên những điểm yếu về cơ sở dữ liệu Thông thường các nhà lập trình thường quên đi việc ngăn chặn lỗi bảo mật khi lập trình dẫn đến những sơ hở này