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

Easy-Hack

Хакер, номер #111, стр. 111-042-1

Задача

  • Осуществить нестандартную автозагрузку.

Решение

Одними из первых при запуске системы стартуют сервисы. Создадим фейковую службу для автозагрузки нашей проги.

Для начала определимся, чем отличается обычное win-приложение от сервиса?

Сервис имеет определенную структуру, должен откликаться на управляющие команды (запуск, остановка, пауза, продолжение работы) и сообщать о своем состоянии (работает, остановлен и т.д.). Есть несколько способов запустить приложение как службу Windows: от написания и использования полноценного сервиса до запуска любой проги как сервиса при помощи instsrv.exe и srvany.exe из Windows Resource Kit. Рассмотрим один из вариантов.

1. Копируемся в системный каталог, называемся как-нибудь мутно, например, "csrsc.exe".

2. Регистрируемся в реестре. Создаем раздел под свой сервис:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Csrsc]

3. Создаем строковый параметр (REG_SZ) с именем «Description». В качестве значения необходимо в паре предложений описать, чем занимается сервис. Нет, не надо писать туда «обычный троян» и т.п., а лучше посмотреть описания стандартных Майкрософтовских сервисов и вбить что-то похожее.

4. Следующий строковый параметр «DisplayName». Так будет выглядеть дружественное пользователю название службы. Значение «CSRsc-клиент» вполне подойдет.

5. Далее, REG_SZ «ObjectName». Ставим значение «LocalSystem» для запуска от имени SYSTEM.

6. Создаем и оставляем пустыми параметры типа REG_MULTI_SZ «DependOnGroup» и «DependOnService».

7. Параметр REG_SZ «ImagePath2» заполняем как «%SystemRoot%\csrsc.exe». Это и есть наш экзешник запускаемого сервиса.

8. Определяем тип загрузки нашей службы. Добавляем REG_DWORD «Start» со значением «2», что соответствует загрузке вместе с системой, но после драйверов. В «Службах» отображается как «авто». REG_DWORD параметр «ErrorControl» ставим в «1», REG_DWORD параметр «Type» ставим в 120 (0x00000120).

Итак, мы попытались закосить под сервис, но если пользователь и не заметит подвоха, то Винда при загрузке службы понимает, что подсунули ей никакой не сервис. Однако проверка идет больше 20 секунд (пользователь ничего не видит), и мы спокойно копируемся во второй файл, например в WINDOWS\csrsc.exe (в автозагрузке у нас как служба прописан WINDOWS\system32\csrsc.exe), запускаем его (второй файл), завершая наш фейковый сервис. В итоге имеем в процессах нашу прогу csrsc.exe, запущенную от имени пользователя SYSTEM.

Задача

  • Замутить левый скан

Решение

Не будем вдаваться в подробности, откуда у нас чужой паспорт/виза/права/etc., а приступим к работе. Воспользуемся небезызвестной прогой Adobe Photoshop любой версии. Подделать скан можно разными путями, я опишу наиболее простой и не требующий особых знаний или умений в работе с фотошопом.

1. Делаем резервную копию и перетаскиваем скан в фотошоп (либо Файл -< Открыть).

2. Допустим, необходимо поменять имеющиеся имя и фамилию на желаемые данные «Vasia Vasechkin» в иностранной визе/паспорте. Выбираем из имеющегося в скане текста нужные нам символы. Данные заполняются шрифтом одного стиля, поэтому можно набирать со скана любые буквы. Жмем «Z», увеличивая масштаб до максимума. Выбираем инструмент Лассо (клавиша «L») и попиксельно обводим букву. Здесь надо обратить внимание на то, что текст не может быть идеален, поэтому внимательно обводим пиксели, отличающиеся от фона. Выделение считается законченным, когда совмещены начало и конец.

3. Копируем выделенное на новый слой. Выбираем Слой -> Новый -> «Скопировать на новый слой» (Ctrl+J). То же самое делаем с каждой буквой по очереди, пока не наберем все необходимые для составления нужного имени и фамилии символы. Каждая буква должна располагаться на отдельном слое, которые перечислены на панельке справа внизу. После каждого копирования щелкаем по значку глаза слева от имени слоя (либо Слой -< Спрятать_слой, – он становится невидимым) и переходим на основной слой со сканом, кликая по нему мышью.

4. Затираем старые данные. От того, насколько хорошо вырезаны буквы и затерт старый текст, зависит качество нашей работы. Поэтому не ленимся, копируем пикселы, окружающие буквы на скане, и вставляем их на сами буквы. Жмем «М» (инструмент «Прямоугольная область»), обводим пиксел фона, жмем <Ctrl+C>, обводим пиксел на букве, жмем < Ctrl+V>. Стараемся сохранить переход цвета из одного тона в другой, контуры водяных знаков, различные полосы.

5. Выстраиваем имеющиеся буквы на подготовленном в предыдущем шаге месте. Щелкаем по слою с очередным символом, делаем его видимым (Слой ->Показать_слой), выбираем инструмент «Перемещение» (клавиша «V») и перетаскиваем изображение буквы на нужное место.

6. Проверяем получившийся результат. Если все устраивает, соединяем слои через Слой -> Объединить_видимые (Shift+Ctrl+E) и сохраняем изображение в нужном формате (JPEG, BMP и т.п.), выбрав меню Файл -> Сохранить_как (Shift+Ctrl+S).

Качество получившегося скана напрямую зависит от количества потраченного времени и прямоты твоих рук. Удачи начинающим художникам!

Задача

  • Взломать WEP-ключ от интересующей Wi-Fi сети.

Решение

Вардрайвинг aka взлом Wi-Fi сетей с каждым днем становится все более актуальным. Это и неудивительно, ведь беспроводные сети получили широкое распространение на территории нашей необъятной Родины. Ну да ладно, от лирики к делу. Как ты знаешь, многие сети используют WEP-шифрование, поэтому для реализации задуманного нам потребуется:

  1. Linux
  2. Wi-Fi карточка Atheros или Prism (желательно)
  3. Прямые руки и трезвая голова :)

Также необходимо запастись следующим софтом (под Линух):

  1. Kismet (мощный сканер Wi-Fi сетей)
  2. Airodump (утилы для сбора IVs)
  3. Aircrack (тулза для взлома WEP-ключей)

После того, как ты заинсталишь вышеуказанные утилы, можешь смело двигать в поисках Wi-Fi-точек. Как только ты обнаружишь наличие WEP-шифрования, дальнейшие действия будут выглядеть следующим образом:

1. Запускаем Airodump:

airodump Wi-Fi-cart dump CHANNEL 1

– где Wi-Fi-cart – имя твоей Wi-Fi-карточки, а CHANNEL – канал точки доступа. Тулза перехватит и сохранит IVs (Initialization Vectors) в файл с расширение .ivs.

2. Теперь запускаем утилу Aircrack, причем сделать это можно даже в момент работы Airodump:

aircrack -a 1 -b MAC dump.ivs

– где MAC – MAC-адрес точки доступа, а dump.ivs – файл, в который Airodump собирает IVs.

3. Ждать. Время взлома ключа напрямую зависит от количество собранных IVs.

Весь указанный софт давно существует и для Win-платформы, но все же я советую юзать тебе Linux. Существует даже специальный Live CD для вардрайверов на базе SLAX – Backtrack Linux, включающий в себя сканеры, анализаторы сетей и прочие полезные тулзы. Кстати, ты запросто можешь установить данный дистр себе на винт и юзать в качестве штатной ОС. Но тут, как говорится, каждому свое.

Кроме того, советую позаботиться о собственной безопасности и конспирации. В общем, удачного вардрайвинга.

Задача

  • Получить доступ к чужому мобильнику посредством bluetooth-соединения.

Решение

Ты, наверное, слышал о таком виде хакинга, как bluehacking, то есть хакинге посредством блютус-соединения. Тем не менее, информации по данному типу атак довольно мало, посему начнем по порядку. Прежде всего, нам потребуется КПК, либо смартфон с WIndows Mobile, а также тулза под скромным названием «Терминал». Смело инсталь утилу на свой девайс и запускай блютус. Единственный минус – тулза работает только после осуществления авторизации и установления соединения с другим устройством, но тут уж применяй собственные навыки Си :). После того, как жертва авторизирует тебя, запускай «Терминал» и выбирай необходимый режим работы:

  1. Режим OBEX FTP позволяет получить доступ к файловой системе мобильника жертвы. Ты сможешь сливать/отправлять/удалять/создавать файлы. Однако, реализация OBEX отличается в каждом телефоне, поэтому не все заявленные возможности будут работать.
  2. Режим AT позволяет отсылать команды мобильнику жертвы. Данный режим предоставляет практически безграничные возможности для управления чужим телефоном. Все, что от тебя требуется – найти доки по АТ командам. Также в режиме АТ есть возможность получить телефонную книгу и смс жертвы.
  3. Режим IrMC позволяет получить доступ к телефонной книге и календарю чужого мобильника через сервис синхронизации. Все полученные данные сохраняются в формате VCARD (.vcf).
  4. Режим отправки файлов позволяет отправить сразу несколько файлов на чужой мобильник. Отправка происходит таким же образом, как если бы отправляли через файл-менеджер. Причем, скорость отправки через «Терминал» может превышать скорость отправки через файл-менеджеры в несколько раз.
  5. Режим отправки сообщений позволяет отправлять текстовые сообщения на выбранный телефон.
  6. Режим получения файлов представляет собой сервер Obex Object Push. Ты сможешь сливать чужое файло себе на флэшку :).

Как ты видишь, тулза обладает огромным потенциалом. Важно лишь грамотно им распорядиться. Кстати, софтинку мы заботливо выложили на наш DVD.

Задача

  • Остановить выполнение программы при определенном условии.

Решение

Такая задача возникает в процессе отладки практически любой программы. Например, часто требуется отследить, когда в ячейке памяти появится некоторое значение или же остановить выполнение программы, когда содержимое регистра находится в определенном числовом диапазоне. Здесь стоит сказать пару слов об условных точках останова и о таком понятии, как трассировка. Трассировка – это пошаговое выполнение программы с остановкой на каждой команде и «фиксированием» состояния регистров процессора и ячеек памяти. Если мы задали какое-либо условие, отладчик автоматически выполняет программу до тех пор, пока оно не выполнится, делая «сверку» на каждой инструкции.

Небольшой пример: попробуем при помощи OllyDbg поставить условную точку останова. Прикажем отладчику остановить трассировку программы, когда значение регистра EAX будет равно 1,2 или 3. Для этого необходимо использовать логические операторы: оператор равенства («==») и оператор «или» («||»). Выражение для нашего случая будет выглядеть так: (EAX==1)||(EAX==02)||(EAX==03).

Вот действия, которые необходимо выполнить для установки условной точки останова:

  1. Загружаем программу под отладчиком OllyDbg;
  2. Выбираем из меню «Debug» пункт «Set condition»;
  3. В открывшемся окне выставляем галочку напротив надписи «Condition is TRUE» (этим мы указываем отладчику, что при трассировке будет учитываться условие – логическое выражение, введенное нами);
  4. Вводим наше условное выражение «(EAX==1)||(EAX==02)||(EAX==03)» в поле напротив надписи «Condition is TRUE».
  5. Нажимаем «OK» и начинаем процесс трассировки по нажатию <Ctrl-F12< или по выбору пункта меню «Debug -< Trace over».

Теперь выполнение программы остановится каждый раз, как только наше условие будет выполнено. В том, что это действительно так, ты можешь убедиться на примере, проследив за значением регистра EAX в окне «Registers».

Совет: раздел «Evaluation of expressions» стандартной справки OllyDbg содержит много полезной информации о логических выражениях.

Задача

  • Получить IP-адрес сервера, откуда загружается троян при помощи лоадера.

Решение

Рассмотрим нашу задачу на примере трояна, определяемого DrWeb-ом как Trojan.DownLoader.20168 (создан ребятами из MadTeam).

1. Запускаем PEid и определяем тип пакера, которым запакован троян (а, как правило, это так);

2. Ищем при помощи google.ru анпакер и распаковываем лоадер. Внимание! Многие анпакеры запускают запакованный файл на исполнение, так что лучше проводить операцию распаковки на vmware или другой виртуальной машине с отключенными антивирусами;

3. Открываем файл при помощи шестнадцатеричного редактора, например, WinHex, и ищем нечто похожее на интернет-адрес. Я советую искать при помощи WinHex, так как он обладает возможностью поиска по маске. Например, поиск по маске «http://?» c указанием в параметрах поиска «использовать знак вопроса в качестве подстановочного символа» («Use this as a wildcard») дает отличные результаты. Лоадер зачастую может быть встроен в довольно объемный файл, и ручной поиск в этом случае может дать массу ложных срабатываний. Также можно попробовать произвести поиск по маске «??.??.??.??» (на случай, вдруг в лоадере содержится IP-адрес).

4. Если адрес найден, то задача успешно выполнена. Если же «операция» провалена, и адрес никак не отыскивается, придется перейти к тяжелой «артиллерии». Воспользуемся отладчиком OllyDbg. На всякий случай перед запуском лоадера под отладчиком создай его копию, так как он зачастую самоуничтожается после загрузки. Итак, загружай исследуемую программу в OllyDbg, но ни в коем случае не жми на «F9» или на «Run», иначе окажешься затрояненным. Дальше путь исследования раздваивается – либо все окажется все предельно просто, либо чуть сложнее.

5а. Первый вариант. Ставь точку останова на все функции, которые создают соединение с сервером. Мы поставим точку останова на функцию InternetOpenUrlA. Как правило, все тривиальные лоадеры используют ее (описание функции ищи на нашем DVD).

Нас интересует второй параметр функции – LpszUrl, так как он и будет содержать ссылку. Смело жми <ALT-F1> и в открывшемся окошке пиши «bpx InternetOpenUrlA» (без кавычек). Точку останова установили, запускаем программу и смотрим в окошке стека параметры функции. Обычно этот путь срабатывает, но, как мы и договаривались выше, мы рассмотрим более сложный вариант – на примере лоадера Trojan.DownLoader.20168.

5б. Вариант второй – ни на какой API-функции, создающей соединение с сайтом, мы не остановились. Попробуем покопать чуть глубже. При прокрутке дампа лоадера Trojan.DownLoader.20168 чуть ниже точки входа мы видим такой набор API-функций (если представить его упрощенно и опустить лишние подробности):

  • а. функцию lstrcat, которая склеивает строку «svchost.exe» с именем файла лоадера (включая путь к нему);
  • б. функцию CreateProcessA, которая создает процесс svchost от имени пользователя с именем файла-лоадера в качестве параметра;
  • в. функцию WriteProcessMemory, которая пишет исполнимый код в память созданного процесса «svchost.exe», увеличивая его на 36000h байт;
  • г. функции Get/SetThreadContext, которые изменяют контекст созданного процесса таким образом, чтобы внутри него выполнялся поток лоадера;
  • д. функцию ResumeThread, которая запускает созданный поток лоадера.

Здесь необходимо краткое пояснение. Внутри одного процесса может выполняться несколько потоков (их также именуют как «нити» (threads)), причем каждому из потоков соответствует свой «контекст», то есть состояние регистров и стека.

Вышеприведенная конструкция API - функций дает полное представление о работе файла лоадера. Он создает поток, который маскируется в файле svchost.exe. Хорошая маскировка :).

6. Ставь точку останова на функцию ResumeThread, которая находится по адресу 00401387h и запускай процесс по F9. После остановки процесса на брекпойнте открой диспетчер задач (CTRL-ALT-DEL) и отсортируй список процессов по имени пользователя. Как ты видишь, одна копия svchost.exe исполняется не от имени системы или локальных/сетевых сервисов, а от имени пользователя! Это и демаскирует процесс, указывая на то, что он создан лоадером. Щелкай по нему правой кнопкой и выбирай «отладка» (OllyDbg должен быть установлен в качестве Just-In-Time отладчика, это делается при помощи пункта меню «Options -> Just-In-Time debugging»). Откроется второе окно отладчика. Самое время посмотреть на потоки отлаживаемого процесса svchost.exe.

Жми на кнопку с буквой «T» на панели инструментов отладчика. Данный процесс имеет 2 потока, один из них со статусом «Suspended», а другой – «Active». Как ты уже догадался, первый поток внедрен лоадером, его и выбираем.

Прокрути дамп чуть ниже и по адресу 00401081 располагается... адрес сайта! Что мы и хотели получить.

Одним выстрелом мы убили двух зайцев: научились искать адрес внутри троян-лоадера и разобрались в популярном механизме создания скрытно выполняемого кода!

Содержание