Hydraを使ってみた

セキュリティ

前の勉強会の記事からすこし空いてしまいました。

前の記事でお伝えした通り、今回は「Hydra」についてです。

勉強会よりはもう少し使い方に片寄ったものになっているかと思いますので、その際にお聞きになった方や使い方が気になる方は見て行っていただければと思います。

なお、外部に対して使った際には犯罪になる恐れがありますので、自分の管理下以外での使用は行わないでくださいね。

Hydraについて

読み方は(ハイドラorヒュドラ)のどちらかになるかと思っています。(個人的にはハイドラを押したい。)

パスワードクラックツールで、KaliLinuxに標準で入っています。

SSHやFTPなどで認証があった場合に簡単なコマンドでパスワードクラックができるので使いやすいですね。

総当たりもできますが、パスワードリストを持っているのであればそちらを使用すること可能です。

ペネトレーションテストなどでは他のサーバから取得したorできたパスワードリスト等を他サーバへ使用できないかな?という時に使ったりしますね。(自分でshellで書いてしまう人もいるかもですが、好みの問題ですかね。)

それでは使ってみましょう!

Hydraを動かしてみる!

実際に動かしていきますが、今回物凄い弱いサーバをやられサーバとして作りました。

KaliLinuxのIPアドレスが「192.168.70.130」やられようのサーバは「192.168.70.131」となっいます。

まずはKaliLinuxから実際にどのようなポートが開いているのかをnmapで確認してみます。

$ nmap 192.168.70.131
Starting Nmap 7.70 ( https://nmap.org ) at 2019-09-09 20:22 JST
Nmap scan report for 192.168.70.131
Host is up (0.0035s latency).
Not shown: 997 closed ports
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
80/tcp open http

Nmap done: 1 IP address (1 host up) scanned in 0.15 seconds

こんな感じで、http以外にsshとftpが開いていることが分かります。

勉強会ではこの開いているftpに対してbeforeブルートフォース攻撃(総当たり)を行いました。

早速とやってみようと思うのですが、まずはHydraのヘルプを見てみましょう

$ hydra -h
Hydra v8.8 (c) 2019 by van Hauser/THC - Please do not use in military or secret service organizations, or for illegal purposes.

Syntax: 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:
-R restore a previous aborted/crashed session
-I ignore an existing restore file (don't wait 10 seconds)
-S perform an SSL connect
-s PORT if the service is on a different default port, define it here
-l LOGIN or -L FILE login with LOGIN name, or load several logins from FILE
-p PASS or -P FILE try password PASS, or load several passwords from FILE
-x MIN:MAX:CHARSET password bruteforce generation, type "-x -h" to get help
-y disable use of symbols in bruteforce, see above
-e nsr try "n" null password, "s" login as pass and/or "r" reversed login
-u loop around users, not passwords (effective! implied with -x)
-C FILE colon separated "login:pass" format, instead of -L/-P options
-M FILE list of servers to attack, one entry per line, ':' to specify port
-o FILE write found login/password pairs to FILE instead of stdout
-b FORMAT specify the format for the -o FILE: text(default), json, jsonv1
-f / -F exit when a login/pass pair is found (-M: -f per host, -F global)
-t TASKS run TASKS number of connects in parallel per target (default: 16)
-T TASKS run TASKS connects in parallel overall (for -M, default: 64)
-w / -W TIME wait time for a response (32) / between connects per thread (0)
-c TIME wait time per login attempt over all threads (enforces -t 1)
-4 / -6 use IPv4 (default) / IPv6 addresses (put always in [] also in -M)
-v / -V / -d verbose mode / show login+pass for each attempt / debug mode
-O use old SSL v2 and v3
-q do not print messages about connection errors
-U service module usage details
-h more command line options (COMPLETE HELP)
server the target: DNS, IP or 192.168.0.0/24 (this OR the -M option)
service the service to crack (see below for supported protocols)
OPT some service modules support additional input (-U for module help)

Supported services: adam6500 asterisk cisco cisco-enable cvs firebird ftp ftps http[s]-{head|get|post} http[s]-{get|post}-form http-proxy http-proxy-urlenum icq imap[s] irc ldap2[s] ldap3[-{cram|digest}md5][s] mssql mysql nntp oracle-listener oracle-sid pcanywhere pcnfs pop3[s] postgres radmin2 rdp redis rexec rlogin rpcap rsh rtsp s7-300 sip smb smtp[s] smtp-enum snmp socks5 ssh sshkey svn teamspeak telnet[s] vmauthd vnc xmpp

Hydra is a tool to guess/crack valid login/password pairs. Licensed under AGPL
v3.0. The newest version is always available at https://github.com/vanhauser-thc/thc-hydra
Don't use in military or secret service organizations, or for illegal purposes.
These services were not compiled in: afp ncp oracle sapr3.

Use HYDRA_PROXY_HTTP or HYDRA_PROXY environment variables for a proxy setup.
E.g. % export HYDRA_PROXY=socks5://l:p@127.0.0.1:9150 (or: socks4:// connect://)
% export HYDRA_PROXY=connect_and_socks_proxylist.txt (up to 64 entries)
% export HYDRA_PROXY_HTTP=http://login:pass@proxy:8080
% export HYDRA_PROXY_HTTP=proxylist.txt (up to 64 entries)

Examples:
hydra -l user -P passlist.txt ftp://192.168.0.1
hydra -L userlist.txt -p defaultpw imap://192.168.0.1/PLAIN
hydra -C defaults.txt -6 pop3s://[2001:db8::1]:143/TLS:DIGEST-MD5
hydra -l admin -p password ftp://[192.168.0.0/24]/
hydra -L logins.txt -P pws.txt -M targets.txt ssh

こんな感じでオプションで色々操作することができます。

前回記事にしましたが「パスワードスプレー攻撃」のようなやり方もできそうですね。

では早速該当サーバのftpに対してパスワードクラックをしてみましょう。

事前にわかっていることとしてIDは既に判明していて「test」となっているためそれを指定します。

入力するコマンドは以下です。

$ hydra -l test -x 4:4:1 192.168.70.131 ftp
# -l ユーザID指定
# -x 文字数、種類を指定ここでは4文字、数字のみを指定
#最後に対象のIPアドレスとプロトコル(ftp)を指定

実際にやってみると非常に簡単なパスワードであると数分でクラックできてしまうことが分かりますね。

ここでは数字4桁の文字列「1234」を指定して実施しました。解くのにかかった時間は7分程度です。

もう少し長ければもっと時間がかかると思いますが、攻撃される場合はリスト型などを使用してくる場合が多いです。

また総当たりでも攻撃が防御や遮断などをされない場合は無制限に試行することができますので、危険度は上がっていきます。

対策はどうする?

まずは必要ないポートは開けないことです。

イントラネットからでも攻撃は来る可能性があります。(標的型攻撃、実際に侵入されるなど)

必要最低限のポート以外は開けないようにした方がいいです。

SSHなどは運用上使用するかもしれませんが、ポートをできる限り絞ったり、公開鍵認証を使うなどして必要な端末以外からアクセスできないようにしましょう。

ログの確認も非常に大事です。もし外部からアクセスすることを運用上OKとする場合、ちゃんと定期的にログを確認することが重要です。

今回のHydraを使用した場合でも短い時間(数分)で1000回以上も試行が行われているため、ログを確認すれば怪しいIPアドレスが判断できる可能性は上がります。
※パスワードスプレー攻撃のような場合はまた少し考慮する必要はありますが。

監査などでも定期的なログのチェックはどこのチェックリストでも記載されているものです。

基本的なところから防げることもあるので、日頃の作業を今一度見直してみては如何でしょうか。

不明点や要望やこういったこともやって欲しいとの要望があれば、お問い合わせページやコメント、ツイッターからでも結構ですので、気軽にご連絡ください。

 

コメント