Суть первого метода (поиск по сигнатурам) – в том, что антивирусные компании анализируют каждый (!) поступивший к ним вирус и добавляют соответствующую сигнатуру, которая будет обнаруживать только этот вирус . Для похожих вирусов (их семейств) выделяются также универсальные сигнатуры» способные обнаружить также и новые модификации данных вирусов. Для каждой антивирусной записи делается свой модуль лечения» благодаря которому антивирус сможет исцелить зараженный файл.
Преимущества данного метода очевидны: он практически не дает ложных срабатываний антивируса (при условии качественного добавления антивирусной записи), определяет каждый конкретный вирус и может его обезвредить (насколько по возможно в принципе). Но отсюда же выплывают и недостатки: невозможность обнаружения новых вирусов, необходимость постоянного обновления антивирусных баз.
Кардинально отличается от сигнатурного метода метод эвристического поиска . Эвристические анализаторы различных продуктов могут работать по-разному, Фактически каждый из них – это know-how той или иной компании. Но вся работа эвристических анализаторов сводится к одному: поиск последовательностей кода (исполняемых команд), характерных для того или иного типа вирусов.
Лекция 1: Классификация вредоносных программ. Методы защиты
Основной сложностью при реализации алгоритмов эвристического поиска является отсеивание ложных срабатываний. Вроде бы при детектировании вирусов все просто: если программа размножается – значит, это вирус. Остается только написать модуль, который сможет проанализировать предоставляемый код и с высокой долей вероятности определить, не» обладает ли код «подозрительными» функциями.
С троянскими программами все намного сложнее. Зачастую даже специалисту по информационной безопасности, бывает тяжело сказать: является данная программа троянской или нет. По какому критерию программа относится к троянской: «если программа делает что-то, о чем пользователь не знает и чего не желает выполнять» или «если программа нарушает логику работы компьютера». Согласитесь – определения весьма расплывчатые. А как же с этой проблемой справиться модулю эвристического поиска, не имеющему человеческого опыта и интеллекта?
Именно из-за описанных выше проблем эвристические анализаторы способны обнаруживать далеко не все вредоносные программы. Для некоторых типов вирусов этот показатель близок к ста процентам – для других же может колебаться в пределах 30-60% (для троянских программ этот показатель всегда ниже, чем для вирусов – razgovorodele.ru). Кроме того, эвристические анализаторы могут иногда ошибаться и обзывать вирусами вполне мирные и привычные нам программы – это называется ложным срабатыванием.
Антивирусные продукты, как правило, используют оба метода поиска вирусов, что несколько замедляет их работу, зато увеличивает количество детектируемых вирусов. Описанные достоинства и недостатки определяют возможности антивирусных продуктов:
Классификация вредоносных программ
– обнаружение и нейтрализация огромной базы (десятки тысяч) известных вирусов и вредоносных программ;
– обнаружение средствами эвристического поиска подозрительных файлов;
– нейтрализация (изолирование) зараженных и подозрительных файлов;
– обращение повышенного внимания пользователя на подозрительные вирусы файлы.
Для борьбы с компьютерными вирусами наиболее часто применяются антивирусные программы, реже – аппаратные средства защиты. Однако, в последнее время наблюдается тенденция к сочетанию программных и аппаратных методов защиты. Среди аппаратных устройств используются специальные антивирусные платы, вставленные в стандартные слоты расширения компьютера. Корпорация Intel внедрила перспективную технологию защиты от вирусов в сетях, суть которой заключается в сканировании систем компьютеров еще до их загрузки.
Источник: razgovorodele.ru
Искусство антидетекта. Часть 1 — Введение в техники детектирования
В этой статье будут рассмотрены эффективные методы обхода статического, динамического и эвристического анализа, используемого в новейших антивирусных продуктах.
При написании функции по детектированию антивирусных продуктов и дешифровки шелл-кода, следует принимать во внимание эти правила.
8. Дешифровка шелл-кода
Обфускация механизма дешифровки чрезвычайно важна, поскольку большинство эвристических движков в состоянии обнаружить циклы дешифрования внутри PE-файлов. После значительного увеличения случаев, когда программа требовала выкуп, некоторые эвристические движки были почти полностью заточены под детектирование процедур дешифрования. После обнаружения процедуры дешифрования некоторые сканеры дожидались, пока в регистре ECX не окажется значение 0, что в большинстве случаев означает окончание цикла. По достижению окончания цикла дешифрования производится повторный анализ содержимого файла, которое будет представлять собой функцию дешифровки шелл-кода.
Рисунок 8: Функция дешифровки шелл-кода
На рисунке выше показан цикл for, внутри которого выполняются логические операции XOR между байтом шелл-кода и байтом ключа. Ассемблерные блоки наверху и внизу, по сути, не выполняют никаких операций. Эти блоки «накрывают» XOR-операцию случайным набором байтов и переходов. Поскольку мы не пользуемся продвинутые механизмы дешифровки, подобной обфускации будет достаточно для функции «Decrypt Shellcode».
9. Детектирование динамического анализа
В процессе написания механизма детектирования песочницы нам необходимо сделать обфускацию методов. Если эвристический движок обнаружит признаки методов анти реверс-инжиниринга, резко возрастет оценка угрозы со стороны нашего вредоноса.
9.1 Детектирование отладчика
Наш первый механизм детектирования антивирусного продукта будет проверять присутствие отладчика внутри процесса. Для решения этой задачи существует API-функция, которая определяет, отлаживается ли процесс отладчиком уровня пользователя (user-mode debugger). Но мы не будем использовать данную функцию, поскольку большинство антивирусных продуктов мониторят выражения API-вызовов. Скорее всего, после детектирования вызов будет расценен как противодействующий реверс-инжинирингу. Вместо использования API-функции мы будем искать байт «BeingDebuged» в PEB-блоке.
Рисунок 9: Функция для детектирования отладчика
Участок кода на рисунке выше извлекает байт BeingDebuged из PEB-блока. Если отладчик присутствует, проверка повторяется заново, и так до тех пор, пока в стеке не будет переполнение. После переполнения сработает исключение, и процесс будет закрыт. Этот путь — самый простой для выхода из программы. Ручная проверка байта BeingDebuged позволит обойти приличное количество антивирусных продуктов, но в некоторых приложениях предусмотрен подобный случай, и мы должны сделать обфускацию кода, чтобы защититься от статического анализа строк.
Рисунок 10: Функция, разбавленная мусорными инструкциями
Добавление переходов (инструкций JZ) после каждой операции не повлияет на логику работы функции, но добавление мусорных байтов между переходами позволит обойти фильтры статического анализа строк.
9.2 Загрузка поддельной библиотеки
В этом методе мы попытаемся загрузить несуществующую библиотеку во время выполнения приложения. Обычно когда мы пытаемся загрузить несуществующую библиотеку, HISTENCE возвращает NULL, но некоторые механизмы динамического анализа, используемые в антивирусных продуктах, допускают такие случаи и продолжают дальнейшее исследование потока выполнения приложения.
Рисунок 11: Загрузка поддельной библиотеки
9.3 Использование функции GetTickCout()
В этом методе мы будем опираться на тот факт, что время, которое отводится на сканирование, ограничено. В большинстве случаев антивирусные сканеры созданы для конечного пользователя. Соответственно, приложение должно быть как можно более дружелюбно и пригодно для ежедневного использования.
Сей факт означает, что сканер не может тратить слишком много времени на сканирование файлов, а должен завершать весь процесс как можно быстрее. Вначале разработчики вредоносов использовали функцию «sleep()» с целью дождаться окончания сканирования, но сейчас этот трюк практически не работает, поскольку каждый антивирусный продукт пропускает данную функцию.
Мы будем использовать другой метод, показанный на рисунке ниже, который использует API-функцию «GetThickCount()». Данная функция извлекает количество миллисекунд, прошедших с момента запуска системы (до 49.7 дней). Мы будем использовать эту функцию для получения времени, прошедшее с момента запуска операционной системы, затем остановимся на 1 секунду. После функции sleep мы проверим, был ли этот участок пропущен, при помощи сравнения двух значений, полученных при помощи GetTickCout().
Рисунок 12: Проверка на то, была ли пропущена функция sleep()
9.4 Проверка количества ядер
Этот метод проверяет количество ядер процессора, присутствующего в системе. Поскольку антивирусные продукты не могут занимать слишком много ресурсов, мы можем проверить количество ядер для того, чтобы определить, находимся ли мы в песочнице. Многие антивирусы не поддерживают мульти-ядерную обработку и не могут зарезервировать более одного ядра для песочницы.
Рисунок 13: Проверка количества ядер процессора
9.5 Выделение большого объема памяти
Этот метод также эксплуатирует ограниченное время, используемое при сканировании. Мы выделяем около 100 Мб памяти и заполняем данное пространство пустыми байтами. Затем память освобождается.
Рисунок 14: Выделение, заполнение и освобождение большого объема памяти
Когда память, используемая программой, во время выполнения начинает расти, через некоторое время антивирусные сканеры останавливаются, чтобы не тратить много времени на анализ файла. Этот метод можно использовать несколько раз. Данная техника очень стара и примитивна, но все еще помогает обойти приличное количество сканеров.
9.6 Манипуляция флагом трассировки
Как следует из названия, этот флаг используется во время трассировки программ. Если флаг трассировки установлен, каждая инструкция будет инициировать исключение «SINGLE_STEP». Флагом трассировки можно манипулировать с целью противодействия трассировщиками при помощи кода, показанного на рисунке ниже:
Рисунок 15: Манипуляция флагом трассировки
9.7 Проверка мьютексов
Этот метод из-за своей простоты выглядит очень перспективным. Суть техники заключается в проверке присутствия определенного мьютекса в системе.
Рисунок 16: Проверка мьютекса
Если функция «CreateMutex» не вернет ошибку ERROR_ALREADY_EXISTS, вредонос запускается еще раз, поскольку большинство антивирусных продуктов не позволяют программам, которые подвергаются динамическому анализу, запускать новые процессы или работать с файлами вне песочницы. Если по результатам проверки мьютекса возвращается ошибка ERROR_ALREADY_EXISTS, можно запускать функцию дешифровки. Существуют намного более креативные способы использования мьютексов с целью анти-детектирования.
10. Правильные методы выполнения шелл-кода
Начиная с Windows Vista, компания Microsoft внедрила технологию DEP (Data Execution Prevention; Предотвращение выполнения данных). Эта мера, направленная на укрепление безопасности, помогает предотвратить порчу компьютера путем периодического мониторинга. Мониторинг позволяет поддерживать корректно использование памяти.
Если механизм DEP обнаруживает случай некорректного использования памяти вашего компьютера, программа закрывается, и пользователь оповещается. Соответственно, вы не можете просто поместить несколько байт в символьный массив и выполнить свое творчество. Вам нужно выделить область памяти с флагами на чтение, запись и выполнения при помощи API-функций.
Компания Microsoft предусмотрела несколько API-функций для резервирования страниц памяти. Большинство вредоносов для резервирования используют функцию «VirtualAlloc», что, как вы уже догадались, облегчает задачу по детектированию. Использование других функций для манипуляции памятью поможет выполнить тот же самый трюк более незаметно.
Далее я покажу методы выполнения шелл-кода при помощи различных API-функций.
10.1 HeapCreate/HeapAlloc:
ОС Windows также позволяет создать кучи с атрибутами на чтение, запись и выполнение.
Рисунок 17: Копирование шелл-кода в созданную кучу
10.2 LoadLibrary/GetProcAddress
Комбинация WINAPI-функций LoadLibrary и GetProcAddress позволяет использовать другие API-функции. В этом случае не будет прямого вызова функций, связанных с манипуляцией памяти, а сам вредонос, вероятно, будет более незаметен.
Рисунок 18: Пример использования функций LoadLibrary и GetProcAddress
10.3 GetModuleHandle/GetProcAddress
Этот метод вовсе не использует функцию LoadLibrary, а получает обработчик уже загруженного модуля kernel32.dll при помощи функции GetModuleHandle. Данная техника для запуска шелл-кода, возможно, одна из самых незаметных.
Рисунок 19: Пример использования функций GetModuleHandle/GetProcAddress
11. Мультипоточность
PE-файлы, использующие несколько потоков, всегда сложнее анализировать, в том числе и для антивирусных продуктов. При помощи мультипоточного подхода мы можем запускать шелл-код и одновременно продолжать выполнение функции «AV Detect».
Рисунок 20: Пример выполнения шелл-кода в отдельном потоке
В коде, показанном выше, выполнение шелл-кода происходит в отдельном потоке. Параллельно выполнению шелл-кода в бесконечном цикле выполняется функция для обхода антивируса. Такой подход позволяет проверять присутствие песочницы и динамического анализа, что жизненно важно для обхода продвинутых эвристических движков, которые дожидаются запуска шелл-кода.
12. Заключение
В конце статьи хотелось вы поделиться некоторыми мыслями относительно компиляции вредоносов. При компиляции исходных текстов необходимо включить защиту стека и удалить символы с целью затруднения реверс-инжиниринга и уменьшение размера конечного исполняемого файла. Рекомендуется компилировать в Visual Studio из-за присутствия ассемблерных вставок.
Если воспользоваться одновременно всеми методами, продемонстрированными в этой статье, сгенерированный вредонос сможет обойти 35 наиболее продвинутых антивирусных продукта.
Рисунок 21: Результаты проверки вредоноса
13. Ссылки
Интересуетесь темой кибершпионажа? Подпишитесь на наш ТГ канал и узнайте, как остаться незамеченным для шпионов.
Источник: www.securitylab.ru
Удаление вредоносных программ – методы обнаружения
Обычно, если компьютер заражен, есть некоторые симптомы, которые могут заметить даже более простые пользователи.
Распространенные методы обнаружения вредоносных программ
Некоторые из наиболее часто используемых методов обнаружения вредоносных программ перечислены ниже.
- Ваш компьютер показывает всплывающее окно и сообщение об ошибке.
Ваш компьютер показывает всплывающее окно и сообщение об ошибке.
- Ваш компьютер часто зависает, и вы не можете работать на нем.
- Компьютер замедляется при запуске программы или процесса. В диспетчере задач можно заметить, что процесс программного обеспечения запущен, но еще не открыт для работы.
- Третьи стороны жалуются, что они получают приглашение в социальных сетях или по электронной почте от вас.
- Изменения расширений файлов появляются или файлы добавляются в вашу систему без вашего согласия.
Ваш компьютер часто зависает, и вы не можете работать на нем.
Компьютер замедляется при запуске программы или процесса. В диспетчере задач можно заметить, что процесс программного обеспечения запущен, но еще не открыт для работы.
Третьи стороны жалуются, что они получают приглашение в социальных сетях или по электронной почте от вас.
Изменения расширений файлов появляются или файлы добавляются в вашу систему без вашего согласия.
- Internet Explorer зависает слишком часто, хотя ваша скорость интернета очень хорошая.
- К вашему жесткому диску обращаются большую часть времени, что вы можете увидеть по мигающему светодиодному индикатору вашего компьютера.
Internet Explorer зависает слишком часто, хотя ваша скорость интернета очень хорошая.
К вашему жесткому диску обращаются большую часть времени, что вы можете увидеть по мигающему светодиодному индикатору вашего компьютера.
- Файлы ОС повреждены или отсутствуют.
Файлы ОС повреждены или отсутствуют.
- Если ваш компьютер использует слишком большую пропускную способность или сетевые ресурсы, это может быть компьютерный червь.
- Место на жестком диске постоянно занято, даже если вы не предпринимаете никаких действий. Например, установка Mew Program.
- Размеры файлов и программ изменяются по сравнению с их исходной версией.
Если ваш компьютер использует слишком большую пропускную способность или сетевые ресурсы, это может быть компьютерный червь.
Место на жестком диске постоянно занято, даже если вы не предпринимаете никаких действий. Например, установка Mew Program.
Размеры файлов и программ изменяются по сравнению с их исходной версией.
Ошибки, не связанные с вредоносными программами
Следующие ошибки не связаны с вредоносными действиями –
- Ошибка во время загрузки системы на этапе Bios, например, отображение батареи аккумулятора в Bios, отображение ошибки таймера.
- Аппаратные ошибки, такие как гудки, прожига памяти, жесткого диска и т. Д.
- Если документ не запускается обычно, как поврежденный файл, но другие файлы могут быть открыты соответственно.
- Клавиатура или мышь не отвечает на ваши команды; Вы должны проверить плагины.
- Монитор включается и выключается слишком часто, например, мигает или вибрирует, это аппаратная ошибка.
Ошибка во время загрузки системы на этапе Bios, например, отображение батареи аккумулятора в Bios, отображение ошибки таймера.
Аппаратные ошибки, такие как гудки, прожига памяти, жесткого диска и т. Д.
Если документ не запускается обычно, как поврежденный файл, но другие файлы могут быть открыты соответственно.
Клавиатура или мышь не отвечает на ваши команды; Вы должны проверить плагины.
Монитор включается и выключается слишком часто, например, мигает или вибрирует, это аппаратная ошибка.
В следующей главе мы поймем, как подготовиться к удалению вредоносных программ.
Источник: coderlessons.com