Background
Un Egghunter es básicamente un trozo de tamaño pequeño que actúa como una primera etapa en un intento de explotación de 2 etapas (mientras que la segunda etapa suele ser el código de shell de la carga útil malintencionada). En la primera etapa, el código auxiliar buscará a través del proceso VAS (Espacio de direcciones virtuales) la carga útil de la segunda etapa que se ingresa / inyecta en otra parte de la misma memoria de proceso. Una vez encontrado, transferir el control a la segunda etapa de la explotación.
En un sistema x86, el VAS tiene un tamaño de 4294967296 bytes o alrededor de 4Gb. Es relativamente más fácil escanear todo el proceso VAS de tamaño 4Gb.
Ahora en un sistema x86_64 el tamaño de VAS es de hasta 16.8 millones de Tb (Terabytes). Encontrar un huevo dentro de esa memoria es, de hecho, tratar de encontrar una aguja en un pajar.
Pregunta :
¿Esto hace que la técnica de explotación del cazador de huevos sea irrelevante en un sistema x86_64? Debido a que se puede demostrar que es muy difícil encontrar la etiqueta del huevo y ejecutar la carga útil sin saber realmente la ubicación exacta en tiempo real del huevo inyectado + carga útil
Dificultades como:
- buscar a través de tanta memoria podría tomar días / semanas
- UB cuando las llamadas al sistema se repiten para [millones x (Tb)] iteraciones
- Segfault cuando ocurre # 2
Entonces, ¿un ataque de cazador de huevos aún tiene sentido en un ataque real en un sistema de 64 bits, al menos sin saber la ubicación exacta en la memoria de la carga útil de la segunda etapa inyectada?