1.4 パスワード解析

いとも簡単にパスワードが知られてしまうことがあります。 これはなぜでしょうか。

よく言われることなのでご存知の方も多いでしょう。 ユーザ側におけるパスワードは主に次のように習慣付けるよう推奨されています。

定期的に変更するということは、 侵入しようとする者がパスワード解析を行うときの猶予期間を短くします。
これは、システムをどう守るかということ以前であり、 セキュリティの基礎かつ有効な方法となります。
しかし、盗聴によるパスワード取得が行われることに対しては全く意味を持ちません。ここで防げる攻撃は、パスワードを類推し入力するものやブルートフォースアタックに対してであり、パスワードを解析できる時間を縮めることにより解析しにくくするというものです。 ブルートフォースアタックに関しては後述します。

また、管理者側においては次のようにサーバーの設定変更を推奨されています。

新しいUNIXシステムであれば、ほとんどの場合がシャドウパスワードが設定されているはずです。また、オプションで設定することも可能になっています。
また、ユーザに対して頻繁にパスワードを変更するよう促しても、 全員が守ってくれるとは限りません。 そこで、パスワードの有効期限が設定することができます。 これによって、30日毎に強制的なパスワード変更を行わせることができるようになります。
たとえば、パスワードの有効期限を30日と設定しした場合、 パスワードの解析を試みる側には30日間の猶予期間があるということになります。
これも危険であると判断した場合は、ワンタイムパスワードを設定させる方法もあります。
ワンタイムパスワードは、毎回新しいパスワードを発行する仕組みであるため、 パスワードの解析は大変な作業になります。

1.4.1 類推しやすいパスワード例

パスワードも頻繁に変更しておけば何でも良いというわけではありません。
現実に設定してはいけないパスワードの例を挙げます。

ユーザ名と同一のパスワードを設定してはいけないことは良く知られていることです。 しかし、他の項目は何故でしょうか。
パスワード解析を行うには主に3つの方法があります。

  1. 辞書攻撃
  2. ブルートフォースアタック
  3. 盗聴

(1) ブルートフォースアタック

Brute force password crackingとも言われます。 これはは単純な文字の組み合わせを総当たり戦で試みるものです。
解析の時間が非常にかかる方法ですが、時間さえあれば確実にパスワードを取得することができます。
パスワードを頻繁に変えるということは、ブルートフォースアタックに対して非常に有効なのです。

もし固有名詞などが使用されているパスワードであれば、 それらのデータを集め試したほうがブルートフォースアタックより短期間でパスワードを見つけることができます。
これが、辞書攻撃と呼ばれるものです。

(2) 辞書攻撃

もし、パスワードの文字列に辞書にあるような単語や、人名、 製品や商標名といったものを使っている場合、 辞書攻撃によってパスワードを解析される可能性が高くなります。
パスワード解析に使用される辞書は、英和辞典などに掲載されている単語だけでなく、 人名、地名といったものや、よく使われるユーザ名などを入れておきます。 さらに、この中に規則性を持たせた文字列も入れておきます。 たとえば"777" や"aaaa"といったものです。
これを順に試していくわけです。
なお、辞書攻撃で発見されたパスワードは"Joe"と呼ばれます。

この辞書には、変換規則を考慮したデータもあります。
たとえば、"taro"のように"orat"の文字列を逆順にしたり、 "tAro"のように一部を文字の大文字にすることや、"taro1"のように先頭や末尾に数字を付けるというものもあります。
ユーザ名や固有名詞を使用していても数字や大小文字を使用しているから大丈夫ということはありません。

(3) 盗聴

パスワードを確実に得るためには盗聴という手段があります。
盗聴には2種類あります。

一つ目は、相手がシステムなどにログインするときを待って、 サーバとクライアントの間でやりとりされる情報をキャプチャリングしパスワードを取得するのです。
この方法であれば、暗号化されたパスワードを解析する手間が省けます。

二つ目は、盗聴ということとは少し離れますが、後述のパスワードのメモを残すということに関連します。
たとえば、職場などでパスワードを紙に書いてディスプレイに貼り付けている場合、 このパスワードを得るには自由に出入りできる者であれぱ容易にパスワードを取得することができるのです。

盗聴によるパスワード取得は、主にネットワークの同じセグメントに居る場合や、 パスワードを書いた紙に対して物理的に近いということがあります。
しかし、同じネットワークのセグメントということは、たとえばISPにダイヤルアップで接続した場合を考えると、LAN上での話に留まらないのです。
また、遠隔地のシステムにパスワードを盗聴するプログラムを仕込み、 取得したパスワードをメールで通知する等といった手法もあります。 これは、トロイの木馬と呼ばれるものの一種です。

1.4.2 パスワードの設定

これまでのように、ワンタイムパスワードや通信経路の暗号化を行わなければ安全であるとは言えません。
しかし、出来る限り安全に近づける努力が必要です。

パスワードには、英数字および記号を使用することができます。 これらを組み合わせて辞書攻撃を極力回避する必要があります。
たとえば"hUj#l-7Zk"といった全く意味の無いパスワードになるほど類推が難しくなるため辞書攻撃を回避することができます。
しかし、その反面、このようなパスワードを設定した場合、ユーザが覚えることが難しくなり、紙にパスワードのメモを残すといったことに繋がります。

パスワードのメモは残してはいけません。
たとえば、パスワードを書いた付箋紙をディスプレイに貼り付けておくといったことは、根本的な部分に問題があるため行うべきではありません。
設定するパスワードは、覚えやすく、類推されにくいものでなければなりません。

パスワードの文字列だけでなく、その長さも問題になります。
言うまでも無く、パスワードはシステムが許容する範囲で長ければ長い程良いのです。 その反面、あまりに長いパスワードはユーザが覚えきれないという問題もあります。 ユーザが覚えきれないほど長いパスワードは、結果として紙にメモを残すということに繋がります。

1.4.3 パスワードファイル

実際に設定されたパスワードをUNIXシステムを例にとって見てみます。
以下の行はUNIXのパスワードファイルの例です。1ユーザあたり1行が設定され、 それぞれユーザ名や暗号化されたパスワードが ":" で区切られ記録されています。
表1.4.3-1では、その中の一行を示し、それぞれのフィールドを解説します。

表1.4.3-1 パスワードファイルの内容
yamada:E5lYr5uCcib194viiRgRq2xu:2000:500::::YAMADA Jiro:/home/yamada:/bin/csh
ユーザ名
yamada
パスワード
E5lYr5uCcib194viiRgRq2xu
UID(ユーザID)
2000
GID(グループID)
500
ログインクラス

パスワード変更期限

ユーザアカウントの有効期限

CECOS(名前等)
YAMADA Jiro
ホームディレクトリ
/home/yamada
ログインシェル
/bin/csh

ユーザ名の長さはUNIXシステムによって異なります。 慣習として、8文字以下の英数小文字で付与します。
数字のみのユーザ名も作成可能ですが、chownコマンドやアプリケーションで問題を旗鼓起こしかねないためあまり使用されません。
問題は次のパスワードフィールドです。このパスワードフィールドの文字列は、本来のパスワードをMD5やDESで暗号化したものであり、不可逆なものです。 よって、この文字列からパスワードを生成することは事実上不可能とされています。

1.4.4 パスワード解析

ここまでパスワードについて解析しましたが、暗号化され不可逆なパスワードをどのように解析するのでしょうか?

暗号化されたパスワードの文字列に可逆性を持たせることが事実上不可能なことですが、同じパスワードから暗号化されたパスワードを作成することは可能です。
これにはcrypt関数を使用します。 crypt関数を使用する若干のコードを記述すると指定した文字列が暗号化されます。 暗号化された文字列は、crypt関数に対して同じ引数で引き渡され得られた結果と同じはずです。
パスワードを解析することは、暗号化された文字列を復号するわけではなく、 解析する元の文字列を暗号化し、その結果を照合するのです。
よって、復号できなくとも問題はないのです。

パスワード解析
画面1.4.4-1 パスワード解析

1.4.5 シャドウパスワード

従来のUNIXシステムでは、暗号化されたパスワードが記述されたpasswdファイルは、そのシステムのユーザであれば誰でも見ることのできるものでした。
しかし、これまで解説してきたように、その内容からパスワードを解析することができるため、通常のユーザには見えないように暗号化されたパスワードのみ別に管理されるようになりました。これがシャドウパスワードです。

シャドウパスワードを用いなければ、そのシステムのユーザだけでなく、 セキュリティホールによって、 外部のユーザからもpasswdファイルが取得できるようになった場合、 危険度が高まります。
よって、別の管理方法をとり、 /etc/passwdには暗号化されたパスワードは記述しないようにしています。
しかし、これにも問題があり、内外部のユーザを問わず、 OSの種類とバージョンが判れば、 パスワードが記述されたファイル名を類推することができるのです。
もし、仮にroot権限で動作するアプリケーションがあり、 このアプリケーションのセキュリティホールを利用し、 シャドウパスワードのファイルを取得するといったことも可能なのです。
これらの攻撃から守るためには、 ログイン毎にパスワードのフレーズが変わるワンタイムパスワード等の導入が必要となってきます。


    Copyright(C)  2001 Information-technology Promotion Agency, Japan.  All rights reserved.