Como con muchas cosas, asegurarte de detectar un exploit exitoso requiere defensa en profundidad y un poco de preparación.
Comenzaremos con la suposición de que un atacante romperá de alguna manera el "software objetivo" y lo tendrá, o la cuenta con la que se ejecuta ejecutará un código arbitrario suministrado por el atacante. Nuestro objetivo es poder detectar que esto ha ocurrido.
Primero, en el lado de la prevención, querrá asegurarse de que cualquier software de destino se ejecute en una cuenta separada con menos privilegios. Esto implica que incluso un ataque exitoso no tendrá acceso al resto del sistema. También querrá asegurarse de que el sistema reciba actualizaciones de seguridad regulares, etc. Esto mitiga el riesgo de que el atacante pueda elevar los privilegios de la cuenta que lanzó a la raíz o algo más interesante. Finalmente, tenga solo el software mínimo necesario, idealmente solo para un solo propósito. (No mezcle web / app / database en el mismo cuadro).
Ahora, una vez que haya terminado, puede comenzar a buscar la detección de la vulnerabilidad. Para eso, debes comenzar con el registro de eventos del sistema operativo. ¿Se inició o se detuvo algún proceso inusual? Presumiblemente, habrá un patrón de uso "normal", y si el atacante ejecuta su propio código, podría estar en un proceso separado. Un IPS / IDS debería proporcionar mucha información sobre esto, mucho mejor para encontrar uno bueno y configurarlo que intentar enrollarlo usted mismo. Cualquier IPS / IDS que valga la pena debería estar enviando datos de eventos a un host separado (como sugiere @ user400344).
En el lado del firewall del sistema operativo, la mayoría del software del servidor no inicia las conexiones TCP a puntos finales aleatorios, por lo que es posible que desee configurar el firewall para que solo permita el tráfico saliente a destinos conocidos. Esto también haría que sea más difícil para un atacante exfiltrar los datos. Desde el servidor, puede monitorear el tráfico TCP para asegurarse de que coincida con lo que espera.
Mantener un registro de todos los procesos iniciados. Hay varios programas que pueden ayudarte a hacer esto. (También canalice eso del host.)
A continuación, en la capa de aplicación, querrá escribir en syslog u otro servicio que se ejecute por separado del software de destino. Durante la explotación, el atacante podría escribir en syslog, pero no modificarlo.
Si el software de destino programa trabajos, acepta comandos, etc., verifique que no se modifiquen, excepto a través de un flujo de trabajo esperado.
También puede ejecutar un IPS / IDS en la capa de la aplicación (firewall de la aplicación web, si el software de destino es un servidor web), en cuyo caso eso debería proporcionar una defensa adicional.