2017-05-10

マイクロソフトのWindowsに付属しているアンチマルウェアソフトウェアが最高にクソな件

マイクロソフトのWindowsに付属しているマイクロソフトが提供しているアンチマルウェアソフトウェアに脆弱性が発覚した。

1252 - MsMpEng: Remotely Exploitable Type Confusion in Windows 8, 8.1, 10, Windows Server, SCEP, Microsoft Security Essentials, and more. - project-zero - Monorail

脆弱性の発覚はよくあることだ。脆弱性というのは、大抵はバッファーのサイズチェック漏れなどの些細な間違いが原因となる。

今回のMSのアンチマルウェアの脆弱性も、根本的な原因としてはそのようなチェック漏れなのだが、起こるべくして起こったクソすぎる実装のせいで、そのような些細な間違いが実用的な脆弱性に発展してしまっている。そのようなチェック漏れが存在するだけでは実用的な脆弱性に発展しない。そのチェック漏れを悪用できるようなコード実行ができる状況が存在することで、実用的な脆弱性に発展する。

MSのアンチマルウェアソフトウェアには、NScriptというJavaScript風のインタープリターが入っている。これによってあるJavaScriptコードが既知の悪意あるソフトウェアのパターンに一致するかどうかを調べている。JavaScriptはいくらでも同等内容になるように変形可能なので、実際に実行しなければパターンに一致するかどうかわからない。したがってこのように実際に実行して挙動がパターンに一致するかどうか調べる仕組みが必要になる。

問題は、このインタープリターは極めて強い権限で実行され、サンドボックス化もされていない。これはセキュリティソフトウェアとして問題外の実装だ。任意の悪意ある可能性があるコードの挙動を実際に実行して調べるのに、不必要な権限の放棄や適切なサンドボックス化を行っていないのはありえない。

かつ、MSのアンチマルウェアソフトウェアはファイルシステムの変更を監視していて、ファイルシステムのどこに書き込まれようと、JavaScriptっぽいコードは全部、このNScriptインタープリターで実行して、パターン検出を行おうとする。これは任意のブラウザーなどのソフトウェアのキャッシュなどにも対応できるための実装だ。しかし、これによって、ファイルシステムにさえかきこめれば、どのような方法であっても脆弱性をつくコード実行が可能になる。

結果として、マイクロソフトのアンチマルウェアの脆弱性を悪用するには、悪意あるJavaScriptコードをメールで送る、Webブラウザーで閲覧させるなどの何らかの方法で、ファイルシステム上に書き出させればよい。ユーザーがメールを実際に閲覧するとかソフトウェアを実行するといった操作は必要がない。

あるJavaScriptコードが悪意あるものであるかどうかを実際に実行して調べるセキュリティ対策のソフトウェアが存在するせいで強い権限による任意のコード実行につながるというのは、極めて皮肉だ。

私が平生から主張しているように、アンチマルウェアソフトウェアというのは詐欺だ。使ってはならない。アンチマルウェアソフトウェアはセキュリティではない。世の中のすべてのアンチマルウェアソフトウェアは実装がクソだ。アンチマルウェアソフトウェアを使った人間

「追加のソフトウェアは追加のリスク」という古き良きシステム管理者の格言はなぜ失われてしまったのか。

No comments: