SAM ローカル アカウント¶
SAM の内容¶
セキュリティ アカウント マネージャー (SAM) ハイブには、ローカル アカウント レコードが保存されます。 Juntei は、アカウント名、RID、プロファイル/コメント フィールド、アカウント制御フラグ、最終ログオン/パスワードのタイムスタンプ、カウンター、パスワードのヒント、Microsoft アカウントのリンク、プロファイル パス、および Windows がサインイン UI からアカウントを非表示にするかどうかをデコードします。
これは、新しく作成されたローカル管理者、有効な休眠アカウント、パスワードの変更、非表示のアカウント、水平移動ステージング アカウントを見つけるのに役立ちます。
この証拠から判断できること: ローカル SAM に、その状態のアカウントが記録されていました。これは完全な認証履歴ではなく、ドメインアカウントを記録するものでもありません。
保存場所と収集¶
C:\Windows\System32\config\SAM
C:\Windows\System32\config\SAM.LOG1
C:\Windows\System32\config\SAM.LOG2
十分な権限/raw アクセスを使用してハイブとログを収集します。ホスト ID は、コレクション内の対応する SYSTEM ハイブから強化できます。
分析時の注意点¶
- このコマンドは、Active Directory ドメイン ユーザーではなく、local アカウントを解析します。
- Juntei は意図的にパスワード ハッシュを抽出しません。
- RID 500 は、名前が変更されても組み込みの管理者アカウントです。名前だけでは不十分です。
LastLogonとカウンターはレジストリの状態であり、セッションごとの完全な監査証跡ではありません。HiddenFromLogonUIは、サインイン画面からアカウントを非表示にします。アカウントは無効になりません。- 組み込みの
DefaultAccountおよびWDAGUtilityAccountは合法的に非表示にすることができます。 - 破損または欠落している
F値からの Null アカウント フラグを有効として解釈してはなりません。 NamesKeyLastWrittenUTCはアカウント名の登録コンテキストに近似しますが、保証された作成時間ではありません。
Juntei で解析する¶
Usage: juntei parse-registry sam <INPUT> [OPTIONS]
Input:
-d, --directory <DIR> Recursively find SAM hives
-f, --file <FILE> Parse one SAM hive
--log1/--log2 Supply transaction logs explicitly
--no-logs Do not replay logs
Filtering:
--rid <RID> Parse one decimal RID (example: 500)
Output:
-o, --output <FILE> Save records
-t, --output-type <TYPE> csv, json, or jsonl
juntei parse-registry sam -f SAM -o accounts.csv
juntei parse-registry sam -f SAM --rid 500 -t jsonl | jq .
juntei parse-registry sam -d evidence/ -t jsonl \
| jq 'select(.HiddenFromLogonUi == true or (.AccountFlags | index("disabled") | not))'
出力フィールド¶
| フィールド | 解釈 |
|---|---|
Host, SourcePath |
ホスト コンテキストと正確な SAM ハイブ。 |
RID |
相対識別子。強力なアカウント ID ピボット。 500 はビルトイン管理者です。 |
User |
現在のローカルアカウント名。名前は変更できます。 RID で関連付けます。 |
FullName, Comment, UserComment |
説明文。攻撃者によって制御されており、レビューを偽装するのに役立ちます。 |
AccountFlags |
無効、ロックアウト、パスワード不要、通常アカウント、パスワード無期限などのデコードされた状態。 |
AccountFlagsValue |
検証用の生の数値フラグとサポートされていないビット。 |
CountryCode, CodePage |
アカウントのロケール/コードページのメタデータ。通常、属性ではなく文脈が重要です。 |
LastLogonUTC, LastLogonWholeSecondsUTC |
完全な精度と整数秒間の互換性で、前回のログオン状態と同じ状態になります。完全な歴史ではありません。 |
PasswordLastSetUTC |
パスワード変更時間を記録。予期しない最近/古い値を調査します。 |
AccountExpirationUTC |
有効期限が有限の場合に設定されます。 Null は、「設定しない」または「設定しない」ことを意味します。 |
LastFailedLogonUTC |
最後に記録された失敗したローカル ログオンは SAM 状態です。セキュリティ イベントを裏付けます。 |
FailedLogonCount, LogonCount |
Windows 固有の更新動作を伴う累積/状態カウンター。正確なイベント数ではなく、コンテキストとして使用します。 |
PasswordHint |
ユーザーが提供する機密性の高いヒント。パスワードのパターンが公開される可能性があります。適切に扱ってください。 |
InternetUserName |
リンクされた Microsoft アカウント ID (存在する場合)。 |
HiddenFromLogonUI |
UI 非表示状態。高い RID/予期しないカスタム アカウントを確認します。障害者という意味ではありません。 |
HomeDirectory, HomeDrive, ProfilePath, LogonScript |
ローカルアカウント環境/ログオン構成。異常なスクリプト/UNC パスは永続性を示している可能性があります。 |
KeyLastWrittenUTC |
RID アカウント キーの変更時間。フィールド固有ではなくキーレベル。 |
NamesKeyLastWrittenUTC |
ユーザー名マッピングキーの変更時間。便利なアカウントのライフサイクルの概算。 |
LastLogonFiletime, PasswordLastSetFiletime, AccountExpirationFiletime, LastFailedLogonFiletime |
生の 64 ビット FILETIME 値は、検証および特別なセンチネル処理のために保持されます。 |
TransactionLogStatus, LogsApplied |
レジストリの再生コンテキスト。 |
Problems |
F/V/名前の不一致、エントリの欠落、オフセットの不正、またはデコードの損傷。 |
調査戦略¶
- RID、名前、フラグ、プロファイル パス、および
NamesKeyLastWrittenUTCをホスト ベースラインと比較します。 - 有効な RID 1000+ アカウント、パスワード不要、無期限、非表示、または最近変更されたアカウントを確認します。
- セキュリティ 4720/4722/4724/4732 イベント、ログオン イベント、プロファイル作成、およびリモート アクティビティと関連付けます。
- 収集前にアカウントが削除された場合は、レジストリの回復履歴を検索します。
- 正規のプロビジョニング/デフォルト アカウントと、攻撃者が作成した対話型アカウントを区別します。