5月 9

SSHログインパスワードのクラックツールを比較検証してみました



※本投稿に記載の内容を自身の管理下にないネットワーク・コンピュータに行った場合は、攻撃行為と判断され、最悪の場合、法的措置を取られる可能性もあります。同内容の調査を行われる場合には、必ず自身の管理下にあるネットワークやサーバーに対してのみ実施してください。


 

【検証概要】
SSHログインパスワードのクラックツールとして有名な下記4ツールについて、クラッキング速度の比較検証をしました。

  • Metasploit(ssh_loginモジュール)
  • hydra
  • medusa
  • ncrack

 

【検証環境】
1台の物理PCに、攻撃用サーバ(KaliLinux)および被攻撃用サーバ(CentOS7)を仮想マシンとして構築し、同サーバ間で検証を行いました。

攻撃は1つのユーザに対し、多数のパスワードを試行する手法を採用しました。試行するパスワードには1000個のユニークなパスワードが記載されたファイルを使用し、被攻撃用サーバのSSHログインパスワードは同パスワードファイルの一番最後に記載されているパスワードを設定しました。

また、クラッキングツールのオプション値および被攻撃用サーバのSSHサーバに関する設定値を適時変更し、各設定値毎に速度を測定しました。

なお、本検証では以下バージョンのクラッキングツールを使用しました。
「Metasploit(ssh_loginモジュール)」:Version 4.11.5-2016010401-0kali1

「hydra」:Version 8.1-1+b1

「medusa」:Version 2.2-0kali1

「ncrack」:Version 0.4-alpha-1kali2

 

【検証結果】
検証結果は下表のとおりです。
表の列はツールおよびツールのオプション値を、表の行はSSHサーバの設定値を示しています。(設定値の詳細については次々項に記載しています。)

SSHパスワードクラックツール検証結果

純粋なクラッキング速度としては「ncrack」が圧倒的に早いことが分かります。
「Metasploit(ssh_loginモジュール)」については、ツールのオプション値およびSSHサーバの設定値にはあまり影響されず、ほぼ一定の速度でした。
「hydra」については、一部のケースを除いてパスワードクラック自体が不可でした。
「medusa」については、マルチコネクションのオプションを設定することにより、速度を改善することは可能でしたが、「ncrack」には敵わず、またSSHサーバの設定によってはマルチコネクションのオプションを設定しないケースより時間がかかってしまうケースもありました。

SSHサーバの設定については、パスワードがクラックされるまでの時間稼ぎには、「MaxStartups」をなるべく小さい値に設定することが最も有用であると考えられます。

 

【総評】
検証結果より、最も有用と考えられるツールおよび条件付きで有用と判断できるツールを以下に示します。

■有用ツール
「ncrack」
被攻撃サーバのSSH設定がいかなる場合であっても、クラッキング速度がその他ツールに比べ圧倒的に早いため、クラックするにあたっての条件が特にない場合には、同ツールの使用が最も汎用的であると考えられます。

■条件付き有用ツール
「medusa」
クラッキング速度については「ncrack」に劣りますが、同時実行するコネクション数の指定が柔軟なため、例えば複数台の攻撃サーバを用意して1台のサーバを攻撃する場合などには、攻撃サーバ間でコネクションの取り合いにならないよう、1台の攻撃サーバで使用するコネクション数を指定できる同ツールを使用するのがよいかと考えます。

「Metasploit(ssh_loginモジュール)」
クラッキング速度は他ツールに比べ劣っていますが、1コネクションにつき1パスワードしか試行しないという動作をするため(他ツールではコネクションあたりの最大認証試行回数、パスワードを試行します。次項参照。)、被攻撃サーバで「最大認証試行回数パスワード認証に失敗しました」というログ出力させるのを防ぎたい場合には、同ツールを使用するメリットがあると考えられます。

■非有用ツール
「hydra」
試行したいパスワードの数が少ない場合(被攻撃サーバがCentOS7でSSHサーバの設定がデフォルトであれば「96個以下」)には正常に動作しますが、それ以上のパスワードを試行したい場合にはクラックツールとして正常に動作しないため、あまり有用ではないと判断できます。

 

【設定値の詳細(下線は検証より判明した事項です。)】

  • SSHサーバの設定
設定項目 デフォルト値 説明
MaxtAuthTries 6回 最大認証試行回数。SSHコネクション1つあたりの認証を最大で何回まで試みることができるかを指定します。
LoginGraceTime 2分 ログインの猶予時間。ユーザがこの時間内にログインしないとマシンは接続を切ります。なお、0は無制限を意味します。
MaxSessions 10 ネットワークコネクション1つあたりに許される最大のセッション数を指定します。
MaxStartups 10:30:100 認証されていない段階の接続をSSHデーモンが受け付ける確率を指定できます。書式は、「開始数:確率:最大数」で、すべて半角数字で指定します。SSHの接続が開始数を超えた場合には、指定した確率で接続を拒否し始め、最大数になったらそれ以降の接続を拒否します。

⇒確率を0にすると、開始数の数に関わらずSSHコネクションが張れなくなりました。確率を100にすると、当然ですが開始数を超えるコネクションはすべて拒否しました。

 

  • Metasploit(ssh_loginモジュール)の設定
設定項目 デフォルト値 説明
BrutForceSpeed 5 ログイン試行するスピードを指定します。0~5が選択でき、5が一番早い設定となります。

⇒上記説明通り、ログイン試行のスピードを調整することが可能でした。

Thread 1 同時実行するスレッド数を指定します。

⇒同時実行するような動作は行わず、すべてシングルコネクションで実行されました。

 

◆その他、Metasploit(ssh_loginモジュール)の検証で判明した事項

  1. デフォルトの動作は、試行するパスワード1つにつき、SSH認証のコネクションを張り、パスワードを試して認証失敗であればコネクションを閉じるという動きをしました。(シングルコネクション)
  2. コネクションタイムアウトなどで、3回連続接続に失敗するとモジュールが終了しました。

 

  • hydraの設定
設定項目 デフォルト値 説明
Task 16 同時実行するコネクションの数を指定します。

⇒Taskの設定値が「MaxStartups」の開始値<Taskの設定値<「MaxStartups」の最大値であれば、設定したTask数でアタックしました。(「MaxStartups」の確率は影響しませんでした。)Taskの設定値>「MaxStartups」の最大値の場合は、「MaxStartups」の最大値でアタックしました。

◆その他、hydraの検証で判明した事項

  1. デフォルトの動作は、SSH認証コネクションを同時に16コネクション張り、各コネクションで試行可能な最大回数、パスワードを試し、試行可能な最大回数、認証失敗となりSSHサーバにコネクションを切断された場合、新たなコネクションを張ることなくクラック不可というステータスで終了、という動きをしました。
  2. 上記のとおり、あるSSHコネクションにおいて、パスワード試行の最大回数を超え、SSHサーバにコネクションを切断された場合には新たなコネクションを張りませんが、「LoginGraceTime」の猶予時間オーバーによりSSHサーバにコネクションを切断された場合には、再度SSHサーバへ新たなコネクションを張りにいきました。

 

  • medusaの設定
設定項目 デフォルト値 説明
-g[NUM] 3 ギブアップする前に再試行を実施する数。試行の合計数はNUM+1。

⇒設定を変更しても、ツールの動作に変化はありませんでした。

-r[NUM] 3 再試行までのスリープ時間(秒)。

⇒設定を変更しても、ツールの動作に変化はありませんでした。

-t[NUM] 1 同時実行するコネクションの数を指定。

⇒上記説明通り、同時実行します。ただし「MaxStartups」の確率に引っかかり、コネクションが拒否された場合には、同時実行するコネクション数を動的に減らしました。(「MaxStartups」の開始数の値より小さくなることもあります。逆に「MaxStartups」の開始数以下の値であれば、そのコネクション数を維持しました。

◆その他、medusaの検証で判明した事項

  1. デフォルトの動作は、シングルコネクションでSSH認証コネクションを張り、試行可能な最大回数パスワードを試し、試行可能な最大回数、認証失敗となりSSHサーバにコネクションを切断されると、新たにコネクションを張りに行き、同じように試行可能な最大回数パスワードを試します。これを繰り返すという動作をしました。

 

  • ncrackの設定
設定項目 デフォルト値 説明
cl=<time> 自動計算で一番早い数値。 並行するコネクションの最小値。

⇒SSHのサーバおよびncrackの設定がデフォルトの場合は本検証環境では10~12コネクションからスタートしました。それより小さい値を指定した場合は無視され、10コネクションでスタートしました。clの値>「MaxStartups」の最大数の場合は、「MaxStartups」の最大数のコネクションを張りました。

CL=<time> 自動計算で一番早い数値。 並行するコネクションの最大値。

⇒SSHのサーバおよびncrackの設定がデフォルトの場合は12~13コネクションを維持しました。CLの値を指定した場合はその値以上のコネクションは張りませんでした。

cd=<time> 自動計算で一番早い数値。 新しい接続を行う際の遅延時間。

⇒マルチコネクションで接続する際、1コネクション毎に上記の設定時間待機してから接続しました。

 

◆その他、ncrackの検証で判明した事項

  1. デフォルトの動作は、ツール実行直後はシングルコネクションで接続し、SSH認証の試行最大回数失敗しSSHサーバにコネクションを切断されると、その後は、マルチコネクション(検証環境では12~13コネクション程度)で接続するという動作をしました(cl/CLの設定値を変えてもこの動作は変わりませんでした。)。SSHサーバの「MaxtAuthTries」が100など非常に大きい値の場合には、ツール実行直後のシングルコネクションでの試行は60回程度で終了し、マルチコネクションに移行しました。
  2. ncrackはmedusaのように、「MaxStartups」の確率に引っかかってコネクションが拒否されても、動的にコネクション数を減らすような動作はせず、コネクション数を維持しました。(概ね「MaxtAuthTries」の開始数以上、「MaxtAuthTries」の最大数未満でコネクションを張りました。)

 

以上です。

 

reported by ntsuji, kuno

Category: tool | SSHログインパスワードのクラックツールを比較検証してみました はコメントを受け付けていません