none
特定のキーを監査して、編集されたらイベントを開始する。ただし、特定のプロセス(またはプロセスID)によるレジストリの編集が行われた場合イベントを開始しない RRS feed

  • 質問

  • 特定のキーを監査して、編集されたらイベントを開始する。ただし、特定のプロセス(またはプロセスID)によるレジストリの編集はイベントを開始しないといったことは実現できるでしょうか。

    windows10では

    セキュリティーポリシー→レジストリの監査→レジストリエディタ→レジストリーキーの監査の設定→イベントビューアーで

    指定したレジストリの編集を何のプロセス(ソフトウェアのパス)かとプロセスIDが表示されます。

    これと同じように指定したレジストリを編集したプロセスまたはプロセスIDを

    C#で感知します。

    そして

    指定したプロセス以外のプロセスが

    指定したレジストリの編集を行なったら、

    イベントを開始するといったプログラムを

    作ることは可能でしょうか。

    ざっとレジストリの監査のコマンドについて調べたのですが、

    レジストリが編集されたらイベントを起こす

    RegNotifyChangeKeyValue というのがあると思うのですが、

    指定したプロセスでのレジストリの編集だけは無視するといったことは可能なのかとおもって質問しました。

    プログラムを作ろうとした理由は

    フルコントロールにしなければいけないHKEY_CURRENT_USER\Software\pasonemu.net

    にあるソフトウェアのレジストリを編集したら

    エクスポートしておいたレジストリをインポートして

    以後、インポートした状態からまた監視するといったC#のwindowsサービスを作ろうと思っています。

    (windowsサービスにしたのはサービスの強制終了を防ぐためです)

    どうしても作りたく、C#言語を勉強し始めたばかりです。

    まだ、レジストリのコマンドすら習っていません。

    しかし、このプログラムを何としても作りたいので、

    もしこのプログラムができなかったら、C#言語勉強するのを中断しようと思っているので、

    上記のプログラムができそうかどうかの回答をお願いします。

    質問の発端は以下の質問です。

    https://social.technet.microsoft.com/Forums/ja-JP/e26e9659-0c8b-4739-9fee-6c1f71c9db87?forum=win10itprogeneralJP

    目的のレジストリはある程度仕組みを理解しました。

    regfromapp

    また特定のプロセスだけをイベント発生の対象にしないのは

    プログラムの仕様としてソフトウェアが自分のレジストリに編集をしていて、

    イベントを発生させたいのは

    何かしらのスクリプトやソフトウェアでレジストリを編集された場合にしたいからです。

    ソフトウェアのレジストリを監査しました。

    回答よろしくお願いします。



    2017年8月27日 19:30

回答

  • コマンドプロンプトからのレジストリエディタの操作を禁止する方法を参照しました。その技術力で利用者の悪意に対抗しきれるのでしょうか? 例えばインポート元情報が改ざんされる可能性は? パソコンねむねむも自体もそうですが、結局のところ自己満足に過ぎず、悪意のある利用者に本気で攻撃されたら防ぎきれないと思われます。

    特定のキーを監査して、編集されたらイベントを開始する。ただし、特定のプロセス(またはプロセスID)によるレジストリの編集はイベントを開始しないといったことは実現できるでしょうか。

    特定のプロセスを除外して監視することはできません。ただし発想を転換して、値が書き換えられているかどうかの判定を行えば済むことかと。書き換えられていなかったらイベントを無視すればいいわけです。

    プログラムを作ろうとした理由はフルコントロールにしなければいけないHKEY_CURRENT_USER\Software\pasonemu.netにあるソフトウェアのレジストリを編集したらエクスポートしておいたレジストリをインポートして以後、インポートした状態からまた監視するといったC#のwindowsサービスを作ろうと思っています。

    HKEY_CURRENT_USERという点に気づいておられますでしょうか? 仮に監視できたとしてそれはWindowsサービスを実行するユーザー権限に対する監視でしかありません。管理者アカウントで監視を行えば管理者アカウントのレジストリ監視が行われるだけであり、利用者レジストリの監視にはなりません。利用者アカウントで監視を行うと利用者アカウントのレジストリ監視は実現できますが、利用者は自分の権限で実行されている監視サービスを停止可能かと思われます。

    2017年8月27日 20:27

すべての返信

  • コマンドプロンプトからのレジストリエディタの操作を禁止する方法を参照しました。その技術力で利用者の悪意に対抗しきれるのでしょうか? 例えばインポート元情報が改ざんされる可能性は? パソコンねむねむも自体もそうですが、結局のところ自己満足に過ぎず、悪意のある利用者に本気で攻撃されたら防ぎきれないと思われます。

    特定のキーを監査して、編集されたらイベントを開始する。ただし、特定のプロセス(またはプロセスID)によるレジストリの編集はイベントを開始しないといったことは実現できるでしょうか。

    特定のプロセスを除外して監視することはできません。ただし発想を転換して、値が書き換えられているかどうかの判定を行えば済むことかと。書き換えられていなかったらイベントを無視すればいいわけです。

    プログラムを作ろうとした理由はフルコントロールにしなければいけないHKEY_CURRENT_USER\Software\pasonemu.netにあるソフトウェアのレジストリを編集したらエクスポートしておいたレジストリをインポートして以後、インポートした状態からまた監視するといったC#のwindowsサービスを作ろうと思っています。

    HKEY_CURRENT_USERという点に気づいておられますでしょうか? 仮に監視できたとしてそれはWindowsサービスを実行するユーザー権限に対する監視でしかありません。管理者アカウントで監視を行えば管理者アカウントのレジストリ監視が行われるだけであり、利用者レジストリの監視にはなりません。利用者アカウントで監視を行うと利用者アカウントのレジストリ監視は実現できますが、利用者は自分の権限で実行されている監視サービスを停止可能かと思われます。

    2017年8月27日 20:27
  • 個人的には、そういったレジストリ変更の監視サービスを作ると意気込むぐらいなら、そのフリーソフトが実現する機能をすべて自作した方がいいと思います。
    元々、サービスにすべきというアドバイス も、「アプリケーションという形で実現されているフリーソフトを使わず、Windows サービスとして自作すべし」ということでしょうから。

    もっとも、今の知識・スキルレベルで自作は厳しいと思います。
    諦めて、業者に頼んだ方が良いでしょうね。
    (今までどのくらいの工数(日数)をかけているでしょうか…。あなたが働く人件費もコストであることも認識した方が良いと思います)

    2017年8月27日 21:58
    モデレータ
  • 回答ありがとうございます。

    質問や補足のURLには載せていなかった情報です。

    ぱそこんねむねむはタスクマネージャーやtaskkillで強制終了してもぱそこんねむねむねむは強制再起動します。

    なので今は、ソフトウェアのレジストリを監視するwindowsサービス(強制終了できないと思われるwindowsサービス)で

    ぱそこんねむねむをサポートしようとおもっています。

    <HKEY_CURRENT_USERという点に気づいておられますでしょうか? 仮に監視できたとしてそれはWindowsサービスを実行するユーザー権限に対する監視でしかありません。管理者アカウントで監視を行えば管理者アカウントのレジストリ監視が行われるだけであり、利用者レジストリの監視にはなりません。

    管理者カウントは二つあって、利用者のアカウントは1つしかない状態です。

    利用者は管理者のパスワードを知らないので。

    管理者でアカウントでログインして管理者アカウントでのレジストリ監査になっても構いません、


    <利用者アカウントで監視を行うと利用者アカウントのレジストリ監視は実現できますが、利用者は自分の権限で実行されている監視サービスを停止可能かと思われます。

    システム構成は管理者権限で開くことはできません。コマンドプロンプトでは

    サービスの削除には管理者権限が働きます。

    サービスを停止するバッチを作ったとしても管理者権限が要求されますが、

    なぜ監視サービスを停止可能にできるんですか。

    windowsサービスを停止するには管理者権限を絶対必須とするような設定方法はないのでしょうか。

    <特定のプロセスを除外して監視することはできません。ただし発想を転換して、値が書き換えられているかどうかの判定を行えば済むことかと。書き換えられていなかったらイベントを無視すればいいわけです。

    質問に重要なことが抜けておりました。申し訳ありません。

    パソコンねむねむは

    特定のソフトウェアの使用時間を計測するとき、計測時間がレジストリに登録され

    また終了1分前に終了のカウントダウンのレジストリキーを自動生成しています。

    そのため、

    レジストリの編集を監視する際にぱそこんねむねむのプロセスIDによる編集を無視しないと

    監視したらすぐにパソコンねむねむの仕様でイベントが発生してしまいます。

    (すべてのキーが上記のようにレジストリの値が変化するわけではありません。

    これらのキーは普通に監査するだけで済みます。)

    ほかのプロセス(スクリプトやほかのソフトウェア)によるパソコンねむねむのレジストリ編集に対して

    イベントを発生させたいです。

    何とか実現したいのですが、とりあえずキーの監査だけしておいて、

    イベントを発生しておいて、

    パソコンねむねむ以外のプロセスがレジストリを編集した形跡があったら、

    指定しておいたレジストリをインポートして以後、監視をし始める

    インポートしておいたレジストリは使用時間をすべて0にしているのでつまりカウントダウンさせるものがないので、

    ふつうにレジストリを監視して

    パソコンねむねむ以外のプロセスがレジストリを編集した形跡がなかったら、再度監視をし始めて、

    ということはできませんでしょうか。

    2017年8月28日 11:29
  • インポート元が改ざんされることですが、削除や編集に管理者権限がかかるprogram filesに保存しております。

    2017年8月29日 18:30
  • ありがとうございました
    2017年9月13日 9:58