Trojan downloader что это
990x.top
Простой компьютерный блог для души)
Trojan-Downloader — что это, как удалить?
Троянская программа, основная задача которой — загружать другие вирусы на ПК, среди которых могут быть как трояны, майнеры, ботнеты, так и рекламные/шпионские модули.
Trojan-Downloader часто попадает на ПК вместе с установкой софта, который был скачан из небезопасных источников:
Попадая на ПК Trojan-Downloader может прописываться в автозагрузку используя:
Троян прописывается в системные папки, может создавать свои копии на флешках, других разделах диска. При этом копии могут иметь значок популярной программы, например архива WinRAR. Рассчитано на то, что вам станет интересно что за архив и вы запустите файл.
Что делает Trojan-Downloader? Примерный алгоритм работы:
Функций у трояна может быть много, как и технологий скрытия от антивируса.
Встроенный антивирус Windows способен обнаружить угрозу Trojan-Downloader:
Как удалить? Некоторые трояны, так называемые нулевого дня, о которых еще антивирусы не знают — иногда удалить проблематично. Но в целом — комплексная проверка ПК антивирусными утилитами против опасных вирусов и против рекламных модулей. После — желательно установить пробную версию Kaspersky Total Security. План действий примерно такой — сперва проверяете ПК утилитами:
Все утилиты для завершения удаления угроз требуют перезагрузку.
Именно комплексная проверка — даст наиболее эффективный результат. Это лучшие 4 утилиты против двух типов угроз — серьезных и рекламных. Бывает что одна утилита не нашла то, что находит другая.
После сканирования также стоит установить Kaspersky Total Security, обновить базы и запустить глубокое сканирование.
Если все сделать, что написано выше — вы максимально проверите ПК на наличие вирусов.
Как выявить Trojan-Downloader самостоятельно? Нужно анализировать трафик, а точнее сетевые соединения процессов. В этом может помочь фаервол. Например у меня стоит Outpost Firewall, которые уже не развивается, но все также прекрасно работает. Фаервол покажет какие процессы устанавливают соединение с интернетом, а также с каким именно сервером (IP):
В Касперском (версия Total Security) присутствует встроенный фаервол.
Надеюсь информация оказалась полезной. Удачи и добра.
Троянская программа, загружающая из интернета другие вредоносные программы без ведома пользователя.
Троянец определяет наличия в ключе [HKCU\Software\Microsoft\Windows] параметра с именем «m». Если такой параметр существует, то происходит завершение работы программы, иначе происходит создание этого параметра:
[HKCU\Software\Microsoft\Windows]
«m»=»m»
После чего троянец производит запуск процесса с именем svchost.exe и внедрение в него кода, содержащего процедуру загрузки файлов.
После запуска этой процедуры происходит скачивание файлов, размещенных по следующим адресам:
http://rikoger.com/lo***/1/1.exe (детектируется Антивирусом Касперского как Trojan-PSW.Win32.LdPinch.awp)
http://rikoger.com/lo***/2/2.exe (детектируется Антивирусом Касперского как Email-Worm.Win32.Scano.as)
http://rikoger.com/lo***/3/3.exe (детектируется Антивирусом Касперского как Trojan-Proxy.Win32.Xorpix.am)
И их сохранение в системе во временном каталоге Windows под следующими именами соответственно:
csrss.exe
lsass.exe
smss.exe
После загрузки троянец проверяет размер каждого загруженного файла: если он равен нулю, то производится повторная загрузка файла.
Также для каждого файла проверяется наличие в его начале сигнатуры исполняемого EXE-файла («MZ»). Если такая сигнатура была найдена, то производится запуск сохраненного файла на исполнение.
Вредоносная программа, предназначенная для несанкционированной пользователем загрузки и установки на компьютер-жертву новых версий вредоносных программ, установки троянцев или рекламных систем. Загруженные из интернета программы затем либо запускаются на выполнение, либо регистрируются троянцем на автозагрузку в соответствии с возможностями операционной системы.
Данный тип вредоносных программ в последнее время стал часто использоваться для первоначального заражения посетителей заражённых веб-страниц, содержащих эксплойты.
Деструктивная активность
После запуска троянец загружает файл по следующей ссылке:
http://161.58.140.**/new.exe
(На момент создания описания ссылка не работала. )
Файл сохраняется во временную папку Windows:
%Temp%\godmod.exe
Троянец запускает скачанный файл на исполнение и завершает свою работу.
Рекомендации по удалению
Если ваш компьютер не был защищен антивирусом и оказался заражен данной вредоносной программой, то для её удаления необходимо выполнить следующие действия:
Мал, да удал: Trojan-Downloader.Win32.Tiny
Доброго дня всем.
В сегодняшнем выпуске много технических подробностей. Так что уж извините, если их слишком много 🙂
Письмо
Итак, начинаем. На входе у нас письмо с текстом «Journalist shot in Georgia! See attached video. Password is 123» и с приложенным файлом «Georgia.zip».
Для более или менее полного анализа нам понадобятся:
— Самый Лучший дизассемблер в мире IDA
— Неплохой Отладчик Windbg
— python 2.5 (строго говоря, подойдет любой, просто у меня 2.5)
— Visual Studio какая-нибудь и Microsoft SDK, чтобы собрать небольшую программу на с++.
— упаковщик программ upx
— ну и чего-то еще по мелочи.
Распаковываем присланный нам файл, и видим, что наши подозрения оправданы: видео там и рядом не ночевало.
Распаковка
Приступ первый. Сохраняем файл в безопасное место, снимаем с него права на выполнение, загружаем в ida. Сразу же ida ругается на IAT в нестандартной секции и предупреждает, что не все импортируемые функции будут видны, соглашаемся продолжать. После этого ida немного думает, произоводя дизассемблирование и анализ нашего файла, а, закончив, сама переходит в Entry Point.
Видим в окошке «Navigation» какие-то большие и сложные вычисления, а, нажав Ctrl-S, в открывшемся списке сегментов видим две записи: «UPX0» и «UPX1». И это отчетливо отдается у нас в могзу: «упакованно upx». Точнее, есть вероятность, что упакованно upx, и мы отправляемся эту возможность проверять.
После чего, открываем распакованный файл в ida и бегло просматриваем.
Основная функция выглядит довольно просто: сначала производится некоторая настройка с использованием LoadLibrary и GetProcAddress, чтобы не светить используемые функции в импорте. После идет вызов EnumResourceNames, которая перечисляет все имена ресурсов. Что ж, ресурсы, это интересно, посмотрим, что находится в ресурсах нашего файла.
Открываем редактор ресурсов (у меня это старенький ResourceExplorer), и видим среди прочего отличный бинарный ресурс под названием «LOADER.19B099.EXE». Исполняемый файл внутри ресурса! Ну что, очень похоже, что основной вирус экспортирует вложеннный и запускает каким-то образом. Предлагаю пока отложить первый файл и поковырять этот бинарный ресурс.
Троян в трояне
Экспортируем ресурс в файл, смотрим, что говорят антивирусы.
(Обратите внимание, кстати, что докторвеб маркирует этот файл также, как и joined.exe).
Ну, во-первых, размер. 1.6 килобайт. Значит основательно работали напильником, заставляли компилятор оптимизировать и вообще всячески старались. Во-вторых, такой код можно запросто инъектировать в какой-нибудь другой процесс — если этот код, конечно, правильно написан. В третьих, никаких импортов вообще — еще один плюс к гипотезе шелл-кода. Ну и, в четвертых, тело «зашифровано». Вот что у нас творится в точке входа:
Видим, что код вычисляет, где же он находится (получает EIP, используя fnstenv), пробегается от этого места назад до начала текущей страницы, то есть, грубо говоря, пока последные три знака адреса не станут равны нулю. Делается это потому, что код начинается со смещения 00001000h относительно начала образа файла в памяти. Алгоритм распаковки такой:
После чего управление передается куда-то в середину распакованного кода.
Распаковка-2
Ну что же, раз файл сам себя распаковывает, пусть сам это и делает. Нам лишь будет нужно остановиться в правильном месте, чтобы увидеть распакованный код. Запускаем Windbg, жмем Ctrl-E (Open executable file), после этого дебагер останавливается. Это еще не точка входа, а лишь начало процесса. Выясняем точку входа (если мы вдруг забыли ее, когда разглядывали дизассемблированный код):
Нас интересует конечный этап расшифровки: переход на расшифрованный код, который происходит в строке:
Жмем «g» (Go), и, не успеваем моргнуть глазом, как программа останавливается. Мы, кстати, можем увидеть прямо отсюда, как этот код выглядит теперь. По адресу, куда планируется переход, находится вот что:
Ну, вот и прекрасно. Запускаем какой-нибудь LordPE, делаем дамп файла, и код в дизассемблере выглядит теперь более удобочитаемым. Файл размером не изменился, он по-прежнему крошечный. В нем всего три функции. Займемся их изучением.
Основная функциональность
Вот что в точке входа.
Особый интерес представляет связка такого вида:
Через ECX передается параметр в функцию my_get_proc_address (это я ее так назвал. В оригинале она называлась sub_00401135 :), а то, что она возвращает — это ни что иное, как адрес некой функции, на которую передается управление инструкцией call.
Что же делает функция my_get_proc_address?
(Кода там довольно много, те, кому не лень, посмотрят сами, см. ниже). Вкратце:
1. Получает указатель на PEB:
Мы, кстати, тоже можем посмотреть, что там находится:
2. Получает из PEB список загруженных модулей и проходится по нему. Мы тоже знаем, где лежит этот список:
3. Для каждого из этих модулей функция находит таблицу экспорта, «получает список» экспортируемых функций. Для каждой экспортируемой функции вычисляется некий хэш, который и сравнивается с тем самым странным числом, которое передается в функцию как агрумент.
Между прочим, это классика жанра шелкода. Да, это работает немного медленнее обычной процедуры импорта, но имена используемых функций прячет неплохо. Как же нам найти те функции, которые реально используются? В принципе, есть вариант поставить точку останова куда надо и ждать. Но так как прогресс не стоит на месте, и нам отставать нельзя, то мы отвлечемся ненадолго от анализа и займемся программированием.
Вот, значит эта самая функция, довольно простая. Ее мы и запрограмируем. Как на чем, на питоне! Он теперь везде, и в гугле его, говорят, любят.
Значит вспоминаем, о чем мы говорили раньше: «для всех экспортируемых функций всех модулей». Но, постой-ка, скажут внимательные читатели. Ведь шелкод ничего не импортирует! Попался! и довольно потирают руки 🙂 Но есть в исполняемых файлах windows такая извечная русская печаль: создавая новый win32 процесс из PE-файла, загрузчик всегда загружает в него две стандартные библиотеки: ntdll и kernel32. Вот у нас уже и есть список из двух модулей.
Хорошая новость заключается в том, что мы тоже можем получить имена функций, которых экспортируются этими библиотеками! Старой-престарой утилитой dumpbin. И cygwin, конечно же, иметь под рукой будет неплохо.
Ну, и тоже самое для ntdll. Затем в редакторе убираем остатки заголовка и итога, который генерит dumpbin, получая список в итоге. Натравляем наш питон-скрипт на эти файлы, получаем, что например «0xd82afa6f» означает «LdrLoadDll» — о-очень слабо документированная функция, которой пользуется сам загрузчик. Однако, ее название говорит само за себя — она загружает библиотеку в адресное пространство процесса. Как мы уже видели раньше, в дизассемблированном коде фигурирует строка «ole32.dll», да, точно, это именно ее и загружает зловред функцией LdrLoadDll.
Проделываем пассы дампбином и над ol32.dll, находим нашим доморощенным брутфорсом все «секретные» функции (в порядке вызова).
0xd82afa6f — «LdrLoadDll»
0x872b8a64 — «GetTempPathW»
0x4b99cb08 — «CoInitializeEx»
0x938ed88c — «CoInitializeSecurity»
0x7279d017 — «CoCreateInstance»
0xbde95c09 — «GetTempFileNameW»
0x050798d0 — «Sleep»
0x4b09a52a — «CreateProcessW»
0x0f12e6f0 — «CoUninitialize»
0xe3db70a7 — «ExitProcess»
Делаем в уме небольшое описание этого процесса: «Загружаем ole32 (LdrLoadDll), инициализируем COM (CoInitialize*), создаем COM-объект (CoCreateInstance), полчаем название временного файла (GetTemp*), ждем у моря погоды (Sleep), создаем процесс (CreateProcessW), выходим (все остальное). Брр, аж мороз по коже, как методично и равномерно нас собираются заразить какой-то гадостью.
Вобщем, самая большая неприятность — это CoCreateInstance и последующий CreateProcess. Потому как вызовы методов ком-объекта делаются динамически, и эти методы совершенно не поименованы. То есть, мы, конечно, можем узнать, что там вызывается, но это будет геморрой… А что поделать.
Что же за объект создает этот гад? В CoCreateInstance передаются два Guid’а — в коде они выглядят так:
Из-за особенностей хранения данных, „user-friendly“ guid выглядит „перемешанным“ например, если в памяти массив <5CE34C0Dh, 4C1F0DC9h, 0A1DA7C89h, 7CEE8CB7h>, обозначает <5CE34C0D-0DC9-4C1F-897C-DAA1B78CEE7C>. Ну, уже кое-что. Автор шелкода включил захардкоданный guid, значит он уверен, что на большинстве машин это сработает. Ищем по своему реестру это идентификаторы и получаем:
Зловещая тень „разумного“ сервиса закачки файлов маячит за этими идентификаторами. Background Intelligent Transfer Service, или в просторечии, BITS, — это, кстати, та самая штука, которая качает из интернета апдейты для windows. Короче, есть подозрение, что таким образом создается ком-объект, который с помощью BITS качает к нам на машину другой, более опасный вирус. Но это пока только догадки, и мы отправляемся в мснд за документацией по BITS.
Покопавшись немного, находим небольшой пример кода в Connecting to the BITS Service.
Компилируем, дизассемблируем, смотрим, что получилось в нашей демо-программе:
Собственно, что и требовалось доказать. Те самые Guid’ы! Пытаясь выяснить, что имено скачивается в помошью BITS, видим, что имя файла „зашифровано“.
Опять быстренько пишем скрипт на питоне, который расшифровывает нам эту строку:
… и получаем результат, потрясающий нас до глубины души.
(Внимание! По указанному адрему до сих пор находится вирус. Попытка открыть этот файл может окончиться фатально для вас и вашей машины).
Название говорит само за себя. Это бяка, и еше какая!
Собственно, анализ этой бяки вы можете найти по ссылке xanalysis.blogspot.com, которую подсказали в комментариях.
Все, что происходит дальше, мы можем предсказать, даже не возвращаясь в дебагер. Создается задание (Job) для BITS, запускается закачка. Потом каждые 10 милисекунд проверяется статус задачи. Когда закачка завершается, скачанный файл запускается на выполнение. Фух, потора килобайта, а столько возни!
Итого
„Большой“ троянский конь внутри себя как ресурс содержит „маленького“ троянского жеребенка. Этот вирус, всего в полтора килобайта размером (это две страницы текста у меня в редакторе), умеет скачивать и запускать на выполнение другой, более опасный вирус. Сделан он в стиле шелкода, прямо „по учебнику“. Большая часть используемых техник подробно рассмотрена в статье Evolving Shell Code. Троян делает небольшой финт ушами, и вместо реализации сетевых соединений, http протокола, и проч., просто использует сервис windows под названием Background intelligent transfer service (именно это позволяет уменьшить размер кода). Системные функции вызываются не по прямым адресам, а функции, которые используются для работы с файлами, типа CreateFile, не вызываются вообще. Есть большое сомнение, что какой-либо из существующих антивирусов способен опознать такую зловредную функциональность одним только эвристическим анализом. Скачивает эта крошка файл с грациозным названем filebyaka.exe, что говорит о сам знаете каких корнях.
Файлы, использованные при анализе, можно найти по этому адресу
На этой оптимистичной ноте прощаюсь с вами. Не запускайте незнакомые файлы. Берегите себя!
Вирусный анализ на примере — исследуем Trojan-Downloader.Win32.Zanoza.ab
Вы когда-нибудь задумывались о том, какова судьба вируса, пойманного антивирусными компаниями? О том, что происходит с ним ещё до добавления сигнатур в базу? А конкретнее, о вирусном анализе. Может показаться, что самому заниматься вирусным анализом сложно, ненужно и опасно, но на самом деле это совершенно не так. Лишние умения никогда не повредят, да и полезно, иногда, посмотреть перед запуском, что из себя представляет скачанный с интернета исполняемый файл. Для начала работы сгодятся любые знания ассемблера, отладчик с дизассемблером и виртуальная машина на выбор.
Образцы вирусов для анализа можно, конечно, поискать самостоятельно в интернете, но мы с Вами для начала пойдём другим путём. Огромную коллекцию уже готовых для анализа вирусов можно взять на сайте vx.netlux.org. Первым приглянувшимся мне вирусом стал Trojan-Downloader.Win32.Zanoza.ab. Его подробнейшим анализом мы сейчас и займёмся. Кстати, неплохие описания вирусов можно посмотреть на сайте securelist.com.
Первым, что бросается в глаза, является размер файла — всего 1 901 байт. Можно подумать, что из-за малого размера весь функционал вируса будет виден как на ладони, но не будем торопиться. Убедимся в любом 16-ричном редакторе, что файл является исполняемым файлом Windows (по сигнатурам MZ и PE), и загрузим его в любой отладчик-дизассемблер. Картина открывается не радостная:
Мало того, что все секции и заголовки собраны в одну кучу, так и файл, очевидно, чем-то запакован. Далее можно пойти двумя путями. Первый – вручную трассировать программу до обнаружения точки входа и дальнейшее снятие дампа (новичку не рекомендуется). Второй более простой — попробовать определить упаковщик программы и распаковать её автоматически. Пойдём вторым путём. Загружаем программу в PIED:
Нам повезло, PIED успешно обнаружил упаковщик FSG. Скачиваем любой автоматический распаковщик FSG и успешно снимаем один слой защиты (например, Unfsg2.0):
Снова загрузим программу в отладчик-дизассемблер. Мы увидим ещё один слой защиты:
Да, взору открылась полная бессмыслица. Однако можно быть уверенным, что мы на правильном пути. Это вполне нормальный исполняемый код, только немного обфусцированный. Причём плохо обфусцированный: пригладитесь, код просто разбавлен ничего не делающими командами nop и ничего не значащими push reg и pop reg. Пролистаем программу немного вниз и увидим главный расшифровывающий цикл:
Трассируем программу вот до этого места:
И попадаем на уже полностью расшифрованный код программы (не забудьте обновить окно отладчика для корректного отображения команд):
Теперь снимем полученный дамп любым доступным Вам инструментом. Наконец, нам открылся некоторый функционал вируса:
Тут начинается непосредственный анализ. Первым делом при запуске вирус вызывает процедуру, расположенную по адресу 0х401128. Нетрудно догадаться, что эта функция создаёт командный файл с именем «c.bat», следующего содержания:
Идём дальше. После создания bat-файла программа запускает его на исполнение. Начинается крутиться бесконечный цикл попытки удаления файлов chkdsk*.exe, а так же самого исходного файла, путь к которому был бережно передан сценарию через параметр командной строки. Мы увидим на экране множество сменяющих друг друга окон консоли. Теперь идёт самое интересное. Вирус порождает дочерний процесс svсhost.exe в приостановленном состоянии и записывает в него код размером 764 байта, расположенный начиная со смещения 0х401180. Очевидно, что исполняемый файл svсhost.exe был выбран с целью обхода некоторых не особо интеллектуальных файрволов и антивирусов, а также и для того, чтобы пользователь случайно не завершил работающий процесс вируса. Куда же вирус производит инжект? Программист решил особо не напрягаться и просто перезаписал код, на который указывает точка входа исполняемого файла. Как он определил нужный адрес? Вирус банально подгрузил в своё адресное пространство образ svhost.exe функцией LoadLibraryEx. А после этого уже легко определил нужный адрес по стандартным смещениям исполняемого файла Windows (данный участок кода расположен по адресам 0x4010A6 — 0x4010AC). Итак, инжект осуществлён и данному исполняемому файлу осталось лишь передать эстафету приостановленному процессу sсvhost.exе. Возникает вопрос, как исследовать заражённый процесс? Можно, конечно вручную выделить нужный код и затем отдельно его анализировать, но при этом его функциональность и работоспособность могут сильно пострадать. Я не долго думал и решил запустить все это на виртуальной машине и сдампить svсhost.exe во время его работы. Итак, трассируем основную программу до вызова ResumeThread, открываем ProcessExplorer:
И находим PID нужного нам процесса (в принципе, можно было узнать PID ещё в отладчике, ну да ладно). Переводим 1356 из 10 в 16-ричную систему, получим 0х54С. Далее запускаем LordPE и пытаемся снять дамп с процесса:
Видим, что у нас недостаточно прав для этого действия из-за того, что процесс уже отлаживается другой программой. Т.к. мы работаем в окружении виртуальной машины, то можно просто продолжить выполнение основной программы, после чего беспрепятственно снять нужный нам дамп. Внимание. Этот шаг совершается на Ваш страх и риск. У меня всё прошло благополучно, и я получил готовый для анализа заражённый файл svhost.exe:
Мы опять видим цикл расшифровки:
XOR BYTE PTR DS:[EBX-5],0хB1
INC EBX
LOOPD SHORT 0х100251D
Если данную программу запустить на выполнение, то она вылетит с ошибкой, т.к. в секцию кода запись запрещена. Немного подумаем: раз с процесса был снят дамп во время работы, то цикл расшифровки уже завершился. И теперь при запуске программа будет пытаться себя уже зашифровать. Этого нам не надо, поэтому для дальнейшего анализа занопим весь цикл расшифровки. К этому моменту мы уже намного продвинулись, не так ли? Трассируем в виртуальной машине дальше:
Видим цикл, расположенный по адресам 0х10255С-0х1002587. Его предназначение – определение адресов жизненно важных для работы кода WinAPI функций. Само сравнение имён происходит в данном месте:
После определения нужных адресов WinAPI функций мы сталкиваемся ещё с одним слоем защиты. Заражённая программа вызывает функцию VirtualAlloc для выделения дополнительной области памяти, в которую копируется ещё один слой вредоносного кода, передача управления на который производится с помощью команды JMP EAX:
Наконец, нам открылся сам функционал вируса. Вредоносный код подгружает стандартную динамическую библиотеку «urlmon.dll» с целью использования функции URLDownlodToFile, после чего с её помощью производится непосредственная загрузка файлов chkdsk*.exe. Вот момент загрузки файла:
Здесь происходит выполнение загруженного файла:
А вот и завершение процесса:
Отметим так же интересные ссылки для дальнейшего анализа:
Время подвести итоги: анализируемая программа без ведома пользователя загружает из интернета файлы неизвестного содержания и запускает их на исполнение. Вот, собственно, и всё, что данное вредоносное ПО умеет делать, поэтому его можно отнести к категории Trojan-Downloader-ов. Как видите, анализ вредоносного ПО оказался не таким уж и сложным, хотя мы и столкнулись с достаточно большим количеством слоёв защиты. Удачи Вам в вирусном анализе!