とあるサーバでユーザアカウントが乗っ取られて攻撃の踏み台に使われるという被害にあったので、対策のためパスワードの強度のチェックを行いました。

LDAPで複数サーバのアカウントを管理するシステムだったので、作業はLDAPのmasterで行いました。

まず、パスワードチェックに用いるのはjohnというソフト aptで入ります。

$sudo apt-get install john
LDAPを使っていないならば、あとは を参考にするとできると思います。 で、LDAP使ってる場合、パスワードファイルを引いてこなければならないので、まずはLDAPの情報を /etc/ldap/ldap.conf か /etc/ldap/slapd.conf と /etc/ldap.secret あたりを参照して、baseDNとadminDNとldappasswdを取得します。
base: dc=test,dc=example,dc=com
admin: dn=ldapadmin,dc=test,dc=example,dc=com
passwd: *******

のような感じです。

次に(もしかしたら必要ないかもしれませんが)

$sudo apt-get install libnet-ldap-perl 

をやって、perlからldapを扱うライブラリを入れます。

そして、

からスクリプトをコピーして、先ほどメモしたbaseやpasswdを埋め、適当な名前で保存します。

(同じ動作をすると思われるプログラムが/usr/share/doc/john/examples/ldap-extractにもありますが、引数でパスワードを渡すのは嫌なので、使いませんでした。)

そのプログラムを使って

$ ./ldap-extract.pl > ldap_passwd

のようにしてやると、うまくいけばldap_passwdの中に

user1:{crypt}abcdefghi...:
user2:{crypt}123456778...:

のような感じの文字列が並びます。

こうしてできたファイルをjohnで解析します。

  • シンプルなチェック
  • これで引っかかる人はかなり弱いパスワードだと思われます。
    $ john -single ldap_passwd
  • 辞書を用いたチェック
  • 辞書はデフォルトのやつがたぶん /usr/share/john/password.lst にあると思うのですが、日本用の辞書もどこからか入手できます(どこから持ってきたのか忘れてしまいました)
    $ john -wordfile=/usr/share/john/password.lst ldap_passwd
  • 徹底的に調べる
  • どうしても知りたいなら、時間をかけてこれをやるのがいいらしいですが、時間がかかるのでユーザ名を指定した方がよさそうです。
    $ john -incremental -users=[user1] ldap_passwd

解析にてパスワードが分かると、

john -show ldap_passwd

で見ることができるようです。

悪用しないように。