Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #91, ИЮЛЬ 2006 г.

Обзор эксплойтов

Крис Касперски ака мыщъх

Хакер, номер #091, стр. 091-060-3


Сами же exploit'ы выглядят довольно тривиально:

<html>

<a href="mhtml://mid:AAA...AAAA">example</a>

</html>

Это фрагмент exploit'а, поражающего IE (полный текст находится на www.securityfocus.com/data/vulnerabilities/exploits/18198.htm).

[DEFAULT]

BASEURL=

[InternetShortcut]

URL=mhtml://mid:AAA...AAA

А это фрагмент exploit'а, поражающего IE (полный текст находится на www.securityfocus.com/data/vulnerabilities/exploits/18198.url_).

Уязвимости подвержены следующие версии IE: 6.0, 6.0 SP1, 6.0 SP2, 7.0 beta1, 7.0 beta2, а также, возможно, и более младшие версии (версия 6.0.2800.1106, установленная у меня, неуязвима — сам проверял).

За дополнительной информацией обращайтесь на: www.securityfocus.com/bid/18198/.

Переполнение буфера в Опере

Опера — это быстрый, надежный, относительно безопасный и во многом культовый бразузер (не такой, конечно, культовый, как Рысь, но все-таки, сформировавший свое, особое сообщество). Я, например, люблю Оперу за развитый клавиатурный ввод, позволяющий вообще отказаться от мыши, что значительно ускоряет серфинг. Самое главное то, что Опера — это единственный независимый браузер, созданный с нуля и лишенный тяжелого наследия прошлого. FireFox, основанный на движке Mozilla, и IE, все еще содержащий фрагменты кода древнего Mosaic, представляют собой настоящее «кладбище» программистских технологий всех времен и народов. «Осадочные» слои кода взаимодействуют друг с другом очень сложным образом, и потому ошибки вылезают то тут, то там. Добавление новых свойств требует глобального пересмотра всего кода, поскольку он уже давно превратился в сплошной клубок…

Опера сначала проектировалась (с учетом всех требований современности), а потом кодировалась с четким разделением функций каждого модуля. Такой подход упрощает отладку продукта и ликвидирует целый пласт ошибок, но не страхует от них полностью. Программ без ошибок, увы, не бывает. В Опере они тоже встречаются. Последняя была обнаружена 13 апреля 2006 года, исправлена и заново «переоткрыта» 7 июня, поскольку проблема оказалась намного серьезней, чем ожидалось.

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

Листинг 5: пример, демонстрирующий простейший случай знакового переполнения

demo_singed_overflow(char *s)

{

// объявление переменных

int len; char buf[MAX_LEN];

// определение длины строки

len = strlen(s);

// если строка влезает в буфер, то копируем ее,

// в противном случае возвращаем ошибку

if (len < MAX_LEN) strncpy(buf, s, len); else return 0;

// тем или иным образом обрабатывает строку

printf("%s\n",buf);

}

На первый взгляд все написано правильно — мы тщательно проверяем длину строки перед копированием в буфер. Тут идет речь о знаковом переполнении. Переменная len имеет тип signed int (в большинстве компиляторов int имеет знаковый тип по умолчанию), в то время как прототип функции strncpy выглядит так: strncpy(char *dst, char *source, unsigned int count).

Назад на стр. 091-060-2  Содержание  Вперед на стр. 091-060-4