Evitar saturaciones de búfer

Una saturación del búfer es uno de los orígenes más comunes de riesgo de seguridad. Básicamente, una saturación del búfer se debe a tratar la entrada externa no desactivada como datos de confianza. El acto de copiar estos datos, mediante operaciones como CopyMemory, strcat, strcpy o wcscpy, puede crear resultados imprevistos, lo que permite daños en el sistema. En el mejor de los casos, la aplicación se anulará con un volcado de memoria principal, un error de segmentación o una infracción de acceso. En el peor de los casos, un atacante puede aprovechar la saturación del búfer introduciendo y ejecutando otro código malintencionado en el proceso. Copiar datos de entrada no activados en un búfer basado en pila es la causa más común de errores que se pueden aprovechar.

Las saturaciones del búfer pueden producirse de varias maneras. En la lista siguiente se proporciona una breve introducción a algunos tipos de situaciones de saturación de búfer y se ofrecen algunas ideas y recursos que le ayudarán a evitar crear nuevos riesgos y mitigar los existentes:

Saturaciones del búfer estático

Una saturación del búfer estático se produce cuando un búfer, que se ha declarado en la pila, se escribe en con más datos de los que se asignó para contener. Las versiones menos aparentes de este error se producen cuando los datos de entrada del usuario no comprobados se copian directamente en una variable estática, lo que provoca posibles daños en la pila.

Saturaciones del montón

Las saturaciones del montón, como las saturaciones de búfer estático, pueden provocar daños en la memoria y la pila. Dado que las saturaciones del montón se producen en la memoria del montón en lugar de en la pila, algunas personas consideran que son menos capaces de causar problemas graves; sin embargo, las saturaciones del montón requieren un cuidado real de programación y son tan capaces de permitir riesgos del sistema como saturaciones de búfer estático.

Errores de indexación de matrices

Los errores de indexación de matrices también son un origen de saturaciones de memoria. La comprobación cuidadosa de los límites y la administración de índices ayudarán a evitar este tipo de saturación de memoria.

La prevención de saturaciones del búfer consiste principalmente en escribir código correcto. Valide siempre todas las entradas y produzca un error correctamente cuando sea necesario. Para obtener más información sobre cómo escribir código seguro, consulte los siguientes recursos:

  • Maguire, Steve [1993], escribiendo código sólido, ISBN 1-55615-551-4, Microsoft Press, Redmond, Washington.
  • Howard, Michael y LeBlanc, David [2003], Escribir código seguro, 2d ed., ISBN 0-7356-1722-8, Microsoft Press, Redmond, Washington.

Nota

Es posible que estos recursos no estén disponibles en algunos idiomas y países.

 

El control seguro de cadenas es un problema de larga duración que sigue abordando los procedimientos de programación recomendados y, a menudo, mediante el uso y la retroajuste de los sistemas existentes con funciones seguras de control de cadenas. Un ejemplo de este conjunto de funciones para el shell de Windows comienza con StringCbCat.