botnet

захват чужих ботнетов

крис касперски ака мыщъх, no-email

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

Термин бот (bot) произошел от IRC, где он означал специального робота, висящего на канале и автоматически раздающего варез всем желающим. В чем достоинства такого подхода по сравнению с тем же FTP например? Поднять FTP-сервер не проблема, но вот как донести его адрес до народа? А для подключения к боту достаточно соединится с IRC-сервером и зайти на соответствующий канал. Управлять ботами через IRC на самом деле очень удобно. Вместо того, чтобы пыхтеть над системой удаленного управления, можно использовать уже готовые компоненты и IRC-сервера. Неудивительно, что создатели червей взяли эту технику на вооружение.

Проникнув на атакуемую машину, червь устанавливает на ней бота, и этот бот через определенные промежутки времени (или при каждом выходе в сеть) стучится на один или несколько IRC-серверов и терпеливо ждет распоряжений со стороны атакующего, часто называемого Мастером или Магом. Машина с установленным ботом называется зомби (zombie) или дроном (drone). Армия дронов, управляемая Мастером, образует ботнет (botnet — сеть ботов). Некоторые из таких сетей содержат сотни тысяч узлов и представляют собой довольно мощное оружие, способное задавить кого одного. Пусть каждая дрон имеет 33 Кбитный канал (дронами обычно становятся домашние компьютеры, за «здоровьем» которых никто не следит), тогда эффективная пропускная способность стотысячного поголовья дронов достигает 3 Гбит/с, что вполне достаточно, чтобы перегрузить любой корпоративный сервер, большинство из которых висят на T1, а T1 это всего лишь 1.5 Мбит/с.

Обычно ботнеты организуются для рассылки спама, накрутки баннеров, похищения номеров кредитных карт и других подобных целей. Создать свою собственную армию дронов может далеко не каждый, и возникает естественный соблазн захватить уже раскрученную сеть или если не захватить, то хотя бы воспользоваться ее услугами. Естественно, это противозаконно и вообще маст дай, поэтому, мы будем действовать строго в исследовательский целей, во всем придерживаясь УК.

Рисунок 1 структура типичного ботнета

Для захвата чужих ботнетов нам потребуется постоянное соединение с Интернетом (например, DSL), но на худой конец сойдет и unlimiteddial-up. Еще нам понадобиться непатченная W2K, играющая роль приманки. Большинство червей атакуют именно ее. Чтобы самому не стать жертвой атаки, приманку следует расположить либо на отдельной машине, либо на виртуальном узле, работающем под управлением VM Ware.

Наблюдение за деятельностью атакующих и грабеж проходящего мимо трафика возьмет на себя любая система обнаружения вторжений, ну или на худой конец персональный брандмауэр типа SyGate PersonalFirewall 4.х. Для некоммерческого применения он бесплатен. Более поздние версии не позволяют грабить содержимое пакетов без регистрации, и для наших целей уже не подходят. Еще потребуется антивирусный сканнер, нацеленный на поиск AdWare. Я рекомендую MicrosoftAntiSpyware, бету-версию которого распространяется на свободной основе. Не надо плеваться. Да, Microsoft! Да, тормозит как бегемот и ведет себя как слон в посудной лавке, но другие работают еще хуже!

Исследование внутренностей червя не обходится без отладчика и дизассемблера, в роли которых обычно выступают Soft-Ice и IDA PRO. Это коммерческие продукты, но их легко найти в Осле, Sharez'е, IRC или на любом хакерском диске.

Управление ботнетом обычно осуществляется через IRC, а, значит, мы должны обзавестись ISSR или другим клиентом, распространяемым в исходных текстах и поддающиеся доработке. Популярный mIRC к таковым не относится и идет лесом, то есть на хрен. Еще нам потребуется богатый опыт работы с IRC, без которого в ботнет лучше не соваться.

Рисунок 2 внешнийвид Microsoft AntiSpyware Beta 1

Устанавливаем на компьютер VM Ware, если только не сделали этого ранее, устанавливаем заплатку Кости Кортчинского (см. врезку «дообработка VM-Ware»), создаем новую виртуальную машину (File→NewVirtualMachine), и открываем ей доступ в Интернет. Это можно сделать либо через Bridge (Мост), либо через NAT (NetworkAddressTranslation – Трансляция Сетевых Адресов). В случае моста виртуальная машина просто подключается к локальной сети как обычный Ethernet-узел, имеющий свой IP и с точки зрения атакующего ничем не отличающийся от всех остальных узлов сети. Естественно, виртуальный IP должен быть предварительно выкуплен у провайдера, иначе у нас ничего не получится. Провайдеры довольно неохотно раздают IP-адреса, поэтому установка NAT намного предпочтительнее. В этом случае, снаружи торчит лишь ваш собственный IP-адрес (неважно динамический или нет), а все поступающие на него запросы перенаправляются на виртуальный узел и атакующий даже не подозревает с кем он реально имеет дело.

Впрочем, все порты транслировать совершенно необязательно и можно ограничиться лишь четырьмя из них: 135/TCP (RPC), 139/TCP (NetBIOSSessionService), 445/TCP (Microsoft-DS) и 137/UDP (NetBIOSNameService). Большинство червей ломятся именно сюда. Чтобы задействовать NAT в настойках виртуальной машины выбираем: VM→Setting→NIC→NAT:Usedtosharethehost'sIPaddress. Затем входим в EditVirtualNetworkSettingNATEditPortForwarding, нажимаем «Add» и поле «Hostport» вводим порт, который мы ходим транслировать, например, «135». В графе «ForwardedIPAddress» указывается IP-адрес виртуального адаптера и целевой порт, совпадающий с транслируемым портом.

Еще необходимо оттранслировать порты, используемые ботнетами для удаленного управления, иначе Мастер просто не сможет дотянется до дрона. Эти порты не стандартизированы и у каждого ботнета они свои. Чаще всего используются: 6667 (IRC), 903 (NetDevilBackdoor), 2745 (BagleBackdoor), 3127 (MyDoomBackdoor), 6129 (DamewareRemoteAdmin) и некоторые другие.

Устанавливаем на виртуальную машину девственно-чистую W2K, водружаем поверх нее SyGatePersonalFirewall, приказывая ему грабить весь трафик (ToolsOptionsLogCaptureFullPacket, Maximumlogfilesizeis 1.048.576 KB — конкретный размер лога выбирается по вкусу. Здесь действует принцип — лучше перебрать, чем недобрать, иначе критически важные пакеты будут безвозвратно утеряны). Чтобы брандмауэр не надоедал постоянными запросами, в меню Security выбираем «AllowAll», что означает «дозволено все». Затем устанавливаем MicrosoftAntiSpyware и дезактивируем Защиту Реального Времени (OptionsSettingReal-TimeProtection). Нам он будет нужен только как сканер. Противодействие червям не входит в наши планы.

Вот и все. Открываем пиво, входим в Интернет и терпеливо ждем, когда какой-нибудь червь не заползет на наш компьютер. Долго ждать не придется. Каждый день на мой компьютер залазит по меньшей мере пара-тройка червей, многие из которых являются ботами. Известные черви опознаются сканером, неизвестные выявляются просмотром логов брандмауэра (естественно, нужно знать основы TCP/IP чтобы их дешифровать).

Рисунок 3 ловушка для червя

Просматривая трафик, награбленный брандмауэром (LogsTraffic/PacketLogs), ищем соединения, установленные с IRC-сервером, по умолчанию расположенном на 6667 порту. Среди прочей муры в них должны находится строки PASS, NICK, USER и JOIN, посредством которых червь подключается к «своему» каналу. Приблизительно это выглядит так:

← :mozilla.se.eu.dal.net NOTICE AUTH :* Looking up your hostname… ← :mozilla.se.eu.dal.net NOTICE AUTH :* Checking Ident

← :mozilla.se.eu.dal.net NOTICE AUTH :* Found your hostname ← :mozilla.se.eu.dal.net NOTICE AUTH :* No Ident response

→ PASS drone_pass

→ NICK [urX]-3011331

→ USER drone 0 0 :drone

← : mozilla.se.eu.dal.net NOTICE [urX]-3011331

←:* If you are having problems connecting due to ping timeouts, please type ←/quote pong ED322722 or /raw pong ED322722 now ← PING :ED322722 → PONG :ED322722 ← : mozilla.se.eu.dal.net 001 [urX]- 3011331 :Welcome to ← the mozilla.se.eu.dal.net IRC Network [urX]- 3011331!drone @nicetry ← : mozilla.se.eu.dal.net 002 [urX]- 3011331 :Your host is mozilla.se.eu.dal.net, ← running version Unreal3.2-beta19 ← : mozilla.se.eu.dal.net [urX]- 3011331 ← :This server was created Sun Feb 8 18:58:31 2004 ← mozilla.se.eu.dal.net 004 [urX]- 3011331 mozilla.se.eu.dal.net ← Unreal3.2-beta19 iowghraAsORTVSxNCWqBzvdHtGp lvhopsmntikrRcaqOALQbSeKVfMGCuzN Листинг 1 протокол обмена червя с IRC-сервером Чтобы подчинить червя себе, Мастер должен выполнить команду аутентификации (обычно «auth») и передать секретный пароль, немедленно становящийся достоянием нашей брандмауэра. Остается зайти на канал и призвать всех червей к себе. Некоторые ботнеты допускают смену пароля, что позволяет сместить прежнего Мастера с трона, некоторые носят жестко прошитый (hardcoded) пароль в себе и единолично завладеть таким ботнетом уже не удастся. С одной стороны это плохо, с другой — хорошо. Как узнать какие команды поддерживает червь? Полный ответ дает только дизассемблирование, однако, на первых порах можно ограничиться просмотром HEX-дампа. Команды управления представляют собой обычные ASIIZ-строки, записанные прямым текстом, но увидеть их не так-то легко! Большинство червей упакованы хитроумными полиморфными генераторами, автоматических распаковщиков для которых не существует. Ну не существует и не надо! Берем любой дампер (ProcDump, Lord PE) и дампим червя в живую. Конечно, полученный PE-файл с вероятностью близкой к единице окажется неработоспособен (как минимум необходимо восстановить таблицу импорта и сделать кучу других мелких дел). Фактически это труп червя, но, для наших целей он вполне подойдет. Набор команд разнится от червя к червю, в частности, Agobot может: сменить свой ник; сообщить конфигурацию системы; сделать себе харакири; запустить любой исполняемый файл; определить IP-адрес и доменное имя заданного узла; подключиться/отключится от IRC-сервера; зайти на канал и т. д. Почти все черви используют слегка модифицированный протокол IRC и потому обычные IRC-клиенты для управления ботнетом непригодны, но ведь не писать же своего собственного, верно? Возьмем готового клиента, распространяемого в исходных текстах, например IRSSI, и слегка доработаем его «напильником». Как минимум необходимо вырезать текстовую строку «irssi 0.89 runningonopenbsdi368» и вырубить все команды автоматичесокго ответа (autoresponsetriggeringcommands), иначе Мастер легко обнаружит наше присутствие на канале и либо поставит бан, либо армия дронов запигует наш узел до смерти. Захват чужих ботнетов — это действительно рискованно и очень опасно, поэтому, без предварительной подготовки в этот дремучий лес лучше не ходить. Рисунок 4 просмотр логов брандмауэра на предмет поиска червя ===== »> врезка: самый популярный ботнет ===== Первое место по популярности занимает Agobot, насчитывающий свыше пятисот (!) своих модификаций. Это довольно продвинутый червь, написанный на приплюснутом Си с четко выраженной модульной структурой, значительно упрощающий наращивание функциональности червя. Agobot использует кросс-платформенную библиотеку libpcap для перехвата трафика и PCRE (PerlCompatibleRegularExpressions — Perl-Совместимые Регулярные Выражения) для обработки перехваченного контента (например, поиска паролей, номером кредиток и т. д.). Внутри червя обнаруживается целый «букет» антиотладочных приемов. Agobot распознает большинство отладчиков (SoftICE, OllyDbg) и виртуальных машин (VMWare, VirtualPC) отказываясь работать в их присутствии. Кроме того, он может прятаться в NTFS-потоках, скрывая факт своего присутствия от многих примитивных ревизоров. Agobot был написан конкретным немецким пареньком по кличке Ago, так же известного под именем Wonk, арестованным в мае 2004 года за «компьютерные преступления». Так хакерское сообщество потеряло одного из самых талантливых своих представителей. Сейчас он сидит в тюрьме, а его творение гуляет на свободе, распространясь в исходных текстах по лицензии GPL (отсюда и огромное количество модификаций). Рисунок 5 червь Agobot, загруженный в дизассемблер ===== »> доработка VM-Ware ===== Известно по меньшей мере три пути обнаружения VM-Ware. Во-первых, по оборудованию. Виртуальные машины несут на своем борту довольно специфический набор железа, практически не встречающийся в «живой природе»: а) видеокарта VMwareInc [VMwareSVGAII] PCIDisplayAdapter; б) сетевая карта: AdvancedMicroDevices [AMD] 79c970 [PCnet 32 LANCE] (rev 10); в) жесткие диски: VMwareVirtualIDEHardDrive и VMware SCSI Controller. Опросив конфигурацию оборудования, червь сразу поймет где он. Во-вторых, виртуальные сетевые карты имеют довольно предсказуемый диапазон MAC-адресов, а именно: 00-05-69-xx-xx-xx, 00-0C-29-xx-xx-xx и 00-50-56-xx-xx-xx. Червь достаточно выполнить команду «arp -a», чтобы распознать наш план. В-третьих, VM-Ware имеет коварный backdoor, оставленный разработчиками для служебных целей и управляемый через порт 5658h, при этом в регистре EAX должно содержатся «магическое» число 564D5868h. Ниже приведен фрагмент кода червя Agobot, определяющий версию VM-Ware: mov eax, 564D5868h ; VMWARE_MAGIC mov ecx, 0Ah ; Get VMware version mov edx, 5658h ; VMWARE_PORT in eax, dx Листинг 2 определение версии VMWare Для маскировки виртуальной машины, Костей Кортчинским (KostyaKortchinsky) был написан специальный падч, изменяющий идентификационные строки оборудования, MAC-адреса и магический номер backdoor'а. ===== »> врезка: где брать IP-адреса в P2P сетях ===== Слепое сканирование IP-адресов которым занималось первое поколение червей сейчас уже непопулярно. Это слишком заметно и катастрофически непроизводительно. Вот поэтому некоторые черви предпочитают черпать IP-адреса из файлообменных сетей (например, eDonkey). Достаточно установить P2P клиента, выложить несколько файлов с заманчивыми названиями («голая анжелика монс», например) и юзеры потянутся за ними изо всех уголков сети. Сколько из них будет дырявыми можно даже не говорить! Поэтому, прежде чем качать порно из Осла обязательно сходите на Windows Update и установите все заплатки, которые только там есть. ===== »> врезка: полезные ссылки ===== - www.honeynet.org: - официальный сайт некоммерческой исследовательской группы TheHoneynetProject, специализирующийся на червях. Это лучший источник информации по ботнетам на сегодняшний день! - Know your Enemy: - офф-лайновый архив статей по внутреннему устройству червей и ботнетов с кучей технических подробностях, интересных любому хакеру (на английском языке): http://www.honeynet.org/misc/files/papers.tar.gz__; - vmpatch: - заплатка для VM-Ware, скрывающая ее присутствие от глаз червя, без этого Agobot и многие другие ботнеты просто не будут работать! http:honeynet.rstack.org/tools/vmpatch.c; - IRSSI: - бесплатный консольный IRC-клиент, распространяемый в исходных текстах: http:irssi.org/__; ===== »> врезка: где найти исходные тексты Agobot'a? ===== Рисунок 6 исходные тексты ботнетов проще всего найти Осле ===== заключение ===== Что можно сделать с захваченным ботнетом? Самое благородное — отдать дронам команду на самоуничтожение, если, конечно, нам не жаль расставаться с властью и богатством. Ботнет — это выносливая лошадка, готовая распространять варез, видеоклимы, mp3 и т. д. Ботнеты, насчитывающие десятки и сотни тысяч машин, здорово помогают при вскрытии паролей методом тупого перебора. Дроны, снабженные микрофоном, сотовым телефоном или на худой конец обыкновенным модемом, можно превратить в подслушивающие устройство (про web-камеры мы вообще промолчим). Масса идей по управлению дронами содержится в новелле Джона Варли «PressEnter», как раз и описывающую такой ботнет. Правда, конец, повествования трачен, так что прежде чем ложить лапы на клавиатуру, давайте задумается о том, к чему все это приведет.