トップページに戻る

Category

AllArchives

Checker

Credit

パスワードクラック概論(1)

「ターゲットのIDと適当なパスワードでログインを試みる」という「パスワードクラック」なら結構多くの人が一度は試したことがあるでしょう。「*****というツールを使えば毎秒数百万回の試行が可能」といった文章を読んだことがある人もいるでしょう。「パスワードクラック」という世界の概要について。

「パスワード認証」に関するある程度深い理解のためには数学的知識が必要となります。この連載ではそうしたレベルには踏み込まず、あくまで「概要」に関して書きます。

□1
例えばある「会員制サイト」にアクセスする。ログイン用formが表示される。ターゲットのIDを入力し、適当なパスワードを打ち込んで「ログイン」を押す。偶然パスワードが当たっていれば、「パスワードクラック」が成功したことになる。「ログイン」を押してから「ログイン成功」「失敗」が表示されるまでの時間を1秒としよう。
□2
例えばFFFTPを使ってターゲットが使用しているホスティングサーバーにアクセスする。ターゲットのアカウントと適当なパスワードを打ち込みログインを試みる。偶然パスワードが当たっていれば、「パスワードクラック」が成功したことになる。一度失敗してから再びパスワード入力を求められるまでの時間を0.5秒としよう。

さて、通常パスワードとは「半角英数字8文字」です。パスワードに使用できる文字は英小文字26+英大文字26+数字10で62個。最初の一文字は英字だけなので52個。故に8文字のパスワードは52*62^7通り(a^bはaのb乗)。
上記のような方法で「クラック」できるパスワードはJOE(パスワード=ID)や誕生日やエトセトラだけです。よく「辞書に出てくるような英単語をパスワードに使うのは危険」とか言いますけど、全ての「クラッカー」が上記の方法を用いているならばアレはオーバーですよね。だって例えば「addicted」をパスワードにしている人がいたとしても、「addicted」と同じくらいの知名度な英単語なんて数万はありますし。逆に言えば「addicted」程度の簡単なパスワードですら、上記の方法で破ることは困難でしょう。

ここで我々は「パスワード認証とはどのようなシステムなのか」という話に目を向けなくてはいけなくなる。例えば「ID制サイトにおけるパスワードログイン」「FTPサーバーに対するパスワードログイン」というモノを「IDとパスワードを打って結果を待つ」ではなく「その時サーバー内部で何が行われているのか考える」コトによって破らなくてはいけない、と。

単純に考えてみましょう。原始的な「パスワード認証」とは以下です。
  1. IDとパスワードを入力させる
  2. 入力されたID・パスワードをサーバー内部のデータファイルと照合する
  3. 一致ならば「ログイン成功」・不一致ならば「ログイン失敗」
なるほど。つまり「パスワードクラック」のためには「サーバー内部にあるデータファイル」が必要になる。「サーバー内部にあるデータファイル」ってのは例えば以下のようなモノなのでしょうね。
yamada,aGb5RUhj
hanako,0709 ←パスワードを誕生日にしている初心者
taro,taro ←もっと酷い「JOE」
もし「サーバー内部のデータファイル」を何らかの方法で抜くことができたなら、全てのパスワードを・・・「ランダムな英数字」だろうと「誕生日」だろうと同じように・・・クラックすることが可能になる。サーバーサイドから見れば「サーバー内部のデータファイルを抜かれる」は「全てのアカウントを破られる」と同値。
抜くことが出来ないならば「パスワード=誕生日」をクラックするには最高366回の試行が必要になるし「パスワード=英単語」をクラックするには数千数万回の試行が必要になる。「パスワード=誕生日」ですら決して「簡単に破れるパスワード」ではないし「パスワード=英単語」を破ることなんて現実的に不可能だ。

これが、原始的な「パスワード認証」「パスワードクラック」の世界です。サーバー内の何処かに「正しいパスワード」があり、認証とは「『打ち込まれたパスワード』が『正しいパスワード』と一致するか否か」である、と。
※補足
よく配布CGIとかで以下のような「パスワード設定」があると思います。

# ここから設定
(中略)
$password = 'password';
# 管理人専用ページへのアクセスに必要なパスワードです。必ず書き換えて下さい。
(中略)
# ここまで設定

この手の「パスワード」ってのは今回書いたように「CGIソースを見られたら終わり」です。「推測されないようなパスワードにする」は勿論「ソースを見られないように.htaccessなりを編集する」が重要ですね。

SeeAlso

SameSubCategory

Footprint

Navigation

TrackBack

この記事へのトラックバック