Non sei sicuro che tutti gli aggiornamenti di sicurezza vengano applicati? Ricorda, come difensore, devi vincere il 100% delle volte . Un hacker deve vincere solo una volta.
I passaggi che hai elencato sono anche molto più facili a dirsi che a farsi (tranne la questione della password ... eppure le persone scelgono ancora password orribili!).
2) Inoltre, cos'è una "fonte credibile" per un server web pubblico? L'intera Internet? L'intero Internet, senza Cina / Russia (/ alcuni / altri / paesi)? I sistemi automatizzati possono rilevare molti tipi di attacchi, ma proprio come gli antivirus possono arrivare solo fino a un certo punto.
3) Il monitoraggio dei file locali va bene, ma, ancora una volta, non è una panacea. Cosa succede se l'attaccante riesce a iniettare codice nel server web e quindi utilizza un bug del kernel per ottenere codice nel kernel ... senza mai scrivere un file sul disco? A quel punto, potevano scrivere file sul disco e utilizzare un kit di root per impedire alla maggior parte delle scansioni online (teoricamente tutte ) di rilevare 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 comunque essere tutto ciò a cui l'attaccante era interessato).
4) Dovresti convalida sempre 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, motivo per cui continuiamo a vedere problemi dopo problemi in cui l'input dell'utente non è adeguatamente convalidato. Non sarai mai in grado di garantire che un qualsiasi software reale stia correttamente convalidando 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 potessi (non puoi) assicurarti che ogni vettore di attacco conosciuto sia protetto, non puoi fare altro che dondolarti selvaggiamente nell'oscurità contro e sconosciuto-sconosciuto (beh, educare continuamente te stesso aiuta).
Come esempio in cui le tue difese non avrebbero fatto nulla, stavo prendendo parte a un corso sulla sicurezza in cui stiamo facendo "giochi di guerra". Sono stato in grado di eseguire il root del server di una squadra avversaria riuscendo a ottenere una delle loro password utente da un'altra macchina (una di loro ha sbagliato e l'ha digitata in bash come comando per errore, e non hanno mai pensato per eliminarlo da .bash_history
).
Da lì, ho falsificato l'IP della macchina da cui di solito accedevano e si collegavano in SSH, inserendo il loro nome utente e password. Ho avuto un accesso limitato al sistema. Quindi ho eseguito sudo vim
, ho inserito di nuovo la stessa password e ho fatto generare a vim una shell bash. Tada! Accesso root, da una fonte credibile, senza modificare alcun file locale in modo insolito, senza sfruttare una password debole (era cattiva, ma anche la migliore password al mondo non avrebbe aiutato), né fare affidamento su input dell'utente non convalidato.
A quel punto, essendo me stesso dispettoso, ho modificato manualmente tutti i file di registro relativi al mio accesso legittimo e ho cancellato il loro IDS (scommetto che non saranno abbastanza attenti da notare che ho sostituito tutti i suoi binari con copie di / bin / true
!). Un "vero" hacker sarebbe probabilmente molto meglio equipaggiato per garantire che la sua attività non fosse rilevata da amministratori più attenti, ma avevo già raggiunto il mio obiettivo e una piccola parte di me voleva che scoprissero che qualcuno l'ha capito.