Статьи Shatter – атаки

Discussion in 'Статьи' started by k00p3r, 8 Jun 2005.

  1. k00p3r

    k00p3r Banned

    Joined:
    31 May 2005
    Messages:
    430
    Likes Received:
    8
    Reputations:
    2
    Hассмотрим недавно появившийся вид атак на Windows-системы. Так называемые SHATTER – атаки. Для чего их можно использовать? Для повышения прав в системе.

    Для понимания атаки вы должны хоть чуть-чуть знать, как виндозные приложения обмениваются данными между собой и системой. Работа окон контролируется с помощью сообщений Windows. Когда вы например, нажали клавишу, Windows посылает сообщение активному окну и сообщает ему об этом событии. Фактически, когда происходит какое-то событие о котором должно знать окно, ему посылается сообщение. Эти сообщения помещаются в очередь и обрабатываются в порядке поступления. Это довольно удобный механизм управления, но он имеет довольно серьёзный недостаток. Дело в том, что все сообщения посланные любым приложением имеют равные права с системой, то есть приложение, запущенное с правами ограниченного пользователя, может легко посылать сообщения любому системному процессу. А теперь представьте что есть сообщения способные менять ход исполнения программы… То есть если мы найдём приложение имеющие большие права чем мы, то мы можем попытаться использовать его для повышения своих прав.

    Сообщения Windows состоят из трех частей: идентификатора сообщений и двух параметров. Параметры используются в зависимости от идентификатора. Значит для удачной атаки нам надо знать дескриптор окна и сообщение которое мы хотим послать. Рассмотрим сообщения WM_TIMER. Оно используется окном для исполнения некоторой функции через определённый интервал времени. Формат использования этого сообщения таков:

    SendMessage(Handle, WM_TIMER, Interval, Addr);
    Handle – дескриптор окна которому посылается сообщение
    WM_TIMER – само сообщение
    Interval – через сколько миллисекунд запустить сообщение
    Addr – адрес запускаемой функции


    Если мы укажем дескриптор окна имеющего большие права чем мы, а по адресу запускаемой функции будет находится наш шеллкод то он исполнится с правами атакуемого приложения!

    Но имеется две проблемы:

    1) Узнать нужный дескриптор
    2) Сделать так чтобы шеллкод находился в областном пространстве атакуемой программы, да ещё нужно знать его адрес.

    Всё решается довольно легко, для того чтобы узнать дескриптор можно использовать программу Shutter , и вообще сегодня мы будем использовать эту программу для большинства наших операций. А для того, чтобы шеллкод находился в областном пространстве атакуемой проги достаточно поместить его в поле ввода любого окна этой проги. А для получения нужного адреса мы будем использовать отладчик SoftIce. Но обо всём по порядку.

    Для примера я использовал Agnitum Outpost Firewall Pro 2.0 , ось Windows XP. Прога имеет права SYSTEM – это то что нам нужно. Залогинимся под гостём, зайдём в прогу, выберем:
    Параметры -> Системные -> Общие правила -> Параметры -> Изменить. Внизу видно поле ввода, это то что нам нужно. Запустим shutter, щелкнем в поле ввода мышкой а в shatter выберем: GetCursorWindow. В итоге мы получим дескриптор поля ввода. Теперь нам нужно достаточно места для ввода щеллкода, для изменения размера поля вода используется сообщения: EM_SETLIMITTEXT. В shatter в поле handle введём полученный дескриптор, в WPARAM – 3, в LPARAM – 0. Нажмём EM_SETLIMITTEXT. Теперь в поле ввода Oupost’a вытрем всё и попробуем чё-то ввести, максимальная длина 3 символа. Теперь в WPARAM напишем FFFFFFF, и снова нажмём EM_SETLIMITTEXT. Теперь у нас в распоряжение 4 гига, вводите чё хотите… Теперь попробуем сообщение WM_PAST, оно используется для вставки текста из буфера обмена, оба параметра нули. Скопируйте любой текст, WPARAM – 0, в LPARAM – 0, и нажмите WM_PAST. В принципе всё понятно. Теперь попробуем всё на практике.

    Для начала полностью очистим поле ввода. Теперь нам нужно вставить шеллкод в поле ввода. Где взять шеллкод??? Можно написать самому, можна использовать с любого виндозного эксплоита, но мы возьмем шеллкод который идёт вместе с shatter’ом, он открывает шелл на 123 порту. Теперь откроем файл sploit.bin с помощью HEX-редактора, я использовал WinHex. Скопируем его вместе со словом FOON. В shatter вводим нужный дескриптор, 0, 0, и жмём WM_PAST. Теперь нам необходимо найти адрес шеллкода. Запустим SoftIce(Ctrl+D), и ведём: s 10000000 l FFFFFFFF ‘FOON’ . У меня нашлось по адресу E1CE04BC. Ваш адрес будет отличатся от моего. Но так как слово FOON мы не будем пытаться исполнить, да ещё в шеллкоде целый килобайт nop’ов. Мы к полученному адресу прибавим 200. Кто не знает как, может просто использовать виндозный калькулятор в HEX режиме. 0хE1CE04BC + 0х200 = 0хE1CE06BC. Остался последний штрих. В shatter в WPARAM введите чё хотите, в LPARAM полученный адрес(у меня это E1CE06BC). Жмите WM_TIMER. Если всё сделано правильно, мы получим шелл на 123 порту с правами системы. Если чё не получается, пишите, помогу. На этом всё.





    Михаил Чернов