Non ci si assicura che tutti gli aggiornamenti di sicurezza siano applicati? Ricorda che, come difensore, devi vincere il 100% delle volte . Un hacker ha solo bisogno di vincere una volta.
I passaggi che hai elencato sono anche molto più facili a dirsi che a farsi (tranne la password ... eppure le persone scelgono ancora password orribili!).
2) Inoltre, qual è una "fonte credibile" per un server Web pubblico? L'intera Internet? L'intera Internet, senza Cina / Russia (/ alcuni / altri / paesi)? I sistemi automatizzati sono in grado di rilevare molti tipi di attacchi, ma proprio come gli antivirus possono solo andare così lontano.
3) Il monitoraggio dei file locali è buono, ma, ancora una volta, non è una panacea. Cosa succede se l'hacker riesce a iniettare il codice nel server web, e quindi usa un bug del kernel per ottenere il codice nel kernel ... senza mai scrivere un file sul disco? A quel punto, potrebbero scrivere file sul disco e usare un root kit per impedire la maggior parte (teoricamente tutti ) delle scansioni online dal notare eventuali modifiche al sistema.
E anche se riescono a sfruttare solo il server web, possono fare tutto ciò che il server web può fare (il che potrebbe essere comunque l'interesse di tutti gli aggressori).
4) Dovresti sempre convalidare l'input dell'utente. La maggior parte degli sviluppatori lo sa (e molti provano a farlo). Purtroppo, è molto più facile a dirsi che a farsi, ed è per questo che continuiamo a vedere un problema dopo l'altro in cui l'input dell'utente non è adeguatamente convalidato. mai essere in grado di garantire che qualsiasi vero software sia correttamente che convalida tutti gli input dell'utente. Leggi alcune domande PHP + MySQL su StackOverflow per vedere quante persone pensano che mysqli_real_escape_string()
prevenga tutti gli attacchi SQL injection ( "where ID = " . $val
è vulnerabile, anche quando $val
è l'output di mysqli_real_escape_string
!).
Anche se tu potessi (non puoi) assicurarti che ogni vettore di attacco conosciuto fosse sorvegliato, non puoi fare nulla di più che oscillare selvaggiamente nel buio contro e sconosciuto-sconosciuto (beh, educare te stesso continuamente aiuta).
Come esempio in cui le tue difese non avrebbero fatto nulla, stavo prendendo parte a un corso sulla sicurezza dove stiamo facendo "giochi di guerra". Sono stato in grado di sradicare il server di una squadra avversaria essendo in grado di ottenere una delle loro password utente su un'altra macchina (una di esse si è rovinata e digitata in bash come comando per errore, e non hanno mai pensato per cancellarlo da .bash_history
).
Da lì, ho spoofed l'IP della macchina da cui hanno effettuato l'accesso e SSHed in, inserendo il loro nome utente + password. Ho avuto accesso limitato al sistema. Ho quindi eseguito sudo vim
, ho inserito di nuovo la stessa password e ho creato una shell bash. Tada! Accesso root, da una fonte credibile, senza modificare alcun file locale in modo insolito, senza sfruttare una password debole (è stato male, ma anche la migliore password del mondo non avrebbe aiutato), né fare affidamento sull'input dell'utente non convalidato.
A quel punto, essendo malizioso, ho modificato manualmente tutti i file di registro relativi al mio accesso legittimo e ho cancellato il loro IDS (scommetto che non saranno abbastanza osservanti da notare che ho sostituito tutti i suoi binari con copie di /bin/true
!). Un hacker "reale" sarebbe probabilmente molto meglio equipaggiato per garantire che la loro attività non venisse rilevata da amministratori più vigili, ma avevo già raggiunto il mio obiettivo, e una piccola parte di me voleva che scoprissero che qualcuno l'ha preso.