2007-06-20

危険なセキュリティソフトウェア

 http://blogs.technet.com/markrussinovich/archive/2007/06/19/1256677.aspx  たとえば、あるコンピュータにインストールされているWindowsに、二つのアカウントが設定されているとする。お互いに、相手から読み書きができないようなパーミッションを付けたファイルを持っている。ところで、一方のアカウントは、かなり頻繁に、あるソフトウェアを実行していると分かっている。もし、もう一方のアカウントから、そのソフトウェア(.exeファイル)を差し替えられれば、自分にとって秘密のファイルの読み書きができてしまう。  まあ、Windowsというのは、たいていの場合、ユーザが管理者であり、それほど問題にはならない。いくらVistaでマルチユーザーを歌おうとも、個人的には、これはそれほど問題にはならないかと思う。問題なのは、このようにセキュリティがずさんなことだ。  というのも、何もこれはファイルに限った話ではないからだ。他のカーネルオブジェクトが危険なのだ。たとえばミューテックスオブジェクトだ。あるセキュリティソフトウェアが、名前付きミューテックスオブジェクトを使ってスレッド、あるいはプロセス間の同期を取っていたとする。このセキュリティソフトウェアを無効にしたい、悪意あるプログラムは、単にそのミューテックスを開いて、自分で所有してしまえばいい。セキュリティソフトウェアは、いつまでたっても解放されないミューテックスオブジェクトを永遠に待ち続けることになるだろう。たったそれだけのことで、セキュリティソフトウェアを無効にできてしまうかもしれない。  また、セキュリティソフトウェアはその性質上、Local Systemで動作することもある。あるセキュリティソフトウェアは、Local Systemで動作させているプロセスと、他のプロセス(恐らくはユーザへのUIなどか)と共有メモリを使って通信している。何と皮肉なことに、この共有メモリのセキュリティが設定されていないのだ。つまりどのプロセスからでも、この共有メモリにアクセスすることができるのだ。マルウェアは、この共有メモリをいじってやれば、Local Systemで動作しているプロセスに何らかのメッセージを送ることができる。ひょっとしたら、自分の望み通りの動作をさせることができるかもしれない。これをセキュリティホールと言わずして何という。皮肉にも、セキュリティソフトウェアと名乗るプログラムに、これが非常に多いらしい。もちろん、他のプログラムも、それほど違いはなく、かなりいい加減なのだが。  Mark氏は、これは9x時代には、シングルユーザであることが当たり前だったから、このようになっているのだと推測している。時代は変わったから、そろそろプログラマも頭を切り替えなければいけないようだ。

No comments: