Vous ne vous assurez pas que toutes les mises à jour de sécurité sont appliquées? N'oubliez pas qu'en tant que défenseur, vous devez gagner 100% du temps . Un hacker n'a besoin de gagner qu'une seule fois.
Les étapes que vous avez énumérées sont également beaucoup plus faciles à dire qu'à faire (sauf le mot de passe ... et pourtant les gens choisissent toujours des mots de passe horribles!).
2) En outre, qu'est-ce qu'une «source crédible» pour un serveur Web public? Tout Internet? Tout Internet, sans Chine / Russie (/ certains / autres / pays)? Les systèmes automatisés peuvent détecter de nombreux types d'attaques, mais tout comme les antivirus, ils ne peuvent aller plus loin.
3) La surveillance des fichiers locaux est une bonne chose, mais, encore une fois, ce n'est pas une panacée. Que faire si l'attaquant parvient à injecter du code dans le serveur Web, puis utilise un bogue du noyau pour obtenir du code dans le noyau ... sans jamais écrire de fichier sur le disque? À ce stade, ils pourraient écrire des fichiers sur le disque et utiliser un kit racine pour empêcher la plupart des analyses en ligne (théoriquement toutes ) de détecter des modifications du système.
Et même s'ils ne parviennent qu'à exploiter le serveur Web, ils peuvent faire tout ce que le serveur Web peut faire (ce qui pourrait être tout ce qui intéressait l'attaquant de toute façon).
4) Vous devriez toujours valider l'entrée de l'utilisateur. La plupart des développeurs le savent (et beaucoup essaient de le faire). Malheureusement, c'est beaucoup plus facile à dire qu'à faire, c'est pourquoi nous continuons à voir des problèmes après des problèmes où l'entrée de l'utilisateur n'est pas correctement validée. Vous ne pourrez jamais garantir qu’un logiciel réel valide correctement toutes les entrées utilisateur. Lisez quelques questions PHP + MySQL sur StackOverflow pour voir combien de personnes pensent que mysqli_real_escape_string ()
empêche toutes les attaques par injection SQL ( "where ID =". $ Val
est vulnérable, même lorsque $ val
est la sortie de mysqli_real_escape_string
!).
Même si vous pouviez (vous ne pouvez pas) vous assurer que tous les vecteurs d'attaque connus étaient protégés, vous ne pouvez rien faire de plus que de vous balancer sauvagement dans l'obscurité contre et inconnu-inconnu (eh bien, vous instruire continuellement aide). / p>
À titre d'exemple où vos défenses n'auraient rien fait, je participais à un cours de sécurité où nous faisons des "jeux de guerre". J'ai pu rooter le serveur d'une équipe adverse en étant capable d'obtenir l'un de leurs mots de passe utilisateur sur une autre machine (l'un d'eux a foiré et l'a tapé dans bash comme une commande par erreur, et ils n'ont jamais pensé pour le supprimer de .bash_history
).
À partir de là, j'ai usurpé l'adresse IP de la machine à partir de laquelle ils se sont généralement connectés et me suis connecté en SSH, en saisissant leur nom d'utilisateur + mot de passe. J'avais un accès limité au système. J'ai ensuite exécuté sudo vim
, entré à nouveau le même mot de passe et ai fait créer un shell bash à vim. Tada! Accès root, à partir d'une source crédible, sans modifier aucun fichier local de manière inhabituelle, sans exploiter un mot de passe faible (c'était mauvais, mais même le meilleur mot de passe au monde n'aurait pas aidé), ni en s'appuyant sur une entrée utilisateur non validée.
À ce stade, étant malicieux pour moi, j'ai modifié manuellement tous les fichiers journaux liés à ma connexion légitime, et effacé leur IDS (je parie qu'ils ne seront pas assez attentifs pour remarquer que j'ai remplacé tous les ses binaires avec des copies de / bin / true
!). Un `` vrai '' hacker serait probablement bien mieux équipé pour s'assurer que son activité ne soit pas détectée par des administrateurs plus vigilants, mais j'avais déjà atteint mon objectif, et une petite partie de moi voulait qu'ils découvrent que quelqu'un l'a compris.