Команда open-source справилась с переполнением буфера

Авторы OpenBSD надеются, что последние изменения в новой версии ОС исключат «переполнения буфера» — проблему программного обеспечения, донимающую экспертов по безопасности более трех десятилетий.

 
Роберт Лемос (Robert Lemos), CNET News.com 
14 апреля, 2003, 15:20 

Руководитель проекта Тео де Раадт уверен, что благодаря изменениям, внесенным в новую версию варианта Unix, которая выходит 1 мая, вызвать переполнение буфера будет чрезвычайно трудно, а то и вовсе невозможно. «Я мог бы просто сказать, что с переполнением буфера покончено, но я нахожусь в аудитории экспертов по безопасности, поэтому должен взять это в кавычки», — заявил он в четверг на конференции CanSecWest.

Ошибки, связанные с распределением памяти, не удавалось искоренить почти 30 лет, поэтому утверждение группы разработчиков open-source о том, что она справилась с этой задачей, требует проверки. Некоторые участники конференции уже выразили свои сомнения. «Это просто дополнительный уровень защиты, — сказал старший менеджер по безопасности швейцарского оператора связи Colt Telecom Николас Фишбах. — Он не даст большого эффекта, так как в любом ПО всегда найдутся баги».

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

Команда OpenBSD затруднила этот процесс при помощи трех мер.

Во-первых, место расположения стека — области памяти, в которой хранятся приложения и их данные, — теперь выбирается произвольно, так что код, призванный вызвать переполнение буфера, должен будет «знать» схему распределения памяти для данной системы. «Переполнение буфера использует определенную схему распределения памяти, — пояснил де Раадт. — Теперь памяти расходуется несколько больше, зато задача взломщиков сильно усложняется».

Во-вторых, чтобы затруднить исполнение программы в случае переполнения буфера, группа изменила способ хранения важных адресов в стеке. В структуру памяти введен маркер, называемый «канарейкой», который обнаруживает факт модификации адреса: хакеры обычно используют этот прием, чтобы заставить легитимную программу исполнить вредоносный код.

Наконец, группа нашла способ расчленить файловую систему BSD и разделить память на зоны, предназначенные для записи данных и исполнения программ. Так называемые страницы памяти, хранящие программы и данные, размещаются в одной из этих двух зон. «Мы хотим гарантировать, что ни одна страница не будет использоваться для записи и исполнения одновременно. Никакие хакеры не смогут записать код и тут же исполнить его», — сказал де Раадт.

Проблема группы OpenBSD в том, что если у 64-разрядных процессоров такая защита памяти существует, то более популярные 32-разрядные чипы ее не поддерживают. Чтобы разделить память на зоны для записи и исполнения, эту проблему необходимо решить. В первомайском релизе защищенной структуры страниц памяти для 32-разрядных процессоров еще не будет. Де Раадт обещает, что она будет готова в течение шести месяцев.

Разработка OpenBSD Project финансируется за счет гранта Управления исследовательских проектов Министерства обороны США (DARPA) размером в 2,3 млн $, однако последние изменения выходят за рамки первоначальных требований гранта. «На самом деле это не входит в грант DARPA, — заявил де Раадт. — Но это сделано благодаря гранту DARPA, потому что, когда парни соберутся в одной комнате и выпьют... вот что получается». Де Раадт очень старался подчеркнуть, что группа за пиво расплатилась.


или введите имя

CAPTCHA