C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: プロセスが管理者特権を持っているか調べるには?


(過去ログ 25 を表示中)

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■11159 / inTopicNo.1)  プロセスが管理者特権を持っているか調べるには?
  
□投稿者/ Jitta (434回)-(2007/12/07(Fri) 22:33:59)

分類:[C/C++] 

 自プロセスが Administrators グループに属するアカウントから起動されたかどうかを調べるには、どうすればいいですか?

 Visual C++ 7.1 UnManaged (MFC/ATL) です。
 Program Files 以下にあるファイル(具体的には InstallShield のインストール ログ ファイル)を削除しようとしています。しかし、Program Files 以下にあるため、Users グループのアカウントではアクセス違反が発生します。
 ファイル削除を試みれば失敗するのでわかるのですが、アプリケーション起動時に「権限持ってないよ」と通知できれば、その方が親切かと思い、プロセスがどのアカウントから起動されているか調べたいと思います。

 ざっと MSDN を見ると、PrivilegeCheck 関数が該当するように思ったのですが、RequiredPrivileges で詰まりました。PRIVILEGE_SET 構造体ですが、このメンバである Control が何を意味するのかわかりません。「Specifies a control flag related to the privileges.」と書かれていますが、どんな値(フラグ)が指定できるのか、わかりません。例として出ている「PRIVILEGE_SET_ALL_NECESSARY」を、Platform SDK で検索すると、WinNT.h に定義が見つかりましたが、コレが 1 と定義されているだけで、他に類似のものが見つかりません。
 また、Privileges メンバに指定するものも不明です。LUID_AND_ATTRIBUTES 構造体ですが、このメンバ、Luid に何かを指定して、Attributes に SE_PRIVILEGE_ENABLED を指定すれば良さそうなのですが、Luid のどんな値が何を示すのかがわかりません。というより、再起動するごとに生成される?

 順当には、削除対象のファイルのセキュリティ識別子を調べて、自分が書き込み権を持っているなら…のようになると思いますが、他に Windows Service を停止させる必要もあるので、「Administrators グループに属しているかどうか」であれば両方を一度に満足すると思います。

 Google や LiveSearch で
「PrivilegeCheck」「プロセス administrator」「プロセス 管理者 (権限 OR 特権)」
などをキーに検索しましたが、該当するものを見つけられませんでした。

 どのようにして調べればいいのでしょうか。


 なお、Vista の場合は埋め込みマニフェストで requireAdministrator を指定しているので、問題ないと思っています。
 「調べてダメなら…」は、他のアプリでは起動時に「権限がありません」と出しているので、「出せ」と言われています。このアプリはレジストリ(HKLM/SYSTEM)を Read/Write で開いて、失敗したら「権限なし」と判断しています。
(そこら中に転がっているような気がしたんだけど、見つけられなかった)
引用返信 編集キー/
■11162 / inTopicNo.2)  Re[1]: プロセスが管理者特権を持っているか調べるには?
□投稿者/ Azulean (4回)-(2007/12/07(Fri) 22:58:59)
>  自プロセスが Administrators グループに属するアカウントから起動されたかどうかを調べるには、どうすればいいですか?
これかな?試してませんが…。

http://support.microsoft.com/kb/118626/ja

-----

他に探している最中にたどったサイト群:
http://www.ailight.jp/blog/sha256/archive/2005/01/23/3881.aspx
http://msdn2.microsoft.com/en-us/library/aa446622.aspx
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/secauthz/security/well_known_sids.asp
http://www7a.biglobe.ne.jp/~tsuneoka/win32tech/12.html


引用返信 編集キー/
■11163 / inTopicNo.3)  Re[2]: プロセスが管理者特権を持っているか調べるには?
□投稿者/ Jitta (436回)-(2007/12/07(Fri) 23:06:10)
Jitta さんの Web サイト
No11162 (Azulean さん) に返信
>> 自プロセスが Administrators グループに属するアカウントから起動されたかどうかを調べるには、どうすればいいですか?
> これかな?試してませんが…。
>
> http://support.microsoft.com/kb/118626/ja
>
> -----
>
> 他に探している最中にたどったサイト群:
> http://www.ailight.jp/blog/sha256/archive/2005/01/23/3881.aspx
> http://msdn2.microsoft.com/en-us/library/aa446622.aspx
> http://msdn.microsoft.com/library/default.asp?url=/library/en-us/secauthz/security/well_known_sids.asp
> http://www7a.biglobe.ne.jp/~tsuneoka/win32tech/12.html
>
>

ありがとうございます。そのようです。
検索キーワード教えてください。
引用返信 編集キー/
■11165 / inTopicNo.4)  Re[3]: プロセスが管理者特権を持っているか調べるには?
□投稿者/ Azulean (5回)-(2007/12/07(Fri) 23:43:27)
2007/12/07(Fri) 23:45:43 編集(投稿者)
2007/12/07(Fri) 23:45:39 編集(投稿者)

おおむね次のような順序でした。
結構、到達までにキーワード取っ替えで突き進んでたみたいです。(IEの履歴から)
(キーワード検索はGoogleの日本語のみが原則、ウェブ全体の場合は注記)

キーワード検索:ユーザ グループ Windows API
検索結果から:http://www7a.biglobe.ne.jp/~tsuneoka/win32tech/12.html
キーワード抽出:GetTokenInformationとTokenGroups

キーワード検索:TokenGroups
検索結果から:http://www7a.biglobe.ne.jp/~lshen/EternalWindows/Security/SecurityContext/SecurityContext03.html
キーワード抽出:TOKEN_GROUPS

キーワード検索:TOKEN_GROUPS(ウェブ全体)
検索結果から:http://msdn2.microsoft.com/en-us/library/aa379624.aspx
リンクから:http://msdn2.microsoft.com/en-us/library/aa379595.aspx
リンクから:http://msdn2.microsoft.com/en-us/library/aa379594.aspx
リンクから:http://msdn2.microsoft.com/en-us/library/aa446622.aspx
リンクから:http://msdn2.microsoft.com/en-us/library/aa379554.aspx

ここまででグループのチェックができそうだと予想。
手元のVS2003付属のPlatformSDKのwinnt.hを参照する。(これを選定した根拠はMSDN2のいずれかにヘッダーファイルとして示されていたこと)

winnt.h内検索:「Administrator」で検索(大文字小文字区別せず)
ヒットしたもの:WinBuiltinAdministratorsSid
キーワード抽出:WELL_KNOWN_SID_TYPE

キーワード検索:WELL_KNOWN_SID_TYPE
検索結果から:http://www.ailight.jp/blog/sha256/archive/2005/01/23/3881.aspx
キーワード抽出:Well-known SIDs

キーワード検索:Well-known SIDs
検索結果から:support.microsoft.comに限定
検索結果から:(3番目?)http://support.microsoft.com/kb/118626/ja
引用返信 編集キー/
■11167 / inTopicNo.5)  Re[4]: プロセスが管理者特権を持っているか調べるには?
□投稿者/ ちゃっぴ (74回)-(2007/12/08(Sat) 01:27:25)
ちゃっぴ さんの Web サイト
Access token 調べればいいんですが、それ専用の API があった記憶が。。。

でも、以前 blog に書きましたが、Administrators に所属しているかで判断するのはめっさ推奨しません。
引用返信 編集キー/
■11168 / inTopicNo.6)  Re[5]: プロセスが管理者特権を持っているか調べるには?
□投稿者/ ちゃっぴ (75回)-(2007/12/08(Sat) 01:35:57)
ちゃっぴ さんの Web サイト
> Program Files 以下にあるファイル(具体的には InstallShield のインストール ログ ファイル)を削除しようとしています。しかし、Program Files 以下にあるため、Users グループのアカウントではアクセス違反が発生します。

え〜と。自分の process 内空間ならともかく、それ以外ならやってみて NG で判断するのが正解です。
ぶっちゃけ割り込みまで考えると事前判断は無理ですから。

この場合には問題がありませんが、自分の process 内空間以外のものを lock せずに扱う場合によっては脆弱性も生じます。
引用返信 編集キー/
■11173 / inTopicNo.7)  Re[6]: プロセスが管理者特権を持っているか調べるには?
□投稿者/ Jitta on the way (52回)-(2007/12/08(Sat) 12:23:19)
No11168 (ちゃっぴ さん) に返信
>>Program Files 以下にあるファイル(具体的には InstallShield のインストール ログ ファイル)を削除しようとしています。しかし、Program Files 以下にあるため、Users グループのアカウントではアクセス違反が発生します。
>
> え〜と。自分の process 内空間ならともかく、それ以外ならやってみて NG で判断するのが正解です。
> ぶっちゃけ割り込みまで考えると事前判断は無理ですから。
>
> この場合には問題がありませんが、自分の process 内空間以外のものを lock せずに扱う場合によっては脆弱性も生じます。

とりあえず、「前例がある」ので、「厳密にはできません」が通じない状態です...Adminsだって、ユーザー固有で権限外されたりしたら「できないことがある」のですけどねぇ...

その前に、つくろうとしているアプリが本当に必要なのか、と問いつめてみたかったり...バッチファイルで十分なんじゃない?と、思っています。あ、サービス止められないか。
引用返信 編集キー/
■11174 / inTopicNo.8)  Re[4]: プロセスが管理者特権を持っているか調べるには?
□投稿者/ Jitta on the way (53回)-(2007/12/08(Sat) 12:27:10)
No11165 (Azulean さん) に返信
> 2007/12/07(Fri) 23:45:43 編集(投稿者)
> 2007/12/07(Fri) 23:45:39 編集(投稿者)
>
> おおむね次のような順序でした。
> 結構、到達までにキーワード取っ替えで突き進んでたみたいです。(IEの履歴から)

詳細にありがとうございます。
いま、携帯なので、家に帰ってからじっくり見ますが、検索しようとする対象を間違っていたようです。グループを探そうとは、考えませんでした。
ありがとうございます。
解決済み
引用返信 編集キー/
■11192 / inTopicNo.9)  Re[5]: プロセスが管理者特権を持っているか調べるには?
□投稿者/ ちゃっぴ (76回)-(2007/12/09(Sun) 11:01:36)
ちゃっぴ さんの Web サイト
Blog に entry 作りました。

Administrators に所属するか調査する方法
http://blogs.wankuma.com/tyappi/archive/2007/12/09/112231.aspx
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -