Tôi cần các quy tắc để loại bỏ một số kết nối Apache độc ​​hại


10

Tôi bỏ tất cả lưu lượng truy cập trên các cổng ngoại trừ trên 80 cho máy chủ web của mình.

Tôi có một số quy tắc như thế này trên iptables:

iptables -A INPUT -p tcp -m tcp --dport 80 -m string --string "cgi" --algo bm --to 1000 -j DROP

Ai có nhiều có thể chia sẻ? Tôi biết luôn có những tin tặc xấu vẫn cập nhật, nhưng một số trong số chúng luôn bắt đầu với cùng một mã. Tôi cần bỏ kết nối dựa trên một số tiêu chí. Dưới đây là một số nhật ký Apache (tôi loại bỏ ips nhưng mỗi atack đến từ cùng):

Tấn công 1: Điều này tôi không biết những gì đang cố gắng làm, nhưng làm cho nó 50 lần từ cùng một ip

GET / HTTP/1.1  301 224 -   Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.152 Safari/537.22
GET / HTTP/1.1  302 3387    -   Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.152 Safari/537.22

Tấn công 2: điều này cố gắng để có được thông tin về máy chủ mà thôi.

GET / HTTP/1.1  301 224 http://myip:80/ Go-http-client/1.1
GET / HTTP/1.1  302 3228    http mywebsite  Go-http-client/1.1
GET /es/ HTTP/1.1   200 40947   https mywebsite Go-http-client/1.1

Tấn công 3: họ cố gắng truy cập vào lỗ hổng trang đăng nhập

GET /userlogin/login.aspx HTTP/1.1  302 186 -   -

Tấn công 4: điều này cố gắng truy cập vào một cgi ở yêu cầu đầu tiên, (xem quy tắc iptables đầu tiên của tôi để loại bỏ điều này)

GET /hndUnblock.cgi HTTP/1.0    302 186 -   Wget(linux)
GET /tmUnblock.cgi HTTP/1.0 302 186 -   Wget(linux)

Tôi rất mới với máy chủ, 4 cuộc tấn công này chỉ diễn ra trong 12 giờ qua ... Có hàng ngàn mỗi tuần.


Tôi không thấy bất kỳ mẫu cụ thể nào trong các yêu cầu HTTP này. Làm thế nào để bạn biết họ độc hại? Tôi không hiểu những gì bạn đang cố gắng để đạt được ở đây. Bạn có thể vui lòng chỉnh sửa câu hỏi của bạn để làm rõ? Cảm ơn.
David Foerster

Xin chào David, Cách đây một thời gian khi tôi mở các cổng như ftp, tôi đã nhận được nhật ký từ lực lượng vũ phu, khi tôi thấy fail2ban trong 24 giờ có hơn 100 ips thả trên iptables. Tôi đóng tất cả các cổng trừ 80. bây giờ tôi cố gắng tạo các quy tắc như fail2ban, nhưng cho apache.
Javier Palmero

2
Bạn có biết về mod_securitymod_evasive cho Apache không?
pa4080

vâng, bạn có quy tắc để chia sẻ? hoặc tìm ở đâu? Tôi chặn ips từ blocklist.de
Javier Palmero

Tôi đã viết ra hầu hết mọi thứ mà tôi biết về bảo mật Apache2.
pa4080

Câu trả lời:


18

Cập nhật: Câu trả lời hiện tại đã được cập nhật hoàn toàn.

Theo cuộc thảo luận này, tôi đã tạo ra một kho lưu trữ GitHub có tên WWW Security Assistant . Có một chi nhánh, được gọi ask_ubuntu, dành riêng cho câu trả lời này. Tất cả các tài liệu tham khảo, trước đây có sẵn ở đây , bị xóa do giới hạn ký tự - chúng có sẵn trên GitHub.

Dưới đây là một số cách được xem quá mức, liên quan đến một cơ chế hoàn chỉnh, cách tăng bảo mật Apache2 trong Ubuntu 16.04.

Mục lục:

  • Tập lệnh trợ lý bảo mật WWW (WSAS) ► Iptables
  • Iptables - Cấu hình cơ bản - Lưu và khôi phục
  • ModEvasive cho Apache2
  • ModEvasive ► WSAS ► Iptables
  • ModSecurance 2.9 cho Apache2
  • ModSecurity Bộ quy tắc cốt lõi OWASP 3.x
  • Quy tắc bảo mật
  • Quy tắc bảo mật ModS ► WSAS ► Iptables
  • Các tệp nhật ký ModSecurity và Apache
  • Các tệp nhật ký ModSecurity ► Fail2Ban ► Iptables
  • ModSecurance GuardianLog ► Người bảo vệ HTTPD ► WSAS ► Iptables
  • ModSecurance GuardianLog ► Phân tích tùy chỉnh HTTPD ► WSAS ► Iptables

Ngoài ra, hãy nói rằng luôn luôn tốt khi sử dụng HTTPS:


Tập lệnh trợ lý bảo mật WWW ► Iptables

Ở đây được trình bày kịch bản www-security-assistant.bash. Nó có thể giúp bạn xử lý các địa chỉ IP độc hại. Kịch bản có hai chế độ.

Chế độ tự động

Khi một chương trình bên ngoài, như của Apache mod_security, cung cấp một $IPđịa chỉ độc hại . Trong trường hợp này, cú pháp gọi tập lệnh, nên là:

www-security-assistant.bash <ip-address> Guardian
www-security-assistant.bash <ip-address> ModSecurity
www-security-assistant.bash <ip-address> ModEvasive
www-security-assistant.bash <ip-address> a2Analyst

Trong chế độ này, tập lệnh cung cấp hai giai đoạn hành động và với mỗi hành động, nó sẽ gửi email đến (các) quản trị viên.

  • Giai đoạn đầu tiên: đối với một số 'hành vi vi phạm' đầu tiên , nguồn $IPsẽ bị cấm trong một khoảng thời gian bằng với giá trị của $BAN_TIME. Chế độ này sử dụng lệnh at.

  • Giai đoạn thứ hai: khi số lượng vi phạm từ nhất định $IPtrở thành bằng giá trị của $LIMIT, $IPđịa chỉ này sẽ bị cấm vĩnh viễn thông qua Iptables và sẽ được thêm vào $BAN_LIST.

Chế độ thủ công

Chế độ này chấp nhận các tùy chọn sau:

  • www-security-assistant.bash <ip-address> --DROP "log notes"

    Tạo một mục vào tệp /var/www-security-assistant/iptables-DROP.listvà tạo quy tắc như:

    iptables -A GUARDIAN -s $IP -j DROP
    
  • www-security-assistant.bash <ip-address> --DROP-CLEAR "log notes"

    Tạo một mục vào tệp /var/www-security-assistant/iptables-DROP-CLEAR.list, xóa quy tắc Iptables nhất định, xóa $IPkhỏi lịch sử và khỏi $BAN_LIST:

    iptables -D GUARDIAN -s $IP -j DROP
    
  • www-security-assistant.bash <ip-address> --ACCEPT "log notes"

    Chỉ tạo một mục vào tệp /var/www-security-assistant/iptables-ACCEPT.list.

  • www-security-assistant.bash <ip-address> --ACCEPT-CHAIN "log notes"

    Tạo một mục vào tệp /var/www-security-assistant/iptables-ACCEPT.listvà tạo quy tắc như:

    iptables -A GUARDIAN -s $IP -j ACCEPT
    

Phụ thuộc

Kịch bản sử dụng iptables-save.shiptableschuỗi GUARDIAN, được giải thích trong phần tiếp theo. Nó sẽ tạo và duy trì một vài tệp trong $WORK_DIR:

  • www-security-assistant.history - chứa dữ liệu cho các vi phạm của IP trước đó.
  • www-security-assistant.mail - nội dung của email cuối cùng được gửi bởi tập lệnh.
  • iptables-ACCEPT.list; iptables-DROP.listiptables-DROP-CLEAR.list.

Kịch bản cần một cấu hình tối thiểu để gửi email:

sudo apt install s-nail mutt mailutils postfix
sudo dpkg-reconfigure postfix  # For General type: Internet Site
echo 'Test passed.' | mail -s Test-Email email@example.com

Nếu có bất kỳ dịch vụ HTTPS nào được cấu hình, chứng chỉ TLS của nó có thể được sử dụng trong dịch vụ Postfix.

Ngoài ra, kịch bản sử dụng at: sudo apt install at.

Cài đặt

  • Tạo thư mục công việc, hãy gọi nó /var/www-security-assistant. Tải về www-security-assistant.bashvà làm cho nó thực thi:

    sudo mkdir /var/www-security-assistant
    sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/www-security-assistant.bash -O /var/www-security-assistant/www-security-assistant.bash
    sudo chmod +x /var/www-security-assistant/www-security-assistant.bash
    
  • Cung www-security-assistant.bashcấp dưới dạng lệnh tùy chỉnh:

    sudo ln -s /var/www-security-assistant/www-security-assistant.bash /usr/local/bin/
  • Cấp quyền để www-datachạy www-security-assistant.bashmà không cần mật khẩu thông qua sudo. Sử dụng lệnh sau để tạo và chỉnh sửa an toàn một tệp mới với sudoersquy tắc ' ' bổ sung :

    sudo visudo -f /etc/sudoers.d/www-security-assistant

    Thêm dòng sau vào tệp - lưu tệp và thoát:

    www-data ALL=(ALL) NOPASSWD: /var/www-security-assistant/www-security-assistant.bash
  • Tinh chỉnh www-security-assistant.bash. Thay đổi ít nhất giá trị của biến $EMAIL_TO.

Kiểm tra

  • Đại diện cho chính bạn $AGENTvà kiểm tra xem MODE tự động có hoạt động đúng không:

    www-security-assistant.bash 192.168.1.177 Guardian

    Sau đó kiểm tra e-mail của bạn, nhập iptables -L GUARDIAN -n, xem lại các tập tin www-security-assistant.historywww-security-assistant.mail. Chạy lệnh trên 5 lần và xem lại các tập tin iptables-DROP.listiptables-CURRENT.conf.

  • Kiểm tra xem MODE thủ công có hoạt động đúng không - thêm localhost của bạn vào Danh sách trắng:

    www-security-assistant.bash 127.0.0.1 --ACCEPT "Server's localhost IP"

    Sau đó kiểm tra tập tin iptables-ACCEPT.list.


Phần còn lại của hướng dẫn này là cách tích hợp www-security-assistantvới hệ thống của bạn.


Iptables - Cấu hình cơ bản - Lưu và khôi phục

Cấu hình cơ bản

Vui lòng đọc hướng dẫn này trước khi thêm các quy tắc sau.

sudo iptables -F

sudo iptables -I INPUT 1 -i lo -j ACCEPT
sudo iptables -I INPUT 2 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# This rule may lock you out of the system!
sudo iptables -P INPUT DROP
sudo iptables -P OUTPUT ACCEPT

Trước khi bạn thực hiện các hành động tiếp theo, hãy mở kết nối SSH mới và thử đăng nhập vào hệ thống của bạn để kiểm tra xem mọi thứ có hoạt động tốt không!

Lưu và khôi phục

Điều này có thể đạt được thông qua các tập lệnh tùy chỉnh, sẽ lưu và khôi phục lại hình iptablesnón trong quá trình dừng khởi động (hoặc khởi động lại) của hệ thống. (Nếu chúng tôi sử dụng UFW để thiết lập quy tắc Iptables thì bước này không cần thiết.)

printf '#!/bin/sh\n/sbin/iptables-save > /var/www-security-assistant/iptables-CURRENT.conf\nexit 0\n' | sudo tee /var/www-security-assistant/iptables-save.sh
printf '#!/bin/sh\n/sbin/iptables-restore < /var/www-security-assistant/iptables-CURRENT.conf\nexit 0\n' | sudo tee /var/www-security-assistant/iptables-restore.sh
sudo chmod +x /var/www-security-assistant/iptables-restore.sh /var/www-security-assistant/iptables-save.sh
sudo ln -s /var/www-security-assistant/iptables-save.sh /etc/network/if-post-down.d/iptables-save
sudo ln -s /var/www-security-assistant/iptables-restore.sh /etc/network/if-pre-up.d/iptables-restore

Tạo chuỗi mới

Tạo chuỗi mới, được gọi GUARDIANvà chèn nó như số 3 vào INPUTchuỗi:

sudo iptables -N GUARDIAN
sudo iptables -I INPUT 3 -j GUARDIAN

Kiểm tra

Khởi động lại hệ thống và kiểm tra cấu hình. Vui lòng sử dụng sudo systemctl reboot(không sử dụng tùy chọn lực lượng reboot -f). Khi hệ thống hoạt động trở lại, chúng ta có thể kiểm tra xem chuỗi mới được tạo có tồn tại không:

sudo iptables -L GUARDIAN -n


ModEvasive cho Apache2

ModEvasive là một mô-đun cơ động lảng tránh để Apache cung cấp hành động lảng tránh trong trường hợp tấn công HTTP DoS hoặc DDoS hoặc tấn công vũ phu. Đọc thêm...

Cài đặt

  • Cài đặt và kích hoạt mô-đun:

    sudo apt install libapache2-mod-evasive
    sudo a2enmod evasive
  • Tạo thư mục nhật ký và làm cho nó có thể truy cập cho www-data:

    sudo mkdir -p /var/log/apache2_mod_evasive
    sudo chown www-data /var/log/apache2_mod_evasive
  • Điều chỉnh cấu hình cơ bản - bỏ ghi chú và chỉnh sửa các chỉ thị nhất định trong tệp cấu hình:

    /etc/apache2/mods-enabled/evasive.conf
  • Khởi động lại Apache : sudo systemctl restart apache2.service.

Kiểm tra

  • Mở một trang web từ máy chủ của bạn và làm mới cửa sổ trình duyệt nhiều lần (nhấn F5) - bạn phải nhận 403 thông báo lỗi Cấm . Vào thư mục nhật ký, sẽ được tạo một tệp khóa mới. Tập tin này nên được xóa để phát hiện vi phạm hơn nữa từ địa chỉ IP này.


ModEvasive ► WSAS ► Iptables

Ở đây chúng tôi sẽ cấu hình mod_evasiveđể nói chuyện iptablesthông qua www-security-assistant.bash, được tạo trong phần trên.

  • Chỉnh sửa /etc/apache2/mods-available/evasive.conftheo cách này:

    <IfModule mod_evasive20.c>
        DOSHashTableSize    3097
        DOSPageCount        9
        DOSSiteCount        70
        DOSPageInterval     2
        DOSSiteInterval     2
        DOSBlockingPeriod   10
    
        #DOSEmailNotify     your@email.foo
        DOSLogDir           "/var/log/apache2_mod_evasive"
        DOSSystemCommand    "sudo /var/www-security-assistant/www-security-assistant.bash %s 'ModEvasive' 'AutoMode' >> /var/www-security-assistant/www-security-assistant.execlog 2>&1"
    </IfModule>
  • Tạo tệp nhật ký và Khởi động lại Apache:

    sudo touch /var/www-security-assistant/www-security-assistant.execlog && sudo chown www-data /var/www-security-assistant/www-security-assistant.execlog

Để kiểm tra cấu hình này, chúng ta có thể mô phỏng DDOS tấn công thông qua các F5phương pháp, đã đề cập ở trên, hoặc chúng ta có thể sử dụng một lệnh như ab, hping3vv

Chú ý: Hãy cẩn thận vì iptablesquy tắc, được sử dụng trong WSAS, sẽ DROP tất cả các kết nối mới từ nguồn $IP, bao gồm cả các kết nối SSH của bạn. Thật tốt khi có một cách sao lưu để kết nối với máy chủ trong các thử nghiệm. Bạn có thể thay đổi quy tắc này để chỉ hoạt động với các cổng HTTP / HTTPS.


ModSecurance 2.9 cho Apache2

ModSecurity là một công cụ tường lửa ứng dụng web tự cung cấp rất ít sự bảo vệ. Để trở nên hữu ích, ModSecurity phải được cấu hình với các quy tắc. Để cho phép người dùng tận dụng tối đa lợi thế của ModSecurity, Spider Labs của Trustwave đang cung cấp một bộ quy tắc được chứng nhận miễn phí ... Đọc thêm ...

Cài đặt

  • Cài đặt và kích hoạt mô-đun:

    sudo apt install libapache2-mod-security2
    sudo a2enmod security2
  • Tạo tập tin cấu hình:

    sudo cp /etc/modsecurity/modsecurity.conf-recommends /etc/modsecurity/modsecurity.conf

    Đọc và chỉnh sửa /etc/modsecurity/modsecurity.confcẩn thận! Thêm hoặc thay đổi ít nhất các chỉ thị sau:

    # -- Rule engine initialization ----------------------------------------------
    SecRuleEngine On
    
    # -- Debug log configuration -------------------------------------------------
    SecDebugLogLevel 2
    SecDebugLog "/var/log/apache2_mod_security/modsec_debug.log"
    
    # -- Audit log configuration -------------------------------------------------
    SecAuditLog "/var/log/apache2_mod_security/modsec_audit.log"
    
    # -- Guardian log configuration -------------------------------------------------
    SecGuardianLog /var/log/apache2_mod_security/modsec_guardian.log
  • Các tập tin /etc/apache2/mods-enabled/security2.confliên quan đến /etc/modsecurity/modsecurity.confcấu hình của Apache. Ở giai đoạn này security2.confsẽ trông như thế này:

    <IfModule security2_module>
        SecDataDir /var/cache/modsecurity
        IncludeOptional /etc/modsecurity/*.conf
    </IfModule>
  • Tạo thư mục nhật ký:

    sudo mkdir -p /var/log/apache2_mod_security
  • Thiết lập xoay vòng nhật ký. Đầu tiên tạo tập tin cấu hình:

    sudo cp /etc/logrotate.d/apache2 /etc/logrotate.d/apache2-modsec

    Sau đó chỉnh sửa tệp mới theo cách này:

    /var/log/apache2_mod_security/*.log {  }
  • Khởi động lại Apache.

Kiểm tra

  • Tạo một tệp cấu hình bổ sung /etc/modsecurity, gọi nó là ví dụ z-customrules.confvà thêm quy tắc sau làm nội dung của nó:

    # Directory traversal attacks
    SecRule REQUEST_URI "../" "t:urlDecodeUni, deny, log, id:109"

    Khởi động lại máy chủ : sudo systemctl restart apache2.service. Mở trình duyệt của bạn và gõ https://example.com/?abc=../. Kết quả sẽ là: 403 Cấm . Kiểm tra các tệp nhật ký /var/log/apache2_mod_securityđể biết thêm chi tiết.

  • Để làm cho mọi thứ thú vị hơn, hãy đặt tập lệnh issues.phpvào một vị trí thích hợp trong bạn DocumentRoot(ở đây tôi giả sử địa điểm này là /var/www/html):

    sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/appendix/var/www/html/issues.php -O /var/www/html/issues.php

    Sau đó sửa đổi quy tắc trên theo cách sau:

    # Directory traversal attacks with redirection (or use URL instead of URI: redirect:'https://example.com/issues.php')
    SecRule REQUEST_URI "../" "t:urlDecodeUni, deny, log, id:109, redirect:'/issues.php'"

    Khởi động lại Apache, sau đó mở trình duyệt của bạn và gõ https://example.com/?abc=../;-) Ý tưởng được mượn từ tập lệnh của SE BotLovin.cs.

  • Chỉnh sửa /etc/modsecurity/z-customrules.confmột lần nữa và nhận xét (vô hiệu hóa) quy tắc - đây chỉ là ví dụ thử nghiệm và nó được bao phủ bởi OWASP CRS, được mô tả trong phần tiếp theo.

  • Dưới đây là một ví dụ khác, nơi chúng tôi sẽ chuyển hướng tất cả các wp-adminyêu cầu trang, nhưng ngoại trừ những yêu cầu này từ một số địa chỉ IP nhất định (lưu ý chain):

    # Block wp-admin access
    SecRule REQUEST_URI "^/wp-admin" "id:108, log, deny, status:403, t:lowercase, chain, redirect:'/issues.php'"
        SecRule REMOTE_ADDR "!@ipMatch 192.168.1.11,99.77.66.12"

    Ở đây chúng tôi có hai hành động gây rối: (1) deny, status:403và (2) redirect:'/issues.php'. Thật ra chúng ta không cần denyhành động vì nó sẽ bị ghi đè bởi redirecthành động.


ModSecurity Bộ quy tắc cốt lõi OWASP 3.x

Trong Ubuntu 16.04, bạn có thể cài đặt CSR 2.x : apt install modsecurity-crs. Ở đây chúng tôi sẽ cài đặt CSR 3.x , hướng dẫn chi tiết được cung cấp trong Hướng dẫn cài đặt ( gitbắt buộc).

Cài đặt

  • Sao chép CSR trong thư mục /usr/share/modsecurity-crs.3:

    sudo git clone https://github.com/SpiderLabs/owasp-modsecurity-crs /usr/share/modsecurity-crs.3
  • Nâng cấp và tự động làm mới cơ sở dữ liệu GeoIP. (GeoIP DB không còn được bao gồm trong CRS. Thay vào đó, bạn nên tải xuống thường xuyên.) Kịch bản util/upgrade.pymang chức năng này. Bạn có thể sử dụng nó như sau trong cron - sudo crontab -e:

    0 2 * * * /usr/share/modsecurity-crs.3/util/upgrade.py --geoip --crs --cron >> /var/log/apache2_mod_security/owasp-crs-upgrade.log 2>&1
  • Tạo tập tin cấu hình:

    sudo cp /usr/share/modsecurity-crs.3/crs-setup.conf{.example,}
    sudo cp /usr/share/modsecurity-crs.3/rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf{.example,}
    sudo cp /usr/share/modsecurity-crs.3/rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf{.example,}

    Đọc và chỉnh sửa các tập tin cẩn thận! Uncomment ít nhất là SecGeoLookupDBchỉ thị:

    SecGeoLookupDB util/geo-location/GeoIP.dat
  • Áp dụng cấu hình của Apache. Chỉnh sửa /etc/apache2/mods-available/security2.conftheo cách này:

    <IfModule security2_module>
        SecDataDir /var/cache/modsecurity
        IncludeOptional /etc/modsecurity/*.conf
        IncludeOptional /usr/share/modsecurity-crs.3/crs-setup.conf
        IncludeOptional /usr/share/modsecurity-crs.3/rules/*.conf
    </IfModule>

    Lưu tệp và sau đó khởi động lại Apache.


Quy tắc bảo mật

Việc làm trắng các Quy tắc bảo mật có thể được thực hiện thông qua các chỉ thị ModSec sau, có thể được sử dụng trên toàn hệ thống hoặc trong cấu hình của máy chủ ảo, trên toàn cầu, cho các thư mục cụ thể hoặc vị trí phù hợp:

SecRuleRemoveById
SecRuleRemoveByMsg
SecRuleRemoveByTag
SecRuleUpdateTargetById
SecRuleUpdateTargetByMsg
SecRuleUpdateTargetByTag
SecRuleUpdateActionById

Vô hiệu hóa mod_security2cho PhpMyAdmin. Thay đổi /etc/phpmyadmin/apache.conftheo cách này:

<Directory /usr/share/phpmyadmin>
    <IfModule security2_module>
        SecRuleEngine Off
    </IfModule>
</Directory>

Vô hiệu hóa các quy tắc cụ thể cho thư mục nhất định:

<Directory /var/www/html>
    <IfModule security2_module>
        SecRuleRemoveById 973301
    </IfModule>
</Directory>

Vô hiệu hóa các quy tắc trên toàn cầu. Vì mục đích này, chúng tôi phải thêm các chỉ thị của mình vào đâu đó trong các tệp cấu hình của Apache: /etc/modsecurity/z-customrules.conflà một nơi tốt.

  • Vô hiệu hóa các quy tắc trong toàn bộ cấu hình của Apache:

    SecRuleRemoveById 973301 950907
  • Danh sách trắng một địa chỉ IP để nó có thể đi qua ModSecurity:

    SecRule REMOTE_ADDR "@ipMatch 192.168.110.1" "phase:1,nolog,allow,ctl:ruleEngine=Off,ctl:auditEngine=Off"
  • Vô hiệu hóa các quy tắc trong thư mục khớp:

    <Directory /var/www/mediawiki/core>
        SecRuleRemoveById 973301 950907
    </Directory>
  • Cập nhật hành động của quy tắc bằng ID của nó trong Vị trí khớp:

    <LocationMatch "/index.php.*">
        SecRuleUpdateActionById 973301 "pass"
        SecRuleUpdateActionById 950907 "pass"
    </LocationMatch>

Trong các ví dụ trên, chúng tôi giả định rằng 973301950907là các ID quy tắc cản trở công việc bình thường của các ứng dụng web của chúng tôi. Chúng ta có thể tìm thấy các quy tắc như thế này bằng cách phân tích modsec_audit.log.


Quy tắc bảo mật ModS ► WSAS ► Iptables

Dưới đây được đưa ra một vài ví dụ khác về cách tạo SecRules tùy chỉnh, cũng là cách chúng ta có thể gọi WWW Security Assistant Script (WSAS) thông qua chúng.

Thiết lập ban đầu

Chúng tôi cần một kịch bản khởi động bổ sung - modsecurity-assistant.sh. Lý do là, exechành động của ModSecurity có cú pháp quá đơn giản và hạn chế.

sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/modsecurity-assistant.sh -O /var/www-security-assistant/modsecurity-assistant.sh
sudo chmod +x /var/www-security-assistant/modsecurity-assistant.sh

Nếu bạn nhìn vào bên trong tập lệnh, bạn sẽ thấy một vài biến được xuất bởi ModSecurity. Đó là: $REQUEST_URI, $ARGS, $SERVER_NAME, $REMOTE_ADDR, $REMOTE_HOST$UNIQUE_ID. Các biến khác được giải thích bên trong tập lệnh.

Tạo quy tắc tùy chỉnh và gọi các tập lệnh của chúng tôi thông qua nó

Trước tiên, hãy tạo quy tắc sẽ thực thi modsecurity-assistant.sh(và gọi www-security-assistant.bash) khi URI yêu cầu chứa một từ được đưa vào danh sách đen của chúng tôi. Mở /etc/modsecurity/z-customrules.confvà thêm các dòng sau vào dưới cùng:

# REQUEST_URI words blacklist
#
SecRule REQUEST_URI "@pmFromFile /var/www-security-assistant/modsecurity-uri-black.list" \
    "id:150, log, t:lowercase, chain, \
    drop, deny, status:403, redirect:'/issues.php'"
    SecRule REMOTE_ADDR "!@ipMatchFromFile /var/www-security-assistant/modsecurity-ip-white.list" \
        "setenv:REMOTE_HOST=%{REMOTE_HOST}, \
         setenv:ARGS=%{ARGS}, \
         exec:/var/www-security-assistant/modsecurity-assistant.sh"
  • REQUEST_URI- biến này chứa URI đầy đủ từ yêu cầu hiện tại. Quy tắc cống rộng hơn:SecRule REQUEST_URI|ARGS|REQUEST_BODY ...

  • @pmFromFilesẽ đọc tệp modsecurity-uri-black.listchứa danh sách các cụm từ, trong đó mỗi cụm từ hoặc từ cụ thể được đặt vào một dòng mới. Bạn có thể thu thập các từ và cụm từ thú vị từ các tệp nhật ký. Nếu có sự trùng khớp cụ thể giữa REQUEST_URIvà danh sách các mẫu của chúng tôi, quy tắc sẽ được áp dụng. Tệp có thể trống, nhưng bạn phải tạo ( touch) nó.

  • Các loghành động sẽ tạo ra các entry bản ghi trong file log cho quy tắc này với id:150.

  • drop, deny(với status) và redirectcác hành động thuộc nhóm hành động gây rối , chúng phải ở đầu quy tắc chain(nếu có chuỗi). Hành động thứ hai sẽ ghi đè lên hành động thứ nhất và hành động thứ ba sẽ ghi đè lên hành động thứ hai, do đó bạn phải lựa chọn bạn muốn thực hiện và có thể xóa những hành động khác.

  • chainhành động sẽ gọi quy tắc tiếp theo của chuỗi, lưu ý rằng quy tắc thứ hai, không có id.

  • REMOTE_ADDR chứa địa chỉ IP của yêu cầu.

  • @ipMatchFromFiletập tin modsecurity-ip-white.listchứa danh sách trắng các địa chỉ IP, được phân tách tại các dòng mới. Các mục CIDR cũng được chấp nhận. Bởi vì hành động gây rối luôn nằm trong quy tắc hàng đầu của chuỗi, nó sẽ được áp dụng, nhưng khi một số IP nhất định nằm trong danh sách trắng này, exechành động sẽ không được áp dụng. Tệp có thể trống, nhưng bạn phải tạo ( touch) nó.

  • exechành động sẽ gọi kịch bản bên ngoài của chúng tôi. Hành động này không gây rối và sẽ được thực thi khi quy tắc hiện tại trở lại đúng. Khi hành động này được áp dụng, IP từ xa sẽ được xử lý thông qua các tập lệnh của chúng tôi.

  • setenvhành động này sẽ xuất một số biến nội bộ nhất định =%{...}dưới dạng envvars, tên được xuất có thể khác với nội bộ. Một số biến phải được xuất thủ công, một số biến khác được xuất tự động - có thể đó là một lỗi nhỏ (trong một số trường hợp, xuất thủ công có cùng tên, chẳng hạn setenv:REQUEST_URI=%{REQUEST_URI}, sẽ gây ra giá trị trống của biến được xuất).

Kiểm tra

Giả sử bạn không có Joomla trên máy chủ của mình, chỉnh sửa tệp modsecurity-uri-black.listvà thêm một dòng có nội dung /joomla. Sau đó nhập vào trình duyệt của bạn https://exemple.com/joomla. Bạn nên được chuyển hướng và chặn thông qua Iptables. Xóa các bản ghi sudo www-security-assistant.bash <your-ip> --DROP-CLEAR 'some note', thêm IP của bạn vào modsecurity-ip-white.listvà làm lại bài tập. Bây giờ bạn nên được chuyển hướng, nhưng không bị chặn.

Kết nối tập lệnh của chúng tôi với Bộ quy tắc cốt lõi OWASP 3.x

Để làm điều đó, chúng tôi sẽ cập nhật hành động mặc định của Quy tắc chế độ dị thường (949110 và 959100). Với mục đích này, chỉnh sửa tệp /usr/share/modsecurity-crs.3/rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.confvà thêm các dòng tiếp theo vào dưới cùng:

# -- Anomaly Mode - Update actions by ID -----
#

SecRuleUpdateActionById 949110 "t:none, drop, deny, status:403, redirect:'/issues.php', \
     setenv:REMOTE_HOST=%{REMOTE_HOST}, setenv:ARGS=%{ARGS}, \
     exec:/var/www-security-assistant/modsecurity-assistant.sh"

SecRuleUpdateActionById 959100 "t:none, drop, deny, status:403, redirect:'/issues.php', \
     setenv:REMOTE_HOST=%{REMOTE_HOST}, setenv:ARGS=%{ARGS}, \
     exec:/var/www-security-assistant/modsecurity-assistant.sh"

# -- Anomaly Mode - Whitelist some URI and IP addresses -----
#

SecRule REQUEST_URI "^/wp-admin/admin-ajax.php*|^/index\.php\?title=.*&action=(submit|raw&ctype=text/javascript|raw&ctype=text/css)$" \
    "id:'999010', t:none, phase:1, pass, \
     ctl:ruleRemoveById=949110, \
     ctl:ruleRemoveById=959100"

SecRule REMOTE_ADDR "@ipMatchFromFile /var/www-security-assistant/modsecurity-ip-white.list" \
    "id:'999020', t:none, phase:1, pass, \
     ctl:ruleRemoveById=949110, \
     ctl:ruleRemoveById=959100"

Kiểm tra

Đừng quên khởi động lại (hoặc tải lại) Apache để áp dụng các thay đổi cấu hình. Đừng quên xóa hồ sơ định kỳ trong các bài kiểm tra, nếu không bạn có thể bị chặn vĩnh viễn :-)

Mô phỏng tấn công truyền tải thư mục:

https://example.com/?abc=../../../                         # This should be redirected and blocked
https://example.com/wp-admin/admin-ajax.php?abc=../../../  # This should pass because of the whitelist rule

Mô phỏng cuộc tấn công SQL Injection:

https://example.com/?username=1'%20or%20'1'%20=%20'1&password=1'%20or%20'1'%20=%20'1
https://example.com/index.php?username=1'%20or%20'1'%20=%20'1'))/*&password=foo


Các tệp nhật ký ModSecurity và Apache

Máy chủ web Apache có thể được cấu hình để cung cấp cho quản trị viên máy chủ thông tin quan trọng về cách thức hoạt động của nó ... Con đường chính để cung cấp phản hồi cho quản trị viên là thông qua việc sử dụng các tệp nhật ký. Đọc thêm...

ModSecurity có cơ chế đăng nhập mạnh mẽ. Theo chỉ thị, SecGuardianLognó cung cấp một nguồn cấp dữ liệu nhật ký được thiết kế đặc biệt để làm việc với các tập lệnh bên ngoài.

Hiện nay công cụ duy nhất được biết đến làm việc với người giám hộ khai thác gỗhttpd-guardian, đó là một phần của công cụ httpd dự án Apache . Công httpd-guardiancụ này được thiết kế để bảo vệ chống lại các cuộc tấn công từ chối dịch vụ. Nó sử dụng blacklist toolđể tương tác với một tường lửa ... dựa trên iptables, tự động đưa vào danh sách đen các địa chỉ IP vi phạm. Đọc thêm...


Các tệp nhật ký ModSecurity ► Fail2Ban ► Iptables

Có thể thiết lập Fail2Ban để phân tích dữ liệu các tệp nhật ký của Apache. modsec_audit.logcó lẽ là sự lựa chọn tốt nhất, nhưng cũng xem các phần mà chúng ta nói về SecGuardianLog.

Hãy quan tâm rằng SecAuditLogRelevantStatustrong /etc/modsecurity/modsecurity.confđược nhận xét. Nếu không, mọi người nhận được trang lỗi 404 sẽ bị fail2ban chặn.

SecAuditEngine RelevantOnly
#SecAuditLogRelevantStatus "^(?:5|4(?!04))"

Hiện tại Fail2Ban không được triển khai theo bất kỳ cách nào trong dự án này.


ModSecGuardianLog ► HTTPD-Guardian ► WSAS ► Iptables

httpd-guardian- phát hiện các cuộc tấn công DoS bằng cách theo dõi các yêu cầu Apache Security, Copyright (C) 2005 Ivan Ristic - được thiết kế để giám sát tất cả các yêu cầu máy chủ web thông qua cơ chế ghi nhật ký. Nó theo dõi số lượng yêu cầu được gửi từ mỗi địa chỉ IP ... người giám hộ httpd có thể phát cảnh báo hoặc thực thi tập lệnh để chặn địa chỉ IP ...

Kịch bản này có thể được sử dụng với cơ chế ghi nhật ký Apache2 hoặc với ModSecurity (tốt hơn).

Cài đặt và thiết lập trong hoàn cảnh hiện tại

Tải về httpd-guardianvà làm cho nó thực thi:

sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/httpd-guardian.pl -O /var/www-security-assistant/httpd-guardian.pl
sudo chmod +x /var/www-security-assistant/httpd-guardian.pl

Đọc các dòng 98-119để xem cách tập lệnh được kết nối với tập lệnh WSAS của chúng tôi.

Áp dụng thay đổi sau trong cấu hình của Apache ( /etc/modsecurity/modsecurity.conf), sau đó khởi động lại nó:

#SecGuardianLog /var/log/apache2_mod_security/modsec_guardian.log
SecGuardianLog "|/var/www-security-assistant/httpd-guardian.pl"

Kiểm tra

Để kiểm tra tập lệnh, hãy tắt ModEvasive ( sudo a2dismod evasiveđừng quên bật nó sau) và khởi động lại Apache. Sau đó, tailbản ghi thực thi:

tail -F /var/www-security-assistant/www-security-assistant.execlog

Và từ một trường hợp khác thực hiện tấn công DoS, ví dụ sử dụng abtheo cách này:

for i in {1..20}; do (ab -n 200 -c 10 https://example.com/ &); done


ModSecGuardianLog ► Phân tích tùy chỉnh ► WSAS ► Iptables

Ở đây được trình bày một kịch bản đơn giản, được gọi httpd-custom-analyze.bash, đó không phải là một cái gì đó đặc biệt nhưng có thể là một ví dụ hay. Các tính năng của nó được mô tả trong cơ thể của tập lệnh.

Cài đặt và cài đặt

Tải về httpd-custom-analyze.bashvà làm cho nó thực thi:

sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/httpd-custom-analyze.bash -O /var/www-security-assistant/httpd-custom-analyze.bash
sudo chmod +x /var/www-security-assistant/httpd-custom-analyze.bash

Áp dụng thay đổi sau trong cấu hình của Apache ( /etc/modsecurity/modsecurity.conf) và khởi động lại nó:

#SecGuardianLog /var/log/apache2_mod_security/modsec_guardian.log
#SecGuardianLog "|/var/www-security-assistant/httpd-guardian.pl"
SecGuardianLog "|/var/www-security-assistant/httpd-custom-analyze.bash"
  • Kịch bản lệnh sẽ gọi WSAS khi đạt đến ngưỡng - đọc dòng 8635.

  • Để có được cả hai httpd-tập lệnh hoạt động đồng thời chỉnh sửa modsecurity.confvà dẫn SecGuardianLogđến cả hai.

  • Để thực hiện kiểm tra, hãy làm theo các mẹo từ phần trên.


Xin vui lòng không thường xuyên chỉnh sửa bài viết của bạn. Liên tục chỉnh sửa bài đăng của bạn nhiều lần trong một ngày liên tục đưa bài này lên trang nhất và cũng tạo ra tiếng ồn cho người điều hành chúng tôi. Thay vào đó, hãy xem xét việc phác thảo nội dung của bạn trong một trang khác hoặc trình soạn thảo văn bản , sau đó chỉnh sửa hàng loạt, thay vì chỉnh sửa chi tiết riêng lẻ. (Bài đăng này bị khóa trong một giờ để hạn chế việc chỉnh sửa tạm thời được thực hiện tại đây)
Thomas Ward

1
Cảm ơn bạn đã nhận xét, @ThomasWard. Tôi sẽ ghi nhớ nó! Không phải là một ý tưởng tốt để có một cái gì đó như hộp cát trong trang Người dùng, bên cạnh Chỉnh sửa Hồ sơ & Cài đặt ?
pa4080

1
Nó đã được đề xuất và tôi tin rằng bị từ chối. Điều tôi muốn đề xuất là bạn thực hiện các thay đổi mà không lưu và lưu một bản sao câu hỏi của bạn như trong tệp văn bản trên hệ thống của bạn, sau đó bạn có thể chỉnh sửa nó, sao chép lại khi bạn muốn chỉnh sửa bài đăng, sau đó sửa chữa cho markdown và như vậy. Đồng thời, tất cả các cuộc tấn công đều ... làm cho mọi thứ trở nên khó đọc. Thay vào đó chỉ xem xét loại bỏ những phần đó. (Lịch sử sửa đổi sẽ giữ lại dữ liệu)
Thomas Ward

Thật nực cười khi Stack Exchange không cho phép không chỉnh sửa các trang chỉnh sửa
Franck Dernoncourt

1

Tôi nhận ra pa4080 đã đưa ra một phản hồi chi tiết và có lẽ rất hữu ích cho việc tự mình chăm sóc điều này. Mặc dù tự chăm sóc các vấn đề có thể cảm thấy tốt, nhưng điều này cũng có thể mất rất nhiều thời gian .

  1. Làm quen với Cloudflare khi họ cung cấp bảo vệ DDoS miễn phí.
  2. Nếu bạn hiện chỉ sử dụng Apache, hãy xem xét việc học NGINX hoạt động như thế nào để cân bằng tải của bạn. NGINX là tuyệt vời để cân bằng tải Apache như được trình chiếu ở đâyđây .
  3. Xem lại các mẹo của Apache để bảo mật cho tài liệu của họ .
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.