HTTPSトラフィックを傍受することにより、さまざまなデバイスで実行されている製品の脆弱性の調査を行いたいのですが、カスタム証明書のインストール以外のデバイスを変更したくありません。
SSLsplitは、「接続を許可するため、私がやりたいことをしているようです[]ネットワークアドレス変換エンジンを介して透過的にインターセプトされ、SSLsplitにリダイレクトされます。私が理解していることから、これらのNATルールは、MITM対応のアプリケーションを実行しているデバイスで定義する必要はなく、カスタマイズできます iptablesは、SSLsplitを介してルータートラフィックをリダイレクトし、Fruity WifiまたはOpenWRT。
SSLsplit変更されたiptablesルールで十分であり、これに対処するための合理的な方法ですか、それともLinuxネットワークシステムの他の部分も変更する必要がありますか?
注:私が構築しようとしているシステムでは、このインターセプトに「オプトイン」するには、信頼されたルートストアに証明書がインストールされているデバイスが必要です。不本意なデバイスからの任意のトラフィックを傍受するシステムを構築しようとしているのではありません。
ここには2つの部分があります。Webサーバークライアントが接続しているSSLsplitと、NATは、宛先アドレスをパケットに入れ替えて、SSLsplitサーバーにリダイレクトします。
NATは、クライアントデバイスが使用するルーターで設定され、パケットの宛先アドレスを実際の宛先サーバーからSSLsplitサーバーに変更する必要があります。
次に、SSLsplitは接続を取得し、その処理を実行できます。外部ホスト(TLSハンドシェイクで利用可能)に接続し、応答を転送します。
したがって、ネットワークの観点からの唯一のことは、クライアントがデフォルトゲートウェイがNATを実行するルーターを指すようなネットワークオプションを確実に取得する必要があることです。
要するに、はい、それは適切なツールになる可能性がありますが、実際にはSSLStrip、SSLSplit、mitmproxyまたはあなたの仕事をすることができる他のどんなツールでも、あなたはそれがどのように機能するかにのみ注意するべきです。
@Quantimが述べたように、ルータの背後にあるデバイスにカスタム証明書/ CAをインストール/持っていないと、SSL接続の中間者として機能するカスタムCAが必要であり、SSLを生成および生成できる必要があるため、これは不可能です。被害者が署名する証明書信頼する。そのため、被害者はトラストストアに攻撃者のルートCA証明書を持っている必要があります。 CAがどのように機能し、前述のツールを使用して望ましい結果を得ることができるかを説明することは、この回答の範囲を超えていますが、クライアントのタイプ(デスクトップブラウザまたは携帯電話)によっては、ルート証明書のインストールが少し異なることに注意してください。
SSLsplitは、他の透過SSLプロキシツールと同様に機能します-mitmproxyなど、より多くの機能を備え、より複雑です。クライアントと実際のサーバーの間の中間者として機能します。 デフォルトゲートウェイの変更、ARPスプーフィング、偽造DNSエントリまたはによって、SSLsplitが実行されリスニングしているサーバーにトラフィックがリダイレクトされている場合その他の手段。言い換えると、ご想像のとおり、SSLsplitは、クライアントが接続していて通信しようとする実際のサーバーを装ってSSL接続を取得します。実際、証明書を動的に生成し、クライアントが信頼する必要のあるCA証明書の秘密鍵で署名します。
「SSLsplitは、wifiルーターでHTTPSトラフィックをインターセプトして再暗号化するための適切なツールですか?です。そうかもしれませんが、そうするために十分な知識がありますか?もしそうなら、あなたの研究で大当たりを打ってください。
そして、「変更されたiptablesルールを使用したSSLsplitは、これに対処するのに十分で合理的な方法ですか、それともLinuxネットワーキングシステムの他の部分も変更する必要がありますか? "と答える必要があります。 IPTablesルールセットとNAT/DNATルールを正しく構成し、クライアントがCA証明書を信頼できると見なすことができる場合、はい、それで十分です-変更されたiptablesルールセットとクライアントのトラフィックをサーバーにリダイレクトする前述のように、クライアントのトラフィックを傍受します。ちなみに、コンピューティングにおける「transparent」という言葉は、ユーザーがその存在に気付かずに機能する(プロセスまたはインターフェースの)ことを意味することに注意する必要があります。
元のドキュメントからの抜粋:
SSLsplitは、IPv4とIPv6の両方でプレーンTCP、プレーンSSL、HTTP、HTTPS接続をサポートします。 SSLおよびHTTPS接続の場合、SSLsplitは偽造されたX509v3証明書をオンザフライで生成および署名します、元のサーバー証明書のサブジェクトDNおよびsubjectAltName拡張に基づいて。 SSLsplitはサーバー名表示(SNI)を完全にサポートしており、RSA、DSA、およびECDSA鍵とDHEおよびECDHE暗号スイートを処理できます。 OpenSSLのバージョンに応じて、SSLsplitはSSL 3.0、TLS 1.0、TLS 1.1およびTLS 1.2、さらにオプションでSSL 2.0もサポートします。 SSLsplitは、偽造された証明書を生成する代わりに、秘密鍵が利用可能な既存の証明書を使用することもできます。 SSLsplitは、NULLプレフィックスのCN証明書をサポートし、一般的な方法でOCSP要求を拒否できます。 HTTPおよびHTTPS接続の場合、SSLsplitはHPKPの応答ヘッダーを削除して公開鍵のピン留めを防止します、HSTSがユーザーに信頼されていない証明書を受け入れることを許可する、および防止する代替プロトコルQUIC/SPDYに切り替えます。実験的な機能として、SSLsplitは一般的な方法でSTARTTLSメカニズムをサポートしています。
OPはリクエストをSSLsplitにリダイレクトする方法を知っている必要がありますが、コメントに記載されているようにプロキシを設定したくないので、これを行うことについて簡単な洞察を与え、それが役に立てば幸いです:
Scenario 1 : If SSLsplit is on the OpenWRT which you are using - i.e. if SSLsplit is set on the GateWay which victims (clients) are connecting to :
|
VICTIMS | ATTACKER
|
+-------~+ | (GATEWAY) If SSLsplit is set on the Gateway users are gonna connect to, you only need to redirect some ports to those SSLsplit is listening on
| | | SSLsplit will be running on two ports: 8080 for non-SSL TCP connections and 8443 for SSL connections.
| | ---> |
| | | sysctl -w net.ipv4.ip_forward=1
+~~~~~~~~+ | iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
| \ iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 8443 (HTTPS)
+-------~+ | \ +~~~~~~~~+ iptables -t nat -A PREROUTING -p tcp --dport 636 -j REDIRECT --to-ports 8443 (LDAPS)
| | | \ | | iptables -t nat -A PREROUTING -p tcp --dport 587 -j REDIRECT --to-ports 8443 (MSA) Encryption = StartTLS
| | ---> | ===➤ | | iptables -t nat -A PREROUTING -p tcp --dport 465 -j REDIRECT --to-ports 8443 (SMTPS) Encryption = SSL
| | | / | | iptables -t nat -A PREROUTING -p tcp --dport 993 -j REDIRECT --to-ports 8443 (IMAPS) Encryption = StartTLS
+~~~~~~~~+ | / +~~~~~~~~+ iptables -t nat -A PREROUTING -p tcp --dport 5222 -j REDIRECT --to-ports 8080 (XMPP)
| / ...
+-------~+ |
| | |
| | ---> |
| | |
+~~~~~~~~+ |
|
|
Scenario 2 : AND IF SSLsplit is not set on the GateWay whic clients are connecting to - You will be in need of setting DNAT as the following :
VICTIMS | GATEWAY
|
+-------~+ |
| | |
| | ---> | IPTables will be like this :
| | |
+~~~~~~~~+ | SSLsplit iptables -t nat -A PREROUTING -d x.x.x.x/CIDR -p tcp -m tcp --dport 443 -j DNAT --to-destination z.z.z.z:8443
| \ iptables -t nat -A PREROUTING -d x.x.x.x/CIDR -p tcp -m tcp --dport 465 -j DNAT --to-destination z.z.z.z:8443
+-------~+ | \ +~~~~~~~~+ +~~~~~~~~+ ...
| | | \ | | | |
| | ---> | ===➤ | | ---------> | | In this scenario, all packets arriving on the router with a destination of x.x.x.x/CIDR will
| | | / | | | | depart from the router with a destination of z.z.z.z
+~~~~~~~~+ | / +~~~~~~~~+ +~~~~~~~~+
| /
+-------~+ | Redirects desired connection from somewhere
| | | to somewhere else to desired ports.
| | ---> |
| | |
+~~~~~~~~+ |
|
|
net.ipv4.ip_forward
の値を1に設定することに注意してください。sysctl -w
を使用して上記で使用したコマンドは永続的ではありません。恒久的に設定したい場合は、/etc/sysctl.conf
を含む行を追加できるnet.ipv4.ip_forward = 1
ファイルを編集する必要があります。
デフォルトでは、ほとんどのLinuxディストリビューションではIP転送が無効になっています。そして、私見これは良いアイデアです、ほとんどの人はそれを使う必要がないでしょうが、あなたはLinuxルーター/ゲートウェイをセットアップしているので-VPNサーバー(pptpまたはipsec)のどちらにも便利です-転送を有効にする必要があります。これは、いくつか示したように、いくつかの方法で実行できます。
これは、ルーターの背後にあるデバイスにカスタム証明書/ CAをインストールしないと不可能です。それ以外の場合は、任意のネットワークサービスとして機能できます。 SSLsplitは独自の証明書を生成するか、秘密鍵を提供した証明書のみを使用します
SSLsplitは、偽造された証明書を生成する代わりに、秘密鍵が利用可能な既存の証明書を使用することもできます。 SSLsplitはNULLプレフィックスのCN証明書をサポートし、一般的な方法でOCSP要求を拒否できます
どちらの場合も、カスタム証明書/ CAがないクライアントは無効な証明書発行者エラーを受け取ります
透過的傍受とは、傍受したいすべてのホストを指定する必要がなく、すべてのトラフィックを傍受できることを意味しますが、これはSSLでもMitMに影響を与えます