しばしば「パスワードは○日ごとに変更しましょう」といわれるけれど、それで本当にクラックの危険性は減るの? ペネトレーションテストの現場から検証します(編集部)
今回は久しぶりに、ペネトレーションテストの現場の話から始めよう。
ペネトレーションテストでは、さまざまなセキュリティ上の欠陥が指摘される。バッファオーバーフローの脆弱性を利用し、任意のコード実行によるシステムの掌握、認証の回避による不正ログイン、センシティブ情報の取得、メールの不正中継、クロスサイトスクリプティング(注1)、強度の低いSSL通信、バナー情報の取得などなど……その危険度もさまざまだ。
弊社の場合、ペネトレーションテストでは基本的に、手法はどうあれ「管理者権限ユーザーや一般ユーザーの権限を奪取し、検査対象ホストの制御やセンシティブ情報を取得できるもの」を危険度の高い問題と位置付けている。そして、危険度の高い指摘の中でダントツに多い(注2)のが、「脆弱なパスワードによるログインの成功」(注3)だ。
図1は、弊社の診断において侵入につながった問題やセンシティブ情報の取得が可能だった問題、つまり、危険度が高い指摘事項の件数である。ご覧のとおり、高危険度の指摘事項の7割以上を「パスワード関連」が占めている。
そこで、今回はあらためて「パスワード」をテーマに挙げたい。脆弱なパスワードの検査に利用する「パスワードクラッカー」を紹介するとともに、もしパスワードが破られるとどんな被害が及ぶのか、ペネトレーションテストでの実例を基に説明し、適切なパスワード運用のあり方について考えたいと思う。
パスワードクラッカーは、他人が推測しやすい脆弱なパスワードを使っていないかどうかをチェックするために使うツールだ。特定のプロトコル向けのものもあれば、1つで複数のプロトコルに対応しているものまで、機能や使い勝手はさまざまだ。今回はその中から、筆者が実際に使用している3つのパスワードクラッカーを紹介しよう。
THC(The Hacker's Choice)というチームが開発した、パスワードクラッカーの中では老舗に入る部類のツールだ。長年開発されていることから対応プロトコルも多く、筆者も親しんできたツールである。だが、速度(並行試行数)によっては精度が低くなるプロトコルもあるため、使いこなすにはコツが必要という印象を受ける。
なお、2007年にドイツで施行された法律「Paragraph 202C」によって、ドイツでは「ハッカーツール」の所持や使用、作成、配布が違法となった。これに伴ってTHCはサーバを移転している。ここに紹介したURLは現在もなお、アクセスできたりできなかったりという不安定な場合がある。
バージョン5.7以前であれば「packet storm」で入手可能だ。安定版の最新バージョンは通常版が5.9.1、IPv6に対応したものが6.1である(記事公開時点)。公式サイトが不安定でアクセスが困難な場合は、「hydra-5.9-src.tar.gz」や「hydra-6.1-src.tar.gz」などで検索するとよいだろう。ただし、ソースが改変されていないとも限らないので自己責任でお願いしたい。
以下は「hydra」のシンタックスである。
hydra [[[-l LOGIN|-L FILE] [-p PASS|-P FILE]] | [-C FILE]] [-e ns] [-o FILE] [-t TASKS] [-M FILE [-T TASKS]] [-w TIME] [-f] [-s PORT] [-S] [-vV] server service [OPT]
hydraの主なオプションを超訳するとこんな感じだ。
オプション | 説明 |
---|---|
-S | SSLを使用する |
-s | サービスのポート番号がデフォルトポートではない場合にポートを指定する |
-l | 使用するユーザー名を直接指定する |
-L | 使用するユーザー名が記述されたユーザー辞書を指定する |
-p | 使用するパスワードを直接指定する(パスワードを固定しユーザー名を変えていくといった、弱いパスワードを使用しているユーザーを探すといったリバースブルートフォースで使用) |
-P | 使用するパスワードが記述されたパスワード辞書を指定する |
-e | 「n」を指定することでNullパスワード(空文字)、「s」を指定することでJoeパスワード(ユーザー名==パスワード)を試行する |
-t | 並行する接続数を指定する。デフォルトでは16コネクション(このオプションは、可能な限り低い値を指定する方が安定する) |
-V | 試行しているユーザー名、パスワードを表示する |
server | オンラインクラックの対象となるアドレスを指定する |
service | オンラインクラックの対象となるサービスを指定する(対応サービスはTELNET、FTP、HTTP、HTTPS、HTTP-PROXY、SMB、SMBNT、MS-SQL、MYSQL、REXEC,RSH、RLOGIN、CVS、SNMP、SMTP-AUTH、SOCKS5、VNC、POP3、IMAP、NNTP、PCNFS、ICQ、SAP/R3、LDAP2、LDAP3、Postgres、Teamspeak、Cisco auth、Cisco enable,AFP、Subversion/SVN、Firebird、LDAP2、Cisco AAA) |
例えば、
hydra -l root -P pass.dict -e ns -t 1 -s 2121 x.x.x.x ftp
と実行した場合、
「root」というユーザーで(-l)、pass.dictに記述されたパスワード(-p)と、パスワードなし/ユーザー名と同一のパスワード(-e ns)という条件で、並行試行数1で(-t)、ポート2121で開放している(-s)、IPアドレスx.x.x.xのftpサービスに対し、オンラインクラックを行う。
という意味になる。
2005年に、hydraの対抗馬として登場したパスワードクラッカーだ。公式サイトの「who?」の項目には「hydraに不満を持って作成した」という開発理由が記載されているほか、hydraとの性能比較ページもある。
筆者が使用した印象では非常に安定しており、作成者の意気込みを感じる。また、ソースからではなく、apt-get install medusaやyum install medusaなどパッケージを使ってインストールすることも可能であり、導入も比較的楽だ。
以下は、medusaのシンタックスである。
medusa [-h host|-H file] [-u username|-U file] [-p password|-P file] [-C file] -M module [OPT]
hydraと同じように、medusaの主なオプションを超訳してみる。
オプション | 説明 |
---|---|
-h | オンラインクラックを行う対象のアドレスを指定する |
-u | 使用するユーザー名を直接指定する |
-U | 使用するユーザー名が記述されたユーザー辞書を指定する |
-p | 使用するパスワードを直接指定する |
-P | 使用するパスワードが記述されたパスワード辞書を指定する |
-e | 「n」を指定することでNullパスワード(空文字)、「s」を指定することでJoeパスワード(ユーザー名==パスワード)を試行する |
-M | 実行するモジュールを指定する(使用可能なモジュールは、cvs.mod、mssql.mod、pcanywhere.mod、rlogin.mod、smtp.mod、telnet.mod、wrapper.mod、ftp.mod、mysql.mod、pop3.mod、rsh.mod、snmp.mod、vmauthd.mod、http.mod、ncp.mod、postgres.mod、smbnt.mod、ssh.mod、vnc.mod、imap.mod、nntp.mod、rexec.mod、smtp-vrfy.mod、svn.mod、web-form.mod。指定する際は.modを省略する。格納場所は?) |
-n | サービスのポート番号がデフォルトポートではない場合にポートを指定する |
-s | SSLを使用する |
-v | 表示レベルを0〜6で指定する |
例えば、
medusa -u root -P pass.dict -e ns -n 2121 -h x.x.x.x ftp
と実行した場合、
「root」というユーザーで(-u)、pass.dictに記述されたパスワード(-p)と、パスワードなし/ユーザー名と同一のパスワード(-e ns)に対するオンラインクラックを、ポート2121で開放している(-n)、IPアドレスx.x.x.xのftpサービスに対して行う
という意味になる。
medusaは、もともとhydraを意識して作ったということもあって、若干オプションの指定方法に違いはあるものの、指定する要素に親和性があるという印象だ。
Copyright © ITmedia, Inc. All Rights Reserved.