SEC401 Mentor サポートブログ

Windowsのパスワードハッシュについて

leave a comment »

演習の時の説明が不十分だったので補足します。

パスワードハッシュにはどういう種類があるか?

LM Hash(LAN Manager Hash)と NT Hash(Windows NT Hash)の2種類あります。それぞれの特徴は次のとおりです。

LM Hash

  • パスワードは14文字まで(短い場合はNull文字でパディング)
  • パスワードを7文字ずつ2つの鍵に分割し、固定文字列(KGS!@#$%)をDESで暗号化してハッシュを計算
  • 英大文字小文字の区別なし(すべて大文字に変換される)
  • 使用できる文字セットに制限がある(英数字記号)
  • パスワード総数は約7兆5千億弱

NT Hash

  • パスワードは 127文字まで
  • パスワードを Unicodeに変換し、MD4でハッシュを計算
  • Unicode文字セットも利用可能
  • パスワード総数は無限大

どちらのハッシュにも saltがないため、同じパスワードであれば誰が計算しても同じハッシュになります。そのため事前計算攻撃と呼ばれる Rainbow Tableを利用したパスワードクラックが可能です。

パスワードハッシュはどこにあるか?

自分のPCにログオンする場合などに利用するアカウント(ローカルアカウント)のパスワードのハッシュは SAMファイル(C:\windows\system32\config\SAM)に保存されています。このファイルは syskeyという仕組みで暗号化されており、またOS起動中はたとえ管理者権限をもつユーザー(例: Administrator)であってもファイルを開いたりコピーしたりすることはできません。演習で利用した pwdump2や Cain&Abelなども、SAMファイルに直接アクセスすることはできません。そのため、DLL Injectionという手法を用いて、SAMファイルへのアクセスを許可された特殊なプロセスからハッシュを取得するという裏技を使っています。

そのほかのハッシュの保存場所は次のとおりです。

他のファイルサーバにログオンする場合 => そのサーバのSAMファイル。

ドメインにログオンする場合(ドメインアカウント) => そのドメインのアカウントを管理する Active Directory。ただし、オフラインのときに自分のPCにドメインアカウントでログオンすることがあるため、通常はドメインアカウントのパスワードハッシュは自分のPCのレジストリにキャッシュとして保存されています。このときの保存形式はLM HashともNT Hashとも違う形式になります。(俗に mscash形式といいます。)

いつ使われるか?

そのPCにログオンするときに認証を行うために利用されます。またファイルサーバへのアクセスなどネットワーク経由で認証を行う場合にも利用されますが、認証方式には複数あり、それぞれの方式によって利用されるハッシュも異なります。

  • LM認証
  • NTLMv1認証
  • NTLMv2認証
  • NTLMv2 session response
  • Kerberos認証

たとえばLM認証の場合には次のような処理を行います。

  1. パスワードからLM Hashを計算する
  2. LM Hashを3分割して3つの鍵を作成する
  3. サーバから送信されてきたチャレンジをそれらの鍵を使ってDESで暗号化する
  4. 暗号化された3つのレスポンスをサーバに送信する
  5. サーバもクライアントと同様の処理を行い、クライアントからのレスポンスと比較して、正しいパスワードか確認する

上記にあげたLM認証以外の認証方式はすべてNT Hashを使いますが、その使われ方は認証方式によって異なります。LM Hash/NT Hashというハッシュの保存の形式と、LM認証/NTLM認証という認証方式とは違うものなので、混同しないように注意してください。

なお下位互換性のために、デフォルトでLM Hashも保存されるようになっていますが、いまやほとんど使われることはないので、無効にすることをお奨めします。

(参考)
Windows でパスワードの LAN Manager ハッシュが Active Directory とローカル SAM データベースに保存されないようにする方法

どういうリスクがあるか?

では具体的にどういうリスクがあるかというと、パスワードハッシュからパスワードを解析されることにより、攻撃者にそのパスワードを悪用されるというリスクです。(パスワード解析の方法は演習でやったので省略します。)

実際の被害はそのパスワードがどう悪用されるかで変わります。しかしまずはそもそもどうやってパスワードハッシュを取得できるのかを考えてみましょう。

(1) SAMファイルからパスワードハッシュを取得されるケース

これはオフラインのPCに直接アクセス可能で、HDDからファイルを抜き出せる場合か、あるいはなんらかの脆弱性をついてリモートから管理者権限でコマンドを実行できる場合にほぼ限定されます。

前者の方法はHDD全体が暗号化されていれば不可能です。一方、暗号化されていなければ、わざわざパスワードを解析しなくてもHDD内のファイルにはアクセスできます。後者の場合、攻撃者は管理者権限でコマンドが実行できるので、これもパスワードを解析する必要性はあまりありません。

つまり SAMからパスワードハッシュを取得できるという時点で、すでにその攻撃者はターゲットに対してなんでもできる状態と言ってもよいのです。したがってパスワード解析による影響はそれほど大きくはありません。ただし、パスワードがわかるとEFSで暗号化されたファイルを解読できますし、同じパスワードを別の場所でも流用していたりすると被害が拡大するという可能性が考えられます。

(2) NW上の認証データからパスワードハッシュを取得するケース

正確にはパスワードハッシュそのものを取得するわけではなく、LM認証やNTLM認証においてNW上を流れるチャレンジ・レスポンスのデータを取得し、このデータを利用してパスワード解析を行うものです。NW盗聴が可能であれば実行できます。この場合は(1)と違い、前提条件はNW盗聴が可能というだけなので、チャレンジ・レスポンスのデータからパスワードが解析されると影響は大きいと言えます。

どう対策するか?

上記から対策としては、そもそもパスワードハッシュを取られないようにする対策と、パスワードを解析されにくくする対策の 2つに分けられることがわかります。

(1) パスワードハッシュ取得を防ぐ対策

  • HDD全体を暗号化する
  • 常に最新のパッチを適用して脆弱性をなくす
  • ノートPCを持ち歩くときは目を離さない
  • 信頼できないネットワーク上でファイル共有などをしない

(2) パスワードを解析されにくくする対策

  • LM Hashを保存しない
  • LM認証を利用しない
  • 強固なパスワードポリシーを設定する
広告

Written by sec401

2009年 3月 12日 @ 00:14

カテゴリー: Book2, Module10

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。