¿No te aseguras de que se apliquen todas las actualizaciones de seguridad? Recuerda, como defensor, debes ganar el 100% del tiempo . Un hacker solo necesita ganar una vez.
Los pasos que has enumerado también son mucho más fáciles de decir que de realizar (excepto la cuestión de las contraseñas ... ¡y aún así la gente todavía elige contraseñas horribles!).
2) Además, ¿qué es una "fuente creíble" para un servidor web público? ¿Toda la internet? ¿Toda la Internet, sin China / Rusia (/ algunos / otros / países)? Los sistemas automatizados pueden detectar muchos tipos de ataques, pero al igual que los antivirus, solo pueden llegar muy lejos.
3) La supervisión de archivos locales es buena, pero, nuevamente, no es una panacea. ¿Qué sucede si el atacante logra inyectar código en el servidor web y luego usa un error del núcleo para obtener código en el núcleo ... sin tener que escribir un archivo en el disco? En ese momento, podrían escribir archivos en el disco y usar un kit de raíz para evitar que la mayoría de los escaneos en línea (en teoría todos ) noten cualquier cambio en el sistema.
E incluso si solo logran explotar el servidor web, pueden hacer todo lo que puede hacer el servidor web (que podría ser todo lo que el atacante estaba interesado de todos modos).
4) Siempre debe validar la entrada del usuario. La mayoría de los desarrolladores lo saben (y muchos intentan hacerlo). Lamentablemente, es mucho más fácil decirlo que hacerlo, por lo que seguimos viendo un problema tras otro en el que la información del usuario no está validada de manera adecuada. Usted nunca podrá garantizar que cualquier software real esté correctamente validando todos los comentarios del usuario. Lea algunas preguntas de PHP + MySQL en StackOverflow para ver cuántas personas piensan que mysqli_real_escape_string()
previene todos los ataques de inyección de SQL ( "where ID = " . $val
es vulnerable, incluso cuando $val
es el resultado de mysqli_real_escape_string
!).
Incluso si pudieras (no puedes) asegurarte de que todos los vectores de ataque conocidos estuvieran protegidos, no puedes hacer nada más que moverte violentamente en la oscuridad y desconocer-desconocidos (bueno, educarte continuamente ayuda). / p>
Como ejemplo donde tus defensas no hubieran hecho nada, participé en un curso de seguridad donde estamos haciendo "juegos de guerra". Pude rootear el servidor de un equipo contrario pudiendo obtener una de sus contraseñas de usuario de la máquina otra (una de ellas la arruinó y la escribió en bash como un comando por error, y nunca pensaron para borrarlo de .bash_history
).
Desde allí, falsifiqué la IP de la máquina en la que usualmente se conectaba y SSHed, ingresando su nombre de usuario y contraseña. Tenía acceso limitado al sistema. Luego ejecuté sudo vim
, ingresé nuevamente la misma contraseña y vim generó un shell bash. Tada! El acceso a la raíz, desde una fuente creíble, sin modificar ningún archivo local de forma inusual, sin explotar una contraseña débil (era mala, pero ni la mejor contraseña del mundo hubiera ayudado), ni confiar en la entrada de usuario no validada.
En ese momento, siendo malicioso, modifiqué manualmente todos los archivos de registro relacionados con mi inicio de sesión legítimo y borré sus IDS (apuesto a que no serán lo suficientemente observadores como para darse cuenta de que reemplazé todos sus archivos binarios con copias de /bin/true
!). Un pirata informático "real" probablemente estaría mucho mejor equipado para garantizar que su actividad no fuera detectada por administradores más vigilantes, pero ya había logrado mi objetivo, y una pequeña parte de mí quería que descubrieran que alguien lo había conseguido.