
IOCおよびYARAベースのスキャナーで、ファイル名の正規表現、YARAシグネチャ、ハッシュマッチング、エンドポイントでのC2バックコネクトチェックにより侵害指標を検出します。
私は新しいオープンソースYARAスキャナーであるLOKI RS(Rust)を作成しました。LOKI(Python)は正式に非推奨となりました。
このプロジェクトは現在、非アクティブなメンテナンスモードです。つまり、バグ修正や簡単な問題についてはプルリクエストをマージしますが、現在新しい機能を追加したり既存の機能を拡張する時間がありません。長年にわたり、私はより高度なスキャナーであるTHORの開発に注力してきました。THORはこのプロジェクトに比べて多くの改善点を提供しています。無料版のTHOR Liteも利用可能で、より高速で安定しており、CI環境で厳格にテストされています。単により良いソリューションです。オープンソース、無料、商用スキャナーの比較はこちらをご覧ください。
また、LOKI 2というRustベースのLOKIバージョンの作業も開始しました。ただし、現在のLOKIリリースと機能面で同等になる時期は不明です。さらに、どのスキャナーが最適かを判断するためのフローチャートも作成しました。

シンプルな侵害インジケーターのためのスキャナー
検出は4つの検出方法に基づいています:
1. ファイル名IOC
ファイルの完全なパス/名に対する正規表現マッチ
2. Yaraルールチェック
ファイルデータとプロセスメモリに対するYaraシグネチャマッチ
3. ハッシュチェック
既知の悪意のあるハッシュ(MD5、SHA1、SHA256)をスキャンしたファイルと比較
4. C2バックコネクトチェック
プロセスの接続エンドポイントをC2 IOCと比較(バージョンv.10からの新機能)
追加チェック:
1. Reginファイルシステムチェック(--reginfs経由)
2. プロセス異常チェック([Sysforensics](http://goo.gl/P99QZQ)に基づく)
3. SWF解凍スキャン(バージョンv0.8からの新機能)
4. SAMダンプチェック
WindowsバイナリはPyInstallerでコンパイルされており、x86およびx64ベースのシステムでx86アプリケーションとして動作します。
コンパイル済みの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'フォルダに保存されています。'./signature-base/yara'フォルダに配置されたすべての'.yar'ファイルは、既に含まれているルールセットと一緒に初期化されます。'score'値を使用して、シグネチャ一致時のメッセージのレベルを定義します。
ハッシュ、C2、ファイル名IOCは、'./signature-base/iocs'サブフォルダにファイルを追加することで追加できます。すべてのハッシュIOCとファイル名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は新しい"./config"フォルダ内の"excludes.cfg"を介してユーザー定義の除外設定をサポートしています。各行は、ディレクトリウォーク中に完全なファイルパスに適用される正規表現を表します。これにより、ドライブ名に関係なく特定のディレクトリ、特定のフォルダ内のファイル拡張子、およびアンチウイルススキャンに敏感な製品に属するすべてのファイルとディレクトリを除外できます。
'''exclude.cfg''' looks like this:
# 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/distにloki.exeが作成されます。
msvcr100.dllを含めてターゲットOSの互換性を向上させるには、ファイル./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を実行して仮想環境をテストします。path/to/venv/bin/python -m pip install --upgrade pip setuptools wheelを実行して、仮想環境の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.pyYaraソースはこちらからダウンロード
コンパイル済みスキャナーはアンチウイルスエンジンに検出される可能性があります。これは、スキャナーがコンパイルされたPythonスクリプトであり、コンパイルされたマルウェアコードでも使用されるファイルシステムおよびプロセススキャン機能を実装しているためです。
コンパイル済み実行ファイルを信頼できない場合は、ご自身でコンパイルしてください。
Loki - シンプルなIOCスキャナー Copyright (c) 2015 Florian Roth
このプログラムはフリーソフトウェアです。あなたはこれを、フリーソフトウェア財団によって発行されたGNU General Public License(バージョン3、または(あなたの選択により)それ以降のバージョン)の条件の下で再配布または修正することができます。
このプログラムは有用であることを願って配布されていますが、全くの無保証であり、商品性や特定目的への適合性の黙示の保証も含め、いかなる保証もありません。詳細についてはGNU General Public Licenseを参照してください。
あなたはこのプログラムと共にGNU General Public Licenseのコピーを受け取っているはずです。受け取っていない場合は、http://www.gnu.org/licenses/を参照してください。