セキュリティ記述子 ($Secure:$SDS)¶
$SDSとは¶
NTFS 上のすべてのファイルとディレクトリには、セキュリティ記述子 があります。つまり、その所有者、プライマリ グループ、DACL (誰がそれを使用して何を行うことができるか)、およびSACL (監査されるアクセスとその整合性ラベル)。 NTFS は、$Secure ファイルの $SDS ストリーム (MFT エントリ 9) に個別の各記述子を 1 回保持し、それに security ID を与えます。ファイルの $STANDARD_INFORMATION には、セキュリティ ID (parse-ntfs mft の SID 列) のみが記録されます。 $SDS はそれを所有者と ACL に変更します。
$SDS は 256 KiB ブロック内にあり、それぞれの後にそのコピー (ミラー) が続きます。各エントリにはその記述子のハッシュがあり、NTFS は既存の記述子 ($SDH) を検索するために使用し、セキュリティ ID ($SII はインデックスを作成します) を持ちます。
この証拠から判断できること: SID でこの記述子を参照するファイルには、その $MFT レコードの最終書き込み時点で、この所有者と ACL が設定されていました。通常、所有者はファイルを作成したアカウントですが、管理者、インストーラ、所有権を取得するプログラムによって変更される場合があります。
保存場所と収集¶
raw 対応のフォレンジック ツールを使用して収集します。 : をファイル名に含めることはできないため、コレクションでは通常、$Secure_$SDS という名前が付けられます。同じボリュームの $MFT も一緒に収集します。
分析時の注意点¶
- 所有者は SID です。既知の SID (
NT AUTHORITY\SYSTEM、BUILTIN\Administrators、NT SERVICE\TrustedInstallerなど) と、マシンまたはドメインの組み込みアカウント (-500Administratorなど) のみが名前付けされます。その他は、ホストのSAM(SAM アカウント)、そのプロファイル リスト (System Information)、またはドメインを使用して解決します。 - 記述子は、同じ所有者と ACL を持つすべてのファイルで共有され、通常、それらのファイルが削除された後も
$SDSに残ります。$MFT内にファイルのない記述子は、それ自体では削除されたファイルではありません。 - ACEはアクセス履歴ではありません。 DACL は、誰がファイルにアクセスできるかを示します。イベント ログやその他のアーティファクトには、誰が実行したかが記録されています。 SACL の監査エントリは、ログに記録された内容ではなく、構成について説明します。
- ACE は、ACL にその順序でリストされます。 Juntei は有効なアクセスを計算しません。拒否エントリ、継承、グループ メンバーシップ、特権、および所有者の暗黙的権限はすべてカウントされます。
DACLおよびSACLは、icaclsと同様に、それぞれ ACE を書き込みます。SDDLは、サポートされているアクセス許可を 16 進数のマスクと SID としてのアカウントで表します。これは、バイナリ記述子のバイトごとのコピーではありません。表現できない条件付きテキストは空のままになり、診断されます。
Juntei で解析する¶
Usage: juntei parse-ntfs secure-sds <INPUT> [OPTIONS]
Input:
-d, --directory <DIR> Recursively find $SDS streams (with $SDS in their name, or starting with an $SDS entry)
-f, --file <FILE> Parse one $Secure:$SDS stream (often exported as $Secure_$SDS)
Output:
-o, --output <FILE> Save every security descriptor
-t, --output-type <TYPE> csv, json, or jsonl
juntei parse-ntfs secure-sds -f '$Secure_$SDS'
juntei parse-ntfs secure-sds -d evidence/ -o sds.csv
juntei parse-ntfs secure-sds -f '$Secure_$SDS' -t jsonl
概要では、記述子をカウントし、その所有者、それぞれが所有する記述子の数、NULL DACL (まったく制限なし) を持つ記述子、および損傷をリストします。
CSV 出力フィールド¶
| フィールド | 解釈 |
|---|---|
SourcePath |
入力ファイル。 |
SecurityID |
セキュリティ ID: 同じボリュームの parse-ntfs mft の SID と結合します。 |
Hash |
記述子とともに記録されたハッシュ。 |
EntryOffset |
ストリーム内のエントリの場所。 |
FromMirror |
True は、ミラー ブロックから読み取られたコピーの場合、そのエントリ (その後にリストされている) と異なるもの、または破損したエントリのコピーです。 |
Size |
エントリのサイズ (20 バイトのヘッダーを含む)。 |
Owner, OwnerName |
所有者の SID、およびよく知られている場合はその名前。 |
Group, GroupName |
プライマリ グループの SID、およびよく知られている場合はその名前。 Windows はアクセスチェックには使用しません。 |
Control |
記述子の制御フラグ: SE_DACL_PRESENT、SE_DACL_PROTECTED (継承ブロック)、SE_DACL_AUTO_INHERITED、… | が結合。 |
DACL-ACE-Count, DACL |
; で区切られた DACL のエントリ。 DACL がない場合は空です。 NULL DACL: no restriction 記述子が全員にすべてを許可する場合。 |
SACL-ACE-Count, SACL |
SACL のエントリ: 監査エントリ、必須整合性ラベル、プロセス信頼ラベル、およびリソース属性。 |
SDDL |
SDDL の記述子全体。内容がデコードされていない場合にのみ空になります。 |
Problems |
記述子のものではないハッシュ、デコードできない部分、タイプが不明な ACE。 |
DACL および SACL の各エントリは、icacls が書き込むのと同じように書き込まれます。アカウント、許可エントリでない場合はタイプ、継承フラグ、権利です。
| パート | 意味 |
|---|---|
| アカウント | 有名な名前、つまり SID。 |
(DENY), (AUDIT), (ACCESS_ALLOWED_CALLBACK), … |
ACE タイプ (許可エントリではない場合)。必須ラベルにはタイプが表示されません。 |
(I) |
親ディレクトリから継承されます。 |
(OI), (CI), (IO), (NP) |
ファイルによって継承される (オブジェクト継承)、ディレクトリによって継承される (コンテナ継承)、このオブジェクトではなくディレクトリのみによって継承される (継承のみ)、および 1 レベル下のみに継承される (伝播なし)。 |
(SA), (FA) |
アクセスの成功または失敗に関する監査エントリ。 |
(F), (M), (RX), (R), (W) |
フルコントロール、変更、読み取りと実行、読み取り、書き込み。 |
(RD,WD,AD,…) |
それ以外の特定の権限: データの読み取り、データの書き込み、データの追加、拡張属性の読み取りおよび書き込み (REA、WEA)、実行 (X)、子の削除 (DC)、属性の読み取りおよび書き込み (RA、WA)、削除(DE)、読み取り制御 (RC)、書き込み DAC (WDAC)、書き込み所有者 (WO)、同期 (S)、および一般権限 GA、 GR、GW、GE。 N はアクセスできません。 |
(NW), (NR), (NX) |
必須ラベルのポリシー: 書き込み禁止、読み取り禁止、実行禁止。 |
if (…) |
コールバック ACE の条件 ((WIN://SYSAPPID Contains "…") など): エントリは、それが true であるプロセスにのみ適用されます。 Windows は、アプリ コンテナー パッケージへのアクセスを許可するためにそれらを使用します。 |
プロセスの信頼ラベルとリソース属性はマスクを 16 進数で示し、リソース属性はそのクレーム (("IMAGELOAD",TU,0x0,1)) を示します。
JSON/JSONL には同じフィールドと名前があり、数値は数値、null は空の値、Problems はリストとなります。
調査戦略¶
- 同じボリュームの
$MFTを解析し、そのSIDをこの出力と結合します。各ファイルはその所有者と ACL を取得します。 - ユーザー アカウント (
S-1-5-21-…) である所有者を確認します。疑わしいアカウントがどのファイルを所有しているか、またどのアカウントがシステム ディレクトリ内のファイルを所有しているかを調べます。 - プログラムが実行またはロードされるディレクトリで、寛容な ACL を探します:
Everyone、Authenticated Users、またはUser((F)、(M)または(W)、および NULL DACL)。 - 1 つのファイルのみで使用される記述子、または通常とは異なるファイルのセットで使用される記述子は、通常のインストール以外で作成または変更されたファイルを示す可能性があります。
- セキュリティ イベント ログ エントリ (4670、4663 と SACL) および USN Journal の
SECURITY_CHANGEレコードを使用して、所有権とアクセス許可の変更を確認します。
さらに詳しい情報¶
- Microsoft: セキュリティ記述子
- Microsoft オープン仕様: MS-DTYP (セキュリティ記述子、ACE、条件式)
- Microsoft: セキュリティ記述子文字列形式 (SDDL)
- Microsoft: icacls
- libfsntfs: NTFS 形式のドキュメント (
$Secure) - ys-ntfs-parser (
secureクレート)
標準出力の構造化出力 (-o なしの -t) では、ストリームレベルの回復警告が標準エラー出力に送られるため、パイプは破損または回復された領域を隠すことなく、読み取り可能な CSV/JSON/JSONL を保持します。