何となく Blog by Jitta
Microsoft .NET 考

目次

Blog 利用状況
  • 投稿数 - 761
  • 記事 - 18
  • コメント - 37042
  • トラックバック - 222
ニュース
  • IE7以前では、表示がおかしい。div の解釈に問題があるようだ。
    IE8の場合は、「互換」表示を OFF にしてください。
  • 検索エンジンで来られた方へ:
    お望みの情報は見つかりましたか? よろしければ、コメント欄にどのような情報を探していたのか、ご記入ください。
It's ME!
  • はなおか じった
  • 世界遺産の近くに住んでます。
  • Microsoft MVP for Visual Developer ASP/ASP.NET 10, 2004 - 9, 2011
広告

記事カテゴリ

書庫

日記カテゴリ

ギャラリ

その他

わんくま同盟

同郷

 

職場で、ちょっとした監視アプリを作ろうかという話があがった。その中に、「ガジェットはどうか」という話があった。その関係で、調べた成果が静的サイトにあがっている。

あるドキュメントを訳していてぶつかった疑問。なんというか、ええのか?

Internet Explorer 7 には、保護モードというモードがある。これ、サイトごとに設定できるなら、とても有効なのに。。。要は、保護モードが有効な「ゾーン」だと、ActiveX やスクリプトが動作しない。妙なものを入れられたり、スクリプトから Cookie を覗かれたり、WMI オブジェクトを作ってマネージメントを勝手に行われるなどのことがない、というわけだ。

で、その上で、ガジェット。

ガジェットは、極々荒く言うと、Windows Sidebar が簡易ウェブ サーバ(あるいはブラウザ)となって実行される HTML コンテンツとスクリプト、である。.gadget ファイルは、いくつかの HTML ファイルと、設定ファイル、スクリプト ファイルなどを ZIP 圧縮したものだ。拡張子を .zip に変更すれば、XP でも中身を確認できる。ごく一部なら、XP でも IE を使って実行できる。

さて、問題の文書がこちら、「Windows Vista Sidebar Security」。この中に、こんなことが書いてある。

Because code signing certificates are costly and not commonly used among developers who are likely to create HTML gadgets, there are no requirements that gadgets must be digitally signed.


コード署名証明書は、HTMLガジェットを作製するであろう開発者にとって、値段が高くて一般的に用いられないので、ガジェットはデジタル署名されなければならないという必要はありません。

ふんふん。これは、まあ、いい。確かにコード署名は高いし、そもそも個人には発行しない機関が多い。で、次がこれ。

HTML content in the Sidebar is downloaded first as part of a package of resources and configuration files, and then executed from the local computer. The download process is similar to downloading applications (.exe files) from the Internet.


サイドバーのHTMLコンテンツは、リソースと構成ファイルからなるパッケージの一部として、最初にダウンロードされ、そしてローカルコンピュータから実行されます。ダウンロード・プロセスは、インターネットからアプリケーション(.exeファイル)をダウンロードすることに似ています。

なるほど。実行ファイルと同じように、ダウンロードして、ローカルで実行されるわけです。ローカルで実行すると言っても、IE6 SP2 以降であれば、ローカルで実行される ActiveX を遮断する機能も持っています。特に問題はないでしょう。あれ?私が、ローカルのセキュリティ設定をいじっている?

問題はない?本当に?

問題がないなら、こんなエントリを作らない。というわけで、仰天の内容は次。

Because gadgets have a similar download and installation process to other executable code, it is appropriate to provide gadgets with a similar set of capabilities when run. The MSHTML runtime is configured like the set of permissions given to HTML Applications or the Local Machine Zone security configuration. For example, gadgets are configured in several ways that are different from web pages. Because gadgets are treated as executable code, they can create any installed ActiveX objects because the option "Initialized and script ActiveX controls not marked safe for scripting" is configured as such. Another option configured differently from web pages is "Access data sources across domains" because gadgets can be more useful when they aggregate data from various locations.


ガジェットには他の実行可能コードに類似したダウンロードとインストールプロセスがあるので、ガジェットが動作するとき、類似したセキュリティ設定を提供することは適切です。MSHTML ランタイムは、HTML アプリケーションまたはローカル マシン ゾーン セキュリティ構成に与えられる許可セットのように構成されます。たとえば、ガジェットはウェブ・ページと異なるいくつかの方法で構成されます。ガジェットは実行可能コードとみなされるので、「スクリプトを実行しても安全だとマークされていない ActiveX コントロールの初期化とスクリプトの実行」オプションがそのように構成され、ガジェットはインストール済みのすべての ActiveX オブジェクトでもつくることができます。ウェブ ページと異なって構成されるもう一つのオプションは、いろいろな場所からのデータは、ガジェットがより役に立つものとなり得ることがあるので、「ドメインを超えてデータ送信側にアクセスします」ことです。

ええのか?ホンマにええのか?なんか、間違ってないか?

HTML とスクリプトをセットにして送りつけ、「これ見て」と送った場合、スクリプトは実行されない。しかし、ガジェットとして送った場合、そのスクリプトは実行される。


ええのか?ホンマにええのか?なんか、間違ってないか?

あ、メールで送ったのでは、実行されないかもしれない。メール サービスによっては、メールの添付ファイルにあるスクリプトを削ってしまうものがあるようだ。だから「ガジェットをメールで送るな、ウェブ サイトからダウンロードできるようにしろ」と、開発概要に書いてある。

救いは、ガジェットの配布プロセスでは ActiveX の登録はできないため、新たな ActiveX は実行されない、ってことか。また、署名の有無にかかわらず、ガジェットから ActiveX をダウンロードすることはできない。ガジェットだけ侵入させて、そのガジェットによってダウンロードさせてやろう、ということはできないわけだ。

しかし、WMI はオブジェクト化され、実行できる。もちろん、システムの設定を変更するようなものは、UAC に引っかかるが。とはいうものの、ファイルの一覧くらいはとれる。どんなものがインストールされているのかわかる。ユーザ(のアカウント)が所有者であるファイルを消すこともできる。

一体全体、「Trust Worthy Computing」は、どこに行ってしまったのやら。いや、きちんとレビューされたならそれはそれでいい。問題は、レビューされた内容がアナウンスされていないこと。レビューで出てきたセキュリティ リスクに対して、どのように考え、どう対処したのかがわからないこと。


そんなわけで。やはり「標準ユーザでアカウントを作って常用」「UAC はオンで!」「バックアップは数世代保存」を、自衛のために実行して欲しい(開発環境は除く)。


あ、ドメイン超え通信は、UAC や標準ユーザ アカウントで何とかできる問題ではない。その辺は、ファイヤー ウォールで何とかするとか、新しいソフトを入れたらしばらくは妙な通信をしていないかネットワーク トラフィックを監視するなど、しなければならない。


「ドメイン越え」→「クロス ドメイン」とも言う。

投稿日時 : 2007年7月12日 21:44
コメント
  • # re: ええのか?
    通りすがり
    Posted @ 2007/07/12 23:07
    ちゃんと読んでませんが、ガジェットはどちらかというと普通の実行ファイルと同じように扱われるよ
    ってだけに見えるんですけど…
    それとも、実行ファイルは署名されてないと実行不能
    というようなのと同じ状態にしろと?

    コード署名証明書を取得できない人間は、実行可能なガジェットを作成配布する権利はないってことでしょうか?
  • # re: ええのか?
    通りすがり
    Posted @ 2007/07/12 23:15
    ああ、書き忘れました。
    つまり

    >ガジェットとして送った場合、そのスクリプトは実行される。

    これがどれを見ていっているのかわかりません。
  • # re: ええのか?
    通りすがり
    Posted @ 2007/07/12 23:49
    ああ、そもそもからしてガジェットなんてWebコンテンツと同じ扱いにしてほしいってこと?
    アクティブデスクトップ?
  • # re: ええのか?
    沢渡真雪
    Posted @ 2007/07/13 3:10
    通りすがりさんも書かれていますが、Windows Sidebarのガジェットは普通のexeと大体同じです。
    インターネットから入手したデジタル署名がないものはインストール前に警告が出ます。

    ガジェットは誰かに送りつけたとしても、ソレは勝手に実行されるわけでもないしインストールされるわけでもなく。
    もちろん保護モードみたいなのがあればあったでよいかもしれませんけど。

    まあ、普通のexeというかどちらかといえばHTAと同じですね。
  • # re: ええのか?
    Jitta
    Posted @ 2007/07/13 7:53
    コメントありがとうございます。


    ウェブサイトとして扱われるなら、クロスサイトアクセスは出来ないでしょう。ここで、ガジェットから情報を送ることができる必要があるのでしょうか。どこへ送られるかわからないのに。
    ウェブサイトとしてスクリプトを実行させると、様々な保護が働きます。しかし、ガジェットとして配布すると、それらの保護は働かないと書いてあります。理由は、実行ファイルと似たプロセスでダウンロードし、インストールするからだと。
    実行ファイルの場合、署名はコードサインの他、.NETアセンブリであれば改編対策として自己証明書を付けることもできます。しかし、ガジェットには改編対策はありません。だとすると、よく知られたガジェットに工作をして、二次配布することもでき、この工作は気付かれ難いのではないでしょうか。工作も、逆アセンブルの必要はなく、解凍すればいいだけです。
    署名がない、という警告も、最初の引用のように「高いからねぇ」と認めています。「無いことが当たり前」であれば、ここででる警告は、他の警告を弱めるように働かないでしょうか。出ることが多い警告は、警告としての意味がないと思います。(反射的に「はい」を押させる)
  • # re: ええのか?
    通りすがり
    Posted @ 2007/07/13 8:35
    全然意味が分かりません。
    どの辺がガジェット特有の問題なのですか?
  • # re: ええのか?
    通りすがり
    Posted @ 2007/07/13 8:37
    まあ、高い権限なしで動作させるモードみたいなのは
    あってもいいとは思いますがね
  • # re: ええのか?
    Jitta
    Posted @ 2007/07/15 22:05
    > どの辺がガジェット特有の問題なのですか?
    すみません、「ガジェット特有の問題である」と、書いているでしょうか。

     特有でなくても、ガジェットでできることは、問題だと思います。HTA と同様であれば、なぜ HTA を拡張しなかった or HTA の拡張ですませなかったのか。あるいは、HTA でこういう脆弱性があるとわかっていながら、それに対する対策をなぜ行わないのか。
     こういう視点では、ガジェットとして、問題ではないでしょうか。

     問題が固有であるかどうか。それはたいした問題ではありません。それよりも、同じ脆弱性を他の形態で作り込んだ。そっちの方が大問題だと思います。
  • # re: ええのか?
    通りすがり
    Posted @ 2007/07/15 23:27
    ローカルにインストールされた後の何らかのプログラムが、ローカルの資源やネットワークにアクセスできることを、
    脆弱性、大問題、と表現する人をはじめてみました。

    OSから作り直さないと駄目ですね、何もさせないOSになりそうですが。

    そもそも実行ファイルを実行できるという最大の「脆弱性」が最初からあるのですから、ガジェットを捕まえてこれほどセンセーショナルに大問題と煽る意味がわかりません。

    何かを実行できるスクリプトも、いろんな追加の処理系も、みんなみんな脆弱性だらけですね。
  • # re: ええのか?
    通りすがり
    Posted @ 2007/07/15 23:33
    ガジェットはそもそもモバイルコードとしての役目ではなく、デスクトップに貼り付けるアクセサリとしての用途を前提としたものでしょう。
    もしガジェットがローカルの資源やネットワークにアクセスできないのなら、多くのガジェットは実現付加でしょう。
    RSSリーダとかCPUやらの状態表示とか、いろんなアクセサリが作れなくなりますね。
    仕方がないのでこれまでどおり、実行ファイルで作成すると。
    ん?で、これで安全になりましたか?

    まあ、前にも書きましたが、権限を制約されたサンドボックス内で動作させるモードはあってもいいと思いますがね。
    当然すべてのガジェットがローカルやネットワークへのアクセスが必要なわけではないですから。
  • # re: ええのか?
    通りすがり
    Posted @ 2007/07/15 23:38
    それから、

    >HTML とスクリプトをセットにして送りつけ、「これ見て」と送った場合、スクリプトは実行されない。しかし、ガジェットとして送った場合、そのスクリプトは実行される。

    これは間違いだったということでいいですか?
    これができたら大問題、脆弱性というのはわかりますよ。

    でもさすがにね、いまどきこんなことができるような設計はまず考えられません。
    ふつうなら、こう読み取った時点で、ん?自分の勘違いか?と思って確認しますよ。

    少なくとも裏を取らずに勘違いのまま大問題だーなどと煽るような記事を、しかもMVPの名を冠した記事で書くなど考えられません。
    自分の記事の影響度を考えたことがありますか?
    普通もう少し慎重になるものだと思いますが。
  • # re: ええのか?
    通りすがり
    Posted @ 2007/07/15 23:41
    >実行ファイルの場合、署名はコードサインの他、.NETアセンブリであれば改編対策として自己証明書を付けることもできます。しかし、ガジェットには改編対策はありません。

    これも意味がわかりませんね。
    「.NETアセンブリであれば」などと書かれていることから、厳密名のことを言っているぐらいしか考えられませんが。

    .NET上で動作する実行ファイルは、厳密名がないと実行できないなどの制約がついているんでしょうか?寡聞にして知りませんでした。

    おれおれ証明書で厳密名つけるなどでいいなら、おれおれコード署名をつければすむ話です。あまり意味があるとは思えませんが。
  • # re: ええのか?
    通りすがり
    Posted @ 2007/07/16 3:32
    っとと、

    >.NET上で動作する実行ファイルは、厳密名がないと実行できないなどの制約がついているんでしょうか?

    これはあまり意味ない書き込みでした。
  • # re: ええのか?
    Jitta
    Posted @ 2007/07/18 6:38
     まず、ごめんなさい。このエントリは、「こうだ」という断定ではありません。「本当に問題はないのか、考えたい」という問いかけ、考えてほしいという注意の呼びかけです。
     これが伝わらなかったことをお詫びすると共に、結果的に目的に沿ったものになっていることに感謝します。

     さて、私が問題だと思うのは、改変対策についてです。PE ファイルについては、署名しかない(?)ですが、一応付けることを求められています。特にドライバは、サーバについては、Windows Server 2008 の次からは必須になります(64bit は現在でも必須であり、2008 は 32bit 最後のサーバ OS である)。また、逆アセンブルして、機械語を読み解くのは、相当高度な部類にはいると思います。
     .NET アセンブリについては、コードサインは高価ですが、自己証明書を厳密名を付けるために使用して、これによって改変対策を行えます。

     対して、ガジェットの場合は PE ファイルに比較してかなり敷居が低いと思います。そして、コードサイン以外の改変対策がとれません。
     もちろん、開発者の敷居を下げることで流通するソフトを増やそうというねらいもあると思うのですが、開発だけでなく、セキュリティの敷居も低くなっていないでしょうか。

     たとえば、人気の高いガジェットを「**のキャラクタを付けました」とか、「live.com は混雑して遅いのでミラーしました」とか言って二次配布する人が現れたとき、この二次配布物が改変されていないことを確認することができるでしょうか。
     先に書いたように、PE ファイルの場合、この二次ファイルは機械語という敷居が高いと思います。もちろん、クラックツールなども出回っているので、意味はないかもしれませんが。
     .NET アセンブリの場合、自己署名でも、改変対策を行えます。もっとも、C# などの言語にまで逆コンパイルして、コンパイルし直せば、厳密名も外せるのですが。
    (あ~、無駄なこと考えているような気がしてきた)
タイトル
名前
Url
コメント