Tải bản đầy đủ (.pdf) (74 trang)

Nghiên cứu về phát hiện tấn công chèn mã SQL dựa trên phân tích cú pháp câu lệnh

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 (933.68 KB, 74 trang )

HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
---------------------------------------

TRẦN VĂN SINH

NGHIÊN CỨU VỀ PHÁT HIỆN TẤN CÔNG CHÈN MÃ SQL
DỰA TRÊN PHÂN TÍCH CÚ PHÁP CÂU LỆNH

LUẬN VĂN THẠC SĨ KỸ THUẬT
(Theo định hướng ứng dụng)

HÀ NỘI - 2016


HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
---------------------------------------

TRẦN VĂN SINH

NGHIÊN CỨU VỀ PHÁT HIỆN TẤN CÔNG CHÈN MÃ SQL
DỰA TRÊN PHÂN TÍCH CÚ PHÁP CÂU LỆNH
CHUYÊN NGÀNH : HỆ THỐNG THÔNG TIN
MÃ SỐ:

0

60.48.01.04

LUẬN VĂN THẠC SĨ KỸ THUẬT
(Theo định hướng ứng dụng)


NGƯỜI HƯỚNG DẪN KHOA HỌC: TS. HOÀNG XUÂN DẬU

HÀ NỘI - 2016


i

LỜI CAM ĐOAN
Tôi cam đoan đây là công trình nghiên cứu của riêng tôi.
Các số liệu, kết quả nêu trong luận văn là trung thực và chưa từng được ai
công bố trong bất cứ công trình nào.
Tác giả luận văn

Trần Văn Sinh


ii

LỜI CÁM ƠN
Lời đầu tiên em muốn gửi là lời biết ơn chân thành tới thầy Hoàng Xuân
Dậu, người đã tận tâm chỉ dẫn, định hướng cho em trong suốt quá trình học tập và
làm luận văn tốt nghiệp này. Trong suốt thời gian thực hiện luận văn thầy đã tạo
điều kiện cho em về thời gian và những sự giúp đỡ quý báu về kiến thức và tài liệu
tham khảo để em có thể hoàn thành luận văn tốt nghiệp một cách tốt nhất. Và sau đó
em muốn gửi lời biết ơn chân thành nhất tới toàn thể các thầy cô trong trường. Các
thầy cô là những người có kiến thức sâu rộng, nhiệt tình với sinh viên, và trên hết
đó là các thầy cô luôn là tấm gương sáng về nghị lực, lòng say mê khoa học, và sự
chính trực cho chúng em.
Những lời biết ơn thân thương nhất con xin kính gửi tới bố mẹ. Bố mẹ đã
cho con cả quá khứ, hiện tại và tương lai. Cám ơn những người bạn tốt trong tập thể

lớp cao học M14CQ1S02-B, những người bạn đã cùng chia sẻ những niềm vui, nỗi
buồn, luôn bên cạnh động viên tôi trong quá trình học tập và thực hiện luận văn. Kỉ
niệm về các bạn là những kỉ niệm đẹp nhất của tôi khi còn ngồi trên ghế giảng
đường.
Cuối cùng em xin kính chúc các thầy cô và toàn thể các bạn sinh viên trường
Học viện Bưu Chính Viễn Thông một sức khỏe dồi dào, đạt được những thành công
trên con đường học tập và nghiên cứu khoa học. Chúc trường ta sẽ sớm trở thành
ngọn cờ đầu của giáo dục nước nhà và Quốc tế.
Xin trân trọng cám ơn!
Tác giả.

Trần Văn Sinh


iii

DANH MỤC TỪ VIẾT TẮT
STT
1
2
3
4
5
6
7
8
9
10
11
12


Từ viết tắt
API
DDL
DML
HTTP
IDS
JDBC
LDAP
OS
OWASP
PDO
SQL
WAF

Từ đầy đủ
Application Program Interface
Data Definition Language
Data Manipulation Language
The Hypertext Transfer Protocol
Intrusion Detection System
Java Database Connectivity
The Lightweight Directory Access Protocol
Operation System
The Open Web Application Security Project
PHP Data Objects
Structured Query Language
Web Application Firewall



iv

DANH MỤC CÁC BẢNG BIỂU
Bảng 1.1: Cú pháp đại diện tham số trong truy vấn trong C# ..................................25
Bảng 1.2: Mã hóa dấu nháy đơn ...............................................................................26
Bảng 2.1: Ngôn ngữ DML ........................................................................................34
Bảng 2.2: Ngôn ngữ DDL .........................................................................................34
Bảng 2.3: Câu lệnh điều khiển truy xuất dữ liệu ......................................................35
Bảng 2.4: Câu lệnh quản lý giao tác .........................................................................35
Bảng 2.5: Câu lệnh lập trình .....................................................................................35
Bảng 2.6: Danh sách một số từ khóa nguy hiểm.......................................................50
Bảng 3.1: Bảng dữ liệu trong tệp lưu trữ giá trị băm của cấu trúc câu truy vấn .......58
Bảng 3.2: Thông tin các câu truy vấn hợp lệ ............................................................59


v

DANH MỤC CÁC HÌNH VẼ
Hình 1.1: Thống kê 10 điểm yếu phổ biến nhất 2008 .................................................6
Hình 1.2: Thống kê 10 điểm yếu phổ biến nhất năm 2009 .........................................6
Hình 1.3: Thống kê thời gian trung bình khắc phục điểm yếu 2008 ..........................7
Hình 1.4: Thống kê thời gian trung bình khắc phục điểm yếu 2009 ..........................7
Hình 1.5: Thống kê các điểm yếu thường được khai thác ..........................................8
Hình 2.1: Minh họa đặc tả câu lệnh ..........................................................................44
Hình 2.2: Sơ đồ bố trí bộ lọc CSDL..........................................................................45
Hình 2.3: Ví dụ phân tích câu truy vấn .....................................................................46
Hình 2.4: Mô hình hoạt động phân tích cấu trúc truy vấn ........................................47
Hình 2.5: Mô hình phát hiện tấn công chèn mã SQL dựa trên phân tích cú pháp câu
lệnh. 50
Hình 3.1: Mô hình bộ lọc cơ sở dữ liệu ....................................................................53

Hình 3.2: Dòng lệnh thực hiện chạy ứng dụng bộ lọc cơ sở dữ liệu ........................58
Hình 3.3: Kết quả phân tích tệp dữ liệu câu truy vấn đầu vào ..................................58
Hình 3.4: Thông tin bộ lọc cơ sở dữ liệu thu được ...................................................59
Hình 3.5: Thông tin thu lại khi tấn công chèn mã.....................................................60
Hình 3.6: Thông báo lỗi cho người dùng ..................................................................61


vi

MỤC LỤC
LỜI CAM ĐOAN ....................................................................................................... i
LỜI CÁM ƠN .......................................................................................................... ii
DANH MỤC TỪ VIẾT TẮT .................................................................................... iii
DANH MỤC CÁC BẢNG BIỂU ............................................................................. iv
DANH MỤC CÁC HÌNH VẼ.....................................................................................v
MỞ ĐẦU
CHƯƠNG I.

...........................................................................................................1
TỔNG QUAN VỀ TẤN CÔNG CHÈN MÃ SQL VÀ CÁC BIỆN

PHÁP PHÒNG CHỐNG.............................................................................................3
1.1 Khái quát về tấn công chèn mã SQL .............................................................3
1.1.1 Giới thiệu tấn công chèn mã SQL ...........................................................3
1.1.2 Cơ chế tấn công chèn mã SQL ................................................................9
1.1.3 Các dạng tấn công chèn mã SQL ..........................................................11
1.2

Các biện pháp phòng chống tấn công chèn mã SQL ...................................19


1.2.1 Các biện pháp phòng chống ở mức lập trình .........................................20
1.2.2 Các biện pháp phòng chống ở mức độ nền tảng ...................................30
1.3

Kết chương 1 ................................................................................................32

CHƯƠNG II.

PHÁT HIỆN TẤN CÔNG CHÈN MÃ SQL DỰA TRÊN PHÂN

TÍCH CÚ PHÁP CÂU LỆNH...................................................................................33
2.1 Khái quát về ngôn ngữ SQL và cú pháp câu lệnh SQL ...............................33
2.1.1 Giới thiệu ngôn ngữ SQL ......................................................................33
2.1.2 Cú pháp cơ bản các câu lệnh SQL.........................................................36
2.2

Phát hiện tấn công chèn mã SQL dựa trên phân tích cú pháp câu lệnh .......43

2.2.1 Xây dựng các đặc tả câu lệnh SQL hợp lệ ............................................43
2.2.2 Bắt câu lệnh SQL từ ứng dụng web ......................................................44
2.2.3 Phân tích cú pháp câu lệnh SQL ...........................................................45
2.3

Kết chương 2 ................................................................................................51

CHƯƠNG III. THỬ NGHIỆM VÀ ĐÁNH GIÁ....................................................52
3.1 Xây dựng mô hình thử nghiệm ....................................................................52
3.1.1 Kiến trúc bộ lọc câu lệnh SQL - Database Filter ..................................52
3.1.2 Cài đặt bộ lọc cơ sở dữ liệu ...................................................................54
3.1.3 Giới thiệu một số mô đun chương trình ................................................56

3.2

Một số kết quả ..............................................................................................57


vii

3.2.1 Khởi tạo hệ thống ..................................................................................57
3.2.2 Kịch bản thử nghiệm tấn công chèn mã ................................................60
3.3

Nhận xét và đề xuất ......................................................................................62

3.3.1 Nhận xét.................................................................................................62
3.3.2 Đề xuất...................................................................................................63
3.4

Kết chương 3 ................................................................................................63

KẾT LUẬN
.........................................................................................................64
TÀI LIỆU THAM KHẢO .........................................................................................65


1

MỞ ĐẦU
Tấn công chèn mã (Code injection attacks) nói chung và tấn công chèn mã
SQL (SQL injection attacks) nói riêng là các dạng tấn công phổ biến lên các máy
chủ và các ứng dụng, gây nhiều hậu quả nghiêm trọng. Tấn công chèn mã SQL là

dạng tấn công chủ yếu được thực hiện trên các website, trong đó tin tặc nhúng mã
độc SQL vào dữ liệu người dùng, gửi đến máy chủ web và được thực hiện trên máy
chủ cơ sở dữ liệu (CSDL) của ứng dụng web. Tùy theo mức độ tinh vi của mã độc
SQL, tấn công chèn mã SQL có thể cho phép tin tặc vượt qua khâu xác thực người
dùng, chèn, sửa, xóa dữ liệu trong các bảng dữ liệu của CSDL, đánh cắp thông tin
trong CSDL, hoặc thậm chí có thể chiếm quyền điều khiển cả hệ thống chạy máy
chủ CSDL.
Có hai nguyên nhân chính của tấn công chèn mã SQL: (1) dữ liệu từ người
dùng hoặc các nguồn khác không được người lập trình kiểm tra, hoặc kiểm tra
không đầy đủ, và (2) các trang web sử dụng các câu truy vấn động, trong đó, mã
lệnh SQL gốc được ghép với dữ liệu từ người dùng để tạo câu truy vấn gửi đến thực
hiện trên máy chủ CSDL. Do tính chất nghiêm trọng của tấn công chèn mã SQL,
nhiều biện pháp phòng chống dạng tấn công này đã được nghiên cứu, đề xuất. Có
thể chia các biện pháp phòng chống tấn công chèn mã SQL thành 2 hướng chính:
(1) các hướng thực hiện ở mức lập trình và (2) các hướng ở mức nền tảng. Các
hướng ở mức lập trình yêu cầu trực tiếp thực hiện sửa mã của website, mã SQL của
ứng dụng để lọc dữ liệu, để loại bỏ mã độc SQL. Các hướng ở mức nền tảng thường
không yêu cầu trực tiếp sửa mã của website, hoặc mã SQL của ứng dụng, mà
thường sử dụng các công cụ của hệ thống, hoặc cài đặt các công cụ bổ sung để lọc,
phát hiện nguy cơ tấn công chèn mã trong các câu lệnh SQL gửi từ máy chủ web
đến máy chủ CSDL. Đề tài nghiên cứu thực hiện trong luận văn này theo hướng thứ
2, là hướng độc lập với ứng dụng web – không đòi hỏi sửa mã trang web và CSDL.
Luận văn gồm 3 chương chính sau:
Chương 1 – Tổng quan về tấn công chèn mã SQL và các biện pháp
phòng chống: giới thiệu khái quát về mục đích, cơ chế và mô tả chi tiết về các kiểu


2

tấn công chèn mã SQL. Bên cạnh đó nêu ra các nguy cơ, hậu quả cho máy chủ web

khi bị tấn công chèn mã SQL. Cuối chương sẽ trình bày các biện pháp phòng chống
tấn công chèn mã SQL theo hai hướng cụ thể nhằm giải quyết bài toán ngăn chặn
tấn công SQL Injection.
Chương 2 – Phát hiện tấn công chèn mã SQL dựa trên phân tích cú
pháp câu lệnh: Nội dung chương này giới thiệu khái quát về ngôn ngữ SQL và
nghiên cứu chi tiết về cú pháp cơ bản của các câu lệnh SQL. Từ đó xây dựng các
đặc tả câu lệnh SQL hợp lệ nhằm phục vụ việc phân tích cú pháp câu lệnh SQL.
Bên cạnh đó chương 2 cũng đưa ra giải pháp xây dựng bộ lọc có nhiệm vụ bắt các
câu lệnh SQL đi vào máy chủ web.
Chương 3 – Thử nghiệm và đánh giá: Chương này tập trung vào việc áp
dụng giải pháp được đề xuất ở chương hai để xây dựng bộ lọc cơ sở dữ liệu nhằm
chống lại tấn công chèn mã. Dựa trên kết quả thử nghiệm để đưa ra đánh giá, nhận
xét cho ứng dụng.


3

CHƯƠNG I.

TỔNG QUAN VỀ TẤN CÔNG CHÈN MÃ SQL
VÀ CÁC BIỆN PHÁP PHÒNG CHỐNG

1.1
1.1.1

Khái quát về tấn công chèn mã SQL
Giới thiệu tấn công chèn mã SQL

1.1.1.1 SQL Injection là gì
Trong những năm gần đây, các ứng dụng web có xu hướng trở thành phổ

biến. Một số lượng lớn các giao dịch điện tử bao gồm thương mại điện tử, ngân
hàng điện tử, học tập điện tử, các hoạt động của chính phủ ... có thể được tiến hành
trực tuyến bất cứ lúc nào và bất cứ nơi đâu. Do vậy việc đảm bảo an toàn thông tin
trên môi trường internet là một vấn đề vô cùng quan trọng.
Khi triển khai các ứng dụng web trên Internet, nhiều người vẫn nghĩ rằng
việc đảm bảo an toàn, bảo mật nhằm giảm thiểu tối đa khả năng bị tấn công từ các
tin tặc chỉ đơn thuần tập trung vào các vấn đề như chọn hệ điều hành, hệ quản trị cơ
sở dữ liệu, web server sẽ chạy ứng dụng, ... mà quên mất rằng ngay cả bản thân ứng
dụng chạy trên đó cũng tiềm ẩn một lỗ hổng bảo mật rất lớn. Một trong số các lỗ
hổng này đó là 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" (inject) 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ó có
thể rất lớn vì nó cho phép những kẻ tấn công có thể thực hiện các thao tác: vượt qua
khâu xác thực, đánh cắp thông tin trong cơ sở dữ liệu, chèn, xóa, sửa đổi dữ liệu bên
trong cơ sở dữ liệu, chiếm quyền điều khiển của hệ thống. 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.


4

1.1.1.2 Mục đích tấn công SQL Injection
- Thu thập thông tin về cơ sở dữ liệu: Kẻ tấn công muốn khám phá các loại
và phiên bản của cơ sở dữ liệu được ứng dụng web sử dụng. Một số loại cơ sở dữ
liệu có những phản ứng lỗi khác nhau khi thực truy vấn và tấn công, những thông
tin này có thể sử dụng để thu thập thông tin về cơ sở dữ liệu. Khi nắm được loại và
phiên bản của cơ sở dữ liệu được sử dụng cho ứng dụng web, kẻ tấn công có thể
khéo léo lựa chọn kiểu tấn công chèn mã phù hợp.

- Xác định lược đồ cơ sở dữ liệu: Để có thể trích xuất dữ liệu một cách
chính xác từ một cơ sở dữ liệu, kẻ tấn công thường cần những thông tin cơ bản về
lược đồ của cơ sở dữ liệu như tên bảng, tên cột, kiểu dữ liệu của cột. Các cuộc tấn
công này có mục đích chính thu thập và suy diễn ra thông tin dữ liệu.
- Trích xuất dữ liệu: Kiểu tấn công sử dụng kỹ thuật cho phép trích xuất các
giá trị từ cơ sở dữ liệu. Tùy thuộc vào loại ứng dụng web, các thông tin trích xuất
được có thể là những thông tin nhạy cảm rất có giá trị với kẻ tấn công. Các cuộc tấn
công với mục đích này phổ biến nhất trong các loại Tấn công chèn mã SQL.
- Thêm hoặc sửa đổi dữ liệu: Mục đích của kiểu tấn công này chính là việc
thêm hoặc thay đổi thông tin bên trong cơ sở dữ liệu.
- Từ chối dịch vụ: Kiểu tấn công này có mục đích làm gián đoạn hoặc tắt
dịch vụ cơ sở dữ liệu của ứng dụng web làm ảnh hưởng đến việc sử dụng dịch vụ
của người dùng khác. Các cuộc tấn công liên quan đến khóa hoặc hủy các bảng cơ
sở dữ liệu cũng là một kiểu thuộc dạng tấn công này.
- Tránh bị phát hiện: Nhóm này đề cập đến kỹ thuật tấn công được sử dụng
khéo léo để tránh khỏi sự phát hiện của các cơ chế bảo vệ hệ thống.
- Vượt qua xác thực: Mục đích của loại tấn ông này là cho phép những kẻ
tấn công có thể vượt qua cơ chế xác thực của cơ sở dữ liệu và ứng dụng web. Bỏ
qua các cơ chế như vậy giúp kẻ tấn công có thể nhận được các quyền, đặc quyền
liên quan đến việc sử dụng các ứng dụng khác nhau.


5

- Thực thi lệnh từ xa: Các cuộc tấn công dạng này tập trung vào việc cố
gắng thực thi các lệnh trên cơ sở dữ liệu. Các lệnh này lưu trữ các thủ tục hoặc các
chức năng sẵn có của người dùng.
- Leo thang đặc quyền: Các cuộc tấn công tận dụng lỗi triển khai hệ thống
hoặc các lỗ hổng suy diễn để leo thang đặc quyền của kẻ tấn công. Trái ngược với
kiểu tấn công vượt qua xác thực, ở đây kẻ tấn công tập trung vào việc khai thác các

đặc quyền của người dùng trên cơ sở dữ liệu.

1.1.1.3 Hậu quả của tấn công SQL Injection
Kết quả của SQLIA có thể là một thảm họa vì một SQL injection thành công
có thể đọc dữ liệu nhạy cảm từ cơ sở dữ liệu, sửa đổi dữ liệu cơ sở dữ liệu (Insert /
Update / Delete), thực hiện các hoạt động hành chính trên Cơ sở dữ liệu (chẳng hạn
như tắt máy DBMS), thu hồi nội dung trên hệ thống tập tin DBMS và thực hiện
lệnh (xp cmdshell) cho hệ điều hành. Các hậu quả chính của cuộc tấn công trên:
- Authorization - Cấp quyền: dữ liệu quan trọng được lưu trữ trong một cơ
sở dữ liệu SQL dễ bị tổn thương có thể bị thay đổi bởi một SQLI thành công, một
đặc quyền cho phép.
- Authentication - Xác thực: Nếu không có bất kỳ kiểm soát thích hợp vào
tên người dùng và mật khẩu bên trong trang xác thực, tin tặc có thể đăng nhập vào
một hệ thống như là một người sử dụng bình thường mà không cần có tên người
dùng và mật khẩu đúng.
- Confidentially - Bí mật: Thông thường cơ sở dữ liệu bao gồm các dữ liệu
nhạy cảm như thông tin cá nhân, số thẻ tín dụng ... Trên thực tế, hành vi trộm cắp
dữ liệu nhạy cảm là một trong những mục đích phổ biến nhất của những kẻ tấn
công.
- Integrity - Tính toàn vẹn: Khi tấn công SQL thành công không chỉ là kẻ
tấn công đọc thông tin nhạy cảm, mà cũng có thể thay đổi hoặc xóa thông tin cá
nhân này.


6

1.1.1.4 SQL Injection và an ninh dữ liệu
a. Một số thống kê
Chúng ta xét các báo cáo an ninh của các ứng dụng Web của Whitehat, một
tổ chức có uy tín trong việc nghiên cứu và hỗ trợ vấn đề an ninh mạng.

Thống kê 10 lỗ hổng bảo mật nghiêm trọng nhất tháng 3/2008:

Hình 1.1: Thống kê 10 điểm yếu phổ biến nhất 2008 (Nguồn: WhiteHat Security)

Kết quả thống kê tháng 2/2009

Hình 1.2: Thống kê 10 điểm yếu phổ biến nhất năm 2009 (Nguồn: WhiteHat Security)


7

Thống kê thời gian trung bình cần để khắc phục các lỗ hổng bảo mật kể trên:

Hình 1.3: Thống kê thời gian trung bình khắc phục điểm yếu 2008 (Nguồn: WhiteHat
Security)

Thống kê năm 2009

Hình 1.4: Thống kê thời gian trung bình khắc phục điểm yếu 2009(Nguồn: WhiteHat
Security)


8

Thống kê tỉ lệ điểm yếu thường xuyên bị tin tặc khai thác. Thống kê được
trích trong một bài báo đăng trên tạp chí Computerworld năm 2010.
( />sues?taxonomyId=17&pageNumber=1)

Hình 1.5: Thống kê các điểm yếu thường được khai thác
(Nguồn: />cidents-2009.pdf)


b. Nhận xét
Dựa vào các thống kê trên có thể rút ra vài nhận xét sau về lỗi SQL Injection:
- Là một trong số những lỗi bảo mật phổ biến nhất
- Xác suất gặp phải lỗ hổng bảo mật loại này trong một trang web là khá
cao
- Được sử dụng nhiều, lý do một phần bởi tính đơn giản, không đòi hỏi
nhiều công cụ hỗ trợ.
- Thời gian khắc phục các điểm yếu này thường khá lâu, do đó hậu quả
thường nặng nề hơn.
Trên thực tế, các cuộc tấn công SQL Injection thường nhắm đến các cơ sở dữ
liệu mang tính thương mại, ví dụ các trang web thương mại điện tử. Thông thường,
các cuộc tấn công này thường sẽ tiến hành việc sửa đổi nội dung của các đối tượng


9

trong cơ sở dữ liệu và chèn các đoạn mã JavaScript độc. Bản chất điểm yếu SQL
Injection là xuất hiện từ trong quá trình xử lý dữ liệu đầu vào của người dùng bên
trong mã nguồn, do chính thời gian bảo trì mã nguồn thường kéo dài nên các lỗi
SQL Injection cũng chậm được khắc phục triệt để.
Với tính nghiêm trọng của các cuộc tấn công, tính dễ thực hiện một cuộc tấn
công đã khiến cho SQL Injection một thời từng là hiểm họa nghiêm trọng đối với
các giao dịch thương mại điện tử trên các ứng dụng Web được phát triển thiếu an
toàn. Hiện nay, việc nghiên cứu SQL Injection đã có hệ thống và toàn diện hơn, mối
nguy hiểm này đã giảm đi, nhưng số liệu thống kê vẫn cho thấy vấn đề này còn
chưa được giải quyết triệt để.
Ở nước ta, các lập trình viên ứng dụng Web được đào tạo nhiều kiến thức và
kỹ năng cần thiết để xây dựng những hệ thống ứng dụng web, tuy nhiên các lập
trình viên cũng cần được trang bị các kiến thức về bảo mật, lập trình an toàn nếu

không các sản phẩm của họ có nguy cơ mắc phải những vấn đề về bảo mật, điều mà
không đáng có nếu họ được trang bị tốt hiểu biết từ đầu.

1.1.2

Cơ chế tấn công chèn mã SQL
Các câu lệnh SQL độc hại có thể được đưa vào trong một ứng dụng web dễ

bị tổn thương thông qua nhiều kỹ thuật xử lý dữ liệu đầu vào khác nhau. Luận văn
này sẽ giới thiệu một một số cơ chế phổ biến nhiều nhất:
- Chèn mã thông qua đầu vào người dùng: Kỹ thuật này kẻ tấn công chèn
mã SQL bằng cách chỉnh sửa các dữ liệu đầu vào phía người dùng một cách khéo
và chuyển đến máy chủ để thực hiện các câu truy vấn. Ứng dụng web có thể đọc dữ
liệu đầu vào từ phía người dùng theo nhiều cách dựa trên môi trường mà ứng dụng
đó được triển khai. Hầu hết các tấn công chèn mã SQL vào ứng dụng web, các dữ
liệu từ phía người dùng thường được gửi đến ứng dụng web thông qua hai phương
thức chính là HTTP GET hoặc HTTP POST.
- Chèn mã thông qua Cookie: Cookie là một tập tin chứa các thông tin
trạng thái được tạo ra bởi các ứng dụng web và lưu trữ trên trình duyệt của máy
khách. Các thông tin trong cookie có thể là tên đăng nhập, mật khẩu, các lựa chọn


10

của người dùng đi kèm. Khi người dùng truy cập lại một ứng dụng web, cookie có
thế được sử dụng để khôi phục lại trạng thái của người dùng. Từ khi máy khách
kiểm soát và điều khiển việc lưu trữ và nội dung của cookie, những người dùng độc
hại có thể thay đổi nội dung của cookie. Nếu ứng dụng web sử dụng nội dung của
cookie để xây dựng các câu truy vấn SQL, kẻ tấn công có thể dễ dàng thực hiện một
cuộc tấn công chèn mã bằng cách nhúng các câu truy vấn độc hại vào trong cookie.

- Chèn mã thông qua các biến máy chủ: Các biến máy chủ là bộ sưu tập
của các các biến có chứa HTTP, network header, và các biến môi trường. Các ứng
dụng web sử dụng các biến máy chủ trong nhiều trường hợp và theo nhiều các khác
nhau ví dụ như thống kê sử dụng đăng nhập, xác định chuyển hướng trình duyệt.
Nếu thông tin trong các biến này được lưu trữ vào cơ sở dữ liệu mà không được
kiểm tra một cách cẩn thận thì khả năng tồn tại lỗ hổng để có thể tạo ra cuộc tấn
công chèn mã SQL. Bởi vì kẻ tấn công có thể giả mạo thông tin trong đặt trong các
tiêu đề của các yêu cầu HTTP, hoặc tiêu đề mạng nên chúng có thể khai thác lỗ
hổng và đặt mã SQL độc hại vào các tiêu đề này. Khi ứng dụng web sử dụng các
biến chứa các này cung cấp cho cơ sở dữ liệu thì tấn công chèn mã SQL xảy ra.
- Chèn mã cấp hai: Trong chèn mã cấp 2, kẻ tấn công sẽ gieo một hạt giống
đầu vào độc hại vào trong hệ thống hoặc cơ sở dữ liệu một cách gián tiếp để gây ra
tấn công chèn mã SQL khi đầu vào được sử dụng vào một thời gian nào đó. Mục
tiêu của kiểu tấn công này khác so với tấn công chèn mã bình thường (chèn mã cấp
1). Chèn mã cấp 2 không cố gắng để gây ra cuộc tấn công chèn mã khi các đầu vào
độc hại lần đầu tiên được gửi đến cơ sở dữ liệu. Thay vào đó, kẻ tấn công sẽ tìm
hiểu về việc dữ liệu đầu vào được sử dụng sau đó, bằng sự khéo léo kẻ tấn công sẽ
chèn dữ liệu đầu vào sao cho khi nó được sử dụng sẽ gây ra một cuộc tấn công chèn
mã gián tiếp. Để làm rõ cho kiểu tấn công này, luận văn sẽ trình bày một ví dụ điển
hình cho kiểu tấn công này.
Ví dụ: trên một ứng dụng web cho phép người dùng có thể đăng ký thành
viên. Kẻ tấn công sẽ sử dụng chức năng này để gieo hạt giống đầu tiên với việc
đăng ký hợp pháp với tên người dùng là “admin’-- ” và mật khẩu là “Password”.


11

Những ứng dụng web có cơ chế thoát khỏi các dấu nháy đơn, các biểu thức chính
quy có thể chống lại việc này một cách triệt để. Tại thời điểm này, người dùng có
quyền chỉnh sửa những thông tin về tài khoản của mình như thay đổi mật khẩu. Các

ứng dụng web có thể cung cấp tính năng chỉnh sửa trên người dùng thông qua một
câu truy vấn SQL như sau:
queryString=”UPDATE users SET password=’ " + newPassword +
"’ WHERE userName=’" + userName + "’ AND password=’" +
oldPassword + "’"
newPassword là mật khẩu được cập nhật mới cho mật khẩu cũ là:
oldPassword với userName là: admin’--. Đây chính là lúc tấn công chèn mã SQL
được kích hoạt, câu truy vấn được gửi lên máy chủ cơ sở dữ liệu sẽ là:
UPDATE users SET password=’newPassword’
WHERE userName= ’admin’--’ AND password=’password’
Như vậy mọi người dùng có userName là: admin sẽ được cập nhật mật khẩu
mới theo ý của kẻ tấn công bởi vì trong các hệ quản trị cơ sở dữ liệu nội dung sau
dấu ‘--’ đều được xem là ghi chú.
Sẽ là rất khó khăn trong việc phát hiện và ngăn chặn tấn công chèn mã cấp 2
do điểm chèn mã và điểm bị tấn công thực sự khác nhau. Một khi nhà phát triển ứng
dụng web thực hiện việc kiểm tra, lọc đầu vào từ người sử dụng và nghĩ rằng điều
đó là đủ đảm bảo an toàn cho dữ liệu. Sau đó, trong một ngữ cảnh khác, dữ liệu sau
khi được lọc đó được sử dụng có thể là nguồn gốc cho tấn công chèn mã SQL.

1.1.3

Các dạng tấn công chèn mã SQL
Các cuộc tấn công nhắm tới lớp cơ sở dữ liệu của ứng dụng Web xét theo

mục đích được chia làm hai nhánh chính: thứ nhất là nhắm tới dữ liệu chứa trong cơ
sở dữ liệu, thứ hai là nhắm tới chính bản thân cơ sở dữ liệu. Trường hợp thứ nhất
thường là kẻ tấn công nhắm tới các thông tin có giá trị như thông tin cá nhân, thông
tin tài chính, … trong trường hợp thứ hai kẻ tấn công muốn biến cơ sở dữ liệu thành
cửa ngõ để thâm nhập sâu hơn vào trong mạng lưới của tổ chức sở hữu ứng dụng



12

Web đang bị tấn công. Chúng ta sẽ xét một số phương pháp tấn công phục vụ hai
mục đích này.

1.1.3.1 Tấn công vượt qua kiểm tra đăng nhập
Mục đích chung của kiểu tấn công này dựa trên công thức hằng đúng là chèn
mã vào trong câu lệnh điều kiện để kết quả luôn là đúng. Hậu quả của kiểu tấn công
này phụ thuộc vào kết quả trả lại của câu truy vấn được sử dụng trong các ứng dụng
web. Nhưng phổ biến nhất chính là sử dụng để vượt qua các bước xác thực và trích
xuất dữ liệu.
Trong kiểu tấn công chèn mã này, kẻ tấn công khai thác có thể chèn vào các
trường được sử dụng trong vế điều kiện “WHERE” của câu truy vấn. Việc chuyển
đổi điều kiện vào làm điều kiện của câu truy vấn luôn đúng và câu try vấn sẽ trả về
tất cả bản ghi trong bảng cơ sở dữ liệu. Tóm lại, để thực hiện kiểu tấn công này kẻ
tấn công cần phải xem xét không chỉ các yếu tố để chèn mã/các lỗ hổng, mà còn
phải xây dựng đoạn mã để có đánh giá kết quả của câu truy vấn trả lại. Thông
thường các cuộc tấn công kiểu này thành công khi mã hoặc các bản ghi được trả lại
được hiện thị tất cả hoặc có một vài hành động được thực hiện khi có ít nhất một
bản ghi được trả về. Ví dụ: kẻ tấn công chèn chuỗi " ' or a=a vào trường login của
form đăng nhập. Câu truy vấn được thực hiện sẽ là.
SELECT accounts FROM users WHERE login=" or a=a-- AND
pass=" AND pin=
Đoạn mã được chèn vào vế điều kiện là "or 1=1" biến đổi toàn bộ mệnh đề
WHERE thành luôn đúng. Các cơ sở dữ liệu dùng điều kiện như là cơ sở cho việc
đánh giá bản ghi và quyết định những gì được trả lại cho ứng dụng.

1.1.3.2 Tấn công sử dụng câu lệnh SELECT
Kiểu tấn công này cho phép kẻ tấn công thu thập các thông tin quan trọng về

kiểu và cấu trúc của hệ thống cơ sở dữ liệu đầu cuối của ứng dụng web.
Tấn công này, thường được sử dụng để thu thập thông tin và là bước chuẩn
bị cho các cuộc tấn công khác. Lỗ hổng để thực hiện cuộc tấn công trên chính là các


13

trang lỗi mặc định được trả lại bởi máy chủ ứng dụng web thường là quá chi tiết.
Trong thực tế, các thông báo lỗi quá chi tiết thường cung cấp các thông tin có thể
dùng để tấn công, hoặc tạo điều kiện cho tấn công chèn mã. Việc thông báo lỗi chi
tiết, ban đầu có mục đích giúp cho những người lập trình có thể sửa lỗi của ứng
dụng, Tuy nhiên, nó cũng giúp những kẻ tấn công có thể thu thập thông tin về lược
đồ cơ sở dữ liệu của cơ sở dữ liệu đầu cuối. Khi thực hiện kiểu tấn công này, kẻ tấn
công sẽ cố gắng thử nhiều câu lệnh chèn mã sao cho xuất hiện các cảnh báo lỗi đưa
ra do có lỗi cú pháp, định dạng, logic. Các lỗi cú pháp thường được sử dụng để xác
định yếu tố có thể chèn mã. Loại lỗi này có thể dùng để suy diễn ra kiểu dữ liệu của
một cột nhất định hoặc trích xuất dữ liệu. Các lỗi logic thường tiết lộ tên của các
bảng và cột gây ra lỗi.
Ví dụ: Trang đăng nhập có 3 trường đầu vào là username, password và mã
pin với đoạn truy vấn sau để thực hiện việc đăng nhập:
SELECT accounts FROM users WHERE login=’’ AND pass=’’ AND
pin=
Mục đích gây ra lỗi có thể tiết lộ thông tin dữ liệu. Để làm việc này kẻ tấn
công sẽ chèn nội dung sau vào trong trường đầu vào chứa mã pin:
“convert(int,(select top 1 name from sys.objects where xtype=’u’))”. Câu truy vấn
trở thành:
SELECT accounts FROM users WHERE login=’’ AND pass=’’ AND
pin= convert (int,(select top 1 name from sys.objects where
xtype=’u’))
Trong chuỗi tấn công, mã chèn vào với mục đích cố gắng trích xuất dữ liệu

về thông tin các bảng người dùng (xtype = ‘u’) từ bảng metadata của của cơ sở dữ
liệu (Trong ví dụ giả sử dụng Microsoft SQL Server vì vậy bảng metadata gọi là
sys.objects). Câu truy vấn sau đó cố gắng chuyển tên của bảng này vào một số
nguyên. Bởi vậy đây là kiểu chuyển đổi lỗi, cơ sở dữ liệu sẽ đưa ra lỗi. Trong
trường hợp này sẽ là : Microsoft OLE DB Provider for SQL Server (0x80040E07)
Error converting nvarchar value ’CreditCards ’ to a column of data type int. Ta có


14

thấy có 2 thông tin rất nguy hiểm chưa trong lỗi đó là tên của máy chủ cơ sở dữ liệu
và tên của bảng ’CreditCards’ được mô tả trong lỗi.

1.1.3.3 Tấn công khai thác dữ liệu thông qua toán tử UNION
Khai thác thông tin thông qua việc sử dụng UNION là một trong 2 nhánh
chính của việc khai thác dữ liệu thông qua lỗi SQL Injection. Các điểm yếu SQL
Injection có thể khai thác được thông qua UNION là dạng điểm yếu mà thông tin trả
về có thể được hiển thị trực tiếp trên thông điệp phản hồi.
Trong kiểu tấn công này, kẻ tấn công khai thác một tham số dễ bị tổn thương
để thay đổi các thiết lập dữ liệu trả về với một câu truy vấn, từ đó lừa ứng dụng
trong việc trả về dữ liệu từ bảng dữ liệu khác. Kẻ tấn công làm được việc này bằng
cách nối câu truy vấn hiện tại với câu truy vấn mới sử dụng từ khóa UNION
SELECT. Bởi vì những kẻ tấn công hoàn toàn kiểm soát được việc đưa ra kết quả
của câu truy vấn khi thực hiện chèn mã nên có thể dùng các câu truy vấn để lấy
thông tin từ các bảng dữ liệu đặc biệt trong cơ sở dữ liệu. Kết quả của kiểu tấn công
này là cơ sở dữ liệu trả lại một tập dữ liệu thông qua câu truy vấn ban đầu và câu
truy vấn UNION tiếp theo được chèn vào.
Ví dụ: Với bảng CreditCards, kẻ tấn công sẽ chèn đoạn mã “ ‘UNION
SELECT cardNo FROM CreditCards WHERE acctNo=10032-- ” vào trong trường
login. Khi đó câu query sẽ trở thành:

SELECT accounts FROM users WHERE login=’’
UNION SELECT cardNo from CreditCards WHERE
acctNo=10032-- AND pass=’’ AND pin=
Giả sử không có đăng nhập, câu truy vấn đầu tiên đưa ra giá trị null, trong
khi câu truy vấn thứ 2 đưa ra dữ liệu từ bảng “CreditCards”. Trong trường hợp này,
cơ sở dữ liệu trả về cột cardNo từ bảng CreditCard cho tài khoản 10032. Tùy theo
từng ứng dụng mà dữ liệu có thể trả về thông tin cho kẻ tấn công có thể hiển thị trên
chính ứng dụng như sử dụng trong việc tìm kiếm sản phẩm


15

1.1.3.4 Tấn công truy vấn ngược
Kẻ tấn công cố gắng nối thêm các câu truy vấn SQL mới vào câu truy vấn
ban đầu. Trong trường hợp này, cách thực hiện khác so với các kiểu tấn công khác,
khi kẻ tấn công không cố gắng thay đổi mục đích câu truy vấn ban đầu của ứng
dụng mà thay vào đó, họ cố gắng thực hiện chèn thêm các câu truy vấn mới khác
biệt so với câu truy vấn ban đầu. Kết quả là, cơ sở dữ liệu nhận được nhiều câu truy
vấn SQL. Các câu truy vấn của ứng dụng vẫn được thực hiện một cách bình thường,
những câu truy vấn tiếp theo được thực hiện sẽ là các câu được chèn vào và thực
hiện ngoài sự kiểm soát của người dùng. Đây là kiểu tấn công gây hại nguy hiểm.
Nếu như thành công, kẻ tấn công có thể chèn bất kì một loại lệnh SQL nào để thực
hiện ý định của mình, trong đó bao gồm cả các thủ tục cơ sở dữ liệu. Kiểu tấn công
này xảy ra do lỗ hổng trong việc cấu hình cơ sở dữ liệu cho phép nhiều câu lệnh có
thể thực hiện trong cùng một chuỗi truy vấn duy nhất.
Ví dụ: Nếu kẻ tấn công đưa đoạn mã ; drop table users vào trong trường pass
thì ứng dụng sẽ tạo ra câu truy vấn sau để gửi lên máy chủ cơ sở dữ liệu:
SELECT accounts FROM users
WHERE login=’admin’ AND pass=’’; drop table users-- ’ AND
pin=123

Sau khi hoàn tất câu truy vấn chính “SELECT accounts FROM users
WHERE login=’admin’ AND pass=’’, cơ sở dữ liệu nhận ra các câu truy vấn tiếp
theo thông qua kí tự (“;”) và thực hiện câu truy vấn đó. Kết quả câu truy vấn thứ 2
sau khi thực hiện là cơ sở dữ liệu sẽ hủy bảng dữ liệu “users” và có khả năng phá
hủy các thông tin giá trị của ứng dụng. Một kiểu tấn công khác của loại này là chèn
thêm các bản ghi mới hoặc chỉnh sửa thông tin các bản ghi thông qua các câu lệnh
INSERT, UPDATE thứ 2 hoặc thực hiện các thủ tực cơ sở dữ liệu. Lưu ý rằng các
cơ sở dữ liệu không yêu cầu một kí tự đặc biệt để tách biệt các câu truy vấn nên việc
lọc các kí tự tách câu truy vấn đôi khi không thể chống lại kiểu tấn công này.


16

1.1.3.5 Tấn công suy diễn thông tin
Trong kiểu tấn công này, câu truy vấn được chỉnh sửa để viết lại nó dưới
hình thức của một hành động mà khi được thực thi nó sẽ đưa ra câu trả lời là đúng
hay sai về sự tồn tại của một giá trị nằm bên trong cơ sở dữ liệu. Loại tấn công chèn
mã này thường được kẻ tấn công sử dụng để tấn công một trang web được bảo vệ
đủ an toàn để mà ngay cả khi cuộc tấn công có thành công thì cũng không có thông
tin phản hồi thông qua các thông báo lỗi của cơ sở dữ liệu. Khi cơ sở dữ liệu không
thông báo lỗi nữa, kẻ tấn công sẽ bị mù thông tin về hành động mà nó đã thực hiện.
Vì vậy kẻ tấn công phải thực hiện một kỹ thuật khác để có thể thu thập được thông
tin phải hồi lại của cơ sở dữ liệu. Trong tình huống này, kẻ tấn công sẽ chèn mã vào
các trang web và quan sát các chức năng/phản ứng của trang web làm việc và có
thay đổi như thế nào. Bằng cách cẩn thận quan sát mọi thay đổi và hành vi hồi đáp
của trang web sau khi nhận mã, kẻ tấn công có thể suy luận ra không chỉ các thông
số nhất định có thể bị tổn thương mà còn có cả các thông tin về các giá trị bên trong
cơ sở dữ liệu. Đây được xem là kỹ thuật tấn công mù. Nó cho phép kẻ tấn công có
thể trích xuất dữ liệu và phát hiện ra các yếu tố dễ bị tổn thương. Có hai kỹ thuật tấn
công phổ biến dựa trên suy luận:

Chèn mã mù: Trong kỹ thuật này, các thông tin phải được suy ra từ các hoạt
động của trang bằng cách yêu cầu máy chủ trả lời có hay không. Nếu những đoạn
mã được chèn vào nhận định là đúng có nghĩa là trang web vẫn hoạt động bình
thường. Nếu đoạn mã chèn nhận định là sai mặc dù không có mô tả nhưng vẫn có
sự hoạt động khác với những trang hoạt động bình thường.
Tấn công thời gian: Một cuộc tấn công thời gian cho phép kẻ tấn công thu
thập thông tin từ cơ sở dữ liệu bằng cách quan sát sự chậm trễ về thời gian trong
quá trình phản ứng lại các yêu cầu của cơ sở dữ liệu. Cuộc tấn công này tương tự
tấn công mù nhưng sử dụng phương pháp suy luận khác. Để thực hiện một cuộc tấn
công thời gian, kẻ tấn công sẽ chèn câu truy vấn dạng câu lệnh if/then, điều kiện
tương đương với một giá trị có bên trong nội dung của cơ sở dữ liệu và nếu như giá
trị ấy tồn tại thì kẻ tấn công sẽ sử dụng thêm các lênh, hoặc hàm để cho việc thực


×