ちょっとSplunkを触る機会がでてきたので、Splunkを触れる環境をDockerコンテナ作成して、JPCERT/CCの公開しているログ分析トレーニング用コンテンツの公開 - JPCERT/CC Eyes | JPCERTコーディネーションセンター公式ブログに取り組んでみました。QiitaにSplunkでJPCERTログ分析トレーニング(ハンズオン その1) - Qiitaという記事があったので、これをDockerに立ち上げたSplunkで試してみようと思います。コンテナをElasticsearchに替えればElasticsearchの操作の練習でも使えそう。今度試してみよう。
実施環境
Windows 10
WSL2
Ubuntu20.04
事前準備
事前にWSL2のUbuntu20.04環境でDockerが使用できるようにしておきます。
Splunkコンテナを取得する
WSL2のUbuntu20.04環境でhttps://hub.docker.com/r/splunk/splunk/ に記載の通り、docker hubからSplunkのコンテナイメージを取得する
$ docker pull splunk/splunk:latest
取得後、Splunkコンテナを起動する。
$ docker run -d -p 8000:8000 -e "SPLUNK_START_ARGS=--accept-license" -e "SPLUNK_PASSWORD=password" --name splunk splunk/splunk:latest
http://localhost:8000でアクセスしSplunkのログイン画面が表示されたら、admin/passwordでログインが行えることを確認します。
JPCERT/CCのログ分析トレーニングコンテンツを取得する
Log Analysis Training (jpcertcc.github.io)のサイトのダウンロードの項を確認すると、コンテンツのダウンロード先(GitHub)が支持されているので、GitHubリポジトリをCloneしてコンテンツを取得します。
$ git clone https://github.com/JPCERTCC/log-analysis-training.git
CSVファイルの取り込みを行う
SplunkでJPCERTログ分析トレーニング(ハンズオン その1) - Qiitaを参考に、先ほど取得したコンテンツをSplunkに投入するため、一旦必要な資材をまとめておきます。まずはHands-onの1から取り組んでみようと思うので、Hands-onの1をtar.gzに固めます。
$ cd Hands-on
$ tar cvf Handson1.tar.gz Handson1
Handson1/
Handson1/Powershell.csv
Handson1/Security.csv
Handson1/Sysmon.csv
Handson1/TaskScheduler.csv
トレーニングを実施
ハンズオントレーニングの内容はhttps://github.com/JPCERTCC/log-analysis-training.gitのMaterialディレクトリの中にあるPDFに記載されています。ログ分析の経験がない場合、内容はとても勉強になるので、一読しておきましょう。
P.70からハンズオンが始まります。下記、報告書も参考になるそうなので、都度参照します。
ハンズオン1~マルウェア感染端末の調査~
Q1. マルウェアの通信先IPアドレスを特定してください
「Win7_64JP_01」を使用しているユーザからの問い合わせ、駆除したファイル名は「win.exe」に着目します。
感染端末の特定のため、サーチコンソールのキーワードにwin.exeを追加してみましょう。
source="Handson1.tar.gz:*" win.exe
138,430件のイベントを542件まで絞り込むことができました。ハンズオン資料を確認し、Win7_64JP_01に割り当てられているIPアドレスを確認し、IPアドレス:192.168.16.101をサーチコンソールのキーワードに追加してみます。
source="Handson1.tar.gz:*" win.exe 192.168.16.101
542件のイベントを428件まで絞り込むことができました。ログのネットワーク情報を確認すると、方向:送信の通信先アドレスが198.51.100.101となっています。アプリケーション名も\device\harddiskvolume2\intel\logs\win.exeとなっており、この通信のようです。
A1. 198.51.100.101
Q2. マルウェアの動作開始時刻とマルウェアの実行方法を特定してください
先ほどの検索条件のまま、取り込んだハンズオンログの一番古いものを確認してみます。
すると時間が、2019/11/07 15:53:04.000のログが古いもののようなので、これが動作開始時刻のようです。
マルウェアの実行方法は動作時刻の前になるので、IPアドレスを消して、まずは15:53を指定して検索をしてみました。
source="Handson1.tar.gz:*" win.exe date_hour="15" date_minute="53"
すると、15:53:00にtaskeng.exeを使っている怪しいログがあります。おそらくタスク登録されて起動されたもののように見えます。
A2. 動作開始時刻:15:53:00、起動方法:taskeng.exe
Q3. 攻撃者はWin7_64JP_01から別マシンに侵入を試みています。侵入を試みた別の端末(ホスト名 or IPアドレス)を特定してください。
これだけではちょっとわからなかったので、ヒントを見るとツール分析結果シートのnet useを確認してみるように書いてあったので、見てみます。
ツール概要を見ると
・カテゴリ:ファイル共有・転送
・説明・ネットワーク上で公開されている共有ポイント委接続する
・攻撃時における想定利用例:共有ポイントを経由して攻撃に使用するツールを送り込んだり、ファイルサーバから情報を取得したりする。
とあります。ヒントと書かれているので、net useコマンドを使って他の端末へ攻撃をしたと推測します。
サーチコンソールの検索条件にnet useを追加してみます。
source="Handson1.tar.gz:*" win.exe "net use"
2件の結果が絞り込まれました。Sysmonのログですね。
情報,2019/11/07 16:06:03,Microsoft-Windows-Sysmon,1,Process Create (rule: ProcessCreate),"Process Create:
UtcTime: 2019-11-07 07:06:03.955
ProcessGuid: {02EA0504-5B5B-5A01-0000-00105D741200}
ProcessId: 2412
Image: C:\Windows\SysWOW64\cmd.exe
CommandLine: cmd /c ""net use \\Win7_64JP_03\c$""
CurrentDirectory: C:\Windows\system32\
User: NT AUTHORITY\SYSTEM
LogonGuid: {02EA0504-41A6-5A01-0000-0020E7030000}
LogonId: 0x3e7
TerminalSessionId: 0
IntegrityLevel: System
Hashes: SHA1=EE8CBF12D87C4D388F09B4F69BED2E91682920B5
ParentProcessGuid: {02EA0504-584C-5A01-0000-0010E1C11000}
ParentProcessId: 2604
ParentImage: C:\Intel\Logs\win.exe
ParentCommandLine: C:\Intel\Logs\win.exe"
CommandLineを見るとWin7_64JP_03に対してnet useを実行しているようです。ハンズオン資料のホスト一覧を確認すると、Win7_64JP_03のIPアドレスは192.168.16.103です。
A3. 侵入を試みた別の端末はWin7_64_JP_03(192.168.16.103)
Q4. 攻撃者はWin7_64JP_01に別のマシンから侵入しています。不正ログオン元のIPアドレスと使用されたアカウント名は何ですか?
ヒントを見るとSecurity.csvを確認するように書いてあり、またヒントを見るとツール分析結果シートのnet useを確認してみるように書いてあるので見てみます。実行成功時に確認できる痕跡の欄に
- 接続元: イベントログ「セキュリティ」にnet.exeのイベントID 4689 (プロセスが終了しました)が記録され、実行結果(戻り値)が"0x0"となっている
- 接続先: イベントログ「セキュリティ」のイベントID: 5145でファイルが読み取られたことが記録されている
と記載があります。外部からの侵入なので接続先の確認観点でイベントID:5145をキーワードに入れてみます。
サーチコンソールの条件を変更します。
source="Handson1.tar.gz:*/Security.csv"
12件のログが絞り込まれ、どれもアカウント名がsysg.adminというものになっています。ホスト情報をみてもsysg.adminというユーザ名は乗っていないので、不正ログオン元のアカウント名のようです。
情報,2019/11/07 15:44:30,Microsoft-Windows-Security-Auditing,5145,詳細なファイル共有,"クライアントに必要なアクセスを付与できるかどうかについて、ネットワーク共有オブジェクトがチェックされました。
サブジェクト:
セキュリティ ID: EXAMPLE\Administrator
アカウント名: sysg.admin
アカウント ドメイン: EXAMPLE
ログオン ID: 0xfd151
ネットワーク情報:
オブジェクトの種類: File
送信元アドレス: 192.168.16.109
ソース ポート: 52765
共有情報:
共有名: \\*\C$
共有パス: \??\C:\
相対ターゲット名: Intel\Logs\win.exe
アクセス要求情報:
アクセス マスク: 0x100180
アクセス: SYNCHRONIZE
ReadAttributes
WriteAttributes
アクセス チェック結果:
-
"
送信元アドレスも192.168.16.109と記載がありました。
A4. 不正ログオンに使用されたアカウント名:sysg.admin、IPアドレス:192.168.16.109
Q5. Win7_64JP_01でPowerShellファイルが実行されたようです。このファイルは何を行うものですか?
PowerShellの拡張子は.ps1なので、サーチコンソールに検索条件を入れて絞り込んでみます。
source="Handson1.tar.gz:*" ".ps1"
16件のログが絞り込まれました。明らかに怪しいs.ps1とz.ps1が確認できます。
s.ps1はhttp://anews-web.co/server.exeから C:\Intel\Logs\server.exeにファイルをダウンロードする処理が、
z.ps1はhttp://anews-web.co/mz.exeからC:\Intel\Logs\mz.exeにファイルをダウンロードする処理が、
それぞれechoでファイルに書き込まれています。
A5. http://anews-web.co/server.exeとhttp://anews-web.co/mz.exeからファイルをダウンロードする
まとめ
ハンズオン資料だと、CSVファイルを直接Grepして検索するのですが、Splunkだと簡単に検索条件を変えて、しかも確認しやすいというところが便利でした。 ハンズオン2以降も引き続きやってみたいと思いますが、長いのでいったん1で区切りたいと思います。