LSA の秘密¶
彼らは何ですか¶
ローカル セキュリティ機関 (LSA) は、SECURITY ハイブに秘密を保管します。これらには、自動ログオン パスワード、サービスを実行するアカウントのパスワード、コンピューター アカウントのドメイン パスワード、DPAPI システム キー、キャッシュされたドメイン ログオンの暗号化に使用されるキーが含まれます。また、キャッシュされたドメイン ログオンも保持されるため、ドメイン ユーザーはドメイン コントローラーなしでサインインできます。
parse-registry lsa-secrets には、システムが保持するシークレットとそのシークレットがいつ設定されたか、およびシステムが保持および使用するキャッシュされたログオンの数がリストされます。 名前と時刻のみを読み取ります。何も復号化されず、シークレットのバイトの読み取りも書き込みも行われません。 Juntei は証拠を読み取ります。資格情報は抽出されません。
この証拠から判断できること: システムがこの名前のシークレットを保持し、この時刻に設定していました。サービスのシークレット(_SC_<service>)は、LSA がそのサービスの実行アカウントのパスワードを保存していることを意味します。
場所¶
C:\Windows\System32\config\SECURITY
Policy\Secrets\<name>\CurrVal the current value (encrypted)
Policy\Secrets\<name>\OldVal the previous value
Policy\Secrets\<name>\CupdTime when the current value was set (FILETIME)
Policy\Secrets\<name>\OupdTime when the previous value was set
Cache\NL$1 … NL$n cached domain logons, one slot each
Cache\NL$Control how many slots Windows keeps
| 名前 | 種類 | それは何ですか |
|---|---|---|
DefaultPassword |
autologon |
Winlogon が自動的にサインインするパスワード。 |
_SC_<service> |
service_account |
アカウントのパスワードは <service> として実行されます。 |
$MACHINE.ACC |
machine_account |
ドメイン内のコンピュータ アカウントのパスワード。 |
DPAPI_SYSTEM |
dpapi_system |
システムの DPAPI キー。 |
NL$KM |
cached_logon_key |
キャッシュされたログオンが暗号化されるキー。 |
L$_SQSA_<SID> |
security_questions |
ローカル アカウントのセキュリティの質問 (Windows 10 以降)。 |
RasDialParams!<SID>#n, L$_Ras… |
ras_credentials |
ダイヤルアップおよび VPN 資格情報。 |
L$…, G$…, M$… |
local, global, machine |
その他のプライベート データには、プレフィックス LsaStorePrivateData が付けられます。 |
SECURITY とそのトランザクション ログ、およびホストに名前を付けるシステムの SYSTEM ハイブを収集します。
分析時の注意点¶
- 値ではなく名前と時間。 値にデータが保持されるかどうかは、そのサイズによって決まります。その内容は読まれていません。
DefaultPasswordは自動ログオンを意味しません。 シークレットは、自動的にサインインしないシステムを含む、ほとんどのシステムに存在します。SOFTWAREのMicrosoft\Windows NT\CurrentVersion\Winlogon(AutoAdminLogon、DefaultUserName) は、自動ログオンが構成されているかどうかを示します。最近のCurrentSetUTCは説明する価値のある変更です。- サービス シークレット:
_SC_<service>は、サービスがパスワード付きのアカウントとして実行されるように設定されている場合に表示されます。parse-registry services(ObjectName) と比較し、最近インストールされたサービスや不明なサービスを探します。シークレットはサービスが終了した後も残る可能性があります。 - Times:
CurrentSetUTCおよびOldSetUTCは、Windows が現在値と以前の値を設定したときです。$MACHINE.ACCパスワードはデフォルトでは 30 日ごとに変更されるため、その時間は変化します。KeyLastWrittenUTCおよびCurrVal/OldValキーの時刻は、シークレットが最後に変更されたときの時刻です。 - Cキャッシュされたログオン: レコードにユーザーが指定されている場合、スロットは使用中です。レコードのヘッダーは暗号化されません。ユーザー名の長さのみが読み取られます。
CachedLogonsKeptはNL$Controlのカウントで、CachedLogonsCount(デフォルトでは 10) に続きます。スロットが使用中であるということは、ドメイン ユーザーが対話的にサインインしていることを意味し、その資格情報がハイブからオフラインで解読される可能性があります。ユーザーの名前は暗号化され、デコードされません。完全なヘッダーと一貫したユーザー名の長さを持つ検証済みのバイナリ レコードのみが使用中にカウントされます。Problemsが破損したスロットを報告した場合、使用中の数は検証されたスロットのみを対象とします。破損したスロットを空であると解釈しないでください。
Juntei で解析する¶
Usage: juntei parse-registry lsa-secrets <INPUT> [OPTIONS]
Input:
-d, --directory <DIR> Recursively find SECURITY hives
-f, --file <FILE> Parse one SECURITY hive
--log1/--log2 Supply transaction logs explicitly
--no-logs Do not replay logs
Output:
-o, --output <FILE> Save records
-t, --output-type <TYPE> csv, json, or jsonl
juntei parse-registry lsa-secrets -d collection/ -o lsa-secrets.csv
juntei parse-registry lsa-secrets -f SECURITY -t jsonl | jq 'select(.Kind == "service_account")'
各ハイブの概要には、各シークレットがその種類と設定時期とともにリストされます。次に、アカウント パスワード LSA が保存されているサービスに名前を付け、使用中のキャッシュされたログオン スロットをカウントします。
出力フィールド¶
| フィールド | 解釈 |
|---|---|
Host, SourcePath |
ホスト (システムの SYSTEM ハイブから)、および SECURITY ハイブ。 |
Secret, Kind |
シークレットの名前とその内容 (上の表を参照)。キャッシュされたログオンのレコードの Cache および cached_logons。 |
ServiceName, UserSID |
_SC_ シークレットが対象となるサービス、およびユーザーの SID の名前は (L$_SQSA_、RasDialParams) です。 |
CurrentSetUTC, OldSetUTC |
CupdTime および OupdTime: 現在の値と以前の値が設定されたとき。 |
HasCurrentValue, HasOldValue |
CurrVal および OldVal がデータを保持するかどうか。 |
CurrentValueLastWrittenUTC, OldValueLastWrittenUTC, KeyLastWrittenUTC |
CurrVal、OldVal、および秘密鍵の最後の書き込み。 |
CachedLogons, CachedLogonsInUse, CachedLogonsKept |
キャッシュされたログオンのレコード: スロット、使用中のスロット、および NL$Control の数。 |
TransactionLogStatus, LogsApplied |
レジストリ回復コンテキスト。 |
Problems |
不正な形式または範囲外の時間 (時間メタデータのみが表示される)、破損したキャッシュ ヘッダー、間違ったキャッシュ値のタイプ、および読み取りできないキー。 |
調査戦略¶
- 不明なサービスまたは最近インストールされたサービスの
_SC_シークレットを探し、それらをparse-registry servicesおよびイベント 7045 (サービスがインストールされました) と照合します。 DefaultPasswordの時間をWinlogonの自動ログオン設定と比較して確認します。- ドメイン メンバーでは、使用中のキャッシュされたログオン スロットと、
Cacheが最後に書き込まれた日時を記録します。 - シークレットの時間をタイムラインと比較します。侵入ウィンドウ中に設定されたシークレットは、新しいサービス アカウント、自動ログオン、またはマシン アカウントの変更をマークすることができます。