18.11.2014 Views

JIT SPRAY АНАЛИЗ TDSS - Xakep Online

JIT SPRAY АНАЛИЗ TDSS - Xakep Online

JIT SPRAY АНАЛИЗ TDSS - Xakep Online

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

¹ 6<br />

РЕШЕНИЕ:<br />

ЗАДАЧА:ОБОЙТИ ФАЙЕРВОЛ, ИСПОЛЬ-<br />

ЗУЯ ICMP(PING)-ТОННЕЛЬ<br />

default.asp). Большинство из них занимаются тем, что инкапсулируют (с<br />

некоторыми изменениями, конечно) пакеты TCP в поле Data ICMP-сообщений.<br />

По идее все просто, но в реализациях много хитростей. Например,<br />

как упомянуто выше, TCP — надежный протокол, а ICMP — нет. В итоге<br />

Схема работы ICMP-прокси (тоннеля)<br />

Предположим, что мы пытаемся проникнуть в закрытую сеть и закрепиться<br />

на каком-нибудь из тамошних хостов. Последних в ней много, но доступа<br />

из внешней сети маловато: пару сервачков наружу, а ушастые юзеры<br />

все сидят за NAT’ом (один внешний IP, через который все и ползают).<br />

Таким образом, к ним с нашей стороны не подключиться. К тому же, доступ<br />

наружу обрезан: предположим только HTTP/HTTPS, да и то через прокси и<br />

к определенным сайтам. В общем-то, классическая ситуация для многих<br />

организаций. Но, как часто это бывает, хотя TCP/UDP-соединения во внешнюю<br />

сеть бдительные админчики фильтруют на файерволе, про такой<br />

протокол, как ICMP забывают (или оставляют для каких-то технических<br />

целей). Этим-то мы и можем воспользоваться :). Основная задача такова:<br />

наполнить ICMP-протокол необходимым функционалом для удаленного<br />

доступа к жертве (точнее ее к нам, если говорить о NAT’е). Напомню, ICMP<br />

(англ. Internet Control Message Protocol, RFC 792, 950) — это, как понятно<br />

из названия, межсетевой протокол управляющих сообщений. То есть<br />

такой сервисный протокол, во многом используемый для сообщения об<br />

ошибках в связи на сетевом (IP) и транспортном уровне(TCP/UDP) по модели<br />

OSI. Я уверен, что ты юзал его не раз, так как он и является основой<br />

такой вещи как ping. Да, когда ты пингуешь какую-нибудь машину, ты<br />

отправляешь ей ICMP-пакет с типом 8, а назад получаешь ICMP-пакет с<br />

типом 0.<br />

Протокол простой: инкапсулируется в IP-пакет, а содержит в себе всего<br />

4 поля. Поле «Type» и «Code» по 8 бит, контрольную сумму пакета — 16<br />

бит, дополнительное поле для некоторых типов и кодов — 32 бита. Далее<br />

поле Data — в общем-то, любые данные. Размер пакета может достигать<br />

64 Кб. Потому мы можем переносить достаточно приличные объемы<br />

информации за один запрос. Что для нас важно, ICMP — это ненадежный<br />

протокол, то есть мы не получаем ответ о доставке нашего сообщения<br />

(как, например, у TCP).<br />

Теперь к практике.<br />

Программок, которые наделяют ICMP, так сказать, возможностями передачи<br />

данных, полным-полно. Это и ptunnel, и itun, и ishell, и даже старенькая<br />

тулза от твоего любимого журнала — x-proxy (xakep.ru/post/16337/<br />

XÀÊÅÐ 09 /140/ 10<br />

корректность работы и производительность тулз невелика.<br />

Лучшей программой, вроде как, является ptunnel(cs.uit.no/~daniels/<br />

PingTunnel). Она все еще живет и развивается, к тому же есть версия под<br />

Windows (под которой обычно сидят все юзеры). Но начну я с несколько<br />

альтернативного решения. Имя ему — Ishell. По сути — это шелл, только<br />

на основе ICMP. То есть у него нет заморочек с передачей данных. Все в<br />

себе, так сказать, и взять можно на icmpshell.sourceforge.net.<br />

Качаем исходники и make’им их.<br />

У жертвы(192.168.0.1) запускаем сервер:<br />

./ishd<br />

А сами коннектимся:<br />

./ish 192.168.0.1<br />

Получаем шелл. Есть возможность настроить тип, идентификатор, размер<br />

ICMP-пакетов. Но это, в общем, не особо нужно. Из плохого: для начала —<br />

не работает под Win, а главное — требует коннекта от нас, то есть не дает<br />

возможности обойти NAT. Хотя сие можно обойти, хорошенько доработав<br />

исходнички и сделав backconnect.<br />

Вернемся к классическому ptunnel (by Daniel Stoedle). В статьях про<br />

него описывается в основном возможность «кражи» интернета,<br />

если у тебя доступен только ICMP. Вешаем сервер («ICMP-прокси»)<br />

где-нибудь в интернете, а сами из «закрытой» сети коннектимся к<br />

нему по ICMP. Сервер же уже реально соединяется с нужным нам<br />

ресурсом по TCP и передает копии «диалога». Как-то так :). Но мы<br />

воспользуемся им по-другому: совместим реверсовый meterpreter из<br />

Metasploit’а(MSF) с ICMP-туннелем. Описывать «установку» ptunnel<br />

не буду, но замечу, что для Win требуются библиотеки WinPCAP<br />

(winpcap.org/install/default.htm). Итак, представим, что IP жертвы<br />

— 192.168.146.1, а наш — 192.168.146.128. Создаем реверсовый<br />

meterpreter на себя самого на 5678 порт в виде exe-файла, который мы<br />

045

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!