Tải bản đầy đủ (.docx) (60 trang)

Kiểm thử tự động tính bảo mật ứng dụng web

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.44 MB, 60 trang )

BAN CƠ YẾU CHÍNH PHỦ
HỌC VIỆN KỸ THUẬT MẬT MÃ
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

ĐỒ ÁN TỐT NGHIỆP

NGHIÊN CỨU PHƯƠNG PHÁP VÀ CÔNG CỤ
KIỂM THỬ TỰ ĐỘNG TÍNH BẢO MẬT
ỨNG DỤNG WEB

Ngành: Công nghệ thông tin
Chuyên ngành: An toàn thông tin
Mã số: 52.48.02.01

Hà Nội, 2016


BAN CƠ YẾU CHÍNH PHỦ
HỌC VIỆN KỸ THUẬT MẬT MÃ
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

ĐỒ ÁN TỐT NGHIỆP

NGHIÊN CỨU PHƯƠNG PHÁP VÀ CÔNG CỤ
KIỂM THỬ TỰ ĐỘNG TÍNH BẢO MẬT
ỨNG DỤNG WEB
Ngành: Công nghệ thông tin
Chuyên ngành: An toàn thông tin
Mã số: 52.48.02.01

Sinh viên thực hiện:


Phạm Thị Ngọc Trâm
Lớp: AT8C
Người hướng dẫn:
ThS. Lê Bá Cường
Khoa Công nghệ thông tin – Học viện Kỹ thuật Mật mã

Hà Nội, 2016
2


Ý KIẾN CỦA GIẢNG VIÊN

3


MỤC LỤC

4


DANH MỤC KÝ HIỆU VÀ TỪ VIẾT TẮT
STT
1
2
3
4
5
6
7
8

9
10
11
12
13

Ký hiệu/từ viết tắt

Mô tả

CSDL

Cơ sở dữ liệu

CSRF

Cross Site Request Forgery

DBMS

Database Management System

DHTML

Dynamic HyperText Markup Language

HTML

HyperText Markup Language


IDE

Integrated Development Environment

IIS

Internet Information Services

SMTP

Simple Mail Transfer Protocol

URL

Uniform Resource Locator

VPN

Virtual Private Network

WVS

Web Vulnerability Scanner

XFS

Cross Frame Scripting

XSS


Cross-Site Scripting

5


DANH MỤC HÌNH VẼ

6


DANH MỤC BẢNG

7


LỜ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ên
Khoa Công nghệ thông tin Học viện Kỹ thuật Mật mã, sự động viên của
ngườ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 để em
hoà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

8


LỜ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ỗi
bả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ới
ngườ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ối
năm 2012, gần 3.700 lỗi đã được tìm thấy trên 100 website .gov.vn, trong khi
80% 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ất
lượng, hoạt động kiểm thử phần mềm đóng vai trò rất quan trọng. Tuy nhiên
việ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ẫn
tớ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ần
mềm” – Mai Thị Nhi; hay “Nghiên cứu kiểm thử bảo mật website” – Đinh
Thị Thiên Anh, mà chưa hề đi sâu vào việc nghiên cứu về các phương pháp
kiể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ểm
thử 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ật
phổ 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 ứng
dụ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ính
bả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ụng
Trong quá trình thực hiện Đồ án, đồ án không thể tránh khỏi những sai

só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
tình của thầy Lê Bá Cường, cùng các thầy cô trong khoa Công nghệ Thông tin
9


– 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

10


CHƯƠ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ác
truy nhập không hợp pháp vào hệ thống. Các lỗ hổng cũng có thể nằm ngay
các dịch vụ cung cấp như sendmail, web, ftp ... Ngoài ra các lỗ hổng còn tồn
tạ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ư Word
processing, 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ông
bá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ệnh

SQL bất hợp pháp (không được người phát triển ứng dụng lường trước). Hậu
quả 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ác
thao 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 đăng
nhập (authorization bypass), sử dụng câu lệnh SELECT, sử dụng câu lệnh
INSERT, 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 đăng
nhậ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 trang
web được bảo mật, hệ thống thường xây dựng trang đăng nhập để yêu cầu
ngườ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
11


nhậ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ển
thị form nhập liệu và một trang ASP dùng để xử lí thông tin nhập từ phía
người dùng.
Ví dụ:
Trang xử lý nhập liệu: execlogin.asp

<%
Dim vUsrName, vPassword, objRS, strSQL
vUsrName = Request.Form("fUSRNAME")

vPassword = Request.Form("fPASSWORD")
strSQL = "SELECT * FROM T_USERS " & _
"WHERE USR_NAME=' " & vUsrName & _
" ' and USR_PASSWORD=' " & vPassword & " ' "
Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.Open strSQL, "DSN=..."
If (objRS.EOF) Then
Response.Write "Invalid login."
Else
Response.Write "You are logged in as " & objRS("USR_NAME")
End If
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ệu
username/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áo
lỗ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ùng
nhập vào các thông tin tìm kiếm như Họ, Tên, … Đoạn mã thường gặp là:
12



<%
Dim vAuthorName, objRS, strSQL
vAuthorName = Request("fAUTHOR_NAME")
strSQL = "SELECT * FROM T_AUTHORS WHERE AUTHOR_NAME =' " & _
vAuthorName & " ' "
Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.Open strSQL, "DSN=..."

Set 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ập
và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ài
khoả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ập
và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=..."


13


Set 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ực
hiệ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 ứng
dụ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ại

kiể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ấn
cô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-Site
Script 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ịch
bản không tin tưởng và đã được chèn mã độc đó, và sẽ thực thi kịch bản. Kịch
bản độc hại có thể truy cập bất kỳ tập tin cookie, session tokens, hoặc các
thông tin nhạy cảm khác được giữ lại bởi trình duyệt và sử dụng với trang
web đó. 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
14


trên trình duyệt được gửi về cho hacker qua email hoặc một file nào đó trên
host đã đượ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ương
trì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ông
trự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ếm
quyề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ửi
lê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ách
tì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.

15


- Sau đó khi người dùng truy cập vào trang web có chứa dữ liệu liên
quan đế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, session
token … Đến đây, xem như quá trình tấn công của hacker đã thành
cô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ình
XSS. Khác với Stored-XSS, với Reflected-XSS hacker không gửi dữ liệu độc
hại trên server nạn nhân, mà gửi trực tiếp link có chứa mã độc cho người
dùng, khi người dùng click vào link này, trang web sẽ được load chung với
các đoạn script độc hại. Kịch bản điển hình nhất khi khai thác XSS là hacker
chè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ỉ />Khi có được cookie, hacker có thể dễ dàng đăng nhập mà không cần biết mật

khẩ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ủa
trang 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 trang
web thành một giao diện giả.
Ví dụ, ta có một URL như sau: />
16


Đ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ên
URL

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:
<script>
document.getElementById('hello').innerHTML="
<label>Vui lòng xác nhận lại mật khẩu để tiếp tục: </label>
<input type='password'/>
<button onclick='show()'>Submit</button>";
function show(){alert('HACKED');}
</script>

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ứng
thực của người dùng đối với một website, hacker có thể lợi dụng nó để thực
thi những request với quyền chứng thực của người dùng.
17


Hì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 trang
web…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ành
cho 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 được
thừ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, Windows
domain 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à request
củ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 HTML
hay 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
18


a. 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ực
với một trang web mà họ tin tưởng (trusted server), và lừa người dùng click
vào những đường link độc hại có đính kém những mã độc vào. Khi người
dùng click vào những đường link độc thì những mã độc sẽ được thực thi trên
trusted 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 trang
web và mở mail lên thì những đoạn script được đính kèm trong đó sẽ thực thi
trê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ột
file 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

19



Hì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, chi
tiết các bước như sau:
Bước 1: Hacker chờ đợi nạn nhân xác thực với vunerability web
application

Bước 2: Hacker dụ dỗ, dùng mọi biện pháp khác nhau để đánh lừa nạn
nhâ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

20


Bước 3: Vunerability web application thấy request này có session id
hợ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 ghi
trong request được thực hiện bởi vunerability web application nhân danh nạn
nhâ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 đặt
OpenSSL 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 private
key 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ủa
hacker 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ử
dụng Open SSL cũng có thể là mục tiêu mà hacker khai thác.
21


Cách phòng chống lỗi Heartbleed là kiểm tra phiên bản OpenSSL hiện
tạ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 ra
tại các trang mạng xã hội nổi tiếng, các trang web đấu giá, mua bán hàng
online…mà đa số người dùng đều không cảnh giác với nó. Phishing sử dụng
email 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ông
tin cần thiết. Người dùng vì sự chủ quan của mình đã cung cấp thông tin cho
một trang web, thoạt nhìn có vẻ hợp pháp, nhưng lại là trang web giả mạo do
các hacker lập nên.
Phishing là một ví dụ của Social Engineering được sử dụng để lừa đảo
người dùng và khai thác lỗ hổng trong việc sử dụng công nghệ kém an ninh
củ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 đến
việ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 nhanh

chó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.

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
Kiểm thử bảo mật là một trong những loại quan trọng nhất của kiểm
thử 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ổng
củ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ểm
thử 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ại
thành các lexeme và chuyển các token xác định bởi lexeme này cùng với các
thuộ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ì
23


ký 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:
Bảng 2.1 Bảng phân tích từ vựng
Lexeme
Sum
=
4
1
;

Token
Định danh
Toán tử
Số nguyên
Toán tử
Số nguyên
Kết thúc lệnh


Phương pháp này thực hiện tách các chú thích, các khoảng trắng giữa
các thẻ. Việc tách này giúp cho việc phân tích mã nguồn để tìm lỗi và lỗ hổ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ấu
trú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ó định
dạng, cú pháp đúng hay không từ đó phát hiện ra các lỗi và lỗ hổng tiềm ẩn
trong 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
24


Hì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
“;”
Công cụ tự động để phân tích cú pháp thường được sử dụng JLec (đối
với Java) và Quex (đối với C và C++)
2.1.3 Phân tích mã nguồn
Kiểm tra mã nguồn thường là cách hiệu quả nhất để tìm ra các lỗ hổng.
Công cụ tự động để phân tích mã nguồn thường được sử dụng là Splint và
Cqual.
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ông

cầ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ện
nhanh chóng, tuy nhiên đối với các lỗ hổng cần hiểu sâu về hoạt động của
chương trình và xuất hiện ở nhiều phần mã của chương trình thì phương pháp
nà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 đọc
phầ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ông
thự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ập
trung 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
nhiên đòi hỏi phải hiểu biết sâu về đoạn mã.
25


×