Безопасность сетей
0f1a9e67

История хакерских методов - часть 8


В случае переполнения буфера интересуемая нас часть памяти называется стеком и является возвращаемым адресом функции, исполняемой на следующем шаге.

Стек управляет переключением между программами и сообщает операционной системе, какой код выполнять, когда одна часть программы (или функции) завершает свою задачу. В стеке хранятся локальные переменные функции. При атаке на переполнение буфера хакер помещает инструкции в локальную переменную, которая сохраняется в стеке. Эти данные занимают в локальной переменной больше места, чем выделенный под нее объем, и переписывают возвращаемый адрес в точку этой новой инструкции (рис. 3.2). Эта новая инструкция загружает для выполнения программную оболочку (осуществляющую интерактивный доступ) или другое приложение, изменяет файл конфигурации (inetd.conf) и разрешает хакеру доступ посредством создания новой конфигурации.

Так работает переполнение буфера

Рис. 3.2.  Так работает переполнение буфера

Почему возникает переполнение буфера?

Переполнение буфера происходит очень часто из-за ошибки в приложении, когда пользовательские данные копируются в одну и ту же переменную без проверки объема этих данных перед выполнением операции. Очень многие программы страдают этим. Однако данная проблема устраняется довольно быстро, сразу, как только выявляется и привлекает к себя внимание разработчика. Но если это так легко сделать, то почему переполнение буфера существует до сих пор? Если программист будет проверять размер пользовательских данных перед их размещением в предварительно объявленной переменной, то переполнения буфера можно будет избежать.

Примечание

Следует заметить, что многие общие функции копирования строк в языке программирования С не выполняют проверку размера строки или буфера перед копированием данных. К ним относятся функции strcat(), strcpy(), sprintf(), vsprintf(), scanf() и gets().

Переполнение буфера можно обнаружить в результате исследования исходного кода программ. Хотя это звучит просто, на самом деле процесс долгий и сложный. Намного легче помнить о переполнении буфера в процессе создания программы, чем потом возвращаться и искать его.




Начало  Назад  Вперед



Книжный магазин