
Opensvpは、ファイアウォールのプロトコルレベル攻撃に対する耐性をテストできるようにする「攻撃」を実装したセキュリティツールです。
Opensvp は、ファイアウォールのプロトコルレベル攻撃に対する耐性をテストするための 「攻撃」を実装したセキュリティツールです。アプリケーション層ゲートウェイ (Netfilter の世界ではヘルパーと呼ばれます)に対する古典的な攻撃に加え、 いくつかの新しい種類の攻撃も実装しています。
例えば、opensvp は、ある条件の下で(詳細は以下の説明を 参照)FTP サーバを保護するファイアウォールにピンホールを開けることができます。 たとえフィルタリングポリシーが FTP サーバの 21 番ポートのみを 開いていることを保証していても、サーバ上の「任意の」ポートを開けます。 opensvp を使用することで。
ファイアウォールの背後に配置された、FTP を実行しているサーバ 192.168.2.3 があるとします。 ユーザーが root として実行すると::
opensvp --attacker -t 192.168.2.3 --helper ftp --port 23 -v -i eth0
その場合、ファイアウォールのルールに関係なく、サーバの 23 番ポートへの一時的なアクセスが 得られます。
「Secure use of iptables and connection tracking helpers」という文書( https://home.regit.org/netfilter-en/secure-use-of-helpers/ )では、この種の攻撃に対する防御方法が 説明されています。
実装された攻撃の詳細な説明については、次の章を参照してください。
eth0 インターフェースを介してファイアウォールに直接接続されたネットワーク上にいる場合、 攻撃者は次のコマンドを実行できます ::
opensvp --attacker -t 192.168.2.3 --helper ftp --port 23 -v -i eth0
192.168.2.3 は FTP サーバのアドレスで、23 はサーバ上で開きたい ポートです。
攻撃が成功すると、192.168.2.3 のポート 23 に接続できる ようになります。
クライアントが偽造したコマンドメッセージを送信し、それがファイアウォールによって 動的接続の開始要求として解釈される可能性があります。
攻撃の送信には標準的なサーバを使用することもできますが、カスタムサーバを使用すれば、 NAT ゲートウェイによって行われる変換を把握できます。
典型的なセッションは次のとおりです。IP アドレス 1.2.3.4 を持つサーバ上で、次のコマンドを 実行できます ::
$ opensvp --server --helper irc -v
次に、クライアント上で次のコマンドを実行できます ::
$ opensvp --client -t 1.2.3.4 --helper irc --port 23 -v 2.3.4.5:23 should be opened from outside
サーバ上には、次のメッセージが表示されます ::
You should be able to connect to 2.3.4.5:23
ここで、2.3.4.5 はクライアントのパブリックアドレスです。
攻撃側では、opensvp を起動し、使用する Netfilter キューと出力 インターフェースを指定する必要があります ::
次に、プロトコル認識メカニズムから隠したいトラフィックをユーザースペースに リダイレクトするために、iptables を使用する必要があります ::
iptables -I INPUT -p tcp --sport 443 -j NFQUEUE iptables -I OUTPUT -p tcp --dport 443 -j NFQUEUE
終了したら、CTRL+C を押して攻撃プロセスを中断します。
一部のネットワークプロトコルは、クライアントとサーバ間の交換に複数の接続を 使用しています。最もよく知られている例は FTP で、コマンドはポート 21 の接続を介して 送信され、データ交換は 2 つの異なるモード (ポート 20 からの接続または動的接続)で行われます。
一部のファイアウォール実装は、この並列接続を検出して動的に許可できるように、 アプリケーション層ゲートウェイ(ALG)を実装しています。 他の解決策としては、アプリケーションリレー(透過プロキシ)を使用するか、可能な すべてのフローを開く(ほとんどすべてを読み取る)ことです。
ALG はトラフィックを分析し、ピア間で送信されるコマンドを検出して解析し、 並列接続のパラメータを宣言します。それが完了すると、 可能性のあるトラフィックを通過させるために、ファイアウォールに一時的なピンホールを開きます。
この攻撃の考え方は、この種のメッセージを偽造してファイアウォールにピンホールを 開かせることですが、それは本来開かれるべきではなかったピンホールです。
条件:
シナリオは次のとおりです。
攻撃者ネットワーク上のスニファがプロトコルフローから1つのパケットをキャプチャします
偽造されたパケットはファイアウォールに接続されたインターフェースに送信されます
ファイアウォールはパケットをクライアントに送り返し、攻撃者の入力に基づく特性を持つ パケットを待機します
この攻撃は、説明した原理を直接適用したものです。データパケットを受信すると、 攻撃者は偽造した DCC コマンドを送信します。
この攻撃では、クライアント接続は攻撃者によって開かれます。攻撃者はファイアウォールの背後にある FTP サーバに接続し、実際の接続を開始します。セッションが確立されると、 偽造した 227 コマンドを送信して攻撃を開始します。
IPv6 が使用されている場合、同じ攻撃は偽造した 229 コマンドで行われます。
想定される標的
これらの攻撃に関する主な制約は、攻撃者がファイアウォールに直接接続されたネットワーク上に
いなければならないことです。
したがって、主な可能性は次のとおりです。
* ユーザー LAN からの攻撃
* ホスティングファーム内での攻撃
どちらの場合も、攻撃者に保護されていないサービスへのアクセスを許すことで、深刻な情報漏えい
につながる可能性があります。
Linux
~~~~~
この攻撃は、rp_filter が 0 に設定されている場合(これはできればデフォルト
値ではないことを願います)、IPv4 の Netfilter ファイアウォールに対して有効であることが知られています。
現在、IPv6 用のリバースパスフィルタリングの実装はないため、ファイアウォールは
保護されておらず、保護はファイアウォールルールで設定する必要があります
(次の章を参照)。
脆弱であることが知られているファイアウォールソフトウェアは次のとおりです。
* fwbuilder: 特定のポリシーを設定する必要があります
* shorewall: 最近のバージョンでこの問題を修正しました
* edenwall: 脆弱
この攻撃は、ゲートウェイとローカルファイアウォールの両方に対して有効です。ローカルファイアウォールでは、FORWARD
フィルタリングを有効にし、このチェーンに ESTABLISHED ACCEPT ルールを
設定する必要があります。これは、仮想マシンを実行しているシステムの場合に当てはまります。
攻撃に対する防御
==========================
Linux
-----
このテーマに特化した次のドキュメントを参照してください: https://home.regit.org/netfilter-en/secure-use-of-helpers/
その他の OS およびデバイス
--------------------
基本的な要件は、厳格なアンチスプーフィングを有効にし、ALG のロードを制御できるようにすることです。