またしても悪用されちゃうOfficeの機能
MicrosoftのOfficeファイルのFollina脆弱性(CVE-2022-30190)が発見されて、結構大きな問題になっています。
これは、Officeファイルの中に埋め込まれた(攻撃者が用意した)不正なリンク先に、htmlドキュメントでMSDTを実行するように細工をしているものです。
さらに、MSDTから見つかったリモートコードの脆弱性をこの手口で実行させることで、不正なコマンド実行やマルウェア感染を企むことができる、というものです。
この方法については、「Follina脆弱性」や「CVE-2022-30190」でググれば、解説記事はいっぱいでてきますので、詳しくはそちらを読んだ方がいいでしょう(相変わらず投げやりなセキュリティブログ)。
さらに、Bleeping computerの記事では、同様のリンク先に、今度は攻撃者が用意したSMB共有フォルダをサーチ結果として表示する方法が紹介されていました。
こちらはリモートコードが実行できるというわけではないので、脆弱性ではなく仕様なんじゃないかとは思います。
ただし、メッセージをうまく偽装すれば、「ユーザを騙して」マルウェアを実行させて感染させるフィッシングに有効な手段なのではないか・・・ということになります。
いずれも、ドキュメントの中でユーザに表示されない箇所に不正なリンクを埋めておくと、自動的にアクセスしてしまうことが問題の根本原因です。
そもそも、リンク先を自動で読み込むこと自体は、OfficeのOLEだかの仕様だそうです。
利便性を高めるため、ネットワーク上に新しいものを置くことで機能更新できることを考えたため・・・のようなのですが。
これを悪用する手口は既に知られており、例えば Word の .docx は通常マクロを入れることができないのですが、この機能で .dotm を読み込むことで、結局マクロを含むことと同じことができてしまいます。
つまり、これらの手口で共通しているのは、「ファイルを開いたときに、Officeファイルに含まれる、通常の方法では見えないところにあるURLにアクセスするOfficeの機能を利用し、不正なURLにアクセスすることで攻撃をしかける」ということになります。
これは仕様であり、今後の攻撃でも、このURLを利用する仕組みが使われるんじゃないかと懸念しています。
そのURLって見えないの?
では、そのURLを見ることはできないのか?という話になります。
見えれば、不審なURLが無いかをチェックすることができますからね。
結論から言うと、通常のOfficeソフトで見ることはできません。
WordやExcelで新規作成し、1文字も入力していない状態で保存しても、それらのURLは含まれています。
では、どのようにすれば見れるか?というと、Offce 2007以降の .docx や .xlsx ファイルは、zipで圧縮されています。
このため、Officeファイルの拡張子を .zip にして展開すると、これらのURLが含まれたファイルを見ることができます。
展開されたファイルのうち、テキストエディタでいくつかのファイル(特に.xml)が読めることが確認できます。
さらに、この中の個々のファイルを見ていくと、テキストでURLがいくつか入っていることを確認できます。
こういったURLのうち、例えばファイルを開いた時にそのURLにアクセスし、その内容を反映したり実行したりするように設定されているものがあります。
この機能を利用し、攻撃者が用意したURLにアクセスさせ、そのアクセス先のファイルに脆弱性のあるプログラムをパラメータ付で実行させる、などといった細工をしているわけです。
このため、zipを解凍して見えるファイルの中からテキストのURLを見つけ出してチェックし、不審なURLがあればそれは不正なドキュメントだということが分かります。
よし、みんな、今日からOfficeファイルの拡張子をzipにして解凍し、見れるファイルを全部みて不審なURLを探すんだ!
できねえよ!!
時間はかかるわ、目ぇ疲れるわ、こんだけあれば見落としもするわ、で現実的じゃ無えわ。
「これじゃ無理だよ!!助けて!!サキエルもん!!」
と、の〇太君的な人に泣きつかれる未来までが見えました(語呂が悪すぎるんですがそれh)。
じゃあ、自動化しちまえ
そこはやはりIT技術者。
サボるために効率的に仕事をするためには、やはりテクニカルに美しく自動化したいわけですよ。
それなら、
「Officeファイルをzipファイルとして解凍し、中身からhttpをピックアップし、あまつさえ既知の問題ないURLを除去して残ったものだけ表示するツールを作ればいいんじゃね?」
ということになります。
そんなアナタのために!!
私が土日を潰して、酒を飲みながら作ったツールをGitに置いておきました!
(映画のガンダム「ククルスドアンの島」を観たいのを我慢してまで作ったんだぞ、少しは感謝しる!)
使用方法は機能が貧弱なのでとても簡単。
Releaseにおいてあるexeファイルをダウンロードし、コマンドプロンプトで実行するだけ。
また、ホワイトリストはとりあえず私が調べたものが置いてあるので、それを使えばOKのはず(足りなければ自分で足してくれwww)。
使い方は詳しくはGithubに書いてあるけど、コマンドプロンプトでexeの第1引数に検査したいファイル名(フルパスでも相対パスでも同一フォルダにおいてファイル名だけでも可)を指定。
同一フォルダに「whitelist.txt」があれば、第2引数の指定が無くてもそれをホワイトリストとして使用。
もし別のホワイトリストファイルを使いたければ、それを指定すればOK。
ホワイトリストで弾いた結果、何もデータが残らなければ特に何も出力せず終了、データが残った場合は、拡張子を「.suspicious.txt」としたファイルを出力。
「.suspicious.txt」が出力された場合、この中身のURLをチェックし、不審なものであればマルウェア確定、ということになります。
ツールの仕組みとしては、
- officeファイルをメモリ内でzip解凍
- 「http」の含まれる文字列をピックアップ
- ホワイトリストとマッチしたものを弾く
- データが残った場合は「.suspicious.txt」ファイルに出力
といった、至って単純なものです。
ツールのメリット・デメリット
このツールのメリットとしては、
- このツールでファイルが出力され、そのURLが不審だった場合、確実に黒だということが確認できる。
- チェックを効率的にできる。
- Officeファイルの仕様やzipの仕様の細部までを確認しているわけではないので、仕様の理解不足に伴うプログラムミスの可能性が残る。
- 喫緊の課題ということもあり、開発・リリースを急いだため、デバッグが十分ではない(ノリで書いたので、設計書もねーよw)。
- コードが、本人も呆れるレベルで汚い(開発から暫く離れているとはいえ、このセンスの無さよ・・・)。
このため、「使ってみて、改良を加えればそこそこ便利かもしれない」といったツールの土台くらいにはなるかな、と思っているところです。
さいごに
こういう時こそ、ハッカーさんボスケテwww
(私はファインモーション閣下の育成に戻・・・あ、寝なきゃ。明日から仕事じゃん・・・。)