Comments 41
Ссылка на прошлую часть не работает. Начинать читать со второй части — ад перфекциониста.
+3
UFO just landed and posted this here
Рекомендую сделать содержание. Мне кажется Вам есть еще что рассказать!
+2
UFO just landed and posted this here
Я же на это и жалуюсь в конце, а ничего нового и нет. В плане исполняемого кода все замерло лет шесть-семь назад уже. Может какая-нибудь новая аппаратная платформа стартанет новый виток развития
Попробую в следующих статьях что-нибудь нестандартное обмозговать
Попробую в следующих статьях что-нибудь нестандартное обмозговать
+5
UFO just landed and posted this here
А можно ключ и не хранить в памяти и даже цикл шифрования улучшить используя известную задачу «банерокрутилка», в среде вирмейкеров известную как «PRIDE-технология»
>>даже если в реальности она в данной ситуации вернула бы ошибку…
Неа. Далеко не факт. Просто косят под какую-либо версию Windows. Зачем морочиться. Возвращать всега ОК, это путь в ад
>>даже если в реальности она в данной ситуации вернула бы ошибку…
Неа. Далеко не факт. Просто косят под какую-либо версию Windows. Зачем морочиться. Возвращать всега ОК, это путь в ад
0
UFO just landed and posted this here
Клево, использование кодов возврата API для генерации — прикольно, спасибо!
Была еще интересная тема — ключ вообще нигде не хранился. Каждый раз при надобности ключ подбирался bruteforce-ом — вирус себе может позволить такую задержку, у него времени много, а вот эмулятору это очень напряжно.
Была еще интересная тема — ключ вообще нигде не хранился. Каждый раз при надобности ключ подбирался bruteforce-ом — вирус себе может позволить такую задержку, у него времени много, а вот эмулятору это очень напряжно.
+2
Да. С помощью брутфорс-атаки получаем ключ было, к примеру virus.win32.crypto.a. Но исчезло ибо необязательно вычислять ключ ) Основная цель вируса «спрятать данные», а это не означает что обязательно нужно применять шифрование в чистом виде. Подойдет Любое обратимое преобразование данных, а код такого преобразования обфусцировать
+3
Процессоры x86, к слову, имеют встроенные средства для генерации мусора (точнее будет сказать, для небольшого увеличения энтропии кода). ;-)
Умный эвристик таким «полиморфизмом», конечно, не обманешь; но иногда этим пользуются коммерческие ассемблеры и компиляторы (watermarking of generated binaries).
Умный эвристик таким «полиморфизмом», конечно, не обманешь; но иногда этим пользуются коммерческие ассемблеры и компиляторы (watermarking of generated binaries).
+4
Точняк. Только в терминологии статьи инструкции анализирует не эвристик, а эмулятор.
Подумал еще, что наверное, на RISC архитектурах (регистров больше, а инструкций меньше), где свободы в генерации инструкций существенно меньше, метаморфные генераторы должны быть либо совсем тупыми и простыми (sse, mmx), либо генерировать весьма непростой в плане оценки «мусорности» микс.
Подумал еще, что наверное, на RISC архитектурах (регистров больше, а инструкций меньше), где свободы в генерации инструкций существенно меньше, метаморфные генераторы должны быть либо совсем тупыми и простыми (sse, mmx), либо генерировать весьма непростой в плане оценки «мусорности» микс.
+3
Про код Guard@mail.ru пост будет? :)
+3
Откройте тайну при чем тут блог mail.ru?
Всех, кто против минусуют, это понятно, но зачем это печатать?
Всех, кто против минусуют, это понятно, но зачем это печатать?
+3
Забавно, что эти идеи были релизованы в далеком 1989 году
в вирусе Mutant.
в вирусе Mutant.
0
Пропаганда сработала, отпала детская мечта писать вирусы.
0
Спасибо за статью. С удовольствием прочитал, понастольгировал.
Да, как выше писали, ничего нового, но очень интересно написано про старый добрый 0xCC и его окружение с историческим развитием.
ЗЫ: думаю нужно где-то в начало вставить небольшие вставки из УК под спойлер. Ну, так сказать, предупредить…
ЗЫЫ: можно еще в таком же стиле написать про сетевую живность 8)
Да, как выше писали, ничего нового, но очень интересно написано про старый добрый 0xCC и его окружение с историческим развитием.
ЗЫ: думаю нужно где-то в начало вставить небольшие вставки из УК под спойлер. Ну, так сказать, предупредить…
ЗЫЫ: можно еще в таком же стиле написать про сетевую живность 8)
0
А вот в сетевой живности я как раз «плаваю», увы. Закончил на последних сетевых эксплойтах под 2000, после этого занимался только движками и исполняемым кодом. Следующая статья скорее будет про какую нибудь веселую криптографию, или опять же про исполняемый код, но уже в нестандартных моделях — шеллкодах, стеганографии и т.п., пока не решил.
А про УК под спойлер… На основе этой статьи движок не напишешь, там возни огромный вагон, так что те, кто уже писал, сами всё знают, а те кто не писал, тем еще долго возиться, и по любому придется столкнуться с ресурсами, где всё станет понятно
А про УК под спойлер… На основе этой статьи движок не напишешь, там возни огромный вагон, так что те, кто уже писал, сами всё знают, а те кто не писал, тем еще долго возиться, и по любому придется столкнуться с ресурсами, где всё станет понятно
+1
Спасибо автору. Статьи замечательные во всех отношениях.
0
BoogerWooger
Кстати, а не хочется ли написать про антивирусы? О них же тоже можно многое рассказать. Как устроен эмулятор к примеру? Правда ли что это действительно «песочница» или все-таки часть кода на живом процессоре исполняется? Как только люди узнают ответ на предыдущий вопрос у них рождается другой: А можно ли «убежать» из «песочницы»? Другими словами, антивирусные технологии тоже весьма интересная область. Понятно, что они всегда будут «догоняющей» стороной, но тем не менее задач любопытных там достаточно!
Кстати, а не хочется ли написать про антивирусы? О них же тоже можно многое рассказать. Как устроен эмулятор к примеру? Правда ли что это действительно «песочница» или все-таки часть кода на живом процессоре исполняется? Как только люди узнают ответ на предыдущий вопрос у них рождается другой: А можно ли «убежать» из «песочницы»? Другими словами, антивирусные технологии тоже весьма интересная область. Понятно, что они всегда будут «догоняющей» стороной, но тем не менее задач любопытных там достаточно!
0
Автор, по-моему вы путаете понятия «полиморфизм» и «метаморфизм».
В противоположность этому, у
Примеры живых метаморфных вирусов имеются, и сдерживает это явление только то, что создание метаморфного кода пока еще очень трудоемко, нет инструментальных средств, облегчающих это. Ну и у многих моделей метаморфов размер кода растет с каждым поколением. В код каждый раз добавляется мусор, в придачу к мусору, который был добавлен в прошлый раз. Если же один мусор заменяется другим — значит мусор детектируется в алгоритме вируса автоматически, но это же подвергает метаморф той опасности, что в целях анализа или детектирования этот же алгоритм чистки мусора может быть извлечен из вируса и использован враждебными ему силами (разработчик антивируса или сам антивирус).
Полиморфные вирусыимеют статический зашифрованный код и мутирующий расшифровщик. Этот расшифровщик может содержать мусорные инструкции и другие трюки, но суть в том, что имеется статический код, который антивирусы могут обнаружить методом эмуляции, как только он появится в памяти расшифрованным.
В противоположность этому, у
метаморфных вирусовмутирует не только расшифровщик, но и вообще весь исполняемый код. В этом случае даже пропадает необходимость его шифрования, т.к. он мутирует. Обнаружить метаморфный код методом эмуляции невозможно, так как не наступает момент, когда в памяти формируется нечто такое, что неизменно от экземпляра к экземпляру такого вируса. Ну, разве что, данные, но их тоже можно как-то проредить и спрятать.
Примеры живых метаморфных вирусов имеются, и сдерживает это явление только то, что создание метаморфного кода пока еще очень трудоемко, нет инструментальных средств, облегчающих это. Ну и у многих моделей метаморфов размер кода растет с каждым поколением. В код каждый раз добавляется мусор, в придачу к мусору, который был добавлен в прошлый раз. Если же один мусор заменяется другим — значит мусор детектируется в алгоритме вируса автоматически, но это же подвергает метаморф той опасности, что в целях анализа или детектирования этот же алгоритм чистки мусора может быть извлечен из вируса и использован враждебными ему силами (разработчик антивируса или сам антивирус).
+1
Автор ничего не путает ;)
Вы безусловно правы в приведенной Вами терминологии и совершенно верно обозначили эти различия.
Рассмотрим слова из текста:
Применяется фраза «новый код». Но какого он размера ни слова! Может автор как раз и имел ввиду код дешифровщика, а может действительно вирус целиком. Так что автор просто не уточнил размерность.
Вы безусловно правы в приведенной Вами терминологии и совершенно верно обозначили эти различия.
Рассмотрим слова из текста:
Полиморфизм для компьютерных вирусов означает, что каждый новый зараженный файл содержит в себе новый код вируса-потомка
Применяется фраза «новый код». Но какого он размера ни слова! Может автор как раз и имел ввиду код дешифровщика, а может действительно вирус целиком. Так что автор просто не уточнил размерность.
+1
Да, я знаю, что многие трактуют это так: полиморфный движок — это аналог упаковщика (декриптор + зашированный буфер), а метаморфный — полная генерация нового кода из ПОЛНОГО старого кода. Но метаморфизм в таком чтении реально нежизнеспособен — вы правильно заметили, что размер кода будет расти, проблемы с его работоспособностью будут расти также, также будет расти и возможность более-менее эффективно инфицировать файлы. Также очень правильно подмечено про «антивирус-в-вирусе» — черт, надо было про это в статье написать, спасибо.
Я, как то так сложилось, всегда классифицировал немного по другому — все рассматриваемые вирусы имеют декриптор + зашифрованное тело и являются полиморфами (т.к. зашифрованный буфер уже меняется от поколения к поколению).
И, только, если используется генерация кода (изготовление инструкций на основе базового кода) — то я считаю движок метаморфным, без разници какая часть кода была сгенерирована автоматически, декриптор или весь код.
Ну а как правильно и абсолютно точно классифицировать движки, увы, никто не скажет, я пытался найти много раз. Даже лингвистика не особо помогает. С «поли» понятно: если есть конечное число вариантов декриптора — это «поли». Но очень уж расплывчатый смысл у приставки «мета».
P.S. EvilsInterrupt, спасибо, да, я имел в виду только декриптор. В этой статье после рассмотрения первого полиморфного вируса можно вообще везде, где упоминаются манипуляции над кодом, иметь в виду именно небольшой код декриптора, а не весь вирус целиком
Я, как то так сложилось, всегда классифицировал немного по другому — все рассматриваемые вирусы имеют декриптор + зашифрованное тело и являются полиморфами (т.к. зашифрованный буфер уже меняется от поколения к поколению).
И, только, если используется генерация кода (изготовление инструкций на основе базового кода) — то я считаю движок метаморфным, без разници какая часть кода была сгенерирована автоматически, декриптор или весь код.
Ну а как правильно и абсолютно точно классифицировать движки, увы, никто не скажет, я пытался найти много раз. Даже лингвистика не особо помогает. С «поли» понятно: если есть конечное число вариантов декриптора — это «поли». Но очень уж расплывчатый смысл у приставки «мета».
P.S. EvilsInterrupt, спасибо, да, я имел в виду только декриптор. В этой статье после рассмотрения первого полиморфного вируса можно вообще везде, где упоминаются манипуляции над кодом, иметь в виду именно небольшой код декриптора, а не весь вирус целиком
+1
все рассматриваемые вирусы имеют декриптор + зашифрованное тело и являются полиморфами (т.к. зашифрованный буфер уже меняется от поколения к поколению).
Пусть зашифрованное тело и меняется, но если не меняется расшифровщик — то такой вирус не является полиморфным, и его можно детектировать по сигнатуре. Именно этим отличаются полиморфные вирус от «обычных»: последние могут быть детектированы по сигнатуре (хотя бы короткой программы-расшифровщика), а первый — нет.
В русской википедии есть некоторая путаница по этому поводу, а в английской сказано четко:
Encryption alone is not polymorphism. To gain polymorphic behavior, the encryptor/decryptor pair are mutated with each copy of the code. This allows different versions of some code while all function the same
И именно в таком смысле понятие «полиморфный вирус» использовалось с 1990х годов в нормальных книгах по вирусам, таких авторов, как Лозинского и Касперского. Ранний Касперский, правда, использовал другой термин — «вирус-призрак», но определял его так же. Цитата: "… шифрование тела вируса и модификации программы-расшифровщика". Простые же случаи шифровки со статическим расшифровщиком никто вообще не рассматривал — они с точки зрения обнаружения ничем не отличаются от незашифрованных вирусов.
С распространением такого способа детектирования, как «эмуляция + сигнатура», борьба с полиморфными вирусами перестала быть сложной задачей, и тогда авторы вирусов выдали новое изобретение — метаморфизм, которое является качественным скачком по отношению к полиморфизму. Метаморфный код нельзя детектировать по сигнатуре, хоть с эмуляцией, хоть без нее. Используются другие методы, такие как анализ поведения, так как ни за что больше тут не зацепишься.
Но метаморфизм в таком чтении реально нежизнеспособен — вы правильно заметили, что размер кода будет расти, проблемы с его работоспособностью будут расти также
Боюсь, в этом вы ошибаетесь. Указанные трудности не являются принципиальными для метаморфного кода. Например, метаморфный движок можно создать на базе виртуальной машины, байт-код которой будет меняться от поколения к поколению хотя бы простой перестановкой. Ну а сама виртуальная машина является достаточно простой конструкцией, чтобы ее можно было легко «замусоривать», и «чистить», наподобие того, как мутируют расшифровщики в полиморфных вирусах.
Также рекомендую почитать статьи анг. википедии «Polymorphic code» и «Metamorphic code», чтобы четко увидеть разницу.
+1
Ок, приму к сведению, спасибо
0
такого способа детектирования, как «эмуляция + сигнатура»
Не совсем понял о чем Вы. Не могли бы сформулировать другими словами?
0
Так в статье же описано. Целый раздел: «Наш ответ Чемберлену: эмуляция». Если кратко, то антивирус позволяет коду вируса исполняться в виртуальной машине, и следит за состоянием памяти этой машины. Полиморфный вирус расшифровывает свой код (который у полиморфных вирусов не мутирует, а только шифруется) и помещает его в память. Тут-то антивирус и детектирует этот код по сигнатуре.
+1
Я думал вы про вещи встречаемые в коде, к примеру Модуль clamav расшифровщик Y0da Cryptor 1.3
0
В разделе про Чемберлена я имел в виду именно это — доэмулировать до того момента, как в памяти появятся данные (или код) которые не меняются от поколения к поколению, и сравнить по сигнатуре, т.е. именно то, что написал MichaelBorisov.
Второй подход, когда я бегу по коду декриптора, «сворачиваю» его к некоторому эталонному, выбрасываю мусор, и потом сравниваю уже этот нормализованный код (тут моей задачей будет являться привести все варианты сгенерированного кода к единому эталонному) — менее универсален, намного быстрее, и требует более глубокого изучения кода генератора. Про это я уже не стал писать, ибо общих алгоритмов там практически нет — все зависит от генератора.
По идее, это можно тоже назвать сравнением по «кодовой» сигнатуре, но тут я опять могу попасть впросак с классификацией
Второй подход, когда я бегу по коду декриптора, «сворачиваю» его к некоторому эталонному, выбрасываю мусор, и потом сравниваю уже этот нормализованный код (тут моей задачей будет являться привести все варианты сгенерированного кода к единому эталонному) — менее универсален, намного быстрее, и требует более глубокого изучения кода генератора. Про это я уже не стал писать, ибо общих алгоритмов там практически нет — все зависит от генератора.
По идее, это можно тоже назвать сравнением по «кодовой» сигнатуре, но тут я опять могу попасть впросак с классификацией
+1
А по-поводу ZMist'оподобный движков что скажете?
Там разборка оригинального кода .exe на инструкции и перемешивание их с вирусными.
Там разборка оригинального кода .exe на инструкции и перемешивание их с вирусными.
0
Я бы лучше попросил Win95/Zmorph или Win95/Zperm. Это поделки того же автора
0
Mistfall мне ну очень-очень понравился, по моему даже написал на нем что-то. Но юзать его по-моему нужно только вкупе с методами сокрытия точки входа. Если просто влепить переход на код вируса прямо в EP, то эмулятор спокойно пойдет по нему и наберет себе характерных данных для детекта. Такие движки это в общем-то очень добротная доработка инфектора. Если хорошо скрыть точку входа, то это очень круто, найти что-то в файле будет очень проблематично. А если не заморачиваться, то эмулятор спокойно разгрызет и Mistfall.
0
Кстати, рекомендую к прочтению про детект мусора все рассматривается на базе Zmist-вируса. Все по-английски, но достаточно развернуто!
+1
Sign up to leave a comment.
Вирусы. Вирусы? Вирусы! Часть 2