4

以前は機能していたコードがいくつかありますが、最近停止しました。Adobe Reader プラグインに含まれており、最新の Reader バージョンには「保護モード」があり、これが問題を引き起こしています。

私のプラグインは、インプロセスでロードする通常の dll の一部をロードできます。

MyNormalLib::IMyClassPtr foo;
HRESULT hr = foo.CreateInstance(__uuidof(MyNormalLib::MyClass));

しかし、自分のサービス (同じマシンで実行されている) への com ポインターを取得しようとすると、次のようになります。

MyOtherLib::IMyServicePtr bar;
HRESULT hr = bar.CreateInstance(__uuidof(MyOtherLib::MyService));

E_ACCESSDENIED私はHRESULTを取得します。

Adobe Reader X が登場するまで、これは問題なく機能していました。保護モードがなければ、Adobe は正常に動作し、すべてが機能します。保護モードでは、Adobe は別の Reader プロセスを生成しますが、いくつかの制限があります。これを Process Explorer で見ると、親の Reader プロセスの [セキュリティ] タブでは、ほとんどすべてが必須に設定されていることがわかります。ただし、子リーダー プロセスには、ほとんどのグループが「拒否、必須」に設定されており、一部は「必須、制限付き」に設定され、一部は単に必須に設定されています。これが重要な場合は、詳細を提供できます。

すべてのプロセス (私のサービスとリーダーの両方) は、同じユーザー (私) として実行されます。それが問題であれば、私には管理者権限があります。

自分のサービスにアクセスしようとしたときに AccessDenied エラーが発生する原因は何ですか? これを機能させるには、どのようなセキュリティ フープを通過する必要がありますか?

4

1 に答える 1

2

制限されたプロセスには管理者権限がありません。これが演習のポイントです。ReaderXは、トークンからできるだけ多くの権限を削除するため、pwnされた場合、コンピューターは削除されません。

(これは基本的にUACの動作方法でもあります。カーネルに移動して、管理者グループを無効にした後、再度有効にするためのアクセス許可を取得する必要があります)。

基本的に、Reader Xが持っている特権を調べて、コンポーネントがそれらの権限で使用できることを確認する必要があります。プロセスモニターはあなたの友達です-拒否をフィルターするだけで、問題がすぐに現れます!

于 2011-03-18T20:55:34.707 に答える