魂、奪われた後――弱いパスワードの罪と罰セキュリティ対策の「ある視点」(8)(3/4 ページ)

» 2008年03月26日 00時00分 公開

パスワードハッシュの取得、そして

 さて、そろそろ、本題のパスワードハッシュの取得を行ってみよう。

 今回、使用するソフトウェアは、必要ファイルを検査対象上にコピーしている様子にも登場しているPwDump7.1【注2】である。このツールは、システム内に格納されている。

 

【注2】

PwDump7.1

http://www.514.es/2007/06/pwdump7.html

このツールはPwDumpから始まり、さまざまな人たちによって改良を加えられてきている。ちなみに、PwDumpXといったものも存在する。また、PwDump7シリーズはVistaに対応している。


 早速、検査用PCから検査対象にコピーしたPwDump7の実行結果をテキストに保存し表示させた結果が下図である。また、最後の行では、この後紹介する活動のために結果ファイルを検査用PCへと転送(アップロード)している。

図6 パスワードのハッシュを取得する 図6 パスワードのハッシュを取得する

 一見よく分からない文字列が表示されているだろう。しかし、よく見ると、システム内のユーザー名が表示されている。ハッシュ化された文字列は以下の形式で表示されている。

ユーザー名:uid:ハッシュ


 このハッシュの部分がパスワードに当たるのだが当然このまま入力したところで正しいパスワードとして認識されない。その証拠にkaroyamaユーザーのパスワードがkaroyamaであるという表示はされていない。となると、このハッシュ化された文字列を正しいパスワードに戻す必要がある。前述したとおり、ペネトレーションテストの現場では、検査中にこの行動を侵入後の活動として行っている。

 次に、検査対象を操作し、検査用PCに転送させた、ハッシュ化されたパスワードの復元を行う。今回は、私も愛用している2つのツールによる復元を紹介しよう。

総当たりの正攻法――John The Ripperによるパスワード復元

 まずは、「John The Ripper」を紹介する。John The Ripperは、オフラインパスワードクラッカーの王道ツールで、主にDES、MD5、LMなどでハッシュ化された文字列を復元することが可能なツールである。

 UNIX系OSのパスワードが格納されたshadowファイルはDESやMD5が用いられている。もちろん、Windowsで用いられるLMハッシュも同じくこのツールで復元することが可能である。

【LMハッシュ関連記事】

Windows サーバー セキュリティ徹底解説

第5章 内部ネットワークレイヤの保護

http://www.atmarkit.co.jp/fsecurity/hybooks/win_server_sec/wss01-01.html


 John The Ripperは、オプションなしで実行した場合は、独自のルールに従った復元方法を用いる。しかし、場合によっては、特定の規則に従った復元方法を用いた方が効率よく復元に成功するということもある。さまざまなオプションを用いることで、さまざまな切り口で復元を試みることも可能なのである。大きく分けると以下のような3つのモードが存在する。

  1. シングルモード
  2. 辞書モード
  3. 総当たりモード

 それぞれのモードについて簡単に説明しておこう。

1.シングルモード(--single または -si)

 ハッシュ化されたパスワードが記述されているファイル内の情報を基に復元を行うモードである。ユーザー名とパスワードが同一の文字列などの単純なパスワードは、このモードで復元可能である。

2.辞書モード(--wordlist=FILE または -w:FILE)

 あらかじめ用意した文字列(単語)が記述されたファイルを用いて復元を行うモードである。復元の精度は、辞書ファイルに記述されている単語数、パターンによって決まることとなる。ペネトレーションテストの現場では、独自で作成したものを用いることが多い。

 また、辞書ファイルは独自で作成しなくとも、さまざまなサイトでさまざまなジャンル別(人名、専門用語)の辞書ファイルが公開されており、Openwall Projectのサイトからも入手可能である。

 このモードでは「--rules」オプションというものが用意されており、このオプションを用いることで、辞書ファイル内の単語を変化させた復元を行うことが可能である。

3.総当たりモード(--incremental[:MODE] または -i[:MODE])

 さまざまな文字種、文字列長を使用し、成功するまで復元を試みるモードである。時間をかけてでも、とにかく復元を行いたいというときに使用する。また、このモードもオプションを使用することが可能である。

 例えば、アルファベットのみの復元を行いたい場合は“-i:alpha”、数字のみの復元を行いたい場合は“-i:digits”などとすることで使用文字種を限定した総当たりを行うことが可能である。

 これらのモードを適宜使い分け、パスワードの復元を試みるわけである。

 今回は、パスワードの復元をデフォルトモードで実行した。その様子を下図に示す。

図7 復元されたパスワードの様子 図7 復元されたパスワードの様子

 上図の赤のラインで囲われている部分が復元に成功したパスワードである。そして青のラインで囲われている部分がそのユーザー名を表している。例えば、「ace」というユーザーのパスワードは「ACEACE」であるということである(しかし、この時点では、「ACEACE」というパスワードを構成する文字が大文字であると確定したわけではない。これについては後述する)。

 ここで、karoyamaというユーザーの復元結果が2つあることに注目してほしい。ユーザー名の部分が(karoyama:1)と(karoyama:2)となっている。これは、Windowsのハッシュの形式が7文字区切りで格納されていることから、復元を行う際にも7文字区切りで行われるため、結果がこのように分割されるのである。従って、ユーザー名の右側にある番号の順番にすればよい。karoyamaユーザーの例であれば「KAROYAM」+「A」=「KAROYAMA」となる。

 前述したように、これでパスワードは確定したわけではない。John The RipperはLMハッシュに対し、デフォルトでは大文字と小文字の区別なくパスワードの復元を行い、結果を出力してしまう。

 そこで、大文字と小文字を区別した結果を得るためにはパッチを適用しておく必要がある。パッチに関しては、今回は最新の安定版である1.7.0.2に対するパッチのURLの紹介だけにとどめ、適用方法は割愛させていただく。

【関連情報】

John the Ripper 1.7.0.2パッチ

ftp://ftp.openwall.com/pub/projects/john/contrib/historical/john-ntlm-v03.diff.gz


 それでは、大文字と小文字の判別を行おう。先に解説したモードを活用することになる。

 今回の復元結果で復元に成功していたパスワードは、以下のとおりである。

  • ACEACE
  • KAROYAMA
  • TEST
  • PASSION

 上記の文字列を辞書ファイルとして保存する(今回はtmpdictという名前のファイルを作成した)。そして、大文字と小文字を区別するフォーマットを指定し、辞書モード+ルールオプションを指定して、辞書ファイル内の単語を変化させることでパスワードの復元を試みてみる。実行結果は下図のとおりである。

図8 最終的に復元できたパスワード。大文字と小文字の区別もされていることに注目 図8 最終的に復元できたパスワード。大文字と小文字の区別もされていることに注目

 復元に成功していたパスワードのうち「PASSION」の「N」のみが大文字であり、そのほかの文字については小文字であることが判明した。

【コラム】

 上記の内容を踏まえたうえで、ここで問題を出題しよう。

「辻伸弘株式会社」という組織の「Administrator」の
   ハッシュ化されたパスワードを復元せよ

 問題のハッシュ化されたパスワードを以下に掲載しておく。

Administrator:500:5FE055EE93CA7DB048D7645CD4E30C86:
4FEBC2EC1E27A3168F24289B5850F48D:::

(編注:都合上改行を入れていますが、実際には1行となります)


 復元手順を机上で考えることも可能であるが、実際にJohn The Ripperを試さないことには、正しいパスワードへと復元できないだろう。正解は次回、復元手順と共に公開させていただく。


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。