Создать свой вирус носитель

Обновлено: 27.03.2024

Я не работаю по RU и СНГ в частности, а значит, чист перед законом. Не надо меня тыкать в УК РФ, его знаю отлично и не нарушаю. Такое у нас УПК, что не считает нарушением 272/273, если не причинило вред Российской Федерации. Таким образом, я отказываюсь от ответственности от сказанного мною тут, а также не несу никакой ответственности за причиненные действия после прочтения этой статьи. И вообще — я завязал. Я добрый, хольте и лелейте.

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

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

Начнем с самых простых вопросов.

Все законодательства мира объять невозможно, поэтому будем рассматривать ситуации на примере УК РФ. Законодательства иных стран в большинстве случаев похожи.

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

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

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

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

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

Начнем с самой веселой цитаты:

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

С субъективной стороны преступление, предусмотренное ч. 1 комментируемой статьи, может быть совершено только с прямым умыслом, так как в этой статье определено, что создание вредоносных программ заведомо для создателя программы должно привести к несанкционированному уничтожению, блокированию, модификации либо копированию информации, нарушению работы ЭВМ.
Использование или распространение вредоносных программ тоже может осуществляться только умышленно, так как в соответствии с ч. 2 ст. 24 УК деяние, совершенное по неосторожности, признается преступлением только в том случае, когда это специально предусмотрено соответствующей статьей Особенной части УК.
Часть 2 комментируемой статьи в отличие от ч. 1 в качестве квалифицирующего признака предусматривает наступление тяжких последствий по неосторожности.

Другое мнение к части 2:

Содержание этих квалифицирующих признаков соответствует содержанию аналогичных признаков ранее рассмотренных составов преступлений

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

Забавно кстати мнение:

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

Таким образом — включите в свои процедуры установки ПО проверку его антивирусом, утвердите процедуры и соблюдайте их — не забываем о 274 УК РФ:

В соответствии со статьей 274 УК РФ уголовная ответственность наступает за нарушение правил эксплуатации средств хранения, обработки или передачи компьютерной информации и информационно-телекоммуникационных сетей.

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

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

Ответ я думаю очевиден.

Правда то же толкование делает снисхождение для выстрелов в ногу:

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

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

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

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

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

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

Ранее мы говорили только о программам. Но 273я содержит и иное: "… распространение или использование… компьютерной информации, заведомо предназначенных". Вспоминаем, что информация — это любой бит на компьютере.

Поэтому любые действия, заведомо модифицирующие, уничтожающие и тд — подпадают под 273 УК РФ.

Даже скопировав вредоносное ПО можно попасть под формулировки закона

В зависимости от выполненных вредоносной программой действий и последствий ответственность может быть не только по ст. 273УК РФ. Два примера

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

Увы это не так. Все действия по созданию (включая как мы помним хранение), распространение и использование — подпадают под УК РФ. То есть если вас возьмут с исходным кодом на территории РФ, вы выполняете какие либо действия против граждан и учреждений РФ — под законы РФ вы подпадаете.

Примеры злоумышленников, попавших в тюрьмы США — тому подтверждение.

Отказываетесь вы от ответственности или нет — закон это не волнует. Закон волнуют совершенные действия. Завязали вы или нет — аналогично. Есть совершенные действия и есть ответственность за них.

Насколько мне лично известно проблема связана не с желанием посадить, а недоработками процедур. Сложностями объединения мелких дел из различных подразделений в одно, опытом сбора доказательств

Иные страны. Все рассматривать не будем, ограничимся двумя

Статья 206 УК РК. Неправомерные уничтожение или модификация информации

1. Умышленные неправомерные уничтожение или модификация охраняемой законом информации, хранящейся на электронном носителе, содержащейся в информационной системе или передаваемой по сетям телекоммуникаций, а равно ввод в информационную систему заведомо ложной информации, если это повлекло существенное нарушение прав и законных интересов граждан или организаций либо охраняемых законом интересов общества или государства,…

Статья 210. Создание, использование или распространение вредоносных компьютерных программ и программных продуктов

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

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

И в случае Казахстана действия не обязательны. Достаточно бездействия

Статья 207. Нарушение работы информационной системы или сетей телекоммуникаций

1. Умышленные действия (бездействие), направленные на нарушение работы информационной системы или сетей телекоммуникаций,…

1. Створення з метою використання, розповсюдження або збуту, а також розповсюдження або збут шкідливих програмних чи технічних засобів, призначених для несанкціонованого втручання в роботу електронно-обчислювальних машин (комп'ютерів), автоматизованих систем, комп'ютерних мереж чи мереж електрозв'язку, — караються штрафом від п'ятисот до тисячі неоподатковуваних мінімумів доходів громадян або виправними роботами на строк до двох років, або позбавленням волі на той самий строк.
2. Ті самі дії, вчинені повторно або за попередньою змовою групою осіб, або якщо вони заподіяли значну шкоду, — караються позбавленням волі на строк до п'яти років.

Вот здесь можно ознакомиться с ответственностью за распространение различных типов (по типам!) вредоносного ПО.

Еще с несколькими подходами к ответственности за создание и использование вредоносного ПО законодательства разных стран можно ознакомится тут.

image

Хакерский мир можно условно разделить на три группы атакующих:

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

Зачем ИБ-персоналу эти сомнительные навыки?

Знай своего врага. Как мы уже обсуждали в блоге Inside Out, нужно думать как нарушитель, чтобы его остановить. Я – специалист по информационной безопасности в Varonis и по моему опыту – вы будете сильнее в этом ремесле если будете понимать, какие ходы будет делать нарушитель. Поэтому я решил начать серию постов о деталях, которые лежат в основе вредоносного ПО и различных семействах хакерских утилит. После того, как вы поймете насколько просто создать не детектируемое ПО, вы, возможно, захотите пересмотреть политики безопасности на вашем предприятии. Теперь более подробно.

Кейлогер – это ПО или некое физическое устройство, которое может перехватывать и запоминать нажатия клавиш на скомпрометированной машине. Это можно представить как цифровую ловушку для каждого нажатия на клавиши клавиатуры.
Зачастую эту функцию внедряют в другое, более сложное ПО, например, троянов (Remote Access Trojans RATS), которые обеспечивают доставку перехваченных данных обратно, к атакующему. Также существуют аппаратные кейлогеры, но они менее распространены, т.к. требуют непосредственного физического доступа к машине.

Тем не менее создать базовые функции кейлогера достаточно легко запрограммировать. ПРЕДУПРЕЖДЕНИЕ. Если вы хотите попробовать что-то из ниже следующего, убедитесь, что у вас есть разрешения, и вы не несёте вреда существующей среде, а лучше всего делать это все на изолированной ВМ. Далее, данный код не будет оптимизирован, я всего лишь покажу вам строки кода, которые могут выполнить поставленную задачу, это не самый элегантный или оптимальный путь. Ну и наконец, я не буду рассказывать как сделать кейлогер стойким к перезагрузкам или пытаться сделать его абсолютно не обнаружимым благодаря особым техникам программирования, так же как и о защите от удаления, даже если его обнаружили.

Вы можете изучить больше про фунцию GetAsyncKeyState на MSDN:

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

Умный кейлогер

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

Давайте предположим, что я хочу заполучить учетные данные Facebook или Gmail для последующей продажи лайков. Тогда новая идея – активировать кейлоггинг только тогда, когда активно окно браузера и в заголовке страницы есть слово Gmail или facebook. Используя такой метод я увеличиваю шансы получения учетных данных.

Вторая версия кода:

Этот фрагмент будет выявлять активное окно каждые 100мс. Делается это с помощью функции GetForegroundWindow (больше информации на MSDN). Заголовок страницы хранится в переменной buff, если в ней содержится gmail или facebook, то вызывается фрагмент сканирования клавиатуры.

Этим мы обеспечили сканирование клавиатуры только когда открыто окно браузера на сайтах facebook и gmail.

Еще более умный кейлогер

Давайте предположим, что злоумышленник смог получить данные кодом, на подобии нашего. Так же предположим, что он достаточно амбициозен и смог заразить десятки или сотни тысяч машин. Результат: огромный файл с гигабайтами текста, в которых нужную информацию еще нужно найти. Самое время познакомиться с регулярными выражениями или regex. Это что-то на подобии мини языка для составления неких шаблонов и сканирования текста на соответствие заданным шаблонам. Вы можете узнать больше здесь.

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

Где первое выражение (re) будет соответствовать любой электронной почте, а второе (re2) любой цифро буквенной конструкции больше 6 символов.

Бесплатно и полностью не обнаружим

В своем примере я использовал Visual Studio – вы можете использовать свое любимое окружение – для создания такого кейлогера за 30 минут.
Если бы я был реальным злоумышленником, то я бы целился на какую-то реальную цель (банковские сайты, соцсети, тп) и видоизменил код для соответствия этим целям. Конечно, также, я запустил бы фишинговую кампанию с электронными письмами с нашей программой, под видом обычного счета или другого вложения.

Остался один вопрос: действительно такое ПО будет не обнаруживаемым для защитных программ?

Я скомпилировал мой код и проверил exe файл на сайте Virustotal. Это веб-инструмент, который вычисляет хеш файла, который вы загрузили и ищет его в базе данных известных вирусов. Сюрприз! Естественно ничего не нашлось.

image

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

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

В следующих статья я покажу, как сделать действительно не обнаружимую версию такого ПО.


Поговорим о компьютерных вирусах? Нет, не о том, что вчера поймал ваш антивирус. Не о том, что вы скачали под видом инсталлятора очередного Photoshop. Не о rootkit-e, который стоит на вашем сервере, маскируясь под системный процесс. Не о поисковых барах, downloader-ах и другой малвари. Не о коде, который делает плохие вещи от вашего имени и хочет ваши деньги. Нет, всё это коммерция, никакой романтики…

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

Мы будем говорить о вирусах, живущих в исполняемых файлах форматов PE и ELF, то есть о вирусах, тело которых представляет собой исполняемый код для платформы x86. Кроме того, пусть наш вирус не будет уничтожать исходный файл, полностью сохраняя его работоспособность и корректно инфицируя любой подходящий исполняемый файл. Да, ломать гораздо проще, но мы же договорились говорить о правильных вирусах, да? Чтобы материал был актуальным, я не буду тратить время на рассмотрение инфекторов старого формата COM, хотя именно на нем были обкатаны первые продвинутые техники работы с исполняемым кодом.

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


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

  • Куда положить вирус? Необходимо найти достаточно места, чтобы вирус туда поместился, записать его туда, по возможности не разломав файл и так, чтобы в области, в которой вирус окажется, было разрешено исполнение кода.
  • Как передать управление на вирус? Просто положить вирус в файл недостаточно, надо еще совершить переход на его тело, а после завершения его работы вернуть управление программе-жертве. Или в другом порядке, но, в любом случае, мы же договорились не ломать ничего, да?

Исполняемый файл (PE или ELF) состоит из заголовка и набора секций. Секции – это выровненные (см. ниже) буферы с кодом или данными. При запуске файла секции копируются в память и под них выделяется память, причем совсем необязательно того объёма, который они занимали на диске. Заголовок содержит разметку секций, и сообщает загрузчику, как расположены секции в файле, когда он лежит на диске, и каким образом необходимо расположить их в памяти перед тем, как передать управление коду внутри файла. Для нас интересны три ключевых параметра для каждой секции, это psize, vsize, и flags. Psize (physical size) представляет собой размер секции на диске. Vsize (virtual size) – размер секции в памяти после загрузки файла. Flags – атрибуты секции (rwx). Psize и Vsize могут существенно различаться, например, если программист объявил в программе массив в миллион элементов, но собирается заполнять его в процессе исполнения, компилятор не увеличит psize (на диске содержимое массива хранить до запуска не нужно), а вот vsize увеличит на миллион чего-то там (в runtime для массива должно быть выделено достаточно памяти).

Флаги (атрибуты доступа) будут присвоены страницам памяти, в которые секция будет отображена. Например, секция с исполняемым кодом будет иметь атрибуты r_x (read, execute), а секция данных атрибуты rw_ (read,write). Процессор, попытавшись исполнить код на странице без флага исполнения, сгенерирует исключение, то же касается попытки записи на страницу без атрибута w, поэтому, размещая код вируса, вирмейкер должен учитывать атрибуты страниц памяти, в которых будет располагаться код вируса. Стандартные секции неинициализированных данных (например, область стека программы) до недавнего времени имели атрибуты rwx (read, write, execute), что позволяло копировать код прямо в стек и исполнять его там. Сейчас это считается немодным и небезопасным, и в последних операционных системах область стека предназначена только для данных. Разумеется, программа может и сама изменить атрибуты страницы памяти в runtime, но это усложняет реализацию.

Также, в заголовке лежит Entry Point — адрес первой инструкции, с которой начинается исполнение файла.

Необходимо упомянуть и о таком важном для вирмейкеров свойстве исполняемых файлов, как выравнивание. Для того чтобы файл оптимально читался с диска и отображался в память, секции в исполняемых файлах выровнены по границам, кратным степеням двойки, а свободное место, оставшееся от выравнивания (padding) заполнено чем-нибудь на усмотрение компилятора. Например, логично выравнивать секции по размеру страницы памяти – тогда ее удобно целиком копировать в память и назначать атрибуты. Даже вспоминать не буду про все эти выравнивания, везде, где лежит мало-мальски стандартный кусок данных или кода, его выравнивают (любой программист знает, что в километре ровно 1024 метра). Ну а описание стандартов Portable Executable (PE) и Executable Linux Format (ELF) для работающего с методами защиты исполняемого кода – это настольные книжки.

  • поставить указатель точно на начало какой-нибудь инструкции (просто так взять рандомное место в исполняемой секции и начать дизассемблирование с него нельзя, один и тот же байт может быть и опкодом инструкции, и данными)
  • определить длину инструкции (для архитектуры x86 инструкции имеют разные длины)
  • переместить указатель вперед на эту длину. Мы окажемся на начале следующей инструкции.
  • повторять, пока не решим остановиться
  1. Выбираем вкусный исполняемый файл (достаточно толстый, чтобы в него поместилось тело вируса, с нужным распределением секций и т.п.).
  2. Читаем свой код (код тела вируса).
  3. Берем несколько первых инструкций из файла-жертвы.
  4. Дописываем их к коду вируса (сохраняем информацию, необходимую для восстановления работоспособности).
  5. Дописываем к коду вируса переход на инструкцию, продолжающую исполнение кода-жертвы. Таким образом, после исполнения собственного кода вирус корректно исполнит пролог кода-жертвы.
  6. Создаем новую секцию, записываем туда код вируса и правим заголовок.
  7. На место этих первых инструкций кладем переход на код вируса.

Думаю, не надо описывать вам компоненты современного антивируса, все они крутятся вокруг одного функционала – антивирусного детектора. Монитор, проверяющий файлы на лету, сканирование дисков, проверка почтовых вложений, карантин и запоминание уже проверенных файлов – все это обвязка основного детектирующего ядра. Второй ключевой компонент антивируса – пополняемые базы признаков, без которых поддержание антивируса в актуальном состоянии невозможно. Третий, достаточно важный, но заслуживающий отдельного цикла статей компонент – мониторинг системы на предмет подозрительной деятельности.

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

  • сокрытие кода самого вируса;
  • сокрытие его точки входа.

Сокрытие точки входа (Entry Point Obscuring) в результате послужило толчком для появления в вирусных движках автоматических дизассемблеров для определения, как минимум, инструкций перехода. Вирус старается скрыть место, с которого происходит переход на его код, используя из файла то, что в итоге приводит к переходу: JMP, CALL, RET всякие, таблицы адресов и т.п. Таким образом, вирус затрудняет указание смещения сигнатуры.

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

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

wikiHow работает по принципу вики, а это значит, что многие наши статьи написаны несколькими авторами. При создании этой статьи над ее редактированием и улучшением работали, в том числе анонимно, 12 человек(а).

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

Изображение с названием Create a Virus Step 1

  • Mac OS X и Linux считаются более защищенными от вирусных атак (связано с работой прав доступа и архитектурой операционной системы). 95% всех вирусов нацелены на пользователей Windows.

Изображение с названием Create a Virus Step 2

Изображение с названием Create a Virus Step 3

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

Изображение с названием Create a Virus Step 4

Изображение с названием Create a Virus Step 5

  • Если вы хотите создать исполняющие вирусы, то поищите курсы C и C++ в интернете.
  • Если вы хотите создать макро вирусы, то выучите язык макросов для нужной программы, например, Microsoft Office.
  • Visual Basic может быть использован для создания вредоносных программ для пользователей Windows.

Изображение с названием Create a Virus Step 6

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

Изображение с названием Create a Virus Step 7

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

  • Постарайтесь проводить тесты в закрытой сборке так, чтобы избежать случайного попадания вашего вируса в сеть. Поставьте тестовые машины в отдельную сеть и протестируйте распространение вируса.
  • Улучшайте код вашего вируса по ходу тестирования. Работайте над ошибками вашего кода.

Изображение с названием Create a Virus Step 9

Выпустите ваш вирус. Если вы удовлетворены работой вашего вируса, то настало время его выпустить. Но до того, подумайте, готовы ли к последствиям, которые возможны из-за вашего вируса. Возможно вам стоит использовать ваши знания и работать над другими проектами. [2] X Источник информации


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

Итак, давай погрузимся в мрачный лабиринт кибернетического мира, ряды обитателей которого скоро пополнятся еще одним зловредным созданием. Внедрение вируса в исполняемый файл в общем случае достаточно сложный и мучительный процесс. Как минимум для этого требуется изучить формат 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.

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