Crear un exploit se trata de controlar el flujo de ejecución de un programa. Esto se puede hacer manipulando los valores de las variables en el programa. Idealmente, un exploit ejecutaría sus propias instrucciones en el contexto del programa.
Entonces, ¿cómo se obtienen nuevas instrucciones para ejecutar en un programa? Primero, esas instrucciones deben estar en la memoria del programa explotado. Luego, el puntero de instrucciones (EIP en sistemas x86) debe apuntar a la ubicación de memoria de esas instrucciones. Además, la página de memoria en la que residen esas instrucciones debe tener permisos de ejecución (sin DEP).
Para que todo esto suceda, debe encontrar un lugar en el código que le permita manipular el puntero de instrucciones. Esto podría ser a través de medios legítimos o manipulaciones de cómo funciona el sistema subyacente (por ejemplo, desbordamientos de búfer basados en pila).
- ¿Es seguro usar antivirus gratuitos?
- Seguridad: ¿cómo mantienen los mejores expertos en seguridad su anonimato en Internet, sin ser rastreados?
- ¿Cómo se construye una caja S en AES?
- ¿Qué tan segura es la base de datos Aadhaar del gobierno indio? ¿Son lo suficientemente seguros como para protegerlos de la NSA y los hackers chinos? ¿Qué medidas ha tomado el gobierno para protegerlo?
- ¿Cuál es la forma más efectiva de combatir los ataques de hackers en los blogs de WP?
Usted preguntó sobre el análisis de “código”, que estoy interpretando como código fuente o código binario. Tener el código fuente es definitivamente útil. Aunque algunos ingenieros inversos en realidad preferirían trabajar con el código binario, ya que en última instancia es lo que se explotará (vea el libro Inversión: secretos de ingenieros inversos). Tampoco tiene las restricciones del lenguaje de nivel superior.
Por lo tanto, necesita una comprensión profunda de cómo se ejecutan las instrucciones y luego cuestionar cada suposición que un programa está haciendo para ver que hay una forma de manipular las variables y los registros de la CPU que harán que el puntero de instrucciones vaya a algún lugar ventajoso para usted.