Ho bisogno di regole per eliminare alcune connessioni Apache dannose


10

Rilascio tutto il traffico sulle porte tranne su 80 per il mio server web.

Ho alcune regole come questa su iptables:

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

Qualcuno che ha di più può condividere? So che i cattivi hacker si aggiornano sempre, ma alcuni di loro iniziano sempre con lo stesso codice. Devo abbandonare la connessione in base ad alcuni criteri. Ecco alcuni log di Apache (rimuovo ips ma ogni attacco proviene dallo stesso):

Attacco 1: questo non so cosa stia cercando di fare, ma fallo 50 volte dallo stesso 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

Attacco 2: prova a ottenere informazioni solo sul server.

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

Attacco 3: provano ad accedere a una vulnerabilità della pagina di accesso

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

Attacco 4: prova ad accedere a un cgi alla prima richiesta, (vedi la mia prima regola iptables per eliminare questo)

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

Sono molto nuovo con il server, questi 4 attacchi sono solo delle ultime 12 ore ... Ne ho migliaia alla settimana.


Non vedo alcun modello particolare in queste richieste HTTP. Come fai a sapere che sono dannosi? Non capisco cosa stai cercando di ottenere qui. Potresti modificare la tua domanda per chiarire? Grazie.
David Foerster,

Ciao David, Qualche tempo fa quando apro porte come ftp, ho ricevuto il registro da forza bruta, quando vedo fail2ban in 24 ore ho più di 100 ips in calo su iptables. Chiudo tutte le porte tranne 80. Ora provo a creare regole come fail2ban, ma per apache.
Javier Palmero,

2
Sai di mod_security e mod_evasive per Apache?
pa4080,

si, hai delle regole da condividere? o dove trovarlo? Sono block ips da blocklist.de
Javier Palmero il

Ho scritto quasi tutto quello che so sulla sicurezza di Apache2.
pa4080,

Risposte:


18

Aggiornamento: la risposta corrente è completamente aggiornata.

Secondo questa discussione ho creato un repository GitHub chiamato WWW Security Assistant . C'è un ramo, chiamato ask_ubuntu, dedicato a questa risposta. Tutti i riferimenti, precedentemente disponibili qui , vengono rimossi a causa del limite di caratteri - sono disponibili su GitHub.

Qui ci sono alcuni modi trascurati, coinvolti in un meccanismo completo, come aumentare la sicurezza di Apache2 in Ubuntu 16.04.

Tabella dei contenuti:

  • WWW Security Assistant Script (WSAS) ► Iptables
  • Iptables - Configurazione di base - Salva e ripristina
  • ModEvasive per Apache2
  • ModEvasive ► WSAS ► Iptables
  • ModSecurity 2.9 per Apache2
  • ModSecurity OWASP Set di regole di base 3.x
  • Whitelisting delle regole ModSecurity
  • ModSecurity Rules ► WSAS ► Iptables
  • File di registro ModSecurity e Apache
  • File di registro ModSecurity ► Fail2Ban ► Iptables
  • ModSecurity GuardianLog ► Guardian HTTPD ► WSAS ► Iptables
  • ModSecurity GuardianLog ► Analizza HTTPD personalizzato ► WSAS ► Iptables

Inoltre diciamo che è sempre bene usare HTTPS:


WWW Security Assistant Script ► Iptables

Qui è presentato il copione www-security-assistant.bash. Potrebbe aiutarti a gestire gli indirizzi IP dannosi. Lo script ha due modalità.

Modalità automatica

Quando un programma esterno, come quello di Apache mod_security, fornisce un $IPindirizzo dannoso . In questo caso, la sintassi che richiama lo script, dovrebbe essere:

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

In questa modalità lo script fornisce due fasi di azione e per ogni azione invierà un'e - mail all'amministratore (i).

  • Primo stadio: per le prime "trasgressioni" la fonte $IPsarà bandita per un periodo di tempo pari al valore di $BAN_TIME. Questa modalità utilizza il comando at.

  • Secondo stadio: quando il numero delle trasgressioni da un certo $IPdiventa uguale al valore di $LIMIT, questo $IPindirizzo sarà bandito in modo permanente attraverso Iptables e verrà aggiunto al $BAN_LIST.

Modalità manuale

Questa modalità accetta le seguenti opzioni:

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

    Crea una voce nel file /var/www-security-assistant/iptables-DROP.liste genera una regola come:

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

    Crea una voce nel file /var/www-security-assistant/iptables-DROP-CLEAR.list, rimuove la certa regola Iptables, rimuove $IPla cronologia e la $BAN_LIST:

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

    Crea solo una voce nel file /var/www-security-assistant/iptables-ACCEPT.list.

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

    Crea una voce nel file /var/www-security-assistant/iptables-ACCEPT.liste genera una regola come:

    iptables -A GUARDIAN -s $IP -j ACCEPT
    

dipendenze

Lo script utilizza iptables-save.she la iptablescatena GUARDIAN, spiegati nella sezione successiva. Creerà e manterrà pochi file all'interno di $WORK_DIR:

  • www-security-assistant.history - contiene i dati per le trasgressioni dell'IP precedente.
  • www-security-assistant.mail - il contenuto dell'ultima e-mail inviata dallo script.
  • iptables-ACCEPT.list; iptables-DROP.liste iptables-DROP-CLEAR.list.

Lo script richiede una configurazione minima per inviare e-mail:

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

Se esiste un servizio HTTPS configurato, è possibile utilizzare il relativo certificato TLS nel servizio Postfix.

Inoltre lo script utilizza at: sudo apt install at.

Installazione

  • Crea directory di lavoro, chiamiamola /var/www-security-assistant. Scarica www-security-assistant.bashe rendilo eseguibile:

    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
  • Rendi www-security-assistant.bashdisponibile come comando personalizzato:

    sudo ln -s /var/www-security-assistant/www-security-assistant.bash /usr/local/bin/
  • Concedere l'autorizzazione per www-datal'esecuzione www-security-assistant.bashsenza password tramite sudo. Utilizzare il comando seguente per creare e modificare in sicurezza un nuovo file con un'ulteriore sudoersregola " ":

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

    Aggiungi la seguente riga all'interno del file: salva il file ed esci:

    www-data ALL=(ALL) NOPASSWD: /var/www-security-assistant/www-security-assistant.bash
  • Tweak www-security-assistant.bash. Cambia almeno il valore della variabile $EMAIL_TO.

Verifica

  • Rappresentati come $AGENTe controlla se la MODALITÀ automatica funziona correttamente:

    www-security-assistant.bash 192.168.1.177 Guardian

    Quindi controlla la tua e-mail, digita iptables -L GUARDIAN -n, rivedi i file www-security-assistant.historye www-security-assistant.mail. Eseguire il comando sopra 5 volte e rivedere i file iptables-DROP.liste iptables-CURRENT.conf.

  • Controlla se la MODALITÀ manuale funziona correttamente - aggiungi il tuo host locale alla White List:

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

    Quindi controlla il file iptables-ACCEPT.list.


La parte restante di questo tutorial è come integrarsi www-security-assistantcon il tuo sistema.


Iptables - Configurazione di base - Salva e ripristina

Configurazione di base

Leggere questo manuale prima di aggiungere le seguenti regole.

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

Prima di eseguire le azioni successive, apri una nuova connessione SSH e prova ad accedere al tuo sistema per verificare se tutto funziona correttamente!

Salva e ripristina

Ciò potrebbe essere ottenuto tramite script personalizzati, che salveranno e ripristineranno il iptablesconing durante il processo di stop-start (o riavvio) del sistema. (Se utilizziamo UFW per impostare le regole di Iptables questo passaggio non è necessario.)

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

Crea una nuova catena

Crea una nuova catena, chiamata GUARDIANe inseriscila come numero 3 nella INPUTcatena:

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

Verifica

Riavvia il sistema e controlla la configurazione. Si prega di utilizzare sudo systemctl reboot(non utilizzare l'opzione force reboot -f). Quando il sistema è di nuovo online, possiamo verificare se la catena appena creata esiste:

sudo iptables -L GUARDIAN -n


ModEvasive per Apache2

ModEvasive è un modulo di manovre evasive per Apache per fornire azioni evasive in caso di attacco DoS o DDoS HTTP o attacco di forza bruta. Leggi di più...

Installazione

  • Installa e abilita il modulo:

    sudo apt install libapache2-mod-evasive
    sudo a2enmod evasive
  • Crea directory di registro e rendila accessibile per www-data:

    sudo mkdir -p /var/log/apache2_mod_evasive
    sudo chown www-data /var/log/apache2_mod_evasive
  • Regola la configurazione di base: decommenta e modifica alcune direttive nel file di configurazione:

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

Verifica

  • Apri una pagina web dal tuo server e aggiorna la finestra del browser alcune volte in modo intensivo (premi F5): devi visualizzare il messaggio di errore 403 proibito . Nella directory del registro, verrà generato un nuovo file di blocco. Questo file deve essere eliminato per il rilevamento di ulteriori trasgressioni da questo indirizzo IP.


ModEvasive ► WSAS ► Iptables

Qui ci configureremo mod_evasiveper parlare iptablesattraverso www-security-assistant.bash, creato nella sezione precedente.

  • Modifica /etc/apache2/mods-available/evasive.confin questo modo:

    <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>
  • Crea file di registro e riavvia Apache:

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

Per verificare questa configurazione possiamo simulare attacco DDOS tramite il F5metodo menzionato sopra, oppure possiamo utilizzare un comandi come ab, hping3ecc

Attenzione: fare attenzione perché la iptablesregola, utilizzata in WSAS, farà cadere tutte le nuove connessioni dall'origine $IP, comprese le connessioni SSH. È utile disporre di un modo di backup per connettersi al server durante i test. È possibile modificare questa regola in modo che funzioni solo con le porte HTTP / HTTPS.


ModSecurity 2.9 per Apache2

ModSecurity è un motore firewall per applicazioni Web che offre una protezione molto ridotta da solo. Per diventare utile, ModSecurity deve essere configurato con regole. Al fine di consentire agli utenti di sfruttare appieno ModSecurity, Trust Labs Spider Labs fornisce un set di regole certificato gratuito ... Leggi di più ...

Installazione

  • Installa e abilita il modulo:

    sudo apt install libapache2-mod-security2
    sudo a2enmod security2
  • Crea file di configurazione:

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

    Leggere e modificare /etc/modsecurity/modsecurity.confcon attenzione! Aggiungi o modifica almeno le seguenti direttive:

    # -- 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
  • Il file /etc/apache2/mods-enabled/security2.confriguarda /etc/modsecurity/modsecurity.confla configurazione di Apache. In questa fase security2.confdeve apparire come questo:

    <IfModule security2_module>
        SecDataDir /var/cache/modsecurity
        IncludeOptional /etc/modsecurity/*.conf
    </IfModule>
  • Crea directory registro:

    sudo mkdir -p /var/log/apache2_mod_security
  • Rotazione del registro di installazione. Innanzitutto creare il file di configurazione:

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

    Quindi modifica il nuovo file in questo modo:

    /var/log/apache2_mod_security/*.log {  }
  • Riavvia Apache.

Verifica

  • Crea un file di configurazione aggiuntivo /etc/modsecurity, chiamalo ad esempio z-customrules.confe aggiungi la seguente regola come contenuto:

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

    Riavviare il server: sudo systemctl restart apache2.service. Apri il browser e digita https://example.com/?abc=../. Il risultato sarà: 403 Proibito . Controllare i file di registro /var/log/apache2_mod_securityper ulteriori dettagli.

  • Per rendere le cose più divertenti, posiziona lo script issues.phpin una posizione appropriata all'interno del tuo DocumentRoot(qui suppongo che questo posto sia /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

    Quindi modificare la regola sopra nel modo seguente:

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

    Riavvia Apache, quindi apri il browser e digita https://example.com/?abc=../;-) L'idea è presa in prestito dallo script di SE BotLovin.cs.

  • Modifica /etc/modsecurity/z-customrules.confancora una volta e commenta (disabilita) la regola: questo era solo un esempio di prova ed è coperto da OWASP CRS, descritto nella sezione successiva.

  • Ecco un altro esempio in cui reindirizzeremo tutte le wp-adminrichieste di pagina, ma eccetto queste da determinati indirizzi IP (nota il 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"

    Qui abbiamo due azioni dirompenti: (1) deny, status:403e (2) redirect:'/issues.php'. In realtà non abbiamo bisogno denydell'azione perché sarà annullata redirectdall'azione.


ModSecurity OWASP Set di regole di base 3.x

In Ubuntu 16.04 è possibile installare 2.x CSR: apt install modsecurity-crs. Qui installeremo CSR 3.x , le istruzioni dettagliate sono fornite nel manuale di installazione ( gitè obbligatorio).

Installazione

  • Clona CSR nella cartella /usr/share/modsecurity-crs.3:

    sudo git clone https://github.com/SpiderLabs/owasp-modsecurity-crs /usr/share/modsecurity-crs.3
  • Aggiorna e rinnova automaticamente il database GeoIP. (Il DB GeoIP non è più incluso nel CRS. Invece si consiglia di scaricarlo regolarmente.) Lo script util/upgrade.pyporta questa funzionalità. Puoi usarlo come segue in 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
  • Crea file di configurazione:

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

    Leggi e modifica questi file con attenzione! Uncomment almeno SecGeoLookupDBdirettiva:

    SecGeoLookupDB util/geo-location/GeoIP.dat
  • Applica la configurazione di Apache. Modifica /etc/apache2/mods-available/security2.confin questo modo:

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

    Salvare il file e quindi riavviare Apache.


Whitelisting delle regole ModSecurity

La whitelist delle regole ModSecurity potrebbe essere effettuata tramite le seguenti direttive ModSec, che possono essere utilizzate a livello di sistema o nella configurazione dell'host virtuale, anche a livello globale, per directory specifiche o corrispondenze di località:

SecRuleRemoveById
SecRuleRemoveByMsg
SecRuleRemoveByTag
SecRuleUpdateTargetById
SecRuleUpdateTargetByMsg
SecRuleUpdateTargetByTag
SecRuleUpdateActionById

Disabilita mod_security2per PhpMyAdmin. Cambia /etc/phpmyadmin/apache.confin questo modo:

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

Disabilita regole specifiche per determinate directory:

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

Disabilita le regole a livello globale. A questo scopo dobbiamo aggiungere le nostre direttive da qualche parte nei file di configurazione di Apache: /etc/modsecurity/z-customrules.confè un buon posto.

  • Disabilita le regole all'interno dell'intera configurazione di Apache:

    SecRuleRemoveById 973301 950907
  • Autorizza un indirizzo IP in modo che possa passare attraverso ModSecurity:

    SecRule REMOTE_ADDR "@ipMatch 192.168.110.1" "phase:1,nolog,allow,ctl:ruleEngine=Off,ctl:auditEngine=Off"
  • Disabilita le regole in Directory match:

    <Directory /var/www/mediawiki/core>
        SecRuleRemoveById 973301 950907
    </Directory>
  • Aggiorna l'azione della regola con il suo ID all'interno della corrispondenza Posizione:

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

Negli esempi sopra riportati si assume che 973301e 950907sono gli ID di regole che ostacolano il normale lavoro delle nostre applicazioni web. Possiamo trovare regole come queste da un'analisi di modsec_audit.log.


ModSecurity Rules ► WSAS ► Iptables

Qui sono riportati alcuni altri esempi su come creare SecRule personalizzati, e anche come possiamo chiamare WWW Security Assistant Script (WSAS) attraverso di essi.

Configurazione iniziale

Abbiamo bisogno di uno script di avvio aggiuntivo - modsecurity-assistant.sh. Il motivo è che l' execazione di ModSecurity ha una sintassi troppo semplice e limitata.

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

Se guardi all'interno dello script vedrai alcune variabili esportate da ModSecurity. Questi sono: $REQUEST_URI, $ARGS, $SERVER_NAME, $REMOTE_ADDR, $REMOTE_HOSTe $UNIQUE_ID. Le altre variabili sono spiegate all'interno dello script.

Crea una regola personalizzata e chiama i nostri script attraverso di essa

Per prima cosa creiamo una regola che verrà eseguita modsecurity-assistant.sh(e chiamata www-security-assistant.bash) quando l'URI della richiesta contiene una parola inclusa nella nostra lista nera. Apri /etc/modsecurity/z-customrules.confe aggiungi le seguenti righe in fondo:

# 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- questa variabile contiene l'URI completo della richiesta corrente. La regola potrebbe essere più ampia:SecRule REQUEST_URI|ARGS|REQUEST_BODY ...

  • @pmFromFileleggerà il file modsecurity-uri-black.listche contiene un elenco di frasi, in cui ogni frase o parola specifica viene inserita in una nuova riga. È possibile raccogliere parole e frasi interessanti dai file di registro. Se esiste una corrispondenza particolare tra REQUEST_URIe il nostro elenco di modelli, verrà applicata la regola. Il file potrebbe essere vuoto, ma è necessario crearlo ( touch).

  • L' logazione creerà voci di registro nei file di registro per questa regola con id:150.

  • drop, deny(con status) e le redirectazioni appartengono al gruppo dirompente di azioni, devono essere all'inizio della regola chain(se esiste una catena). La seconda azione sovrascriverà la prima e la terza sovrascriverà la seconda, quindi è necessario scegliere quale si desidera eseguire e cancellare le altre.

  • chainl'azione chiamerà la prossima regola della catena, nota che la seconda regola, non ha id.

  • REMOTE_ADDR contiene l'indirizzo IP della richiesta.

  • @ipMatchFromFilesarà il file modsecurity-ip-white.listche contiene una lista bianca di indirizzi IP, separati su nuove righe. Sono accettabili anche le voci CIDR. Poiché l' azione dirompente si trova sempre nella regola principale della catena, verrà applicata, ma quando un determinato IP si trova in questa lista bianca, l' execazione non verrà applicata. Il file potrebbe essere vuoto, ma è necessario crearlo ( touch).

  • execaction chiamerà il nostro script esterno. Questa azione non è dirompente e verrà eseguita quando la regola corrente tornerà vera. Quando viene applicata questa azione, l'IP remoto verrà elaborato tramite i nostri script.

  • setenvquesta azione esporterà alcune variabili interne =%{...} come envvars, i nomi esportati possono essere diversi dagli interni. Alcune variabili devono essere esportate manualmente, altre vengono esportate automaticamente - probabilmente si tratta di un piccolo bug (in alcuni casi l'esportazione manuale con gli stessi nomi, ad esempio setenv:REQUEST_URI=%{REQUEST_URI}, causerà un valore vuoto della variabile esportata).

Verifica

Supponiamo che non hai Joomla sul tuo server, modifica il file modsecurity-uri-black.liste aggiungi una riga con il contenuto /joomla. Quindi digitare il browser https://exemple.com/joomla. Dovresti essere reindirizzato e bloccato tramite Iptables. Cancella i record sudo www-security-assistant.bash <your-ip> --DROP-CLEAR 'some note', aggiungi il tuo IP modsecurity-ip-white.liste ripeti l'esercizio. Ora dovresti essere reindirizzato, ma non bloccato.

Collega i nostri script con OWASP Core Rule Set 3.x

Per fare ciò aggiorneremo l'azione predefinita delle Regole della modalità Anomalia (949110 e 959100). A tal fine, modifica il file /usr/share/modsecurity-crs.3/rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.confe aggiungi le righe successive in fondo:

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

Verifica

Non dimenticare di riavviare (o ricaricare) Apache per applicare le modifiche alla configurazione. Non dimenticare di cancellare periodicamente i record durante i test, altrimenti puoi essere bloccato in modo permanente :-)

Simula l'attacco trasversale alla directory:

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

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


File di registro ModSecurity e Apache

Il web server Apache può essere configurato per fornire all'amministratore del server importanti informazioni sul suo funzionamento ... La strada principale per fornire feedback all'amministratore è attraverso l'uso dei file di registro. Leggi di più...

ModSecurity ha un potente meccanismo di registrazione. Dalla direttiva SecGuardianLogfornisce un feed di log appositamente progettato per funzionare con script esterni.

Attualmente l'unico strumento noto per funzionare con il registro dei guardiani è httpd-guardian, che fa parte del progetto Apache httpd tools . Lo httpd-guardianstrumento è progettato per difendersi dagli attacchi denial of service. Usa il blacklist toolper interagire con un firewall basato su iptables, inserendo dinamicamente nella blacklist gli indirizzi IP offensivi. Leggi di più...


File di registro ModSecurity ► Fail2Ban ► Iptables

È possibile configurare Fail2Ban per l'analisi dei dati dei file di registro di Apache. modsec_audit.logè probabilmente la scelta migliore, ma vedi anche le sezioni di cui parliamo SecGuardianLog.

Fai attenzione che SecAuditLogRelevantStatusin /etc/modsecurity/modsecurity.confsia commentato. Altrimenti tutti coloro che ricevono una pagina di errore 404 verrebbero bloccati da fail2ban.

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

Attualmente Fail2Ban non è implementato in alcun modo in questo progetto.


ModSecGuardianLog ► HTTPD-Guardian ► WSAS ► Iptables

httpd-guardian- Rileva gli attacchi DoS monitorando le richieste Apache Security, Copyright (C) 2005 Ivan Ristic - è progettato per monitorare tutte le richieste del server Web attraverso il meccanismo di registrazione in pipe. Tiene traccia del numero di richieste inviate da ciascun indirizzo IP ... httpd-guardian può emettere un avviso o eseguire uno script per bloccare l'indirizzo IP ...

Questo script può essere utilizzato con il meccanismo di registrazione di Apache2 o con ModSecurity (meglio).

Installazione e configurazione nelle circostanze attuali

Scarica httpd-guardiane rendilo eseguibile:

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

Leggi le righe 98-119per vedere come lo script è collegato al nostro script WSAS.

Applicare la seguente modifica nella configurazione di Apache ( /etc/modsecurity/modsecurity.conf), quindi riavviarla:

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

Verifica

Per testare lo script disabilita ModEvasive ( sudo a2dismod evasivenon dimenticare di abilitarlo in seguito) e riavvia Apache. Quindi tailil registro exec:

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

E da un'altra istanza esegui un attacco DoS, ad esempio utilizzalo abin questo modo:

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


ModSecGuardianLog ► Analizza personalizzato ► WSAS ► Iptables

Qui viene presentato un semplice script, chiamato httpd-custom-analyze.bash, che non è qualcosa di speciale ma potrebbe essere un buon esempio. Le sue caratteristiche sono descritte nel corpo della sceneggiatura.

Installazione e configurazione

Scarica httpd-custom-analyze.bashe rendilo eseguibile:

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

Applica la seguente modifica nella configurazione di Apache ( /etc/modsecurity/modsecurity.conf) e riavviala:

#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"
  • Lo script chiamerà WSAS quando viene raggiunta la soglia: leggi la riga 86e 35.

  • Per far httpd-funzionare contemporaneamente entrambi gli script, modifica modsecurity.confe reindirizza SecGuardianLoga entrambi.

  • Per eseguire un test, seguire i suggerimenti della sezione precedente.


Ti preghiamo di non modificare frequentemente il tuo post. La modifica costante del tuo post molte volte in un giorno continua a riportarla sulla prima pagina e genera anche rumore per noi moderatori. Invece, considera la possibilità di redigere i tuoi contenuti in un'altra pagina o in un editor di testo , quindi modificarli in massa, piuttosto che modificarli individualmente. (Questo post è bloccato per un'ora per limitare temporaneamente la modifica effettuata qui)
Thomas Ward

1
Grazie per l'osservazione, @ThomasWard. Lo terrò a mente! Non è una buona idea avere qualcosa come sandbox nella pagina Utenti, accanto a Modifica profilo e impostazioni ?
pa4080,

1
È stato proposto e credo sia stato respinto. Quello che suggerirei è di apportare modifiche senza salvare e archiviare una copia della domanda così com'è in un file di testo sul sistema, quindi è possibile modificarlo, copiarlo nuovamente quando si desidera modificare il post, quindi correzione per markdown e simili. Inoltre, tutti i barrati stanno ... rendendo le cose difficili da leggere. Valuta invece di rimuovere quelle sezioni. (La cronologia delle revisioni conserverà i dati)
Thomas Ward

È ridicolo che Stack Exchange non consenta di non apportare modifiche alla prima pagina
Franck Dernoncourt,

1

Mi rendo conto che pa4080 ha dato una risposta dettagliata e probabilmente molto utile per occuparsene da soli. Anche se prendersi cura dei problemi da soli può sentirsi bene, questo può richiedere anche molto tempo .

  1. Acquisisci familiarità con Cloudflare in quanto forniscono protezione DDoS gratuita.
  2. Se al momento usi solo Apache, considera di capire come funziona NGINX per bilanciare il tuo carico. NGINX è ottimo per il bilanciamento del carico di Apache, come mostrato qui e qui .
  3. Recensione suggerimenti di Apache per la sicurezza sui loro documenti .
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.