Windowsでは、一部の認証でNTLMハッシュを使用しているものがありますが、その中でもハッシュ値を渡すだけで認証が通ってしまう pass-the-hash ができることが知られています。
前回、メモリイメージからVolatilityで取得したNTLMハッシュのパスワード解析には失敗しましたが、 pass-the-hash はどうでしょうか?
試しにやってみました。
path-the-hash に関する解説は以下のページを参考にしました。
Pass-the-Hashの仕組み
https://binary-pulsar.hatenablog.jp/entry/2018/12/06/090000
PSExec Pass the Hash
https://www.offensive-security.com/metasploit-unleashed/psexec-pass-hash/
Metasploit の機能 exploit 機能で pass-the-hash ができるようなので、試しにやってみました。
Windows10のメモリから得たハッシュを使用した場合
まず、Windows10(バージョン1709、ビルド16299.492)のメモリイメージから Volatility の hashdump で得たハッシュ値を利用します。
ハッシュ値を再掲します。
このハッシュ値を用いて pass-the-hash ができるかを試します。
ターゲットは、メモリ取得元の Windows10(バージョン1709、ビルド16299.492、IP 192.168.86.128)とします。
使用するのは exploit/windows/smb/psexec エクスプロイトです。
以下のように設定します。
この設定で exploit した結果が以下の通りで、exploit には失敗してしまいました。
やはり、このハッシュ値はパスワードの正しいNTLMハッシュではないようです。
Windows7のメモリから得たハッシュを使用した場合
では、パスワードのハッシュ解析ができたWindows7のメモリダンプから hasudump で得たハッシュ値を使う場合はどうでしょうか?
このハッシュ値は、Windows10の hashtest ユーザに設定したパスワードと同じパスワードを Windows7のユーザに設定し、hashdumpで得たものです。
NTLMのハッシュはソルトを使っていないため、ハッシュ値は一致し、使えるのでは?ということです。
Windows7から取得したハッシュ値を再掲します。
このハッシュ値を用いて pass-the-hash ができるかを試します。
ターゲットは、ハッシュの取得元となったWindowsではなく、Windows10(バージョン1709、ビルド16299.492、IP 192.168.86.128)で同じパスワードを使っているアカウントとします。
つまり、Windows10のhashtest と同じパスワードを、Windows7でハッシュ化した値を使う形になります。
これは、異なるマシンで、かつ異なるバージョンのOSだが、パスワードが同じ場合のハッシュ値が pass-the-hash に使えるか?という確認になります。
設定と実行結果は以下のとおりです。
Windows10(バージョン1709、ビルド16299.492)に対し、同じパスワードを使っているWindows7のアカウントのハッシュ値で exploit が成功しました。
このことから、以下のことが言えると思います。
- Windows10(バージョン1709、ビルド16299.492)では、NTMLハッシュの暗号化方法は変わったものの、NTMLハッシュ値自体は従来と同じ。
- Volatirity の hashdump では、2016年7月以降のハッシュ値の暗号化にAES暗号化を用いたNTLMハッシュ値は正しく取得できない。(注:2019年8月現在でGithubから得たプラグインを使用して hasudump をした場合。)
- NTLMハッシュが正しく取得できれば、2016年7月以降の環境でも pass-the-hashは引き続き有効。