公開:2021.04.26 10:00 | 更新: 2022.08.17 08:53
今日は、昨年のブログ記事異常ログ見聞録で紹介されていたLog Analysis Trainingを実際に見てみます。
ただし、提供されるログファイルの大半はCSVで構成されています(一部syslog形式もあります。)
syslog形式であれば基本的に1event= 1lineなので grepしやすいですが、CSVの列の中には改行がある場合があるためそのような方法が使えません。
列中に改行があるので、grepした際に邪魔なログも入りますし-Aや-Bというオプションもありますが行数も様々なのであまり使えません。
これではちょっとやりづらいのでこのCSVファイルをSplunk Enterpriseに取り込んで調査してみたいと思います。
今回はLog Analysis TrainingのHandson1をやってみます。
Handson1には以下の課題があります。
この5つの課題に答えていきます。
そして、ログ分析というかこのようなインシデントレスポンスは必ず何かしらのトリガーがあります。
アラートや役職員からの報告・相談等様々ですが、今回はWin7_64JP_01 (192.168.16.101) を使用しているユーザーから「ウイルス対策ソフトが怪しい。ファイルを駆除したようだが問題無いか確認してほしい。駆除したファイル名はwin.exe」という報告を基に調査をスタートします。
Splunkにログを取り込みました。だいぶ見やすくなっていると思います。
ログ自体は (取り込みの際に変なデータがSplunkに取り込まれていなければ) 69215件あります。
また、これらのログは2019年11月7日の15:00~18:00に発生したようです。
ちなみにWindowsの以下ログが含まれています。
この時点で感染要因は想像できそうですが、スルーして課題に取り組みます。
【課題】目次
最初は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の意味は以下となります。
6.に関しては別の方法でもいいのですが、重複排除してテーブルで見たいだけなのでこれを使いました。
6.を行わない状態だと214件ログがあり、別に見れない量ではないのですが、
6.を行うと重複を排除してくれて以下のようにすっきりします。
送信先を特定する必要があるので、DestinationIPAddressがマルウェアの送信先となります。
後々の調査のために参考になるかもしれないので、気付いたことをメモしておきましょう
次は動作開始時刻と実行方法です。
動作開始時刻は前の設問のログが15:54:04から発生していたので、これより前と推測できます。
時間帯を絞ってみます。
ログは25件となりました。
SPLは以下のように記述しました。
index=main "win.exe"
ログ量は少ないのでこれ以上SPLは書かないで一つ一つ見てみます。
要約すると192.168.16.109のファイル共有へアクセスをしていて、タスクスケジューラでタスクが作成されて、プロセスが作成されています。
なので、マルウェアの動作開始時刻はプロセスが作成された時間で、マルウェアの実行方法はタスクスケジューラに登録されて実行されたことが分かりました。
タスクスケジューラに登録されたログ
新しいプロセスが登録=マルウェアが実行されたログとなります。
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を行おうとしていると思われます。
侵入前のログを見てみましょう。
Win7_64JP_03へのLateral Movementと同様の手法を用いるのであれば、ファイル共有を介してファイルを配置してそうです。
以下のような簡単なSPLでログを絞ってみました。
index=main "win.exe"
すると、タスクスケジューラのログの前にファイル共有のログがありました。
中身を見てみると、あるIPアドレスからwin.exeの共有がされています。
「送信元IPアドレス」に記載されているIPアドレスが「不正ログオン元のIPアドレス」で、「 アカウント名」に記載されているアカウント名が「使用されたアカウント名」のようです。
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で活用出来ます。ご興味があればぜひお試しください。
セキュアイノベーションサービス紹介:Splunk
LOADING...