Thiết lập luật chặn một số hình thức tấn công cơ bản với ModSecurity bản 2.5
Bài viêt này tôi sẽ trình bày cách block một số hình thức tấn công phổ biến đối với một Website
[h=1]1.Blocking proxied requests[/h]Khi một request được truyền thông qua một proxy server có thể request đó đã có vấn đề ví dụ như chỉnh sửa các trường trong request header, bypass qua cơ chế lọc phía client của ứng dụng web.
Nếu một request qua proxy thì phần header của một HTTP request sẽ có trường X-Forwarded-For và chúng ta có thể phát hiện ra những request dựa và trường này:
SecRule &REQUEST_HEADERS:X-Forwarded-For "@gt 0" deny
Luật được thiết lập nếu trường X-Forwarded-For có giá trị lớn hơn 0 thì request đó sẽ bị Blocked.
[h=1]2. Blocking Cross-site scripting[/h]Cross-siite scripting(XSS) xảy ra khi người dùng nhập và một đoạn mã thực thi phía client ví dụ như một đoạn mã javascript nhằm chiếm SESSION của người dùng
Đặc điểm của một cuộc tấn công XSS là việc kẻ tấn công sẽ chèn những đoạn mã thực thi vào ứng dụng web và lợi dụng cơ chế lọc lỏng lẻo của ứng dụng web với những dữ liệu này.
Để có thể ngăn chặn chúng ta sẽ sử dụng cơ chế phát hiện ra các keyword và thay thế nó bằng những ký tự khác. Sử dụng HTML-entrity: <, >
PHP có các hàm cho phép việc giải mã các ký tự này bằng hàm htmlentities().
Ví dụ khi nhập vào một string là: thì Modsecurity sẽ convert thành <script> và khi lên trình duyệt vẫn có thể hiển thị được là . Điều này là vô hiệu hóa các đoạn mã được đóng trong thẻ .
Tuy nhiên trong một số tường hợp kẻ tấn công lợi dụng việc chèn các link hay các thẻ html để thực hiện mục đích của mình. Khi đó chúng ta sẽ sử dụng Regular expression(Sẽ được đề cập tới trong các bài viết tiếp theo) để có thể ngăn chặn mã độc:
[h=1]1.Blocking proxied requests[/h]Khi một request được truyền thông qua một proxy server có thể request đó đã có vấn đề ví dụ như chỉnh sửa các trường trong request header, bypass qua cơ chế lọc phía client của ứng dụng web.
Nếu một request qua proxy thì phần header của một HTTP request sẽ có trường X-Forwarded-For và chúng ta có thể phát hiện ra những request dựa và trường này:
SecRule &REQUEST_HEADERS:X-Forwarded-For "@gt 0" deny
Luật được thiết lập nếu trường X-Forwarded-For có giá trị lớn hơn 0 thì request đó sẽ bị Blocked.
[h=1]2. Blocking Cross-site scripting[/h]Cross-siite scripting(XSS) xảy ra khi người dùng nhập và một đoạn mã thực thi phía client ví dụ như một đoạn mã javascript nhằm chiếm SESSION của người dùng
Đặc điểm của một cuộc tấn công XSS là việc kẻ tấn công sẽ chèn những đoạn mã thực thi vào ứng dụng web và lợi dụng cơ chế lọc lỏng lẻo của ứng dụng web với những dữ liệu này.
Để có thể ngăn chặn chúng ta sẽ sử dụng cơ chế phát hiện ra các keyword và thay thế nó bằng những ký tự khác. Sử dụng HTML-entrity: <, >
Ký tự | HTML-encoded |
< | < |
> | > |
( | ( |
) | ) |
# | # |
& | & |
" | " |
' | ' |
PHP có các hàm cho phép việc giải mã các ký tự này bằng hàm htmlentities().
Ví dụ khi nhập vào một string là: thì Modsecurity sẽ convert thành <script> và khi lên trình duyệt vẫn có thể hiển thị được là . Điều này là vô hiệu hóa các đoạn mã được đóng trong thẻ .
Tuy nhiên trong một số tường hợp kẻ tấn công lợi dụng việc chèn các link hay các thẻ html để thực hiện mục đích của mình. Khi đó chúng ta sẽ sử dụng Regular expression(Sẽ được đề cập tới trong các bài viết tiếp theo) để có thể ngăn chặn mã độc:
Script fragment | Regular expression |