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
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

Đ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

MỤC LỤC MỤC LỤC DANH MỤC HÌNH ẢNH DANH MỤC BẢNG CHƯƠNG I: BIỂU THỨC CHÍNH QUY 1.1 Khái niệm 1.2 Biểu diễn 1.2.1 Literal character 1.2.2 Các ký tự biểu diễn – Meta 1.2.3 Các cờ 12 1.3 Ví dụ cách sử dụng biểu thức quy .12 CHƯƠNG II: TẤN CÔNG SQL INJECTION 14 2.1 Khái niệm 14 2.2 Hậu 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ả ModSecurity .18 3.3 Hoạt động ModSecurity .19 3.4 Cấu trúc Modsecurity .21 3.4.1 Nội dung rules Modsecurity 21 3.4.2 Thành phần rule .21 3.4.3 Logging 25 3.5 Biểu thức quy 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 3.3 Thực công 32 3.4 Xây dựng luật áp dụng biểu thức quy để ngăn chặn công SQL injection .37 TÀI LIỆU THAM KHẢO 40 DANH MỤC HÌNH ẢNH Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Biểu thức quy Biểu diễn biểu thức quy Tấn công SQL injection 14 Cách phòng chống SQL injection 16 ModSecurity 18 Các phase hoạt động ModSecurity 19 Màn hình đăng nhập DVWA 32 Màng hình DVWA security 33 Màng hình cách cơng DVWA 33 10 File modsedurity.conf 34 11 Kết công SQL injection 35 12Kết truy vấn version 36 13 Kết Modsecurity bảo vệ .37 14 Kết truy vấn bị chặn rules vừa xây dựng 39 DANH MỤC BẢNG Bảng Các ký tự biểu diễn Meta Bảng Ký hiệu tắt cho tập hợp 11 Bảng Các cờ 12 Bảng Biểu thức quy xử lý chuỗi 27 Bảng Biểu thức quy dùng tốn tử so sánh 28 Bảng Biểu thức quy dùng tốn tử so sanh đại số 28 CHƯƠNG I: BIỂU THỨC CHÍNH QUY 1.1 Khái niệm Regular Expression hay gọi biểu thức quy dùng để xử lý chuỗi nâng cao thơng qua biểu thức riêng nó, biểu thức có nguyên tắc riêng bạn phải tn theo ngun tắc biểu thức bạn hoạt động Ngoài tên gọi Regular Expression cịn viết tắt thành Regex hay RegExr Hình Biểu thức quy Nguyên tắc hoạt động biểu thức Regex so khớp dựa vào khuôn mẫu (pattern), khuôn mẫu xây dựng từ quy tắc biểu thức Regex Regex thường sử dụng để xử lý chuỗi, xử lý văn với tác vụ cụ thể như: tìm thay chuỗi, kiểm tra tính hợp lệ liệu, trích xuất chuỗi từ chuỗi … Hầu hết ngơn ngữ lập trình hỗ trợ Regex Java, C#, PHP, JS, … Ngoài ra, Regex phổ biến ứng dụng, cơng cụ khác như: rewrite URL mod_rewrite, tìm kiếm thay IDE 1.2 Biểu diễn Hình Biểu diễn biểu thức quy Cú pháp biểu thức quy gồm thành phần Literal character (ký tự thường) Meta character (siêu ký tự) 1.2.1 Literal character Literal character biểu thức chứa nhiều ký tự từ a đến z dùng để làm mẫu so sánh trùng khớp với chuỗi Ví dụ ta có Regex “ello” chuỗi “helloworld”, regex engine tìm so sánh với chuỗi “helloworld” để tìm trùng khớp, khớp với “ello” chuỗi “helloworld” 1.2.2 Các ký tự biểu diễn – Meta Ký tự Meta [] [^ ] * + Mô tả Biểu diễn ký tự trừ ký tự xuống dòng Tập hợp ký tự Phù hợp có ký tự dấu [] Tập hợp ký tự phủ định Phù hợp khơng có ký tự [] Lặp lại đến nhiều lần Lặp lại nhiều lần ? {n,m} (xyz) | \ ^ $ Tùy chọn có hay khơng cho mẫu phía trước Độ dài tối thiểu n tối đa m Biểu diễn 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 dòng Điểm kết thúc dòng Bảng Các ký tự biểu diễn Meta Ký hiệu chấm Ký hiệu dấu chấm meta đơn giản, biểu diễn ký tự trừ ký tự return \r newline \n Ví dụ biểu thức ồn có nghĩa là: ký tự đó, đến ký tự o, đến cuối n .ồn =>Sự hồn hảo dường khơng thể đạt được, theo đuổi hoàn hảo chạm đến xuất sắc Tập hợp ký tự [] Dùng [] để chứa tập hợp ký tự Có thể dùng dấu - để biểu diễn dải ký tự theo vị trí bảng chữ a-z, 0-9 , biểu thức so sánh hợp mẫu chứa ký tự (khơng cần quan tâm thứ tự) Ví dụ biểu thức [ưƯ]ớc có nghĩa là: Có chữ Ư, theo sau ớ, c [ưƯ]ớc => Ước điều mộng ước đơn sơ Nụ hôn trao hạnh phút đến bất ngờ Nếu [] chứa biểu diễn ký tự không ý nghĩa đại diện trường hợp nh[.] => Thời gian xoay vịng thật nhanh Bao mùa áo phơng phanh! Tập hợp ngoại trừ [^] Thơng thường ^ biểu diễn điểm bắt đầu chuỗi, nhiên nằm vị trí sau dấu [ cặp [] lại mang ý nghĩa tạo tập hợp ký tự loại trừ (phụ định) Ví dụ biểu thức [^n]hanh có nghĩa ký tự ngoại trừ ký tự n, theo sau h, a, n h [^n]hanh => Thời gian xoay vịng thật nhanh Bao mùa áo phơng phanh! Lặp lại với ký tự * Ký hiệu * cho biết có lặp lại nhiều lần mẫu phù hợp đứng phía trước Ví dụ mẫu a* có nghĩa ký tự a lặp lại nhiều lần phù hợp Nếu sau tập hợp lặp tập hợp lặp lại nhiều lần ví dụ [a-z]* có nghĩa dịng có số lượng ký tự chữ viết thường phù hợp * sử dụng với để biểu diễn chuỗi nào, hay dùng mẫu (.*) * sử dụng với ký tự trắng \s để biểu diễn khoảng trắng Ví dụ \s*mình\s* có nghĩa bắt đầu khơng nhiều khoảng trắng, ký tự m, ì, n, h không nhiều khoảng trắng "\s*mình\s*" => Đừng so sánh với giới Nếu bạn làm có nghĩa bạn sỉ nhục thân Bill Gates Lặp lại với ký tự + Ký hiệu + tương tự * lặp lại nhiều Ví dụ có.+! có nghĩa ký tự bắt đầu có theo sau ký tự đó, ký tự ! có.+! => Đàn ơng cần tiền chủ yếu hai việc: có nàng nàng! Mẫu phía trước có hay không với ? Trong biểu thức Regex thông thường ? tùy chọn cho biết mẫu phía trước có khơng Ví dụ [h]?ơn nghĩa tùy chọn có h khơng, theo sau ô, n [h]?ôn => Đàn bà khơn ngoan đàn ơng họ biết hơn, hiểu nhiều Biểu diễn độ dài {} {} biểu diễn số lượng, số lần mà ký tự nhóm ký tự lặp lại Ví dụ [0-9]{2,3} có nghĩa có tối thiểu tới ký tự số Bạn bỏ số thứ 2, ví dụ [0-9]{2,} có nghĩa chuỗi có nhiều ký tự số Nếu bỏ ký tự , ví dụ [0-9]{3} có nghĩa chuỗi xác có ký tự Nhóm mẫu ( ) Nhóm ký tự mẫu (pattern) viết biên () Ví dụ (ab)* lặp lại ab nhiều lần Chúng ta dùng ký hiệu | bên nhóm phép tốn or để xác định nhóm Ví dụ n(g|h) có nghĩa bắt đầu n theo sau mẫu, mẫu chữ g chữ h n(g|h) =>Nếu có làm chậm bước chân bạn, nhẹ nhàng rẽ sang hướng khác Biểu diễn ký tự đặc biệt với \ Do số ký hiệu dùng biểu diễn Regex : { } [ ] / \ + * $ ^ | ? nên để biểu diễn 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 dòng ^ Sử dụng ^ biết kiểm tra phù hợp ký tự chuỗi hợp mẫu Ví dụ ^a chuỗi phù hợp có dạng abcxyz, chuỗi lại khơng phù hợp với ^b ^(T|t)he có nghĩa T t bắt đầu chuỗi, theo sau he 10 Điểm kết thúc 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 cuối chuỗi có at phù hợp "(at\.)$" => The fat cat sat on the mat Ký hiệu tắt cho tập hợp Viết tắt \w \W \d \D \s \S Diễn tả Bất kỳ ký tự ngoại trừ xuống dịng Chữ,sơ, _, tương đương với: [a-zA-Z0-9_] Ngồi bảng chữ cái, tương đương với: [^\w] Các số: [0-9] Không phải số: [^\d] Là ký tự trắng, tương đương với: [\t\n\f\r\p{Z}] Không phải ký tự trắng: [^\s] Bảng Ký hiệu tắt cho tập hợp Biểu thức ?= lookahead Lookahead ?= cho thêm vào để lọc kết Ký hiệu ?= Phần đầu biểu thức phải tiếp nối biểu thức lookahead Ví dụ (T|t)he(?=\sfat) lookahead (?=\sfat) - nghĩa T t theo sau he tìm kết Nhưng có biểu thức lookahead, điều kết phù hợp lấy theo sau chuỗi fat (T|t)he => The fat cat sat on the mat (T|t)he(?=\sfat) => The fat cat sat on the mat Biểu thức ?! phủ định lookahead Ký hiệu ?!, nghĩa lấy kết mà sau khơng có chuỗi lookahead (T|t)he(?!\sfat) => The fat cat sat on the mat Biểu thức (? SecRule RESPONSE_STATUS “@gt 399” ≤ SecRule RESPONSE_STATUS “@le 199” < SecRule RESPONSE_STATUS “@lt 200” Bảng Biểu thức quy dùng tốn tử so sanh đại số Ví dụ : SecDefaultAction "phase:2,deny,log,status:403" - Cấu trúc rule gồm: SecRule VARIABLES "OPERATOR" "TRANSFORMATIONS,ACTIONS" Ví dụ: SecRule REQUEST_LINE|REQUEST_HEADERS|REQUEST_HEADERS_NAMES "@contains () {" "id:420008,phase:2,t:none,t:lowercase,deny,status:500,log,msg:'Malware expert user-agent: Bash ENV Variable Injection Attack'" Variables: REQUEST_LINE: tất dịng request thành cơng đến server bao gồm phương thức thông tin phiên HTTP 28 REQUEST_HEADERS: tất header request REQUEST_HEADERS_NAMES: tất tên REQUEST HEADER Operator: @contains () {: tìm tất biến yêu cầu chuỗi “()}” tìm thấy trả true Transformations: t:none: khơng chuyển giá trị biến trước trùng khớp t:lowercase: chuyển REQUEST dạng chữ thường Actions: id:420008: id gán cho rule xuất phase:2: phase thực phase REQUEST BODY deny: hành động từ chối truy cập status:500: appache hearder gửi đến client log: rule trùng khớp error audit log 29 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 3.1 Chuẩn bị - Máy ảo Ubuntu 18.04 - Cài đặt Apache - Cài đặt mã nguồn DVWA - Cài đặt Modsecurity - Trình duyệt web Firefox 3.2 Cài dặt ModSecurity Bước 1: Cập nhật phần mềm sudo apt-get update Bước 2: Cài đặt ModSecurity Apache Trong cửa sổ terminal, nhập: sudo apt-get install libapache2-mod-security2 Khởi động lại dịch vụ Apache: /etc/init.d/apache2 restart Kiểm tra phiên phần mềm (từ 2.8.0 trở lên): apt-cache show libapache2-mod-security2 Bước: Cấu hình ModSecurity Sao chép đổi tên tập tin: sudo cp/etc/modsecurity/modsecurity.confrecommended/etc/modsecurity/modsecurity.conf Tiếp theo, thay đổi chế độ ModSecurity 30 Mở tệp cấu hình: sudo nano /etc/modsecurity/modsecurity.conf Thay đổi: SecRuleEngine = DetectionOnly Thành: SecRuleEngine = On Sử dụng CTRL+X để thốt, sau nhấn y -> Enter để lưu thay đổi Khởi động lại Apache theo hướng dẫn Bước Bước 4: Thiết lập rule bản: 1.Tải CRS: git clone https ://github.com/SpiderLabs/owasp-modsecurity-crs.git Mở thư mục chứa file vừa tải về: cd owasp-modsecurity-crs Di chuyển tập tin crs-setup: sudo mv crs-setup.conf.example /etc/modsecurity/crs-setup.conf Sau di chuyển rules: sudo mv rules/ /etc/modsecurity Tiếp theo, kiểm tra tệp security2.conf để xác minh đặt để tải rules ModSecurity: sudo nano /etc/apache2/mods-enabled/security2.conf 31 Xác nhận có dịng sau bao gồm khơng bị thiếu: IncludeOptional /etc/modsecurity/*.conf Include /etc/modsecurity/rules/*.conf Khởi động lại Apache Bước 3.3 Thực công - Đăng nhập DVWA username password thiết lập trước - Mặc định username/ password admin/password Hình Màn hình đăng nhập DVWA - Chọn mức cơng Low -> Submit 32 Hình Màng hình DVWA security Sau đăng nhập ta chọn kiểu cơng SQL injection Hình Màng hình cách công DVWA 33 - Để thực công ta cần tắt Modsecurity Hình 10 File modsedurity.conf - Sau khởi động lại dịch vụ apache2 để lưu lại bước vừa - Thực truy vấn tân công bằng: %' or '0'='0 - Ta kết quả: 34 Hình 11 Kết cơng SQL injection - Thực truy vấn công phiên máy bằng: % 'or' '=' 'union select 1, version()# - Ta kết truy vấn: 35 Hình 12 Kết truy vấn version - Ta vào bật lại Modsecurity file config sudo gedit modsecurity.conf - Restart lại dịch vụ apache2 sudo service apache2 restart 36 Hình 13 Kết Modsecurity bảo vệ 3.4 Xây dựng luật áp dụng biểu thức quy để ngăn chặn cơng SQL injection Các từ khóa thường sử dụng công SQL Injection regular expressions tương ứng : UNION SELECT union\s+select UNION ALL SELECT union\s+all\s+select INTO OUTFILE into\s+outfile DROP TABLE drop\s+table ALTER TABLE alter\s+table LOAD_FILE load_file SELECT * select\s+* \s : định nghĩa PCRE regular expression cho phép phát khoảng trắng mã thay (%20) Để chống lại công SQL Injection, ta dựa vào đặc điểm từ đưa rule sau: 37 SecRule ARGS "union\s+select" "t:lowercase,deny,msg:'SQL Injection'" SecRule ARGS "union\s+all\s+select" "t:lowercase,deny,msg:'SQL Injection'" SecRule ARGS "into\s+outfile" "t:lowercase,deny,msg:'SQL Injection'" SecRule ARGS "drop\s+table" "t:lowercase,deny,msg:'SQL Injection'" SecRule ARGS "alter\s+table" "t:lowercase,deny,msg:'SQL Injection'" SecRule ARGS "load_file" "t:lowercase,deny,msg:'SQL Injection'" SecRule ARGS "select\s+*" "t:lowercase,deny,msg:'SQL Injection'" - Ta cần tạo file tường tự file modsecurity.conf chứa rule mà ta cần áp dụng thêm luật vào file modsecurity.conf có sẵn - Ở thực tạo thư mục tên modsecurity2 để chưa file conf /etc/modsecurity/modsecurity2/ modsecurity2.conf - Sau chỉnh sửa đường dẫn đến file chứa rules file security2.conf /etc/apache2/mods-enabled/security2.conf File security2.conf sửa thành: IncludeOptional /etc/modsecurity/ modsecurity2/*.conf # Include /etc/modsecurity/rules/*.conf - Khởi động lại dịch vụ apache2: /etc/init.d/apache2 restart - Khi truy vấn cơng có rules tạo truy vấn bị chặn 38 Hình 14 Kết truy vấn bị chặn rules vừa xây dựng 39 TÀI LIỆU THAM KHẢO Tải máy ảo Ubuntu 18.04 LTS https://ubuntu.com/download/desktop/thankyou?country=VN&version=18.04.3&architecture=amd64 Tìm hiểu SQL injection https://whitehat.vn/threads/tim-hieu-ve-sql-injection-va-cach-phongchong.11591/ https://www.guru99.com/learn-sql-injection-with-practical-example.html Cài đặt công SQL DVWA https://thudinh.blogspot.com/2017/10/dvwa-sql-injection-low-level.html Tìm hiểu ModSecurity http://scorpionit.blogspot.com/2016/03/toc-h-z-t-chuongi-gioi-thieu-vemod.html 40 ... 12 Bảng Biểu thức quy xử lý chuỗi 27 Bảng Biểu thức quy dùng tốn tử so sánh 28 Bảng Biểu thức quy dùng tốn tử so sanh đại số 28 CHƯƠNG I: BIỂU THỨC CHÍNH QUY 1.1 Khái niệm... 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 3.1 Chuẩn bị - Máy ảo Ubuntu 18.04 - Cài đặt Apache - Cài đặt mã nguồn DVWA - Cài đặt Modsecurity. .. Hình Biểu thức quy Biểu diễn biểu thức quy Tấn công SQL injection 14 Cách phòng chống SQL injection 16 ModSecurity 18 Các phase hoạt động ModSecurity

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