Все знают про Windows Defender. Современные десктопные ОС Windows всегда поставляются со встроенным антивирусом. Причем, для повышения безопасности система не даст просто так полностью его отключить. Да и стоит ли его заменять? Ведь за 17 лет он претерпел множество изменений и стал одним из лучших на рынке.
Но если Defender такой из себя эффективный антивирус, то почему его заменяют на сторонние продукты? И вообще, так ли антивирусы нужны на самом деле, и насколько сложно их обходить?
В данной статье мы рассмотрим методики определения вредоносного ПО и в дальнейшем посмотрим на способы их обхода.
Что такое анти вирус?
[ГОСТ Р 51275-2006] 3.9 вредоносная программа - это Программа, используемая для осуществления несанкционированного доступа к информации и (или) воздействия на информацию или ресурсы автоматизированной информационной системы.
Переводя на простой язык, вредоносное ПО (не путать с вирусами), оно же малварь, оно же ВПО - это программа, которая может причинить вред вашей операционной системе. ВПО имеет множество подвидов, вот несколько примеров:
- Вирусы - самовоспроизводящиеся по вашей сети программы, используя различные уязвимости;
- Вымогатели - Программы, блокирующие доступ к данным (например, путем шифрования) и требующие за разблокировку деньги;
- Трояны - ВПО, выдающее себя за легитимные процессы;
- Ботнеты - Большое количество экземпляров программы по всему интернету, выполняющие команды с централизованного управления.
На самом деле классифицировать ВПО довольно сложно. Они могут совмещать несколько из вышеприведенных видов или быть совершенно новым. Однако, несмотря на их большое количества и разнообразие, разработчики антивирусов могут с точно определять ВПО, с минимальным количеством ложных срабатываний.
Собственно, антивирус в общем понимании — это ПО, предназначенное для обнаружения вредоносных программ на компьютере. Точнее, так было лет 10 назад. Сейчас, в 2023 году, все антивирусы де-факто имеют множество других функций. Достаточно хотя бы взглянуть на панель настройки Microsoft Windows Defender
Параметры защиты от вирусов и других угроз
Существует также множество видов средств защиты информации и все они так или иначе связаны с вредоносным ПО, но мы остановимся на анализе файлов на конечных хостах, точнее на бинарных исполняемых файлах. Как определить, является ли программа малварью, или это обычный легитимный файл?
Статический (эвристический) анализ
Как только в операционной системе появился новый файл (подключили внешний диск или скачали/создали), антивирус открывает его и проверяет по своей сигнатурной базе.
Сигнатура - это некоторый отпечаток, часть данных, по которым можно определить, является ли файл вирусом. Она может быть и в текстовом виде (Строки текста), и в бинарном (Например, часть машинного кода).
Важной особенностью сигнатуры является её уникальность. Она должна быть такой, чтобы количество ложных срабатываний было сведено к нулю. Иначе в лучшем случае легитимные бинарные файлы или документы помещались в карантин, в худшем их бы просто удалили.
Для тестирования работы статического анализа антивирусов разработали специальную сигнатуру EICAR-Test-File (European Institute for Computer Antivirus Research).
Сама сигнатура: X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
Если создать файл, вставить в него этот текст и сохранить, то мы сразу же получим предупреждение от Дефендера
Сохранение файла
Уведомление о вредоносной активности
Он сработал на изменение файла в файловой системе и обнаружил в нём эту строку. В его базе данная сигнатура определяется как Virus:DOS/EICAR_Test_File
Обнаруженная сигнатура
Ожидаемо, при загрузке файла на VirusTotal, сработали абсолютно все антивирусы.
Сканирование Virus Total
Можно заметить разные названия одной сигнатуры. И так как от них сильно зависит эффективность поиска вредоносных файлов, разработчики каждого антивируса ведут собственные сигнатурные базы и держат их в секрете. Соответственно, и названия могут немного отличатся.
YARA
Для идентификации вредоносов статическим анализом разработали унифицированный язык YARA (Yet Another Recursive Acronym). Он позволяет в читаемом для человека формате описывать сигнатуры различных видов.
Разберем 2 примера.
Правило определения червя StuxNet
1rule StuxNet_Malware_1
2{
3
4 meta:
5 description = "Stuxnet Sample - file malware.exe"
6 author = "Florian Roth"
7 reference = "Internal Research"
8 date = "2016-07-09"
9 hash1 = "9c891edb5da763398969b6aaa86a5d46971bd28a455b20c2067cb512c9f9a0f8"
10
11 strings:
12
13 $op1 = { 8b 45 08 35 dd 79 19 ae 33 c9 8b 55 08 89 02 89 }
14 $op2 = { 74 36 8b 7f 08 83 ff 00 74 2e 0f b7 1f 8b 7f 04 }
15 $op3 = { 74 70 81 78 05 8d 54 24 04 75 1b 81 78 08 04 cd }
16
17 condition:
18 all of them
19}
Данное правило написано для определения червя StuxNet (Который в своё время поднял немало шума). В нем описаны три сигнатуры и условие, что если каждая будет найдена в файле, то правило сработает.
В данном случае сигнатурами являются куски машинного кода. Так бы они выглядели в дизассемблированном виде:
Дизассебмлирование машинного кода
Правило определения PHP Веб шелла
1rule php_reverse_shell : webshell {
2 meta:
3 description = "Laudanum Injector Tools - file php-reverse-shell.php"
4 author = "Florian Roth"
5 reference = "http://laudanum.inguardians.com/"
6 date = "2015-06-22"
7 hash = "3ef03bbe3649535a03315dcfc1a1208a09cea49d"
8 strings:
9 $s1 = "$process = proc_open($shell, $descriptorspec, $pipes);" fullword ascii /* PEStudio Blacklist: strings */
10 $s2 = "printit(\"Successfully opened reverse shell to $ip:$port\");" fullword ascii /* PEStudio Blacklist: strings */
11 $s3 = "$input = fread($pipes[1], $chunk_size);" fullword ascii /* PEStudio Blacklist: strings */
12 condition:
13 filesize < 15KB and all of them
14}
Второе правило написано для определения популярного веб-шелла. В этом случае определены строковые сигнатуры сегментов PHP кода и максимальный размер файла.
Динамический (поведенческий) анализ
На минуту вернемся к EICAR TEST FILE сигнатуре. Мы видели, что Microsoft Defender увидел вредоносный файл, но только после его создания в файловой системе. До сохранения сигнатура спокойно лежала в текстовом редакторе и не вызывала никаких алертов. Почему?
Дело в том, что статический анализ предполагает сканирование файлов, хранящихся на постоянном запоминающем устройстве (то-есть на жестком диске). А в случае с текстовом редактором сигнатура была лишь в оперативной памяти в процессе notepad.exe.
Вот она, в другой кодировке, внутри выделенной этому процессу памяти.
Просмотр памяти процесса через Process Hacker 2
Но почему её не увидел антивирус? Мы ведь увидели.
Основная причина - высокая ресурсозатратность. Память в процессы постоянно изменяется, а значит придется сканировать их регулярно. А это дорого обойдется.
Но решение нашли. Для выявления, является ли процесс вредоносным, вместо тупого анализа его памяти в ОЗУ применяется техника поведенческого (или динамического) анализа. Она заключается в контроле действий процесса. Вот несколько видов контроля:
- Сетевое соединение в сервером, ip адрес которого состоит в черном списке;
- Вызов или последовательность вызовов процессом специальных функций Windwos API;
- Изменения реестра и файлов на файловой системе.
Для примера рассмотрим код на C. На 7 строке задается имя вредоносного файла, а на строках 10 и 13 он записывается в реестр Windows по ключу HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\hack
Код взят отсюда
1#include <windows.h>
2#include <string.h>
3
4int main(int argc, char* argv[]) {
5 HKEY hkey = NULL;
6 // Путь к бинарю
7 const char* exe = "C:\\Program\ Files\\Java\\hack.exe";
8
9 // Включение его в автозапуск
10 LONG res = RegOpenKeyEx(HKEY_CURRENT_USER, (LPCSTR)"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", 0 , KEY_WRITE, &hkey);
11 if (res == ERROR_SUCCESS) {
12 // Создание нового ключа
13 RegSetValueEx(hkey, (LPCSTR)"hack", 0, REG_SZ, (unsigned char*)exe, strlen(exe));
14 RegCloseKey(hkey);
15 }
16 return 0;
17}
Если учесть, что скомпилированный файл пройдёт статическую проверку по сигнатурам, то антивирус всё равно задетектит его на этапе изменения реестра.
Еще немного про способы детектирования малварей
Хоть мы и не будем их затрагивать в дальнейшем, нужно сказать несколько слов про набирающие популярность способы выявления ВПО.
Песочница - это специальная изолированная среда, в которой запускаются потенциально вредоносные файлы и идет отслеживание их поведения.
Также наряду с популярностью технологий машинного обучения, их внедряют и в антивирусы. Смысл заключается в постоянном обучении работы операционной системы в её нормальном состоянии, а при обнаружении странной активности алертить. Можно сказать, это динамический анализ, но по сути он должен быть гибче и точнее.
Выводы
Теории получилось куда больше, чем планировалось, поэтому самое интересное - борьба с антивирусами и методики обхода я решил выделить в отдельную часть.
Собственно, можно сделать вывод, что антивирусы идут в ногу со временем и применяют все новые техники для детекта, но в основе всё равно лежит комбинация статического и динамического анализа. И их вполне достаточно для обнаружения подавляющего большинства вредоносных программ. (Спойлер: не совсем так)
Автор: 🔗@pyfffe
Наш Telegram канал: 🔗REDTalk