Что такое детектирование вирусов

Обновлено: 19.04.2024

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

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


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

Эвристический анализ использует ряд методов для анализа поведения угроз и их уровня опасности, в том числе:

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


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

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

Включите эвристическое сканирование и выберите уровни его чувствительности с помощью следующих шагов:

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


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

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

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

Один хакер может причинить столько же вреда, сколько 10 000 солдат! Подпишись на наш Телеграм канал, чтобы узнать первым, как выжить в цифровом кошмаре!

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

image

Автор: Ege Balci

1. Вводное слово

В этой статье будут рассмотрены эффективные методы обхода статического, динамического и эвристического анализа, используемого в новейших антивирусных продуктах. Некоторые техники уже известны широкой публике, но есть и дополнительные трюки, которые являются ключевыми при генерации недетектируемого вредоноса. Объем файла не менее важен при использовании данных методов, и я постарался оптимизировать размер настолько, насколько возможно. В этом документе также будет затронута тема внутреннего устройства антивирусов и операционной системы Windows. Читателю желательно быть знакомым с C/C++ и ассемблером хотя бы на среднем уровне и понимать структуру PE-файла.

2. Введение

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

3. Терминология

Детектирование на базе сигнатур:

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

Статический программный анализ:

Статический программный анализ приложения выполняется без запуска программы. При помощи подобного метода выполняется анализ исходного кода или некоторых форм объектного кода.

Динамический программный анализ:

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

Песочница:

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

Эвристический анализ:

Энтропия:

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

4. Распространенные техники

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

4.1 Обфускация

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

4.2 Упаковщики

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

4.3 Крипторы



Рисунок 1: Схема шифрования инфицированного файла



Рисунок 2: Схема расшифровки бинарного файла

5. Проблема крипторов и упаковщиков

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

5.1 PE инъекция

Для того чтобы понять схему запуска PE-образа в памяти, необходимо упомянуть о том, как ОС Windows загружает PE-файлы. Обычно при компиляции PE-файла в адрес главного модуля устанавливается значение 0x00400000. Затем обрабатываются указатели полных адресов и рассчитываются инструкций длинных переходов на базе адреса главного модуля. По окончании компиляции в PE-файле создается секция таблицы релокации, которая содержит адреса инструкций, зависящих от базового адреса образа, например, указатели полных адресов и инструкций длинного перехода.



Рисунок 3: Пример использования функции NtUnmapViewOfSection

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



Рисунок 4: Результат измерения нетипичной энтропии у PE-файла

6. Идеальный метод

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



Рисунок 5: Общая блок-схема вредоноса



Рисунок 6: Шелл-код в сыром формате

Для сохранения энтропии и размера на приемлемом уровне я будут обрабатывать шелл-код шифровщиком на базе алгоритма XOR с использованием мультибайтового ключа. Алгоритм XOR не является стандартом в индустрии, как например RC4 или blowfish, но в нашем случае сильное шифрование не требуется. Антивирусные продукты не будут заниматься дешифровкой. Нам достаточно защиты от статического анализа строк. Кроме того, XOR-шифрование намного быстрее и не использует библиотек, что влияет на итоговый размер вредоноса.

Тот же самый код под meterpreter, зашифрованный алгоритмом XOR с ключом.



Рисунок 7: Зашифрованный шелл-код

7. Эвристические движки

Вот некоторые известные правила, используемые при оценке угроз:

Присутствие цикла дешифровки.

При написании функции по детектированию антивирусных продуктов и дешифровки шелл-кода, следует принимать во внимание эти правила.

8. Дешифровка шелл-кода

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



Рисунок 8: Функция дешифровки шелл-кода

9. Детектирование динамического анализа

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

9.1 Детектирование отладчика



Рисунок 9: Функция для детектирования отладчика

Участок кода на рисунке выше извлекает байт BeingDebuged из PEB-блока. Если отладчик присутствует, проверка повторяется заново, и так до тех пор, пока в стеке не будет переполнение. После переполнения сработает исключение, и процесс будет закрыт. Этот путь - самый простой для выхода из программы. Ручная проверка байта BeingDebuged позволит обойти приличное количество антивирусных продуктов, но в некоторых приложениях предусмотрен подобный случай, и мы должны сделать обфускацию кода, чтобы защититься от статического анализа строк.



Рисунок 10: Функция, разбавленная мусорными инструкциями

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

9.2 Загрузка поддельной библиотеки

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



Рисунок 11: Загрузка поддельной библиотеки

9.3 Использование функции GetTickCout()



Рисунок 12: Проверка на то, была ли пропущена функция sleep()

9.4 Проверка количества ядер

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



Рисунок 13: Проверка количества ядер процессора

9.5 Выделение большого объема памяти

Этот метод также эксплуатирует ограниченное время, используемое при сканировании. Мы выделяем около 100 Мб памяти и заполняем данное пространство пустыми байтами. Затем память освобождается.



Рисунок 14: Выделение, заполнение и освобождение большого объема памяти

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

9.6 Манипуляция флагом трассировки



Рисунок 15: Манипуляция флагом трассировки

9.7 Проверка мьютексов

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



Рисунок 16: Проверка мьютекса

10. Правильные методы выполнения шелл-кода

Начиная с Windows Vista, компания Microsoft внедрила технологию DEP (Data Execution Prevention; Предотвращение выполнения данных). Эта мера, направленная на укрепление безопасности, помогает предотвратить порчу компьютера путем периодического мониторинга. Мониторинг позволяет поддерживать корректно использование памяти. Если механизм DEP обнаруживает случай некорректного использования памяти вашего компьютера, программа закрывается, и пользователь оповещается. Соответственно, вы не можете просто поместить несколько байт в символьный массив и выполнить свое творчество. Вам нужно выделить область памяти с флагами на чтение, запись и выполнения при помощи API-функций.

Далее я покажу методы выполнения шелл-кода при помощи различных 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. Мультипоточность



Рисунок 20: Пример выполнения шелл-кода в отдельном потоке

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

12. Заключение

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

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



Рисунок 21: Результаты проверки вредоноса

13. Ссылки

Один хакер может причинить столько же вреда, сколько 10 000 солдат! Подпишись на наш Телеграм канал, чтобы узнать первым, как выжить в цифровом кошмаре!


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

Как работают современные антивирусные программы и какие методы используют злоумышленники для борьбы с ними? Об этом — сегодняшняя статья.

Как антивирусные компании пополняют базы?

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

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

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

Анатомия антивируса

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

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

Сигнатурное детектирование

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

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

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

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

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

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

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

Антивирус, данный нам в определениях

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

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

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

Почему антивирус пропускает вирусы?

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

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

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

Какие проблемы имеются с обеспечением антивирусной безопасности?

Повторим сказанное в предыдущих статьях:

Зачем нужен антивирус?

Соответственно, система антивирусной защиты должна обеспечивать:

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

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

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

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

Ну а в следующей статье мы поговорим о том, требуют ли регуляторы и создатели стандартов использования именно антивируса, а также какую пользу можно извлечь, если читать на ночь документы по ИБ

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