En programación e seguridade da información, un desbordamento do búfer (buffer overflow en inglés) é unha anomalía pola que un programa escribe datos nun búfer máis alá da memoria asignada ao búfer, sobrescribindo as localizacións de memoria adxacentes.

Visión xeral Os búferes son áreas de memoria reservadas para almacenar datos, a miúdo mentres se moven dunha sección dun programa a outra ou entre programas. Os desbordamentos do búfer adoitan ser provocados por entradas incorrectas; se se asume que todas as entradas serán menores que un certo tamaño e o búfer se crea para ter ese tamaño, entón unha transacción anómala que produza máis datos podería facer que se escriba máis alá do final do búfer. Se isto sobrescribe os datos adxacentes ou o código executábel, pode provocar un comportamento errático do programa, incluíndo erros de acceso á memoria, resultados incorrectos e fallos.

A explotación do comportamento dun desbordamento do búfer é unha coñecida vulnerabilidade de seguridade. Os ficheiros creados especificamente para explotar as vulnerabilidades do desbordamento do búfer adoitan denominarse ficheiros «elaborados». En moitos sistemas, a disposición da memoria dun programa, ou do sistema no seu conxunto, está ben definida. Ao enviar datos deseñados para provocar un desbordamento do búfer, é posible escribir en áreas que se sabe que conteñen código executable e substituílo por código malicioso, ou sobrescribir selectivamente datos pertencentes ao estado do programa, provocando así un comportamento que non foi o previsto polo programador orixinal. Os búferes están moi estendidos no código dos sistemas operativos (SO), polo que é posible realizar ataques que realizan escalada de privilexios e obteñen acceso ilimitado aos recursos do ordenador. O famoso verme Morris en 1988 empregou isto como unha das súas técnicas de ataque.

Algunhas linguaxes de programación que se asocian habitualmente cos desbordamentos do búfer inclúen C e C++, que non ofrecen protección integrada contra o acceso ou a sobrescrición de datos en ningunha parte da memoria e non comproban automaticamente que os datos escritos nunha matriz (o tipo de búfer integrado) estean dentro dos límites desa matriz. A comprobación de límites pode evitar desbordamentos de búfer, pero require código e tempo de procesamento adicionais. Os sistemas operativos modernos empregan diversas técnicas para combater os desbordamentos de búfer maliciosos, especialmente aleatorizando a disposición da memoria ou deixando espazo deliberadamente entre os búferes e buscando accións que escriban nesas áreas («canarios»).

Descrición técnica Un desbordamento do búfer ocorre cando os datos escritos nun búfer tamén corrompen os valores dos datos nos enderezos de memoria adxacentes ao búfer de destino debido a unha comprobación de límites insuficiente. Isto pode ocorrer ao copiar datos dun búfer a outro sen comprobar primeiro que os datos caben dentro do búfer de destino.

Notas

Véxase tamén Outros artigos Seguridade informática

Ligazóns externas

Categoría:Depuración Categoría:Datos informáticos Categoría:Seguridade informática