株式会社セキュアイノベーション

Menu

BLOG

  • セキュリティ教育

公開:2021.04.26 10:00 | 更新: 2021.04.26 03:58

Log Analysis Traning -Handson1-

前置き

今日は、昨年のブログ記事異常ログ見聞録で紹介されていたLog Analysis Trainingを実際に見てみます。

ただし、提供されるログファイルの大半はCSVで構成されています(一部syslog形式もあります。)
syslog形式であれば基本的に1event= 1lineなので grepしやすいですが、CSVの列の中には改行がある場合があるためそのような方法が使えません。

列中に改行があるので、grepした際に邪魔なログも入りますし-Aや-Bというオプションもありますが行数も様々なのであまり使えません。

これではちょっとやりづらいのでこのCSVファイルをSplunk Enterpriseに取り込んで調査してみたいと思います。

Splunk Enterpriseでの調査

今回はLog Analysis TrainingのHandson1をやってみます。
Handson1には以下の課題があります。

  • マルウエアの通信先IPアドレスを特定してください。
  • マルウエアの動作開始時刻とマルウエアの実行方法を特定してください。
  • 攻撃者はWin7_64JP_01から別のマシンに侵入を試みています。 侵入を試みた別の端末(ホスト名or IPアドレス)を特定してください。
  • 攻撃者はWin7_64JP_01に別のマシンから侵入しています。 不正ログオン元のIPアドレスと使用されたアカウント名は何ですか?
  • Win7_64JP_01でPowerShellファイルが実行されたようです。 このファイルは何を行うものですか?

この5つの課題に答えていきます。

そして、ログ分析というかこのようなインシデントレスポンスは必ず何かしらのトリガーがあります。
アラートや役職員からの報告・相談等様々ですが、今回はWin7_64JP_01 (192.168.16.101) を使用しているユーザーから「ウイルス対策ソフトが怪しい。ファイルを駆除したようだが問題無いか確認してほしい。駆除したファイル名はwin.exe」という報告を基に調査をスタートします。

ログ全体

Splunkにログを取り込みました。だいぶ見やすくなっていると思います。

ログ自体は (取り込みの際に変なデータがSplunkに取り込まれていなければ) 69215件あります。

また、これらのログは2019年11月7日の15:00~18:00に発生したようです。

ちなみにWindowsの以下ログが含まれています。

  • PowerShell
  • Security Log
  • Sysmon
  • TaskScheduler

この時点で感染要因は想像できそうですが、スルーして課題に取り組みます。

【課題】目次

  1. マルウエアの通信先IPアドレスを特定してください。
  2. マルウエアの動作開始時刻とマルウエアの実行方法を特定してください。
  3. 攻撃者はWin7_64JP_01から別のマシンに侵入を試みています。 侵入を試みた別の端末(ホスト名or IPアドレス)を特定してください。
  4. 攻撃者はWin7_64JP_01に別のマシンから侵入しています。 不正ログオン元のIPアドレスと使用されたアカウント名は何ですか?
  5. Win7_64JP_01でPowerShellファイルが実行されたようです。 このファイルは何を行うものですか?

課題1:マルウエアの通信先IPアドレスを特定してください。

最初はC2の特定です。

事前の情報を基にマルウェアのプログラム名は win.exeでそのマルウェアを駆除した端末のIPアドレスは192.168.16.101なのでSplunk Enterpriseのサーチ言語であるSPL (Search Processing Language) を使ってみてログを絞ってみます。

index=main "win.exe"
| rex field=_raw "送信元アドレス:\s*(?<SourceIPAddress>((25[0-5]|2\d{2}|1\d{2}|[1-9]\d|\d)\.){3}(25[0-5]|2\d{2}|1\d{2}|[1-9]\d|\d))"
| search SourceIPAddress=192.168.16.101
| rex field=_raw "宛先アドレス:\s*(?<DestinationIPAddress>((25[0-5]|2\d{2}|1\d{2}|[1-9]\d|\d)\.){3}(25[0-5]|2\d{2}|1\d{2}|[1-9]\d|\d))"
| rex field=_raw "アプリケーション名:\s*(?<ApplicationName>\S*)"
| stats count by ApplicationName SourceIPAddress DestinationIPAddress

SPLの意味は以下となります。

  1. インデックスと呼ばれるログを取り込む箱のようなものは mainを指定し、ログの中に win.exeという文字列が含まれたログを探す。
  2. 1.でフィルターされたログの生ログから「送信元IPアドレス: [空白]」に続く1桁から3桁の数字の後に.がつく文字列をSourceIPAddressとする。
  3. SourceIPAddressが 192.168.16.101であるログだけに絞る。
  4. 3.でフィルターされたログの生ログから「宛先IPアドレス: [空白]」に続く1桁から3桁の数字の後に.がつく文字列をDestinationIPAddressとする。
  5. 3.でフィルターされたログの生ログから「アプリケーション名: [空白]」に続く空白や改行が出現する直前の文字までをApplicationNameとする。
  6. ApplicationName SourceIPAddress DestinationIPAddressでカウントを集計する。

6.に関しては別の方法でもいいのですが、重複排除してテーブルで見たいだけなのでこれを使いました。
6.を行わない状態だと214件ログがあり、別に見れない量ではないのですが、

6.を行うと重複を排除してくれて以下のようにすっきりします。

送信先を特定する必要があるので、DestinationIPAddressがマルウェアの送信先となります。
後々の調査のために参考になるかもしれないので、気付いたことをメモしておきましょう

  • 時間帯は15:54:04~17:47:21, 17:56:07~17:59:59
  • プロセスIDは2604.

課題2:マルウエアの動作開始時刻とマルウエアの実行方法を特定してください。

次は動作開始時刻と実行方法です。
動作開始時刻は前の設問のログが15:54:04から発生していたので、これより前と推測できます。
時間帯を絞ってみます。

ログは25件となりました。

SPLは以下のように記述しました。

index=main "win.exe"

ログ量は少ないのでこれ以上SPLは書かないで一つ一つ見てみます。

要約すると192.168.16.109のファイル共有へアクセスをしていて、タスクスケジューラでタスクが作成されて、プロセスが作成されています。
なので、マルウェアの動作開始時刻はプロセスが作成された時間で、マルウェアの実行方法はタスクスケジューラに登録されて実行されたことが分かりました。

タスクスケジューラに登録されたログ

新しいプロセスが登録=マルウェアが実行されたログとなります。

課題3:攻撃者はWin7_64JP_01から別のマシンに侵入を試みています。侵入を試みた別の端末(ホスト名orIPアドレス)を特定してください。

Win7_64JP_01が侵入された後の話なので、気休め程度ですがマルウェアが実行された時間以降のログに絞ってみます。

50,000件のログがあって一つ一つ見るのは大変なので、((25[0-5]|2\d{2}|1\d{2}|[1-9]\d|\d).){3}(25[0-5]|2\d{2}|1\d{2}|[1-9]\d|\d)| Win7_64JP_\d{2}という正規表現に生ログのどこかが一致すれば表示してみます。

index=main
| regex raw="((25[0-5]|2\d{2}|1\d{2}|[1-9]\d|\d).){3}(25[0-5]|2\d{2}|1\d{2}|[1-9]\d|\d)|Win7_64JP\d{2}"

約3,000件に減りました。

Security (3,188件) とSysmon (8件) のログしか無いので、最初に少ないSysmonから見てみます。

すると、net useコマンドを使用している痕跡を発見しました。

server.exeという実行ファイルを送っているログもあります。

net useでWin7_64JP_01からWin7_64JP_03のルートドライブに接続し、serevr.exeというファイルを配置したうえでLateral Movementを行おうとしていると思われます。

課題4:攻撃者はWin7_64JP_01に別のマシンから侵入しています。不正ログオン元のIPアドレスと使用されたアカウント名は何ですか?

侵入前のログを見てみましょう。

Win7_64JP_03へのLateral Movementと同様の手法を用いるのであれば、ファイル共有を介してファイルを配置してそうです。

以下のような簡単なSPLでログを絞ってみました。

index=main "win.exe"

すると、タスクスケジューラのログの前にファイル共有のログがありました。

中身を見てみると、あるIPアドレスからwin.exeの共有がされています。

「送信元IPアドレス」に記載されているIPアドレスが「不正ログオン元のIPアドレス」で、「 アカウント名」に記載されているアカウント名が「使用されたアカウント名」のようです。

課題5:Win7_64JP_01でPowerShellファイルが実行されたようです。このファイルは何を行うものですか?

PowerShellが実行されたようなので、PowerShellのログを見てみます。 ただ、参考になるようなログは何もありません。

PowerShellのログはPowerShellが実行されたというログは残りますが、どのような内容でPowerShellが実行されたかどうかというログは残りません。

なので、sysmonを見てみます。

以下のようなSPLでログをフィルターしてみました。

index=main source="Sysmon.csv" ".ps1"

8件しかないので全て見てみます。

すると、echoを駆使してz.ps1とs.ps1というPowerShell Scriptを作成していました。

上記のログからz.ps1はmz.exeを、s.ps1はserver.exeをhttp://anews-web.coからダウンロードし、C :\Intel\Logsに配置するScriptでした。

まとめ

Log Analysis TrainingをSplunk Enterpriseを活用して解いてみました。

今回は grepっぽいことしたいからExcelとかテキストエディタでCSV開きたくないという動機からSplunkを使用しましたが、ブラウザ1画面で様々なログを同時に見ることが出来、スムーズに調査出来ました。

また、今回のケースだとPowerShellのログは開始・終了くらいしかデフォルトでは取れませんし、net useの痕跡を残したEvent ID 5145等はデフォルトでは監査されません。

sysmonを動かしていたおかげでどのようなことがされたのか分かったり、EventID 5145の監査設定を施していたおかげでここまで調査が出来ました。 ログをどこまで取るのか、取らないのか、取りたいけど取れないログはどのような製品やプログラムを使って保管するかの検討をしなければならないと痛感しました。

企業やサービスによって、どのログをどれくらいの期間保持するのかは難しい問題ではありますが、取り組まなければなりません。

ご興味持たれた皆様もぜひLog Analysis Trainingを通じて、ログの分析とはどのようなことをするのか、どのようなログが攻撃を受けた際に吐かれるのかを見てみてください。

また、Splunkも500MB/1DayまではFreeで活用出来ます。ご興味があればぜひお試しください。