Upload
abendcve99990001
View
3.822
Download
2
Embed Size (px)
Citation preview
君の Hash は。まだ会ったことない Hash を探している
1
自己紹介
小河 哲之Twitter : abend三井物産セキュアディレクションアルコール担当
Burp Suite Japan User GroupISOG-WG1Prosit
2
はじめに
Windows の認証に関するセキュリティについて本資料は記載しています。本資料の内容を管理下以外の環境に対して実施しないでください。設定内容については内容を保証するものではないため、各自の責任で実施してください。
3
hash元のデータから算出された値。 hash から元の値を算出することができない。
hello → 066DDFD4EF0E9CD7C256FE77191EF43Chelloo → 48B2F3EF9B18C7C58AF7C47ED7DB88D2
元の値が変われば、 hash も変わる。
では、 hash がどのように使われているのか。
4
Windows の認証
アカウント名、パスワードまたは証明書で認証を行い、ログオンする。認証の中核を担うのが LSA(Local Security Authority) 。
5
Windows の認証
Login UI etc...
LSA LSA Server Service
Netlogon SAM
DC etc...6
SAMSAM(Security Account Manager) はデータベースファイルに保存されているアカウント情報にアクセスし、認証時利用されるプロセス。
reg save hklm\sam c:\samfile管理者権限で実行する必要がある。
7
SAMSAM ファイルなどから各アカウントのパスワードの hash 情報を取得可能。
Administrator:500:aad3b435b51404eeaad3b435b51404ee:22315d6ed1a7d5f8a7c98c40e9fa2dec:::Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::pentest:1001:aad3b435b51404eeaad3b435b51404ee:22315d6ed1a7d5f8a7c98c40e9fa2dec:::
※ 緑字は LM Hash 、赤字は NTLM Hash※ 「 31d6c ・・・」は null を MD4 の hash
8
LM Hash脆弱な hash 関数で、簡単にパスワードを特定することが可能。 Vista 以降は利用しないようになっている。
・ 14byte に制限・大文字小文字区別なし・ 7byte ごとに暗号化
9
NTLM Hashパスワードを Unicode として MD4 でhash した 128bit の値。 LM Hash と比較するとセキュリティの強度は高くなっている。
10
Windows のクレデンシャル
LM Hash 、 NTLM Hash は salt を使用していないため、同じパスワードを使用している場合、同じ hash 値になる。
password → 8846F7EAEE8FB117AD06BDD830B7586C※NTLM Hash
11
hash の解析
hash 値から元のパスワードを特定するには、辞書や総当たりでできる。ただ、時間がかかってしまう可能性もある。
ascii95 文字、パスワード 7桁、 10million/sec 計算できる場合95^7/10^7=81days
12
Pass the Hash(PtH)元のパスワードを特定しなくても、 hash 値そのものを利用するための方法として、 Pass the Hash がある。
13
Pass the Hash(PtH)同じパスワードを使ってさえすればいいので、パスワードの長さや複雑さは関係なくなる。
14
君の Hashは ?
( ペンテスターとして ) まだ会ったことない Hash を探している
15
Pass the Hash(PtH)
Host1admin : ?????
Host2admin : ?????
同じパスワードを使用している場合、取得した hash 値を用いて認証突破が可能。
パスワードが分からなくても認証突破できてしまう。
hash値
hash値
16
確かなことが一つだけある。
私たちは会えば、ぜったいすぐにわかる。
17
Pass the Hash(PtH)そのため、 hash 値を取得さえできてしまえば、権限によっては完全にコントロールできてしまう可能性がある。
Hostadmin : ?????
hash値 コマンド
コマンドが動き出す
18
動き出した奇跡の物語
19
hash の持ち主
SAM ファイルから存在するアカウントと hash の一覧を取得しても、そのアカウントの権限によってはできることが限られてしまう。そのため、影響を考える場合、 net user などを用いて該当のアカウントの権限を確認する必要がある。
20
ねぇ、あなたは誰なの?
21
UACユーザーアカウント制御 (User Account Control) は Windows Vista以降に導入されたセキュリティ機能。
22
UACレジストリやシステム変更を行う際にダイアログによる確認が行われる。悪意のあるプログラム実行を抑制するために有効なセキュリティ機能。
23
UAC管理者権限を有するアカウントでもUAC が有効な場合は、コマンド実行ができない。
Administrators グループに属するアカウントの hash UAC
hash値 コマンド
24
UACNTLM Hash が入手できていたとしても、外部からコマンドを実行しようとすると ACCESS DENIED となり、実行できない。E_md4hash wrapper called.HASH PASS: Substituting user supplied NTLM HASH...E_md4hash wrapper called.HASH PASS: Substituting user supplied NTLM HASH...ERROR: CreateService failed. NT_STATUS_ACCESS_DENIED.E_md4hash wrapper called.HASH PASS: Substituting user supplied NTLM HASH...
25
Builtin AdministratorBuiltin Administrator( 初期状態で存在する管理者 ) は、デフォルトで UAC の影響を受けない。
Administrators グループに属するアカウントとは異なり、 UAC に関係なくコマンド実行が可能。
26
Builtin AdministratorBuiltin Administrator は UAC に関係なくコマンド実行が成功している。【 whoami を実行】HASH PASS: Substituting user supplied NTLM HASH...E_md4hash wrapper called.HASH PASS: Substituting user supplied NTLM HASH...virsnow\administratorE_md4hash wrapper called.HASH PASS: Substituting user supplied NTLM HASH...E_md4hash wrapper called.HASH PASS: Substituting user supplied NTLM HASH...
27
大事な Hash忘れたくない Hash忘れちゃだめな Hash誰なんだ ... ?名前は ...
28
Administrator 29
前前前世から探してた
30
インストール直後はビルトインのAdministrator が有効であるため、 NTLM Hash が取得された場合にPtH攻撃は成功する。
31
Windows Server 2016
systeminfo の実行結果を一部抜粋。E_md4hash wrapper called.HASH PASS: Substituting user supplied NTLM HASH...E_md4hash wrapper called.HASH PASS: Substituting user supplied NTLM HASH...E_md4hash wrapper called.HASH PASS: Substituting user supplied NTLM HASH...
ホスト名 : WIN-DLVVSFQ046UOS 名 : Microsoft Windows Server 2016 Standard EvaluationOS バージョン : 10.0.14393 N/A ビルド 14393OS 製造元 : Microsoft CorporationOS 構成 : スタンドアロン サーバーOS ビルドの種類 : Multiprocessor Free
32
Windows Server 2016
Builtin AdministratorBuiltin Administrator は、クライアント OS ではデフォルトで無効化されているが UAC の影響を受けないため、アカウントを有効化するべきではない。 Windows Server ではデフォルトで有効になっているため、別の管理者権限を有するアカウントで管理した方がいい。
33
Windows10 のセキュリティ
Windows10 などでは、 SAM ファイルを抽出しても NTLM Hash が NULL になっていて、本来のパスワードの hashが分からない。
Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::pentest:1001:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
※ 環境: Windows10 Pro 一部抜粋34
Pwdump v7.1 では、抽出できているように見えるが、 hash 値が間違えている。 Windows Server 2016 でも同様。【 Pwdump 】 Administrator:500:2310D26235F3D51F20A9404C1CEFF55E:16267D64C86E8DE5591298683ACD2F5E:::
【正解の NTLM Hash 】e19ccf75ee54e06b06a5907af13cef42
35
Windows10 のセキュリティ
メモリ上の情報
Windows にログオンしているアカウントや資格情報に登録されているクレデンシャル情報がメモリ上に保持されている。
メモリを解析することでパスワードそのものを入手可能。
36
PtH によるメモリ調査
PtH して攻撃ツールを実行し、対象ホストのメモリ上の情報を収集することが可能。
Host
admin : ?????hash
値 攻撃ツール
37
情報の収集クレデンシャル情報
メモリ上の情報
メモリ上にはパスワードそのものが存在している。 msv : [00010000] CredentialKeys * NTLM : 217e50203a5aba59cefa863c724bf61b * SHA1 : ba380c17a7b2e0233a89896e6b4d412ced541c40 [00000003] Primary * Username : Administrator * Domain : VirSnow * NTLM : 217e50203a5aba59cefa863c724bf61b * SHA1 : ba380c17a7b2e0233a89896e6b4d412ced541c40 tspkg : wdigest : * Username : Administrator * Domain : VirSnow * Password : P@ssw0rd!
38
メモリ上の情報
HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigestに UseLogonCredential (DWORD) で0 をセットすると、メモリ上の wdi-gest のパスワードを持たなくなる。
wdigest : * Username : Administrator * Domain : VirSnow * Password : (null) 39
メモリ上の情報
Windows10 の場合、 UseLogonCredential をセットしなくてもメモリ上にはパスワードそのものは持たない。
だが、しかし・・・
40
言おうと思ったんだ。
お前が世界のどこにいても必ず会いに行くって。
41
資格情報マネージャー
ユーザ名、パスワードなどの資格情報を一元管理するための機能。リモートのファイル共有へのアクセスに使用されるドメインユーザのパスワードなどが保存されている。
42
Windows 資格情報
43
Windows の認証
44
Windows 資格情報
サイトなどのクレデンシャル情報を登録し、一括管理することが可能。
45
Windows 資格情報
credman : [00000000] * Username : xxx * Domain : http://xxx.com * Password : xxx [00000001] * Username : admin * Domain : test.com * Password : admin [00000002] * Username : VIRSNOW\abend * Domain : VIRSNOW\abend * Password : P@ssw0rd!
メモリ上からパスワードの抽出が可能。
46
やっと会えたね。
47
タスクスケジューラ
daily などの条件に合わせて、指定するタスクを実行するための機能。
48
タスクスケジューラ
「ユーザがログオンしているかどうかにかかわらず実行する」を選択した場合に実行するユーザを指定する。
49
タスクスケジューラ
ここで登録されたクレデンシャルも資格情報マネージャーの汎用資格情報に自動的に登録される。そのため、メモリを解析するとパスワードの取得が可能。
50
タスクスケジューラ
「パスワードを保存しない」をチェックしている場合でもメモリからパスワードの取得が可能。
51
タスクスケジューラ
タスクがアクセスできるのはローカルコンピュータ リソースだけかもしれないが、パスワードの取得は可能。
[00000005]* Username : VIRSNOW\test2* Domain : VIRSNOW\test2* Password : P@ssw0rd!!
52
この奇跡の出逢いに日本中が涙した
53
Windows 10 での資格情報
Windows 10 Pro でも Windows 7 同様にタスクスケジューラで設定したクレデンシャルは資格情報マネージャーに登録され、メモリ上で持っている。
54
どうすればいいのか
資格情報マネージャーから削除するとメモリ上からも消されるため、パスワードの取得はできなくなる。
タスクスケジューラで該当タスクを消しても、資格情報マネージャーから削除されない。
55
Anti Virus製品メモリ上のクレデンシャル情報を抽出するためのツールは、たいていの Anti Virus製品で検知されるため、 Anti Virus製品の機能を停止するか、バイパスする必要がある。
56
Anti Virus製品攻撃ツールをメモリ上に展開し、実行することで Anti Virus をバイパスする。
57
Hostadmin : ?????
hash値 コマンド
クレデンシャル情報
攻撃ツール
メモリ上に展開
攻撃ツール
情報の収集
メモリ
Anti Virus製品攻撃ツール自体は検知されるが、バイパスする方法だと検知されずに実行可能。HASH PASS: Substituting user supplied NTLM HASH...E_md4hash wrapper called.HASH PASS: Substituting user supplied NTLM HASH...E_md4hash wrapper called.HASH PASS: Substituting user supplied NTLM HASH...****** 一部省略 *******Authentication Id : 0 ; 342630 (00000000:00053a66)Session : Interactive from 1User Name : AdministratorDomain : VirSnowSID : S-1-5-21-724436814-143641613-1275184040-500 msv : [00010000] CredentialKeys * NTLM : 217e50203a5aba59cefa863c724bf61b * SHA1 : ba380c17a7b2e0233a89896e6b4d412ced541c40
58
それはまるで夢の景色のようにただひたすらに美しい眺めだった
59
Anti Virus製品Anti Virus製品も当然必要だが、それだけで守ることが困難であるため、 URL フィルターなどほかの対策もあわせて行う必要がある。
60
Windows 10 以降だと
何らかの方法で NTML Hash が取得された場合でも、メモリ上のパスワードを取得するツールを実行してもエラーになる。
ERROR kuhl_m_sekurlsa_acquireLSA ; Handle on memory (0x00000005)
※ 環境: Windows Server 2012R2 一部抜粋
61
Credential を守っている仕組み
LSA Protection Mode 、 Credential Guard があります。
LSA Protection Mode→Windows8.1 、 Windows Server 2012R2 など
Credential Guard→Windows10 Enterprise 、 Windows Server 2016
62
LSA Protection Mode保護されていないプロセスによるメモリの読み取りやコード インジェクションを防止するための仕組み。
hklm\system\CurrentControlSet\Control\Lsa\RunAsLPP に 1 をセットすると有効化される。
63
LSA Protection ModeWindows 10 などでは、 SAM ファイルを抽出することが困難であるが、認証に関連するプロセス (lsass.exe) をダンプし、それを解析することで NTLM Hash を容易に抽出できる。
64
LSA Protection ModeWindows 10 などで LSA Protection Mode を有効化している場合、 lsass.exe にアクセス ( ダンプ ) できなくなる。
Error opening lsass.exe (788):????????????? (0x00000005, 5)
65
LSA Protection Modeそのため、 LSA Protection Mode が有効になっている場合に、 NTLM Hashを取得することが困難である。
66
Credential GuardWindows10 Enterprise や Windows Server 2016 で利用可能なクレデンシャル情報を保護する仕組み。仮想化ベースのセキュリティで Hyper-V Hypervisor の有効化など複数の設定を行わないと利用できない。
67
Credential Guardクレデンシャル情報が仮想環境に切り離され、特定のプロセス以外からはアクセスできない。
未検証で、クレデンシャル情報の抽出方法が存在するのか、分からない。
68
まとめ
• どんなに複雑でも Pass the Hash には関係ない。
• UAC はちゃんと有効化しようね。• Builtin Administraotr は無効化しよう。• 無駄な認証情報は残さない。• Anti Virus製品だけではなく、 URL フィ
ルタなど多層防御が重要だと思う。• Windows 10 とか結構いいと思う。• LSA Protection Mode は有効化しよう。
69
君の Hashは ...
70
参考 URLhttps://msdn.microsoft.com/library/dn751049(v=ws.11).aspxhttps://technet.microsoft.com/ja-jp/library/cc753382(v=ws.10).aspxhttps://support.microsoft.com/ja-jp/kb/299656https://asecuritysite.com/encryption/lmhashhttp://openwall.info/wiki/john/NTLMhttps://support.microsoft.com/ja-jp/help/2871997/microsoft-security-advisory-update-to-improve-credentials-protection-and-management-may-13,-2014https://msdn.microsoft.com/ja-jp/library/ee498328(v=winembedded.70).aspxhttp://www.atmarkit.co.jp/ait/articles/1305/31/news049.htmlhttp://blog.jpcert.or.jp/2016/10/verification-of-ad9d.htmlhttps://msdn.microsoft.com/ja-jp/library/dn408187(v=ws.11).aspxhttps://technet.microsoft.com/ja-jp/library/mt483740(v=vs.85).aspxhttps://technet.microsoft.com/ja-jp/library/2009.07.uac.aspxhttps://technet.microsoft.com/en-us/library/95eeb6ff-6c74-4f3a-b216-132010386d01
71