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

Tìm hiểu và triển khai giải pháp phát hiện và phòng chống lỗ hổng SQL injection

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 (3.53 MB, 42 trang )

TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP THỰC PHẨM TP.HCM
KHOA CÔNG NGHỆ THƠNG TIN
Ngành An Tồn Thơng Tin
–&–

BẢN BÁO CÁO ĐỒ ÁN MƠN HỌC

Tìm hiểu và triển khai giải pháp phát hiện và phòng
chống lỗ hổng SQL Injection.
GVHD: Nguyễn Thị Hồng Thảo
SVTH:

Họ và Tên

MSSV

Đỗ Thị Như Ý

2033181084

Đặng Ngọc Gia Linh

2033183001

TP.Hồ Chí Minh, 8 tháng 6 năm 2021


NHẬN XÉT GIẢNG VIÊN HƯỚNG DẪN
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................


...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
TP.HCM, ngày tháng năm 2021
(kí và ghi gõ họ tên )


NHẬN XÉT GIẢNG VIÊN CHẤM PHẢN BIỆN
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................

...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
...............................................................................................................................
TP.HCM, ngày tháng năm 2021
(kí và ghi gõ họ tên )

TP.HCM, ngày tháng năm 2021
(kí và ghi gõ họ tên )


Mục lục


Danh mục hình ảnh



Danh mục từ viết tắt
SQL
SQLi
CSDL
WAF
DVWA

Structured Query Language
Structured Query Language Injection
Cơ sở dữ liệu
Web Application Firewall
Damn Vulnerable Web Application


Chương 1: Cơ sở lí thuyết
1. Giới thiệu cơ sở dữ liệu
1.1. Cơ sở dữ liệu (Database):
Là những thông tin về một tổ chức hay cá nhân (một trường học, cơng
ty, nhà máy...) chúng có mối quan hệ với nhau. Được lưu trữ trên máy
tính và các thiết bị ( như USB, thẻ nhớ, đĩa từ...) để phục vụ cho nhu
cầu khai thác thơng tin với nhiều mục đích khác nhau.
1.2. Hệ quản trị CSDL
Là một phần mềm hệ thống nhằm tương tác với người dùng cho phép
người dùng thực hiện những điều sau:
• Trình bày chi tiết về cấu trúc của dữ liệu.
• Lưu trữ dữ liệu trên các thiết bị.
• Tìm kiếm, lưu, xóa và chỉnh sửa thơng tin trên database.
1.3. Ngôn ngữ giao tiếp giữa người sử dụng và CSDL

- Ngôn ngữ truy vấn dữ liệu (Structured Query Language - SQL): dùng
để truy vấn các thông tin cần thiết trong CSDL.
• Ngơn ngữ mơ tả dữ liệu (Data Definition Language - DDL): cho
phép tạo cấu trúc các bảng của CSDL, các mối liên hệ của dữ liệu
(như các ràng buộc tồn vẹn hay khóa).
• Ngơn ngữ thao tác dữ liệu (Data Manipulation Language - DML):
cho phép người dùng chọn, thêm, xóa và sửa dữ liệu trong CSDL.
- Ngôn ngữ quản lý dữ liệu (Data Control Language - DCL): cho phép
những người quản trị thay đổi cấu trúc các bảng, kiểm sốt bảo mật
thơng tin,cấp quyền truy cập và khai thác vào CSDL cho người dùng.
1.4. Các loại mơ hình dữ liệu
• Mơ hình dữ liệu phân cấp (Hierarchical Model): Dữ liệu ở mơ hình
này được chia thành các nút nhỏ và được dùng để thể hiện cho một
thực thể nhất định để tạo nên một cấu trúc dạng cây cây. Giữa nút con
và nút cha được liên hệ với nhau theo một mối quan hệ xác định. Nó
phù hợp trong việc phân cấp nhân viên trong một cơng ty, cơ quan hay
tổ chức nào đó.
• Mơ hình mạng (Network Model): Mơ hình được biểu diễn bởi một đồ
thị có hướng. Các thức thực nằm trên các đỉnh còn đường đi từ đỉnh
này sang đỉnh khác còn được gọi là mỗi quan hệ giữa hai đỉnh đó.


• Mơ hình dữ liệu quan hệ (Relation Data Model): Trong mơ hình quan
hệ, dữ liệu được tổ chức thành từng bảng, mỗi bảng tương ứng với
một thực thể trong hệ thống. Những khái niệm sử dụng trong mơ hình
bao gồm: thuộc tính, quan hệ, lược đồ quan hệ, bộ, khóa.
• Mơ hình dữ liệu hướng đối tượng (Object Oriented Model): Dựa trên
tiếp cận hướng đối tượng bao gồm các khái niệm: lớp, kế thừa. Đặc
trưng cơ bản về tính chất của mơ hình này là tính đóng gói, đa hình,
tính tái sử dụng và kế thừa. Đây là loại mơ hình tiên tiến nhất hiện

nay.
• Mơ hình dữ liệu thực thể kết hợp (Entity – Relationship Model): Các
khái niệm được sử dụng trong mơ hình này là: các thực thể, thuộc tính
của các loại thực thể, khóa của loại thực thể, các mối kết hợp.
2. Giới thiệu về an ninh cơ sở dữ liệu
2.1. An ninh cơ sở dữ liệu là gì?
Là việc sử dụng các thủ thuật cho việc kiểm sốt bảo mật thơng tin
nhằm bảo vệ cơ sở dữ liệu, chống lại sự xâm phạm để đảm bảo tính bảo
mật, tồn vẹn và khả dụng của dữ liệu.
2.2. Thành phần an ninh cơ sở dữ liệu
• Database Activity Monitoring: Giám sát các máy chủ cơ sở dữ liệu,
cảnh báo, ngăn chặn các hành vi xấu đến cơ sở dữ liệu trong thời gian
thực, kể cả khi chạy trên nền tảng ảo hố hoặc trên mơi trường đám
mây.
• Virtual Patching: Không cần làm gián đoạn hoạt động của hệ thống
virtual patching phát hiện những bản vá còn thiếu và nhờ việc quét lỗ
hổng ta có thể sửa các lỗ hổng bảo mật nhằm nâng cao khả năng khả
năng bảo mật cơ sở dữ liệu của hệ thống
• Vulnerability Manager for Database: Tự động quét cơ sở dữ liệu có
trong hệ thống mạng, quyết định việc thực thi các bản vá cuối cùng
chưa được áp dụng, kiểm tra các lỗ hổng như mật khẩu yếu hay kiểm
ta xem các lỗ hổng thơng thường có gây hại gì cho hệ thống hay
khơng.
2.3. Ưu điểm
- Vulnerablility Manager:
• Hầu hết các lỗ hổng mới được cập nhật trong vòng 72 giờ.


• Tự động ngăn chặn các cuộc tấn công dựa vào các hành vi của
người dùng thực thi trên cơ sở dữ liệu đồng thời tự động cập nhật

lại các chính sách.
- Database Activity Monitor:
• Theo dõi các mối đe doạ bên trong cơ sở dữ liệu.
• Ngăn chặn trước các cuộc tấn cơng.
• Tiết kiệm thời gian và tiền bạc.
• Xây dựng đơn giản, nhanh chóng.
• Khơng cần ngắt hoạt động hệ thống trong khi cài đặt hay cập
nhật.
- Virtual Patching
• Tích hợp với giám sát hành vi người dùng trên cơ sở dữ liệu. Để
phát hiện và ngăn chặn kịp thời các hành vi gây hại đến cơ sở dữ
liệu.
• Khơng cần thay đổi cấu hình cũng thể thể bảo về được cơ sở dữ
liệu khỏi những lỗ hổng và những điểm yếu về bảo mật.
• Việc bảo vệ lỗ hổng được thực thi với 48-72 giờ sau khi lỗ hổng
hoặc bản vá được công bố bởi nhà cung cấp.
3. Tìm hiểu về SQL Injection

Hình 1.3. 1: Cơ chế tấn cơng SQL Injection
3.1. SQL là gì?


- SQL (Structured Query Language) là ngôn ngữ truy vấn có cấu trúc
cho phép người sử dụng có thể khai thác cơ sở dữ liệu, truy vấn các
thông tin cần thiết trong cơ sở dữ liệu.
- Ưu điểm của SQL:
• Dùng SQL có thể truy cập dữ liệu trong hệ thống cơ sở dữ liệu.
• Cho phép mơ tả dữ liệu.
• Thao tác với dữ liệu trong cơ sở dữ liệu và xác định dữ liệu đó.
• Cho phép nhúng trong các ngôn ngữ khác sử dụng mô-đun SQL,

thư viện và trình biên dịch trước.
• Cho phép tạo các cơ sở dữ liệu và các bảng.
• Cho phép tạo chế độ view, thủ tục lưu trữ, chức năng trong cở dữ
liệu.
• Cho phép thiết lập quyền trên các bảng thủ tục và view.
- Hạn chế của SQL:
• Giao diện của SQL tương đối phức tạp khiến một số người dùng
khó truy cập.
• Khơng được tồn quyền kiểm sốt.
• Phần mở rộng của các chương trình cơ sở dữa liệu SQL đều là độc
quyền của các nhà cung cấp.
• Khó tiếp cận đến SQL đối với những người lập trình vì chi phí
vận hành cho các phiên bản của SQL tương đối cao.
3.2. SQL Injection là gì?
- Là kỹ thuật dùng những đoạn SQL làm sai đi câu truy vấn ban đầu của
cơ sở dữ liệu, từ đó kẻ tấn cơng có thể khai thác dữ liệu và có thể thao
tác như một người quản trị. Nhờ vào những lỗ hổng câu truy vấn của
ứng dụng.
- Các thành phần dễ bị tấn cơng
• Form đăng nhập.
• Form tìm kiếm.
• Form nhận xét.
• Liên kết của website.
- Một số thao tác phổ biến để tấn cơng:
• Kiểm tra đăng nhập ứng dụng.
• Thao tác lưu comment của user xuống database.


• Tìm kiếm thơng tin như user, sản phẩm cũng có thể tìm được


mật khẩu của user.
- Phân loại các kiểu tấn cơng SQL Injection

Hình 1.3. 2: Các dạng SQL Injection
SQL Injection có thể chia thanh các kiểu sau:
 In-band SQLi:
• Đây là dạng tấn cơng phổ biến nhất và cũng dễ để khai thác lỗ
hổng SQL Injection nhất
• Xảy ra khi hacker có thể tấn cơng và thu thập kết quả trực tiếp
trên cùng một kênh liên lạc
• In-Band SQLi chia làm 2 loại chính:
o Error-based SQLi
Là một kỹ thuật tấn công SQL Injection dựa vào thông báo
lỗi được trả về từ Database Server có chứa thơng tin về cấu
trúc của cơ sở dữ liệu.
o Union-based SQLi
Là một kỹ thuật tấn cơng SQL Injection dựa vào của tốn tử
UNION trong ngôn ngữ SQL cho phép tổng hợp kết quả của
2 hay nhiều câu truy vấn SELECTION trong cùng 1 kết quả
và được trả về như một phần của HTTP response.
 Inferential SQLi (Blind SQLi)


• Không giống như In-band SQLi, Inferential SQL Injection tốn
nhiều thời gian hơn cho việc tấn cơng do khơng có bất kì dữ
liệu nào được thực sự trả về thơng qua web application và
hacker thì khơng thể theo dõi kết quả trực tiếp như kiểu tấn
cơng In-band
• Thay vào đó, kẻ tấn công sẽ cố gắng xây dựng lại cấu trúc cơ sở
dữ liệu bằng việc gửi đi các payloads, dựa vào kết quả phản hồi

của web application và kết quả hành vi của database server.
• Inferential SQLi chia làm 2 loại
o Blind-boolean-based SQLi
 Là kĩ thuật tấn công SQL Injection dựa vào việc gửi các
truy vấn tới cơ sở dữ liệu. Thông qua việc xem xét các
phản hồi kẻ tấn có thể suy ra việc tiêm có thành cơng hay
khơng. Vì phản hồi trả về True hoặc False và nó sẽ khơng
chứa bất kì dữ liệu nào từ cơ sở dữ liệu.
 Kiểu tấn công này thường chậm (đặc biệt với cơ sở dữ
liệu có kích thước lớn) do người tấn công cần phải liệt kê
từng dữ liệu, hoặc mị từng kí tự
o Time-based-blind SQLi
 Time-base Blind SQLi là kĩ thuật tấn công dựa vào việc
gửi những câu truy vấn tới cơ sở dữ liệu và buộc cơ sở dữ
liệu phải chờ một khoảng thời gian (thường tính bằng
giây) trước khi phản hồi.
 Thời gian phản hồi (ngay lập tức hay trễ theo khoảng thời
gian được set) cho phép kẻ tấn cơng suy đốn kết quả truy
vấn là TRUE hay FALSE
 Kiểu tấn công này cũng tốn nhiều thời gian tương tự như
Boolean-based SQLi
 Out-of-band SQLi
• Out-of-band SQLi khơng phải dạng tấn cơng phổ biến, chủ yếu
bởi vì nó phụ thuộc vào các tính năng được bật trên Database
Server được sử dụng bởi Web Application.


-

• Kiểu tấn cơng này xảy ra khi hacker khơng thể trực tiếp tấn

công và thu thập kết quả trực tiếp trên cùng một kênh (In-band
SQLi), và đặc biệt là việc phản hồi từ server là khơng ổn định
• Kiểu tấn công này phụ thuộc vào khả năng server thực hiện các
request DNS hoặc HTTP để chuyển dữ liệu cho kẻ tấn cơng.
Hậu quả khi bị tấn cơng:
• Dữ liệu trong cơ sở dữ liệu bị lộ. Hậu quả để lại nhiều hay ít phụ
thuộc vào tầm quan trọng của dữ liệu bị lấy đi. Ví dụ như việc khi
một công ty bị lộ thông tin khách hàng, làm mất lòng tin của họ
việc họ chuyển sang dùng dịch vụ khác công ty khác là việc hiển
nhiên làm cho công ty mình gặp khó khăn hoặc có thể nặng hơn
dẫn đến phá sản.
• Lỗ hổng cũng có thể xuất phát từ những khách hàng. Họ thường
hay dùng một mật khẩu cho nhiều tài khoản hoặc mật khẩu dể
doán. Khi kẻ tấn cơng phát hiện được một tài khoản thì những tài
khoản cịn lại cũng bị lộ theo.
• Có những trường hợp kẻ tấn cơng có thể có thể chiếm tài khoản
của người quản trị cơ sở dữ liệu, hắn không chỉ đọc mà có thể xóa
tồn bộ dữ liệu của hệ thống làm hệ thống bị ngưng hoạt động.


Chương 2: Kỹ thuật tấn công
1. Lý thuyết
Các cuộc tấn công SQL Injection được thực hiện bằng cách gửi lệnh
SQL độc hại đến các máy chủ cơ sở dữ liệu thông qua các yêu cầu của
người dùng mà website cho phép. Bất kỳ kênh input nào cũng có thể
được sử dụng để gửi các lệnh độc hại như chuỗi truy vấn (query strings)
và tệp tin.
- Các dạng tấn công SQL Injection:
• 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, kẻ tấn cơng 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 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.
• Dạng tấn cơng sử dụng câu lệnh SELECT: Để 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. Chúng ta có tể gặp các website
tin tức có các tham số được truyền vào như: index.php?id=21,
index.asp?id=6,.. thì chúng ta chỉ cần thêm các kí tự dấu nháy đơn
('), dấu nháy kép ("), phần trăm 27 (%27), 00 phần trăm (00%)
vào sau id để kiểm tra nếu nó hiện ra lỗi hoặc khơng hiện ra 1 cái
gì (khác hồn tồn với lúc ban đầu thì 90% có khả năng khai thác
được lỗi này).
• 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.


• Dạng tấn công sử dụng stored-procedures: Stored Procedure được
sử dụng trong lập trình web với mục đích nhằm giảm sự phức tạp
trong ứng dụng và tránh sự tấn công trong kỹ thuật SQL Injection.
Tuy nhiên những kẻ tấn công vẫn có thể lợi dụng những stored
procedure để tấn cơng vào hệ thống.

2. Thực hành
Dạng tấn công sử dụng câu lệnh SELECT kết hợp UNION
 Cơng cụ được sử dụng
• Cơng cụ tìm kiếm lỗi Vega
• Về trình duyệt: Firefox
• Add-on cho firefox: HackBar Quantum
 Các bước tiến hành
• Bước 1: Tìm website bị lỗi bằng cách nhập câu lệnh inurl
product_detail id=site vn trên URL.

Hình 2.2. 1: Câu lệnh tìm kiếm website bị lỗi
• Bước 2: Sau khi thực hiện câu lệnh ở bước 1 ta sẽ có danh sách những
trang web bị lỗi nhóm chúng em chọn trang wed
thinhnguyenplastic.com để demo SQL Injection.


Hình 2.2. 2: Trang thinhnguyenplactic.com
• Bước 3: Kiểm tra lỗi
- Bằng cơng cụ Vega trên website thinhnguyenplatic.com

Hình 2.2. 3: Sử dụng công cụ Vega
+ Chọn Injections Modules và chọn phần liên quan đến SQL Injection
để quét


Hình 2.2. 4: Các phần liên quan đến SQL

Hình 2.2. 5: Các phần liên quan đến SQL



+ Kết quả đã quét ra được 3 cảnh báo liên quan đến SQL
Injection.

Hình 2.2. 6: Kết quả khi dùng Vega
- Ngồi cơng cụ Vega ta có thể kiểm tra trên HackBar Quantum bằng
cách thêm dấu ‘ vào sau đường link
+ Kết quả trước khi chạy

Hình 2.2. 7: thinhnguyenplastic.com trước khi dùng SQL Injection


+ Kết quả sau khi chạy

Hình 2.2. 8: Kết quả sau khi thêm ‘
• Bước 4: Tìm số cột của table mà câu lệnh SQL truy vấn dùng câu lệnh
order by

Hình 2.2. 9: Hình ảnh khi chưa hết cột


Ta sẽ tiếp tục tăng con số của order by cho đến khi thấy website bị lỗi
như hình dưới đây

Hình 2.2. 10: Kết quả khi tìm hết các cột
Khi đến số 63 thì website bị lỗi nên ta nhận ra được trong database sẽ
có các dịng từ 0 đến 62 để hiện các cột này ta chọn SQL -> Union
Select Statement -> điền vào ơ số 62 -> ok

Hình 2.2. 11: Thực hiện lệnh Union Select
- Kết quả khi thực hiện



Hình 2.2. 12: Kết quả sau khi thực hiện lệnh
• Bước 5: Hiện số cột bị lỗi bằng cách dùng union select
- Kết quả cho ta thấy số cột 37 bị lỗi

Hình 2.2. 13: Hình ảnh cột 37 làm trang bị lỗi


Lưu ý: Khi dùng câu lệnh union seclect để tim cột bị lỗi chúng ta phải
thêm dấu - trước 635. Nếu khơng ghi thì nó sẽ khơng hiện lỗi như hình
dưới đây.

Hình 2.2. 14: Lưu ý
• Bước 6: Kiểm tra một vài thơng tin database tại vị trí cột bị lỗi
- version:

Hình 2.2. 15: Thơng tin về version


- database:

Hình 2.2. 16: Thơng tin về database
- user:

Hình 2.2. 17: Thông tin về user


• Bước 7: Liệt kê các bảng trong database bằng câu lệnh unhex (hex
(group-concat (table_name))) tại cột bị lỗi và FROM

information_schema.tables WHERE table_schema=database () sau số
cột 62

Hình 2.2. 18: Liệt kê các bảng 1

Hình 2.2. 19: Liệt kê các bảng 2


• Bước 8: Liệt kê các cột trong bảng chứa thông tin Login(tbl-member)
bằng câu lệnh unhex (hex (group-concat (column_name))) tại cột bị lỗi

FROM
information_schema.columns
WHERE
table_name=tbl_member sau số cột 62

Hình 2.2. 20: Câu lệnh liệt kê các cột trong bảng

Hình 2.2. 21: Câu lệnh liệt kê các cột trong bảng


×