ひとりの独立系開発者が,Windows RTを実行しているMicrosoft Surfaceで,署名のないデスクトップアプリケーションを実行する方法を発見した。このエクスプロイトでは,もともとWindows 8に存在し,結果としてWinRTにも継承されているカーネルのバグを利用している。C.L.Rokr氏が発見したのは,"未署名のディスクトップアプリをWindows RT上で実行する"ことが可能な脆弱性だ。InfoQではいつものように,Rokr氏から研究の詳細に関して話を聞いた。
InfoQ: コンピュータに関するあなたの経歴について教えてください。
Rokr:
私はプロの組込みアプリケーション開発者です。リバースエンジニアリングにはずっと興味を持っていますが,REに関連したよい仕事を見つけたことはないですね。
InfoQ: 今回の調査とエクスプロイト開発には,どのくらいかかりましたか?
Rokr:
脆弱性があることは以前から知っていました。でも使い道がほとんどなかったのです。どういう脆弱性かと言うと,データセグメント内の任意のアドレスにある値の引き算が可能である,というものです。このページは読み取り専用なので,本来ならコードを変更することはできないのです。カーネルの中で,何か適当な場所を見つけるのに3週間ほどかかりました。それまでWindowsに関して,あまり注意深く調べたことがありませんでしたから。
InfoQ: このプロジェクトを行った動機は何だったのでしょう。デバイスのロックを解除してアプリケーションを自由に実行したかったのか,あるいは単なる好奇心だったのでしょうか?
Rokr:
新しいVisual StudioにARMターゲットがあることを知ってから,さっそくWin32アプリのサンプルをコンパイルしてみました。そしてSurfaceが届くのを心待ちにしていました。以前SurfaceチームがRedditでAMA(Ask Me Anything)セッションを行ったとき,彼らはWindows RTでは従来のアプリは動作しない,と明言していましたよね。でもそれはx86コードがARM上では動かないという,ごく当然のことを言っているのだとばかり思っていたのです。後になってコード署名に関する話を他で聞いたときにも,ローカルセキュリティポリシの一部としてMicrosoftが設定したものであって,ユーザが無効にできるものだと信じていました。手元に届いたSurfaceでサンプルを最初に試してみて,それが動かなったときの私の顔が想像できますか。まあ,当然なのですが。
InfoQ: あなたは "皮肉なことに,ある時点でWindowsカーネルに存在した脆弱性が,他の部分と一緒にARMに移植されたためにこれが可能になったのだ",と書いていますね。
Rokr:
おかしな話です。MicrosoftはWindows8とWindows RTを本当は別物にしたかったのですが,結果的にはその類似性のおかげで私の試みが成功したのですから。静的な解析はもちろん役に立ちますが,動作中のシステムをカーネルデバッガで調べることができれば,Surfaceにロジックアナライザを繋がなくても,もっと短時間で重要な部分すべてを正確に特定することができるのです(それから可能なのかどうか知りませんが,Tergra 3は最上位にRAMを配置した積層パッケージだと言う人もいます)。
InfoQ: そのような点を念頭に置いた場合,Windows 8でエクスプロイトを実行するのは難しいことなのでしょうか。
Rokr:
Windows 8の出荷時にも同じ制約があったとすれば,同じ手順で解除が可能だったはずです。実は今回の手順は,もともとWindows 8で開発したのです。MicrosoftがWindows RTに行ったものと同じ制限を,カーネルデバッガを使って試すことができたからです。そしてこの方法を見つけました。
InfoQ: 今回の件については,大した問題ではないという意見もありますが,Microsoftがこの問題を修正するのは簡単なのでしょうか。単なる "必須(must-have)" システムアップデートのリリースになりますか。
Rokr:
Microsoftは他の脆弱性と同じように修正するでしょうね。それはそれでよいのですが,Code Integrityを今後もオプションにしなければ,また新たな脆弱性が見つかることになるでしょう。私がやらなくても,他の誰かが見つけるはずです。
Rokr氏の成果に対するMicrosoftの次のような回答が,複数のニュースサイトで報告されている。
Microsoft:
指摘されているシナリオはセキュリティ上の脆弱性ではなく,Windows RTユーザに対する脅威にはなりません。説明のメカニズムを実行するには,システムにローカルアクセスできる環境,ローカル管理者権限,そしてデバッガが必要です。一般的なユーザが実行したり,合理的に利用できるものではありません。さらに,ユーザがWindows RTにアプリケーションをインストールする唯一の方法であるWindows Storeには,セキュリティ上の脅威をスキャンするメカニズムがあります。Storeから取得したアプリケーションは正当性が保証されていますから,安心して使用することができます。
今回の件を発見した人々の創意工夫と,それを文書化した努力に対しては敬意を表したいと思いますが,このアプローチが将来のリリースにおいても可能であるかについては,保証の限りではありません。