概要
弊社では、セキュリティに関する情報収集の一環として、JPCERT/CC の RSS を 専用の Slack チャンネルで受信しています。
その通知を通して 2023/08/09 に公開されたブログ記事 で紹介されたマルウェア検知ツール YAMA を知ったので使ってみました。
やること
GitHub Actions で YAMA をコンパイルし、AWS EC2 で構築した WindowsOS に対して RDP を使ってローカルの macOS から接続し、 YAMA を実行します。
やらないこと
実際のマルウェアは使用しません。
目次
- YAMA とは
- 環境構築
- YAMA スキャナの作成
- YAMA スキャナの実行
- YAMA スキャナの中身
- YAMA スキャナのユースケース
- まとめ
1. YAMA とは
YAMA は JPCERT/CC が GitHub に公開したマルウェア検知ツールで、ニーズに合わせたスキャナを単一のバイナリとして生成・動作させることができるツールです。
生成されたスキャナは、Windows ユーザーモードアプリケーションとしてプロセスのメモリ領域を分析し、YARA ルール (後述) に基づいて疑わしい属性を持つメモリ領域をスキャンすることでマルウェアを特定します。
詳細は README をご参照ください。 https://github.com/JPCERTCC/YAMA/blob/main/README.md
JPCERT/CC とは
JPCERT/CC とは、国内外のサイバーセキュリティに関する情報共有や協力を行なう組織です。
脅威情報やインシデント情報を収集し、サイバーセキュリティの向上と国内外のインターネット環境の安全確保を目指して活動しています。
セキュリティインシデントが起きた時に、組織や個人に対してアドバイスや支援を提供する役割も担っています。
https://www.jpcert.or.jp/about/
「単一のバイナリとして動作する」 とは
「単一のバイナリとして動作する」とは、プログラムの動作が他のファイルの有無に依存しないという意味です。
通常、プログラムやツールは複数のファイルや依存関係を持ち、実行するためにはそれらのファイルがすべて揃っている必要があります。しかし、特定の場合には依存関係を最小限にし、利用者が簡単に実行できるようにするために、すべてのコンポーネントを単一のバイナリファイルに統合した方が有用な場合があります。
特にセキュリティツールやマルウェア解析ツールなどのツールでは、依存関係の解決や設定の調整などを必要とせずに、実行するだけで簡単に利用できることが重要です。
そのためこれらのツールは、すべてのコンポーネントを単一の実行可能ファイル または バイナリに統合して提供されることがあります。
この手法は、特に実行環境が限られている場合や利用者に煩雑な設定やインストールを求めたくない場合に役立ちます。
2. 環境構築
YAMA の実行に必要なものとして以下を用意しました。
- WindowsOS on EC2
- RDP on macOS (Microsoft Remote Desktop)
- Fork された YAMA リポジトリ 及び GitHub Actions
1.
、 2.
に必要な作業についてはリンク先を参照してください。
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/WindowsGuide/EC2_GetStarted.html
使用する環境について簡単に説明します。
2-1. WindowsOS on EC2
検証環境を用意する方法はいくつか考えられますが、今回は EC2 を採用します。
AMI は Microsoft Windows Server 2022 Base
(ami-087bd73fc10ea41af) を使用しました。
Linux サーバーと Windows サーバー
個人的に Windows サーバーは初めて使ったので、備忘録として簡単に整理しておきます。
不要な方は読み飛ばしてください。
- Linux では Bash や Zsh などのシェルを使用してコマンドを実行するが、Windows ではコマンドプロンプトや PowerShell といったシェルで実行する
- Linux は一般的に区切り文字としてスラッシュ(/)を使用するパス構造を持ち、大文字と小文字を区別するが、Windows はバックスラッシュ(\)をパス区切り文字とし、一般的にパスの大文字と小文字を区別しない
- Linux のファイルシステムは階層的で、権限管理が重視されているが、Windows のファイルシステム (NTFS) は ACL (Access Control Lists) による高度な権限管理が特徴
- Linux サーバーへの SSH 接続は、ターミナルから OpenSSH クライアントが使用可能だが、Windows サーバーへは、サードパーティ製の SSH クライアント (例:PuTTY、 WinSCP、 Bitvise SSH Client) を使用することが一般的
CLI コマンドも大きく異なるので注意が必要です。
操作 | Linux コマンド | コマンドプロンプト コマンド | PowerShell コマンド |
---|---|---|---|
ファイルリスト表示 | ls |
dir |
Get-ChildItem |
カレントディレクトリ表示 | pwd |
cd |
Get-Location |
ディレクトリ変更 | cd |
cd |
Set-Location |
ファイル・ディレクトリコピー | cp |
copy |
Copy-Item |
ファイル・ディレクトリ移動/名前変更 | mv |
move |
Move-Item |
ファイル・ディレクトリ削除 | rm |
del |
Remove-Item |
ファイルのパーミッション変更 | chmod |
icacls |
Set-ItemProperty |
2-2. RDP on macOS (Microsoft Remote Desktop)
Windows サーバーにリモートアクセスする方法はいくつかありますが、今回は RDP (Remote Desktop Protocol) を使用しました。
Microsoft Remote Desktop は RDP クライアントの一つです。
Add PC
から接続先の情報を入力して進めると…
EC2 上の Windows に GUI で接続できました。
PowerShell を起動します。
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.
Install the latest PowerShell for new features and improvements! https://aka.ms/PSWindows
PS C:\Users\Administrator> dir
Directory: C:\Users\Administrator
Mode LastWriteTime Length Name
---- ------------- ------ ----
d-r--- 8/21/2023 1:28 AM 3D Objects
d-r--- 8/21/2023 1:28 AM Contacts
d-r--- 8/21/2023 1:28 AM Desktop
d-r--- 8/21/2023 1:28 AM Documents
d-r--- 8/21/2023 1:28 AM Downloads
d-r--- 8/21/2023 1:28 AM Favorites
d-r--- 8/21/2023 1:28 AM Links
d-r--- 8/21/2023 1:28 AM Music
d-r--- 8/21/2023 1:28 AM Pictures
d-r--- 8/21/2023 1:28 AM Saved Games
d-r--- 8/21/2023 1:28 AM Searches
d-r--- 8/21/2023 1:28 AM Videos
2-3. Fork された YAMA リポジトリ 及び GitHub Actions
次に YAMA スキャナの作成に必要な準備を進めます。
Fork URL: https://github.com/JPCERTCC/YAMA/fork
GitHub Actions
Actions Enabled.
3. YAMA スキャナの作成
GitHub Actions により任意のスキャナを作成するため、.github/workflows/build.yaml
と rsrc/ioc/rule.yara
を編集しました。
.github/workflows/build.yaml
- 作業ブランチで稼働するように
name: "yama-build"
on:
push:
branches:
- "main"
+ - "testing-APT10_ANEL_InitRoutine"
rsrc/ioc/rule.yara
APT10_ANEL_InitRoutine
ルールを残してそれ以外は削除
commit すると GitHub Actions が動きました。
実行結果
Artifacts
として YAMA.exe 1.25 MB
が作成されました。
作成したスキャナの配置
以下の手順にて Windows に配置しました。
- GitHub からローカルにダウンロード
- RDP の設定を変更し、ローカルのファイルを共有
GitHub からローカルにダウンロード
Web ブラウザを操作してローカルマシンにダウンロードしました。
RDP の設定を変更し、ローカルのファイルを共有
Windows サーバーへのファイルの転送方法はいくつかありますが、以下の方法を採用しました。
Microsoft Remote Desktop の設定から Edit PC > Folders にて、Redirect folders
にチェックを入れて、共有したいディレクトリを指定
すると、指定したディレクトリへ EC2 の Windows からアクセスできるようになりました。
実行ファイルの確認
Yama.exe を Desktop フォルダに配置できたことを確認します。
適宜お好きな場所に配置してください。
PS C:\Users\Administrator\Desktop> dir
Directory: C:\Users\Administrator\Desktop
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 6/21/2016 3:36 PM 527 EC2 Feedback.website
-a---- 6/21/2016 3:36 PM 554 EC2 Microsoft Windows Guide.website
------ 8/21/2023 2:01 AM 1307136 Yama.exe
-a---- 8/21/2023 2:19 AM 548375 YAMA.exe.zip
.\Yama.exe
PS C:\Users\Administrator\Desktop> .\Yama.exe
__ _____ __ ______
\ \/ / _ | / |/ / _ |
\ / __ |/ /|_/ / __ |
/_/_/ |_/_/ /_/_/ |_|
Yet Another Memory Analyzer for malware detection.
Usage: yama.exe [-h] [--version] [--pid VAR] [--all] [--output VAR] [--json] [--evtx] [--uninstall] [--suppress] [--quiet]
Optional arguments:
-h, --help shows help message and exits
-V, --version prints version information and exits
-p, --pid PID to scan (required if not using --all)
-a, --all Scan all processes (required if not using --pid)
-o, --output Specify output directory [default: "./"]
-j, --json Export json report to the output directory
-e, --evtx Install YAMA EventLog manifest.
-u, --uninstall Uninstall YAMA EventLog manifest. (only do uninstall operaiton)
-s, --suppress Suppress warning logs
-q, --quiet Suppress all console outputs
-v, --verbose Increase verbosity.(-v: info, -vv: debug, -vvv: trace)
4. YAMA スキャナの実行
.\Yama.exe –all
PS C:\Users\Administrator\Desktop> .\Yama.exe -a
[YAMA Result]
Scan time: 2023-08-21 02:53:53
Host Name: EC2AMAZ-3DTJV4E
[Result]
No detection.
実行結果が新規メモとして書き出されました。
-o
, --output
で書き出し先を指定することもできます。
.\Yama.exe –verbose
PS C:\Users\Administrator\Desktop> .\Yama.exe -av
info : Yama will scan 66 process(es).
info : Suspicious Processes Count: 0
[YAMA Result]
Scan time: 2023-08-21 02:56:02
Host Name: EC2AMAZ-3DTJV4E
[Result]
No detection.
info : Report file path: C:\Users\Administrator\Desktop\\EC2AMAZ-3DTJV4E_20230821025602_yama.txt
info : File written successfully: C:\Users\Administrator\Desktop\\EC2AMAZ-3DTJV4E_20230821025602_yama.txt
マルウェアが検出された場合
もしスキャン対象のマルウェアが検出された場合、[Result]
以下にプロセス名やプロセス ID とともに通知されるようです。
5. YAMA スキャナの中身
スキャンの際、何をどのように認識し検出すべきかは、YARA ルールによって定義されています。
YAMA リポジトリにおいて YARA ルールは rsrc/ioc/rule.yara
に記述されているので、ルールの中身を見てみましょう。
YARA とは
マルウェアの検出方法には、パターンマッチングやビヘイビア分析などさまざまなアプローチ方法がありますが、YARA はパターンマッチングツールです。
特定の文字列やバイトパターン、バイナリの構造などを使用して、検出対象のファイルを識別します。
主にサイバーセキュリティの分野で使用され、マルウェア解析や侵入検知などに活用されています。
YARA の主な特徴は以下の通りです。
- パターンマッチング: YARA は、特定の文字列やバイトパターン、バイナリの構造などを使用して、ファイル内の特定のセクションを検出することができます。これにより、特定のマルウェアファミリや悪意のあるコードを識別することができます。
- 柔軟なルール定義: YARA では、カスタムのルールを定義することができます。これにより、特定のマルウェアの挙動や特徴に基づいて、独自の検出ルールを作成することが可能です。
- メタデータとコメント: YARA ルールには、ルールの説明や作者情報などのメタデータを追加できます。これにより、ルールの目的や関連情報を記録し、共有することができます。
- AND/OR 条件: 複数のパターンを組み合わせて検出条件を作成できます。これにより、複数のパターンが同時に一致するか、いずれかのパターンが一致する場合にマッチするルールを作成できます。
YARA は、サイバーセキュリティ専門家やマルウェアアナリストにとって非常に便利なツールの一つです。
Sample
実際の YARA ルールについて細かく見てみましょう。
https://github.com/JPCERTCC/YAMA/blob/f1d54425527a533ea5a9ba2db2c4b1b301d3b807/rsrc/ioc/rule.yara#L1-L11 は次のようになっています。
rule APT10_ANEL_InitRoutine {
meta:
description = "ANEL malware"
author = "JPCERT/CC Incident Response Group"
hash = "2371f5b63b1e44ca52ce8140840f3a8b01b7e3002f0a7f0d61aecf539566e6a1"
strings:
$GetAddress = { C7 45 ?? ?? 69 72 74 C7 45 ?? 75 61 6C 50 C7 45 ?? 72 6F 74 65 66 C7 45 ?? 63 74 [3-4] C7 45 ?? ?? 65 72 6E C7 45 ?? 65 6C 33 32 C7 45 ?? 2E 64 6C 6C [3-4] FF 15 ?? ?? ?? ?? 50 FF 15 ?? ?? ?? ?? }
condition:
$GetAddress
}
これは、特定のバイトパターンを使用してマルウェア ANEL を検出するために使用されるものです。
ANEL は、悪意のあるソフトウェア (マルウェア) の一種で、主に APT (高度な持続的脅威, Advanced Persistent Threat) 攻撃で使用されることが報告されています。
ルールの各セクションは以下の通りです。
rule APT10_ANEL_InitRoutine
: ルールの名前。ルールの識別子。meta:
: メタデータセクション。ルールに関する情報。description = "ANEL malware"
: ルールの説明。ANEL マルウェアを検出するためのルールであることが示されています。author = "JPCERT/CC Incident Response Group"
: ルールを作成した団体や個人の情報。hash = "2371f5b63b1e44ca52ce8140840f3a8b01b7e3002f0a7f0d61aecf539566e6a1"
: 特定のサンプルを対象にするためのハッシュ値 (ファイルの識別子) 。
strings:
: 特定のバイトパターン (文字列やバイト列) の定義。検出対象のファイル内で見つけるための情報。$GetAddress = { ... }
: バイトパターン。ここでは$GetAddress
が定義されており、特定のバイトシーケンスを含む箇所を検出するために使用されます。
condition:
: ルールの条件。条件が満たされる場合、ルールはマッチしたとみなされます。$GetAddress
: 先に定義されたバイトパターン$GetAddress
が使用されています。特定のバイトシーケンスがファイル内で見つかった場合、この条件は満たされることになります。
6. YAMA スキャナのユースケース
上記のように、YARA ルールによって YAMA はマルウェアを検知します。
YARA ルールは GitHub などで公開されているため、それらのルールを rsrc/ioc/rule.yara
に記述することで、ニーズに合わせた YAMA スキャナを作成できます。
一例として https://github.com/JPCERTCC/jpcert-yara では、さまざまな APT 攻撃に対応した多数の YARA ルールや、さまざまな種類のマルウェアに対応したルールを提供しています。
マルウェアスキャンツールを扱う際の一般的なアプローチ
例えば、ある PC のマルウェア感染が疑われる場合、最初に取るべき対策として「ネットワークからの遮断」を思いつく方も多いかもしれません。 このような場合、当該 PC を使用した YAMA スキャナの作成とインターネット経由でのダウンロードを実施することは考えにくいでしょう。
マルウェアスキャンツールはどのように扱うのが良いでしょうか? 一般的なアプローチをいくつか説明します。
- オフライン環境での利用: 感染の疑いがある場合、インターネットからダウンロードしたツールが正当なものであるか確認するために、別のクリーンなコンピュータ上でツールをダウンロードして、USB ドライブなどを介して感染したコンピュータに持ち込むことが考えられます。これにより、マルウェアの影響を受けずにツールを入手し、セキュリティ対策を強化することができます。
- セキュアなソースからのダウンロード: 信頼性のあるソースからマルウェアスキャンツールをダウンロードすることが重要です。公式ウェブサイトや信頼性のあるセキュリティツールの提供元から直接ダウンロードすることで、偽物のツールやマルウェアを避けることができます。
- オフラインシグネチャの更新: もしオフライン環境で使用する必要がある場合、マルウェアスキャンツールの定義ファイル (シグネチャ) を更新するために定期的に別のクリーンな環境でダウンロードし、オフラインコンピュータに適用することを検討します。
- ブートディスクの使用: 感染が濃厚な場合、ブートディスクやライブCDを使用して、オペレーティングシステムを起動せずにスキャンを実行することが考えられます。これにより、感染したオペレーティングシステムの影響を受けずにスキャンを行えます。
- 専用の解析環境の構築: 感染が深刻な場合や詳細な解析が必要な場合、オフライン環境での解析専用環境を構築することを検討します。仮想マシンや専用のハードウェアを使用して、安全な環境でマルウェア解析を行います。
もちろん JPCERT/CC など専門家のアドバイスや指導を受けることも、安全な対策を進める上で重要な選択です。
7. まとめ
マルウェア検知ツールというものは初めて触りましたが、普段馴染みのある GitHub と AWS を使っての作業だったため、比較的簡単に試すことができました。
Windows サーバーも RDP も初めてでしたが、Linux の概念との対比や、情報処理技術者試験対策の中で学んだことが理解を助けてくれるのを感じました。
ネットワークやセキュリティに関する知識を引き続き楽しんで学び、業務へ活かしていきたいです。
セキュリティといえば個人的なトピックですが、令和 5 年度 春季 情報処理安全確保支援士試験に合格しました。
カルテット開発部には、資格試験の受験料を会社が負担してくれる制度があります。 また、残業もほとんどないため、業後の勉強時間も計画しやすかったのを覚えています。
カルテット開発部の Value である 「好きで得意な技術を磨き続ける」 ことができるのは、カルテット開発部が自慢できる環境の一つだと感じます。