”理解のために”OpenCTIをRSSリーダーとして使ってみた話
はじめに
OpenCTIをRSSリーダーとして使ってみました。本来であればTIPとして、精一杯活用すべきところではあると思いますが、今回は「理解のため」ということでご容赦ください。
前回のブログではOpenCTIの使いかたをまとめたブログにしましたが、今回は私がどのようにOpenCTIを使ったかについて書いていこうと思います。
OpenCTI
OpenCTIとは、様々な脅威情報を溜め込み活用することができるプラットフォームです。よくインテリジェンスという言葉が出てきますが、ここでは様々な情報を集約・分析した結果アクション可能な情報となったものを指すことにします。
インテリジェンス同士の関連性がすぐに分かったり、検索ができたりって素敵なシステムだと思いませんか?それを実現できるのがOpenCTIです。
ライセンス的には、OpenCTIのCommunity EditionはApache2ライセンスなので、誰でも気軽に試すことができます。
情報は基本的にSTIX2というフレームワーク?形式?で表現されています。なので、他システムへの連携や比較的容易です。また、コネクターという機能を有していることから、情報のインポートやエクスポート、加工がPythonでパッとできてしまいます。
そんなOpenCTIにRSSのデータを読み込む機能が実装されたと見ました。OpenCTIを贅沢にも超高機能RSSリーダーとして使ったらいいのではということで準備がスタートします。
構築準備
考えたこと
まずは、使うに当たって次のようなことを考えました。
- RSSフィードとして設定するのはマルウェア関連の情報が多く配信されるものにする
- マルウェア関連の情報を集めよっかなと思ったので
- 自動で情報はパースされてほしい
- なんか人が介在することでタスクが増えるのも嫌なので、情報の信頼性を犠牲にしてでも勝手にやって欲しい
- あんまり管理したくない
- 管理したくない
- 楽したい
- 楽に色んな情報見たい
ほぼRSSリーダーとして使うため、手間がかかってしまうのであればもうRSSリーダーでいいのでは。ということになってしまいます。情報は収集しつつも、とにかく手間をかけずに勝手に情報収集するということを目標にします。
まあ個人なのでディスク容量などのリソース面はおいておきます。
構成検討
OpenCTIはDockerベースで構築することができるので、Dockerで構築しました。
RSSフィード
マルウェアやニュースサイトなどいくつかのフィードを選定しました。OpenCTIが読み込んでレポートとして保存してくれます。便利。
コネクター
公開されているコネクターで利用したものは次のものです。情報収集する系のコネクターを追加しました。APIキーとか設定せずとも情報が貰えそうなものだったので。
- opencti/connector-cisa-known-exploited-vulnerabilities:5.12.29
- opencti/connector-cyber-campaign-collection:5.12.29
- opencti/connector-import-external-reference:5.12.29
- opencti/connector-urlhaus:5.12.29
- opencti/connector-vxvault:5.12.29
- opencti/connector-cve:5.12.29
- opencti/connector-threatfox:5.12.29
- opencti/connector-urlhaus-recent-payloads:5.12.29
- opencti/connector-export-file-csv:5.12.29
- opencti/connector-mitre:5.12.29
- opencti/connector-import-file-stix:5.12.29
- opencti/connector-import-document:5.12.29
- opencti/connector-export-file-txt:5.12.29
- opencti/connector-abuse-ssl:5.12.29
- opencti/connector-disarm-framework:5.12.29
- opencti/connector-export-file-stix:5.12.29
- opencti/connector-malwarebazaar-recent-additions:5.12.29
- opencti/connector-tweetfeed:5.12.29
特に重要なのが、import-document
とimport-external-reference
です。
import-document
import-documentはレポートに添付されたファイルをパースしてOpenCTIに取り込むコネクターです。自動取り込みの設定もできるため、私はレポートにファイルが添付されたら取り込むように設定しています。
このコネクターのすごいところは、OpenCTIに蓄積されているツールなどの情報をもとにパースしてくれるところです。そうすることで他の情報との相関がより可視化されます。
import-external-reference
読んで時のごとく、external referenceをインポートしてくれます。情報元のサイトをPDFやマークダウンで持ってきてくれる機能です。
ただし、これはあくまでも外部参照として添付してくれるだけで、レポートには添付してくれません。なので、上記のimport-documentとは直接的に連携できない問題が発生したのです。
自作コネクターの開発
上記のコネクター問題を解決すべく、import-external-referenceで取得したページのPDFをレポートの添付ファイルとして乗せるように少し改造しました。
OpenCTIがRSSのデータを持ってくると同時に、自作コネクタにより記事をPDF化してOpenCTIに登録、import-documentによりパースされるという流れを作ることができました。
全体像
今まで登場してきたコンポーネントをまとめるとこのような構成図になります。
OpenCTIをベースにRSSから情報を取得し、自作コネクタを使って情報を持ってきて、import-document
を使ってOpenCTIに構造化したデータを保存するようになりました。
本来であれば、import-document
時にインポートする情報の手動精査を行えるようなオプションがあります。今回はなるべく楽をする。ということが目標の一つであったため、手動の手間を省き、自動でインポートさせました。
また、この構成図には出てきていませんが、上の方で紹介したコネクターも動いて情報を溜め込んでくれています。様々な情報が溜め込まれていることでノイズが出てくるのはしょうがないにせよプラットフォームとしてそれっぽくなるのではないでしょうか。
使ってみた
RSS設定
まずはRSSの設定です。とりあえずマルウェアに関連しそうなものを片っ端から設定します。
ニュースサイトやマルウェアの解析記事などを出してくれそうなところを登録したつもりです。今どきEDRベンダーがそのような詳細な記事を出していることに気が付きそれなりに登録することができました。
マルウェアの解析の記事から情報を抽出することで、マルウェアの動きがわかるプラットフォームになったら嬉しくないですか?
レポート
暫く待つとRSSのデータがレポートとして登録されます。RSS上の1行がOpenCTIのレポートの1行として登録されます。これだけ見ればRSSリーダーと動きとしてはそこまで変わらないです。
例えば、この記事が読み込まれていたので、詳細を見てみます。
RSSのXML内に含まれていた記事のURLや概要、タイトルなどをそれぞれ当てはめてくれています。逆に言えばそれだけです。
重要なのはここからです。
エンティティを確認すると、記事の中からもともとOpenCTIに蓄積していた情報を元にある程度パースしたものが確認できます。先程の一覧画面ではOpenCTIがRSS機能で一覧化させただけ、RSSの内容をパースしただけですが、import-documentによりエンティティが見えるようになっています。
人の手が介在していないため、パースの精度がどこまでかについてはよくわかりませんが、重要そうなデータは構造化されて保存されました。
ツール
マルウェアがツールを使うケースだと、これもできればパースされててほしい情報です。Cobalt Strikeの記事があるかで検索してみるといくつものレポートが出てきました。
それなりに上手くできているようです。
マルウェア
マルウェア自体の情報もできればパースできててほしい情報です。BlackCatに関連する情報がないかを探そうとしたときに、マルウェアページからBlackCatを押すことで関連する情報を確認できます。
レポートの中身の情報が構造化されて保存されているがゆえに検索性が良くなっていますね。
私が期待したのはもう少し細かい情報ですが、切り口がレポート単位になっているのでそれぞれのレポートを読まないと結局はわかりません。うまい可視化の方法があるかなどOpenCTIをもう少し使いこなす必要がありそうです。
課題
OpenCTIを高機能RSSリーダーとして使ってみましたが、いくつか課題があります
PDFデータをパースするときのデータはOpenCTIにあるデータしか使えない
当然未知の情報を自動的にパースすることはできません。何らかの方法でOpenCTI上のコールドデータ(マルウェアや攻撃手法などベースとなる情報)を最新化し続けてやる必要があります。
これはアナリストのような人間がメンテナスしてやることで保たれる領域ではありますが、私は楽をしたいのでそこまではやりたくありません。
何らかの情報ソースなどから自動的に情報をアップデートするなどの方法を考えなければなりません。
情報の粒度が微妙
目標はマルウェアの情報を集めることですが、もう少し解像度が上がってほしいなと思いました。各レポートがレポートという単位で区切られてしまっているため、思ったよりRSSリーダー感が出てしまっています。
マルウェアをプロセスや悪用するツール、ファイルシステム上にのこる痕跡など、外形的な部分からまとめたいですが、その領域には至っていません。
少しググってみると、Filigranブログで少し言及がありました。もしかしたらやりようがあるかもしれません。
まとめ
OpenCTIをRSSリーダーとして使ってみましたがある程度使えることがわかりました。ただし、いくつかの課題もあることから今後TIPとして使っていくために少しずつ実装を行う必要があります。
自動化と人の作業の組み合わせの中で一番合理的で楽なものはなんか、というものを探していく必要があると感じています。今どきChatGPTのような生成AIが多少のタスクであればこなしてくれるのでそことの連携も効率化の中では重要です。
もちろん仕事ではないので趣味の範囲で頑張ります🤣