ちょっと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で区切りたいと思います。