Злобные Shatter-атаки

DigitalScream

Xakep, номер #060, стр. 060-068-1

(digitalscream@real.xakep.ru)

Сообщения Windows: дорога в ад

Тема повышения привилегий на локальном компьютере всегда была актуальна среди кибертеррористов. Это легко объясняется желанием хакеров получить более широкие возможности при работе с ОС. Но кому-то приходится смириться со своим статусом ограниченного пользователя, а кто-то делает все, чтобы избавиться от чувства дискомфорта, получая в результате права админа.

Тип атаки

Способов для повышения прав пользователя в операционной системе Windows существует более чем достаточно. Причем это не классическое переполнение буфера, а что-то новое и многим доселе неизвестное. Хакеру же остается только выбрать наиболее подходящий способ атаки для той или иной конфигурации системы.

Эта статья – первая из цикла, посвященного локальным атакам в ОС Windows, направленным на повышение привилегий атакующего пользователя. Темой этой части станут атаки класса Shatter – это одна из интереснейших технологий в своей категории.

Сообщения Windows

Для понимания этой атаки ты должен знать, как Windows-приложения обмениваются данными между собой и системой. В отличие от своих предшественников, ОС Windows использует для общения системные сообщения. Так, например, если приложение ждет нажатия клавиши, то ему не нужно делать исключительный вызов функции для получения ввода. Напротив, ему необходимо только подождать, пока система сама не сообщит о нажатии клавиши. Для обработки таких сообщений каждое окно имеет функции "window procedure". После их вызова они снова передают управление системе.

Система генерирует сообщение лишь тогда, когда пользователь, например, нажал на клавишу или сделал движение мышки. Сообщения также могут передавать приложению информацию о произошедших изменениях в самой системе (смена разрешения экрана, системного шрифта, реестра и т.д.). Таким же образом запущенное окно может сообщать системе и другим окнам о смене своего размера, положения, а также других параметрах.

Такой механизм более прогрессивен, чем те, что использовались ранее. Но при его разработке Microsoft допустил одну серьезную ошибку, которая стоила ему безопасности целой системы. Сама ошибка является следствием того, что API-взаимодействие системы с окнами основано на реализации в ОС Windows NT 3.5 1993 года. И вот какое там взаимодействие - любое окно может посылать сообщения другому окну без каких-либо ограничений. Защищенность такого подхода можно поставить под сомнение при первом же упоминании о правах приложений. Получается, что приложение, запущенное с правами ограниченного пользователя, может с легкостью общаться с системным процессом. Казалось бы, в этом нет ничего плохого, но ведь существуют сообщения, способные менять ход исполнения программы. А это уже интереснее...

Сообщение WM_TIMER

Помимо передачи информации о каких-либо изменениях, сообщения способны самостоятельно изменять определенные параметры окна. С их помощью ты можешь сделать окно невидимым, изменить его размер, положение, сделать его неактивным и т.д. Но хакера может заинтересовать другая фишка - способность сообщений влиять на ход работы программы. Такая особенность обусловлена наличием сообщения WM_TIMER. Оно используется окном для исполнения некоторой функции через определенный интервал времени. Формат ее использования такой:

Содержание  Вперед на стр. 060-068-2
ttfb: 91.522932052612 ms