Đó là lý do em chọn đề tài “Nghiên cứu phương pháp và công cụ kiểmthử tự động tính bảo mật ứng dụng web” Mục tiêu đặt ra khi thực hiện đề tài này gồm: - Tìm hiểu tổng quan về lỗ hổng, đư
Trang 1BAN CƠ YẾU CHÍNH PHỦ
Mã số: 52.48.02.01
Hà Nội, 2016
Trang 3BAN CƠ YẾU CHÍNH PHỦ
Trang 4Hà Nội, 2016
Trang 5Ý KIẾN CỦA GIẢNG VIÊN
Trang 6MỤC LỤC
Ý KIẾN CỦA GIẢNG VIÊN ii
MỤC LỤC iii
DANH MỤC KÝ HIỆU VÀ TỪ VIẾT TẮT vi
DANH MỤC HÌNH VẼ vii
DANH MỤC BẢNG viii
LỜI CẢM ƠN ix
LỜI NÓI ĐẦU x
CHƯƠNG 1 TỔNG QUAN VỀ LỖ HỔNG BẢO MẬT 12
1.1 Khái niệm lỗ hổng bảo mật 12
1.2 Một số lỗ hổng bảo mật phổ biến 12
1.2.1 SQL Injection 12
1.2.1.1 Khái niệm SQL Injection 12
1.2.1.2 Các dạng tấn công SQL Injection 12
1.2.2 Cross Site Scripting (XSS) 15
1.2.2.1 Giới thiệu chung về XXS 15
1.2.2.2 Các phương thức XSS 16
1.2.3 Cross-site Request Forgery (CSRF) 18
1.2.3.1 Giới thiệu chung về CSRF 18
1.2.3.2 Ngữ cảnh tấn công 19
1.2.3.3 Các dạng tấn công 19
1.2.4 Một số lỗ hổng phổ biến khác 22
1.2.4.1 Lỗi Heartbleed 22
1.2.4.2 Khai thác qua Phishing 22
CHƯƠNG 2 NGHIÊN CỨU CÁC PHƯƠNG PHÁP KIỂM THỬ TỰ ĐỘNG TÍNH BẢO MẬT ỨNG DỤNG WEB 24
2.1 Phân tích tĩnh 24
2.1.1 Phân tích từ vựng 24
Trang 72.1.2 Phân tích cú pháp 25
2.1.3 Phân tích mã nguồn 26
2.2 Phân tích động 27
2.2.1 Phương pháp tiêm lỗi 27
2.2.1.1 Giới thiệu 27
2.2.1.2 Các cách thực hiện tạo lỗi 27
2.2.1.3 Các phương pháp tiêm lỗi 28
2.2.2 Kiểm thử Fuzzing 30
2.2.2.1 Giới thiệu 30
2.2.2.2 Ưu điểm và nhược điểm của kiểm thử Fuzzing 30
2.2.2.3 Cách xây dựng các bộ giá trị đầu vào 31
2.3 So sánh phân tích tĩnh và phân tích động 33
2.4 Kiểm thử thâm nhập 34
2.4.1 Định nghĩa và lợi ích của kiểm thử thâm nhập 34
2.4.2 Cách điều khiển kiểm thử thâm nhập 35
CHƯƠNG 3 NGHIÊN CỨU VÀ THỰC NGHIỆM CÔNG CỤ KIỂM THỬ TỰ ĐỘNG TÍNH BẢO MẬT ỨNG DỤNG WEB 37
3.1 Công cụ kiểm thử tự động 37
3.1.1 Acunetix Web Vulnerability Scanner 37
3.1.1.1 Giới thiệu 37
3.1.1.2 Hoạt động của chương trình 38
3.1.1.3 Kết quả quét của Acunetix với trang web cụ thể 40
3.1.2 SecuBat 41
3.1.2.1 Giới thiệu 41
3.1.2.2 Hoạt động của công cụ 42
3.1.2.3 Kết quả quét của SecuBat với trang web cụ thể 43
3.2 Thực nghiệm 44
Trang 83.2.2 Kiến trúc tấn công của SecuBat 46
3.2.3 Luồng dữ liệu 48
3.2.4 Luồng làm việc đối với lỗ hổng XSS 49
3.2.4.1 Simple Reflected XSS Attack 49
3.2.4.2 Encoded Reflected XSS Attack 51
3.2.4.3 Form-Redirecting XSS Attack 52
KẾT LUẬN 55
1 Tiếng Việt 56
2 Tiếng Anh 56
Trang 9DANH MỤC KÝ HIỆU VÀ TỪ VIẾT TẮT
Trang 10DANH MỤC HÌNH VẼ
Hình 1.1 Quy trình tấn công Stored XSS 16
Hình 1.2 Quy trình tấn công CSRF 18
Hình 1.3 Mô hình tấn công CSRF theo phương thức POST 20
Hình 2.1 Mô hình phân tích từ vựng 24
Hình 2.2 Mô hình phân tích cú pháp 25
Hình 2.3 Đoạn mã khi bấm nút đăng ký 26
Hình 2.4 Các giai đoạn kiểm thử thâm nhập 35
Hình 3.1 Giao diện công cụ Acunetix WVS 39
Hình 3.2 Kết quả sau khi quét bằng Acunetix 40
Hình 3.3 Lỗ hổng XSS được quét bởi Acunetix 41
Hình 3.4 Chi tiết về lỗ hổng XSS quét bởi Acunetix 41
Hình 3.5 Giao diện công cụ SecuBat 42
Hình 3.6 Kết quả sau khi quét bằng SecuBat 43
Hình 3.7 Lỗ hổng XSS được quét bởi SecuBat 43
Hình 3.8 Thành phần thu thập dữ liệu 44
Hình 3.9 Thành phần tấn công 45
Hình 3.10 Thành phần phân tích 46
Hình 3.11 Kiến trúc tấn công 47
Hình 3.12 Luồng dữ liệu của SecuBat 48
Hình 3.13 Quy trình làm việc của một cuộc tấn công XSS 49
Hình 3.14 Simple Reflected XSS Attack Response trang A 50
Hình 3.15 Simple Reflected XSS Attack Response trang B 50
Hình 3.16 Encoded XSS Attack Injection String 52
Hình 3.17 Automatically-Generated Reflected XSS Exploit URL 54
Trang 11DANH MỤC BẢNG
Bảng 2.1 Bảng phân tích từ vựng 25
Bảng 2.2 Bảng so sánh phân tích tĩnh và phân tích động 33
Bảng 3.1 Danh sách các lỗ hổng có thể tìm thấy bởi Acunetix 37
Bảng 3.2 Bảng mã hóa các ký tự HTML 51
Trang 12LỜI CẢM ƠN
Trong quá trình thực hiện đồ án tốt nghiệp này, em đã nhận được sựgiúp đỡ tận tình của cán bộ hướng dẫn là ThS Lê Bá Cường – Giảng viênKhoa Công nghệ thông tin Học viện Kỹ thuật Mật mã, sự động viên củangười thân và bạn bè
Xin cảm ơn tất cả mọi người đã tạo những điều kiện tốt nhất để emhoàn thành đồ án tốt nghiệp này!
SINH VIÊN THỰC HIỆN ĐỒ ÁN
Phạm Thị Ngọc Trâm
Trang 13LỜI NÓI ĐẦU
Ngày nay, rất nhiều website gặp các lỗi nghiêm trọng, đặc biệt là lỗibảo mật, điều này có thể tạo ra sự ngưng trệ của dịch vụ, thêm quyền đối vớingười sử dụng hoặc cho phép các truy nhập không hợp pháp vào hệ thống Theo báo cáo của VNISA – Hiệp hội an toàn thông tin Việt Nam, vào cuốinăm 2012, gần 3.700 lỗi đã được tìm thấy trên 100 website gov.vn, trong khi80% các website này không có biện pháp bảo mật tối thiểu
Để tạo ra một sản phẩm công nghệ thông tin hay phần mềm có chấtlượng, hoạt động kiểm thử phần mềm đóng vai trò rất quan trọng Tuy nhiênviệc kiểm thử thủ công sẽ rất tốn thời gian, bởi đối với mỗi lần bàn giao,người kiểm thử vẫn phải thực hiện lại một tập hợp các testcase đã chạy, dẫntới việc lãng phí công sức
Hiện nay, theo em tìm hiểu, tại nước ta có rất ít các nghiên cứu về vấn
đề này, thường chỉ chú trọng về kiểm thử tự động, hoặc kiểm thử bảo mật,thay vì tìm hiểu kết hợp về kiểm thử tự động tính bảo mật Ví dụ đề tài
“Nghiên cứu và ứng dụng công cụ kiểm thử tự động trong kiểm thử phầnmềm” – Mai Thị Nhi; hay “Nghiên cứu kiểm thử bảo mật website” – ĐinhThị Thiên Anh, mà chưa hề đi sâu vào việc nghiên cứu về các phương phápkiểm thử tự động tính bảo mật website
Đó là lý do em chọn đề tài “Nghiên cứu phương pháp và công cụ kiểmthử tự động tính bảo mật ứng dụng web”
Mục tiêu đặt ra khi thực hiện đề tài này gồm:
- Tìm hiểu tổng quan về lỗ hổng, đưa ra một số loại lỗ hổng bảo mậtphổ biến hiện nay
- Nghiên cứu các phương pháp kiểm thử tự động tính bảo mật ứngdụng web, bao gồm các kỹ thuật và cách thức sử dụng để phát hiện
lỗ hổng, cách xây dựng các bộ giá trị đầu vào
- Giới thiệu, triển khai và tìm hiểu một công cụ kiểm thử tự động tínhbảo mật ứng dụng web đang được sử dụng phổ biến trên thế giới.Bao gồm cách sử dụng, kiến trúc và luồng làm việc của ứng dụngTrong quá trình thực hiện Đồ án, đồ án không thể tránh khỏi những saisót Rất mong nhận được sự góp ý của các thầy, cô giáo và các bạn để đồ ánđược hoàn thiện hơn Em xin chân thành cảm ơn sự hướng dẫn, giúp đỡ tận
Trang 14– Học viện Kỹ thuật Mật mã đã giúp đỡ em trong quá trình học tập cũng nhưtrong quá trình làm Đồ án.
SINH VIÊN THỰC HIỆN ĐỒ ÁN
Phạm Thị Ngọc Trâm
Trang 15CHƯƠNG 1 TỔNG QUAN VỀ LỖ HỔNG BẢO MẬT
1.1 Khái niệm lỗ hổng bảo mật
Các lỗ hổng bảo mật trên một hệ thống là các điểm yếu có thể tạo ra sựngưng trệ của dịch vụ, thêm quyền đối với người sử dụng hoặc cho phép cáctruy nhập không hợp pháp vào hệ thống Các lỗ hổng cũng có thể nằm ngaycác dịch vụ cung cấp như sendmail, web, ftp Ngoài ra các lỗ hổng còn tồntại ngay chính tại hệ điều hành như trong Windows NT, Windows 95, UNIX;hoặc trong các ứng dụng mà người sử dụng thường xuyên sử dụng như Wordprocessing, các hệ cơ sở dữ liệu [1]
1.2 Một số lỗ hổng bảo mật phổ biến
1.2.1 SQL Injection
1.2.1.1 Khái niệm SQL Injection
SQL injection là một kĩ thuật cho phép những kẻ tấn công lợi dụng lỗhổng trong việc kiểm tra dữ liệu nhập trong các ứng dụng web và các thôngbáo lỗi của hệ quản trị cơ sở dữ liệu để "tiêm vào" và thi hành các câu lệnhSQL bất hợp pháp (không được người phát triển ứng dụng lường trước) Hậuquả của nó rất tai hại vì nó cho phép những kẻ tấn công có thể thực hiện cácthao tác xóa, hiệu chỉnh, do có toàn quyền trên cơ sở dữ liệu của ứng dụng,thậm chí là server mà ứng dụng đó đang chạy Lỗi này thường xảy ra trên cácứng dụng web có dữ liệu được quản lý bằng các hệ quản trị cơ sở dữ liệu nhưSQL Server, MySQL, Oracle, DB2, Sysbase
1.2.1.2 Các dạng tấn công SQL Injection
Có bốn dạng tấn công thường gặp, bao gồm: vượt qua kiểm tra lúc đăngnhập (authorization bypass), sử dụng câu lệnh SELECT, sử dụng câu lệnhINSERT, sử dụng các stored-procedures
a Dạng tấn công vượt qua kiểm tra đăng nhập
Với dạng tấn công này, tin tặc có thể dễ dàng vượt qua các trang đăngnhập nhờ vào lỗi khi dùng các câu lệnh SQL thao tác trên cơ sở dữ liệu củaứng dụng web Thông thường để cho phép người dùng truy cập vào các trangweb được bảo mật, hệ thống thường xây dựng trang đăng nhập để yêu cầungười dùng nhập thông tin về tên đăng nhập và mật khẩu Sau khi người dùng
Trang 16nhập thông tin vào, hệ thống sẽ kiểm tra tên đăng nhập và mật khẩu có hợp lệhay không để quyết định cho phép hay từ chối thực hiện tiếp.
Trong trường hợp này, có thể dùng hai trang, một trang HTML để hiểnthị form nhập liệu và một trang ASP dùng để xử lí thông tin nhập từ phíangười dùng
strSQL = "SELECT * FROM T_USERS " & _
"WHERE USR_NAME=' " & vUsrName & _
" ' and USR_PASSWORD=' " & vPassword & " ' "
Set objRS = Server.CreateObject("ADODB.Recordset")
Set objRS = Nothing %>
Nếu người dùng nhập chuỗi trong ngoặc sau vào trong cả 2 ô nhập liệuusername/password của trang login.htm là:('OR=') Lúc này, câu truy vấn sẽđược gọi thực hiện là:
SELECT FROM T_USERS WHERE USR_NAME = ''OR'' = '' and USR_PASSWORD =
''OR'' = ''
Câu truy vấn này là hợp lệ và sẽ trả về tất cả các bản ghi của T_USERS
và đoạn mã tiếp theo xử lí người dùng đăng nhập bất hợp pháp này như làngười dùng đăng nhập hợp lệ
b Dạng tấn công sử dụng câu lệnh SELECT
Dạng tấn công này phức tạp hơn Để thực hiện được kiểu tấn công này,
kẻ tấn công phải có khả năng hiểu và lợi dụng các sơ hở trong các thông báolỗi từ hệ thống để dò tìm các điểm yếu khởi đầu cho việc tấn công
Ví dụ, trong các trang tìm kiếm Các trang này cho phép người dùngnhập vào các thông tin tìm kiếm như Họ, Tên, … Đoạn mã thường gặp là:
Trang 17Set objRS = Nothing %>
Tương tự như trên, tin tặc có thể lợi dụng sơ hở trong câu truy vấn SQL
để nhập vào trường tên tác giả bằng chuỗi giá trị:
' UNION SELECT ALL SELECT OtherField FROM OtherTable WHERE ' '=' (*)
Lúc này, ngoài câu truy vấn đầu không thành công, chương trình sẽthực hiện thêm lệnh tiếp theo sau từ khóa UNION nữa Giả sử đoạn mã nhậpvào là:
' DROP TABLE T_AUTHORS
Câu truy vấn sẽ thực hiện việc xóa bảng
c Dạng tấn công sử dụng câu lệnh INSERT
Thông thường các ứng dụng web cho phép người dùng đăng kí một tàikhoản để tham gia Chức năng không thể thiếu là sau khi đăng kí thành công,người dùng có thể xem và hiệu chỉnh thông tin của mình SQL injection cóthể được dùng khi hệ thống không kiểm tra tính hợp lệ của thông tin nhậpvào Ví dụ, một câu lệnh INSERT có thể có cú pháp dạng:
INSERT INTO TableName VALUES('Value One', 'Value Two', 'Value
Three')
Nếu đoạn mã xây dựng câu lệnh SQL có dạng:
<%
strSQL = "INSERT INTO TableName VALUES(' " & strValueOne & " ', '
" _ & strValueTwo & " ', ' " & strValueThree & " ') "
Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.Open strSQL, "DSN= "
…
Trang 18Set objRS = Nothing %>
Thì chắc chắn sẽ bị lỗi SQL injection, bởi vì nếu ta nhập vào trường thứnhất ví dụ như:
' + (SELECT TOP 1 FieldName FROM TableName) + '
Lúc này câu truy vấn sẽ là:
INSERT INTO TableName VALUES(' ' + (SELECT TOP 1 FieldName FROM
TableName) + ' ', 'abc', 'def')
Khi đó, lúc thực hiện lệnh xem thông tin, xem như ta đã yêu cầu thựchiện thêm một lệnh nữa đó là:
SELECT TOP 1 FieldName FROM TableName
d Dạng tấn công sử dung stored-procedures
Việc tấn công bằng stored-procedures sẽ gây tác hại rất lớn nếu ứngdụng được thực thi với quyền quản trị hệ thống 'sa' Ví dụ, nếu ta thay đoạn
mã tiêm vào dạng: ' ; EXEC xp_cmdshell ‘cmd.exe dir C: ' Lúc này hệ thống
sẽ thực hiện lệnh liệt kê thư mục trên ổ đĩa C: \ cài đặt server Việc phá hoạikiểu nào tuỳ thuộc vào câu lệnh đằng sau cmd.exe
1.2.2 Cross Site Scripting (XSS)
1.2.2.1 Giới thiệu chung về XXS
Cross-Site Scripting hay còn được gọi tắt là XSS là một kĩ thuật tấncông bằng cách chèn vào các website động (ASP, PHP, CGI, JSP ) nhữngđoạn mã script nguy hiểm để thực thi 1 câu lệnh nào đó Trong đó, nhữngđoạn mã nguy hiểm đựơc chèn vào hầu hết được viết bằng các Client-SiteScript như JavaScript, JScript, DHTML và cũng có thể là cả các thẻ HTML
Trình duyệt của người dùng cuối không có cách nào để phát hiện kịchbản không tin tưởng và đã được chèn mã độc đó, và sẽ thực thi kịch bản Kịchbản độc hại có thể truy cập bất kỳ tập tin cookie, session tokens, hoặc cácthông tin nhạy cảm khác được giữ lại bởi trình duyệt và sử dụng với trangweb đó Các kịch bản thậm chí có thể ghi lại các nội dung của trang HTML.Khi người sử dụng click vào những link đó thì toàn bộ cookies, mật khẩu lưu
Trang 19trên trình duyệt được gửi về cho hacker qua email hoặc một file nào đó trênhost đã được thiết lập từ trước hoặc bị dẫn tới một trang fishing mà hacker đãthiết lập từ trước Các kịch bản này cũng có thể cài đặt tự động các chươngtrình virus, trojan, backdoor trên máy victim tùy vào mệnh lệnh của hacker.
Khác với SQL Injection tấn công vào CSDL của website, XSS tấn côngtrực tiếp vào người dùng Lợi dụng lỗi XSS, hacker có thể lừa đảo quản trịcủa website, ăn cắp cookie, chiếm session… từ đó có thể đăng nhập chiếmquyền điều khiển website
1.2.2.2 Các phương thức XSS
a Persistent XSS (Stored XSS)
Stored XSS là dạng tấn công mà hacker chèn trực tiếp các mã độc vào
cơ sở dữ liệu của website Dạng tấn công này xảy ra khi các dữ liệu được gửilên server không được kiểm tra kỹ lưỡng mà lưu trực tiếp vào cơ sở dữ liệu.Khi người dùng truy cập vào trang web này thì những đoạn script độc hại sẽđược thực thi chung với quá trình load trang web
Hình 1.1 Quy trình tấn công Stored XSS
Quá trình tấn công được thể hiện như Hình 1 1:
- Trước tiên, hacker sẽ khai thác lỗi Stored XSS trên website bằng cáchtìm những form (khung đăng ký, khung comment, khung liên hệ …)không được kiểm tra kỹ dữ liệu đầu vào và tiến hành chèn các đoạn mãđộc vào cơ sở dữ liệu
Trang 20- Sau đó khi người dùng truy cập vào trang web có chứa dữ liệu liênquan đến cơ sở dữ liệu này thì ngay lập tức, các đoạn script độc hại sẽđược chạy chung với trang web.
- Khi các đoạn script được thực thi, tuỳ vào mục đích của hacker, cácđoạn script sẽ gửi về cho hacker những thông tin như cookie, sessiontoken … Đến đây, xem như quá trình tấn công của hacker đã thànhcông
b Non-persistent XSS (Reflected XSS)
Reflected XSS là dạng tấn công thường gặp nhất trong các loại hìnhXSS Khác với Stored-XSS, với Reflected-XSS hacker không gửi dữ liệu độchại trên server nạn nhân, mà gửi trực tiếp link có chứa mã độc cho ngườidùng, khi người dùng click vào link này, trang web sẽ được load chung vớicác đoạn script độc hại Kịch bản điển hình nhất khi khai thác XSS là hackerchèn đoạn javascript như sau vào website:
Một iframe với kích thước 0×0 được chèn vào trang web và sẽ tự động
load trang lấy cookie của hacker tại địa chỉ http://hacker.com/getcookie.php.
Khi có được cookie, hacker có thể dễ dàng đăng nhập mà không cần biết mậtkhẩu của người dùng
c Dom-Based XSS
Dom-Based XSS là một dạng tấn công XSS làm thay đổi cấu trúc củatrang web bằng cách thay đổi cấu trúc HTML Đối với dạng tấn công này,hacker sẽ chèn các đoạn script nhằm thay đổi giao diện mặc định của trangweb thành một giao diện giả
Ví dụ, ta có một URL như sau: http://www.victim.com/hello/php
Trang 21Đoạn code trên dùng để hiển thị nội dung chào mừng người dùng khiđược chuyển hướng tới, tên của người dùng được lấy từ tham số name trênURL
URL trên sẽ chào mừng người dùng có tên tram
Xem xét source code của hello.php, ta thấy không có sự ràng buộc dữ liệu nào, vì vậy, thay vì truyền tham số là tram, ta có thể thay bằng:
Khi đó, giao diện sẽ thay đổi thành:
Khi người dùng nhập mật khẩu vào và nhấn Submit thì lập tức script sẽđược thực thi và gửi về cho hacker mật khẩu của người dùng
1.2.3 Cross-site Request Forgery (CSRF)
1.2.3.1 Giới thiệu chung về CSRF
CSRF là kĩ thuật tấn công bằng phương pháp sử dụng quyền chứngthực của người dùng đối với một website, hacker có thể lợi dụng nó để thựcthi những request với quyền chứng thực của người dùng
Trang 22Hình 1.2 Quy trình tấn công CSRF
Lợi dụng sự không chú ý của người dùng, hacker có thể gửi nhữngđường link mà trong đó chứa mã độc thông qua email, đính kèm trên trangweb…Khi nạn nhận click vào đường link hay mở email, thì những mã độc
sẽ được thực thi quyền xác thực của nạn nhân, gây hậu quả cho nạn nhân mà
họ không thể biết lúc click Loại tấn công sử dụng kỹ thuật này thường dànhcho người am hiểu về hệ thống, có thể là người từng phát triển ứng dụng đó,hoặc một mã nguồn mở, hoặc một mã nguồn nào đó đã được công khai code
1.2.3.2 Ngữ cảnh tấn công
Cross-site request forgery (CSRF) đánh lừa nạn nhân load một page mà
nó có chứa những request độc hại Request độc hại này là những request đượcthừa kế định danh và quyền hạn của nạn nhân nhằm mục đích thực thi một sốchức năng (function)
Ở một số Site, browsers có những request liên kết trực tiếp với site, như
là user’s session cookie, basic authen credentials, IP address, Windowsdomain credentials… Vì thế, nếu người dùng đã được xác thực ở tại một thờiđiểm nhất định thì site sẽ không xác định hay phân biệt được đâu là requestcủa người dùng hợp lệ
Ở một số trường hợp, CSRF có thể được lưu trữ (tồn tại) sẵn trong một
số trang website bị lỗi Những lỗi đó được gọi là stored CSRF flaws Nó cóthể tồn tại trong những thẻ <IMG> hay <IFRAME> trong một trang HTMLhay là một số kiểu tấn công cross-site scripting attack Nếu tấn công CSRF là
có sẵn trong site thì tính nghiêm trọng được tăng thêm gấp nhiều lần
1.2.3.3 Các dạng tấn công
Có 2 dạng tấn công: theo phương thức POST và GET
Trang 23a Ví dụ tấn công theo phương thức GET
Trong CSRF, hacker sẽ đợi người dùng kết nối và thực hiện xác thựcvới một trang web mà họ tin tưởng (trusted server), và lừa người dùng clickvào những đường link độc hại có đính kém những mã độc vào Khi ngườidùng click vào những đường link độc thì những mã độc sẽ được thực thi trêntrusted server Ở đây, hacker đã sử dụng email mà trong đó đính kèm nhữngđoạn script độc hại đến nạn nhân Khi nạn nhận đã xác thực với một trangweb và mở mail lên thì những đoạn script được đính kèm trong đó sẽ thực thitrên máy nạn nhân
Bước 1: Attacker sẽ gửi đường link có chứa mã độc tới cho User Đoạn
mã độc để thực hiện một hành vi xấu của Attacker, nó được chứa trong mộtfile HTML, và User sẽ không biết được có mã độc trong file hay không Mãđộc thường là một đường link được giấu trong thẻ img, với thuộc tính width
và height của thẻ img đều là 0
Bước 2: Sau khi Attacker gửi và “dụ” được User click vào được link,thì trên máy của User sẽ thực hiện request theo yêu cầu trong đường link có
mã độc mà User không hề hay biết
Bước 3: Khi User “bị gửi” yêu cầu trong link có mã độc đến Server thìServer vẫn đáp ứng bình thường, vì User đã được Server cấp cho session đểthực hiện request Và request chứa mã độc được thực hiện một cách hợp lệ
mà User không hề hay biết
b Ví dụ tấn công theo phương thức POST
Trang 24Hình 1.3 Mô hình tấn công CSRF theo phương thức POST
Hình 1 3 mô tả mô hình tấn công CSRF theo phương thức POST, chitiết các bước như sau:
Bước 1: Hacker chờ đợi nạn nhân xác thực với vunerability webapplication
Bước 2: Hacker dụ dỗ, dùng mọi biện pháp khác nhau để đánh lừa nạnnhân khởi tạo một request Request này có chứa session id của nạn nhân (do
đã được xác thực), hacker sửa đổi Request này theo mục đích của mình vàchuyển đến cho vunerability web application
Trang 25Bước 3: Vunerability web application thấy request này có session idhợp lệ nên sẽ thực thi hành động được ghi trong request
Như vậy Hacker đã có thứ họ muốn, đó chính là hành động được ghitrong request được thực hiện bởi vunerability web application nhân danh nạnnhân
1.2.4 Một số lỗ hổng phổ biến khác
1.2.4.1 Lỗi Heartbleed
Heartbleed là một lỗ hỏng nguy hiểm của OpenSSL mới được công bốcho phép hacker có thể từ xa đọc được dữ liệu trên máy chủ có cài đặtOpenSSL phiên bản 1.0.1 đến 1.0.1.f OpenSSL là một thư viện mã hóa, được
sử dụng cho mã hóa dữ liệu trao đổi giữa máy chủ và client Các máy chủ sửdụng OpenSSL như các máy chủ web chạy apache hoặc ngix, các máy chủemail, VPN, Instant Message,
Khi khai thác được lỗ hổng Heartbleed, hacker có thể lấy được privatekey của server, sử dụng để mã hóa các dữ liệu trao đổi giữa server và client
Từ đó hacker có thể đọc được toàn bộ thông tin được trao đổi giữa client vàserver như chưa hề được mã hóa (plain text) Có thể nói như hacker có thểđọc được username, password,… ở dạng plain text Như vậy, mục tiêu củahacker là các site thanh toán trực tuyến như: ngân hàng điện tử, chứng khoánđiện tử, thương mai điện tử,… Ngoài ra, các mail server và một số dịch vụ sử
Trang 26Cách phòng chống lỗi Heartbleed là kiểm tra phiên bản OpenSSL hiệntại và cập nhật phiên bản OpenSSL Với các giao dịch điện tử, tốt nhất là nên
sử dụng one-time password có giới hạn thời gian sử dụng ngắn
1.2.4.2 Khai thác qua Phishing
Phishing là một hình thức gian lận để có những thông tin nhạy cảm nhưusername, password, credit card … bằng cách giả mạo như là một thực thểđáng tin cậy trong các giao tiếp trên mạng Quá trình giao tiếp thường diễn ratại các trang mạng xã hội nổi tiếng, các trang web đấu giá, mua bán hàngonline…mà đa số người dùng đều không cảnh giác với nó Phishing sử dụngemail hoặc tin nhắn tức thời, gửi đến người dùng, yêu cầu họ cung cấp thôngtin cần thiết Người dùng vì sự chủ quan của mình đã cung cấp thông tin chomột trang web, thoạt nhìn có vẻ hợp pháp, nhưng lại là trang web giả mạo docác hacker lập nên
Phishing là một ví dụ của Social Engineering được sử dụng để lừa đảongười dùng và khai thác lỗ hổng trong việc sử dụng công nghệ kém an ninhcủa các website hiện hành Những nỗ lực mạnh mẽ trong thời gian qua đểchống lại Phishing bao gồm việc ứng dụng các công nghệ an ninh mới đếnviệc đào tạo cho nhân viên, và nâng cao ý thức cộng đồng
Do cách tấn công đơn giản nhưng lại hiệu quả cao nên phishing nhanhchóng trở thành một trong những kiểu lừa dảo phổ biến nhất trên mạng – cóđến gần 70% các vụ tấn công trên mạng năm 2003 có liên quan đến phishing
Trang 27CHƯƠNG 2 NGHIÊN CỨU CÁC PHƯƠNG PHÁP KIỂM THỬ TỰ
ĐỘNG TÍNH BẢO MẬT ỨNG DỤNG WEB
Kiểm thử bảo mật là một trong những loại quan trọng nhất của kiểmthử phần mềm Mục tiêu chính của kiểm thử bảo mật là để tìm các lỗ hổngcủa hệ thống và xác định dữ liệu và tài nguyên được bảo vệ từ các yếu tố cóthể xâm nhập
Ngày nay, giao dịch trực tuyến ngày một gia tăng nhanh chóng, kiểmthử bảo mật trên ứng dụng web là một trong những điều quan trọng nhất cầnđược thực hiện khi thử nghiệm các ứng dụng web
Các phương pháp kiểm thử tự động tính bảo mật ứng dụng web có thểđược chia làm hai loại: phân tích tĩnh và phân tích động
2.1 Phân tích tĩnh
2.1.1 Phân tích từ vựng
Phân tích từ vựng là quá trình phân tích dòng ký tự tạo nên mã nguồnđược đọc từ trái qua phải và được nhóm lại thành các token Thường chỉ cómột số nhỏ các token cho một ngôn ngữ lập trình gồm: các hằng số (integer,double, char, string ), các toán tử (số học, quan hệ, logic), dấu chấm câu, vàcác từ dùng riêng [2]
Hình 2.4 Mô hình phân tích từ vựng
Bộ phân tích từ vựng đọc từng ký tự từ dòng nhập, nhóm chúng lạithành các lexeme và chuyển các token xác định bởi lexeme này cùng với cácthuộc tính của nó đến những giai đoạn sau của trình biên dịch như Hình 2 4.Trong một vài tình huống, bộ phân tích từ vựng phải đọc vượt trước một số
ký tự mới xác định được một token để chuyển cho bộ phân tích cú pháp Ví
dụ, trong Pascal khi gặp ký tự >, phải đọc thêm một ký tự sau đó nữa; nếu ký
tự sau là = thì token được xác định là “lớn hơn hoặc bằng”, ngược lại thìtoken là “lớn hơn” và do đó một ký tự đã bị đọc quá Trong trường hợp đó thì
Trang 28ký tự đọc quá này phải được đẩy trả về (push back) cho dòng nhập vì nó cóthể là ký tự bắt đầu cho một trị từ vựng mới.
Token là một chuỗi các ký tự Token được định nghĩa bao gồm các từkhóa, định danh, các hằng số, các toán tử
Một lexeme là chuỗi ký tự tạo thành một token, token là lớp chung màcác lexeme nằm trong đó
Ví dụ: Phân tích từ vựng biểu thức Sum = 4 – 1;
Kết quả thu được sau khi phân tích từ vựng:
dễ dàng thực hiện hơn vì người phân tích có được cái nhìn rõ ràng và có cấutrúc hơn đối với mã nguồn đang thực hiện phân tích.
Công cụ tự động để phân tích từ vựng thường được sử dụng làLex/Yacc
2.1.2 Phân tích cú pháp
Phân tích cú pháp là quá trình phân tích một chuỗi các ký tự Phân tích
cú pháp được thực hiện để xác định xem các câu lệnh trong mã nguồn có địnhdạng, cú pháp đúng hay không từ đó phát hiện ra các lỗi và lỗ hổng tiềm ẩntrong mã nguồn của ứng dụng [2]
Hình 2.5 Mô hình phân tích cú pháp
Ví dụ: Phân tích cú pháp đoạn mã C# sau
Trang 29Hình 2.6 Đoạn mã khi bấm nút đăng ký
Kết quả thu được: Dòng lệnh dk.ShowDialog( ) gặp lỗi sai cú pháp
bởi vì trong ngôn ngữ lập trình C# một câu lệnh phải được kết thúc bằng dấu
a Phương pháp tiếp cận từ trên xuống (Top - Down):
Phương pháp này thực hiện tìm kiếm những lỗ hổng cụ thể mà khôngcần phải biết toàn bộ chức năng của ứng dụng Phương pháp này thực hiệnnhanh chóng, tuy nhiên đối với các lỗ hổng cần hiểu sâu về hoạt động củachương trình và xuất hiện ở nhiều phần mã của chương trình thì phương phápnày không thực hiện được
b Phương pháp tiếp cận từ dưới lên (Bottom - Up):
Khác với phương pháp tiếp cận từ trên xuống, phương pháp này đòi hỏi
sự hiểu biết sâu sắc về hoạt động bên trong của một ứng dụng bằng cách đọcphần lớn mã nguồn Bắt đầu đọc từ hàm main để hiểu biết về ứng dụng từđiểm nhập đến điểm xuất của nó Phương pháp này rất tốn thời gian, nhưng
có thể phát hiện ra các lỗ hổng phức tạp mà phương pháp Top - Down khôngthực hiện được
c Phương pháp tiếp cận có chọn lọc:
Đây là phương pháp sử dụng kết hợp hai phương pháp Top - Down vàBottom - Up để đạt được hiệu quả tối đa Trong cách tiếp cận có chọn lọc,người kiểm tra sẽ xác định vị trí mà tại đó có thể đưa được dữ liệu vào, và tậptrung kiểm tra các đoạn mã của phần này Phương pháp này rất hiệu quả, tuy
Trang 30Các kỹ sư sử dụng tiêm lỗi để kiểm thử hệ thống hoặc các thành phầnchịu lỗi Kiểm thử tiêm lỗi phát hiện lỗi, cô lập lỗi, và có khả năng cấu hìnhlại và phục hồi Một môi trường tiêm lỗi thường bao gồm các hệ thống mụctiêu cộng với một dụng cụ tiêm lỗi, thư viện lỗi, bộ tạo khối lượng công việc,thư viện khối lượng công việc, điều khiển, giám sát, thu thập dữ liệu và phântích dữ liệu Các dụng cụ tiêm lỗi tiêm lỗi vào hệ thống mục tiêu, nó thực thicác lệnh từ các bộ tạo khối lượng công việc (ứng dụng, điểm chuẩn, hoặc tổnghợp khối lượng công việc) Bộ giám sát theo dõi việc thực thi các lệnh vàkhởi tạo thu thập dữ liệu bất kì lúc nào cần thiết Các bộ thu thập dữ liệu thựchiện thu thập dữ liệu trực tuyến, và phân tích dữ liệu mà có thể được ẩn, thựchiện xử lý dữ liệu và phân tích Các dụng cụ tiêm lỗi có thể tự hỗ trợ các loạilỗi khác nhau, các vị trí lỗi, số lần lỗi, và các ngữ nghĩa thích hợp của phầncứng hoặc cấu trúc phần mềm - các giá trị trong số đó được lấy ra từ một thưviện lỗi Các thư viện lỗi là một thành phần riêng biệt, cho phép linh hoạt hơn
và di chuyển được Các bộ tạo khối lượng công việc, bộ giám sát, và cácthành phần khác có thể được thực hiện theo cùng một cách [9]
Công cụ tự động thường được sử dụng là ExhaustiF và Holodeck
2.2.1.2 Các cách thực hiện tạo lỗi
Tạo thủ công: Thực hiện tạo đầu vào bằng tay, sử dụng các trình soạnthảo để tự tạo ra dữ liệu đầu vào, tốn thời gian, nhưng thường mang lại kếtquả tốt nhất
Tạo tự động: Thực hiện bằng cách nghiên cứu các giao thức và thiết kếmột thuật toán để tạo các đầu vào tùy theo mục đích Cách này rất phù hợp