
Сканер на основе IOC и YARA для обнаружения индикаторов компрометации с помощью проверки имен файлов по регулярным выражениям, сигнатур YARA, сопоставления хэшей и проверок обратных соединений C2 на конечных точках.
Я написал новый сканер YARA с открытым исходным кодом под названием LOKI RS (Rust). LOKI (Python) теперь официально устарел.
Этот проект сейчас находится в режиме пассивного обслуживания. Это означает, что я принимаю запросы на исправление ошибок и простые проблемы, но в настоящее время у меня нет времени на добавление новых функций или расширение существующих. В течение многих лет я сосредоточен на разработке более продвинутого сканера THOR, который предлагает ряд улучшений по сравнению с этим проектом. Доступна бесплатная версия THOR Lite; она быстрее, стабильнее и тщательно протестирована в наших CI-средах — просто лучшее решение. Сравнение сканеров с открытым исходным кодом, бесплатных и коммерческих можно найти здесь.
Я также начал работу над версией LOKI на Rust под названием LOKI 2. Однако я не уверен, когда она достигнет функциональной полноты текущего релиза LOKI. Кроме того, я создал блок-схему, которая поможет вам решить, какой сканер лучше всего подходит для ваших нужд.

Сканер для простых индикаторов компрометации
Обнаружение основано на четырех методах:
1. IOC по имени файла
Регулярное выражение для полного пути/имени файла
2. Проверка правил Yara
Совпадение сигнатур Yara по данным файла и памяти процессов
3. Проверка хеша
Сравнивает известные вредоносные хеши (MD5, SHA1, SHA256) с отсканированными файлами
4. Проверка обратного подключения C2
Сравнивает конечные точки подключений процессов с IOC C2 (новое с версии v.10)
Дополнительные проверки:
1. Проверка файловой системы Regin (через --reginfs)
2. Проверка аномалий процессов (на основе [Sysforensics](http://goo.gl/P99QZQ))
3. Сканирование распакованных SWF-файлов (новое с версии v0.8)
4. Проверка дампа SAM
Двоичный файл для Windows скомпилирован с помощью PyInstaller и должен работать как x86-приложение как на x86, так и на x64 системах.
Требования отсутствуют, если вы используете скомпилированный EXE.
Если хотите собрать сами:
usage: loki.py [-h] [-p path] [-s kilobyte] [-l log-file] [-r remote-loghost]
[-t remote-syslog-port] [-a alert-level] [-w warning-level]
[-n notice-level] [--allhds] [--alldrives] [--printall]
[--allreasons] [--noprocscan] [--nofilescan] [--vulnchecks]
[--nolevcheck] [--scriptanalysis] [--rootkit] [--noindicator]
[--dontwait] [--intense] [--csv] [--onlyrelevant] [--nolog]
[--update] [--debug] [--maxworkingset MAXWORKINGSET]
[--syslogtcp] [--logfolder log-folder] [--nopesieve]
[--pesieveshellc] [--nolisten]
[--excludeprocess EXCLUDEPROCESS] [--force]
Loki - Simple IOC Scanner
optional arguments:
-h, --help show this help message and exit
-p path Path to scan
-s kilobyte Maximum file size to check in KB (default 5000 KB)
-l log-file Log file
-r remote-loghost Remote syslog system
-t remote-syslog-port
Remote syslog port
-a alert-level Alert score
-w warning-level Warning score
-n notice-level Notice score
--allhds Scan all local hard drives (Windows only)
--alldrives Scan all drives (including network drives and
removable media)
--printall Print all files that are scanned
--allreasons Print all reasons that caused the score
--noprocscan Skip the process scan
--nofilescan Skip the file scan
--vulnchecks Run the vulnerability checks
--nolevcheck Skip the Levenshtein distance check
--scriptanalysis Statistical analysis for scripts to detect obfuscated
code (beta)
--rootkit Skip the rootkit check
--noindicator Do not show a progress indicator
--dontwait Do not wait on exit
--intense Intense scan mode (also scan unknown file types and
all extensions)
--csv Write CSV log format to STDOUT (machine processing)
--onlyrelevant Only print warnings or alerts
--nolog Don't write a local log file
--update Update the signatures from the "signature-base" sub
repository
--debug Debug output
--maxworkingset MAXWORKINGSET
Maximum working set size of processes to scan (in MB,
default 100 MB)
--syslogtcp Use TCP instead of UDP for syslog logging
--logfolder log-folder
Folder to use for logging when log file is not
specified
--nopesieve Do not perform pe-sieve scans
--pesieveshellc Perform pe-sieve shellcode scan
--nolisten Dot not show listening connections
--excludeprocess EXCLUDEPROCESS
Specify an executable name to exclude from scans, can
be used multiple times
--force Force the scan on a certain folder (even if excluded
with hard exclude in LOKI's code
Начиная с версии 0.15 сигнатуры Yara находятся в подрепозитории signature-base. Вы не получите подрепозиторий, загрузив LOKI как ZIP-файл. Он будет включен, если вы клонируете репозиторий.
Файлы IOC для хешей и имен файлов хранятся в папке './signature-base/iocs'. Все файлы '.yar', помещенные в папку './signature-base/yara', будут инициализированы вместе с уже включенным набором правил. Используйте значение 'score', чтобы определить уровень сообщения при совпадении сигнатуры.
Вы можете добавить IOC хешей, C2 и имен файлов, добавив файлы в подпапку './signature-base/iocs'. Все файлы IOC хешей и имен файлов должны быть в формате, используемом LOKI (см. файлы по умолчанию). Файлы должны содержать строки "hash", "filename" или "c2" в своем имени, чтобы быть загруженными при инициализации.
Для IOC хешей (разделены новой строкой; тип хеша определяется автоматически)
Hash;Description [Reference]
Для IOC имен файлов (разделены новой строкой)
# (optional) Description [Reference]
Filename as Regex[;Score as integer[;False-positive as Regex]]
Начиная с версии v0.16.2 LOKI поддерживает определение исключений пользователем через "excludes.cfg" в новой папке "./config". Каждая строка представляет собой регулярное выражение, которое применяется к полному пути файла во время обхода каталога. Таким образом, вы можете исключить определенные каталоги независимо от имени диска, расширений файлов в определенных папках и все файлы и каталоги, принадлежащие продукту, чувствительному к антивирусному сканированию.
Файл '''exclude.cfg''' выглядит следующим образом:
# Excluded directories
#
# - add directories you want to exclude from the scan
# - double escape back slashes
# - values are case-insensitive
# - remember to use back slashes on Windows and slashes on Linux / Unix / OSX
# - each line contains a regex that matches somewhere in the full path (case insensitive)
# e.g.:
# Regex: \\System32\\
# Matches C:\Windows\System32\cmd.exe
#
# Regex: /var/log/[^/]+\.log
# Matches: /var/log/test.log
# Not Matches: /var/log/test.gz
#
# Useful examples
\\Ntfrs\\
\\Ntds\\
\\EDB[^\.]+\.log
Sysvol\\Staging\\Nntfrs_cmp
\\System Volume Information\\DFSR
Сканирование Loki

Совпадения Regin

Ложные срабатывания Regin

IOC на основе хешей

IOC на основе имен файлов

Сгенерированный файл журнала

Сканер LOKI на домашней странице нашей компании https://www.nextron-systems.com/loki/
Twitter @cyb3rOps @thor_scanner
Если вас интересует корпоративное решение для сканирования APT, посмотрите на старшего брата Loki — THOR.
Скачайте PyInstaller, перейдите в каталог программы pyinstaller и выполните:
python ./pyinstaller.py -F C:\path\to\loki.py
Это создаст loki.exe в подпапке ./loki/dist.
Чтобы включить msvcr100.dll для улучшения совместимости с целевой ОС, измените строку в файле ./loki/loki.spec, содержащую a.binaries,, на следующую:
a.binaries + [('msvcr100.dll', 'C:\Windows\System32\msvcr100.dll', 'BINARY')],
venv, затем выполните python -m venv path/to/venv, где path/to/venv — путь к вашему виртуальному окружению. Проверьте виртуальное окружение, запустив path/to/venv/bin/python --version.
Обновите модули виртуального окружения для pip, setuptools и wheel, выполнив path/to/venv/bin/python -m pip install --upgrade pip setuptools wheel.path/to/venv/bin/python -m pip install colorama yara-python psutil rfc5424-logging-handler netaddrpath/to/venv/bin/python path/to/loki/loki-upgrader.py, где path/to/loki — путь к репозиторию Loki.sudo path/to/venv/bin/python loki.pyЗагрузите исходные коды Yara здесь
Скомпилированный сканер может быть обнаружен антивирусными движками. Это связано с тем, что сканер представляет собой скомпилированный скрипт Python, реализующий некоторые функции сканирования файловой системы и процессов, которые также используются в скомпилированном вредоносном коде.
Если вы не доверяете скомпилированному исполняемому файлу, скомпилируйте его самостоятельно.
Loki — простой сканер IOC Copyright (c) 2015 Florian Roth
Эта программа является свободным программным обеспечением: вы можете распространять ее и/или изменять в соответствии с условиями Стандартной общественной лицензии GNU, опубликованной Фондом свободного программного обеспечения, либо версии 3 Лицензии, либо (по вашему выбору) любой более поздней версии.
Эта программа распространяется в надежде, что она будет полезной, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемых гарантий КОММЕРЧЕСКОЙ ЦЕННОСТИ или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ. Подробнее см. в Стандартной общественной лицензии GNU.
Вы должны были получить копию Стандартной общественной лицензии GNU вместе с этой программой. Если нет, см. http://www.gnu.org/licenses/.