|
|
Desbordamiento de búfer (buffer overflow)
Habréis oido en muchas ocasiones hablar de agujeros de seguridad relacionados con los desbordamientos de búferes (buffer overflow). Es un término que se repite muy a menudo, ya que los desbordamientos de búfer constituyen una fuente frecuente de resquicios de seguridad, desde los muy graves, como el infame Gusano de Internet de 1988, hasta los que difícilmente pueden ser explotados provechosamente por ningún hacker. Si bien para comprenderlos hace falta un conocimiento considerable de programación en ensamblador y en C y sobre la arquitectura de la máquina sobre la que ocurre, la idea del desbordamiento de búfer se puede expresar muy sencillamente de la siguiente forma: Un búfer se desborda cuando intentamos meter en él más cosas de las que caben en el espacio que tenía reservado. Veamos un caso real de programación en C en que se produce un desbordamiento tal:
Hemos reservado 256 caracteres, pero luego queremos escribir en ese espacio 512, produciéndose el desbordamiento. A partir de ahí se origina una situación de excepción, el programa probablemente se quedará colgado, y un hacker experto podría explotar esta inestabilidad para conseguir que el sistema ejecute su propio código. De aquí en adelante, los detalles son excesivamente crípticos, pero podéis encontrar una descripción sobresaliente en el siguiente documento en inglés: The Tao of Windows Buffer Overflow escrito por DilDog. Advertimos que es droga dura, sólo apto para programadores empedernidos y de muy alto nivel. Nota: La función de ejemplo está tomada de dicho documento. Copyright © 1997-1999 Gonzalo Álvarez Marañón y Pedro Pablo Fábrega Martínez. Todos los derechos reservados. Criptonomicón es un servicio ofrecido libremente desde el Instituto de Física Aplicada del CSIC. Para información sobre privacidad, por favor consulte la declaración de política sobre privacidad. Para sugerencias, comentarios o quejas, acuda al libro de visitas. Para contribuir al Criptonomicón, lea la página de contribuciones. |