Pertanyaan Saya perlu aturan untuk menjatuhkan beberapa koneksi Apache berbahaya


Saya menjatuhkan semua lalu lintas di port kecuali di 80 untuk server web saya.

Saya memiliki beberapa aturan seperti ini di iptables:

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

Seseorang yang memiliki lebih banyak dapat berbagi? Saya tahu selalu peretas yang buruk masih memperbarui, tetapi beberapa di antaranya selalu diawali dengan kode yang sama. Saya perlu Menjatuhkan koneksi berdasarkan beberapa kriteria. Berikut adalah beberapa log Apache (saya menghapus ips tetapi setiap serangan berasal dari yang sama):

Serangan 1: Ini saya tidak tahu apa yang coba lakukan, tetapi membuatnya 50 kali dari ip yang sama

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

Serangan 2: ini mencoba untuk mendapatkan informasi tentang server saja.

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

Serangan 3: mereka mencoba mendapatkan akses ke kerentanan halaman login

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

Serangan 4: ini mencoba mengakses cgi pada permintaan pertama, (lihat aturan iptables pertama saya untuk menjatuhkan ini)

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

Saya sangat baru dengan server 4 serangan ini hanya dari 12 jam terakhir ... Memiliki ribuan per minggu.


9
2018-06-04 16:28


asal


Saya tidak melihat pola tertentu dalam permintaan HTTP ini. Bagaimana Anda tahu mereka jahat? Saya tidak mengerti apa yang Anda coba capai di sini. Bisakah kamu tolong sunting pertanyaan Anda untuk mengklarifikasi? Terima kasih. - David Foerster
Halo David, Beberapa waktu lalu ketika saya membuka port seperti ftp, saya menerima log dari brute force, ketika saya melihat fail2ban dalam 24 jam memiliki lebih dari 100 ips drop pada iptables. Saya menutup semua port kecuali 80. sekarang saya mencoba membuat aturan seperti fail2ban, tetapi untuk apache. - Javier Palmero
Apakah kamu tahu tentang mod_security dan mod_evasive untuk Apache? - pa4080
ya, apakah Anda memiliki aturan untuk dibagikan? atau di mana menemukannya? Saya memblokir ips dari blocklist.de - Javier Palmero
Saya telah menuliskan hampir semua yang saya ketahui tentang keamanan Apache2. - pa4080


Jawaban:


Memperbarui:  Jawaban saat ini benar-benar diperbarui. 

Menurut diskusi ini Saya membuat GitHub   repositori bernama Asisten Keamanan WWW. Ada sebuah   cabang, disebut ask_ubuntu, didedikasikan untuk jawaban ini.   Semua referensi, sebelumnya tersedia sini, dihapus karena batas karakter - mereka tersedia di GitHub.

Berikut ini beberapa cara yang dilewatkan, terlibat dalam mekanisme yang lengkap, cara meningkatkan keamanan Apache2 dalam Ubuntu 16.04.

Daftar Isi:

  • Skrip Asisten Keamanan WWW (WSAS) ► Iptables
  • Iptables - Konfigurasi Dasar - Simpan dan Pulihkan
  • ModEvasive untuk Apache2
  • ModEvasive ► WSAS ► Iptables
  • ModSecurity 2.9 untuk Apache2
  • ModSecurity OWASP Core Rule Set 3.x
  • ModSecurity Rules Whitelisting
  • ModSecurity Rules ► WSAS ► Iptables
  • ModSecurity dan File Log Apache
  • File Log Modececurity ► Fail2Ban ► Iptables
  • ModSecurity GuardianLog ► HTTPD Guardian ► WSAS ► Iptables
  • ModSecurity GuardianLog ► Analisis Kustom HTTPD ► WSAS ► Iptables

Selain itu, katakanlah selalu baik untuk menggunakan HTTPS:


Skrip Asisten Keamanan WWW ► Iptables

Di sini disajikan skripnya www-security-assistant.bash. Ini bisa membantu Anda menangani alamat IP jahat. Skrip ini memiliki dua mode.

Mode otomatis

Ketika program eksternal, sebagai Apache mod_security, memberikan yang jahat $IP alamat. Dalam hal ini, sintaks yang memanggil skrip, seharusnya:

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

Dalam mode ini skrip menyediakan dua tahap aksi dan untuk setiap tindakan itu akan terjadi Kirim Sebuah email ke administrator (s).

  • Tahap pertama: untuk beberapa yang pertama 'pelanggaran' sumber $IP akan dilarang untuk jangka waktu tertentu sama dengan nilai $BAN_TIME. Mode ini menggunakan perintah at.

  • Tahap kedua: ketika jumlah pelanggaran dari tertentu $IP menjadi sama dengan nilai $LIMITini $IP alamat akan dilarang secara permanen melalui Iptables dan akan ditambahkan ke $BAN_LIST.

Mode manual

Mode ini menerima opsi berikut:

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

    Menciptakan entri ke dalam file /var/www-security-assistant/iptables-DROP.list dan menghasilkan aturan sebagai:

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

    Menciptakan entri ke dalam file /var/www-security-assistant/iptables-DROP-CLEAR.list, hapus aturan Iptables tertentu, hapus $IP dari sejarah dan dari $BAN_LIST:

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

    Hanya membuat entri ke dalam file /var/www-security-assistant/iptables-ACCEPT.list.

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

    Menciptakan entri ke dalam file /var/www-security-assistant/iptables-ACCEPT.list dan menghasilkan aturan sebagai:

    iptables -A GUARDIAN -s $IP -j ACCEPT
    

Dependensi

Skrip ini menggunakan iptables-save.sh dan iptables rantai GUARDIAN, dijelaskan di bagian selanjutnya. Ini akan membuat dan memelihara beberapa file dalam $WORK_DIR:

  • www-security-assistant.history - berisi data untuk pelanggaran IP sebelumnya.
  • www-security-assistant.mail - isi email terakhir yang dikirim oleh skrip.
  • iptables-ACCEPT.list; iptables-DROP.list dan iptables-DROP-CLEAR.list.

Skrip membutuhkan konfigurasi minimal untuk mengirim 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

Jika ada layanan HTTPS yang dikonfigurasi, sertifikat TLS-nya dapat digunakan dalam layanan Postfix.

Selain itu skrip juga digunakan at: sudo apt install at.

Instalasi

  • Buat direktori kerja, sebut saja /var/www-security-assistant. Unduh www-security-assistant.bash dan membuatnya bisa dieksekusi:

    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
    
  • Membuat www-security-assistant.bash tersedia sebagai perintah khusus:

    sudo ln -s /var/www-security-assistant/www-security-assistant.bash /usr/local/bin/
    
  • Berikan izin kepada www-data untuk berlari www-security-assistant.bash tanpa kata sandi melalui sudo. Gunakan perintah berikut untuk buat dan edit dengan aman file baru dengan tambahan 'sudoers'aturan:

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

    Tambahkan baris berikut di dalam file - simpan file dan keluar:

    www-data ALL=(ALL) NOPASSWD: /var/www-security-assistant/www-security-assistant.bash
    
  • Tweak www-security-assistant.bash. Ubah setidaknya nilai variabel $EMAIL_TO.

Pemeriksaan

  • Tunjukkan diri Anda sebagai $AGENT dan periksa apakah MODE Otomatis berfungsi dengan benar:

    www-security-assistant.bash 192.168.1.177 Guardian
    

    Lalu periksa e-mail Anda, ketik iptables -L GUARDIAN -n, tinjau file www-security-assistant.history dan www-security-assistant.mail. Jalankan perintah di atas 5 kali dan tinjau file iptables-DROP.list dan iptables-CURRENT.conf.

  • Periksa apakah MODE Manual berfungsi dengan baik - tambahkan localhost Anda ke Daftar Putih:

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

    Lalu periksa file iptables-ACCEPT.list.


Bagian selebihnya dari tutorial ini adalah bagaimana mengintegrasikannya www-security-assistant dengan sistem Anda.


Iptables - Konfigurasi Dasar - Simpan dan Pulihkan

Konfigurasi dasar

Silakan baca panduan ini sebelum menambahkan aturan berikut.

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

Sebelum Anda melakukan tindakan selanjutnya, buka koneksi SSH baru dan coba masuk ke sistem Anda untuk memeriksa apakah semuanya berfungsi dengan baik!

Simpan dan Pulihkan

Ini dapat dicapai melalui skrip khusus, yang akan menyimpan dan memulihkan iptables coning selama proses sistem stop-start (atau reboot). (Jika kami menggunakan UFW untuk menyiapkan aturan Iptables, langkah ini tidak diperlukan.)

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

Buat rantai baru

Buat rantai baru, yang disebut GUARDIAN dan masukkan sebagai nomor 3 ke dalam INPUT rantai:

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

Pemeriksaan

Reboot sistem dan periksa konfigurasi. Mohon gunakan sudo systemctl reboot (jangan gunakan opsi gaya reboot -f). Ketika sistem kembali online kita dapat memeriksa apakah rantai yang baru dibuat ada oleh:

sudo iptables -L GUARDIAN -n


ModEvasive untuk Apache2

ModEvasive adalah modul manuver evasive untuk disediakan oleh Apache   tindakan menghindar dalam hal serangan DoS atau DDoS HTTP atau kasar   serangan kekuatan. Baca lebih banyak...

Instalasi

  • Pasang dan aktifkan modul:

    sudo apt install libapache2-mod-evasive
    sudo a2enmod evasive
    
  • Buat Direktori Log dan membuatnya dapat diakses www-data:

    sudo mkdir -p /var/log/apache2_mod_evasive
    sudo chown www-data /var/log/apache2_mod_evasive
    
  • Sesuaikan konfigurasi dasar - hapus tanda komentar dan edit arahan tertentu di file konfigurasi:

    /etc/apache2/mods-enabled/evasive.conf
    
  • Mulai ulang Apache: sudo systemctl restart apache2.service.

Pemeriksaan

  • Buka halaman web dari server Anda dan segarkan jendela browser beberapa kali secara intensif (tekan F5) - Anda harus mendapatkannya 403 Forbidden pesan eror. Ke dalam direktori log, akan dihasilkan file kunci baru. File ini harus dihapus untuk deteksi pelanggaran lebih lanjut dari alamat IP ini.


ModEvasive ► WSAS ► Iptables

Di sini kita akan mengkonfigurasi mod_evasive untuk diajak bicara iptables melalui www-security-assistant.bash, dibuat di bagian atas.

  • Edit /etc/apache2/mods-available/evasive.conf lewat sini:

    <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>
    
  • Buat file log dan Restart Apache:

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

Untuk menguji konfigurasi ini kita dapat mensimulasikan serangan DDOS melalui F5 metode, yang disebutkan di atas, atau kita dapat menggunakan perintah sebagai ab, hping3, dll.

Perhatian: Hati-hati karena itu iptables aturan, digunakan dalam WSAS, akan DROP semua baru koneksi dari sumbernya $IP, termasuk koneksi SSH Anda. Adalah baik untuk memiliki cara cadangan untuk terhubung ke server selama tes. Anda dapat mengubah aturan ini untuk bekerja hanya dengan port HTTP / HTTPS.


ModSecurity 2.9 untuk Apache2

ModSecurity adalah mesin firewall aplikasi web yang menyediakan sangat   sedikit perlindungan dengan sendirinya. Agar menjadi bermanfaat, ModSecurity   harus dikonfigurasi dengan aturan. Agar memungkinkan pengguna untuk mengambil penuh   keuntungan dari ModSecurity di luar kotak, Trustwave's Spider Labs adalah   menyediakan seperangkat aturan tersertifikasi gratis ... Baca lebih banyak...

Instalasi

  • Pasang dan aktifkan modul:

    sudo apt install libapache2-mod-security2
    sudo a2enmod security2
    
  • Buat file konfigurasi:

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

    Baca dan edit /etc/modsecurity/modsecurity.conf hati-hati! Tambahkan atau ubah setidaknya arahan berikut:

    # -- 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
    
  • Berkas /etc/apache2/mods-enabled/security2.conf melibatkan /etc/modsecurity/modsecurity.conf ke konfigurasi Apache. Di panggung ini security2.conf akan terlihat seperti ini:

    <IfModule security2_module>
        SecDataDir /var/cache/modsecurity
        IncludeOptional /etc/modsecurity/*.conf
    </IfModule>
    
  • Buat Direktori Log:

    sudo mkdir -p /var/log/apache2_mod_security
    
  • Atur rotasi log. Pertama buat file konfigurasi:

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

    Kemudian edit file baru dengan cara ini:

    /var/log/apache2_mod_security/*.log { … }
    
  • Mulai ulang Apache.

Pemeriksaan

  • Buat file konfigurasi tambahan di /etc/modsecurity, sebut saja misalnya z-customrules.conf, dan tambahkan aturan berikut sebagai kontennya:

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

    Mulai ulang server: sudo systemctl restart apache2.service. Buka browser Anda dan ketik https://example.com/?abc=../. Hasilnya adalah: 403 Forbidden. Periksa file log di /var/log/apache2_mod_security untuk lebih jelasnya.

  • Untuk membuat semuanya lebih baik menyenangkan tempatkan skrip issues.php di lokasi yang sesuai dengan Anda DocumentRoot (Di sini saya mengasumsikan tempat ini /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
    

    Kemudian ubah aturan di atas dengan cara berikut:

    # 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'"
    

    Restart Apache, lalu buka browser dan ketik https://example.com/?abc=../ ;-) Ide ini dipinjam dari naskah SE BotLovin.cs.

  • Edit /etc/modsecurity/z-customrules.conf sekali lagi dan komentari (nonaktifkan) aturan - ini hanya contoh percobaan dan itu ditutupi oleh OWASP CRS, dijelaskan di bagian selanjutnya.

  • Berikut ini contoh lain di mana kami akan mengalihkan semua wp-admin permintaan halaman, tetapi kecuali ini dari alamat IP tertentu (perhatikan 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"
    

    Di sini kita memiliki dua tindakan yang mengganggu: (1) deny, status:403 dan (2) redirect:'/issues.php'. Sebenarnya kita tidak membutuhkan deny tindakan karena akan diganti oleh redirecttindakan.


ModSecurity OWASP Core Rule Set 3.x

Di Ubuntu 16.04 Anda dapat menginstal CSR 2.x: apt install modsecurity-crs. Di sini kita akan menginstal CSR 3.x, petunjuk detail disediakan dalam Manual instalasi (git Dibutuhkan).

Instalasi

  • Clone CSR dalam folder /usr/share/modsecurity-crs.3:

    sudo git clone https://github.com/SpiderLabs/owasp-modsecurity-crs /usr/share/modsecurity-crs.3
    
  • Tingkatkan dan perbarui otomatis basis data GeoIP. (GeoIP DB tidak lagi disertakan dengan CRS. Sebagai gantinya, Anda disarankan untuk mengunduhnya secara teratur.) Skrip util/upgrade.py membawa fungsi ini. Anda dapat menggunakannya sebagai berikut di 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
    
  • Buat file konfigurasi:

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

    Baca dan edit file-file ini dengan hati-hati! Hapus komentar setidaknya SecGeoLookupDB direktif:

    SecGeoLookupDB util/geo-location/GeoIP.dat
    
  • Terapkan konfigurasi Apache. Edit /etc/apache2/mods-available/security2.conf lewat sini:

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

    Simpan file dan kemudian restart Apache.


ModSecurity Rules Whitelisting

Daftar Putih Aturan ModSecurity dapat dilakukan melalui petunjuk ModSec berikut, yang dapat digunakan untuk sistem yang luas atau dalam konfigurasi virtual host, juga secara global, untuk direktori atau lokasi tertentu yang cocok:

SecRuleRemoveById
SecRuleRemoveByMsg
SecRuleRemoveByTag
SecRuleUpdateTargetById
SecRuleUpdateTargetByMsg
SecRuleUpdateTargetByTag
SecRuleUpdateActionById

Nonaktifkan mod_security2 untuk PhpMyAdmin. Perubahan /etc/phpmyadmin/apache.conf lewat sini:

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

Nonaktifkan aturan khusus untuk direktori tertentu:

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

Nonaktifkan aturan secara global. Untuk tujuan ini kita harus menambahkan arahan kita di suatu tempat di file konfigurasi Apache: /etc/modsecurity/z-customrules.conf adalah tempat yang bagus.

  • Nonaktifkan aturan di seluruh konfigurasi Apache:

    SecRuleRemoveById 973301 950907
    
  • Masukkan alamat IP ke daftar putih sehingga dapat melewati ModSecurity:

    SecRule REMOTE_ADDR "@ipMatch 192.168.110.1" "phase:1,nolog,allow,ctl:ruleEngine=Off,ctl:auditEngine=Off"
    
  • Nonaktifkan aturan dalam kecocokan Direktori:

    <Directory /var/www/mediawiki/core>
        SecRuleRemoveById 973301 950907
    </Directory>
    
  • Perbarui tindakan aturan oleh ID-nya dalam Pencocokan lokasi:

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

Dalam contoh di atas kami menganggap itu 973301 dan 950907 adalah ID aturan yang menghalangi pekerjaan normal dari aplikasi web kami. Kita dapat menemukan aturan seperti ini dengan menganalisa modsec_audit.log.


ModSecurity Rules ► WSAS ► Iptables

Berikut ini diberikan beberapa contoh lagi cara membuat Custom Rule, juga bagaimana kita dapat memanggil WWW Security Assistant Script (WSAS) melalui mereka.

Pengaturan awal

Kami membutuhkan scrip startup tambahan - modsecurity-assistant.sh. Alasannya adalah, ModSecurity's exec tindakan memiliki sintaks yang terlalu sederhana dan terbatas.

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

Jika Anda melihat ke dalam skrip Anda akan melihat beberapa variabel yang diekspor oleh ModSecurity. Ini adalah: $REQUEST_URI, $ARGS, $SERVER_NAME, $REMOTE_ADDR, $REMOTE_HOST dan $UNIQUE_ID. Variabel lain dijelaskan di dalam skrip.

Buat aturan khusus dan panggil skrip kami melaluinya

Pertama mari buat aturan yang akan dijalankan modsecurity-assistant.sh (dan hubungi www-security-assistant.bash) ketika permintaan URI berisi kata yang termasuk dalam daftar hitam kami. Buka /etc/modsecurity/z-customrules.conf dan tambahkan baris berikut ke bawah:

# 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 - variabel ini berisi URI lengkap dari permintaan saat ini. Aturan culd menjadi lebih lebar: SecRule REQUEST_URI|ARGS|REQUEST_BODY ...

  • @pmFromFile akan membaca file modsecurity-uri-black.list yang berisi daftar frasa, di mana setiap frasa atau kata tertentu ditempatkan ke dalam baris baru. Anda dapat mengumpulkan kata dan frasa yang menarik dari file-file log. Jika ada tertentu cocok antara REQUEST_URI dan daftar pola kami aturan akan diterapkan. File bisa kosong, tetapi Anda harus membuat (touch) saya t.

  • Itu log tindakan akan membuat entri log di file log untuk aturan ini dengan id:150.

  • drop, deny (dengan status) dan redirect tindakan milik mengganggukelompok tindakan, mereka harus berada di awal aturan chain (jika ada rantai). Tindakan kedua akan mengesampingkan yang pertama dan yang ketiga akan mengesampingkan seceond, jadi Anda harus menentukan mana yang harus Anda lakukan dan dapat menghapus yang lain.

  • chain tindakan akan memanggil aturan berikutnya dari rantai, perhatikan bahwa aturan kedua, dosnt memiliki id.

  • REMOTE_ADDR berisi alamat IP dari permintaan tersebut.

  • @ipMatchFromFile akankah file itu modsecurity-ip-white.list yang berisi daftar alamat IP-putih, dipisahkan pada baris baru. Entri CIDR juga dapat diterima. Karena mengganggu tindakan selalu berada di aturan utama rantai itu akan diterapkan, tetapi ketika IP tertentu ada dalam daftar putih ini exec tindakan tidak akan diterapkan. File bisa kosong, tetapi Anda harus membuat (touch) saya t.

  • exec tindakan akan memanggil skrip eksternal kami. Tindakan ini tidak mengganggu dan akan dieksekusi ketika aturan saat ini mengembalikan true. Ketika tindakan ini diterapkan, IP jarak jauh akan diproses melalui skrip kami.

  • setenv tindakan ini akan mengekspor tertentu variabel internal  =%{...} sebagai envvars, nama yang diekspor dapat berbeda dari internal. Beberapa variabel harus diekspor secara manual, beberapa lainnya diekspor secara otomatis - mungkin itu adalah bug kecil (dalam beberapa kasus ekspor manual dengan nama yang sama, misalnya setenv:REQUEST_URI=%{REQUEST_URI}, akan menyebabkan nilai kosong dari variabel yang diekspor).

Pemeriksaan

Anggap saja Anda tidak memiliki Joomla di server Anda, edit file modsecurity-uri-black.list dan tambahkan satu baris dengan konten /joomla. Lalu ketikkan browser Anda https://exemple.com/joomla. Anda harus diarahkan dan diblokir melalui Iptables. Hapus catatan sudo www-security-assistant.bash <your-ip> --DROP-CLEAR 'some note', tambahkan IP Anda modsecurity-ip-white.list dan lakukan latihan lagi. Sekarang Anda harus dialihkan, tetapi tidak diblokir.

Hubungkan skrip kami dengan OWASP Core Rule Set 3.x

Untuk melakukan itu kami akan memperbarui tindakan default dari Aturan Mode Anomali (949110 dan 959100). Untuk tujuan ini, edit file /usr/share/modsecurity-crs.3/rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf dan tambahkan baris berikutnya ke bawah:

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

Pemeriksaan

Jangan lupa untuk me-restart (atau memuat ulang) Apache untuk menerapkan perubahan konfigurasi. Jangan lupa untuk menghapus catatan secara berkala selama tes, jika tidak Anda dapat diblokir secara permanen :-)

Mensimulasikan serangan traversal direktori:

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

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


ModSecurity dan File Log Apache

Server web Apache dapat dikonfigurasi untuk memberikan server   administrator informasi penting tentang bagaimana berfungsi ...   Jalan utama untuk memberikan umpan balik kepada administrator sudah selesai   penggunaan file-file log. Baca lebih banyak...

ModSecurity memiliki mekanisme pembalakan yang kuat. Dengan arahan SecGuardianLog ini menyediakan umpan log yang dirancang khusus untuk bekerja dengan skrip eksternal.

Saat ini satu-satunya alat yang diketahui bekerja dengan penebangan wali aku s    httpd-guardian, yang merupakan bagian dari Alat httpd Apache   proyek. Itu httpd-guardian alat ini dirancang untuk mempertahankan diri   Penolakan serangan layanan. Ini menggunakan blacklist tool untuk   berinteraksi dengan firewall ... berbasis iptables, daftar hitam yang dinamis   alamat IP yang menyinggung. Baca lebih banyak...


File Log Modececurity ► Fail2Ban ► Iptables

Adalah mungkin untuk mengatur Fail2Ban untuk penguraian data file log Apache. modsec_audit.log mungkin adalah pilihan terbaik, tetapi lihat juga bagian di mana kita berbicara tentang SecGuardianLog.

Hati hati bahwa SecAuditLogRelevantStatus di /etc/modsecurity/modsecurity.conf dikomentari. Jika tidak semua orang yang menerima halaman kesalahan 404 akan diblokir oleh fail2ban.

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

Saat ini Fail2Ban tidak diimplementasikan dengan cara apa pun dalam proyek ini.


ModSecGuardianLog ► HTTPD-Guardian ► WSAS ► Iptables

httpd-guardian - mendeteksi serangan DoS dengan memonitor permintaan   Apache Security, Copyright (C) 2005 Ivan Ristic - dirancang untuk   pantau semua permintaan server web melalui mekanisme pencatatan pipet.   Ini melacak jumlah permintaan yang dikirim dari setiap alamat IP ...   httpd-guardian dapat memancarkan peringatan atau menjalankan skrip untuk memblokir   alamat IP ...

Skrip ini dapat digunakan dengan Mekanisme penebangan Apache2, atau dengan    ModSecurity (lebih baik).

Instalasi dan Pengaturan dalam Keadaan Terkini

Unduh httpd-guardian dan membuatnya bisa dieksekusi:

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

Baca garis 98-119 untuk melihat bagaimana skrip terhubung dengan skrip WSAS kami.

Terapkan perubahan berikut dalam konfigurasi Apache (/etc/modsecurity/modsecurity.conf), kemudian mulai ulang:

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

Pemeriksaan

Untuk menguji skrip menonaktifkan ModEvasive (sudo a2dismod evasive jangan lupa untuk mengaktifkannya nanti) dan restart Apache. Kemudian tail log exec:

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

Dan dari contoh lain melakukan serangan DoS, misalnya digunakan ab lewat sini:

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


ModSecGuardianLog ► Analisis Kustom ► WSAS ► Iptables

Di sini disajikan skrip sederhana, yang disebut httpd-custom-analyze.bash, itu bukan sesuatu yang istimewa tetapi bisa menjadi contoh yang bagus. Fitur-fiturnya dijelaskan dalam tubuh skrip.

Instalasi dan Pengaturan

Unduh httpd-custom-analyze.bash dan membuatnya bisa dieksekusi:

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

Terapkan perubahan berikut dalam konfigurasi Apache (/etc/modsecurity/modsecurity.conf) dan nyalakan kembali:

#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"
  • Skrip akan memanggil WSAS ketika ambang tercapai - baca baris 86 dan 35.

  • Untuk mendapatkan keduanya httpd- skrip untuk bekerja secara bersamaan mengedit modsecurity.conf dan pipa SecGuardianLog untuk keduanya.

  • Untuk melakukan tes ikuti tips dari bagian di atas.


16
2018-06-04 22:01



Tolong jangan sering mengedit posting Anda. Terus-menerus mengedit posting Anda berkali-kali dalam satu hari terus menabrak ini ke halaman depan, dan juga menghasilkan suara bagi kita moderator. Sebaliknya, pertimbangkan menyusun konten Anda di halaman lain atau editor teks, kemudian mengeditnya secara massal, daripada rincian pengeditan individual di. (Pos ini dikunci selama satu jam untuk menilai-batas pengeditan yang dilakukan di sini sementara) - Thomas Ward♦
Terima kasih atas ucapannya, @ThomasWard. Saya akan mengingatnya! Bukankah ide bagus untuk memiliki sesuatu sebagai sandbox di dalamnya Halaman Pengguna, di samping Edit Profil & Pengaturan? - pa4080
Sudah diusulkan dan saya percaya ditolak. Yang saya sarankan adalah Anda membuat perubahan tanpa menyimpan, dan menyimpan salinan pertanyaan Anda apa adanya dalam file teks di sistem Anda, maka Anda dapat mengeditnya, menyalinnya kembali ketika Anda ingin mengedit posting, dan kemudian memperbaiki untuk penurunan harga dan semacamnya. Juga, semua strikethroughs ... membuat hal sulit untuk dibaca. Pertimbangkan saja menghapus bagian-bagian itu sebagai gantinya. (Riwayat revisi akan menyimpan data) - Thomas Ward♦
Ini konyol bahwa Stack Exchange tidak memungkinkan tidak menabrak pengeditan ke halaman depan - Franck Dernoncourt