SIGMAルールから Splunkルールに変換する

SIGMAルールとは、Splunk など製品固有の言語(SPLなど)で書かれた検知ルールではなく、より汎用的?に記載された検知ルールのようです。

したがって、SIGMAルールがあれば、そこから Splunk や Sentinelなどいろいろなベンダーの SIEM で利用できる検知ルールが作成できます。

ちなみに SIGMAルールは以下のGITHUBのサイトなどに置かれています。

GITHUB
https://github.com/SigmaHQ/sigma/tree/master
https://github.com/NVISOsecurity/sigma-public

なお、SIGMAルールから各SIEM固有の検知ルールを生成する方法としては、 Webサイトのサービスを利用する方法とコマンドラインの2通りがありそうです。

WebでのSIGMAルール → 各SIEM向けルール変換

Webサイトとしては、以下のUNCODER.IOが有名のようです。

UNCODER.IO
https://uncoder.io/

以下が実際の画面ですが、変換先を見ると Splunk, Sentinel, QRader, XSIAMと有名どころのSIEMへの変換が可能なようです。

UNCODER.IOサイト

そして実際に Splunkの SPLに変換してみたのがこちらです。変換後はシンプル&見慣れた表現なので少しわかりやすいですね。

UNCODER.IOサイト

コマンドでのSIGMAルール → 各SIEM向けルール変換

コマンドとしては sigmatools というものがあるようで、以下のコマンドで簡単にインストールできます。

% pip3 install sigmatools

そして、UNCODER.IOで変換したものと同じSIGMAルールを sigmac コマンドでも変換してみた結果がこちらです。

% vi tmp/proxy_susp_flash_download_loc.yml
% sigmac -t splunk -c splunk-windows tmp/proxy_susp_flash_download_loc.yml
(((c-uri="*/flash_install.php*" OR c-uri="*/install_flash_player.exe") NOT ((cs-host="*.adobe.com"))))

-t の引数で変換先の SIEM として Splunk を指定しています。

Webで変換したものと大体一緒ですが、なぜか先頭に “source=”が付いていませんね。引数が足りないのかな?

<参考サイト>
・Sigmaルールのすすめ(Qiita)(https://qiita.com/sec-chick/items/4416bff231d7a55da75a)
・SIEMクエリ変換ツール「Sigma」を使ってみた(DeveloppersIO)(https://dev.classmethod.jp/articles/sigma-siem-transition-tool/)
・SIEMシステム用シグネチャフォーマット「Sigma」とSigmaルールの変換ツール「Uncoder.io」のご紹介(NEC)(https://jpn.nec.com/cybersecurity/blog/221014/index.html)

DeTT&CTを使って指定したログソースでMITER ATT&CKのどのTTPsが検知できる可能性があるのか確認してみた

前回、DeTT&CTをインストールしてみました。

http://k2-ornata.com/dettck_install

そこで今回は、 DeTT&CTを使うと SIEMで保有しているログソースで、MITER ATT&CKのどのTTPsを検知できる(可能性がある)か確認できるようなので、試してみることにしました。

YAMLファイルを作成する

とりあず Zscalerのログがある場合を想定し、試してみました。

DeTT&CTの画面の左ペインにある DATA SOURCESをクリックすると以下のような画面がでるので、必要な項目を入力していきます。

DeTT&CT
①「New File」を選択
②「Name」を適当に入力
③「Add Data Source」をクリック
④「Data Source」のカテゴリを選択
⑤ Data Sourceの入手状況などを適当に入力
⑥「Save YAML file」を押して、Downloadsディレクトリのファイルを保存

この操作によりDownloadsディレクトリの配下に、「data-sources-new.yaml」というファイルが生成されます。

なお、上図の①〜⑤を順番に行っていけばいいのですが、④のカテゴリを何にすればいいのかが一番悩むところだと思います。

そこで、④を決める際に以下のコマンドを打って、そもそもどんな Data Souceカテゴリがあるのか確認します。

% python dettect.py generic -ds
Count Data Source Platform(s)
-------------------------------------------------------------------------
280 Command Execution Containers, Linux, Network, Windows, macOS
247 Process Creation Linux, Windows, macOS
108 File Modification Linux, Network, Windows, macOS
102 File Creation Linux, Network, Windows, macOS
99 OS API Execution Linux, Windows, macOS
94 Network Traffic Flow IaaS, Linux, Windows, macOS
85 Network Traffic Content IaaS, Linux, Windows, macOS
83 Application Log Content Google Workspace, IaaS, Linux, Office 365, SaaS, Windows, macOS
67 Windows Registry Key Modification Windows
61 Network Connection Creation IaaS, Linux, Windows, macOS
55 Module Load Linux, Windows, macOS
49 File Access Linux, Network, Windows, macOS
48 Web [DeTT&CT data source] Windows, macOS, Linux, IaaS, Office 365, Google Workspace, SaaS,
Network, Containers
47 File Metadata Linux, Network, Windows, macOS
39 Logon Session Creation Azure AD, Google Workspace, IaaS, Linux, Office 365, SaaS, Windows,
macOS
31 Script Execution Windows
・・・

今回、Zscalerは「Web [DeTT&CT data source]」に該当するとおもわれたので、これを選択しています。

この辺については、以下のURLが参考になるのではないかと思われます。

DeTT&CT data sources
(https://github.com/rabobank-cdc/DeTTECT/wiki/DeTT&CT-data-sources#web)

また、以下のサンプルでは、Zscaler のData sourceが Web [DeTT&CT data source]に設定されています。

DeTTECT
(https://github.com/rabobank-cdc/DeTTECT/blob/master/sample-data/data-sources-endpoints.yaml)

YAMLをファイル JSONファイルに変換する

MITER ATT&CK Navigator にDeTT&CTで作成した情報を取り込むには、JSONファイルに変換する必要があるので、以下のコマンドを実行します。

前述の通り Downloadsディレクトリの配下に、「data-sources-new.yaml」というファイルが生成されますので、ここから JSONファイルを生成するには以下のようにコマンドを実行します。

% python dettect.py ds -fd /Users/(ディレクトリ名)/Downloads/data-sources-new.yaml -l

すると、DeTT&CTをインストールしたディレクトリDeTTECTの配下の tmp フォルダに jsonファイル(data_sources_example.json)が作成されます。

MITER ATT&CK Navigatorにインポートしマッピングする

MITER ATT&CK Navigatorトップページの「Open Existing Layer」から「Upload from local」を選択し、先ほど YAMLから変換して生成した「data_sources_example.json」ファイルを取り込みます。

MITER ATT&CK Navigator

すると、以下のとおり Zscalerのログで検知できる可能性のある TTPSが色塗り(下図の紫部分)されて表示されます。

MITER ATT&CK Navigator

MITRE ATT&CKの補助ツール DeTT&CTをインストール&起動してみた

Splunk にていろいろなログソースをつかった検知ルールをつくりたいと考えていたところ、DeTT&CTというツールを見つけたのでインストールしてみた。

まだはっきりと理解していませんが、各ログソースから MITRE ATT&CK のどの TTPs に該当する検知ができるかマッピングする際に利用できるツールではないかと考えています。

1.インストール

インストールは意外と簡単で、Macのコンソールからおもむろに以下のコマンド(太字部分)を打ち込んでいくだけで大丈夫です。

% git clone https://github.com/rabobank-cdc/DeTTECT.git
% cd DeTTECT
DeTTECT % cat requirements.txt
DeTTECT % pip install -r requirements.txt

2.起動

インストールが終わったら DeTT&CTを起動します。
起動は、DeTTECTディレクトリ配下にある detteck.py をつかって以下のコマンドを実行するだけです。

DeTTECT % python dettect.py editor
Editor started at port 8080
Opening webbrowser: http://localhost:8080/

実行すると自動的にブラウザが起動し、以下の画面が表示されます。

ScreenshotDeTT&CT起動直後

<参考サイト>

・How to Download DeTT&CT Editor For MITRE ATT&ACK Techniques(https://systemweakness.com/how-to-download-dett-ct-editor-for-mitre-att-ack-techniques-dd41b21ebcfe)
・MITRE Practical Use Cases(Youtube、https://www.youtube.com/watch?v=1zgpTR6D3M8&list=LL&index=2&t=168s)
・MITRE DeTTECT – Data Source Visibility and Mapping(Youtube、https://www.youtube.com/watch?v=EXnutTLKS5o)

スマホの機種変更をしたので Microsoft Authenticator の移行をしてみた

最近スマホの機種変更をしましたが、そのせいでMicrosoft社等のログインの際に2段階認証でつかっていた Authenticator が新しいスマホで使えなくなっていたので、再セットアップしてみました。

1.マイサインインにアクセス

まず、以下のサイトに記載されているマイクロソフト社のマイサインインのページにアクセスします。

スマホを替える時は、Microsoft Authenticator の移行を忘れないでください!(Microsoft)
https://jpazureid.github.io/blog/azure-active-directory/move-authenticator-to-new-phone/

すると以下のようなページが表示されます。

Microsoft My Sign-Ins

2.新しいサインイン方法の追加

上記ページから「+Add sign-in method」をクリックします。
すると「Add a method」というポップアップがでるので、そのプルダウンの中から「Authenticator app」を選択します。(※ここ重要!)

Microsoft My Sign-Ins
※ここがポイントで、間違って Phone をセットアップすると、SMS でのワンタイムパスワード通知設定しかできません。

3.Authentiatior で QRコード読み取り

上の画面で「Authenticator app」を選択し「Add」ボタンを押すと以下のポップアップがでてきますので、ここは「Next」ボタンを押します。

※もしまだ新しいスマホにAuthenticatorをインストールしてなければ、このタイミングでインストールしておきます。

Microsoft My Sign-Ins

次に以下のポップアップが表示されますので、ここも「Next」ボタンを押します。

Microsoft My Sign-Ins

すると、以下の通り QRコードが表示されますので、新しいスマホにインストールされている Authenticator で読み取ります。

Microsoft My Sign-Ins

QRコードを読み取った後、「Next」ボタンを押すと以下の画面が表示されますので、スマホから画面の下部に表示された2桁の番号を選択(or 入力)します。

Microsoft My Sign-Ins

スマホで2桁の番号を入力(or 選択)後、しばらくすると以下の通り成功の画面がでますので「Next」ボタンを押します。

Microsoft My Sign-Ins

4.新しいAuthenticator の追加確認

上記が完了すると、Authenticator に新しいアカウントが追加され、マイサインインのページにも赤枠の通り、新しいAuthenticatorが追加されているはずです。

Microsoft My Sign-Ins

新しいスマホ上のAuthenticatorをつかって Microsoft社などのサイトにログインできることが確認できたら、古いスマホのAuthenticatorはマイサインインから消しておきましょう。

Virus Totalのsearch APIを使ってURLのカテゴリ情報を検索してみた

Virus TotalのWebサイトで URL を調査すると、こんな感じで「Details」タブにそのURLのカテゴリ情報が表示されます。

Virus Totalサイト

この情報を、Virus Totalから提供されている API を使って取得できないかと思い調べていたところ、以下のAPIで取得できることがわかりました。

api/v3/search?query=

curl --request GET \
  --url 'https://www.virustotal.com/api/v3/search?query=<検索したいURL>' \
  --header 'x-apikey: <自分のAPIキー>'

試しに1つこのAPIを使ってURLを調べてみたところ、実行結果は以下の通りとなりました。

結果の最初の方にCluster25からのレポートが記載されており、MIRAI のボットネットで利用されていることがわかります。

Virus Total – search API 実行結果1

また結果の最後の方を見ると、Sophosなど各社がこのURLのカテゴリをどう判定しているかを確認することが可能です。

Virus Total – search API実行結果2

このAPIを使えば、セキュリティ調査の効率化につながりそうです。

MISP の効果的な利用方法2:インシデント調査で集めたIoCが、外部から収集したIoCと一致していないか確認する

MISP には複数のイベントでIoCが一致していないかチェックする機能があります。

それをうまく利用すれば、インシデント調査で収集したIoCが外部から収集したIoCと一致していないか、また、外部から新たに収集したIoCが、過去のインシデント調査した際のIoCと一致していないかを確認することが可能です。

1.インシデント対応で抽出したIoCの登録

以下の通り、インシデント対応で抽出したIoCを「Add Event」から登録します。

なお、インシデント対応で抽出したIoCを登録する際はイベント名を「SOC-Insident 001」などとするとわかりやすいと思います。

MISP – Add Event

上記画面で「Submit」後に、下図の赤枠で囲った部分にあるアイコン(populate using the Freetext Import tool)をクリックします。

MISP – using Freetext Import tool

すると以下のようなFreetext Import Tool のポップアップが表示されるので、インシデント対応の中で収集したIoCをペーストし、「Submit」します。

Freetext Import tool

このツールはとても優秀で、IoC 以外の情報もまとめて放り込んでも、綺麗にIoCだけ抽出し、以下の通りピックアップしてくれます。

MISP – Freetext Import Results

Freetext での取り込み結果を確認し、問題なければ「Submit attributes」ボタンを押します。

2.IoC提供元のFeedとの関連を確認

インシデント調査で収集したIoCの登録が完了すると、すでに登録されているイベントのIoCと重複していないか、赤枠の通り表示してくれます。

MISP – IoC list

また重複している場合は、「+Correlation Graph」を選択することで、重複しているイベントとの相関図を以下のとおり表示してくれます。

MISP – correlation graph

3.新しいFeedを取り込んだときの既存インシデントとの重複確認にも

なお、標的型攻撃などの場合には、インシデント調査で抽出したIoCが各Feed提供元のIoCリストにはまだ登録されていない、といったこともままあると思います。

したがって、新しくFeed提供元からIoCを取得した際に、そのIoCがすでにインシデント対応で抽出していたIoCと一致していないか確認する、といった使い方も可能です。

MISP – IoC list

ちなみに、他のイベントとIoCが重なった数はイベントリストの「Corr」カラムに記載されていますので、探しやすいと思います。

MISP – Events

MISP の効果的な利用方法1:IoC のFeedの取り込み元を増やす

MISP をインストールした初期状態だと、以下の2つのIoC Feed取得元しか登録されていません。

MISP – Sync Actions – Feeds

そこで、このFeed元を増やす方法を確認しましたので、ここに記録しておきます。

1.Feed元が書かれたJSONファイルを取得

以下のGitHubサイトにFeed元がたくさんかかれたJSONファイルがあるので、その内容をコピーします。

GitHub - MISP/app/files/feed-metadata/defaults.json
https://github.com/MISP/MISP/blob/2.4/app/files/feed-metadata/defaults.json

2.JSONでFeed元の情報を取り込む

1.でコピーしたFeed元の情報を取り込む為、上のFeeds画面の左ペインから「Import Feeds from JSON」を選択します。

そして先ほどコピーしたJSONを以下のとおりペーストし「ADD」ボタンを押します。

MISP – Import Feeds from JSON

すると以下の通りFeed元が67件読み込まれました。

MISP – Sync Actions – Feeds

3.Feed元からのデータの取り込み

あとは、Feed元リストの左にあるチェックからFeedを取り込みたい提供元を選択後、上部にある「Fetch and store all feed data」をクリックすれば取り込まれます。

なお、取り込みの状況は「Administration」-「Jobs」から以下の通り確認可能です。

MISP – Sync Actions – Feeds

4.Feed元から定期的に取り込むには

「Administration」-「Scheduled Tasks」で次の取り込み時間を指定することもできるようですが、毎回設定したいといけないように見えます。

そこで、cronjob と MISPのAPIを使った定期的なFeed元からの取り込み方法が以下のサイトに記載されていますので、興味のある方は参照してみると良いと思います。

Part 10. MISP Threat Intel(SOCFortress)
https://socfortress.medium.com/part-10-misp-threat-intel-68131b18f719

OpenCTIのコンソールを使ってみたら、アナリスト向けの情報がまとめられた画面だった

先日OpenCTIとMISPを連携させてみました。

その後、IoCデータが溜まってきているようなので、OpenCTIの使い勝手を少し確認してみましたので、その様子を記録しておきます。

1.トップ画面

内部でElasticを使っているせいなのか、全般的にとてもいかした画面で、SOCの大画面に投影しても映えそうです。

情報としては、集まってきているIoCの種類や数、そしてIoCに関連する攻撃グループの情報が表示されています。

OpenCTIコンソール – トップ画面

2.攻撃グループの情報

こちらは上の画面の攻撃グループのグラフから、Turlaを選択した時の画面です。

この攻撃グループの概要やIoC提供者の情報が表示されています。

OpenCTIコンソール – 攻撃グループ情報

3.攻撃グループが保有するC2情報など

上の画像からトップメニューの「knowledge」を選択すると、この攻撃グループが保有するC2サイトなどの武器情報が表示されます。

表示がタイムラインになっていて、下にスクロールするほど新しい情報になるようです。

OpenCTIコンソール – 保有武器情報

4.IoCリスト

上の画像からトップメニューの「Indicators」を選択すると、その攻撃グループに関連するIoCもリストで確認できます。

OpenCTIコンソール – IoCリスト

5.攻撃グループの一覧

また、攻撃グループの一覧をパネル形式で確認することも可能です。

OpenCTIコンソール – 攻撃グループ一覧

Splunk のMISP Addon(MISP42)を使ってMISPの大量データの中から指定したIoCを検索してみた

前回、MISPのAddon(MISP42)をSplunkにインストールし、イベントIDでMISPの検索を行ってみました。

http://k2-ornata.com/misp-splunk_rest-api_ioc_display/

しかしながら実際のインシデント調査では、調査の中で抽出したIoCがMISPに登録されていないか確認することが多いのではないかと思います。

そこで今回は、md5 や 通信先のIPアドレスをキーにMISPのデータを検索する方法を確認してみました。

1.MD5を検索

MISP custom command のプルダウンメニューから「mispsearch」を選択すると、IoCのタイプを指定してMISP内のデータを検索することができます。

Splunk – misp42

下の画面は、md5を指定してMISPを検索しているものになり、各パラメタについては

misp_instance:misp_instance01
field:md5
includeEventTags:True
Paste your sample query here:| makeresults | eval md5="61e3571b8d9b2e9ccfadc3dde10fb6e1"

と設定しています。

Splunk – MISP42 Addon

またこの検索結果の下部から以下の画面の通り「サーチで開く」を選択すると、SPLでのサーチ文を確認することができます。

Splunk – MISP42 Addon

なお、この時のサーチ文は以下の通りとなっていました。

| makeresults | eval md5="61e3571b8d9b2e9ccfadc3dde10fb6e1" | search md5=61e3571b8d9b2e9ccfadc3dde10fb6e1 | mispsearch misp_instance=misp_instance01 field=md5   includeEventTags="true"

念のため、検索で表示された misp_event_id : 1057 をMISPのコンソールでも確認したところ、下の画面の通り、id:1057に同じ md5が含まれていました。

MISPコンソール

2.送信先IPアドレスで検索

同じ要領で、送信先IPアドレスでも検索が行えます。

以下は送信先「37.120.170[.]231」に対するSPLでの検索例です。(このアドレスにアクセスしないように!)

| makeresults | eval ip-dst="37.120.170.231" | mispsearch misp_instance=misp_instance01 field=ip-dst  includeEventTags="true" includeEventUuid="false" to_ids="false"

3.コメントで検索

以下はMISPの「Comment」にEmotetと書かれているイベントを検索している例です。

| makeresults | eval misp_comment="Emotet" | mispsearch misp_instance=misp_instance01 field=misp_comment   includeEventTags="true" includeEventUuid="false" to_ids="false"

まとめ

Splunkにログを集約している企業などでは、同じSplunkコンソールからMISPのIoCを検索できるようになるので便利かもしれませんね。

OpenCTIとVirusTotal、Shodanを連携させてみた

前回、OpenCTIを構築し、MISPと連携するところまで実施しました。

http://k2-ornata.com/opencti_misp_connection/

そこで今回はさらに、VirusTotalとShodanを連携させてみて、OpenCTIから確認できる情報がどうかわるか確認してみました。

1.VirusTotalコネクタのインストール

MISPの時と同様に GitHubの以下のサイトから VirusTotalのdocker-compose.yml をコピーし、OpenCTIのdocker-compose.ymlに埋め込みます。

OpenCTI-Platform /connectors
https://github.com/OpenCTI-Platform/connectors/tree/master/internal-enrichment/virustotal

そして以下のコマンドを実行します。

 docker-compose up -d --build

すると以下の通り既存のコネクタを含めたアップデートとインストールが行われます。

docker-composeの更新

このあとOpenCTIのコンソールを見ると、VirusTotalが追加されていることが確認できました。

OpenCTIコンソール

shodanのコネクタについても同様の手順で行います。

2.インディケータのエンリッチメント

VirusTotalとShodanをインストールしたら、IoCを表示する画面の右端になる「エンリッチメント」のボタンを押してみました。

OpenCTIコンソール

すると右側からウィンドウがせり出してきて、VirusTotal とShodanの連携情報が表示されるようになっていました。(IoCによって出たり出なかったりするようですが。)

OpenCTIコンソール

しかしながら、それ以外の変化が見つけられなかったので、あとでもう少し調べてみようと思っています。

また今後は、cve や Miter ATT&CK とも連携させて、どんな情報が得られるようになるのか確認したいと思っています。

<参考情報>

以下のYoutubeでOpenCTIの操作方法が説明されていますので、OpenCTIでざっくりどんなことができるか知りたい人は参考になると思います。

Introduction to the OpenCTI platform(Filigran)