1. Trang chủ
  2. » Tất cả

Nghiên cứu biểu thức chính quy trong xác nhận đầu vào trong phát hiện và ngăn chặn sql injection trong modsecurity

39 6 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Nghiên cứu biểu thức chính quy trong xác nhận đầu vào trong phát hiện và ngăn chặn sql injection trong modsecurity
Trường học Trường Đại Học Công Nghệ Thông Tin - Đại Học Quốc Gia Hà Nội
Chuyên ngành An Toàn Thông Tin, Phát Hiện Và Ngăn Chặn Tấn Công Trong Mạng Máy Tính
Thể loại Luận văn
Thành phố Hà Nội
Định dạng
Số trang 39
Dung lượng 1,51 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

CHƯƠNG I: BIỂU THỨC CHÍNH QUY 1.1 Khái niệm Regular Expression hay còn gọi là biểu thức chính quy được dùng để xử lý chuỗi nâng cao thông qua biểu thức riêng của nó, những biểu thức này

Trang 1

MỤC LỤC

MỤC LỤC 2

DANH MỤC HÌNH ẢNH 4

DANH MỤC BẢNG 5

CHƯƠNG I: BIỂU THỨC CHÍNH QUY 6

1.1 Khái niệm 6

1.2 Biểu diễn 7

1.2.1 Literal character 7

1.2.2 Các ký tự biểu diễn – Meta 7

1.2.3 Các cờ 12

1.3 Ví dụ về cách sử dụng biểu thức chính quy 12

CHƯƠNG II: TẤN CÔNG SQL INJECTION 14

2.1 Khái niệm 14

2.2 Hậu quả 15

2.3 Cách phòng chống 16

CHƯƠNG III: MODSECURITY 18

3.1 Giới thiệu Modsecurity 18

3.2 Khả năng của ModSecurity 18

3.3 Hoạt động của ModSecurity 19

3.4 Cấu trúc Modsecurity 21

3.4.1 Nội dung của rules trong Modsecurity 21

3.4.2 Thành phần trong một rule 21

3.4.3 Logging 25

3.5 Biểu thức chính quy trong ModSecurity 27

CHƯƠNG IV: THỰC HIỆN TẤN CÔNG SQL INJECTION VÀ NGĂN CHẶN BẰNG BIỂU THỨC CHÍNH QUY TRONG MODSECURIY 30

3.1 Chuẩn bị 30

3.2 Cài dặt ModSecurity 30

Trang 2

3.3 Thực hiện tấn công 32 3.4 Xây dựng luật áp dụng biểu thức chính quy để ngăn chặn tấn công SQL injection 37

TÀI LIỆU THAM KHẢO 40

Trang 3

DANH MỤC HÌNH ẢNH

Hình 1 Biểu thức chính quy 6

Hình 2 Biểu diễn biểu thức chính quy 7

Hình 3 Tấn công SQL injection 14

Hình 4 Cách phòng chống SQL injection 16

Hình 5 ModSecurity 18

Hình 6 Các phase trong hoạt động của ModSecurity 19

Hình 7 Màn hình đăng nhập DVWA 32

Hình 8 Màng hình DVWA security 33

Hình 9 Màng hình các cách tấn công DVWA 33

Hình 10 File modsedurity.conf 34

Hình 11 Kết quả tấn công SQL injection 35

Hình 12Kết quả truy vấn version 36

Hình 13 Kết quả Modsecurity bảo vệ 37

Hình 14 Kết quả truy vấn bị chặn bởi rules vừa được xây dựng 39

Trang 4

DANH MỤC BẢNG

Bảng 1 Các ký tự biểu diễn Meta 8

Bảng 2 Ký hiệu tắt cho tập hợp 11

Bảng 3 Các cờ 12

Bảng 4 Biểu thức chính quy xử lý chuỗi 27

Bảng 5 Biểu thức chính quy dùng toán tử so sánh 28

Bảng 6 Biểu thức chính quy dùng toán tử so sanh đại số 28

Trang 5

CHƯƠNG I: BIỂU THỨC CHÍNH QUY

1.1 Khái niệm

Regular Expression hay còn gọi là biểu thức chính quy được dùng để xử lý chuỗi nâng cao thông qua biểu thức riêng của nó, những biểu thức này sẽ có những nguyên tắc riêng và bạn phải tuân theo nguyên tắc đó thì biểu thức của bạn mới hoạt động được Ngoài cái tên gọi Regular Expression ra thì nó còn có thể viết tắt thành Regex hay RegExr

Trang 6

1.2 Biểu diễn

Hình 2 Biểu diễn biểu thức chính quy

Cú pháp của biểu thức chính quy gồm 2 thành phần cơ bản là Literal character (ký

tự thường) và Meta character (siêu ký tự)

1.2.1 Literal character

Literal character là một biểu thức chứa một hoặc nhiều ký tự từ a đến z dùng

để làm mẫu so sánh trùng khớp với một chuỗi nào đó

Ví dụ nếu ta có một Regex là “ello” và một chuỗi “helloworld”, regex engine sẽ tìm và so sánh với chuỗi “helloworld” để tìm sự trùng khớp, nó sẽ khớp với “ello” trong chuỗi “helloworld”

1.2.2 Các ký tự biểu diễn – Meta

Trang 7

? Tùy chọn có hay không cho mẫu phía trước {n,m} Độ dài tối thiểu là n tối đa là m

(xyz) Biểu diễn một nhóm

| Biểu diễn thay thế, phép toán or

\ Biểu diễn ký tự đặc biệt [ ] ( ) { } * + ? ^ $ \ |

^ Điểm bắt đầu của dòng

Dùng [] để chứa tập hợp các ký tự Có thể dùng dấu - để biểu diễn một dải các

ký tự theo vị trí trong bảng chữ cái như a-z, 0-9 , biểu thức so sánh sẽ hợp mẫu nếu chứa bất kỳ ký tự nào trong đó (không cần quan tâm thứ tự)

Ví dụ biểu thức [ưƯ]ớc có nghĩa là: Có một chữ ư hoặc Ư, theo sau bởi ớ, tiếp theo là c

[ưƯ]ớc => Ước một điều mộng ước rất đơn sơ Nụ hôn trao hạnh phút đến bất ngờ

Nếu [] chứa thì nó biểu diễn ký tự chứ không con ý nghĩa đại diện như trường hợp trên

nh[.] => Thời gian cứ thế xoay vòng thật nhanh Bao mùa chiếc áo phông phanh!

Tập hợp ngoại trừ [^]

Trang 8

Thông thường thì ^ biểu diễn điểm bắt đầu của chuỗi, tuy nhiên nếu nó nằm ở

vị trí sau dấu [ của cặp [] thì nó lại mang ý nghĩa tạo ra tập hợp ký tự loại trừ (phụ định)

Ví dụ biểu thức [^n]hanh có nghĩa là bất kỳ ký tự nào ngoại trừ ký tự n, theo sau bởi h, tiếp theo bởi a, n và h

[^n]hanh => Thời gian cứ thế xoay vòng thật nhanh Bao mùa chiếc áo phông

Lặp lại với ký tự *

Ký hiệu * cho biết có sự lặp lại 0 hoặc nhiều lần mẫu phù hợp đứng phía trước

nó Ví dụ mẫu a* có nghĩa là ký tự a lặp lại 0 hoặc nhiều lần là phù hợp Nếu nó

đi sau tập hợp thì lặp tập hợp đó lặp lại 0 hoặc nhiều lần ví dụ [a-z]* có nghĩa

là dòng có số lượng bất kỳ các ký tự chữ viết thường thì phù hợp

* có thế sử dụng với để biểu diễn bất kỳ chuỗi nào, hay dùng mẫu (.*)

* có thể sử dụng với ký tự trắng \s để biểu diễn bất kỳ khoảng trắng nào

Ví dụ \s*mình\s* có nghĩa bắt đầu bởi không hoặc nhiều khoảng trắng, tiếp theo

là ký tự m, ì, n, h tiếp theo là không hoặc nhiều khoảng trắng

"\s*mình\s*" => Đừng so sánh mình với bất cứ ai trong thế giới này

Nếu bạn làm như vậy có nghĩa bạn đang sỉ nhục chính bản thân mình Bill

Gates

Lặp lại với ký tự +

Ký hiệu + tương tự như * nhưng lặp lại 1 hoặc nhiều Ví dụ

có.+! có nghĩa ký tự bắt đầu bằng có theo sau ít nhất một ký tự nào đó, tiếp theo

Trang 9

Trong biểu thức Regex thông thường ? là một tùy chọn cho biết mẫu phía trước

nó có thể có hoặc không

Ví dụ [h]?ôn nghĩa là tùy chọn có h hoặc không, theo sau là ô, tiếp theo là n [h]?ôn => Đàn bà khôn ngoan hơn đàn ông vì họ biết ít hơn, nhưng hiểu nhiều hơn

Biểu diễn độ dài {}

{} là biểu diễn số lượng, nó chỉ ra số lần mà một ký tự hoặc một nhóm các ký

tự lặp lại

Ví dụ [0-9]{2,3} có nghĩa là có tối thiểu 2 tới 3 ký tự số

Bạn có thể bỏ đi số thứ 2, ví dụ [0-9]{2,} có nghĩa là chuỗi có 2 hoặc nhiều ký

tự số Nếu bỏ đi ký tự , ví dụ [0-9]{3} có nghĩa là chuỗi chính xác có 3 ký tự

Nhóm mẫu ( )

Nhóm ký tự là một mẫu (pattern) con được viết biên trong () Ví dụ (ab)* lặp lại

ab 0 hoặc nhiều lần Chúng ta cũng dùng ký hiệu | bên trong nhóm như là phép toán or để xác định nhóm Ví dụ n(g|h) có nghĩa bắt đầu bằng n theo sau là một mẫu, mẫu đó hoặc là chữ g hoặc là chữ h

n(g|h) =>Nếu có một ai đó làm chậm bước chân của bạn, hãy nhẹ nhàng rẽ sang

hướng khác

Biểu diễn ký tự đặc biệt với \

Do một số ký hiệu đã được dùng đã biểu diễn Regex như : { } [ ] / \ + * $ ^ | ?

nên để biểu diễn các ký tự đó dùng ký hiệu \ trước ký tự

"(f|c|m)at\.?" => The fat cat sat on the mat

Bắt đầu của dòng ^

Sử dụng ^ để cho biết sẽ kiểm tra sự phù hợp nếu ký tự đầu tiên của chuỗi hợp mẫu Ví dụ ^a thì chuỗi phù hợp có dạng như abcxyz, nếu vẫn chuỗi đó nó lại không phù hợp với ^b

^(T|t)he có nghĩa là T hoặc t bắt đầu của chuỗi, theo sau là he

Trang 10

Điểm kết thúc của chuỗi $

Cho biết kết thúc dòng phải thỏa mãn mẫu phía trước $

Ngược lại với ^ ví dụ (at\.)$ nghĩa là cuối chuỗi có at thì là phù hợp

"(at\.)$" => The fat cat sat on the mat

Ký hiệu tắt cho tập hợp

Bất kỳ ký tự nào ngoại trừ xuống dòng

\w Chữ,sô, và _, tương đương với: [a-zA-Z0-9_]

\W Ngoài bảng chữ cái, tương đương với: [^\w]

Lookahead ?= cho thêm vào để lọc kết quả

Ký hiệu ?= Phần đầu của biểu thức phải được tiếp nối bởi biểu thức lookahead

Ví dụ (T|t)he(?=\sfat) thì lookahead là (?=\sfat) - nghĩa là T hoặc t theo sau là

he vậy tìm được 2 kết quả Nhưng do có biểu thức lookahead, điều này thì kết quả phù hợp là chỉ lấy khi theo sau nó là chuỗi fat

Biểu thức ?! phủ định lookahead

Ký hiệu là ?!, nghĩa là lấy kết quả mà đi sau nó không có chuỗi lookahead

Biểu thức (?<= ) Lookbehind

Sử dụng để lấy các phù hợp mà đi trước là một mẫu cũ thể

Trang 11

(?<=(T|t)he\s)(fat|mat) có nghĩa lấy tất cả các từ fat hoặc mat sau các từ The hoặc the

i Thiết lập không phân biệt chữ hoa chữ thường

g Tìm kiếm toàn chuỗi

m Multiline: Anchor meta character works on each line

Bảng 3 Các cờ

Các cờ này được đưa vào mẫu theo dạng /RegExp/flags

"/The/gi" => The fat cat sat on the mat

"/.(at)/" => The fat cat sat on the mat

"/.(at)/g" => The fat cat sat on the mat

1.3 Ví dụ về cách sử dụng biểu thức chính quy

Kiểm tra về tính hợp lệ của email:

^([a-z0-9_\.\+-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$

Regex trên được chia thành 3 phần

Đầu tiên là dấu ^ dùng để tìm và so sánh các ký tự đầu của chuỗi đích Kế tiếp là nhóm đầu tiên của Regex ([a-z0-9_\.\+-]+), nhóm này sẽ trùng khớp nếu như những ký tự của ta từ a đến z, từ 0 đến 9 và gồm cả các dấu như _ (dấu gạch dưới), (dấu chấm), dấu – (dấu gạch nối)

Sau đó là dấu @, đây là một literal character dùng để tìm dấu @ trong chuỗi đích Tiếp theo là nhóm thứ 2 ([\da-z\.-]+), tương tư nhóm đầu tiên nhóm này sẽ

Trang 12

khớp với những ký tự từ a đến z, những ký tự số, dấu gạch dưới, dấu chấm và dấu gạch nối

Tiếp đến là dấu \., đây là một escape character dùng để gõ dấu vào trong chuỗi (dùng để tránh nhầm lẫn với dấu chấm của Regex) Sau đó đến nhóm thứ 3 ([a-z\.]{2,6}) nhóm này khớp với 2 đến 6 ký tự từ a đến z vì có những domain dạng như com.vn, com.cn hay co.uk chẳng hạn

Các chuỗi ví dụ khớp với Regex trên: email@gmail.com,

email+email@gmail.com, email.email@yahoo.com

Trang 13

CHƯƠNG II: TẤN CÔNG SQL INJECTION 2.1 Khái niệm

SQL Injection là một trong những kiểu hack web bằng cách inject các mã SQLquery/command vào input trước khi chuyển cho ứng dụng web xử lí, bạn có thể login mà không cần username và password, remote execution (thực thi từ xa), dump data và lấy root của SQL server Công cụ dùng để tấn công là một trình duyệt web bất kì, chẳng hạn như Internet Explorer, Netscape, Lynx, …

 Rất nhiều ông lớn từng bị dính – Sony, Microsoft UK Mọi vụ lùm xùm liên quan tới “lộ dữ liệu người dùng” ít nhiều đều dính dáng tới SQL Injection

Trang 14

2.2 Hậu quả

 Hậu quả lớn nhất mà SQL Injection gây ra là: Làm lộ dữ liệu trong database Tuỳ vào tầm quan trọng của dữ liệu mà hậu quả dao động ở mức nhẹ cho đến vô cùng nghiêm trọng

 Lộ dữ liệu khách hàng có thể ảnh hưởng rất nghiêm trọng đến công ty Hình ảnh công ty có thể bị ảnh hưởng, khách hàng chuyển qua sử dụng dịch vụ khác, dẫn đến phá sản v…v

 Lỗ hỗng này cũng ảnh hưởng lớn đến khách hàng Do họ thường dùng chung một mật khẩu cho nhiều tài khoản, chỉ cần lộ mật khẩu một tài khoản thì các tài khoản khác cũng lộ theo

 Đây cũng là lý do mình nhắc nhở phải mã hoá mật khẩu, nếu database

có bị tấn công thì người dùng cũng không bị mất mật khẩu

 Trong nhiều trường hợp, hacker không chỉ đọc được dữ liệu mà còn

có thể chỉnh sửa dữ liệu Lúc này hacker có thể đăng nhập dưới vai trò admin, lợi dụng hệ thống, hoặc xoá toàn bộ dữ liệu để hệ thống ngừng hoạt động

Trang 15

2.3 Cách phòng chống

Hình 4 Cách phòng chống SQL injection

 Không bao giờ được tin tưởng những input người dùng nhập vào: Dữ liệu luôn phải được xác thực trước khi sử dụng trong các câu lệnh SQL

 Các thủ tục được lưu trữ: Những thủ tục này có thể trừu tượng hóa các lệnh SQL và xem xét toàn bộ input như các tham số Nhờ đó, nó

không thể gây ảnh hưởng đến cú pháp lệnh SQL

 Các lệnh được chuẩn bị sẵn: Điều này bao gồm việc tạo truy vấn SQL như hành động đầu tiên và sau đó xử lý toàn bộ dữ liệu được gửi như những tham số

 Những cụm từ thông dụng: Những cụm từ này được sử dụng để phát hiện mã độc và loại bỏ nó trước khi câu lệnh SQL được thực hiện

 Thông báo lỗi đúng: Thông báo lỗi phải tuyệt đối tránh tiết lộ những thông tin/chi tiết nhạy cảm và vị trí xảy ra lỗi trên thông báo lỗi

 Giới hạn quyền truy cập của người dùng đối với cơ sở dữ liệu: Chỉ những tài khoản có quyền truy cập theo yêu cầu mới được kết nối với

cơ sở dữ liệu Điều này có thể giúp giảm thiểu những lệnh SQL được thực thi tự động trên server

 Hãy loại bỏ các kí tự meta như ‘”/\; và các kí tự extend như NULL,

CR, LF, … trong các string nhận được từ:

Trang 17

CHƯƠNG III: MODSECURITY 3.1 Giới thiệu Modsecurity

ModSecurity là một Opensource web application firewall được Ivan Ristic phát triển dành cho Web Server Apache Ivan Ristic cũng là tác giả quyển sách “Mod Security Handbook” Ông là một người có rất nhiều kinh nghiệm trong bảo vệ Web Server Apache Ông đã có nhiều thời gian nghiên cứu Web Application Security, Web Intrusion Detection, và Security Patterns Trước khi chuyển sang lĩnh vực security, Ivan đã có nhiều năm làm việc như một Developer, System Architect, Technical Director trong phát triển phần mềm Ông là người sáng lập ra công ty ThinkingStone làm các dịch vụ liên quan đến web application security

Hình 5 ModSecurity

3.2 Khả năng của ModSecurity

Mod Security đứng trước Web Server, làm nhiệm vụ như một firewall để kiểm soát truy cập vào ra Web Server Các thông tin đi từ bên ngoài vào và bên trong

ra sẽ được kiểm soát chặt chẽ để tránh những thông tin có thể gây hại cho Web Server hay là việc rò rỉ các thông tin đặc biệt từ Web Server đến Client

Mod Security có thể thực hiện các chức năng cụ thể sau:

- Request filtering : tất cả các request gửi đến web server đều được phân tích và càn lọc (filter) trước khi chúng được đưa đến các modules khác để xử lý

- Anti-evasion techniques : paths và parameters được chuẩn hóa trước khi phân tích để chống evasion techniques

- Understanding of the HTTP protocol : ModSecurity là web application firewall nên nó có khả năng hiểu được HTTP protocol ModSecurity có khả

Trang 18

năng càn lọc dựa trên các thông tin ở HTTP header hay có thể xem xét đến từng parameters hay cookies của các requests…

- POST payload analysis : ngoài việc càn lọc dựa trên HTTP header,

ModSecurity có thể dựa trên nội dung (payload) của POST request

- Audit logging : mọi request đều có thể được ghi lại (bao gồm cả POST)

để người quản trị có thể theo dõi nếu cần

- HTTPS filtering : ModSecurity có thể phân tích HTTPS

- Compressed content filtering : ModSecurity sẽ phân tích sau khi đã

decompress các request data

3.3 Hoạt động của ModSecurity

Quá trình xử lý các request của Apache và ModSecurity :

Trong ModSecurity, mỗi phiên phân tích sẽ được thực hiện lần lượt qua 5 bước (phase), tại mỗi bước ModSecurity sẽ thực thi các rule tương ứng nhằm phát hiện và phòng chống các khai thác

Trang 19

ModSecurity cho phép bạn đặt rule tại một trong năm thời điểm trong chu kỳ

xử lý của Apache như sau :

- Phase Request Header : rule được đặt tại đây sẽ được thực hiện ngay sau khi Apache đọc request header, lúc này phần request body vẫn chưa được đọc Đây là bước đầu tiên trong quá trình thực hiện phân tích gói tin Mục đích của bước này nhằm cho phép người viết rule tương tác với các request trước khi thực hiện các yêu cầu trong phần HTTP body Phần này khá quan trọng để phân tích các khai thác dựa vào HTTP method cũng như dựa vào URL như SQL Injection, Reflect XSS, Local file include …

- Phase Request Body : đây là thời điểm các thông tin chức năng chung đưa vào được phân tích và xem xét, các rule mang tính application-oriented thường được đặt ở đây Bước này là quá trình kiểm tra chính trong quá trình client gởi request đến server, phần này sẽ có hiệu quả khi người dùng cố sử dụng phương thức POST hoặc PUT để upload tập tin lên phía server Việc kiểm tra này bảo đảm

dữ liệu đưa lên server là an toàn, tránh tình trạng upload mã độc hoặc các dạng tấn công như Stored XSS, Ajax Injection ModSecurity hỗ trợ ba loại mã hóa request body :

+ Application/x-www-form-urlencoded dùng để truyền form dữ liệu

+ Multipart/form-data dùng để truyền file

+ Text/xml : dùng để phân tích dữ liệu XML

- Phase Response Header : Những request đã được xử lý tại server sẽ được trả

về cho ModSecurity kiểm tra trạng thái trong phần respone header Trước khi phần respone body được đọc thì ModSecurity sẽ dựa vào tập rule để xác định có cần kiểm tra nội dung dữ liệu trong phần body hay không

Ví dụ: mã trạng thái trả về là 404 (Not found) thì lúc này sẽ không cần kiểm tra nội dung gói tin trả về

- Phase Response Body : Sau khi ModSecurity đã hoàn thành việc kiểm tra tại respone header thì nội dung trong phần body sẽ được kiểm tra so trùng với mẫu trong tập lệnh Việc này là khá hiệu quả để phát hiện và phòng chống xâm nhập trong trường hợp ở phase request header và phase request body không phát hiện được tấn công

Ngày đăng: 26/02/2023, 15:46

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w