Guida alla protezione e alla protezione del server Web Apache
Pubblicato: 2015-02-14Una guida pratica per proteggere e rafforzare Apache HTTP Server.
Il Web Server è una parte cruciale delle applicazioni web-based. Apache Web Server è spesso posizionato ai margini della rete, quindi diventa uno dei servizi più vulnerabili agli attacchi.
Avere una configurazione predefinita fornisce molte informazioni sensibili che possono aiutare gli hacker a prepararsi per un attacco alle applicazioni. La maggior parte degli attacchi alle applicazioni Web avviene tramite attacchi XSS, Info Leakage, Session Management e SQL Injection, dovuti a un codice di programmazione debole e alla mancata sanificazione dell'infrastruttura delle applicazioni Web.
Un'interessante ricerca di Positive Technologies rivela che il 52% dell'applicazione scansionata presentava vulnerabilità elevate.
In questo articolo parlerò di alcune delle migliori pratiche per proteggere il server HTTP Apache su piattaforma Linux.
Di seguito sono testati sulla versione Apache 2.4.x.
- Ciò presuppone che tu abbia installato Apache su piattaforma UNIX. In caso contrario, puoi consultare la Guida all'installazione.
- Chiamerò la directory di installazione di Apache /opt/apache come $Web_Server in questa guida.
- Si consiglia di eseguire un backup del file di configurazione esistente prima di qualsiasi modifica.
Pubblico
Questo è progettato per l'amministratore del middleware, il supporto delle applicazioni, l'analista di sistema o chiunque lavori o sia desideroso di apprendere le linee guida di protezione e sicurezza.
È obbligatoria una discreta conoscenza del server Web Apache e del comando UNIX.
Appunti
Hai bisogno di uno strumento per esaminare le intestazioni HTTP per alcune delle verifiche di implementazione. Ci sono due modi per farlo.
- Usa gli strumenti di sviluppo integrati nel browser per controllare le intestazioni HTTP. Di solito, è nella scheda Rete
- Utilizzare lo strumento di verifica dell'intestazione della risposta HTTP online
Rimuovere il banner della versione del server
Direi che questa è una delle prime cose da considerare, poiché non vuoi esporre quale versione del server web stai utilizzando. Esporre la versione significa che stai aiutando l'hacker a velocizzare il processo di ricognizione.
La configurazione predefinita esporrà la versione di Apache e il tipo di sistema operativo come mostrato di seguito.
- Vai alla cartella $Web_Server/conf
- Modifica httpd.conf usando l'editor vi
- Aggiungi la seguente direttiva e salva il file httpd.conf
ServerTokens Prod ServerSignature Off
- Riavvia apache
ServerSignature
rimuoverà le informazioni sulla versione dalla pagina generata da Apache.
ServerTokens
cambierà Header in solo produzione, cioè Apache
Come puoi vedere di seguito, le informazioni sulla versione e sul sistema operativo sono sparite.
Disabilita l'elenco del browser delle directory
Disabilita l'elenco delle directory in un browser, in modo che il visitatore non veda tutti i file e le cartelle che hai nella radice o nella sottodirectory.
Proviamo come appare nelle impostazioni predefinite.
- Vai alla directory $Web_Server/htdocs
- Crea una cartella e alcuni file al suo interno
# mkdir test # touch hi # touch hello
Ora, proviamo ad accedere ad Apache tramite http://localhost/test
Come puoi vedere, rivela quali file/cartelle hai e sono sicuro che non vuoi esporlo.
- Vai alla directory $Web_Server/conf
- Apri
httpd.conf
usando vi - Cerca Directory e modifica la direttiva Opzioni su Nessuno o -Indici
<Directory /opt/apache/htdocs> Options -Indexes </Directory>
(o)
<Directory /opt/apache/htdocs> Options None </Directory>
- Riavvia Apache
Nota : se nel tuo ambiente sono presenti più direttive Directory, dovresti considerare di fare lo stesso per tutti.
Ora, proviamo ad accedere ad Apache tramite http://localhost/test
Come puoi vedere, mostra un errore proibito invece di mostrare l'elenco delle cartelle di prova.
Etag
Consente agli aggressori remoti di ottenere informazioni sensibili come numero di inode, limite MIME multiparte e processo figlio tramite l'intestazione Etag.
Per prevenire questa vulnerabilità, implementiamola come di seguito. Questo è necessario per correggere la conformità PCI.
- Vai alla directory $Web_Server/conf
- Aggiungi la seguente direttiva e salva il file httpd.conf
FileETag None
- Riavvia apache
Esegui Apache da un account non privilegiato
Un'installazione predefinita viene eseguita come nessuno o daemon. L'utilizzo di un utente separato non privilegiato per Apache è positivo.
L'idea qui è di proteggere altri servizi in esecuzione in caso di qualsiasi falla nella sicurezza.
- Crea un utente e un gruppo chiamato apache
# groupadd apache # useradd –G apache apache
- Modifica la proprietà della directory di installazione di Apache in un utente non privilegiato appena creato
# chown –R apache:apache /opt/apache
- Vai a $Server_Web/conf
- Modifica httpd.conf usando vi
- Cerca la Direttiva per utenti e gruppi e cambia come apache dell'account non privilegiato
User apache Group apache
- Salva il file httpd.conf
- Riavvia Apache
grep per eseguire il processo http e assicurarsi che sia in esecuzione con l'utente apache
# ps –ef |grep http
Dovresti vedere un processo in esecuzione con root. Questo perché Apache è in ascolto sulla porta 80 e deve essere avviato con root.
Proteggi i permessi della directory binaria e di configurazione
Per impostazione predefinita, l'autorizzazione per il binario e la configurazione è 755, il che significa che qualsiasi utente su un server può visualizzare la configurazione. Puoi impedire a un altro utente di accedere alla cartella conf e bin.
- Vai alla directory $Web_Server
- Modifica l'autorizzazione della cartella bin e conf
# chmod –R 750 bin conf
Protezione delle impostazioni di sistema
In un'installazione predefinita, gli utenti possono sovrascrivere la configurazione di Apache utilizzando .htaccess. Se desideri impedire agli utenti di modificare le impostazioni del server Apache, puoi aggiungere AllowOverride
a None
come mostrato di seguito.
Questo deve essere fatto a livello di root.
- Vai alla directory $Web_Server/conf
- Apri httpd.conf usando vi
- Cerca Directory a livello di root
<Directory /> Options -Indexes AllowOverride None </Directory>
- Salva il file httpd.conf
- Riavvia Apache
Metodi di richiesta HTTP
Il protocollo HTTP 1.1 supporta molti metodi di richiesta che potrebbero non essere richiesti e alcuni di essi presentano potenziali rischi.
In genere potrebbero essere necessari metodi di richiesta GET, HEAD, POST in un'applicazione Web, che possono essere configurati nella rispettiva direttiva Directory.
Supporto di configurazione predefinito OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT metodo nel protocollo HTTP 1.1.
- Vai alla directory $Web_Server/conf
- Apri httpd.conf usando vi
- Cerca Directory e aggiungi quanto segue
<LimitExcept GET POST HEAD> deny from all </LimitExcept>
- Riavvia Apache
Disabilita la richiesta HTTP di traccia
Per impostazione predefinita, il metodo Trace è abilitato nel server Web Apache.
Avere questo abilitato può consentire l'attacco Cross Site Tracing e potenzialmente dare un'opzione a un hacker per rubare le informazioni sui cookie. Vediamo come appare nella configurazione predefinita.
- Fare un IP del server web telnet con porta di ascolto
- Fai una richiesta TRACE come mostrato di seguito
#telnet localhost 80 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. TRACE / HTTP/1.1 Host: test HTTP/1.1 200 OK Date: Sat, 31 Aug 2013 02:13:24 GMT Server: Apache Transfer-Encoding: chunked Content-Type: message/http 20 TRACE / HTTP/1.1 Host: test 0 Connection closed by foreign host. #
Come puoi vedere nella richiesta TRACE sopra, ha risposto alla mia domanda. Disabilitiamolo e testiamolo.
- Vai alla directory $Web_Server/conf
- Aggiungi la seguente direttiva e salva il file httpd.conf
TraceEnable off
- Riavvia apache
Eseguire un IP del server Web telnet con porta di ascolto ed effettuare una richiesta TRACE
come mostrato di seguito
#telnet localhost 80 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. TRACE / HTTP/1.1 Host: test HTTP/1.1 405 Method Not Allowed Date: Sat, 31 Aug 2013 02:18:27 GMT Server: Apache Allow:Content-Length: 223Content-Type: text/html; charset=iso-8859-1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>405 Method Not Allowed</title> </head><body> <h1>Method Not Allowed</h1> <p>The requested method TRACE is not allowed for the URL /.</p> </body></html> Connection closed by foreign host. #
Come puoi vedere nella richiesta TRACE sopra, ha bloccato la mia richiesta con il metodo HTTP 405 non consentito.
Ora, questo server Web non consente la richiesta TRACE e aiuta a bloccare l'attacco Cross Site Tracing.
Imposta cookie con HttpOnly e Secure flag
Puoi mitigare la maggior parte degli attacchi di Cross Site Scripting comuni utilizzando HttpOnly e Secure flag in un cookie. Senza HttpOnly e Secure, è possibile rubare o manipolare la sessione dell'applicazione Web e i cookie, ed è pericoloso.
- Assicurati che mod_headers.so sia abilitato nel tuo httpd.conf
- Vai alla directory $Web_Server/conf
- Aggiungi la seguente direttiva e salva il file httpd.conf
Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure
- Riavvia apache
Attacco clickjacking
Il clickjacking è una nota vulnerabilità delle applicazioni web.
- Assicurati che mod_headers.so sia abilitato nel tuo httpd.conf
- Vai alla directory $Web_Server/conf
- Aggiungi la seguente direttiva e salva il file httpd.conf
Header always append X-Frame-Options SAMEORIGIN
- Riavvia apache
X-Frame-Options supporta anche altre due opzioni che ho spiegato qui.
Includi lato server
Server Side Include (SSI) rischia di aumentare il carico sul server. Se hai condiviso l'ambiente e le applicazioni Web a traffico intenso, dovresti considerare di disabilitare SSI aggiungendo la direttiva Include in Options.
L'attacco SSI consente lo sfruttamento di un'applicazione web iniettando script in pagine HTML o eseguendo codici da remoto.
- Vai alla directory $Web_Server/conf
- Apri httpd.conf usando vi
- Cerca Directory e aggiungi Include nella direttiva Opzioni
<Directory /opt/apache/htdocs> Options –Indexes -Includes Order allow,denyAllow from all </Directory>
- Riavvia Apache
Nota: se nel tuo ambiente sono presenti più direttive Directory, dovresti considerare di fare lo stesso per tutti.
Protezione X-XSS
La protezione Cross Site Scripting (XSS) può essere aggirata in molti browser. È possibile applicare questa protezione per un'applicazione Web se è stata disabilitata dall'utente. Questo è utilizzato dalla maggior parte delle società web giganti come Facebook, Twitter, Google, ecc.
- Vai alla directory $Web_Server/conf
- Apri httpd.conf usando vi e aggiungi la seguente direttiva Header
Header set X-XSS-Protection "1; mode=block"
- Riavvia Apache
Come puoi vedere, XSS-Protection è iniettato nell'intestazione della risposta.
Disabilita il protocollo HTTP 1.0
Quando parliamo di sicurezza, dovremmo proteggere il più possibile. Allora perché utilizziamo una versione HTTP precedente del protocollo, disabilitiamo anche loro?
HTTP 1.0 presenta debolezze di sicurezza legate al dirottamento della sessione. Possiamo disabilitarlo usando il modulo mod_rewrite.
- Assicurati di caricare il modulo mod_rewrite nel file httpd.conf
- Abilita la direttiva RewriteEngine come segue e aggiungi la condizione di riscrittura per consentire solo HTTP 1.1
RewriteEngine On RewriteCond %{THE_REQUEST} !HTTP/1.1$ RewriteRule .* - [F]
Configurazione del valore di timeout
Per impostazione predefinita, il valore di timeout di Apache è di 300 secondi, che può essere vittima di un attacco Slow Loris e di DoS. Per mitigare ciò, puoi ridurre il valore di timeout a forse 60 secondi.
- Vai alla directory $Web_Server/conf
- Apri httpd.conf usando vi
- Aggiungi quanto segue in httpd.conf
Timeout 60
SSL
Avere SSL è un ulteriore livello di sicurezza che stai aggiungendo all'applicazione Web. Tuttavia, la configurazione SSL predefinita porta a determinate vulnerabilità e dovresti considerare di modificare tali configurazioni.
Chiave SSL
Violare la chiave SSL è difficile, ma non impossibile. È solo una questione di potenza di calcolo e di tempo.
Come forse saprai, utilizzando un PC dell'era 2009 incrinato per circa 73 giorni puoi decodificare una chiave a 512 bit.
Quindi maggiore è la lunghezza della chiave che hai, più complicato diventa rompere la chiave SSL. La maggior parte delle aziende Web giganti utilizza una chiave a 2048 bit, come di seguito, quindi perché no?
- Outlook.com
- Microsoft.com
- Live.com
- Skype.com
- Apple.com
- Yahoo.com
- Bing.com
- Hotmail.com
- Twitter.com
Puoi utilizzare OpenSSL per generare CSR con 2048 bit come di seguito.
openssl req -out geekflare.csr -newkey rsa:2048 -nodes -keyout geekflare.key
Genererà una CSR che dovrai inviare a un'autorità di certificazione per firmarla. Una volta ricevuto il file del certificato firmato, puoi aggiungerlo nel file httpd-ssl.conf
SSLCertificateFile #Certificate signed by authority SSLCertificateChainFile #Certificate signer given by authority SSLCertificateKeyFile #Key file which you generated above
- Riavvia il server web Apache e prova ad accedere all'URL con https
Cifra SSL
SSL Cipher è un algoritmo di crittografia utilizzato come chiave tra due computer su Internet. La crittografia dei dati è il processo di conversione del testo normale in codici cifrati segreti.
È basato sulla configurazione della crittografia SSL del tuo server web, la crittografia dei dati avverrà. Quindi è importante configurare SSL Cipher, che è più forte e non vulnerabile.
- Vai alla cartella $Web_Server/conf/extra
- Modifica la direttiva SSLCipherSuite in httpd-ssl.conf come di seguito per accettare solo algoritmi di crittografia più elevati
SSLCipherSuite HIGH:!MEDIUM:!aNULL:!MD5:!RC4
- Salva il file di configurazione e riavvia il server Apache
Nota: se hai molti codici deboli nel tuo rapporto di controllo SSL, puoi rifiutarli rapidamente aggiungendo ! all'inizio.
Disabilita SSL v2 e v3
SSL v2 e v3 presenta molti difetti di sicurezza e, se stai lavorando per il test di penetrazione o la conformità PCI, devi chiudere la ricerca di sicurezza per disabilitare SSL v2/v3.
Qualsiasi comunicazione SSL v2/v3 potrebbe essere vulnerabile a un attacco Man-in-The-Middle che potrebbe consentire la manomissione o la divulgazione dei dati.
Implementiamo il server Web Apache per accettare solo l'ultimo TLS e rifiutare la richiesta di connessione SSL v2/v3.
- Vai alla cartella $Web_Server/conf/extra
- Modifica la direttiva SSLProtocol in httpd-ssl.conf come di seguito per accettare solo TLS 1.2+
SSLProtocol –ALL +TLSv1.2
Una volta terminata la configurazione SSL, è una buona idea testare la tua applicazione web con lo strumento certificato SSL/TLS online per trovare eventuali errori di configurazione.
Mod Sicurezza
Mod Security è un Web Application Firewall open source, che puoi utilizzare con Apache.
Viene fornito come un modulo che devi compilare e installare. Se non puoi permetterti un firewall per applicazioni web commerciali, questa sarebbe una scelta eccellente per farlo.
Per fornire la protezione di applicazioni Web generiche, le regole di base utilizzano le seguenti tecniche:
- Protezione HTTP: rilevamento delle violazioni del protocollo HTTP e di una politica di utilizzo definita localmente
- Ricerche nella blacklist in tempo reale: utilizza la reputazione IP di terze parti
- Rilevamento malware basato sul Web: identifica i contenuti Web dannosi confrontandoli con l'API di Navigazione sicura di Google.
- Protezioni HTTP Denial of Service: difesa contro il flooding HTTP e gli attacchi DoS HTTP lenti.
- Protezione dagli attacchi Web comuni: rilevamento degli attacchi alla sicurezza delle applicazioni Web comuni
- Rilevamento dell'automazione: rilevamento di bot, crawler, scanner e altre attività di superficie dannose
- Integrazione con Scansione AV per caricamenti di file: identifica i file dannosi caricati tramite l'applicazione Web.
- Tracciamento dei dati sensibili: tiene traccia dell'utilizzo della carta di credito e blocca le perdite.
- Protezione da Trojan: rilevamento dell'accesso ai cavalli di Troia.
- Identificazione dei difetti dell'applicazione: avvisi su configurazioni errate dell'applicazione.
- Rilevamento e nascondimento degli errori: mascheramento dei messaggi di errore inviati dal server.
Download e installazione
I seguenti prerequisiti devono essere installati sul server in cui si desidera utilizzare Mod Security con Apache. Se uno di questi non esiste, la compilazione di Mod Security fallirà. Puoi usare yum install su Linux o Centos per installare questi pacchetti.
- apache 2.x o versioni successive
- pacchetto libpcre
- pacchetto libxml2
- pacchetto liblu
- pacchetto libcurl
- pacchetto libapr e libapr-util
- modulo mod_unique_id in bundle con il server web Apache
Ora scarichiamo l'ultima versione stabile di Mod Security 2.7.5 da qui
- Trasferisci il file scaricato in /opt/apache
- Estrai modsecurity-apache_2.7.5.tar.gz
# gunzip –c modsecurity-apache_2.7.5.tar.gz | tar xvf –
- Vai alla cartella estratta modsecurity-apache_2.7.5
# cd modsecurity-apache_2.7.5
- Esegui lo script di configurazione incluso il percorso apxs di Apache esistente
# ./configure –with-apxs=/opt/apache/bin/apxs
- Compila e installa con make script
# make # make install
- Una volta completata l'installazione, vedrai mod_security2.so nella cartella dei moduli in /opt/apache
Ora questo conclude, hai installato il modulo Mod Security nel server Web Apache esistente.
Configurazione
Per utilizzare la funzionalità di sicurezza Mod con Apache, dobbiamo caricare il modulo di sicurezza mod in httpd.conf. Il modulo mod_unique_id è un prerequisito per Mod Security.
Questo modulo fornisce una variabile di ambiente con un identificatore univoco per ogni richiesta, che viene tracciata e utilizzata da Mod Security.
- Aggiungi di seguito una riga per caricare il modulo per Mod Security in httpd.conf e salva il file di configurazione
LoadModule unique_id_module modules/mod_unique_id.so LoadModule security2_module modules/mod_security2.so
- Riavvia il server web di apache
Mod Security è ora installato!
La prossima cosa che devi fare è installare la regola principale Mod Security per sfruttare appieno le sue funzionalità.
L'ultima regola di base può essere scaricata seguendo un collegamento, che è gratuito. https://github.com/SpiderLabs/owasp-modsecurity-crs/zipball/master
- Copia lo zip della regola principale scaricata nella cartella /opt/apache/conf
- Decomprimi il file delle regole di base
- Potresti voler rinominare la cartella in qualcosa di breve e facile da ricordare. In questo esempio, rinominerò in crs.
- Vai alla cartella crs e rinomina modsecurity_crs10_setup.conf.example in modsecurity_crs10_setup.conf
Ora, abilitiamo queste regole per farlo funzionare con il server web Apache.
- Aggiungi quanto segue in httpd.conf
<IfModule security2_module> Include conf/crs/modsecurity_crs_10_setup.confInclude conf/crs/base_rules/*.conf </IfModule>
Nella configurazione precedente, stiamo caricando il file di configurazione principale di Mod Security modsecurity_crs_10_setup.conf e le regole di base base_rules/*.conf fornite da Mod Security Core Rules per proteggere le applicazioni web.
- Riavvia il server web di apache
Hai configurato correttamente Mod Security con Apache!
Ben fatto. Ora, il server Web Apache è protetto dal firewall dell'applicazione Web Mod Security.
Iniziare
Iniziamo con alcune delle configurazioni critiche in Mod Security per rafforzare e proteggere le applicazioni web.
In questa sezione, eseguiremo tutte le modifiche alla configurazione in /opt/apache/conf/crs/modsecurity_crs_10_setup.conf.
Faremo riferimento a /opt/apache/conf/crs/modsecurity_crs_10_setup.conf come setup.conf in questa sezione a scopo di esempio.
È importante capire quali sono le regole OWASP fornite gratuitamente. Esistono due tipi di regole fornite da OWASP.
Regole di base : queste regole sono ampiamente testate e probabilmente il rapporto di falsi allarmi è inferiore.
Regole sperimentali : queste regole sono a scopo sperimentale e potresti avere un alto falso allarme. È importante configurare, testare e implementare in UAT prima di utilizzarli in un ambiente di produzione.
Regole opzionali : queste regole opzionali potrebbero non essere adatte all'intero ambiente. In base alle tue esigenze puoi usarli.
Se stai cercando protezione CSRF, monitoraggio degli utenti, dirottamento della sessione, ecc., allora potresti prendere in considerazione l'utilizzo di regole opzionali. Abbiamo le regole di base, opzionali e sperimentali dopo aver estratto il file zip crs scaricato dalla pagina di download di OWASP.
Questo file di configurazione delle regole è disponibile nelle cartelle crs/base_rules, crs/optional_rules e crs/experimental_rules. Acquistiamo familiarità con alcune delle regole di base.
- modsecurity_crs_20_protocol_violations.conf: questa regola protegge dalle vulnerabilità del protocollo come la suddivisione della risposta, il contrabbando di richieste e l'utilizzo di protocolli non consentiti (HTTP 1.0).
- modsecurity_crs_21_protocol_anomalies.conf: serve per proteggere da una richiesta che manca con Host, Accept, User-Agent nell'intestazione.
- modsecurity_crs_23_request_limits.conf: questa regola ha la dipendenza dall'applicazione specifica come la dimensione della richiesta, la dimensione del caricamento, la lunghezza di un parametro, ecc.
- modsecurity_crs_30_http_policy.conf: serve per configurare e proteggere metodi consentiti o non consentiti come CONNECT, TRACE, PUT, DELETE, ecc.
- modsecurity_crs_35_bad_robots.conf: Rileva robot dannosi
- modsecurity_crs_40_generic_attacks.conf: serve per proteggere dall'iniezione di comandi del sistema operativo, dall'inclusione di file remoti, ecc.
- modsecurity_crs_41_sql_injection_attacks.conf: questa regola per proteggere SQL e la richiesta di iniezione cieca di SQL.
- modsecurity_crs_41_xss_attacks.conf:Protezione dalla richiesta di scripting tra siti.
- modsecurity_crs_42_tight_security.conf: rilevamento e protezione dell'attraversamento della directory.
- modsecurity_crs_45_trojans.conf: questa regola per rilevare l'output di gestione dei file generici, il caricamento della pagina backdoor HTTP, la firma nota.
- modsecurity_crs_47_common_exceptions.conf: viene utilizzato come meccanismo di eccezione per rimuovere i falsi positivi comuni che possono essere rilevati come connessione fittizia interna di Apache, pinger SSL, ecc.
Registrazione
La registrazione è una delle prime cose da configurare in modo da poter creare registri per ciò che sta facendo Mod Security. Sono disponibili due tipi di registrazione; Registro di debug e controllo.
Registro di debug: serve per duplicare i messaggi di errore, avviso e avviso di Apache dal registro degli errori.
Audit Log: serve per scrivere i registri delle transazioni contrassegnati dalla regola Mod Security Mod Security offre la flessibilità di configurare Audit, Debug o entrambi i logging.
Per impostazione predefinita, la configurazione scriverà entrambi i log. Tuttavia, puoi modificare in base alle tue esigenze. Il registro è controllato nella direttiva SecDefaultAction
. Diamo un'occhiata alla configurazione di registrazione predefinita in setup.conf
SecDefaultAction “phase:1,deny,log”
Per registrare il debug, registro di controllo: utilizzare "log" Per registrare solo il registro di controllo: utilizzare "nolog,auditlog" Per registrare solo il registro di debug: utilizzare "log,noauditlog" È possibile specificare la posizione del registro di controllo da archiviare che è controllata da SecAuditLog direttiva.
Scriviamo il registro di controllo in /opt/apache/logs/modsec_audit.log aggiungendo come mostrato di seguito.
- Aggiungi la direttiva SecAuditLog in setup.conf e riavvia Apache Web Server
SecAuditLog /opt/apache/logs/modsec_audit.log
- Dopo il riavvio, dovresti vedere la generazione di modsec_audit.log
Abilita il motore delle regole
Per impostazione predefinita, la regola del motore è disattivata, ciò significa che se non abiliti il motore delle regole non stai utilizzando tutti i vantaggi di Mod Security.
L'abilitazione o disabilitazione di Rule Engine è controllata dalla direttiva SecRuleEngine
.
- Aggiungi la direttiva SecRuleEngine in setup.conf e riavvia Apache Web Server
SecRuleEngine On
Esistono tre valori per SecRuleEngine:
- On – per abilitare il motore delle regole
- Off: per disabilitare il motore delle regole
- DetectionOnly: abilita il motore delle regole ma non esegue mai azioni come blocco, negazione, rilascio, autorizzazione, proxy o reindirizzamento
Una volta attivato Rule Engine, Mod Security è pronto per la protezione con alcuni dei tipi di attacco comuni.
Protezione del tipo di attacco comune
Ora il server Web è pronto per la protezione con tipi di attacco comuni come XSS, SQL Injection, Protocol Violation, ecc. poiché abbiamo installato Core Rule e attivato Rule Engine. Proviamo alcuni di loro.
Attacco XSS
- Apri Firefox e accedi alla tua applicazione e inserisci il tag <script> alla fine o all'URL
- Monitora modsec_audit.log nella cartella apache/logs
Noterai che Mod Security blocca la richiesta in quanto contiene il tag <script> che è la radice dell'attacco XSS.
Attacco di attraversamento della directory: - Gli attacchi di attraversamento della directory possono creare molti danni sfruttando queste vulnerabilità e accedendo ai file relativi al sistema. Es: /etc/passwd, .htaccess, ecc.
- Apri Firefox e accedi alla tua applicazione con directory traversal
- Monitora modsec_audit.log nella cartella apache/logs
http://localhost/?../.../boot
- Noterai che Mod Security blocca la richiesta in quanto contiene l'attraversamento della directory.
Cambia banner server
In precedenza in questa guida, hai imparato come rimuovere Apache e il tipo di sistema operativo, la guida alla versione della direttiva ServerTokens.
Facciamo un passo avanti, che ne dici di mantenere il nome del server come desideri? È possibile con la direttiva SecServerSignature
in Mod Security. Vedi è interessante.
Nota: per utilizzare Mod Security per manipolare Server Banner da un'intestazione, devi impostare ServerToken su Full in httpd.conf del server web Apache.
- Aggiungi la direttiva SecServerSignature con il nome del server desiderato in setup.conf e riavvia Apache Web Server
SecServerSignature YourServerName
Ex:
[/opt/apache/conf/crs] #grep SecServer modsecurity_crs_10_setup.conf SecServerSignature geekflare.com [/opt/apache/conf/crs] #
Configurazione generale
Esaminiamo alcune delle configurazioni generali come best practice.
Configura Ascolta
Quando si hanno più interfacce e IP su un singolo server, si consiglia di avere la direttiva Listen configurata con IP assoluto e numero di porta.
Quando lasci la configurazione di Apache su Listen su tutti gli IP con un numero di porta, potrebbe creare il problema nell'inoltro della richiesta HTTP a qualche altro server web. Questo è abbastanza comune nell'ambiente condiviso.
- Configura la direttiva Listen in httpd.conf con IP e porta assoluti come nell'esempio mostrato di seguito
Listen 10.10.10.1:80
Registrazione degli accessi
È essenziale configurare correttamente il registro di accesso nel tuo server web. Alcuni dei parametri importanti da acquisire nel registro sarebbero il tempo impiegato per soddisfare la richiesta, SESSION ID.
Per impostazione predefinita, Apache non è configurato per acquisire questi dati. Devi configurarli manualmente come segue.
- Per acquisire il tempo impiegato per soddisfare la richiesta e l'ID SESSIONE in un registro di accesso
- Aggiungi %T e %sessionID in httpd.conf nella direttiva LogFormat
LogFormat "%h %l %u %t "%{sessionID}C" "%r" %>s %b %T" common
È possibile fare riferimento a http://httpd.apache.org/docs/2.2/mod/mod_log_config.html per un elenco completo dei parametri supportati nella direttiva LogFormat in Apache Web Server.
Disabilita il caricamento di moduli indesiderati
Se hai compilato e installato tutti i moduli, ci sono alte probabilità che molti moduli vengano caricati in Apache, che potrebbero non essere necessari.
La migliore pratica consiste nel configurare Apache con i moduli richiesti nelle tue applicazioni web. I moduli seguenti hanno problemi di sicurezza e potresti essere interessato a disabilitarli in httpd.conf di Apache Web Server.
WebDAV (Web-based Distributed Authoring and Versioning) Questo modulo consente ai client remoti di manipolare file sul server e soggetti a vari attacchi denial-of-service. Per disabilitare i commenti che seguono in httpd.conf
#LoadModule dav_module modules/mod_dav.so #LoadModule dav_fs_module modules/mod_dav_fs.so #Include conf/extra/httpd-dav.conf
Modulo Info Il modulo mod_info può perdere informazioni sensibili usando .htaccess una volta caricato questo modulo. Per disabilitare i commenti che seguono in httpd.conf
#LoadModule info_module modules/mod_info.so
Riferimento: questo non sarebbe possibile senza la guida dal seguente link:
- http://httpd.apache.org/docs/2.4/
- http://www.modsecurity.org/documentation/
- https://www.owasp.org/index.php/Category:OWASP_ModSecurity_Core_Rule_Set_Project
Quindi queste erano alcune delle migliori pratiche che puoi utilizzare per proteggere il tuo server web Apache.
Controllare questo collegamento se si desidera implementare la pagina di errore personalizzata in Apache.
Se non conosci Apache HTTP, ti consiglio di seguire il corso di amministrazione di Apache HTTP.