12 KiB
ACL - DACL/SACL/ACE
アクセス制御リスト (ACL)
ACLは、オブジェクトとそのプロパティに適用される保護を定義するACEの順序付けられたリストです。 各ACEはセキュリティプリンシパルを識別し、そのセキュリティプリンシパルに対して許可される、拒否される、または監査されるアクセス権のセットを指定します。
オブジェクトのセキュリティ記述子には2つのACLを含むことができます:
- アクセスを許可または拒否されるユーザーとグループを識別するDACL
- アクセスが監査される方法を制御する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
つのコンポーネントで構成されています:
- オブジェクトへのアクセス権を持つユーザー/グループのセキュリティ識別子(SID)(またはグラフィカルにはプリンシパル名)
- ACEのタイプを示すフラグ(アクセス拒否、許可、またはシステム監査ACE)
- 与えられたACEエントリがプライマリまたは親オブジェクトから子コンテナ/オブジェクトに継承されるかどうかを指定するフラグのセット
- アクセスマスクは、オブジェクトに付与される権利を定義する32ビット値です
システムは、以下のいずれかのイベントが発生するまで、順番に各ACEを検査します:
- アクセス拒否ACEが明示的にスレッドのアクセストークンにリストされている受託者のいずれかに要求されたアクセス権を拒否します。
- 1つ以上のアクセス許可ACEがスレッドのアクセストークンにリストされている受託者に対して要求されたすべてのアクセス権を明示的に付与します。
- すべてのACEがチェックされ、まだ少なくとも1つの要求されたアクセス権が明示的に許可されていない場合、その場合、アクセスは暗黙的に拒否されます。
ACEの順序
要求されたアクセスが明示的に許可または拒否されるとシステムがACEのチェックを停止するため、DACL内のACEの順序は重要です。
DACL内のACEの好ましい順序は「標準的な」順序と呼ばれます。Windows 2000およびWindows Server 2003の場合、標準的な順序は以下の通りです:
- すべての明示的なACEは、継承されたACEの前にグループ化されます。
- 明示的なACEのグループ内では、アクセス拒否ACEがアクセス許可ACEの前に配置されます。
- 継承されたグループ内では、子オブジェクトの親から継承されたACEが最初に来ます。その後、祖父母から継承されたACE、その後オブジェクトのツリーを上がっていきます。その後、アクセス拒否ACEがアクセス許可ACEの前に配置されます。
以下の図は、ACEの標準的な順序を示しています:
ACEの標準的な順序
標準的な順序は、以下が行われることを保証します:
- 明示的なアクセス拒否ACEは、明示的なアクセス許可ACEに関係なく施行されます。これは、オブジェクトの所有者がユーザーグループにアクセスを許可し、そのグループのサブセットにアクセスを拒否する権限を定義できることを意味します。
- すべての明示的なACEは、継承されたACEの前に処理されます。これは裁量的アクセス制御の概念と一致しています:子オブジェクト(例えばファイル)へのアクセスは、親オブジェクト(例えばフォルダ)の所有者ではなく、子の所有者の裁量によります。子オブジェクトの所有者は、子に直接権限を定義できます。その結果、継承された権限の影響が変更されます。
GUIの例
これは、ACL、DACL、およびACEを示すフォルダのクラシックなセキュリティタブです:
詳細ボタンをクリックすると、継承などのより多くのオプションが表示されます:
セキュリティプリンシパルを追加または編集する場合:
最後に、監査タブにあるSACLです:
例:グループへの明示的なアクセス拒否
この例では、アクセス許可されたグループは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は、それらを継承できる子オブジェクトの種類を制御する上で限定的な制御を提供します。基本的に、コンテナと非コンテナを区別する