フリーツールを使って、Follina (CVE-2022-30190) の悪用を狙う文書型マルウェアから URL を抽出します。
・本資料はあるコミュニティでのライトニングトークで使用したものを、公開版として調整したものです ・技術的に不正確な箇所もあると思われます。ご了承ください ・本資料では本物のマルウェアを扱っています。本資料を参考にしたことにより何らかの不都合が発生しても、筆者は責任を取れません。ご了承ください
Free Toolsvs.Follina
View Slide
はじめに・本資料はあるコミュニティでのライトニングトークで使用したものを、公開版として調整したものです・技術的に不正確な箇所もあると思われます。ご了承ください・本資料では本物のマルウェアを扱っています。本資料を参考にしたことにより何らかの不都合が発生しても、筆者は責任を取れません。ご了承ください
Follina is 何
Follina とは・CVE-2022-30190・Microsoft サポート診断ツール (MSDT) の任意コード実行の脆弱性・修正前に実際の攻撃に使われていた、いわゆるゼロデイ脆弱性・呼び出し元のアプリケーション (主にMS Office) と同じ特権で任意のコードを実行可能・報告したのは日本の nao_sec (右図)※※ https://twitter.com/nao_sec/status/1530196847679401984
(参考) 名前の由来・Follina とはイタリア・ヴェネト州の自治体・最初の検体が参照していた (ファイル名?)数字「0438」を市街局番に持つ・修道院が有名らしい※ https://doublepulsar.com/follina-a-microsoft-office-code-execution-vulnerability-1a47fce5629e場所 (Gllgle Map) 公式ロゴ※
深刻度・NVD の評価は Base Score 7.8CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H・AV: L と UI: R がスコアを下げており、一見さほどでもなさそう・しかし、攻撃者はメールなどを通じてユーザの 手元に悪意のあるファイルを送り込めるし、請求書など正規の文書を装ってユーザに開かせることも可能・よって CVSS Base Score での評価以上に実態は危険
悪 用・Recorded Future によれば、2022年上半期に2番目に悪用された脆弱性(1番目は Log4Shell)※ https://www.recordedfuture.com/h1-2022-malware-and-vulnerability-trends-report
maldoc・攻撃者は MSDT を呼び出す悪意のある文書ファイル (maldoc) をユーザに配送し、開かせる・Follina を悪用して実行する「任意のコード」はインターネットから取得する(直接 maldoc に埋め込むこともできるかもしれないが)・その取得先がわかれば、対応・調査の助けになる・ここでは、 maldoc からコードを取得する URL を得ることを目的に調査する
実験台 #1
実験台 #1 の概要・SHA-256:4a24048f81afbe9fb62e7a6a49adbd1faf41f266b5f9feecdceb567aec096784・ファイル形式は DOCX (Word 2007+)・nao_sec が最初に報告した検体
OOXML の基礎知識・Office Open XML・MS Word/Excel/PowerPoint などの標準ファイル形式・MS Office 2007 以降で採用(2003 までの標準形式は OLE で、まったく異なる)・XML で記述された文書やデータを ZIP 形式で圧縮して1つにしたものつまり、ZIP ファイルとして解凍することで分解できる・VBA コードは普通に解凍しただけでは判読不可なので別途ツールが必要(ただし本スライドでは扱わない)
oletools・Office ファイルや RTF ファイルを分析するために作られたツール群・実態は Python スクリプトそのため対応する Python さえ動けば OS を問わない・FLARE VM、REMnux などマルウェア解析用のディストリビューションには標準搭載されている・oleid、olevba、oleobj など・どれも使い方はシンプルで、「(コマンド) (ファイル名)」で大抵動作する・公式サイト:https://www.decalage.info/python/oletoolsGitHub:https://github.com/decalage2/oletools
oleid・基礎情報を表示。その後の調査の方向性を探るのに最適・リスクごとにを色分けして表示してくれる・外部の何かを参照していることがわかる詳細な調査には oleobj を使えと言っている
oleobj・埋め込みオブジェクトを表示・URL を特定できたこれはファイルフォーマット由来のものではなく、不審な接続先の疑いが強い
CyberChef・CyberChef でも不審な URL を検出できる場合がある・OOXML ファイルは ZIP ファイルなので、「Unzip」で分解できる・その状態で「Extract URL」を使うと URL を抽出できる
CyberChef・大量の URL が出てくるが、この中には OOXML のファイルフォーマットに起因する、あって当たり前の URL も含まれている・それらを目視で無視して不審な URL を探すのは大変「Filter」で消去すれば簡単になる・「Invert Condition」にチェックを入れ、「Regex」に次を指定(¥ はバックスラッシュ。実際には改行は不要)purl¥.org|schemas¥.microsoft¥.com|schemas¥.openxmlformats¥.org|www¥.w3¥.org|
CyberChef・oleobj と同じ URL が得られた・毎回入力するのは面倒なので、この Recipe を保存しておくとよい・このように、CyberChef は簡易的なスキャナーとして使える
実験台 #2
実験台 #2 の概要・SHA-256:ca7e9c65fd2cec62110b50581529198c43b7982820a38c912baa81d0294b8126・ファイル形式は RTF
RTF の基礎知識・リッチテキストファイル・プレーンテキストの拡張形式で、フォントを変更したりレイアウトを整えたりできる・ファイル中に可読文字が多い (全部とは限らない)・なぜかマルウェアとして配布される際には拡張子が「.doc」のことが多い
oleid・RTF であることを確認・RTF は OLE・OOXML ファイルとはフォーマットが違うので同じツールでは分析できない専用ツールを使う必要がある
rtfobj・oleobj の RTF 版のようなツール・不審なオブジェクトと、それに含まれている URL を抽出できた
rtfdump・RTF ファイルを分析する多機能な Python スクリプト・同作者の「oledump」の rtf 版のようなもの・いろいろ使い方があるが、ここでは次のオプションを使う-O: 含まれているオブジェクトの概要を表示-s: 続けて数字を指定すると、その数字で表されるものをダンプする通常はストリーム番号だが、-O オプションと組み合わせると、表示されたオブジェクトの番号で指定できるようだ・GitHubhttps://github.com/DidierStevens/DidierStevensSuite
rtfdump・-O オプションを付けて実行すると、OLE オブジェクトが 2個含まれていることがわかる・-s オプションを付けてオブジェクトの内容を調べる
rtfdump・-O –s 1 として、オブジェクト 1 をダンプする・先頭 4バイト※の「D0CF11E0 (DOCFILE0)」は OLE であることを示す※ 実際のマジックナンバーは8バイト分。4バイトというのはあくまで人間が DOCFILE と読める分の長さ
rtfdump・末尾付近に不審な URL を発見・rtfobj で得られたのと同じもの
まとめ
まとめ・文書ファイルにはいくつかの形式がある (OOXML、OLE、RTF...)・悪用のしかたも一通りではない- VBA マクロ- ペイロードの直接埋め込み- 接続先が直接書いてある <- 今回のはこれ・これらのバリエーションが、文書型マルウェア解析への理解を難しくしている・適切なツールの使用によりすぐ解ける場合もあるひとつの方針にこだわらず試行錯誤してみることが大切