Pull to refresh

Небольшой обзор исходного кода трояна zeus

Reading time12 min
Views42K

Введение


image
Как нам подсказывает англо-русский словарь, zeus переводится как Зевс, Громовержец, главный бог древне-греческого пантиона. Назвав свое творение zeus в далеком уже 2007 году, неизвестный автор трояна взял на себя определенные обязательства, обязывающие быть если не главным, то как минимум в числе первых, и надо признать, он выполнил, и даже перевыполнил эти обязательства.
Zeus-троян стал уже легендарным на просторах Интернета и даже за его пределами за последние несколько лет. Ни один из троянов не зацвел таким буйным цветом, не распространился так широко, как этот, а по широте охвата zeus ненамного отстает от печально знаменитого червя Kido/Conficker.

Изначально zeus позиционировался как бансковский троян, то есть программа, которая каким либо образом проникает на компьютер жертвы и передает своему хозяину конфиденциальную информацию — логины, пароли, номера кредитных карт, CVV2/CVC2 коды и так далее. Но со временем стали появляться и модификации для кражи корпоративных данных, заражения исполняемых файлов, рассылки спама и так далее.
image
Расскажу немного о бизнес — схеме, которая используется при работе с zeus. Автор zeus (или авторы), заботливо расширяет и совершенствует свое детище вот уже много лет, но у этого парня хватает ума самому не заниматься распространением трояна — он продает конструктор для создания модифицированных версий всем желающим, с более или менее понятными инструкциями, также можно купить и тех. поддержку. Ну а поиском Дедиков как центров управления, созданием и распространением трояна — клиента, обработкой полученных номеров кредиток, обналичкой и прочим криминалом занимается всякая низкоинтеллектуальная “школота”.
image
Самый показательный пример такого рода – это задержание в начале октября 2010 года в США группы студентов из России, которые погорели скорее всего из-за своей неуемной жадности и тупости. Вот их имена: Илья Карасев, Кристина Извекова, Софья Дикова и иже с ними. Взято отсюда. Впрочем, вся школота на удивление дешево отделалась — каждому дали меньше года тюрьмы и мизерный денежный штраф, хотя в США за такие преступления можно сесть на 40 лет.

Хотя надо отметить, что автор zeus принимал активное участие в работе существующих крупных ботнетов, видимо в рамках тех. поддержки пользователям, ибо он пишет в рекомендациях по использованию своего детища, что дедик, на котором должна крутится адмика, должен быть достаточно мощным, с конкретными указаниями конфигурации.
Недавно zeus засветился еще в одной атаке – кто то перед рождеством разослал поздравительные рождественские открытки якобы из Белого дома по правительcnвенным учреждениям США. При переходе по ссылке или открытии прикрепленного файла zeus тупо сканировал винчестер в поисках Word, Exel, PDF файлов и отсылал их на некий сервер в Белоруссии.

Вообще, очень много ниточек от zeus ведут в страны постсоветского пространства, что дает основания подозревать, что родом он из России или Украины, что в последствии и подтвердилось, ибо комментарии в исходниках и инструкции по работе были написаны на русском. Да и сам GUI Сервера zeus содержал всего два языка — английский и русский.

Возможности


image
Вот что немного из того, что пишет сам автор о возможностях zeus:
-Язык и IDE программирования:
Visual C++ (текущая версия 9.0). Не используются дополнительные библиотеки (crtl, mfc, и т.д.).
-Поддерживаемые ОС:
XP/Vista/Seven, а также 2003/2003R2/2008/2008R2. В том числе работа под Windows x64, но только для 32-x битных процессов. Также сохраняется полноценная работа бота при активных сессиях «Terminal Servers».
-Принцип действия:
Бот основан на перехвате WinAPI, методом сплайсинга в ring3(пользовательский режим), путем запуска копии своего кода в каждом процессе пользователя (без использования DLL).
-Процесс установки:
В данный момент, в первую очередь бот ориентирован на работу под Vista/Seven, с включенным UAC, и без использования локальных сплойтов. Поэтому бот рассчитан на работу с минимальными привилегиями пользователя (включая пользователя «Гость»), с связи с этим бот всегда работает в пределах сессий одного пользователя (из-под которого производилась установка бота.). Бот может быть установлен для каждого пользователя в ОС, при этом боты не будут знать о существовании друг друга. При установке, бот создает свою копию в домашней директории пользователя, эта копия является привязанной к текущему пользователю и ОС, и не может быть запущена в другом пользователе, или тем более ОС. Оригинальная же копия бота (используемая для установки), будет автоматически удалена, в независимости от успеха установки.
-Защита:
Уникальные имена всех объектов (файлов, мютексов, ключей реестра) создаваемых ботом для каждого пользователя и ботнета. Установленный бот не может быть запущен с иной ОС или пользователя. Уничтожается код, служащий для установки бота. В данный момент не производиться скрытие файлов бота через WinAPI, т.к. антивирусные инструменты очень легко находят такие файла, и позволяют точно определить местоположение бота. Автообновление бота, не требующие перезагрузки. Контроль цельности файлов бота.
-Получение важных данных из программ пользователя:
Логинов из FTP-клиентов: FlashFXP, CuteFtp, Total Commander, WsFTP, FileZilla, FAR Manager, WinSCP, FTP Commander, CoreFTP, SmartFTP. «Кукисов» Adobe (Macromedia) Flash Player. «Кукисов» wininet.dll, Mozilla Firefox. Импорт сертификатов из хранилища сертификатов Windows. И слежение за их дальнейшим добавлением. Слежение за нажатием клавиш клавиатуры.

Сделаю несколько своих комментариев по поводу высказываний автора zeus: та версия, которая попала ко мне, была откомпилирована на компьютере автора с помощью MS Visual Studio 10.0, так что файл комментов несколько устарел. Толи автор не удосужился их обновить для того юзера, которому продал сорсы, толи еще что.

По поводу принципа действия – автор решил не заморачиватся написанием драйверов, поднятием привилегий и прочими boot-time фишками, которые очень популярны у вирусописателей в последнее время, и не случайно — эта олд-скульность весьма оправдана, так как бот работает предельно стабильно на всем семействе операционок Windows, функционален даже из под гостевого аккаунта, и имеет минимально возможную вероятность запалиться антивирусом. Тем более что в операционках семейства Windows после выхода XP SP2 для поддержки технологии “горячего патча” пролог каждой функции был сделан постоянной длинны в 5 байт, что избавло zeus от того, чтобы таскать с собой дизассемблер BeaEngine, и это несомненно пошло на пользу трояну, ибо автор zeus называет дизассемблер “довольно громоздким, хоть и универсальным”.

Узкое место то, что клиентская программа трояна прописывает себя в каждом пользовательском процессе, и этим ее можно детектировать. Например, техника определения, инфицирован ли данный процесс, используется самим ботом-клиентом для отрисовки окна при работе встроенного vnc сервера – проверяется, создан ли в процессе мутекс со специальным именем. Если создан – значит данный процесс инфицирован. Но имя скорее всего уникально для каждого экземпляра программы-клиента, так что так просто это в правила антивиря запихать не удастся. Вот еще интересные строчки “При установке, бот создает свою копию в домашней директории пользователя, В данный момент не производиться скрытие файлов бота через WinAPI” что дает нам отличный способ детектирования именно этого бота. И вообще – в корне домашнего каталога юзера не должно быть никаких левых подозрительных файлов! Особенно выполняемых, странно что антивирусы об этом не знают.
Вообще, схема распространения данной версии zeus довольно примитивна – пользователь переходит по ссылке, пришедшей в спамерском письме, или через инфицированный pdf документ, и запускает программу-инсталятор zeus, которая шифрует уникальным шифром вирус под каждого отдельного пользователя, после чего инсталлятор удаляется, а вирус сможет исполнятся только на этом данном компе под данным юзером. Никаких распространений через сканирование сети, через флешки, и прочих новомодных штучек. Все это безусловно ограничивает распространения трояна, зато делает его гораздо более устойчивым к антивирусам, что, судя по степени распространения zeus более чем оправдано.

По поводу “Получение важных данных из программ пользователя”- чистая правда, такая функциональность есть. Правда, автор забыл написать, что грабилка паролей CuteFTP в текущей версии закоментарена, то есть в билд она не попадает, судя по тому что не доделана, а расшифровка пароля для WsFTP вообще не реализована, что отражено в коментах сорсов, но это все мелочи ;) Странно, что автор не потрудился на пароли аськи, скайпа, сохраненные пароли от соц. сетей и т.д., другие Трояны с радостью крадут все эти данные. Судя по всему, алгоритмы расшифровки многих паролей были получены методами реверсивного инжиниринга, то есть дизассемблированием. Кстати, среди браузеров автором не упомянут Google chrome, вдруг его данные троян не грабит, так что возможно лучше всего пользовать браузер от Google, хотя я этот вопрос не исследовал.

Ну как ясно из всего вышеперечисленного – zeus необычайно широко распространен, качественно сделан, устойчив и скрытен в работе, легко адаптируется под различные новые задачи, кроме всего прочего, работает под подавляющим большинством операционных систем семейства Windows, в том числе и в 64-битных. В общем, в своем роде просто уникальный продукт.

Ну и напоследок — исходники этого самого знаменитого трояна таки утекли в сеть, то есть его создатель попал на те же грабли, что и его законопослушные коллеги-программисты: кто то из покупателей толи потерял, толи намеренно выложит сорсы в сеть, благодаря чему все желающие получили возможность познакомится со зловредом так сказать изнутри.

Анализ


image
Как известно, разработка программного обеспечения, в том числе написание кода – работа очень творческая, тут нет каких то единых стандартов и раз и навсегда проторенных дорожек, это как спорт, когда у каждого великого спортсмена со временем вырабатывается свой стиль игры, как изобразительное искусство, когда картины мастера можно узнать по характерному подчерку, как литература, например, если маленький мальчик попал в лапы к нелюдям – это Лукьяненко, а если все люди перемерли и герой расследует преступление, бегая по руинам городов – это Филлип Дик. Так же и с исходным кодом ПО и сопутствующими ему деталями – у каждого профессионального программиста есть свой характерный почерк, который очень много может сказать о своем авторе. И никакие корпоративные шаблоны, типа документов по стилизации кода, использованию характерных языковых конструкций и так далее не может помешать автору кода изменить своему стилю, ибо это сидит уже в подсознании, в подкорке головного мозга. Вот я и попробую, анализируя исходный код трояна zeus, попытаться кое что разузнать о его авторе.

При первом взгляде на сорсы бросается в глаза их предельно четкая структурированность, что говорит о большом опыте автора в разработке ПО. Не заметно никаких следов какой либо системы контроля версий, и это лишний раз подтверждает предположение о том, что это не была утечка исходников от их создателя, а в сеть попал пакет сорсов, который был продан какому-то клиенту. Ведь врятли автору удалось работать 4 года и дожить до версии 2.0.8.9 без source-контроля.
image
Для начала хотелось бы отметить, что сам пакет zeus, попавший в мои руки, состоит из нескольких модулей:
common — общие для всех проектов файлы, в которых содержится реализация большинства абстракций, необходимых для работы, таких как менеджер памяти, работа со строками, файловой системой, процессами, потоками, объектами синхронизации и прочее. В общем, набор крайне полезных и нужных базовых сервисов.
client — непосредственно сам вирусный клиент или бот, который проникает и поселяется на компьютерах жертв. Самый большой по объему код находится тут, ибо трояну надо много чего уметь делать.
builder — построитель новых версий вирусного клиента на основе скомпиленного содержимого каталога “client”
bcserver — сервер для работы на дедике, к которому будут бак-коннектится боты.
server[php] – веб интерфейс для управления ботнетом.
bin – немногие 3rdparty, которые использует проект zeus. Все остальные сторонние компоненты были переписаны под zeus API, как то vnc, дизассамблер на движке BeaEngine. В этом каталоге лежат fasm, php, 7zip, upx.
image
Первое что бросилось в глаза — это билд система. Хотя zeus и собирается под Visual Studio 10, билд система написана на php. Это очень необычно и редко встречающееся решение, так как разработка системы билда на php не свойственно для Windows систем, и вообще не свойственно ни для каких систем. Это может говорить о том, что автор взял уже готовую подобную систему и модифицировал для своих целей. А где он мог ее взять? Только на своей предыдущей или нынешней работе, и скорее всего он участвовал в разработке данной системы.

Код написан почти полностью на С, только там где используются COM интерфейсы, неорхотно используется С++. Хотя автор регулярно пишет TODOшки, что какие то части надо переписать с использованием COM.

Весь код хорошо откоммениторован, такое впечатление, что все комменты написаны в стиле какой то системы самодокументирования, по типу javadoc или qtdoc, но более примитивной, видимо проприетарной, которая использовалась на бывшей работе автора бота. Почти все коменнты в коде написаны по русски, и это очень показательно, ибо говорит, что автор не работал в крупных междунароных проектах, ибо в них есть 100% запрет на комменты, написанные в национальных алфавитах. В php комменты в utf-8, когда как в С-коде комменты в win-1251. Также весьма возможно, что автор плохо владеет английским языком, ибо, как объясняется в предыдущем пункте, с иностранцами он не работал. Правда, есть тут одно препятствие – файл manual_en.html, который написан на более-менее приличном аглийском языке, но, возможно, у автора есть помощник, который владеет английским. Но еще раз повторюсь – я на 99% уверен что С-код всего zeus, включая билд систему, писал один человек. 80% вероятности этот же человек писал код php админки для бонтена. Еще про комменты -многие из них пестрят орфографическими ошибками в стиле “Интернет-падонков”, которые были модны лет 5 назад. Видимо эта филосовия крепко засела в голове неизвестного автора, раз он ее так активно использует.

Еще раз — я категорически утверждаю, что весь С-код zeus писал один человек, ни о какой команде хакеров, ни о какой передаче исходников zeus разработчикам SpyEye, которым так пугали нас в СМИ, не идет и речи, все стилистически и функционально настолько четко выверено и рассчитано, что даже еще не видя кода до конца, примерно представляешь, что же там будет.

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

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

Немного меня удивила часто встречающаяся довольно больная длинна строк в исходных файлах – зачастую она превосходит 200 знаков! С одной стороны это говорит о том, что у автора монитор не менее 24``, с другой все равно непонятно, как он например, пользуется утилитами типа диффа разных ревизий исходного кода, с длинными строчками тут и 32`` не хватит).
image
После обзора кода стал понятен феномен zeus – высокая надежность, легкая модифицируемость и широкое распространение, минимальная зависимость от текущей операционной системы: все очень просто, zeus – очень качественный программой продукт, с развитым набором базовых сервисов, продуманными механизмами внедрения, сокрытия и взаимодействия с командным центром. Поэтому ничего удивительного, что он стал так популярен у компьютерных преступников всех мастей и родов, и судя по всему, принес своему создателю не менее $100.000. Хотя, стоит отметить, что автор в нескольких комментах жалуется, что ему не на чем тестировать некоторые компоненты вируса, например SetColourMapEntries в vnc и SEC_I_CONTEXT_EXPIRED, SEC_I_RENEGOTIATE в ssl. Не вяжется это как то с предполагаемым доходом автора, хотя Москва, где предположительно живет автор трояна, дорогой город. Вообще, мне кажется, что если zeus продолжит развиваться и дальше, за голову неизвестного автора объявят награду, как в свое время Microsoft объявил награду в $250.000 за голову создателя червя Kido. Еще немного об авторе – судя по всему этот парень уже давно ушел со своей бывшей работы, ибо даты модификации некоторых сорсов- 4 утра, 12 ночи и так далее, короче, то время, когда любой приличный разработчик должен спать, чтобы с утра идти на работу. Мне могут возразить что возможно на компе, где происходила разработка, преднамеренно выставлено неправильное время? Ерунда! Автор в своей разработке использует наверняка несколько компов, а тут уже со временем особо не поиграешься, как минимум системе хранения исходных кодов это не понравится. Также не мог автор и работать удаленно, ибо опять же для работы ему надо несколько компов, даже если он использует виртуальные машины, да и по удаленке можно легко случайно запалится.

Вообще, самое неприятное чувство при работе с кодом я испытал в тот момент, когда запустил на выполнение файл make_debug.cmd, и у меня все довольно быстро собралось без сучка и задоринки. Получается, что любая школота, настроив элементарный конфиг, начнет клепать свои экземпляры ботов. Хотя надо отдать честь билд – системе, отработала она на ура.
image
В файлах “source\builder\resources\«resources.aps” и “zeus.sln” обнаружена крайне интересная строчка “C:\Users\jam3s\Desktop\Zeus\source\builder\resources\resources.rc”, это полный путь на диске, по которому на оригинальном компе разработчика хранилось дерево проекта. Ценно тут то, что неизвестный автор не особо утруждал себя расположением исходников, и банально свалил их на рабочий стол, в результате чего в путь попало имя пользователя операционной системы, “jam3s”, а это уже кое что! Это вам не “nic”, “mike” или прочая распространенная лабуда, это имя достаточно уникально, и не удивлюсь, если оно уже всплывало на просторах Интернета, где-нибудь на форумах или чатах, или даже на форумах фрилансеров. В дальнейшем автор стал более “продвинутым” и скопировал дерево исходников проекта в “c:\zeus”, это мы можем узнать из любого оригинального объектного файла проекта. Поиск по яндексу и гуглу каких то явных личностей с ником jam3s не выявил, но никаких особых результатов я и не ждал, ибо так просто автор zeus не спалится, не того полета птица.
Была еще попытка попробовать найти, где автор взял иноку для back-connect сервера, там изображено что то типа черной свиньи или лошади, но ничего интересного найти не удалось, пару раз изображение нашлось в галереях в череде похожих уродцев.
image
В общем, в кратце можно составить такой обобщенный портрет ботописателя:
— Молодой человек от 28 до 35 лет, русский.
— Работал в более-менее крупной фирме разработчиком ПО несколько лет, фирма не сотрудничала с иностарнцами.
— На 90% проживает в Москве, на 80% в Санкт-Петербурге
— Не знает английский язык или знает плохо.
— Пользуется ником jam3s.

Эпилог


image
Говорят, что у орудий, предназначенных для убийства есть своя потаенная эстетика, изгиб линий и очертания форм предают таким предметам скрытое очарование, вызывающее смесь восхищения и ужаса у наблюдающего их. Схожие чувства я испытал в процессе знакомства с исходниками zeus, этим одним из самых совершенных орудий всеобщей кибернетической эпохи, когда никто не может чувствовать себя в безопасности от невидимых но цепких лап троянов и руткитов. Может, пока Вы читаете эти строки, за Вами пристально следит через vnc один из очередных хозяев ботнета, терпеливо ожидая, пока Вы залогинетесь в свой банковский аккаунт? Но не все так плохо, пример автора zeus говорит нам, что нет ничего невозможного для опытного и целеустремленного одиночки – программиста, пусть он и вынашивает самые низкие и коварные замыслы.

Да прибует с вами хабра-сила!
image
Tags:
Hubs:
Total votes 48: ↑44 and ↓4+40
Comments34

Articles