# ACL - DACL/SACL/ACE ## **アクセス制御リスト (ACL)** **ACLは、オブジェクトとそのプロパティに適用される保護を定義するACEの順序付けられたリストです。** 各**ACE**はセキュリティ**プリンシパル**を識別し、そのセキュリティプリンシパルに対して許可される、拒否される、または監査される**アクセス権のセット**を指定します。 オブジェクトのセキュリティ記述子には**2つのACL**を含むことができます: 1. アクセスを**許可**または**拒否**される**ユーザー**と**グループ**を**識別**する**DACL** 2. アクセスが**監査**される方法を制御する**SACL** ユーザーがファイルにアクセスしようとすると、WindowsシステムはAccessCheckを実行し、セキュリティ記述子とユーザーのアクセストークンを比較し、ACEの設定に応じてユーザーにアクセスが許可されるかどうか、どのようなアクセスが許可されるかを評価します。 ### **裁量的アクセス制御リスト (DACL)** DACL(通常はACLと言及される)は、オブジェクトにアクセス許可を割り当てられたり拒否されたりするユーザーとグループを識別します。セキュリティ可能なオブジェクトに対してペアになったACE(アカウント+アクセス権)のリストを含みます。 ### **システムアクセス制御リスト (SACL)** SACLは、セキュリティオブジェクトへのアクセスを監視することを可能にします。SACL内のACEは、**セキュリティイベントログにログされるアクセスの種類を決定します**。監視ツールを使用すると、悪意のあるユーザーがセキュリティオブジェクトにアクセスしようとした場合に、適切な人々に警報を発することができ、インシデントシナリオでは、ログを使用して時間を遡ってステップを追跡することができます。最後に、アクセス問題のトラブルシューティングのためにログを有効にすることができます。 ## システムがACLを使用する方法 システムに**ログオンした各ユーザーは、そのログオンセッションのセキュリティ情報を含むアクセストークンを保持しています**。システムはユーザーがログオンするときにアクセストークンを作成します。**ユーザーを代表して実行されるすべてのプロセスは、アクセストークンのコピーを持っています**。トークンはユーザー、ユーザーのグループ、およびユーザーの権限を識別します。トークンには、現在のログオンセッションを識別するログオンSID(セキュリティ識別子)も含まれています。 スレッドがセキュリティ可能なオブジェクトにアクセスしようとすると、LSASS(ローカルセキュリティオーソリティ)はアクセスを許可するか拒否します。これを行うために、**LSASSはSDSデータストリーム内のDACL**(裁量的アクセス制御リスト)を検索し、スレッドに適用されるACEを探します。 **オブジェクトのDACL内の各ACE**は、セキュリティプリンシパルまたはログオンセッションに対して許可または拒否されるアクセス権を指定します。オブジェクトの所有者がそのオブジェクトのDACLにACEを作成していない場合、システムはすぐにアクセス権を付与します。 LSASSがACEを見つけると、スレッドのアクセストークンに識別されている受託者SIDと各ACEの受託者SIDを比較します。 ### ACE AD内のすべてのセキュリティ可能なオブジェクトに適用できる**`3`つの主要なACEのタイプ**があります: | **ACE** | **説明** | | ------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **`アクセス拒否ACE`** | DACL内で使用され、オブジェクトへのアクセスが明示的に拒否されているユーザーやグループを示します | | **`アクセス許可ACE`** | DACL内で使用され、オブジェクトへのアクセスが明示的に許可されているユーザーやグループを示します | | **`システム監査ACE`** | SACL内で使用され、ユーザーやグループがオブジェクトにアクセスしようとしたときに監査ログを生成します。アクセスが許可されたかどうか、どのようなタイプのアクセスが発生したかを記録します | 各ACEは以下の`4`つのコンポーネントで構成されています: 1. オブジェクトへのアクセス権を持つユーザー/グループのセキュリティ識別子(SID)(またはグラフィカルにはプリンシパル名) 2. ACEのタイプを示すフラグ(アクセス拒否、許可、またはシステム監査ACE) 3. 与えられたACEエントリがプライマリまたは親オブジェクトから子コンテナ/オブジェクトに継承されるかどうかを指定するフラグのセット 4. [アクセスマスク](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-dtyp/7a53f60e-e730-4dfe-bbe9-b21b62eb790b?redirectedfrom=MSDN)は、オブジェクトに付与される権利を定義する32ビット値です システムは、以下のいずれかのイベントが発生するまで、順番に各ACEを検査します: * **アクセス拒否ACEが明示的に**スレッドのアクセストークンにリストされている受託者のいずれかに要求されたアクセス権を拒否します。 * **1つ以上のアクセス許可ACE**がスレッドのアクセストークンにリストされている受託者に対して要求されたすべてのアクセス権を明示的に付与します。 * すべてのACEがチェックされ、まだ少なくとも**1つの要求されたアクセス権が明示的に許可されていない**場合、その場合、アクセスは暗黙的に**拒否**されます。 ### ACEの順序 **要求されたアクセスが明示的に許可または拒否されるとシステムがACEのチェックを停止するため**、DACL内のACEの順序は重要です。 DACL内のACEの好ましい順序は「標準的な」順序と呼ばれます。Windows 2000およびWindows Server 2003の場合、標準的な順序は以下の通りです: 1. すべての**明示的な**ACEは、**継承された**ACEの前にグループ化されます。 2. **明示的な**ACEのグループ内では、**アクセス拒否**ACEが**アクセス許可**ACEの前に配置されます。 3. **継承された**グループ内では、**子オブジェクトの親から継承された**ACEが最初に来ます。その後、**祖父母から継承された**ACE、**その後**オブジェクトのツリーを上がっていきます。その後、**アクセス拒否**ACEが**アクセス許可**ACEの前に配置されます。 以下の図は、ACEの標準的な順序を示しています: ### ACEの標準的な順序 ![ACE](https://www.ntfs.com/images/screenshots/ACEs.gif) 標準的な順序は、以下が行われることを保証します: * 明示的な**アクセス拒否ACEは、明示的なアクセス許可ACEに関係なく施行されます**。これは、オブジェクトの所有者がユーザーグループにアクセスを許可し、そのグループのサブセットにアクセスを拒否する権限を定義できることを意味します。 * すべての**明示的なACEは、継承されたACEの前に処理されます**。これは裁量的アクセス制御の概念と一致しています:子オブジェクト(例えばファイル)へのアクセスは、親オブジェクト(例えばフォルダ)の所有者ではなく、子の所有者の裁量によります。子オブジェクトの所有者は、子に直接権限を定義できます。その結果、継承された権限の影響が変更されます。 ### GUIの例 これは、ACL、DACL、およびACEを示すフォルダのクラシックなセキュリティタブです: ![](../../.gitbook/assets/classicsectab.jpg) **詳細ボタン**をクリックすると、継承などのより多くのオプションが表示されます: ![](../../.gitbook/assets/aceinheritance.jpg) セキュリティプリンシパルを追加または編集する場合: ![](../../.gitbook/assets/editseprincipalpointers1.jpg) 最後に、監査タブにあるSACLです: ![](../../.gitbook/assets/audit-tab.jpg) ### 例:グループへの明示的なアクセス拒否 この例では、アクセス許可されたグループはEveryoneで、アクセス拒否されたグループはEveryoneのサブセットであるMarketingです。 コストフォルダへのMarketingグループのアクセスを拒否したい場合、コストフォルダのACEが標準的な順序であれば、Marketingを拒否するACEはEveryoneを許可するACEの前に来ます。 アクセスチェック中、オペレーティングシステムはオブジェクトのDACLに表示される順序でACEをステップスルーするため、拒否ACEは許可ACEの前に処理されます。その結果、Marketingグループのメンバーはアクセスが拒否されます。他のすべての人はオブジェクトへのアクセスが許可されます。 ### 例:継承される前の明示的 この例では、コストフォルダにはMarketing(親オブジェクト)へのアクセスを拒否する継承可能なACEがあります。言い換えると、Marketingグループのメンバー(または子供)はすべて継承によってアクセスが拒否されます。 MarketingディレクターであるBobにアクセスを許可したいです。MarketingグループのメンバーであるBobは、継承によってコストフォルダへのアクセスが拒否されます。子オブジェクトの所有者(ユーザーBob)は、コストフォルダへのアクセスを許可する明示的なACEを定義します。子オブジェクトのACEが標準的な順序であれば、Bobへのアクセスを許可する明示的なACEは、Marketingグループへのアクセスを拒否する継承されたACEの前に来ます。 アクセスチェック中、オペレーティングシステムはMarketingグループへのアクセスを拒否するACEに到達する前に、Bobへのアクセスを許可するACEに到達します。その結果、BobはMarketingグループのメンバーであるにもかかわらず、オブジェクトへのアクセスが許可されます。Marketingグループの他のメンバーはアクセスが拒否されます。 ### アクセス制御エントリ 前述のように、ACL(アクセス制御リスト)はACE(アクセス制御エントリ)の順序付けられたリストです。各ACEには以下が含まれます: * 特定のユーザーまたはグループを識別するSID(セキュリティ識別子)。 * アクセス権を指定するアクセスマスク。 * 子オブジェクトがACEを継承できるかどうかを決定するビットフラグのセット。 * ACEのタイプを示すフラグ。 ACEは基本的に似ています。それらを区別するのは、継承とオブジェクトアクセスに対する制御の程度です。ACEには2つのタイプがあります: * すべてのセキュリティ可能なオブジェクトに添付される汎用タイプ。 * Active DirectoryオブジェクトのACLでのみ発生するオブジェクト固有のタイプ。 ### 汎用ACE 汎用ACEは、それらを継承できる子オブジェクトの種類を制御する上で限定的な制御を提供します。基本的に、コンテナと非コンテナを区別する