何となく Blog by Jitta
Microsoft .NET 考

目次

Blog 利用状況
  • 投稿数 - 591
  • 記事 - 18
  • コメント - 2182
  • トラックバック - 183
ニュース
  • 検索エンジンで来られた方へ:
    お望みの情報は見つかりましたか? よろしければ、コメント欄にどのような情報を探していたのか、ご記入ください。
It's ME!
  • はなおか じった
  • 世界遺産の近くに住んでます。
  • Microsoft MVP for Visual Developer ASP/ASP.NET 10, 2004 - 9, 2009
サイト内検索
広告

記事カテゴリ

書庫

日記カテゴリ

ギャラリ

その他

わんくま同盟

同郷

 

説明し忘れていたところの補足。


まず、デモでグダッたところ。NTFS 上でコンパイルし、NTFS 上のみで行き来した .NET 製実行ファイルは、仮想化されません。SaveFiledialog で、Program Files や、Windows 以下に書き込もうとすると、SaveFileDialog が警告メッセージを出します。ZIP 圧縮したあとに解凍したものも、警告が出ます。

が、一旦 FAT (USB メモリなど)にコピーすると、そのための情報が落ちる?ここ、検証必要ですね。

仮想化されると、エクスプローラからは見えません。よって、ログなどをアプリケーションがあるディレクトリに書き込んでいる場合は注意が必要です。.NET アプリであれば昇格しなければ書き込めないし、マニフェストがない(昇格情報がついていない)Win32 アプリの場合は、仮想化されてしまうのでログを見ることが出来ません。


昇格するためのコードは、実はエバンジェリストの松崎さんのところにあるコードと同じです(http://blogs.msdn.com/tsmatsuz/archive/2007/01/25/windows-vista-uac-part-2.aspx)。松崎さんが、自分自身を昇格して実行しているのに対し、昇格して実行する部分を外に出すことで、昇格が必要な機能だけ実行しています。

private void DoElevation(string command, string argument) {
    ProcessStartInfo info = new ProcessStartInfo(command, argument);
    info.CreateNoWindow = false;
    info.WorkingDirectory = System.IO.Path.GetDirectoryName(Application.ExecutablePath);
    info.Verb = "runas"; /* ここ */
    try {
        Process.Start(info);
    } catch (Win32Exception ex) {
        if (ex.NativeErrorCode != 1223 /* ユーザによる取り消し */) {
            throw;
        }
    }
}

この様に、verb に runas を指定することで、昇格ダイアログが表示されるようになります。XP で実行すると、「別のユーザとして実行」になります。

証明書の偽装については、cmd.exe のコマンド ライン オプションを調べてください(コマンド プロンプト上で cmd /?)。


「昨日書き換えました」というスライドについて、説明しておきます。

ここ、最初は「開発者が情報を提供しなければならない」として、「ヘルプやインフォチップで情報を提供する」と書いていました。しかし、よく考えてみると、他人をだまそうと考えている人が正確なことを書くわけがありません。では、どうしよう?ちょっと待てよ?アクセスを禁止できると言うことは、システムは、アプリケーションが何をしようとしているかわかるわけじゃないか。それなら、システム側が「このアプリケーションは、c:/Windows/System32/comctl32.dll を書き換えようとしています。許可しますか?」と聞くことが出来るんじゃないか?・・・そう考えて、書き換えました。

「この機能は昇格が必要」という、シールドアイコンについては、開発者が追加するとしても、触られるとまずいところを触るのをカットするのは、実はシステムの役目何じゃないか?もっとも、互換性の問題が大きいこと、しょっちゅう昇格ダイアログを表示しなければならなくなることが、そうなっていない原因だとは思いますが。

投稿日時 : 2007年4月30日 20:41
コメント
  • # re: 大阪#8 補足
    とっちゃん
    Posted @ 2007/04/30 21:13
    ビデオがまだ公開されていないので、ちょっと分らんところもありますけど...

    comctl32.dll などの、システムファイルは、強力なプロテクトがかかってるので、Trusted Installer 特権以外、リードオンリーです。
    SYSTEM も管理者も見ること以外出来ません。

    XP までのWFP(Windows File Protection)をさらに強力にした WRP(Windows Resource Protection)で、ガチガチに固められてます。

    仮想化で書き換えできるかまでは、わからんですがw
  • # re: 大阪#8 補足
    ちゃっぴ
    Posted @ 2007/04/30 22:44
    > が、一旦 FAT (USB メモリなど)にコピーすると、そのための情報が落ちる?ここ、検証必要ですね。

    プログラマから見た NTFS 2000 Part1: ストリームとハード リンク
    http://www.microsoft.com/japan/msdn/windows/windows2000/ntfs5.aspx

    これ使っているんじゃないですかね?
    結構いろいろ使われているので。
    Property の情報の一部とか、どこから download されたかとか (XP SP2 で加わったやつ)
  • # re: 大阪#8 補足
    ちゃっぴ
    Posted @ 2007/04/30 23:19
    > WRP(Windows Resource Protection)

    これってわざわざ名前つけるくらいすごい変更なのですかね?

    Detecting Resource Replacement
    http://msdn2.microsoft.com/en-us/library/aa382525.aspx

    上記では DACL によって保護されていると書かれていますし、行っているのは DACL の変更だけじゃないの?と思ってしまったり。

    変更された後は WFP と同様に正規の手順を追って変更されていないものは何らかの timeing で rollback されると思いますけど、それって WFP とほとんど変わっていないじゃん。
    # WFP とは実装は違うようですけど、詳細は undocumented なようなのでわかりませんが。
  • # re: 大阪#8 補足
    Jitta
    Posted @ 2007/05/01 12:48
    とっちゃんさん、ちゃっぴさん、コメントありがとうございます。

    > comctl32.dll などの、システムファイル
    あ、いや、ただの例です。「C:/Program Files に InstallShield Datas ディレクトリを作成しようとしています。許可しますか?」とかにしときゃよかった。
     システムが守っているところに書き込むことを、システムが許可するかどうか問い合わせるのではない。システムが守っているところに書き込んでいいか(昇格していいか)、書き込むものが問い合わせるのが、UAC のおかしなところかと思います。   という話。


    > Property の情報の一部とか、どこから download されたかとか
    私もそれかな、と思ったのですが、名前を知らなかったので(^-^;
  • # re: 大阪#8 補足
    とっちゃん
    Posted @ 2007/05/01 13:39
    >ちゃっぴさん
    ま、ファイルレベルでブロックじゃなくなったよって事なんじゃないですかね?<WRP

    見た感じは、アクセス権をガチガチにしてるだけっぽいしw
    実際、ACLも含めて書き込みできるのは、Trusted Installer 権限だけだしw
    #Administrators も SYSTEM もリードオンリーです<ComCtl32.dll

    >Jittaさん
    >あ、いや、ただの例です。
    あ、そうだったんですねw
    PPTもみれなかったので(なんかしらんが、Grooveが固まってた...orz)、こまかいところがわかんなくて。

    どっちにしても、今ままで権限関係を意識的に排除してきたところ(制限ユーザーで動かせるようになっていないソフト類)にとっては、これからの世の中は厳しいでしょうね。

    かなり淘汰されると思います。

    逆の見かたをすれば、そこにビジネスチャンスがあるわけですがw
    #市販ソフトにも管理者権限ないと起動できないものもあるけどw
  • # re: Windows Vista: UAC の抜け道を考える4
    何となく Blog by Jitta
    Posted @ 2007/07/09 22:15
    re: Windows Vista: UAC の抜け道を考える4
タイトル  
名前  
Url
コメント