Cuando un exploit se ejecutó con éxito, ¿hay alguna forma de evitar que el usuario recupere un shell?
Me gustaría saber acerca de esto en máquinas Windows y Linux.
En un servidor web de producción, debe evitar la creación de conexiones TCP salientes, a excepción de las direcciones de confianza. Cualquier servidor de seguridad con estado debe permitirle crear reglas para este tipo de escenario.
Si estás usando iptables
, intenta algo como esto:
iptables -A OUTPUT -p tcp --tcp-flags ALL SYN -m state --state NEW -j DROP
Mi iptables
-fu está un poco oxidado, así que disculpe cualquier error en ese comando.
Esto elimina todos los paquetes TCP salientes que pertenecen a una nueva conexión TCP, con solo el indicador SYN establecido. En otras palabras, evita completamente las conexiones TCP salientes.
Si estás hablando de shells inversos, esto puede ser bastante difícil de tratar de prevenir. Por ejemplo, el atacante explota exitosamente el objetivo y usa el cliente para conectarse nuevamente al atacante en el puerto 80 entregando un shell. Por supuesto, el puerto de salida 80 debería estar permitido. Tratar de evitar la firma de shell en el puerto 80 probablemente crearía una gran cantidad de falsos positivos.
Prefiero apuntar a la detección antes que a la prevención.
Lea otras preguntas en las etiquetas exploit