Как искать угрозы, которые маскируются под стандартные процессы Windows

Чтобы быстро находить и обезвреживать угрозы, врага нужно знать в лицо. Но так же важно понимать, как выглядит «нормальная» среда – тогда любое отклонение от нормы будет вызывать подозрения. Угрозу может нести недавно установленное ПО, новый пользователь или хакер. Как быть, если действия этих субъектов сильно напоминают стандартные процессы в ОС Windows?

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

Плохая новость заключается в том, что злоумышленники находят новые способы усыпить бдительность специалистов по ИБ и аналитиков. Для этого хакеры дают файлам имена стандартных системных процессов в Windows. Прием, который называется Masquerading (маскировка/сокрытие имен), усложняет идентификацию подозрительных файлов и развязывает руки злоумышленникам. Masquerading часто используют во время APT-атак, этим инструментом уже воспользовались такие группировки, как APT1, Carbanak и Elise.

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

Для поиска подозрительных субъектов понадобятся такие компоненты:

  • Sysmon: разработка Sysinternals. Служит для регистрации событий и умеет генерировать подробные логи в Windows;
  • Winlogbeat: входит в «эластичный стек» (Elastic stack), занимается доставкой логов Windows;
  • ELK stack: инструмент для аналитики и визуализации. Будем использовать его для обнаружения угроз (Threat Hunting), а полученные логи отправлять в ELK через winlogbeat.

Если вы хотите больше узнать о работе системных процессов Windows, рекомендую ознакомиться со статьей Марка Руссиновича (Часть 1 и Часть 2). Этот специалист участвовал в разработке Sysmon и инструментов Sysinternals.

Для примера возьмем стандартный процесс smss.exe, который относится к менеджеру сеансов. Вот его основные признаки:

  • он первый в пользовательском режиме;

  • родительский процесс будет называться System;

  • загрузка происходит из %systemroot%\System32\smss.exe;

  • имя пользователя выглядит как NT AUTHORITY\SYSTEM;

  • создает два сеанса: 0 (службы Windows) и 1 (пользовательский);
  • сеанс 1 завершается после загрузки csrss.exe и winlogon.exe (и у них не будет родительского);
  • в один момент времени запущен один smss.exe с сеансом (если одновременно работает больше одного процесса, значит, остальные фальшивые или несколько пользователей зашли в ОС).

Большинство информации о smss.exe можно получить с помощью утилиты Sysinternals Procexp.exe.

Характеристики smss.exe, которые показывает Sysinternals​
Характеристики smss.exe, которые показывает Sysinternals​

Мы понимаем, что собой представляет процесс smss.exe в среде Windows, и можем применить эту информацию для поиска поддельных процессов, замаскированных под подлинные (с аналогичными названиями). В первую очередь обратим внимание на имена родительских процессов и пути. Далее в таблице перечислены стандартные процессы Windows, их родительские процессы и пути выполнения. Больше информации по этому вопросу можно получить в SANS Find Evil Poster.

Системные процессы в Windows​
Системные процессы в Windows​

Sysmon поможет сгенерировать полный журнал выполнения процесса. Вот как он выглядит:

Журнал событий выполнения Sysmon ID​
Журнал событий выполнения Sysmon ID​

Нас интересует событие с идентификатором ID 1, которое возникает при запуске каждого нового процесса. С помощью Winlogbeats мы получим эти логи в ELK.

Logstash будем использовать для анализа и маркировки событий, которые не вписываются в наш шаблон правила. Например, в SVCHOST.EXE название родительского процесса звучит как SERVICES.EXE и выполняется он из System32. Сделаем это правилом:

Так выглядит код нашего правила​
Так выглядит код нашего правила​

Теперь каждый раз, когда мы видим, как процесс svchost.exe запускается не из родного каталога (то есть не из C:\Windows\System32\, если Windows установлена на диске С:\) или у него другое имя родительского процесса (то есть не services.exe), мы помечаем тегом подозрительное событие, чтобы исследовать его дополнительно.

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

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

Тегиs: подозрительный процесс обнаружен в Kibana​
Тегиs: подозрительный процесс обнаружен в Kibana​
​Взаимосвязь обнаружила подозрительный процесс
​Взаимосвязь обнаружила подозрительный процесс

Эта статья написана по мотивам нашего поста на форуме codeby.net (оригинал здесь). В следующий раз планирую рассмотреть работу с Sysmon и ELK. А пока приглашаю вас прослушать наши обучающие курсы Codeby: два по интернет-анонимности и безопасности, еще один – по тестированию веб-приложений на проникновение.

Начать дискуссию