何千人という組織の中でメールサーバ等を運用していると、それだけのアカウントの数が必要となってきます。セキュリティ意識やレベルの高い組織であればパスワードは必ず8文字以上で英数字記号を必ず混ぜるといったセキュリティポリシーの元、ユーザ全員がそのように容易に解読不能なパスワードを設定しているところもあると思います。
ただ、組織によってはそこまで意識が高くなく、人によっては容易にパスワードを見破られるようなものを設定していることもよくあります。こういった組織においては定期的にパスワードが簡単なものに設定されていないか、管理者の人がチェックする必要があります。
そういった場合にパスワードをチェックしてくれるものがJoh The Ripperというツールです。これは/etc/passwdやshadowのファイルを元にチェックを行うのですが、shadowファイルのパスワード部分はハッシュ化されたものが格納されています。ハッシュ化されたものは複合化は不可なわけで、調べたい値と同一なのかを調べるには同様にハッシュ化して一致するかどうかを調べます。
まずはyumでJohn The Ripperをインストールします。
# yum install john # rpm -qa | grep john john-1.7.9-1.el7.rf.x86_64 |
設定ファイルが/etc/john.confにインストールされますが、このままの状態だとjohnコマンドを実施した際に以下のようなエラーが発生してしまいます。
# john --single passwdfile Created directory: /root/.john fopen: $JOHN/dynamic.conf: No such file or directory |
このため/etc/john.confを以下のように編集し、下準備を整えておきます。
# vi /etc/john.conf <最後尾をコメントアウト> #.include <dynamic.conf> |
使用方法については/etc/passwdと/etc/shadowファイルをマージしたものを新規に作成します。これにはunshadowコマンドを使用します。下記はマージしたファイルをpasswdfileとして保存している例です。
# unshadow /etc/passwd /etc/shadow > passwdfile |
上記で作成したpasswdfileを元にパスワードクラックを行います。johnコマンドでそのままファイルを指定してやれば良いのですが、これだと全て解析アルゴリズムでクラックを行うためかなりの時間がかかります。解析アルゴリズムには以下の手法があります。
オプション | 説明 |
–single | ユーザ名からパスワードを推測する。 |
–wordlist=FILE | FILE名を指定してそのファイルの中に書かれてあるパスワードを 辞書として照らし合わせていく |
–incremental | 色んなパターンをしらみ潰しに試していくモードでかなりの時間が かかるため、現実的に使うことはあまりない。 |
以下、上記のオプションを指定した実行例です。
# john --single passwdfile # john --wordlist=/usr/share/john/password.lst passwdfile # john --incremental passwdfile |
上記いずれのオプションを指定しても全ユーザのチェックを行ってしまいます。上のオプションと併用して特定ユーザのみチェックを行いたい場合は以下のように–usersオプションでユーザ名を指定します。この場合、ハッシュ方式はdesのみとなりますのでmd5も合わせて実施するようmd5オプションも指定します。
# john --single --users=test --format=md5 passwdfile |
以下は全ユーザを対象にsingleモードで実行した際の実行結果の表示例です。testというユーザがtest1234で設定されているということで警告が表示されています。
# john --single passwdfile Loaded 3 password hashes with 3 different salts (generic crypt(3) [?/64]) test1234 (test) guesses: 1 time: 0:00:00:11 DONE (Tue Dec 9 12:49:52 2014) c/s: 208 trying: root1956 - root1900 Use the "--show" option to display all of the cracked passwords reliably |
1回実行すると上記のような結果は表示されなくなり、再度表示したい場合は–showオプションをつけると表示されます。
# john passwdfile --show test:test1234:1001:1001::/home/test:/bin/bash 1 password hash cracked, 2 left |
3つのアルゴリズムがあり、まとめて同時実行はできませんが、それぞれを実行した後に上記の–showオプションを実行すれば3つまとめての結果が表示されるので、そういう意味では便利です。
ユーザ自身でパスワードが変更できるような環境においては簡単なパスワードをユーザが設定しないよう管理者の方が定期的にこういったチェックを行うのもまた必要になるかもしれません。