Easy HackЗадача: Отредактировать exe’шник с помощью Ollydbg.РешениеИтак, предположим, у нас есть какая-то софтина, чей функционал нам хотелось бы изменить. Причин такому желанию может быть много. Например, убрать проверку о регистрации программы, то есть кракнуть. Конечно, модификация exe’шника — не самая хорошая практика в кракинге, куда пафоснее намутить кейген, но это несколько другая тема. В качестве другого примера можно взять клиент к OpenEdge и его модификацию для благих целей, о чем недавно писал Алексей Синцов в статье про архитектурные уязвимости. Думаю, понятно, что мы говорим о ситуации, когда отсутствует доступ к исходникам. Так как это можно сделать? Способов, как всегда, несколько. Но в данном случае мы воспользуемся услугами дебаггера OllyDbg. Во-первых, потому что он входит в джентльменский набор наряду с IDA Pro и WinDbg, а во-вторых, потому что он прост и доступен. Важный момент — найти то место, которое хочется изменить. Но тут могут помочь только голова на плечах, пучок знаний, да брейкпоинты (бряки). Хотя плюс OllyDbg — у нас есть возможность динамически следить за происходящим в программе, пошагово выполнять программный код. Но приступим к делу. Исходим из того, что с местом мы определились. Далее, нажав <пробел>, мы имеем возможность поменять ассемблерные инструкции. Все наши изменения автоматически сохраняются в виде так называемых патчей, просмотреть которые можно, кликнув по «View - Patches». Что важно, при следующем запуске OllyDbg данные патчи погрузятся автоматически, так что можно временно отключить бряки и запустить софтинку, чтобы посмотреть на результаты. Сами патчи можно, аналогично брякам, включать, отключать, а также переключаться между ними. Патчи, бряки и вводимые комметарии хранятся в одноименных с исследуемой программой .udd-файлах, которые лежат по стандарту рядом с OllyDbg (указывается в udd path в настройках). Если результат изменений нас устраивает, то все отлично, и можно создавать экзешник. Сохранить можно либо конкретный патч, либо все, которые в данный момент активны. Для этого:
Дело сделано. Хотелось бы отметить еще одну приятную особенность: на месте exeфайла может быть любая библиотека. То есть исполняется программа, в ней модули — библиотеки. Дебажим exe’шник, попадаем в нужную библиотеку, вносим изменения и сохраняем аналогичным способом. Задача: Сохранить положение брейкпоинтов между запусками ollydbg.РешениеБрэйкпоинты (бряки) одна из основных вещей в любом дебаггере. Но, к сожалению, по стандарту наша любимая Олька не сохраняет их для разных сессий дебагга какого-либо приложения. Поставил бряки, поработал, а при следующем запуске — снова ищи их в приложении и ставь заново. Причина такого подхода не совсем ясна. Тем не менее, чтобы OllyDbg сохраняла бряки, требуется всего лишь поставить галку в настройках:
Стоит отметить, что сохраняются при этом не только обычные бряки INT3/0xCC, но и хардварные. Кроме того, есть еще одно решение. Можно использовать специальный плагин — Break point manager plug-in, скачать который можно тут: pedram.redhive.com/code/ollydbg_plugins/olly_bp_man. Плагин умеет импортировать/экспортировать брейкпоинты, а также подгружать их автоматом при старте уже дебаженного файла. Особого профита я от него не нашел. Разве что можно сохранить несколько наборов брейкпоинтов и подгружать по мере необходимости какой-то определенный. Хотя, возможно, я что-то и упустил. Задача: Раскрытие сетевой инфраструктуры в обход файерволов.РешениеЗадача звучит грандиозно, хотя подразумевает что-то более прозаичное :). Здесь имеется в виду следующее: постараться узнать максимум инфы о какой-то сетке, которая находится за файерволом. Как ни странно, для обхода файерволов и сбора информации чего только не придумывают! Всевозможные тонкости, ух… Но и простейшие вещи очень часто работают. Например, стандартная тулза tracerout (tracert). Простейшая идея — отправляем на хост в интересующей нас сети ICMP-пакеты со значением TTL от 1 до числа, соответствующего количеству хостов до данного хоста, инкрементируя по 1. В ответ нам приходят сообщения об ошибках («TTL равен 0 и пакет сбрасывается») со всех этих хостов. Таким образом мы получаем IP’шники хостов этого пути. Причем если мы трэйсим хост в сетке за файером, то мы можем получить внутренние IP-адреса данной сети. А это как раз то, что нам надо. Но сетевые файеры частенько настраивают на блокировку пакетов tracert’а. Что же делать? Воспользоваться новым tracert’ом. Что же тут можно придумать нового? А вот что — посылать ICMPпакеты не просто так, а в контексте какой-то IP-сессии, то есть уже установленного соединения. Тогда файеру достаточно трудно выделить нелегитимный трафик. Таким образом мы можем получить применяемую в сетке адресацию, IP-адреса фаеров, NAT’ов и другого сетевого оборудования. Способ этот реализован в виде входящей в поставку BackTrack4 тулзы 0trace (lcamtuf.coredump.cx) от Михала Залевски. Доработка этой идеи реализована в intrace (code.google.com/p/intrace) Робертом Свики. Итак: 1) Создаем подключение 2) Трэйсим по данному соединению Где:
Причем не важно, кто установил соединение. Трасеровать можно и по уже установленному соединению, где инициатор — удаленный хост. И еще мини-совет в тему пользы простейших тулз. Самый простой, но точный фингерпринт операционной системы — пинг этой ОС. Если ответы приходят со значением TTL близким (меньшим) к 128 — значит, ОС почти 100% Windows; 64–255 — значит, *nix. Этого вполне хватает для определения возможных векторов атак. Задача: Организовать основу для Web-атак.РешениеСейчас мы еще раз поговорим про инструментарий. Какой бы специализированный софт мы не использовали для взлома, такая прекрасная вещь как Firefox является одной из основ. Хакерских плагинов к нему полным полно. Даже слишком много, да еще настроить все надо… В общем, я клоню к тому, что логичнее юзать уже подготовленный «хакерский» FF, чем начинать с пустого места. Ну или, как минимум, можно почерпнуть какие-то фичи. Классикой здесь, наверное, являются продукты от YEHG — HackerFirefox, Ultimate Hackerfox Addons и GreaseMonkey Web Security Toolkit (yehg.net/lab/#tools). Но, к сожалению, поддерживаться они перестали. Взгляни, на одну из возможных замен — Mantra (getmantra.com/download/index.html). Все основные плагины, общие настройки, портабельность. Остальное — лучше своими ручками потрогать. Задача: Обход антивирусовРешениеВозвращаемся к излюбленному :) На сей раз это что-то конкретно хорошее, так как на момент написания статьи все антивирусы были в пролете. Но начнем с прошлых постов по этой теме. Как ты помнишь, используя хитрые и не очень техники, мы старались обойти антивирусы и скрыть payload из Metasploit Framework — meterpreter. Антивирусные компании, видя общие тенденции, связанные с MSF, добавили сигнатуры meterpreter’а в свои базы. И он стал по-настоящему палиться. Радовало то, что компании так и не удосужились перенять опыт создателей antimeter и детектить meterpreter’а в памяти. Кстати, с antimeter связана забавная тема. Некий человек написал post-exploitation скрипт для meterpreter’а, который не дает себя обнаружить. Каким образом ему это удается? Очень просто — он мигрирует на процесс antimeter, а тот проверяет все процессы, кроме себя самого. Класс! :) Но вернемся к обходу антивирей. За тулзу и за метод нам стоит поблагодарить Бернардо Дамеле. Итак, что же он сотворил? А вот что — «запускальщик шелл-кодов». Звучит не научно, но правдиво. Тулзу shellcodeexeс можно скачать тут: https://github.com/inquisb/shellcodeexec. По сути своей идея проста как c горы на лыжах — сначало страшно, а потом как по маслу. Итак, на компе у жертвы запускается exe’шник, который читает специальным образом «зашифрованные» данные, пихает их к себе в память и исполняет. А теперь по шагам.
Обход антивирусов организуется за счет того, что у них отсутствуют сигнатуры нагрузок в таком виде. Объяснение всей темы от Бернаро Дамеле: bernardodamele.blogspot.com/2011/04/execute-metasploitpayloadsbypassing.html. На практике будет выглядеть так: 1. Конвертируем любую нагрузку в буквенно-циферный вид с размещением адреса на шелл-код в регистре EAX, а итог сохраняем в файл:
2. Запускаем сервер meterpreter’а на ожидание подключения: 3. Передаем наш шелл-код тулзе
4. Ждем бек-коннекта на сервере… Теперь о плюсах и минусах. Минуса здесь как минимум два. Во-первых, для запуска шелл-кода требуется запуск shellcodeexeс, что далеко не всегда возможно. Во-вторых, хотя антивирусы и в обломе из-за отсутствия сигнатур (что со временем, конечно, изменится), но некоторые антивирусы, по слухам, все же детектят. Как? Эвристика срабатывает из-за использования RWX-страниц. Вообще, знающие люди говорят, что данная техника была известна давно, и потому широкого резонанса не вызвала. Но для нас главное, что она юзабельна. К плюсам можно отнести уже указанный обход антивирей, отсутствие привязки к шелл-коду и, что самое удивительное, отсутствие привязки к ОС и к ее разрядности. То есть, конечно, есть привязка. Но shellcodeexeс можно перекомпилить под любую платформу, и она будет работать. Задача: Обойти ограничения групповых политик Windows на запуск приложений.РешениеДля начала немного теории. «Групповая политика (Group Policies) — это набор правил или настроек, в соответствии с которыми производится настройка рабочей среды Windows… применяется к группе пользователей… Групповые политики создаются в домене ...». По сути, для обычных пользователей это просто некие дополнительные ограничения на их возможности (кроме правовых ограничений). К примеру, доменный админ может запретить смену прокси-сервера в IE конкретному пользователю, на конкретной машине. Как ни странно, групповые политики существуют и вне домена. Можешь поставить их на своем домашнем компе — запусти c:\windows\system32\gpedit.msc (secpol.msc) под админом и ограничь остальных юзеров. Кстати, групповыми политиками частенько пользуются вирусы, запрещая запуск «Диспетчера задач» и «Редактора реестра», например, чтобы себя обезопасить. Так что следующий материал можно использовать и для вполне «благих» дел. Но сегодня мы поговорим про ограничения групповых политик на запускаемые приложения. Официальное название — Software Restriction Policies (SRP). В стандартном включенном состоянии обычному пользователю разрешается запуск приложений только из системных папок «Windows» и «Program Files». Почему именно оттуда? Все просто: обычные пользователи имеют на них только права Read и Execute, отсюда вывод — запустить что-то свое пользователь не сможет, так как писать в данные папки не имеет права. На практике же ограничения представляют из себя что-то более четкое, предоставляя доступ пользователям всего к нескольким программулинам. Причем стоит отметить, что SRP следит за ограниченным набором расширений, которые могут являться исполняемыми. По дефолту — целый пучок. Но теперь к делу. Как же обойти? Способов масса, как всегда :). Но поговорим только об универсальных. Первый способ, о котором я сегодня расскажу, применим в той ситуации, когда у пользователя имеется физический доступ к компу, который находится в домене, а групповая политика нацелена на пользователя. То есть обычный персональный комп. В данной ситуации наипростейшим методом явлется следующая последовательность действий.
Суть данного метода (как ты, возможно, уже догадался) заключается в том, что доменные групповые политки подгружаются, когда пользователь логинится в системе. Но так как связь с доменом отсутствует, то и политики подгрузиться не смогут, а потому и не применятся. В систему же мы зайти сможем, так как используется фича cached domain credentials (за счет кэша последних заходов в систему). Далее мы восстанавливаем связь, подключая комп к сети. В общем, почти элегантно и просто. Перейдем ко второму способу. Что делать, когда отсутствует физический доступ к компу? Самый распространенный пример в такой ситуации — терминальный доступ к серверу. Придумал выход и намутил к нему тулзу Марк Руссинович. Причем довольно давно, но до сих пор все работает: и под Vista, и под 7-й. Вот так — ломай, мучай какое-то ПО, производителя крупного… Глядишь, и купили тебя уже. Мотаем на ус :). Суть данного способа основывается на следующих постулатах. Вопервых, процесс-родитель, запущенный пользователем (explorer.exe, например) перед порождением других процессов (читай — запуском приложений) проверяет «подходит ли данный процесс под ограничительные или разрешительные списки/правила SRP». И если все хорошо, то процесс запускается. Иначе — злая табличка. Во-вторых, любой пользователь имеет права на манипуляции (изменения) над своими собственными процессами. Последнее поясню на примере. Есть explorer.exe («Проводник») лежащий в папке «Windows». У пользователя нет прав на запись/изменения, но есть права на исполнение (execute). Запустив explorer.exe, пользователь получает на процесс права, дающие возможность его изменять. Таким образом, соединив данные постулаты вместе, мы получаем, что подконтрольный нам процесс принимает решение о том, можем ли мы что-то запустить. Как-то нелепо :). Остается только понять, как модифицировать поведение подконтрольного нам процесса. Марк в качестве примера написал небольшую тулзу, обходящую SRP, и, что приятно, приложил исходники. Она работает следующим образом:
Важно, что на порождаемый процесс обход ограничений тоже работает — плодись сколько хочешь. Полное описание способа здесь: goo.gl/BDIQt. Саму тулзу (gpdisable.zip), к сожалению, люди из Microsoft’а запрятали куда-то, но, во-первых, в сети еще можно ее отыскать, во-вторых, она есть на диске, а в-третьих, есть и другие. Например, GPCul8or от Эрика Рахнера. Работает она аналогичным образом. Искать там же. Для галочки применение:
Еще интересность — можно добавить библиотеки в HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs, и тогда они автоматом будут подгружаться при запуске любого приложения. Но – требуются локальные админские права. Ну и напоследок разбиваем в пух и прах ограничения на запускаемые приложения групповыми политиками следующим образом. Заходим на goo.gl/ucrhQ, читаем, вкуриваем и теперь уж 100% обходим. Автор – Вадимс Подамс, спасибо ему за труд. |