Антивирусные компании создающие вирусы
По Интернету с переменным успехом курсирует следующая байка: мол, или некоторая часть, или вообще все вирусы на самом деле пишутся разработчиками антивирусных пакетов, чтобы вселять страх в души бедных пользователей и заставлять их платить свои кровные за спасительный софт.
Порой об этом мифе забывают, а порой – обычно после того, как новостные издания напишут о свежей эпидемии, а компании в тот же день отрапортуют о выпуске обновлений для борьбы с ней, – начинают обсуждать его с новой силой. "Теперь-то всё точно понятно, ага!"
Если копнуть глубже, эта конспирологическая теория разбивается о ряд достаточно сильных аргументов: почему существует так мало вирусов для Linux и Mac OS X? Понятно, что миром пока ещё правит Windows (читайте – её рыночная доля самая большая), но ведь те же фанаты Apple, нашедшие деньги на весьма дорогой фирменный компьютер, наверняка быстрее отыщут средства и на покупку антивируса, чем студент, скачавший из сети пиратский образ Windows Vista.
Кроме того, для перечисления всех компаний, занимающихся разработкой антивирусных утилит, не хватит пальцев обеих рук и ног. Даже если предположить, что хотя бы половина из них "балуется" написанием троянцев, то, Вы представляете себе масштабы этого бардака?
Одна компания ещё может вести псевдоборьбу с собственными вирусами, ну а если ей придется искать лекарства от продуктов жизнедеятельности ещё десятка-двух (анти)вирусных контор? Пустая трата времени, ресурсов и средств, которые куда полезнее было бы пустить на борьбу с вирусами, создаваемыми одиночными хакерами-крякерами (ну, или их командами).
И потом: сегодня хорошим тоном является наличие в портфолио компаний бесплатных версий антивирусов, а корпорация Microsoft вообще закрыла свой коммерческий проект Live OpenCare и планирует выпустить бесплатный пакет Security Essentials (экс-Morro). Так что же, компании предпочитают вкладывать деньги в написание вирусов, а затем пересаживать пусть и незначительную часть пользователей на бесплатные решения? Нелогично как-то.
Мы решили дать слово представителям антивирусных компаний: пусть ещё раз объяснят читателям, почему они не считают нужным и возможным увеличивать себе объём работы путем разработки собственных фирменных вирусов.
"Лаборатория Касперского" сделала следующее заявление: "Мы подумываем над написанием отдельной статьи на эту тему, так как в рамках комментария развенчать этот миф крайне сложно. Поэтому, пожалуй, в данном случае мы ограничимся ранее выходившими высказываниями наших спикеров на этот счет". Видимо, компании уже не раз приходилось опровергать вышеописанные байки.
Остальные спикеры – Кирилл Керценбаум (руководитель группы технических консультантов по безопасности компании Symantec), Андрей Албитов (глава российского представительства ESET) и Валерий Ледовской (аналитик компании "Доктор Веб") – сошлись на том, что незапятнанная репутация в "антивирусном" бизнесе имеет огромное значение, и если компания будет замечена в написании вредоносного софта, то на ней можно будет сразу ставить жирный крест.
По словам Андрея Албитова, написание серьезного вируса – это сложный ресурсоемкий процесс. Деньги компании, потраченные на зарплаты таких "специалистов" и технологические разработки, просто не будут окупаться. На данный момент в Интернете количество угроз настолько велико (только лаборатория ESET получает более 700000 образцов в месяц), что создавать дополнительное вредоносное ПО для производителей антивирусов просто не имеет смысла.
Каждый год число вирусов и других подобных программ увеличивается в два-три раза. Если бы компании, специализирующиеся в сфере разработки средств информационной безопасности, расширяли бы свой состав "штатных хакеров" такими темпами, они бы уже давно разорились.
А по словам Валерия Ледовского, количество вредоносных программ сейчас таково, что не всегда хватает времени, чтобы аналитик вручную и тщательно обрабатывал каждый новый образец вредоносных программ. Наоборот, приходится изобретать и постоянно дорабатывать различные эвристические анализаторы и другую автоматику, чтобы облегчить участь вирусных аналитиков.
Сейчас в сутки появляется около тысячи новых образцов вирусов, и их количество продолжает расти в геометрической прогрессии. Да и вирусным аналитикам было бы экономически невыгодно работать на такой должности, если бы они создавали вирусы. Ведь вирусописатели от своих творений получают на порядок больший доход, нежели антивирусные компании.
По мнению Кирилла Керценбаума, любая современная компания прекрасно понимает, что её бизнес строится на доверии к своим сотрудникам и партнёрам, и особенно это важно для компаний, которые занимаются вопросами информационной безопасности.
Ведь их работа в ещё большей степени зависит от уровня того, насколько её собственные сотрудники и процессы соответствуют критериям доверенности, и никто не застрахован от того, что человек, пишущий, например, вирусы в одной компании, не использует впоследствии свои знания против неё самой, и поэтому очевидно, что такие люди в несравненно большей степени представляют угрозу компании, нежели обещают мифические выгоды от такой деятельности.
А миф о вредоносном ПО, создающемся в недрах антивирусных компаний, может быть легко развенчан путем сопоставления размеров потенциальной прибыли и огромной пропасти возможных рисков.
От себя добавим, что на нашей памяти нет ни единого случая, когда антивирусная компания прекратила бы свое существование в результате выявления общественностью её деятельности по написанию троянцев, червей и прочих программ такого рода. Логично было бы предположить, что отношение к распространению вирусов могут иметь лишь специалисты по информационной безопасности, не по своей воле ушедшие с работы.
Следование заблуждениям влияет на принятие решений, которые могут оказаться неправильными, а иногда и приводить к тяжелым последствиям. Эта статья посвящена мифам, окружающим антивирусы, причинам их возникновения и их влиянию на информационную безопасность каждого пользователя антивируса.
Миф № 1. Вирусов не существует
Это не так, но здесь важно различать собственно вирусы, способные размножаться самостоятельно, и прочие вредоносные программы. Вирусы существуют, но их крайне мало по сравнению с распространенными сейчас троянцами.
Вирусами в строгом определении этого термина называются только те вредоносные программы, которые имеют механизм саморазмножения, — т. е. обладают возможностью создания своих копий и внедрения своего кода в другие файлы.
На сегодняшний день подавляющее большинство вредоносных программ (более 90%) — троянцы. Они не имеют механизма саморазмножения и не являются вирусами.
Миф № 2. Новые вредоносные программы появляются редко
Миф № 3. Антивирусные компании сами пишут вредоносные программы
Современные вредоносные программы разрабатываются не просто вирусописателями-профессионалами. Их разработка – часть хорошо организованного криминального бизнеса.
В состав криминальных группировок входят:
- Организаторы — лица, которые налаживают процесс создания и использования вредоносного ПО, а также руководят им.
- Разработчики вредоносного ПО.
- Тестировщики созданного ПО.
- Исследователи – специалисты по поиску пригодных для преступного использования уязвимостей в операционных системах и прикладном ПО.
- Распространители вредоносного ПО.
- Администраторы, обеспечивающие распределенную безопасную работу внутри преступного сообщества и управление бот-сетями.
- Веб-мастера, создающие сайты для распространения вредоносного ПО.
- Менеджеры, занимающиеся реализацией вредоносных программ (некоторые троянцы пишутся на продажу или для сдачи в аренду).
- Организаторы DDoS-атак.
- Создатели недобросовестных рекламных ресурсов и партнерских программ, зарабатывающие на рекламных троянцах.
С какой целью пишут вредоносные программы?
Вредоносное ПО создается исключительно с целью извлечения выгоды.
Тот, кто вовлечен в процесс создания, распространения и поддержки инфраструктуры для функционирования троянца, созданного для хищения чего-либо, — преступник.
Современные троянцы воруют как информацию, так и материальные активы пользователей и компаний. Для последующей перепродажи сгодится все украденное:
- Логины и пароли — к системам онлайн-банкинга и электронных платежей, аккаунтам в социальных сетях и т.д.
- Виртуальные деньги (например, биткойны).
- Письма электронной почты и адреса книги контактов.
- Фотографии — с их помощью можно шантажировать жертву или нанести ей моральный ущерб, выложив снимки в Интернете.
- Любого рода техническая информация о ПК жертвы.
- Игровые аккаунты и артефакты.
Миф № 4. Антивирус обязан обнаруживать все вредоносные программы в момент их проникновения
Это поразительно живучий миф. Но это требование просто невыполнимо! Также как невозможно изобрести лекарство сразу от всех болезней. Панацеи не существует, и с этим придется смириться, хотя о ней веками мечтают люди.
Только никем не определяемый троянец выпускается в живую природу или внедряется на ПК жертвы, если атака целевая.
Миф № 5. Действие вируса на компьютере всегда заметно
Этот миф – из наиболее опасных! Он уходит корнями во времена написания первых вирусов, большинство из которых были либо деструктивными (несли разрушительные функции, например, уничтожали всю информацию на ПК), либо сопровождали свое существование на зараженной машине бурной деятельностью — например, массовой рассылкой писем со своей копией, что замедляло работу системы и было заметно.
Сегодня цели злоумышленников — ваши деньги и ваши данные. Чтобы украсть больше, нужно сидеть тихо.
Миф № 6. Антивирус определяет вредоносные программы только по сигнатурам
Этот миф живет с первых лет существования антивирусов. Тогда, более 20 лет назад, он имел под собой основания. Чисто сигнатурные антивирусы, т. е. определяющие вредоносные программы по записям в вирусных базах, вымерли в 90-х годах прошлого века, когда появились полиморфные вирусы, изменяющиеся при каждом запуске и, соответственно, не детектируемые по сигнатурам.
Если бы и сегодня антивирус умел распознавать новые вирусы только на основа - нии записей в вирусных базах, такие базы не смог бы уместить в своей памяти ни один компьютер, проверка занимала бы много времени, а быстродействие ПК было бы серьезно замедлено.
Сегодняшний антивирус — это комплекс эвристических, поведенческих и превентивных технологий несигнатурного характера, сочетание которых вместе с записями в вирусных базах позволяет антивирусу обеспечивать вашу безопасность от реальных угроз.
Миф № 7. Если для вредоносной программы в вирусной базе нет записи, антивирус обязан распознать ее с помощью эвристических технологий
Миф № 8. Для защиты от вредоносных программ помимо антивируса требуется иное ПО
Миф № 9. Если не посещать подозрительные сайты и не переходить по ссылкам в письмах от незнакомых отправителей, антивирус не нужен
Верящие в то, что антивирус не нужен и только тормозит работу компьютера, полагают, что для заражения системы необходимо собственноручно установить троянца — например, скачав его по вредоносной ссылке из письма.
Однако практика показывает: в огромном количестве случаев пользователи сами скачивают и устанавливают на свой ПК троянца, даже не подозревая об этом!
Также существуют сценарии атак, когда пользователю не требуется предпринимать каких-либо действий для запуска троянца. Вы и ахнуть не успеете, как без вашего участия на ПК установится незаметный для вас троянец.
Миф № 10. Антивирус не нужен, если компьютер используется только для игр
Современная индустрия компьютерных игр представляет собой высокоразвитый рынок c ежегодным оборотом в десятки миллиардов долларов. И геймеры не застрахованы от интернет-угроз.
Помимо троянцев существует масса мошеннических способов заставить игрока расстаться с ценными артефактами и даже аккаунтом, сделать его ПК участником бот-сети, вовлеченным в DDoS-атаку на игровой сервер неугодной компании и т. д. Картину дополняют троянцы-шифровальщики, выискивающие на ПК жертвы следы онлайн-игр или аккаунта в Steam и шифрующие файлы с требованием последующего выкупа. Aнтивирус защитит от заражения подобными программами, а веб-антивирус SpIDer Gate не позволит зайти на мошеннический сайт.
Статья была создана на основе материала, предоставленного компанией "Доктор Веб"
Поставь антивирус, говорили они, он ловит все вирусы, говорили они 😊. Сегодня трудно представить себе компьютер без антивируса, а заходить в интернет без какой-либо антивирусной защиты кажется глупым, даже на знакомые сайты. А всё потому, что новые угрозы появляются каждый день, и разработчики вредоносного ПО становятся всё более изобретательны. Порой, инфицированный компьютер или веб-ресурс могут долгое время даже не подозревать о наличии проблемы.
Разработчики антивирусов и вирусов находятся в вечной гонке. Антивирусы быстро находят способы обнаружения новых вирусов, а те, в свою очередь, создают доселе неизвестные штаммы вирусов. Но постойте, зачем программистам писать новые вирусы-вредители? Понятно, что мошенники используют вирусное ПО для извлечения выгоды:
- крадут информацию о кредитных картах, деньги с электронных кошельков, криптовалюту;
- похищают конфиденциальные данные для прямого использования или шантажирования;
- бесплатно используют ресурсы компьютера (майнинг криптовалют, ботнеты);
- транслируют свою рекламу и др.
Но зачем кому-то тратить своё время на написание скриптов, которые портят данные на жёстком диске, всячески усложняют жизнь пользователя, нарушают нормальную работу компьютера. И тут пора вспомнить, кто зарабатывает на вирусах больше, чем все хакеры вместе взятые – это разработчики антивирусного ПО! Каждому компьютеру нужен антивирус, и многие пользователи решают приобрести платный пакет услуг для лучшей защиты и улучшенного функционала. Только в России рынок антивирусов превышает 1 млрд рублей в год.
С одной стороны, всё нормально: есть проблема и есть решение. Но там где деньги, там есть подозрения о нечестной игре. Почему бы разработчикам развивающегося антивируса ни придумать новый страшный вирус и первыми объявить о победе над ним? Или даже проще, можно периодически клепать новые вирусняки, чтобы народ не расслаблялся и продлевал премиум-тарифы.
Однако, если вспомнить историю появления антивирусов то мы увидим, что сначала появлялись именно вирусы-вредители, которые портили запускающиеся файлы (.exe) без извлечения собственной выгоды, затем начали развиваться антивирусные решения, причём лет 15 они все были бесплатными. Одним из первых был DrWEB для DOS, который существует и сегодня, только для Windows. Получается, писать вирусы есть кому и так.
Я думаю, что антивирусам хватает работы по развитию своих продуктов, а программирование новых вирусов, это баловство и миф. Представьте, что будет, если компанию уличат в подобной авантюре! Репутации придёт конец в один момент, а зачем оно надо, когда в мире полно хакеров, которые плодят не то что вирусы-вредители, а настоящих монстров, которые могут нанести вред лично пользователю, а не железяке.
Над чем стоит работать программистам
Ко всему вышесказанному добавим тот факт, что на сегодня только 10% вирусов обнаруживается по поиску сигнатур. Сигнатура – это отпечаток, выжимка из программного кода вируса. База антивируса содержит в себе именно сигнатуры, и в процессе сканирования файлов и запущенных процессов осуществляется сверка по базе сигнатур.
Остальные 90% вредоносных программ обнаруживаются с помощью эвристического анализатора. Это алгоритм поиска ранее неизвестных вирусов. Анализатор фактически угадывает, является ли программа вредоносной по содержанию программного кода. Чем лучше реализована эвристика, тем более качественным считается антивирус. Могу порекомендовать активно развивающийся антивирус с интеллектуальным эвристическим анализатором TotalAV, отзывы и подробности о нем здесь. Эвристический анализ выявляет вредоносные паттерны, такие как внесение изменений в ядро операционной системы, изменение исполняющих файлов, создание резидентных модулей в памяти, правка загрузочных разделов диска и другие типичные действия.
Как могло бы быть
Но это всё теоретически, а практически посоветуем не полагаться только на антивирус, а придерживаться основ сетевой безопасности: не посещайте сомнительные ресурсы, не переходите по ссылкам в СПАМ-письмах, скачивайте программы с официальных сайтов, пользуйтесь менеджером паролей, например встроенный в антивирус TotalAV, устанавливайте свежие обновления ОС.
Мы собрали несколько мифов о вирусах и антивирусах и объяснили, как обстоят дела на самом деле.
Всем нам хочется, чтобы наши компьютеры и мобильные устройства работали хорошо и быстро, но не каждый из нас понимает, насколько большую роль в этом играют компьютерные угрозы и борьба с ними. Кто-то, например, считает, что вирусы — надуманная проблема, другие уверены в том, что в медленной работе их ПК виноват исключительно антивирус. Мы собрали несколько таких мифов и объяснили, как дела обстоят на самом деле.
Миф №1: вирусы существуют только под Windows
Операционной системе Windows долгое время принадлежал практически весь рынок компьютеров, что сильно привлекало вирусописателей: очевидно, им было выгоднее создавать вредоносное ПО под наиболее популярную ОС, увеличивая таким образом свои шансы на успех. Но с тех пор многое изменилось: некогда малоизвестная среди простых пользователей операционная система Mac OS, созданная компанией Apple, сегодня занимает второе место по популярности в мире и, увы, вызывает большой интерес у интернет-злоумышленников. То же и с iOS: учитывая феноменальный успех iPhone и iPad, хакеры и авторы зловредов не могут себе позволить обходить эту мобильную ОС стороной и то и дело выдумывают что-то новое. Что уж говорить про платформу Android: смартфонам и планшетам на ее базе уже сегодня угрожают сотни тысяч вредоносных программ, и это число растет с каждым днем.
На самом деле: сегодня зловредное ПО распространяется под любую популярную платформу: Windows, OS X, iOS, Android и другие ОС. Где-то больше, где-то меньше, но ни одну из операционных систем нельзя назвать полностью устойчивой к интернет-угрозам.
Миф №2: медленная работа компьютера означает, что в системе завелся вирус
Миф №3: медленная работа компьютера означает, что в системе завелся антивирус
Защитное программное обеспечение — сложная, порой требующая значительных ресурсов штука. Тем не менее современные защитные средства работают таким образом, что практически не влияют на производительность системы. Исключение составляют лишь два случая: когда защита или некорректно настроена, или находится в режиме активной проверки всего компьютера. В первом случае проблема решается перенастройкой, а во втором — терпением :) Впрочем, если терпеть не хочется, то достаточно просто включить функцию проверки компьютера во время простоя, запретив таким образом защите сканировать всю систему во время того, как пользователь работает в системе.
На самом деле: проблема значительной нагрузки на систему, как правило, решается более тонкой настройкой защиты.
Миф №4: чтобы защититься от вирусов, достаточно скачать пару-тройку бесплатных программ из Интернета
Бесплатное защитное ПО — хорошее подспорье в деле избавления компьютера от зловредов, но оно, к сожалению, не обеспечивает полноценной защиты системы от всех интернет-угроз, в отличие от платных продуктов. Кроме того, стоит понимать, что любой производитель ПО так или иначе хочет зарабатывать деньги: и если в случае с платной защитой товарно-денежные отношения происходят по понятной и справедливой схеме, то в случае с бесплатными продуктами эти отношения могут быть куда менее прозрачными и приятными. Иначе говоря, если вы не платите за продукт или услугу, то вы не клиент, а товар.
На самом деле: бесплатные антивирусы — это хорошо, но совершенно недостаточно для полноценной защиты.
Вокруг вирусов и антивирусов витает множество мифов. Некоторые из них нетрудно развеять
Миф №5: антивирусные компании сами пишут вирусы
Это, пожалуй, самый забавный миф из всех. Есть мнение, что он появился из-за того, что некоторые антивирусные компании пишут специальные программы, предназначенные для тестирования защитного ПО. В действительности же все гораздо банальнее: между злоумышленниками, желающими заработать при помощи вредоносных программ, и разработчиками антивирусов происходит естественное непрекращающееся противостояние. Лишнее тому подтверждение — сотни тысяч образцов вредоносного ПО, которые создаются злоумышленниками по всему миру и ежедневно обрабатываются антивирусными аналитиками.
На самом деле: для антивирусных компаний попросту глупо заниматься столь рискованным делом, как написание вирусов: во-первых, репутация дороже, а во-вторых, желающих написать вирус и без того хватает.
Поговорим о компьютерных вирусах? Нет, не о том, что вчера поймал ваш антивирус. Не о том, что вы скачали под видом инсталлятора очередного 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 инструкции имеют разные длины)
- переместить указатель вперед на эту длину. Мы окажемся на начале следующей инструкции.
- повторять, пока не решим остановиться
Это минимальный функционал, необходимый для того, чтобы не попасть в середину инструкции, а функция, которая принимает указатель на байтовую строку, а в ответ отдает длину инструкции, называется дизассемблером длин. Например, алгоритм заражения может быть таким:
- Выбираем вкусный исполняемый файл (достаточно толстый, чтобы в него поместилось тело вируса, с нужным распределением секций и т.п.).
- Читаем свой код (код тела вируса).
- Берем несколько первых инструкций из файла-жертвы.
- Дописываем их к коду вируса (сохраняем информацию, необходимую для восстановления работоспособности).
- Дописываем к коду вируса переход на инструкцию, продолжающую исполнение кода-жертвы. Таким образом, после исполнения собственного кода вирус корректно исполнит пролог кода-жертвы.
- Создаем новую секцию, записываем туда код вируса и правим заголовок.
- На место этих первых инструкций кладем переход на код вируса.
Это вариант вполне себе корректного вируса, который может внедриться в исполняемый файл, ничего не сломать, скрыто выполнить свой код и вернуть исполнение программе-хосту. Теперь, давайте его ловить.
Думаю, не надо описывать вам компоненты современного антивируса, все они крутятся вокруг одного функционала – антивирусного детектора. Монитор, проверяющий файлы на лету, сканирование дисков, проверка почтовых вложений, карантин и запоминание уже проверенных файлов – все это обвязка основного детектирующего ядра. Второй ключевой компонент антивируса – пополняемые базы признаков, без которых поддержание антивируса в актуальном состоянии невозможно. Третий, достаточно важный, но заслуживающий отдельного цикла статей компонент – мониторинг системы на предмет подозрительной деятельности.
Итак (рассматриваем классические вирусы), на входе имеем исполняемый файл и один из сотни тысяч потенциальных вирусов в нем. Давайте детектировать. Пусть это кусок исполняемого кода вируса:
Как мы увидели, для быстрого и точного сравнения детектору необходимы сами байты сигнатуры и ее смещение. Или, другим языком, содержимое кода и адрес его расположения в файле-хосте. Поэтому понятно, как развивались идеи сокрытия исполняемого кода вирусов – по двум направлениям:
- сокрытие кода самого вируса;
- сокрытие его точки входа.
Сокрытие кода вируса в результате вылилось в появление полиморфных движков. То есть движков, позволяющих вирусу изменять свой код в каждом новом поколении. В каждом новом зараженном файле тело вируса мутирует, стараясь затруднить обнаружение. Таким образом, затрудняется создание содержимого сигнатуры.
Сокрытие точки входа (Entry Point Obscuring) в результате послужило толчком для появления в вирусных движках автоматических дизассемблеров для определения, как минимум, инструкций перехода. Вирус старается скрыть место, с которого происходит переход на его код, используя из файла то, что в итоге приводит к переходу: JMP, CALL, RET всякие, таблицы адресов и т.п. Таким образом, вирус затрудняет указание смещения сигнатуры.
Гораздо более подробно некоторые алгоритмы таких движков и детектора мы посмотрим во второй статье, которую я планирую написать в ближайшее время.
Рассмотренный в статье детектор легко детектирует неполиморфные (мономорфными их назвать, что ли) вирусы. Ну а переход к полиморфным вирусам является отличным поводом, наконец, завершить эту статью, пообещав вернуться к более интересным методам сокрытия исполняемого кода во второй части.
Читайте также: