Stellen Sie nicht sicher, dass alle Sicherheitsupdates angewendet werden? Denken Sie daran, dass Sie als Verteidiger 100% der Zeit gewinnen müssen. Ein Hacker muss nur einmal gewinnen.
Die Schritte, die Sie aufgelistet haben, sind auch viel einfacher gesagt als getan (mit Ausnahme des Passworts ... und dennoch wählen die Leute immer noch schreckliche Passwörter!).
2) Was ist eine "glaubwürdige Quelle" für einen öffentlich zugänglichen Webserver? Das gesamte Internet? Das gesamte Internet ohne China / Russland (/ einige / andere / Länder)? Automatisierte Systeme können viele Arten von Angriffen erkennen, aber genau wie Antivirenprogramme können sie nur so weit gehen.
3) Die Überwachung lokaler Dateien ist gut, aber auch hier kein Allheilmittel. Was ist, wenn der Angreifer es schafft, Code in den Webserver einzufügen und dann einen Kernel-Fehler verwendet, um Code in den Kernel zu bekommen ... ohne jemals eine Datei auf die Festplatte zu schreiben? Zu diesem Zeitpunkt könnten sie Dateien auf die Festplatte schreiben und ein Root-Kit verwenden, um zu verhindern, dass die meisten (theoretisch alle ) Online-Scans Änderungen am System bemerken.
Und selbst wenn sie nur den Webserver ausnutzen können, können sie alles tun, was der Webserver tun kann (was möglicherweise alles ist, woran der Angreifer sowieso interessiert war).
4) Das sollten Sie Benutzereingaben immer validieren. Die meisten Entwickler wissen das (und viele versuchen es). Leider ist es viel einfacher gesagt als getan, weshalb wir weiterhin Probleme nach Problemen sehen, bei denen Benutzereingaben nicht angemessen validiert werden. Sie können niemals garantieren, dass eine echte Software alle Benutzereingaben korrekt überprüft. Lesen Sie einige PHP + MySQL-Fragen zu StackOverflow, um zu sehen, wie viele Leute glauben, dass mysqli_real_escape_string ()
alle SQL-Injection-Angriffe verhindert ( "where ID =". $ Val
ist anfällig, auch wenn $ val
ist die Ausgabe von mysqli_real_escape_string
!).
Selbst wenn Sie sicherstellen könnten (Sie können nicht), dass jeder bekannte Angriffsvektor geschützt ist, können Sie nichts weiter tun, als wild im Dunkeln gegen Unbekannt-Unbekannt zu schwingen (also hilft es, sich ständig weiterzubilden).
Als Beispiel, bei dem Ihre Verteidigung nichts getan hätte, nahm ich an einem Sicherheitskurs teil, in dem wir "Kriegsspiele" durchführen. Ich war in der Lage, den Server eines gegnerischen Teams zu rooten, indem ich eines seiner Benutzerkennwörter von einem anderen Computer abrufen konnte (einer von ihnen hat es vermasselt und versehentlich als Befehl in bash eingegeben, und sie haben nie daran gedacht um es aus .bash_history
zu löschen).
Von dort aus habe ich die IP des Computers gefälscht, von dem aus sie sich normalerweise angemeldet haben, und SSHed, indem ich ihren Benutzernamen und ihr Passwort eingegeben habe. Ich hatte nur eingeschränkten Zugriff auf das System. Ich habe dann sudo vim
ausgeführt, das gleiche Passwort erneut eingegeben und vim eine Bash-Shell erzeugen lassen. Tada! Root-Zugriff aus einer glaubwürdigen Quelle, ohne ungewöhnliche Änderungen an lokalen Dateien vorzunehmen, ohne ein schwaches Kennwort auszunutzen (es war schlecht, aber selbst das beste Kennwort der Welt hätte nicht geholfen) oder sich auf nicht validierte Benutzereingaben zu verlassen.
Da ich schelmisch war, habe ich alle Protokolldateien, die sich auf mein legitimes Login beziehen, manuell geändert und ihre IDS gelöscht (ich wette, sie werden nicht aufmerksam genug sein, um zu bemerken, dass ich alle ersetzt habe seine Binärdateien mit Kopien von / bin / true
!). Ein "echter" Hacker wäre wahrscheinlich weitaus besser gerüstet, um sicherzustellen, dass seine Aktivität nicht von wachsameren Admins erkannt wird, aber ich hatte mein Ziel bereits erreicht, und ein kleiner Teil von mir wollte, dass sie herausfinden, dass jemand es bekam.