アンチウイルスソフトウェアの脆弱性
市場に出回っているアンチウイルスソフトウェアの脆弱性についての研究発表のスライド資料が公開されている。
アンチウイルスソフトウェアは、セキュリティ向上のために重要だという意見があるが、このスライド著者は疑問を投げかけている。そもそも、ソフトウェアの追加、攻撃できる箇所が増えるということだ。アンチウイルスソフトウェアは果たしてセキュアに作られているのか。
特に、多くのアンチウイルスソフトウェアは、カーネルドライバーを使ったりしている。もし脆弱性があればとんでもないことだ。
アンチウイルスソフトウェアの攻撃手段としては、細工されたファイルフォーマットをスキャンさせる事が大半だ。アンチウイルスソフトウェアは、様々なフォーマットのファイルをパースする必要がある。もし、そのパーサーにバッファーオーバーフローなどの不具合があれば任意のコードを実行させることができるし、パースに時間がかかりすぎれば、DOS攻撃に使える。
傑作なのは、既存のほとんどのアンチウイルスソフトウェアが、10年以上前の古臭い手法である、ゼロパディングされた巨大なファイルに展開される圧縮ファイルを現実的な時間で処理できずにリソースを浪費するということだ。
さて、アンチウイルスソフトウェア自体のセキュリティはどうかというと、これまた悲惨だ。
多くのアンチウイルスソフトウェアは、アップデートに素のHTTPを使い、しかもアップデートファイルは署名されていない。信じられない。
多くのアンチウイルスソフトウェアは、ASLRを無効にしている。これは、ヒューリスティックな検証をするために、ファイルをエミュレーター上で実行して挙動を確認するために、ASLRが邪魔になるからだ。問題は、一部のアンチウイルスソフトウェアは、システムのすべてのプロセスにASLRが無効化されたDLLを注入する。セキュアであるべきソフトウェアのセキュリティが聞いて呆れる。
多くのアンチウイルスソフトウェアは、ファイルのパースやネットワークパケットの検証に、エミュレーターやVMどころか、基本的なサンドボックスすら設けておらず、検証がroot権限で行われている。root権限が必要なのはネットワークパケットのキャプチャだけであり、そのデータの検証は、もっと権限の低いプロセスで行うべきである。
また、この研究者は、昔のコードを削除するべきであると主張している。MS-DOS時代のマルウェアや、もはや誰も使っていないファイルフォーマット用のチェックは、現代においては不必要であるし、長年誰も触っていない昔のコードには、脆弱性のある可能性が高い。アンチウイルスソフトウェア自体に脆弱性があるのと、大昔のもはやほとんど問題にならないマルウェアを検出できるのと、どちらがいいというのか。
筆者は、もうアンチウイルスソフトウェアの時代ではないと思っている。