Come posso bloccare i tentativi di hacking destinati a phpMyAdmin?


35

Il mio sito web riceve migliaia di hit ogni giorno da IP diversi che tentano di accedere a:

/php-myadmin/
/myadmin/
/mysql/

... e migliaia di altre varianti. Nessuna di queste directory esiste, non ho nemmeno phpmyadmin sul mio server.

Non credo che nessuno di questi tentativi abbia avuto successo, tuttavia devono prendere il loro pedaggio sulle risorse del server e sprecare larghezza di banda, quindi vorrei fermarli, se possibile. Ho bloccato una manciata di questi IP ma continuano a tornare con nuovi IP, c'è un modo per impedirlo in modo permanente?


8
Migliaia di hit al giorno non sono niente. In realtà stai riscontrando difficoltà di prestazione o stai solo assumendo? Alcune migliaia di 404 in un giorno è davvero niente .
MDMarra,

No, non sto riscontrando problemi di prestazioni. Ma mi dà fastidio e mi chiedevo se c'è qualcosa che posso fare.
amba88,

6
Fai attenzione con il blocco basato su IP: molti IP finiscono per essere ciclati per utenti legittimi. Inoltre, alcuni utenti legittimi potrebbero essere infettati come parte di una botnet. Se si esegue un blocco basato su IP, assicurarsi che abbia una scadenza ragionevolmente breve.
Bob,

Nessuna menzione mod_securityin questo thread, quindi dai un'occhiata . Nota un commento sotto che nota che ciò causerebbe effettivamente più lavoro da parte del server ovviamente. Quindi forse mod_evasivesarebbe anche meglio implementarlo . fail2ban, ma è elencato di seguito.
Mbrownnyc,

Risposte:


42

Non ti preoccupare. Servire un 404 è una piccola, minuscola, minuscola quantità di lavoro che un web server può fare. Probabilmente potresti servire dieci 404 al secondo usando un 486. La larghezza di banda per 404 è trascurabile; una piccola richiesta GET e una piccola risposta 404.

Sul serio; non ti preoccupare. Questa è solo una parte del funzionamento di un server su Internet.


14
Hell-Banning: serve una pagina normale (200 OK) con output incomprensibile. Gli strumenti che i bambini usano segnaleranno la pagina trovata e dovranno investigare a mano (una falsa pagina di accesso sarebbe sicuramente un dispositivo da diavolo) :)
arul

4
@arul - Alcuni utenti malintenzionati potrebbero considerarlo una sfida e prestare particolare attenzione al server per dispetto. Servire un 404 più piccolo o diverso sarebbe utile qui? Ad esempio, se l'host normalmente serve un 404 con un collegamento di supporto, dovrebbe / potrebbe invece servire un semplice 404 senza contenuto a questi URL target?
Freiheit,

1
Lo scopo è fare in modo che l'avversario abbia speso risorse aggiuntive (tempo) per analizzare i risultati. Se ottieni un 404, sai che l'attacco non ha funzionato. I risultati OK a lunghezza variabile sono [senza ulteriori indagini] indistinguibili dai risultati previsti. Eseguono queste scansioni perché la pazienza non è la loro virtù, quindi demotivali fuori da loro e si fermeranno :)
arul

1
Per i punti bonus, restituisci una pagina statica che assomiglia esattamente alla pagina phpmyadmin reale, ma non è del tutto funzionale.
captncraig,

1
Per ulteriori punti bonus, costruisci un ritardo di 0,5 - 1 secondo. Ciò non aumenterà significativamente il tempo per il caricamento da parte degli utenti legittimi, ma rallenterà la scansione che i cattivi stanno facendo. (Devi solo assicurarti che il tuo server abbia la capacità di mantenere le connessioni aperte più a lungo del necessario ed elaborare comunque richieste legittime.)
Moshe Katz,

38

Purtroppo per te è così che funziona Internet. Ignoralo. Migliaia di robot / trojan scansionano Internet. L'IP di origine sarà sempre casuale. Non esiste una cura.

L'unica soluzione al 100% per eliminare quel traffico è illustrata di seguito: inserisci qui la descrizione dell'immagine

Un'alternativa è:
- spostarsi con https / http dalla porta 80/443 a qualcos'altro. I robot di solito non cercano il server http su tutte le altre porte 65k.
- utilizzare la VPN per connettersi al server (immagino che ciò non sia possibile se si ospita un sito Web pubblico).


LOL +1 per il diagramma :-) Ho questo fastidioso problema (come tutti noi) su un sito statico e questa è la risposta più utile.
Dave Everitt,

30

Quello che vuoi è Fail2ban (supponendo che si tratti di una macchina Linux, non hai detto ...)

Che cos'è Fail2ban?

Fail2ban analizzerà i registri di sistema, cercando particolari espressioni regolari da bloccare. Quando trova una corrispondenza (o più corrispondenze dallo stesso IP, a seconda della modalità di configurazione), si bloccherà, in genere tramite le tabelle IP. In genere viene utilizzato per bloccare tentativi di autenticazione non riusciti su SSH o server Web.

Lo configuri per vietarli per un determinato periodo di tempo (potrebbero essere minuti, potrebbero essere giorni ... dipende da quanto sono persistenti), dopo di che il divieto scadrà, a meno che non riprovino.

In che modo questo aiuta a bloccare i bot di scansione di phpmyadmin?

Può essere usato altrettanto facilmente per abbinare i segni comuni di un attacco, come tentare di accedere a cartelle phpmyadmin inesistenti. Dovrai capire l'espressione regolare corretta per abbinare tali tentativi e assicurarti di non bloccare utenti legittimi.

La configurazione fornita in questo post di blog potrebbe funzionare verbalmente o richiedere alcune modifiche per la configurazione.

Perché dovrei bloccarli? Gli errori 404 non costano molto

Il loro blocco in iptables ha qualche utilità: le probabilità sono se stanno verificando le vulnerabilità di phpmyadmin, possono provare anche altri servizi per le vulnerabilità, fino a quando non colpiscono qualcosa che funziona. Il loro divieto farà in modo che la maggior parte dei bot / script si arrenda dopo un po 'e passeranno a obiettivi migliori.

Anche attraverso le scansioni non costano molto (a meno che non trovino effettivamente una vulnerabilità), inondano i tuoi registri rendendo più difficile vedere attacchi e problemi riusciti con il tuo server web.

Come dice il commento qui sotto, Fail2ban richiede alcune risorse di sistema. Ma non molto. Per lo meno posso dire che non ho mai avuto problemi di prestazioni che potrei attribuire a Fail2ban. Ho comunque avuto problemi di prestazioni da script molto aggressivi che cercavano di forzare le password o lanciare migliaia di tentativi di iniezione SQL e altri exploit al secondo sul mio server. Il blocco a livello di firewall richiede FAR di meno risorse rispetto al blocco a livello di server / applicazione. Può anche essere esteso per eseguire script personalizzati per vietare gli indirizzi IP, quindi invece di vietarli in IPtables, potresti averli vietati in un firewall hardware o inviare un'email a qualcuno se la stessa persona continua a provare ad attaccarti in modo da poterti lamentare al proprio ISP o fare in modo che il proprio datacenter li blocchi sui propri firewall.

Qualche altro consiglio?

È ALTAMENTE RACCOMANDATO di autorizzare alcuni indirizzi IP che controlli in modo da non bloccarti accidentalmente.


6
sarà una perdita di risorse :) Penso che userete più cicli di CPU su Fail2ban che semplicemente servendo a volte 404 :)
Bartłomiej Zarzecki

4
@ BartłomiejZarzecki Una migliore sicurezza richiede sempre più risorse
user11153

3
@ heinrich5991 si bloccherà dopo i primi tentativi. Non fa alcuna differenza per alcune scansioni, ma un'enorme differenza per le scansioni che tentano più tentativi sul server.
Concedi l'

2
Si spera che Fail2ban (o simile) sia più di / phpmyadmin. Supponendo che abbia qualsiasi tipo di accesso remoto, il blocco del tipo F2B (3 password e tu ... sei ... andato!) È per più di soli 404 secondi.
WernerCD,

3
Se fai qualcosa del genere, assicurati che il divieto scada relativamente rapidamente (alcune ore al massimo) o rischi di bloccare utenti legittimi se l'attacco proviene da un IP allocato dinamicamente.
Jens Neubauer,

7

Quello che faccio è inserire un piccolo script nella directory appropriata, quindi viene eseguito se qualcuno accede a / phpmyadmin /. Quello script non fa altro che invocare iptables (sotto Linux), che blocca l'indirizzo IP accedendo allo script per 30 minuti (dopodiché un cron-job scarica la catena iptables a cui viene aggiunto l'indirizzo IP).

Il vantaggio rispetto a fail2ban è che non si utilizzano risorse per l'analisi di syslog / access-log. Lo svantaggio, ovviamente, è che non si controlla nient'altro, tranne l'accesso a questo indirizzo molto specifico.

Perché lo faccio? Certo, servire un 404 sarebbe facile per il server, ma non li voglio frugare in giro, così semplice. Voglio perdere tempo nel loro strumento, aspettando che il server risponda, riprovando fino a quando non si arrende. Inoltre, se non li blocchi, proveranno molti URL diversi prima di procedere, a volte oltre un migliaio. A seconda dello strumento, potrebbe essere "bello" e spaziare quelli nel giro di poche ore, oppure potrebbe non interessarti e battere il tuo server con tutti in pochi minuti.

Perché non offro una pagina valida? Il loro strumento potrebbe interrompere la scansione e avvisare lo skiddie che lo sta eseguendo, che deve quindi controllare manualmente. Il rovescio della medaglia di questo è che daranno al tuo server un aspetto molto più vicino di quello che avrebbero, se la loro scansione non ti facesse apparire nei loro risultati. Forse frugheranno un po 'di più, forse alcune scansioni delle porte, forse li farai impazzire e lanceranno un DoS per vedere se possono fare qualcosa. Il semplice blocco di questi - che dal loro punto di vista fa scadere il tempo del server nel momento in cui accedono allo script phpmyadmin - è efficace sprecare il tempo del loro strumento, evitando al contempo attenzioni indesiderate.

Se hai phpMyAdmin sul server, una soluzione efficace potrebbe essere metterlo in una directory separata e utilizzare il controllo password del tuo server web (.htpasswd per Apache) per bloccare l'accesso prima che qualcosa lo raggiunga.


Sembra una buona opzione alternativa ... ma ciò non richiede che il web server sia in grado di eseguire lo script con i permessi di root?
Concedi l'

1
Regola l'alias per strumenti come phpMyAdmin. Semplice modifica al file di configurazione per cambiarlo in adminMyPhp o chrisPhpAdmin ... o qualcosa che non verrà copiato dallo script.
WernerCD,

Ci scusiamo per la risposta tardiva - non (necessariamente). È possibile utilizzare sudo (con il file sudoers) per consentire al server Web di eseguire uno script ben noto (e solo quello script) con i permessi di root. Lo script accetterebbe (come parametro) l'IP e lo verifichi con un'espressione regolare ([0-9] + \. [0-9] + \. [0-9] + \. [0-9] + ) per assicurarsi che non stia iniettando nulla di strano.
Aaa

1

FWIW limitiamo l'accesso a / phpmyadmin / solo agli indirizzi IP autorizzati.

Usiamo anche mod_evasive (su apache2) per scoraggiare attacchi con script DOS / mal comportati.


1

associare lo strumento di amministrazione mysql all'indirizzo di loopback della macchina 127.0.0.1

quindi utilizzare ssh con il port forwarding per accedere al back-end dell'amministratore.

aggiungere un ulteriore livello di sicurezza che può essere abbastanza trasparente.


-4

Il modo migliore che abbiamo trovato è proteggere con password la cartella in cui si trova phpmyadmin. Inoltre, non usare nulla che si riferisca a phpmyadmin come nome di una cartella: pma, phpmy, ecc ...


2
Dalla domanda: None of these directories exist, I don't even have phpmyadmin on my server.- Non sta chiedendo come rafforzare le sue installazioni esistenti ... sta chiedendo cosa fare per cose che non esistono. Non puoi rinominare PMAo cosa hai se non esiste.
WernerCD,
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.