11/04/2018, 16:25
(Questo messaggio è stato modificato l'ultima volta il: 15/12/2023, 17:25 da Tiger.)
Il server web Apache è il server web più utilizzato in tutto il mondo.
Esistono molti strumenti e tecniche per proteggere il server Web Apache.
Fra questo abbiamo a disposizione "ModSecurity"
esso è uno dei moduli Apache utile a proteggere il server Web da vari tipi di attacchi
come XSS, bot, SQL-injection, sessione di acquisizione, trojan,
dirottamento di sessione e molto altro.
Esistono molti strumenti e tecniche per proteggere il server Web Apache.
Fra questo abbiamo a disposizione "ModSecurity"
esso è uno dei moduli Apache utile a proteggere il server Web da vari tipi di attacchi
come XSS, bot, SQL-injection, sessione di acquisizione, trojan,
dirottamento di sessione e molto altro.
----------------------------------------------------------
Citazione:Essa può tranquillamente convivere con la guida fatta da me sull'installazione
apache2+mysql+phpmyadmin+Nextcloud
Essendo ModSecurity solo un modulo aggiuntivo importante,
che non fa altro che rafforzare la protezione del nostro server web
Â
Installazione ModSecurity su Raspbian
Primo Step accertiamoci che il nostro sistema operativo sia aggiornato
e abbia ultimo kernel per fare ciò apriamo il terminale e digitiamo
a)
Codice:
sudo apt update && sudo apt dist-upgrade
diamo la nostra password utente
b)
Codice:
sudo rpi-update
c) diamo comando
Codice:
sudo reboot
finito possiamo procedere all'installazione del nostro modulo ModSecurity:
Codice:
1) sudo apt-get install libapache2-mod-security2
Una volta completata l'installazione, mettiamo in apache.conf la direttiva:
Citazione:ServerName localhost
Codice:
sudo nano /etc/apache2/apache2.conf
testiamo modsecurity se attivo con il comando:
Codice:
2) sudo apachectl -M | grep security
Se tutto è andato bene, dovremmo avere il seguente risultato:
Citazione:[security2_module (shared)]
Ora per impostazione predefinita, mod_security non funziona
perché ha bisogno di regole per funzionare.Â
Innanzitutto, è necessario rinominare il file di esempio: modsecurity.conf-recommended
 che si trova nella cartella "/etc/modsecurity"
Per farlo diamo il seguente comando:
Codice:
3) sudo mv /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
Successivamente, dovremo abilitare il motore di regole mod_security con il comando:
Codice:
4) sudo nano /etc/modsecurity/modsecurity.conf
Cambiamo la seguenti righe internamente:
Citazione:5)
Cambiare:Â
SecRuleEngine DetectionOnly INÂ SecRuleEngine onÂ
SecRequestBodyAccess On   IN SecRequestBodyAccess OffÂ
SecRequestBodyInMemoryLimit 131072 IN SecRequestBodyInMemoryLimit 531072
SecRequestBodyLimit 13107200 IN SecRequestBodyLimit 858993459Â
SecRequestBodyNoFilesLimit 131072 INÂ SecRequestBodyNoFilesLimit 5242880
POI per evitare errore 413 file troopo grande in nextcloud modifichiamo anche le voci
SecResponseBodyLimit 524288 INÂ SecResponseBodyLimit 5242880
ed
SecResponseBodyLimitAction Reject INÂ SecResponseBodyLimitAction ProcessPartial
(SecRequestBodyAccess Off serve a non far diventare molto grande il file di log situato in:
/var/log/apache2/modsec_audit.log
se messo su ON "SecRequestBodyAccess" esso trascrive nel file ogni singola voce analizzata)
"Nascondere Firma Server in Pagine 403 Accesso Negato"
Questo non è strettamente necessario per (NextCloud e Modsecurity),
ma è bello nascondere la versione del server e il sistema operativo a potenziali aggressori
Per fare ciò modifichiamo il file apache.conf
Codice:
sudo nano /etc/apache2/apache2.conf
Codice:
ServerSignature Off
ServerTokens Prod
Facciamo quindi riavviare Apache affinché le modifiche abbiano effetto con:
Codice:
6) sudo systemctl restart apache2
Per impostazione predefinita, mod_security viene fornito con il set di regole di base (regole di sicurezza)Â
che si trova nella cartella
Citazione:"/usr/share/modsecurity-crs"
Ma si raccomanda di scaricare il CRS mod_security dal repository GitHub. (facoltativo ma importante)
Rimuoviamo il CRS predefinito con il seguente comando:
Codice:
7) sudo rm -rf /usr/share/modsecurity-crs
Scarichiamo l'ultima versione di mod_security CRS con il seguente comando:
Codice:
8) sudo git clone https://github.com/coreruleset/coreruleset.git /usr/share/modsecurity-crs
Quindi, rinominare il file di installazione di esempio con il seguente comando:
Codice:
9) cd /usr/share/modsecurity-crsÂ
9.1) sudo mv crs-setup.conf.example crs-setup.conf
Sarà necessario abilitare queste regole per farlo funzionare con Apache.
Puoi farlo configurando il file:Â
Citazione:"/etc/apache2/mods-enabled/security2.conf"
con il comando
Codice:
10) sudo nano /etc/apache2/mods-enabled/security2.conf
Cambiamo tutte le voci del  file
con la scritta qui sotto:
Â
Codice:
<IfModule security2_module>Â
   SecDataDir /var/cache/modsecurityÂ
   IncludeOptional /etc/modsecurity/*.confÂ
   IncludeOptional "/usr/share/modsecurity-crs/*.conf"Â
   IncludeOptional "/usr/share/modsecurity-crs/rules/*.confÂ
 </IfModule>
Salviamo e chiudiamo il file, (ctrl+o, ctrl+x)
quindi riavviamo il servizio Apache.
Codice:
11) sudo systemctl restart apache2
Per testare se la mod_security funziona
invieremo alcune richieste dannose al server web Apache
e verificheremo se le richieste vengono bloccate o meno.
Innanzitutto, testeremo come mod_security protegge il server Web Apache dall'attacco XSS.
Sul computer remoto,
da Terminale andiamo a eseguire il seguente comando per testare l'attacco XSS:
Codice:
12) curl 'http://localhost/?q="><script>alert(1)</script>'
dove per localhost possiamo anche mettere url effettivo se vogliamo, o lasciarlo cosi
Dovresti vedere una risposta  403 Forbidden nel seguente output.
Codice:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /
on this server.<br />
</p>
<hr>
<address>Apache/2.4.25 (Ubuntu) Server at localhost Port 80</address>
</body></html>
Successivamente, testeremo mod_security contro l'attacco SQL Injection con il seguente comando:
Codice:
13) curl "http://localhost/?q='1 OR 1=1"
Dovresti ottenere la risposta  400 Forbidden  mostrata nel seguente output:
Codice:
 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
<hr>
<address>Apache/2.4.25 (Raspbian) Server at tigernero.no-ip.org Port 80</address>
</body></html>
Â
ATTENZIONE: dopo attivazione del modsecurity dobbiamo modificare alcune regole perchè non interferiscano con il funzionamento del nostro NEXCLOUD.
14) Creiamo un file di regole per nextcloud in /etc/modsecurity/
il file lo chiameremo nextcloud.conf
tramite questo comando:
Codice:
sudo nano /etc/modsecurity/nextcloud.conf
al suo interno copieremo integralmente tutte queste regole:
Codice:
<Directory /var/www/nextcloud/>
# VIDEOS
 SecRuleRemoveById 958291       # Range Header Checks
 SecRuleRemoveById 981203       # Correlated Attack Attempt
Â
 # PDF
 SecRuleRemoveById 950109       # Check URL encodings
Â
 # ADMIN (webdav)
 SecRuleRemoveById 960024       # Repeatative Non-Word Chars (heuristic)
 SecRuleRemoveById 981173       # SQL Injection Character Anomaly Usage
 SecRuleRemoveById 981204       # Correlated Attack Attempt
 SecRuleRemoveById 981243       # PHPIDS - Converted SQLI Filters
 SecRuleRemoveById 981245       # PHPIDS - Converted SQLI Filters
 SecRuleRemoveById 981246       # PHPIDS - Converted SQLI Filters
 SecRuleRemoveById 981318       # String Termination/Statement Ending Injection Testing
 SecRuleRemoveById 973332       # XSS Filters from IE
 SecRuleRemoveById 973338       # XSS Filters - Category 3
 SecRuleRemoveById 981143       # CSRF Protections ( TODO edit LocationMatch filter )
Â
 # COMING BACK FROM OLD SESSION
 SecRuleRemoveById 970903       # Microsoft Office document properties leakage
Â
 # NOTES APP
 SecRuleRemoveById 981401       # Content-Type Response Header is Missing and X-Content-Type-Options is either missing or not set to 'nosniff'
 SecRuleRemoveById 200002       # Failed to parse request body
Â
 # UPLOADS ( 5 MB max excluding file size )
 SecRequestBodyNoFilesLimit 5242880
Â
 # GENERAL
 SecRuleRemoveById 960017       # Host header is a numeric IP address
Â
 # REGISTERED WARNINGS, BUT DID NOT HAVE TO DISABLE THEM
 #SecRuleRemoveById 981220 900046 981407
 #SecRuleRemoveById 981222 981405 981185 981184
</Directory>
ovviamente la prima riga dei comandi deve puntare alla cartella del nostro nextcloud /var/www/nextcloud
fatto ciò riavviamo apache con:
15)Â
Codice:
sudo systemctl restart apache2
Se Tutto è andato a dovere avremmo aggiunto un ulteriore protezione da attacchi come XSS,Â
bot, SQL-injection, sessione di acquisizione, trojan, dirottamento di sessione e molti altro.
e non aver nessun blocco sull'uso di nextcloud
--------------------
Se avete errore nell'instaurare collegamento webdav usate questa procedura:
Bisogna aggiungere la seguente voce alla fine del file :
Codice:
sudo nano /usr/share/modsecurity-crs/crs-setup.conf
Codice:
SecRule REQUEST_URI "@beginsWith /nextcloud/remote.php" \
 "id:'000002', \
 phase:1, \
 t:none, \
 setvar:'tx.allowed_methods=GET HEAD POST OPTIONS PROPFIND REPORT PUT MKCOL', \
 setvar:'tx.allowed_request_content_type=application/x-www-form-urlencoded|multipart/form-data|text/xml|application/xml|application/x-amf|application/json|application/octet-stream|text/calendar', \
 nolog, \
 pass"
fatto cio riavviamo apache con:
Codice:
sudo systemctl restart apache2
-------------------------------------------
dove nextcloud deve essere sostituito con cartella vostra dove situato nextcloud
See You Tiger