トップ回答者
常駐監視アプリ(またはサービス)を強制終了を禁止(ただし、常駐アプリの監視下でないと特定のアプリが使えないという状況になればいいです)

質問
-
常駐させている監視アプリケーションを強制終了できなくする方法を教えてください。
セキュリティーソフト(フィルタリング)を使っていると
強制終了されたりして非常に困っています。
タスクマネージャーやcmdのtaskkillなどによる強制終了が拒否される
または強制終了しても起動して復活する方法を教えてください。
※あらゆるツールを使われても実現できるような方法を教えてください。
追記:管理者パスワードを知らない限り、絶対に強制終了できないアプリ(もしくはサービス)を作成したいです。
アクセスが拒否されました
このタスクを終了するには管理者特権が必要です。
タスクマネージャーを閉じてから、管理者として実行し、もう一度終了してくださいと表示が出てくるようなアプリケーションです。
**************
追記①動機
環境:windows 10 pro 64bit
常駐アプリはアプリの使用時間を細かく制限できる常駐アプリや
、firefoxのセーフモード起動を禁止する常駐アプリがあるのですが、
単なる平凡なタスクに常駐するアプリを標準ユーザーが強制終了できないように
タスク常駐するアプリが起動しているかを監視する常駐アプリ(サービス)を作成しようと思っていました。
今実施している制限(平凡なタスク常駐アプリをkillされないようにする制限)の内容です。
**********************************************************
常駐プログラムはHKEY_LOCAL_MACHINに登録させることにより、自動起動を標準ユーザーに解除されないようにしています。
常駐プログラムはC:\Program Filesに入れて、標準ユーザーにアンインストールされないようにするかつ、
常駐アプリとして起動できるようにしています。
マイクロソフト管理コンソールを使いソフトウェアの制限ポリシーをつかいます
ソフトウェアの制限ポリシーでのセキュリティレベルで許可しないを既定の設定にしています。
これでまず、標準ユーザーは新規の実行ファイルを入れないようにします。
次は既存のアプリで常駐プログラムを無効にするものをロックします。
常駐プログラムを消せそうなサードパーティー製のアプリをアンインストールして、
追加の規則→新しいハッシュの規則で
powershellとコマンドプロンプト,msconfig、reg.exe、、タスクマネージャー,
レジストリエディタ
を禁止にしています。(常駐プログラムをkillするコマンドを使われたり、レジストリを変更して、アプリを異常終了させられるのを防ぎます)
ユーザーが使用したいサードパーティーアプリをハッシュの規則で許可しています。
あとはパスの規則で
ショートカットの起動を許可して
%ProgramFiles%\WindowsApps\Microsoft.WindowsStore*でwindows、storeを禁止します。
自分のパソコンはセーフモードではネットが使えないようになっていてセーフモードとネットワークにブートしても
ネットは使えない仕様になっているらしいです。新たに使えるようにすると、ドライバーをインストールをする必要があるらしく、
多分標準ユーザーだとインストールは不可能だと思われます。
**********************************************************
それらの常駐アプリは標準の機能だけでは簡単にkilされてしまうのですが、自分なりに上記のwindows標準の機能を使って、killできないように設定しました。
自分でもこの方法は大丈夫だと思い込んでいたのですが、いろいろ問題が発覚しました。
この質問での最近の返答なんですが、
タスクマネージャーが使えるようにしたいと思って、
タスクマネージャーを使用できるようにして、
タスクマネージャーからの禁止をできないようにする方法はないかと思い、
再質問しました。
また、うえの方法以外でも常駐アプリをkillする方法が見つかってしまいました。
①アプリを多数起動して、メモリ不足で異常終了する常駐アプリがあるので
これを狙って常駐アプリを終了させる
②シャットダウンをする際に強制的に終了するかキャンセルを選択するの画面が出た際に
アプリが自動でkillされますが、途中でシャットダウンを注視して常駐プログラムだけを
killすることができてしまいます。
「コンピューターの構成」→「管理者テンプレート」→「システム」→「シャットダウンオプション」を選択
「シャットダウンをブロックするか取り消すアプリケーションの自動終了をオフにする」これで
有効、無効どちらにしても、同じようなことができてしまいます。
いろいろと問題が発覚したのですが、
常駐プログラムをkillされないように監視する常駐アプリ(サービス)がもし作成できれば、
ある程度カバーできるかと思い質問しました。やりたいことは
常駐アプリの管理下でないとユーザーが使用したいアプリの使用やネット検索をできないようにしたいです。
- 編集済み tttttttttttttttttttaaugh 2018年3月30日 16:55
回答
-
> サービス プロセスは Service Control Manager により管理され、
> その起動および停止も Service Control Manager 経由でないとできない。
> つまり、「監視サービス」プロセス側で Service Control Manager からの
> 停止要求を拒否するような作りにすれば、
> ユーザーが勝手にこのプロセスを落とすこともできない。まず大前提ですけが、私が「サービス プロセスとして実装すればできる」と言っているのは、タスクマネージャーやサービス アプレットあるいは sc, net, taskkill 等のコマンドなど、いわゆる「一般的な手法」での強制終了要求に対してです。
ハッキングやデバッキング テクニックを使えば、(その後システムが正常に動作し続けるかは別にして) プロセスを強制終了させる方法なんていくらでもあります。
例えば、ブルースクリーン発生時に記録される Bug Check Code (STOP Code) には、下記エラーがあります。
---------------------------------------------------------
(Developer Content) Bug Check 0xEF: CRITICAL_PROCESS_DIED
https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/bug-check-0xef--critical-process-diedBug Check 0xC000021A: STATUS_SYSTEM_PROCESS_TERMINATED
https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/bug-check-0xc000021a--status-system-process-terminated
---------------------------------------------------------上記サイトでも説明されていますが、WinLogon や CSRSS などの主要プロセスで問題が検出された場合、Windows システムは PC の保全を図るために強制的にブルースクリーン (BSOD) を発生させます。
自プロセスがいかなる場合も監視機能を提供し続け、強制終了させられてしまった時のことを考慮するのであれば、ここまで防御策を講じる必要がある、ということです。
ここまで強力な防御策を講じている 3rd ベンダー製サービスが存在するのかは私は知りませんが、カーネル モード ドライバを開発するぐらいの「根性」があるなら、これに近い機能の実現は技術的には可能だと思っています。
以前から言っているように、セキュリティ対策ソフトが提供する多くのサービスは、ユーザーからの「一般的な手法」による強制終了要求に対し防御策を講じています。
試しに、お使いになっているセキュリティ対策ソフトが提供してるプロセスを、Task Manager 等から落としてみてください。
落とせないプロセスが存在するはずです。
私がサービス プロセスとして実装すればできると言っているのは、これと同等のレベルということが大前提です。
(ただし今の質問者さんのスキルでは、このレベルでもハードルは超高いと思います。)> このようなサービスを
> 管理者アカウントのパスワードを知らない、
> 標準ユーザーは落とすことは絶対できず、
> 管理者ユーザーのみが落とすことができるのでしょうか。そのサービス プロセスが、いかなる場合でも終了要求を拒否しているのであれば、管理者権限ユーザであっても「一般的な手法」ではそのサービスを落とすことはできません。
(ただし、プロセスの「強制終了要求」と Windows システムの「シャットダウン要求」は、全く別物です。)
なので、隠しレジストリや隠ぺいしたインターフェイスをあらかじめ用意しておくのが、一般的な手法だと思います。
ただ、「ユーザーからは強制終了できない監視用サービス」を作成出来たとしても、外部から自プロセスへの侵入に対する防御策を講じない限り、全く意味がないと思います。
その「監視用サービス」が外部から乗っ取られたら、全くの役立たずですから。
外部プロセスからの防御に関しては、本質問とは全く別次元の話になります。
以下個人的な感想ですが。。。。
ご自身が実現 (開発) したいアプリとご自身の技術的スキルに、大きな乖離があるように思います。
現状までの質問のやり取りでは、ご自身の脳内妄想仕様と実際の仕様がごちゃごちゃになった「カオス」状態がさらに深まっただけではないかと。。。。
「Windows システム内部の詳細は知らないけど、絶対に強制終了できない堅牢な監視アプリ (サービス) を作りたい」というのは、あまりにも虫のいい話では?
もう少し、ご自身の技術的スキルに合わせたソフトウェア開発を目指した方がよいのでは?
(何気なく気軽に質問されているようですが、この返信書くのも結構大変なんですよ。。。。提示したリンクも読んでないようだし。。。。)
- 編集済み お馬鹿 2018年3月29日 1:59
- 回答としてマーク tttttttttttttttttttaaugh 2018年4月4日 6:23
すべての返信
-
不可能だと思いますよ。
一般のアプリやソフトを OS の一部の様に振舞わせたい と言う事でしょ。
他のご質問も拝見していましたが、
どのご要望も、Shell を弄らないと基本的な解決には結び付かないと思いますし、
お使いのソフトの多くは Windows10 対応ではないものですよね。
Linux の様に、Windows でも Shell そのものを書く事は一応は可能だった筈です。
相当な専門知識が必要と思いますし、 一般的で無いとも思いますが、
あなたのご要望を満たすにはそれをするしか無いと思います。
既存 OS の設定変更では対応出来ない事を求めてらっしゃると思います。
或いは、諦めるか。今回の件は、 プログラミングする勇気があれば、 プロセスを監視し、該当プロセスが Kill された場合に、再起動させるものを書く事で、ご要望は達成出来ない事はないですが。 これも Kill され得ますからねぇ。
- 編集済み ShiroYuki_Mot 2017年8月23日 3:07 追記
-
ユーザーが非管理者なら、完全に希望を満たせるのでしょうか。
(すいません、非管理者にたいしての質問でした。
記載したハイパーリンクにあるようなprocess explorerのようなもの
をインストールされない限り、強制終了は防ぐことができるでしょうか。
また、管理者権限を持っているユーザー利用している中で強制終了をきんしすることができないというのは
-
そもそも「監視アプリケーション」であることが問題なのでは?
「監視アプリケーション」ではなく、「監視サービス」としてそのプロセスを作成すればいいのでは?
つまり、アプリケーションなどの一般のユーザー プロセスではなく、サービス プロセスとして実装すればできると思います。------------------------------------
Windowsサービス
https://ja.wikipedia.org/wiki/Windows%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9
------------------------------------サービス プロセスは Service Control Manager により管理され、その起動および停止も Service Control Manager 経由でないとできない。
つまり、「監視サービス」プロセス側で Service Control Manager からの停止要求を拒否するような作りにすれば、ユーザーが勝手にこのプロセスを落とすこともできない。
セキュリティ対策ソフトが多くのサービス プロセスを提供している理由の一つは、怒らくこのため。
実際、セキュリティ対策ソフトのサービスの多くは、Service Control Manager からの停止要求を拒否し、落とせないようにしている。ただしサービス プロセスはセッション0で動作するので、UI を持ってはいけない等、色々な縛りがあります。- 回答としてマーク tttttttttttttttttttaaugh 2017年8月25日 13:13
- 回答としてマークされていない tttttttttttttttttttaaugh 2018年3月25日 13:59
-
> タスクマネージャーでの停止を無効にして、
> service control managerでしか停止できないように実装するということでしょうか。
> タスクマネージャーでの停止を無効というのは
> タスクマネージャーを管理者権限で開かないとサービスを停止できないということでしょうか。
> それとも非管理者と管理者両方つまり、
> 全面的にタスクマネージャーからのサービスをの停止を禁止するということでしょうか。違います。
そもそも私は「タスクマネージャーでの停止を無効にして」などという説明をした覚えが一切ないのですが、私の返信のどこにそのような説明があったのでしょうか?
Service Control Manager 経由で該当サービス プロセスに渡されてくる停止要求を拒否する実装にすれば、タスクマネージャーやサービス アプレット、あるいは sc / net コマンド等からの停止を抑止できる、ということです。 -
すいません。理解が行き届いていませんでした。
サービスは停止するときは
タスクマネージャーやサービス アプレット、あるいは sc / net コマンドなど→Service Control Manager→実行
という風にservice control manager を必ず経由するようになっていて
監視サービス」プロセス側で Service Control Manager からの停止要求を
拒否するということはService Control Managerで関門を立てておいて、実行を阻止して、
サービス停止を実行させないようにするということでしょうか。
-
強制終了できない監視アプリケーションを作りたいと思っています。
どんなツール(タスクマネージャーやサービス アプレット、あるいは sc / net コマンド等からの停止)
を使ってサービスを停止させようとすると、service controlを必ず経由するので、
service control managerからの停止要求をサービス側が拒否すると
サービスはどんなツールを使っても
終了できないプログラムとなるのでしょうか。あともう一つ質問も何ですが、
service control managerからの停止要求をサービス側が拒否するように実装とは
具体的にどういった関数を呼び込んでいるのでしょうか。どこら辺を勉強すればいいでしょうか。
重ね重ね申しわけありません。
-
> どこら辺を勉強すればいいでしょうか。
ググればいくらでも出てくるのでは?
---------------------------------
How to: Create Windows Services
https://docs.microsoft.com/en-us/dotnet/framework/windows-services/how-to-create-windows-servicesHow do I prevent users from terminating a service?
https://blogs.msdn.microsoft.com/oldnewthing/20170123-00/?p=95235
---------------------------------Windows サービスの概要を理解できていないようですが、その状態で具体的な関数を提示したとして、それを理解できるのでしょうか? -
老婆心ながらアドバイスですが、service control manager からの要求でも終了しないような「強制終了できない監視アプリケーション」を作成されたいということですが、仮にそのような「強制終了できない監視アプリケーション」に不具合があってシステム全体に大きな影響を及ぼすような動作になった場合、「強制終了できない」のでシステム全体をシャットダウンするしかなくなります。またその常駐のさせ方によっては再起動後も同じ現象が発生し、回避が非常に困難な状況になる可能性もあります。つまり「強制終了できない監視アプリケーション」を作成するとしたら、それは普通のアプリケーションに比べて極めて高い品質や安定性を持っていなければならないということです。
ここで質問して「WINDOWSサービスを検討してみます。存在すら知りませんでした」と仰っているようなレベルであれば、それは困難というより無謀というべきことだと思います。そのような監視機構を考えるのであれば、- 監視したい項目が何か明確にする
- Windows の標準またはオプションの機能で実現できないか検討する
- それで満たされない場合、サードパーティー製の実績のある製品で実現できないか検討する
ことをお勧めします。
hebikuzure
- 監視したい項目が何か明確にする
-
> 仮にそのような「強制終了できない監視アプリケーション」に不具合があって
> システム全体に大きな影響を及ぼすような動作になった場合、
>「強制終了できない」のでシステム全体をシャットダウンするしかなくなります。サービス側のつくりにもよりますが、必ずしもそんなことはないと思います。
実際、セキュリティ関連ソフトが提供しているサービスの多くが、「強制終了できない」実装になっていますし、それらサービス プロセス側で不具合を起こしている事例には多々遭遇しました。
(それらサービス プロセスのクラッシュ等。)
ですが「強制終了できない」という実装が、「システム全体をシャットダウンするしかなくなります」という状況に陥らせた事例には出くわしたことがありません。
具体的にどのようなシナリオでそのような状況に陥ることを想定されているのか、ご教授いただければ幸いです。 -
<サービス プロセスは Service Control Manager により管理され、その起動および停止も Service Control Manager 経由でないとできない。
つまり、「監視サービス」プロセス側で Service Control Manager からの停止要求を拒否するような作りにすれば、ユーザーが勝手にこのプロセスを落とすこともできない。このようなサービスを
管理者アカウントのパスワードを知らない、標準ユーザーは落とすことは絶対できず、
管理者ユーザーのみが落とすことができるのでしょうか。
- 編集済み tttttttttttttttttttaaugh 2018年3月28日 23:54
-
> サービス プロセスは Service Control Manager により管理され、
> その起動および停止も Service Control Manager 経由でないとできない。
> つまり、「監視サービス」プロセス側で Service Control Manager からの
> 停止要求を拒否するような作りにすれば、
> ユーザーが勝手にこのプロセスを落とすこともできない。まず大前提ですけが、私が「サービス プロセスとして実装すればできる」と言っているのは、タスクマネージャーやサービス アプレットあるいは sc, net, taskkill 等のコマンドなど、いわゆる「一般的な手法」での強制終了要求に対してです。
ハッキングやデバッキング テクニックを使えば、(その後システムが正常に動作し続けるかは別にして) プロセスを強制終了させる方法なんていくらでもあります。
例えば、ブルースクリーン発生時に記録される Bug Check Code (STOP Code) には、下記エラーがあります。
---------------------------------------------------------
(Developer Content) Bug Check 0xEF: CRITICAL_PROCESS_DIED
https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/bug-check-0xef--critical-process-diedBug Check 0xC000021A: STATUS_SYSTEM_PROCESS_TERMINATED
https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/bug-check-0xc000021a--status-system-process-terminated
---------------------------------------------------------上記サイトでも説明されていますが、WinLogon や CSRSS などの主要プロセスで問題が検出された場合、Windows システムは PC の保全を図るために強制的にブルースクリーン (BSOD) を発生させます。
自プロセスがいかなる場合も監視機能を提供し続け、強制終了させられてしまった時のことを考慮するのであれば、ここまで防御策を講じる必要がある、ということです。
ここまで強力な防御策を講じている 3rd ベンダー製サービスが存在するのかは私は知りませんが、カーネル モード ドライバを開発するぐらいの「根性」があるなら、これに近い機能の実現は技術的には可能だと思っています。
以前から言っているように、セキュリティ対策ソフトが提供する多くのサービスは、ユーザーからの「一般的な手法」による強制終了要求に対し防御策を講じています。
試しに、お使いになっているセキュリティ対策ソフトが提供してるプロセスを、Task Manager 等から落としてみてください。
落とせないプロセスが存在するはずです。
私がサービス プロセスとして実装すればできると言っているのは、これと同等のレベルということが大前提です。
(ただし今の質問者さんのスキルでは、このレベルでもハードルは超高いと思います。)> このようなサービスを
> 管理者アカウントのパスワードを知らない、
> 標準ユーザーは落とすことは絶対できず、
> 管理者ユーザーのみが落とすことができるのでしょうか。そのサービス プロセスが、いかなる場合でも終了要求を拒否しているのであれば、管理者権限ユーザであっても「一般的な手法」ではそのサービスを落とすことはできません。
(ただし、プロセスの「強制終了要求」と Windows システムの「シャットダウン要求」は、全く別物です。)
なので、隠しレジストリや隠ぺいしたインターフェイスをあらかじめ用意しておくのが、一般的な手法だと思います。
ただ、「ユーザーからは強制終了できない監視用サービス」を作成出来たとしても、外部から自プロセスへの侵入に対する防御策を講じない限り、全く意味がないと思います。
その「監視用サービス」が外部から乗っ取られたら、全くの役立たずですから。
外部プロセスからの防御に関しては、本質問とは全く別次元の話になります。
以下個人的な感想ですが。。。。
ご自身が実現 (開発) したいアプリとご自身の技術的スキルに、大きな乖離があるように思います。
現状までの質問のやり取りでは、ご自身の脳内妄想仕様と実際の仕様がごちゃごちゃになった「カオス」状態がさらに深まっただけではないかと。。。。
「Windows システム内部の詳細は知らないけど、絶対に強制終了できない堅牢な監視アプリ (サービス) を作りたい」というのは、あまりにも虫のいい話では?
もう少し、ご自身の技術的スキルに合わせたソフトウェア開発を目指した方がよいのでは?
(何気なく気軽に質問されているようですが、この返信書くのも結構大変なんですよ。。。。提示したリンクも読んでないようだし。。。。)
- 編集済み お馬鹿 2018年3月29日 1:59
- 回答としてマーク tttttttttttttttttttaaugh 2018年4月4日 6:23
-
返信ありがとうございます。
事情説明がなされていませんでした。申し訳ありません。質問分に追記が載せてあります。
<WinLogon や CSRSS などの主要プロセスで問題が検出された場合、Windows システムは PC の保全を図るために強制的にブルースクリーン (BSOD) を発生させます。
自プロセスがいかなる場合も監視機能を提供し続け、強制終了させられてしまった時のことを考慮するのであれば、ここまで防御策を講じる必要がある、ということです。ブルースクリーンを発生させて、常駐アプリ(またはサービス)を強制終了するということでしょうか。
常駐アプリの管理下でないとユーザーが使用したいアプリの使用やネット検索をできないようにしたいので、
これは実装できなくてもよさそうです。
ソフトウェアの制限ポリシーでのセキュリティレベルで許可しないやセキュリティーポリシーのハッシュの規則で制限したら、ハッキングやデバッキング テクニックは封じることはできるのでしょうか。なんとなく、新規にソフトウェアをインストールしないとできないことだと思ったのですが、どうなんでしょうか。
ハッキングやデバッキング テクニックは相当な技術が要求されるのでしょうか。めちゃくちゃ高度であったら
これについては対策をしないつもりです。
- 編集済み tttttttttttttttttttaaugh 2018年3月30日 17:05
-
ハッキングやデバッキング テクニックに対しての対策はとりあえず考えないようにします。
押し付けるような形になってしまい申し訳ありませんでした。
一般的な手法に関してはセキュリティーポリシーを使ってできるだけ制限してみます。
回答ありがとうございました。
- 編集済み tttttttttttttttttttaaugh 2018年4月4日 6:55