web-dev-qa-db-ja.com

ファイアウォールについて

ファイアウォールの仕組みの詳細を理解し、攻撃面を理解したいと思います。

TCPおよびUDP

TCPとUDPは簡単にフィルタリングできます。コンピュータ上のプログラムはOSにポートを開くように要求する必要があり、これらのポートをリッスンします。ファイアウォールはすべての着信パケットを単純に調べ、確認することができます。送信IPに基づいて、ポート番号を許可し、許可するかどうかを決定します。

他のプロトコルへの攻撃はありますか?ファイアウォールは他のプロトコルからの攻撃を防ぐために何をしますか?

マシンにマルウェアがあるとします。マルウェアが外部と通信するための唯一の可能な方法は、TCP/UDPポートを開くことですか?プログラムがTCP/UDPポートを開けないようにした場合、プログラムは外部と通信できないことが保証されますか?

1
DevShark

次の3つの質問をしました。

  1. ファイアウォールの一般的な理解を求められた
  2. ステートフルファイアウォールは、udp-tcp以外のプロトコルからどのように保護しますか?
  3. UDP以外のTCPプロトコルでデータの引き出しが発生する可能性はありますか?

ファイアウォールの背景を理解する

ファイアウォールは(アクセスリストを持つルーターとは対照的に)ステートフルデバイスです。ソケットが一方向で開始されると、ファイアウォールはそのソケットを記憶し、戻りトラフィックを許可します戻りトラフィック許可ルールなしで

基本的なファイアウォールは、次のソケット情報を理解できます。

  1. IPv4とIPv6の比較
  2. IPプロトコル(0-255、1 = icmp、6 = tcp、17 = udp)
  3. ソースIP
  4. 宛先IP
  5. 送信元ポート(tcpおよびudpのみ!)
  6. 宛先ポート(tcpおよびudpのみ!)

ネットワーク(192.0.2.0/24)からの発信Wi-Fi通話(UDP/4500)を許可するとします。 ステートレスルータACLを使用すると、次のようになります。

egress:
permit udp 192.0.2.0/24 any eq 4500  // implied source port any

ingress:
permit udp any eq 4500 192.0.2.0/24 gt 1023

それがあなたができる最高のことです。そして、それは[〜#〜] awful [〜#〜]です。これで、部外者は送信元ポートを4500に設定するだけで、UDPを使用してネットワークをプローブできます。低いポートを拒否することで問題を軽減しましたが、高いポートでリッスンしている脆弱なアプリケーションがあります。

ステートフルなファイアウォールでこれを行うことができます:

egress:
permit udp 192.0.2.0/24 any eq 4500

ingress:
no rule needed thanks to stateful firewall!
Return traffic on sockets initiated outbound will be permitted.
Traffic initiated inbound will be denied.

ステートレスACLを使用したTCP入力は、UDPよりも保護がはるかに簡単です。内部ユーザーがインターネットにsshでアクセスすることを許可したいとしましょう:

egress:
permit tcp 192.0.2.0/24 any eq 22

ingress:
permit tcp any any established  ! more maintainable
...or...
permit tcp any eq 22 192.0.2.0/24 established  ! more specific, less maintainable 

悪意のあるユーザーは手動で確立されたビットを設定してネットワークに取り込むことができるかもしれませんが、インバウンドの3ウェイハンドシェイクを完了することはできません。

非UDP-TCPプロトコルからの保護:

適切に構成されたファイアウォールでは、入力時に「デフォルトで拒否」が構成されます。

ingress:
[a bunch of specific ingress permits as needed for the business here]
deny ip any any

これは256の受信プロトコルすべてに一致します。したがって、正しく構成されたファイアウォールは、他の受信プロトコルからネットワークを保護します。

1つの複雑さはICMPです。 ICMP MTUを超えたインバウンドを許可し、ICMPエコー要求のインバウンドを拒否します。 ICMPエクスプロイトは過去にありました(ping-of-death)。ステートフルファイアウォールは、icmp-echo-r​​eplyの入力を許可するのに十分スマートですが、MTUを超えた方が難しいです。

「不明な」プロトコルの発信をブロックすることも一般的です。 icmp、tcp、udp、およびアウトバウンドで開始された一部のVPN関連プロトコルを許可します。誰かがヘルプデスクに電話するまで、他のプロトコルの発信をブロックします。次に、(ネットワーク+ infosec)ビジネスニーズに基づいて、他のプロトコルを許可するかどうかを決定します。

非UDP-TCPプロトコルを介したデータの引き出し

はい。 UDP以外のTCPプロトコルを介してデータを抽出できます。特にICMP。 PCIは、インターネットへの無制限のアクセスを明示的に禁止しています。 PCI監査員が最初に行うことは、範囲内のPCIシステムからインターネットホストにpingを送信することです。 pingが成功した場合は、修正が必要です。 PCIホストが無制限にWebサーフィンできる場合、それも失敗です。

通常のネットワークプラクティスは、データセンターホストからインターネットへのデフォルトで下りを拒否することです。ホストが特定のインターネットサーバー(クレジットカードプロバイダーなど)にアクセスする必要がある場合は問題ありませんが、許可は宛先に固有のものにします。

デスクトップホストは通常​​、制限なしでインターネット(下り)をサーフィンできます。デスクトップホストが適切な認証なしにデータセンターホストに到達しないようにしてください(データセンターのVPNサービスが制限されているのが好きです)。

DNSリクエストを介したデータの引き出しについて不思議に思うことがあります。例:侵害されたデータベースサーバーのハッカーは、www.evildomain.com/123456789abcdのDNSルックアップを実行します。これはクレジットカード番号です。

非icmp-udp-tcpプロトコルのブロックに関する1つの警告:必要に応じて、ルーティングプロトコル(OSPFなど)を許可することを忘れないでください。しかし、それは単にリンク層にあります。「許可ospf any any」の必要はありません。

ファイアウォールDDOSの弱点

ステートフルファイアウォールは有用ですが、敵対者が自分の状態テーブルをいっぱいにできると、サービス拒否を引き起こす可能性があります。したがって、ステートレスACLを、公開されているWebサイトロードバランサーの前に配置することをお勧めします(とにかく無制限のインバウンド接続が予想される場合)。

1
Darrell Root

TCPおよびUDPはレイヤー4(トランスポートプロトコル)であり、ポートはそれらに固有のアドレス指定機能です。他にも多くのプロトコルがあり、ポートを使用しません。マルウェアは多くの場合TCPまたはUDPを使用しますが、通常はトラフィックを「隠す」ために使用しますが、他のプロトコルを使用したり、マルウェア作成者が独自に作成したプロトコルを使用したりすることもできます。

Rashadが指摘したように、高度なマルウェアは、コンピューター上の通常のプログラムを「ハイジャック」し、それらを使用して、確立されたポートで通信することができます。

ファイアウォールには、単純なIPフィルターから詳細なパケット検査やアプリケーション分析まで、データを検査するためのさまざまな戦略があります。

1
Ron Trunk

TCPおよびUDPは簡単にフィルタリングできます。コンピューター上のプログラムはOSにポートを開くように要求する必要があり、これらのポートをリッスンします。ファイアウォールはすべての着信パケットを単純に調べ、確認することができます。送信IPに基づいて、ポート番号を許可し、許可するかどうかを決定します。

他のプロトコルへの攻撃はありますか?ファイアウォールは他のプロトコルからの攻撃を防ぐために何をしますか?

これは少し誤解を招くようです。ファイアウォールが機能するレベルを理解することで、ファイアウォールの機能を理解する方が良いでしょう。たとえば、一部のファイアウォールは、詳細なパケット検査、ステートフルパケット検査、およびアプリケーションレベルのファイアウォールを提供します。それらはそれぞれ、OSIのさまざまなレベルで防御を提供します。つまり、より高いレベルの攻撃に対しては役に立たないということです。

マシンにマルウェアがあるとします。マルウェアが外部と通信するための唯一の可能な方法は、TCP/UDPポートを開くことですか?プログラムがTCP/UDPポートを開けないようにした場合、プログラムが外部と通信できないことが保証されますか?

残念ながらそれほど簡単ではありません。 Windowsファイアウォールのようないくつかの単純なファイアウォールについて話している場合、トンネルを作るマルウェアに対しては役に立ちません。または、悪意のあるコードで他のアプリケーションからのトラフィックを注入する可能性があります。しかし、このような攻撃は通常、標的となるだけであり、平均的なジョーには起こりません:)

私が言おうとしていることは、最初に、何を保護しようとしているのかを評価する必要があるということです。それが機密データのない単なる家庭用ラップトップである場合、ファイアウォールはそれを行います。より公開されたネットワーク上にあるより機密性の高いデータの場合、防御メカニズムもより複雑になるはずです。

0
Rashad Novruzov