Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #99, МАРТ 2007 г.

Отлов сетевых тварей

ShadOS

Хакер, номер #099, стр. 088

(shados@real.xakep.ru, http://hellknights.void.ru)

Настройка и использование malware honeypot

Многие знают, что такое honeypot. Некоторые владеют информацией, как его поставить на свою машину. Но лишь немногие в курсе, какую пользу может принести malware honeypot. А ведь с его помощью ты легко можешь приручить злых ботов и даже увести целый ботнет! Как? Очень просто, читай об этом дальше :).

Общая теория

Не перелистывай страницу журнала, если не знаешь, что такое malware honeypot или botnet :), я сейчас все объясню. Чаще всего под honeypot для malware подразумевается low-interaction honeypot, то есть ханипоты слабого и среднего уровня взаимодействия и эмуляции «среды существования» червя, предназначенные для отлова всякого рода сетевой нечисти, в том числе еще неизвестных модификаций уже известных червей. Первая реализация включает в себя использование «песочницы» (sandbox). «Песочница» имитирует операционную систему и запускает в ней исполняемый файл, после чего анализирует изменения, характерные для вредоносных программ. После исполнения программы антивирусник сканирует содержимое «песочницы» на присутствие каких-либо изменений, которые можно квалифицировать как наличие вредоносной программы, и выдает подробный отчет пользователю.

Существует, конечно, достаточно известная техника отлова сетевых червей, которую уже можно отнести к системе высокого уровня взаимодействия. Банально ставится виртуальная машина (vmware, quemu, bochs etc), в которую помещается девственно чистая Windows с доступом в интернет, как вариант подключается к локальной сети в виде etheet-узла со своим IP (естественно, с этим возникает куча проблем - договор с провайдером и т.д.) либо вообще воспользоваться NAT. Затем наружу транслируем порты вроде RPC DCOM(135), LSASS(445) и т.д. и, соответственно, порты для централизованного RAT-сервера (если ботмастер управляет червем по HTTP - чаще всего 80 порт, если по IRC - по большей части 6667). Инфу конкретно об используемых backdoor-портах самых распространенных червей можно найти на viruslist.com, хотя с этим тоже могут возникнуть проблемы, ввиду того что каждый мастер волен повесить систему управления HTTP или IRC-ботнетом на любой порт, тогда мы можем нацелиться на отлов только определенного вида заразы. Далее идет банальный снифинг трафика и мониторинг сетевой активности в системе, ожидающий команды auth от ботмастера и влекущий за собой угон ботнета (об этом уже писал Крис Касперски в одном из номеров «Хакера»). Главное отличие этой реализации от первых двух заключается в том, что она не столь автоматизирована и требует постоянного вмешательства наблюдателя, хотя и цели преследуются другие. Поэтому вышеназванный метод сразу идет лесом: в провайдере, на сеть которого осуществляется атака, никто не будет использовать столь ограниченную реализацию, да и угонять ботнет вряд ли кто из админов станет. Я, главным образом, хочу прояснить ситуацию с тем, как именно это организуется там, в админской обители. Здесь речь идет о более масштабных реализациях, которые создают виртуальные хосты в заданной подсети, а далее автоматически (ну или вручную) блокируют заданные адреса для всей подсети провайдера. Конечно же, тема vmware и ей подобных не нова, на эту тему существует много материалов. Далее продолжим без упоминания этого метода.

Пару слов об обнаружении ханипотов

А что насчет обнаружения и борьбы с подобными ловушками со стороны червя? О методах борьбы с ханипотами на основе vmware и подобных сказать особо нечего, точнее, не буду повторяться. Антиотладка, обнаружение виртуальной машины, «антинаживки» и прочие классические методы, о которых написано достаточно много; чего стоит только один раздел вирусологии на wasm.ru. Так как принцип работы ханипота заключается в эмуляции среды существования вирусов, червяков и пр., то, если в его роли используется реальный хост, боюсь, идентифицировать его будет весьма проблематично. Если же эта самая виртуальная среда в виде хоста с бажными демонами эмулируется с помощью, например, honeyd, то обнаружить его можно, анализируя отличия в поведении его TCP/IP-стека и скриптов, создающих видимость работы на нем различного рода серверного ПО. Так, например, есть сканер winnie, который может определять honeyd вплоть до версии 1.0.

Вот тут лежит статья по этой теме: http://jon.oberheide.org/files/winnie.pdf. Сам Винни-Пух лежит тут: http://jon.oberheide.org/projects/winnie.

Пожалуй, эта тема немного тухлая (точнее, применима она только к honeyd вплоть до версии 1.0), так как основана она на несоответствии реализации TCP/IP-стека honeyd RFC. В более новых версиях этот баг уже пофиксили. Подробнее об этом можно почитать в вышеназванных источниках.

Продолжаем разговор

Надеюсь, до сих пор я ничего нового тебе не поведал. Далее речь пойдет о достаточно простом в использовании, распространенном малварь-ханипоте для *nix-систем, о котором во всемирной паутине информации очень мало. Про honeyd писать, конечно, не буду - тема избитая (сразу же бежим на www.securitylab.ru). Расскажу лучше о пакете nepenthes с примером его настройки и установки для моей любимой системы Gentoo Linux. Кстати, интересующимся советую посетить сайт www.mwcollect.org - это что-то вроде проекта коллекции сетевой заразы, собранной не без помощи nepenthes и ее старшего брата HoneyBow Sensor. HoneyBow - это ханипот высокого уровня имитации (или взаимодействия, если переводить дословно), в отличие от nepenthes. О HoneyBow, возможно, я расскажу следующий раз, так как рамки статьи не позволяют рассмотреть мне все системы. Что же, продолжим.

Червь или бот? Проблемы их обнаружения

Для начала стоит отметить несколько важных фактов. Червь и бот ведут себя, на первый взгляд, абсолютно одинаково: чаще всего целями атаки заразы являются машины под управлением Windows; поиск целей производится путем сканирования различных диапазонов сетей на предмет машин, использующих уязвимые сервисы и приложения. Конкретно уязвимый сервис обнаруживается по закрепленному за ним порту, после чего происходит попытка инфицирования. Главное различие между ботом и червем – это то, что бот имеет некоторый центральный канал управления, который посылает команды на инфицированный компьютер; чаще всего для этого используется IRC- или HTTP-протокол. Реализация децентрализованных ботнетов или ботнетов с нетрадиционными методами управления (ICQ, Jabber) обычно дальше концепта не доходит, ввиду того что malware-разработчикам очень часто не хватает то ли умения, то ли желания создавать что-то новое – это явно не тот случай, когда лень является двигателем прогресса. Подробнее об нестандартных методах управления ботнетом можно почитать на сайте Hell Knights Crew в разделах Articles и Research Blog. Действуя только по приказу, бот может вести себя он очень даже тихо в течение достаточно длительного периода, и тогда он будет незаметен ни в системе, ни по загрузке канала, ни по сигналам IDS, обнаруживающей сканирование портов в подсети. В общем случае команда может выглядеть так:

Команды, генерируемые ботом

#(3 - 1239214) [2007-01-07 03:39:49.297] [snort]

BLEEDING-EDGE IRC Trojan Reporting (Scan)

IPv4: yyy.yyy.112.37 -> zzz.zzz.31.37

hlen=5 TOS=0 dlen=168 ID=18140 flags=0 offset=0 TTL=128 chksum=56571

TCP: port=3023 -> dport: 8000 flags=***AP*** seq=1493328911

ack=511871482 off=5 res=0 win=64331 urp=0 chksum=51364

Payload: length = 128

000 : 50 52 49 56 4D 53 47 20 23 61 73 74 72 6F 20 3A PRIVMSG #astro :

010 : 5B 53 43 41 4E 5D 3A 20 52 61 6E 64 6F 6D 20 50 [SCAN]: Random P

020 : 6F 72 74 20 53 63 61 6E 20 73 74 61 72 74 65 64 ort Scan started

030 : 20 6F 6E 20 yy yy yy 2E yy yy yy 2E 78 2E 78 3A on yyy.yyy.x.x:

040 : 34 34 35 20 77 69 74 68 20 61 20 64 65 6C 61 79 445 with a delay

050 : 20 6F 66 20 35 20 73 65 63 6F 6E 64 73 20 66 6F of 5 seconds fo

060 : 72 20 30 20 6D 69 6E 75 74 65 73 20 75 73 69 6E r 0 minutes usin

070 : 67 20 32 30 30 20 74 68 72 65 61 64 73 2E 0D 0A g 200 threads...

Хотя в другом случае бот может получить команду на поиск уязвимых web-приложений (например, Mambo) и скриптов, например, через всеми любимый Google (ну или тот же Yahoo). И тогда IDS будет молчать как рыба:

"PRIVMSG #ch :[GOOGLE] Trying to exploit http://www.example.com/index.php"

Подводим промежуточные итоги. Остается отловить образец заразы во время факта заражения и принять меры, пока сетевая нечисть не начала действовать (например, на нервы) и пока гигабайты трафика не полились наружу в поисках новых юнитов для ботнета в виде DDoS на какой-нибудь несчастный интернет-ресурс или тьмы нескончаемых предложений купить что-нибудь для увеличения пениса, выучить английский, уклониться от налогов и спать спокойно… Уж тогда-то будет совсем поздно, а твой любимый snort сможет только верещать как резаный поросенок. Страшно? Мне тоже.

Nepenthes

Как уже было сказано, nepenthes - это honeypot низкого уровня имитации, работающий под управлением *nix-серверов и обеспечивающий достаточную функциональность для того, чтобы одурачить вредоносную начинку червя или бота, эмулируя стандартные Windows-сервисы. Nepenthes пытается загрузить вредоносный код заразы в свое хранилище, затем отправляет его на анализ в специальную «песочницу» коммерческого продукта Norman Sandbox, который эмулирует более 3000 WinAPI, инжектирование в процесс, многопоточность, множество сетевых протоколов (POP3, DNS, IRC, HTTP, ICQ, P2P) и т.д. По истечении короткого промежутка времени системный администратор получает в ответ готовый отчет о действиях малвари на свой электронный адрес. После заражения атакующий зловред может попросить nepenthes соединиться с некоторым адресом по некоторому порту, забиндить порт в системе, выполнить какую-либо команду в командной оболочке, скачать что-либо вкусное по заданному url или загрузить что-либо, используя некоторый механизм передачи файлов (link, blink, mydoom и тому подобные). Если зараза просит забиндить порт или запустить connectback, эмулятор выполняет все затребованные действия. В любом случае конечной целью сенсора будет загрузка чего-либо «вкусненького» в свое чрево для последующего анализа, причем это может быть не обязательно тело червя или self-spereading бота. Самым вкусным здесь будут shell-коды.

Но это еще не все, ведь можно и ботнет угнать, руководствуясь отчетом Norman Sandbox. Nepenthes получил свое имя достаточно метко – он назван в честь хищного растения-мухолова Nepenthes. Вдаваться в тонкости ботаники я не буду; если тебе действительно интересно, отправляйся на http://en.wikipedia.com за более подробной информацией. Конечно, тебе уже не терпится потрогать этот пакет своими руками. Пребилды или преконфигурированные пакеты есть для систем Gentoo, Debian, FreeBSD, OpenBSD.

Для пользователей Debian требуется всего-навсего выполнить apt-get install nepenthes. А для Gentoo Linux - emerge nepenthes. Для установки требуется следующее:

shados # emerge -pv --deep nepenthes

These are the packages that would be merged, in order:

Calculating dependencies... done!

[ebuild N ] net-libs/adns-1.3 0 kB

[ebuild N ] net-analyzer/nepenthes-0.2.0 USE="(-selinux)" 0 kB

Total: 2 packages (2 new), Size of downloads: 0 kB

Основными зависимостями для Linux являются библиотеки:

*libcurl (библиотека утилиты curl для передачи файлов по URL-соглашению);

*libmagic (для определения типа файла);

*libpcre (использование Perl-совместимых регулярных выражений);

*libadns (для асинхронного резолвинга DNS);

*libcap (для использования возможностей ядра);

*libpcap (для дампа сетевых пакетов).

Помимо прочего, для модуля honeytrap в Linux понадобится iptables, соответственно, для FreeBSD – ipfw. Подробнее об установке зависимостей, да и вообще об установке, в том числе для MacOS X и cygwin под Windows можно прочитать в Readme по nepenthes на официальном сайте.

Теперь перейдем к настройке. Первым делом необходимо изменить некоторые параметры в файле /etc/nepenthes/nepenthes.conf, раскомментировав строку «"submitnorman.so", "submit-norman.conf", ""». Это позволит нам воспользоваться Norman Sandbox для получения копий результатов run-time анализа загруженных бинарников на твою электронную почту. Содержимое submit-norman.conf должно выглядеть примерно так:

submit-norman

{

// this is the address where norman sandbox reports will be sent

email "shados@real.xakep.ru";

};

Естественно, вместо моего адреса здесь должен быть твой. Далее, добавим nepenthes в автозагрузку на уровень default (для Gentoo):

shados # rc-update add nepenthes default

* nepenthes added to runlevel default [OK]

shados # /etc/init.d/nepenthes start

* Starting nepenthes ... [OK]

Теперь сервис nepenthes будет автоматически стартовать при каждом перезапуске системы. Сразу после запуска в конфигурации по умолчанию nepenthes должен слушать большое количество TCP-/IP-портов, вроде тех, что указаны ниже.

shados # netstat -pa | grep nepenthes

tcp 0 0 *:imaps *:* LISTEN 7596/nepenthes

tcp 0 0 *:pop3s *:* LISTEN 7596/nepenthes

tcp 0 0 *:3140 *:* LISTEN 7596/nepenthes

tcp 0 0 *:epmap *:* LISTEN 7596/nepenthes

tcp 0 0 *:5000 *:* LISTEN 7596/nepenthes

tcp 0 0 *:nameserver *:* LISTEN 7596/nepenthes

...

Вывод урезан для удобства, но среди всех открытых портов ты обязательно обнаружишь твои любимые 445, 135, 3140, если, конечно, они чем-нибудь не заняты (например, 135 – samba). Поэтому для целей ханипота желательно использовать выделенную машину, а все явно светящиеся порты, не относящиеся к эмуляции Windows, необходимо извне прикрыть (-j DROP) с помощью iptables, так как они могут выдать honeypot с ушами при обычном сканировании nmap'ом. Но об этом позже.

Будем считать, что теперь все готово к использованию, так как с остальными мелкими нюансами ты сам вполне сможешь разобраться, обложившись документацией и дотошно вкуривая man nepenthes и man nepenthes.conf. Если все свои изыскания ты проводишь в интернете, а не в маленькой локалке, то через несколько минут сенсор nepenthes запишет в /var/log/nepenthes/logged_downloads и /var/log/nepenthes/nepenthes.log первую информацию (в зависимости от настройки ведения логов). Например, в logged_downloads можно будет увидеть следующие записи.

shados # tail -n 3 ./logged_downloads

[2007-01-09T10:06:52] xxx.xxx.78.158 -> yyy.yyy.136.243 tftp://xxx.xxx.78.158/config.exe

[2007-01-09T11:47:19] xxx.xxx.137.89 -> yyy.yyy.136.243 tftp://xxx.xxx.137.89/ctfmom.exe

[2007-01-09T12:39:07] xxx.xxx.144.212 -> yyy.yyy.136.243 ftp://1:1@xxx.xxx.144.212:29154/eraseme_35862.exe

Надеюсь, их смысл здесь вполне понятен. Далее админу самому решать, блокировать ли эти адреса или собирать коллекцию заразы, которая приходит с них. Все загруженные файлы хранятся в папке /var/lib/nepenthes/binaries с именами в виде их md5-сумм:

shados # ls -lah

-rw-r--r-- 1 nepenthes nepenthes 1.3M Dec 25 05:07 fa96d82f8a00d32ed140641153714715

-rw-r--r-- 1 nepenthes nepenthes 94K Jan 4 01:42 fdb99325e908b93da353cd2661823b7e

-rw-r--r-- 1 nepenthes nepenthes 57K Dec 25 02:52 ff211ee0d9313bdaa1cdd9540955bd19

...

Каждый такой файл прямиком отправляется в «песочницу» к Норману ;), а в качестве отчета приходит письмо следующего содержания:

Отчет для IRC-бота Backdoor.Win32.Rbot.gen

nepenthes-eac5fd7b9d8172ecd1fc1a5d950e441e-MSSDEV.EXE : W32/Spybot.gen4 (Signature: W32/Spybot.BDAU)

[ General information ]

* File length: 141824 bytes.

* MD5 hash: eac5fd7b9d8172ecd1fc1a5d950e441e.

[ Changes to filesystem ]

* Creates file C:WINDOWSSYSTEM32MSSDEV.EXE.

* Deletes file 1.

[ Changes to registry ]

* Creates value "iexplorers"="C:WINDOWSSYSTEM32MSSDEV.EXE" in key "HKLMSoftwareMicrosoftWindowsCurrentVersionRun".

* Creates value "iexplorers"="C:WINDOWSSYSTEM32MSSDEV.EXE" in key "HKLMSoftwareMicrosoftWindowsCurrentVersionRunServices".

* Creates key "HKCUSoftwareMicrosoftOLE".

* Sets value "iexplorers"="C:WINDOWSSYSTEM32MSSDEV.EXE" in key "HKCUSoftwareMicrosoftOLE".

[ Network services ]

* Looks for an Internet connection.

* Connects to "irc.someserver.com" on port 1982 (TCP).

* Connects to IRC Server.

* IRC: Uses nickname ezkie.

* IRC: Uses useame ezkie.

* IRC: Joins channel #<ИМЯ КАНАЛА> with password <ПАРОЛЬ>.

* IRC: Sets the usermode for user ezkie to +i-x.

* IRC: Uses nickname e.

* IRC: Sets the usermode for user e to +i-x.

[ Process/window information ]

* Creates a mutex 1337bot.

* Will automatically restart after boot (I'll be back...).

[ Signature Scanning ]

* C:WINDOWSSYSTEM32MSSDEV.EXE (141824 bytes) : W32/Spybot.BDAU.

Как видишь, для того чтобы проанализировать бота не требуется никаких специальных знаний ассемблера и кропотливой работы с отладчиком, но она определенно более продуктивна, тем более что некоторые боты, наподобие Agobot, применяют антиотладочные приемы для защиты или упакованы хитрым протектором. Хотя и здесь можно сделать финт ушами (или ход конем, смотря кому что нравится), просто отправив полученный бинарник на изучение в www.virustotal.com – бесплатному сервису сканирования бинарников множеством различных антивирусных продуктов. Однако столь подробный и полный отчет получить уже не удастся.

Теперь пару слов в цифрах. В течение ровно одного месяца я коллекционировал заразу, так что набрал аж 83 скомпилированных файла и ~30-40 различных шелл-кодов. При этом около 40% бинарников Norman Sandbox распознать не смог – сказались те самые защиты/антиотладка и/или фазы Луны в четвертую пятницу месяца. Пришлось проверять весь букет Кашперовским.

Вместо заключения

Ввиду малого объема статьи, я смог рассказать тебе о том, как можно научить червя обнаруживать nepenthes, как постараться этого не допустить, что такое липкий ханипот для сетевых тварей и почему он может задержать вирусную эпидемию. А еще о том, как наши спецы из Hell Knights занимались реверсингом того самого бота из листинга, и много еще о чем. Но спешу тут же тебя обрадовать – все это ты сможешь прочесть в полной версии статьи на hellknights.void.ru и на моей хомпаге shados.0x48k.cc. К выходу журнала я как раз завершу свои изыскания. Только вот это уже совсем неважно. Раз ты уже знаешь, что такое nepenthes, то можешь сам смело начинать отлавливать и исследовать сетевую заразу – возможно, и нам будет чему у тебя поучиться.

WWW

hellknights.void.ru - сайт моей команды Hell Knights – Darkside ResearcherZ, где ты сможешь найти полную версию моей статьи.

shados.048k.cc - мой персональный сайт, на нем ты также сможешь найти множество статей.

0x48k.cc - форум Darkside Researchers, где тебя ждет информация от malware-разработчиков и исследователей.

nepenthes.mwcollect.org - официальный сайт nepenthes.

sandbox.norman.no - сайт Norman Sandbox, пакета для run-time анализа зловредов.

nepenthes.mwcollect.org/documentation - документация по nepenthes от разработчиков.

www.virustotal.com - бесплатный сервис для анализа бинарников различными антивирусами.

DVD

На диск, к сожалению, по идейным соображениям, мы не смогли выложить всю коллекцию заразы, которую я собрал, зато там ты найдешь исходники nepenthes и статистику сканирования собранного malware от KAV и clamav.

Waing

Внимание! Хранение бинарников вирусов может выйти тебе боком - мало ли до чего ребята в погонах докопаются. Они не будут разбираться, в каких целях ты их коллекционируешь. Мы то с тобой знаем, что исключительно в исследовательских! Будь осторожен. Чти УК РФ.

Содержание
ttfb: 5.9030055999756 ms