これは、Windowsサービスの安全な構成に関するものです。ソフトウェア開発者は、Windowsプラットフォーム用のソフトウェアを設計するときに、最小特権の原則に十分な時間を費やさないことに何度も気づきました。非常に簡単で迅速なため、ローカルシステムとして実行するようにサービスをインストールします。たとえば、ファイルシステムとレジストリへのアクセス、バイナリと構成へのアクセス、および着信接続を受け入れてデータベースに接続するためのネットワークアクセスは可能です。 。ただし、Windowsでは、ユーザーLOCAL SERVICEとNETWORK SERVICEがあります。
これが私の質問です:単純なサーバー(上記のように、ファイルシステム/レジストリへのアクセス、ネットワークアクセス)をネットワークサービスとして実行できますか?この2人のユーザーは、このような状況に対してMSから提供されますか?それとも、開発者は、サービスが特別なことを何もしていなくても、必要な特権を毎回調査することになっていますか?たとえばネットワークサービスだけでは不十分ですが、最小限の特権の原則に従うためにユーザーを作成するには、どのツールを使用する必要がありますか?これは非常に関連があると思います。 Apacheで実行されているphpアプリケーションにwww-dataとしてコードを挿入することに成功した場合でも、マシンを完全に侵害するには、面倒な特権の昇格が必要です。 Linuxでは、この特定の問題はデフォルトで大幅に改善されています。
ここに私の質問があります:ネットワークサービスとして単純なサーバー(上記のような、ファイルシステム/レジストリへのアクセス、ネットワークアクセス)を実行できますか?この2人のユーザーは、このような状況に対してMSから提供されますか?
はい、できます。ネットワークサービスアカウントは、(私が覚えているように)権限が制限された最小特権のマシンアカウントです。実際には、不十分な例外が発生します。判明した場合、アプリケーションは、ネットワークサービスアカウントが権限を持っていないリソースを要求します。次に、アクセスしようとしているリソースに権利を付与し、それを基に構築しますが、ここで説明する高レベルの要件では、ファイル/レジストリおよびネットワークへのアクセスで十分です。
確かに、アプリケーションが新しいイベントログソースまたはレジストリキーを作成する場合、ネットワークサービスアカウントに権限を明示的に付与する必要があります。これは、開発者にとって大きな問題ではありません。
また、ドメインアカウントの使用を検討することもできます。たとえば、アプリケーション/サービスを私が言う方法から分離したい場合は、時間とともに断片化されたアクセス許可が一般的なネットワークサービスアカウントに変更されます。
一般的にこれらのアカウントを読むことをお勧めします: https://msdn.Microsoft.com/en-us/library/windows/desktop/ms686005(v = vs.85).aspx
Apacheで実行されているphpアプリケーションにwww-dataとしてコードを挿入することに成功した場合でも、マシンを完全に侵害するには、面倒な特権の昇格が必要です。
プライバシーに関係なく。 ESC。の(www)は退屈であるか退屈ではありません(個人的には純粋に楽しいと思います)。エスカレートされた場合、通常はボックスのパッチ管理が不十分であり、その段階ではサービスはそれほどではありません。
特権は、プログラマーとして操作したい最後の考えであり、その理由は明白です。アプリに十分な特権がない場合、適切なエラーが発生することはめったにありません:Insufficient privilege exception
。それが、プログラマーがそのような苦痛を避ける良い理由です。
したがって、せいぜい、すべてが機能し、テストされている開発の後期段階でこの部分を修正する必要があります。次に、権限を下げ、問題のあるところまですべての機能をテストします。
あなたが世話をしているスキームは、アプリのホスティング層によって提供されます。たとえば、.NETアプリはデフォルトでLocal System
。
最後に、ハッカーがあなたのカスタムコードのセキュリティ問題を見つけて侵入した場合、彼は本当に興味を持っており、コピー/貼り付けのエクスプロイトには興味がないので、難しいのはコードを壊して特権昇格のバグを見つけることだけです。時間/お金の。 これ Linuxカーネルの権限昇格の脆弱性は2012年から利用可能でした(ほとんどのAndroidデバイスを含む)から最近まで)。