Злобные Shatter-атаки
DigitalScream
Xakep, номер #060, стр. 060-068-5
Изменять контролируемое значение можно лишь в пределах 16 бит, а сам адрес SEH содержит в себе 32 бита. Значит, для его полной замены необходимо, чтобы сообщение HDM_GETITEMRECT смещала адрес для записи на 2 байта два раза.
Таких пар сообщений достаточно много, про крайней мере, хватит на несколько лет. Уже теперь, кроме сообщений для ListBox’ов (LVM_SETCOLUMNWIDTH, HDM_GETITEMRECT), найдены такие же пары для TabControl’ов (TCM_SETITEMSIZE, TCM_GETITEMRECT) и ProgressBar’ов (PBM_SETRANGE, PBM_GETRANGE). Но самое интересное, что в Windows XP могут быть эксплуатированы даже кнопки (Buttons). Это делается при помощи сообщений BCM_GETTEXTMARGIN и BCM_SETTEXTMARGIN. Думаю, что для хакера выбор огромен.
Защита для Windows
Прочитав эту статью, ты прежде всего должен позаботится о своей защите. Поскольку атаке подвержены все сервисы, имеющие хотя бы одно окно, то следует запретить им взаимодействовать с рабочим столом. Такую опцию можно установить для каждого сервиса в отдельности. Для этого в Панели Управления выбери пункт меню Администрирование -> Службы. В свойствах выбранного тобой сервиса перейди на закладку "Вход в систему" и убери оттуда галочку возле надписи "Разрешить взаимодействие с рабочим столом".
Тем не менее, сама уязвимость остается, но она уже не может быть использована для повышения привилегий. Поэтому я рекомендую тебе также установить соответствующие патчи. Правда, security fix’ы отсутствуют под модификацию с SEH адресами, так что здесь придется защищаться ручками.
Разработчикам программ, использующих системные привилегии, могу предложить либо вообще отказаться от использования GUI, либо очень осторожно относиться к принимаемым сообщениям, отбрасывая все подозрительные. Сама же проблема на сегодняшний день не может быть полностью решена, т.к. это потребует практически полной замены API функций в GUI интерфейсе.
Приговор
Атака действительно интересная. Но что самое занимательное - от нее пока никак не избавиться. Даже существующие патчи не смогут защитить твой комп от хакера, который понимает суть всей проблемы. К тому же, скорее всего, в ближайшие полгода придумают еще несколько модификаций этой атаки. Также не стоит забывать, что внедрение shellcode в адресное пространство можно сделать и другими способами. Например, через файлы, именные каналы, сетевые пакеты и т.д. Если хакеру известно о сообщении, которое исполняет какую-либо функцию или возвращает данные по адресу, то он смело может воспользоваться ими для создания новых эксплоитов. А их описание можно посмотреть в заголовочном файле winuser.h, MSDN или SDK. Так что на данный момент сообщения Windows – простор для хакеров.
Первое появление
Когда вице-президент Microsoft Джим Олчин давал под присягой показания в ходе антимонопольного судебного разбирательства, то среди его ответов проскользнуло одно весьма любопытное признание. Он оправдывал свое нежелание раскрывать исходный код Windows возможными атаками, которые последуют, если обнародовать куски кода системы. В качестве примера он назвал протокол организации очередей сообщений («message queuing»).