Secure coding は Microsoft からイノベーションを奪っているか?

Re: WPFでHLSLが使えることの持つ意味

id:tetsutalow せんせーのところより.

CPUの性能が伸びなくなってしまった今、GPUは当面の伸びしろとして期待されているわけですから、この動き自体は自然でしょう。ですが、一般的に言って、ネット越しに落ちてくるコードが高い計算能力を持つことは、それだけで凶器になり得ます。SilverlightのSandboxの細かい仕様をまだちゃんと調べていないので詳しいことは言えませんが、私の頭の中にはいくつかの、この技術を凶器として使うシナリオがあるので、その実現可能性をちゃんと調べないといけないなぁと思っています。そのことを忘れないうちにここに書いておきます・・・・他の専門家の方も、もしよろしければご検討願えませんか。

あー
Silverlight だとまだ当面 Shader は使えないんじゃないでしょうかね.というか SilverlightWPF を比べると,Silverlight は VM (CLR) もサブセットなら描画エンジン (WPF) もサブセットなことを先に書いた方がよいのか.今 (Silverlight 1.0) も次 (Silverlight 2.0) も,2D 描画を含めて GPU を全然使っていない,つまり完全ソフトウェア描画な状況です.

Windows® Presentation Foundation (WPF) は XAML で 3D をサポートできますが、Silverlight は既定では 2D しかサポートしません。これは、マシン内にどのようなグラフィック プロセッサ ユニット (GPU) ハードウェアが含まれているかを気にしなくて済む方が、ブラウザ間の互換性をずっと簡単に実現できるからです。もちろん、突き詰めて考えれば、コンピュータ画面上の 3D は目の錯覚にすぎません。どのような操作が行われているにしろ、結局、モニタ画面に表示されているのは通常の 2D 多角形の集まりです。独自のコードで 3D 操作を実行してこれらの多角形の座標を計算する手間をかけるならば、ハードウェア アクセラレータを使用しない 3D レンダリングも可能です。数十個のポリゴンに限定すれば、パフォーマンスも許容範囲内です (主観的には、フレームのパフォーマンスは Alpha から Beta への移行により向上しています)。

この記述では普及の問題が理由に挙げられていますが (Silverlight のポジションを考えればこれは非常に説得力がある),セキュリティリスク (もちろんこれは GPU サポートを後押ししない) の考慮がなかったかというとそうでもないんじゃないかなぁと.

DirectX Filter

少なくとも今現在,開発部門がブラウザアドインで GPUDirectX に依存させるコンポーネントをリリースしたいと考えたとしても,それに反対する部門なり視点は確実に Microsoft 社内にあるはずです.
たとえば以前の Internet Explorer には,DirectX Filter という仕組みがありましたが,これが Internet Explorer 7 で取り除かれた話でも.
DirectX Filter は DirectShow 派生技術です.DirectShow には Filter と呼ばれる reconfigurable なコンポーネントの仕組みがあります.そして画像に対するフィルタは,ピクセル配列を受け取ってピクセル配列を返す関数とみなすことができます.「なんだこれってブラウザが扱っている画像の変換に使えるじゃん,It's Generative Programming!」てな感じで導入されたのがいつだっけ? Internet Explorer 4 で Visual Filter が入って Internet Explorer 5.5 で DirectX Filter に拡張だったかな.まあそんな時代の,いかにも Microsoft らしい社内技術シナジーでした.
ただまあやっぱり CVE-2006-2383 のような問題は起きてますし (探せば他にもありそうな) ,案の定というか Internet Explorer 7 では取り除かれてましたとさ.これも取り除かれた直接の原因がセキュリティだったかどうかわかりませんが*1,その切り口から関係者に聞いてみると色々情報が出てくるんじゃないでしょうかね.

セキュリティの理由で取り除かれるコンポーネントたち

Windows Vista では,「Secure coding な時代以前に設計・開発された」という理由で取り除かれているコンポーネントがいくつかあります.私が情報に触れる機会の多い DirectX 系では,

Vista から取り除かれています*2

セキュリティの理由で DLL 化されるライブラリたち

他にも,セキュリティ上の理由という形で静的リンクから DLL 配布へ舵が切られ,アプリケーションの配布が困難になりつつあるという状況もあります.

  • Visual C++ の CRT (これは静的リンク版もまだ存在はしている)
  • D3DX (完全に DLL オンリーになってしまった)

これらについては,開発者サイドからは静的リンクを望む声が強いのですが,「セキュリティ上の理由」を盾に DLL 化が推し進められています.

Secure coding は楽しいか?

これは私が開発部門の人と話していて断片的に感じたことなので,その内容からだけで判断するのはかなり危険ですが,どうも今の Microsoft の製品開発スタイルというのは,セキュリティを非常に重視し,規約やツールでがちがちに縛られているという印象を受けます.いや良いことなんでしょうけど.ただ何というか,今ひとつ「発想と直感を信じて勢いに任せた製品開発」という雰囲気が伝わってこないんですな.
なので例えば,開発部門の人が国内イベントに来ていたら,「CodePlexMSDN Gallery,MSDN Blogs に載せるコードと,製品リポジトリにチェックインするコード,どっちが書いてて楽しいですか」みたいな質問で探りを入れてみたりすると色々面白い話が聞けるんじゃないでしょうか.

Secure coding は Microsoft からイノベーションを奪っているか?

確かに最近の Microsoft の製品は,昔に比べると大変セキュアになったと思います.製品設計時から開発・テストに至るまで,セキュリティを最優先した成果でしょう.その反面で,最近の Microsoft の製品からは,たとえばデスクトップをブラウザで置き換えようとか,そういった奇抜な製品が減ってきてしまっているのではないでしょうか.
実際,id:tetsutalow せんせーが懸念されているように,Flash Player 10 はまさに GPU をサポートするのですな*3.でも Microsoft がそれをやるとリスクが懸念されて,Adobe ならまあ Adobe だしですんでしまう.何かそう空気をみんなで読みあっているところがあんのかなと (Air が出てきた!).

Microsoft は Singularity に何を夢見るのか?

昨年某所で mkusunok さんが Singularity の紹介をされていて,そのときに「製品開発でセキュリティにかけているコストを下げたいという目的がある」と言われていたのが印象に残っています.というかそのときはぴんと来なかったのですが,その後 1 年ぐらいの会話の中で何となく分かってきた気がします.
もちろん,「セキュリティコストの低減」が Singularity チームの真意かどうかは分かりません.研究開発プロジェクトでは思い付く限りの応用は言っておくものでしょうから.ただ,実際問題として,開発プロセスでセキュリティにかけているコストを簡素化できるというのは,自己場が無視できないような巨大企業に所属しているプログラマたちにとって,本当に切実なところまで来ていたりするのかな,と思うところはあります.
XNA にしても,XNA チームのがんばりのおかげで,我々はコードは「みなしセキュアー」という扱いを得ることができて (サンドボックスが防いでくれる部分に関してはレビュー不要),コードレビューもなしにゲームを投稿できているわけです.これって本当はすごいことなのかもしれませんね.
「お前らとりあえず作ってて面白いと思ったコードに専念して良いよ」と.
(2008年7月31日追記)
現在およびこれまでにリリースされてきた XNA 実装に関して補足.
Xbox 360 上で実行する XNA ゲームの安全性は,XNA ゲームをユーザモードに隔離することで得られています.XNA CLR はコードの検証可能性をチェックしておらず,XNA CLR 自体はサンドボックスとして実効性を持ちません.詳細な実行モードについては詳しくは下記資料参考のこと.



Writing Secure Code第2版〈上〉プログラマのためのセキュリティ対策テクニック (マイクロソフト公式解説書)

Writing Secure Code第2版〈上〉プログラマのためのセキュリティ対策テクニック (マイクロソフト公式解説書)

  • 作者: マイケルハワード,デイビッドルブラン,Michael Howard,David LeBlanc,トップスタジオ
  • 出版社/メーカー: 日経BPソフトプレス
  • 発売日: 2004/12
  • メディア: 単行本
  • 購入: 2人 クリック: 10回
  • この商品を含むブログ (21件) を見る

Writing Secure Code第2版〈下〉プログラマのためのセキュリティ対策テクニック

Writing Secure Code第2版〈下〉プログラマのためのセキュリティ対策テクニック

  • 作者: マイケルハワード,デイビッドルブラン,Michael Howard,David LeBlanc,トップスタジオ
  • 出版社/メーカー: 日経BPソフトプレス
  • 発売日: 2004/12
  • メディア: 単行本
  • 購入: 2人 クリック: 14回
  • この商品を含むブログ (14件) を見る

*1:まあ残しておいてそれほど面白い機能だったとも思えませんけど

*2:さらに Windows 7 ではアレも取り除かれる方向で検討中とか

*3:Flash Player 10 の GPU サポートについては,『[http://weblogs.macromedia.com/akamijo/archives/2008/05/flash_player_10_1.html:title=Flash Player 10 の GPU サポート機能について - akihiro kamijo]』に詳しいです.