¿Cómo encuentran los hackers vulnerabilidades y las muestran en Pwn2Own u otras conferencias de hackers?

Para encontrar vulnerabilidades como se demostró en Pwn2Own y conferencias similares, se requieren buenas habilidades de ingeniería inversa. Esto viene con experiencia y requiere trabajo duro, dedicación y un buen ojo hacia los detalles minuciosos. Muchas veces encontrar una sola vulnerabilidad puede requerir semanas, por lo que la paciencia es clave.

Hoy en día, la mayoría de las vulnerabilidades se encuentran mediante fuzzing. Para que una aplicación o un servicio sea útil, debe aceptar la entrada del usuario que, si se hace incorrectamente, se convierte en la fuente de errores. En un enfoque basado en fuzzing, simplemente alimentamos la aplicación con entradas mal formadas en gran cantidad y esperamos a que se bloquee o haga algo inesperado. Una vez exitoso, tratamos de encontrar la razón por la cual se estrelló, y si podemos reproducirlo de manera confiable, tenemos un exploit. Si ese exploit no se conoce de antemano, entonces es un día cero.

El caso particular de exploit contra Microsoft Edge (CVE-2016-0176) se debió a un desbordamiento de montón en dxgkrnl.sys.

También hay otras formas de encontrar vulnerabilidades y varía de persona a persona. Una forma sería tener en cuenta dónde se llaman las funciones de asignación de memoria como malloc, HeapAlloc (Windows), etc. Vea si se liberaron correctamente o si se usaron después de liberarse. A veces, los nuevos desarrolladores se olvidan de habilitar ASLR, NX mientras compilan los binarios. Esto puede hacer que un error no confiable sea mucho más fácil de explotar.

La conclusión es que no hay una forma segura y única de encontrar vulnerabilidades. Necesitas ampliar tu imaginación.