Max OS X のパスワードをクラックする Python スクリプトを見つけた。
長らく Mac OS X 使っているものの、システム周りのことは知らないままであったので、勉強がてら、パスワードハッシュを OS から取得して、手計算で計算したハッシュ値と同じになるかを検証してみた。
そのスクリプトはこれ。Mac OS X におけるパスワードハッシュ管理方法は、スクリプト作成元のブログの記事 Cracking Mac OS X Passwords で詳しく説明されている。
以下、その記事の内容を読みながら実験した記録。
ユーザーの GUID を取得
まず、ユーザーの GUID を取得する必要がある。この GUID を使って、ユーザーのパスワードハッシュが保管されているファイルを特定することができる。Mac OS X では、GUID のようなユーザーに関する情報は、ディレクトリサービスで保管している模様。
バージョン 10.5 以降は、dscl というコマンドラインのツールを使う。
$ dscl localhost -read /Search/Users/daisuke | grep GeneratedUID | cut -c15- 8C8B9091-F862-427A-BBFB-7C524B3CC86D
ユーザーのパスワードハッシュを取得
/var/db/shadow/hash/<GUID> というファイルの 169 〜 216 文字目にソルトとパスワードハッシュが入っている。このファイルのアクセス権限は、root の読み書きのみ設定されている。
$ s=`sudo cat /var/db/shadow/hash/8C8B9091-F862-427A-BBFB-7C524B3CC86D | cut -c169-216` Password: $ echo $s 4E81C7F31EAE3452888D9042A6605423194AE0A147638C8C
取り出したこの 16 進数文字列 48 文字のうち、最初の 8 文字 4 バイト分がソルト、残りが SHA-1 ハッシュ。
$ salt=${s:0:8} $ sha1=${s:8} $ echo $salt 4E81C7F3 $ echo $sha1 1EAE3452888D9042A6605423194AE0A147638C8C
関係ないけど、ソルトってやっぱり料理の塩でソルトなのかな。同じような味付になるのを避けるためひと振りみたいな?
SHA-1 ハッシュ値の計算
SHA-1 の入力は、単純にソルトとパスワードを連結したものでよさそうなので、早速ハッシュ値を計算してみる。
$ printf '\x4e\x81\xc7\xf3password' | openssl sha1 1eae3452888d9042a6605423194ae0a147638c8c
お、同じだ。ということで検証おわり。
セキュリティ上の問題
スラッシュドットの記事によると、10.7 以降は、パスワードハッシュ(とソルト)が一般ユーザーからでも読み取れるような仕様変更がされており、セキュリティ上の懸念があるという。
ハッシュとソルトが漏れてしまえば、ローカルでパスワード解析やり放題になることを考えると、確かにセキュリティの後退と思える。設計上問題とならなかったのかな。
そういうことで、10.7 Lion では、パスワード不要なゲストアカウントを無効にすることが奨められるとのこと。
ちなみに、例の Python スクリプトを実行してみたところ…
$ sudo python osx_crack.py daisuke Attempting to crack... 4E81C7F3EAE3452888D9042A6605423194AE0A147638C8C No dictionary file specified. Defaulting to hard coded link. Trying... Trying... 123456 Trying... 12345 Trying... 123456789 Trying... password Cleartext password for user 'daisuke' is : password
速効でクラックされてしまった。当然だけど、単純・ありがち・予測可能なパスワードだと話にならないね。”password” なんてもってのほかです。
参考文献
- Mac OS X Lionでは一般ユーザーでもshadow化されたパスワードにアクセスできる | スラッシュドット・ジャパン アップル <http://apple.slashdot.jp/story/11/09/20/0840230/Mac-OS-X-Lion%E3%81%A7%E3%81%AF%E4%B8%80%E8%88%AC%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%A7%E3%82%82shadow%E5%8C%96%E3%81%95%E3%82%8C%E3%81%9F%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E3%81%AB%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%81%A7%E3%81%8D%E3%82%8B>
- yebo blog: Mac OS X Lionはパスワードクラックが簡単 <http://yebo-blog.blogspot.com/2011/09/mac-os-x-lion.html>
- Defence in Depth: Cracking OS X Lion Passwords <http://www.defenceindepth.net/2011/09/cracking-os-x-lion-passwords.html>
- Defence in Depth: Cracking Mac OS X Passwords <http://www.defenceindepth.net/2009/12/cracking-os-x-passwords.html>
- Mac OS X:SHA-1 ダイジェストを確認する方法 <http://support.apple.com/kb/HT1652?viewlocale=ja_JP>