先日SplunkにインストールしたVirusTotal Addon(vt4splunk)の使い勝手を再確認してみました。
すると思いがけず、VirusTotalのスコアが6/88の通信が発生していたので詳細を確認してみました。
1.vt4splunkコマンドで通信先を評価
とりあえず SplunkのStreamで収集しているhttp ログとVirusTotalの評価を突き合わせてみました。
sourcetype=stream:http | vt4splunk ip=dest_ip | table _time,dest_ip, vt_detections,vt_total_engines,vt_reputation,vt_info
すると、VirusTotalのスコアが1/88の通信先への通信が発生している様子。
まあ、googleも2/88だったりするし(たしか)、そんなこともありますよね。
2.ダッシュボードを確認
そう思いながら vt4splunk のダッシュボードを見たところ、「Flaged IP Address」が11件発生しておりその中の一つは6/88のスコア。。。
そこで、リスト右端の「open」からVirusTotalの詳細な情報を確認。malicious や malware というワードが書かれているので、ちょっと不安に。。。
画面を下にスクロールして通信のログを確認。どうやらubuntsuのサイトにいっているらしい。VMでMISPを動かしていてそのOSがubuntsuなので、そいつがいっているのかも。
ちなみに11件という値をたたき出しているSPL文はこのようになっていました。うーん、むずい。。。
| inputlookup vt_ip_cache | search vt_detections > 0 | where "1" = "1" OR _first_seen_in_events >= relative_time(now(), "1") | join type=left vt_id [| inputlookup vt_ignore_cache | search vt_type=ip] | where isnull(vt_type) | stats count
そこでChatGPTにこのSPL文を解説していただきました。
以下、ChatGPTの解説です。
このSPL(Splunk Processing Language)クエリは、Splunkデータベース内の`vt_ip_cache`と`vt_ignore_cache`という2つのテーブルからデータを取得し、さまざまな操作を行っています。以下に各行の意味を説明します。 1. `inputlookup vt_ip_cache`: `vt_ip_cache`テーブルからデータを取得します。 2. `search vt_detections > 0`: `vt_detections`フィールドが0より大きい行を検索します。 3. `where "1" = "1" OR _first_seen_in_events >= relative_time(now(), "1")`: 条件式が常に真となるため、すべての行をフィルタリングします。また、`_first_seen_in_events`フィールドの値が現在の時刻から1つの時間単位以上前である場合にも行をフィルタリングします。 4. `join type=left vt_id [| inputlookup vt_ignore_cache | search vt_type=ip]`: `vt_ignore_cache`テーブルから`vt_type`フィールドが"ip"の行を取得し、`vt_id`フィールドを使用して`vt_ip_cache`テーブルと結合します。結合は左外部結合(Left Join)です。 5. `where isnull(vt_type)`: 結合した後、`vt_type`フィールドが存在しない(NULL)行のみをフィルタリングします。 6. `stats count`: 結果の行数をカウントします。 このクエリの目的は、`vt_ip_cache`テーブルから検出数が0より大きい行を取得し、一定の条件に基づいてデータをフィルタリングします。さらに、`vt_ignore_cache`テーブルとの結合を行い、`vt_type`フィールドが存在しない(NULL)行の数をカウントします。
コメントを残す