Обзор эксплойтов Крис Касперски ака мыщъх Хакер, номер #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). |