2024-08-28 02:10 AM 2024-08-30 10:25 PM 更新
本ドキュメントでは、Secure Firewall Threat Defense (FTD) を利用した DoS/DDoS攻撃の緩和方法を紹介します。なお、より詳細な設定や確認方法は、ご利用バージョンの設定ガイド「chapter: Service Policies」を参照してください。なお、FTDの DoS/DDoS 保護機能は簡易機能のため、専用のDoS/DDoS保護装置に比べると、設定の柔軟性は大きく劣りますが、ベーシックな DoS/DDoS 攻撃からの保護には十分有効です。
本ドキュメントは、Firewall Management Center (FMC) 管理の、Firepower 1010 モデルの FTD バージョン 7.4.1 を利用し確認、作成しております。
本ドキュメントでは、一般的な DoS/DDoS攻撃の1つである「TCP SYN Flood 攻撃」の保護設定について紹介します。なお、項番 2.7. の「Threat Defense Service Policy」の設定を変更するとで、TCP/UDP Connection Flood 攻撃からも保護が可能です。
「TCP SYN Flood攻撃」は、FTDの SYN Cookie機能 (別名 TCP Intercept) を利用することで、一定の自動防御と保護が可能です。SYN Cookieは、FTDの前身である、ASA OS が 2010年以前からサポートし、利用実績も多い機能です。予め定義した embryonic connection count を越えるSYN Floodが発生した場合、FTDのSYN Cookie 機能が動作し、その後の 問題のSYNパケットに対し FTD がProxyのように動作し代理応答を行います。 SYN Cookieが動作することにより、Attacker (攻撃者) から Victim (被害者) へのSYN Flood攻撃を途中で遮断と 攻撃の緩和が可能です。また、SYN Cookieは、FTDで非常に高速に処理されるため、SYN Flood攻撃発生時の FTDの処理リソース(コネクションテーブルやCPUやメモリ)枯渇のある程度の緩和にも役立ちます。
つまり、FTDで DoS/DDoS 攻撃からの保護機能の有効化は、Victim(被害者)、及び FTD自身の処理リソースの保護の上で有効です。
本ドキュメントでは、以下の構成の「Attacker(送信元不明)」から、192.168.0.0/24のセグメント内にある「Victim(社内サーバー)」への、SYN Flood 攻撃からの保護設定と、動作確認例を紹介します。
まず、保護対象の公開サーバーのIPアドレスやセグメントを Extended Access List で定義します。
1.1. Object > Object Management にアクセスし、Access List から Extendedをクリック
1.2. 「Add Extended Access List」ボタンをクリックし、「Edit Extended Access List Object」がポップアップするため、任意ACL名をName欄に入力。今回は「Trusted-Server-IPs」と入力
1.3. 「Add」ボタンをクリックすると「New Extended Access List Object」がポップアップするため、今回はDestination Networkに保護対象セグメント「192.168.0.0/24」を入力
1.4. Portタブをクリックし、Selected Source Portに「TCP (6)」を登録した後、「Add」ボタンを押して保存
1.5. 「Edit Extended Access List Object」画面に戻るため、TCPプロトコルの任意宛先宛のACL設定がされていることを確認し、「Save」ボタンをクリック
本例では、TCP SYN Flood 攻撃からの防御設定(Embryonic Connection Limit)の有効化を行います。
2.1. Policies > Access Control をクリックし、防御設定を有効にしたいFTDに適用している Access Control Policyを Edit
2.2. 「More」のDrop Down メニューから Advanced Settings を選択
2.3. 「Threat Defense Service Policy」のEditアイコンをクリック
2.4. 「Threat Defense Service Policy」画面がポップアップするため、「Add Rule」をクリック
2.5. 「Interface Object」で「Global」にチェックが入っている状態で「>>Next」をクリック
2.6. 手順1で作成した「Extended Access List」を選択し、「>>Next」をクリック
2.7. 以下のような画面が表示されるため、今回は以下設定を実施した後、「Finish」をクリック。各数値はカスタマイズ可能
・Connection Maximu Embryonic 1,000 ・・・ 不完全なTCP通信は最大1000まで許可(それ以上はブロック)
・Connection Per Client Maximum Embryonic 100 ・・・端末1台当たりの不完全なTCP通信は最大 100まで許可
補足①:同時にTCPやUDPの最大コネクション数を制限したい場合は「Maximum TCP & UDP」に最大コネクション数を入力
補足②:「Connection Timeout」はデフォルト値のままが推奨
2.8. 「Threat Defense Service Policy」画面に戻るため、「OK」をクリック
2.9. 「Save」ボタンをクリックし変更設定を保存し、「Deploy」ボタンをクリックしFTDデバイスに設定適用
Syn Cookie (TCP Intercept)機能が動作時のシスログID は 201010で、デフォルト Informational レベルのため、攻撃発生と防御に気付きやすくするためデフォルトのログ出力レベルを変更します。本例では「Error」レベルに変更します
3.1. Devices > Platform Settings から、任意のSYN Flood 防御を有効化したいFTDデバイスを選択
3.2. Syslog > Syslog Settings タブをクリックし、「+ Add」ボタンをクリック
3.3. Connection Maximu Embryonic の閾値超えを示す Syslog Id「201010」のLogging Levelを、「(default)」から、今回は「3 - Error」に変更し「OK」ボタンをクリック
3.4. 同様の手順で、 Connection Per Client Maximum Embryonic の閾値超えを示すSyslog Id「201012」のLogging Levelも、「(default)」から、今回は「3 - Error」に変更し「OK」ボタンをクリック
3.5. 「Logging Destinations」タブから、「Internal Buffer (=show log)」で「Errors」以下のログ出力が有効であることを確認
3.6. 設定を「Save」した後、対象デバイスに設定を「Deploy」
FTDのCLIから「system support diag」>「enable」で、FTD内部の ASA(LINA)のコンソールにアクセスし、CLIで状況確認が可能です。以下はCLIを用いた動作確認例を紹介します。
FTD 内の L3/L4処理エンジン(ASA)が、SYN Flood 攻撃により、毎秒 1,700 程度のTCP通信処理を行い、CPU負荷が 100%近くにあがっている状態。 DoS/DDoS攻撃が発生すると、その宛先サーバー(Victim)のみでなく、中継Firewallにも高いコネクション処理負荷とCPU負荷が発生することがわかる。
なお、以下は実際の攻撃は 毎秒 8,000の TCP SYN Flood 攻撃をしており、ただ、コネクション 1,700 程度で FTD のCPU処理負荷が不足し、処理欠けも発生している状態で、他のFTDを経由する通信にも大きな遅延やダウンが発生している。
firepower# show cpu
CPU utilization for 5 seconds = 86%; 1 minute: 34%; 5 minutes: 24%
firepower#
firepower# show perfmon
PERFMON STATS: Current Average
Xlates 1729/s 4/s
Connections 1730/s 15/s <--- THIS
TCP Conns 1728/s 14/s <--- THIS
UDP Conns 1/s 0/s
URL Access 0/s 0/s
URL Server Req 0/s 0/s
TCP Fixup 0/s 0/s
TCP Intercept Established Conns 0/s 0/s
TCP Intercept Attempts 0/s 21/s
TCP Embryonic Conns Timeout 1062/s 7/s
FTP Fixup 0/s 0/s
FTDは、不完全なTCPコネクションの閾値を超えた場合、自動で SYN Cookie(TCP Intercept)機能が発動。当処理は高速に行われるため、当機能動作時は show cpu コマンドから CPU負荷が大きく下がることを確認できる。
また、show log コマンドで、170.72.0.94から 192.168.0.17のコネクションが Per-client embryonic connection limit を超過してることを確認できる。
firepower# show cpu
CPU utilization for 5 seconds = 63%; 1 minute: 25%; 5 minutes: 23%
firepower# show log
Syslog logging: enabled
Facility: 20
Timestamp logging: disabled
Hide Username logging: enabled
Standby logging: disabled
Debug-trace logging: enabled (persistent)
Console logging: disabled
Monitor logging: disabled
Buffer logging: level errors, 4825 messages logged
Trap logging: disabled
Permit-hostdown logging: enabled
History logging: disabled
Device ID: disabled
Mail logging: disabled
ASDM logging: disabled
FMC logging: list MANAGER_VPN_EVENT_LIST, 0 messages logged
%FTD-3-201012: Per-client embryonic connection limit exceeded 100/100 for input packet from 170.72.0.94/13406 to 192.168.0.17/443 on interface dmz
%FTD-3-201012: Per-client embryonic connection limit exceeded 100/100 for input packet from 170.72.0.94/28687 to 192.168.0.17/443 on interface dmz
%FTD-3-201012: Per-client embryonic connection limit exceeded 100/100 for input packet from 170.72.0.94/43750 to 192.168.0.17/443 on interface dmz
%FTD-3-201012: Per-client embryonic connection limit exceeded 100/100 for input packet from 170.72.0.94/58225 to 192.168.0.17/443 on interface dmz
%FTD-3-201012: Per-client embryonic connection limit exceeded 100/100 for input packet from 170.72.0.94/8891 to 192.168.0.17/443 on interface dmz
%FTD-3-201012: Per-client embryonic connection limit exceeded 100/100 for input packet from 170.72.0.94/23415 to 192.168.0.17/443 on interface dmz
%FTD-3-201012: Per-client embryonic connection limit exceeded 100/100 for input packet from 170.72.0.94/39682 to 192.168.0.17/443 on interface dmz
show perfmon コマンドから 毎秒 8,000 の SYN FLOOD 攻撃が発生しており、SYN Cookie (TCP Intercept) でFTDが高速にブロックしていることがわかる。 つまり、SYN Cookie (TCP Intercept) を有効化すると、5倍以上の攻撃にも耐え、FTDが攻撃を遮断し、自身や対向サーバーと、その経路機器のリソースを保護できることが確認できる。
firepower# show perfmon
PERFMON STATS: Current Average
Xlates 1/s 6/s
Connections 5/s 43/s
TCP Conns 3/s 42/s
UDP Conns 1/s 0/s
URL Access 0/s 0/s
URL Server Req 0/s 0/s
TCP Fixup 0/s 0/s
TCP Intercept Established Conns 0/s 0/s
TCP Intercept Attempts 8098/s 57/s <--- THIS
TCP Embryonic Conns Timeout 3/s 9/s
FTP Fixup 0/s 0/s
以下は、ネットワークレイヤーにおける、一般的な DoS/DDoS 攻撃の主な手法と、FTDによる対応可否です。インターネットからの攻撃の大部分は、SYN Flood と UDP Flood (DNS含む) であり、これら攻撃にFTDは対応します。 なお、FTDのDoS/DDoS攻撃からの保護は、閾値ベースの簡易保護機能のため、攻撃発生時のシステム負荷を大きく下げることに有効ではありますが、特にコネクション全体の流量制限は、正常な他通信もつながり辛くなったり遮断してしまう恐れがあります。
より複雑な攻撃への柔軟な対処や、攻撃者の通信を分離しての遮断などを希望時は、専用のDoS/DDoS攻撃対策装置の導入を検討してください。
種類 |
説明 |
攻撃割合 |
FTD |
設定方法と補足 |
DNS Flood |
DNSサーバーに対し大量の不正なリクエストを送信しサーバーに負荷をかける |
30% |
△ |
クライアント毎の特定DNSサーバ宛のUDP コネクション数を制限。なお、DNSは最短でRequestとReplyの2パケットで処理が終わるため、FTDによるコネクション数制限での保護効果は低い。なお、DNSサーバー非公開時は影響は無視できる |
SYN Flood |
Webやファイル・リモートアクセスVPNなど公開サーバーに対し大量のTCP SYN を送付し、サーバーや中継機器の処理リソース枯渇とダウンを引き起こす |
22% |
〇 |
本ドキュメントで紹介する SYN Cookie による保護有効化。 FTDは高速処理モードに移行し、正しくACK応答するクライアントのみ通信を通すため、遮断時も正常な通信は継続可能 |
UDP |
公開サーバーに対し、主にランダムなポート番号と偽の送信元addressを持つUDPパケットを大量に送信し、サーバーや中継機器の処理リソース枯渇とダウンを引き起こす |
21% |
△ |
本ドキュメントで紹介する TCP/UDP Connection の流量制限で保護有効化。DoS攻撃の場合は特定クライアントの攻撃を遮断可能。DDoS攻撃時は、閾値を超えると全UDP通信が遮断されるため、攻撃発生中は正常な通信も遮断される恐れ。UDPベースのサービスを外部公開しておらず、FWで遮断してる場合は影響を無視できる |
TCP |
正常な通信のRSTパケットと偽り、既存通信の切断指令(RST)により、正規のユーザーのトラフィックを不正終了させる |
7% |
〇 |
FTDはデフォルトで保護が有効。開いてないコネクションのRSTは遮断。また、連続性のないTCP通信のパケットも通過を拒否する |
SSDP |
Simple Service Discovery Protocol (SSDP)の略で、プリンタやモデム、監視カメラなどIoTデバイス宛の DoS / DDoS攻撃 |
6% |
△ |
標準でUDP 1900番ポートが使われるため、UDP Flood からの保護が有効。DoS攻撃の場合は特定クライアントの攻撃を遮断可能。DDoS攻撃時は、閾値を超えると全UDP通信が遮断されるため、攻撃発生中は正常な通信も遮断される恐れ。SSDPベースのサービスを外部公開しておらず、FWで遮断している場合は影響を無視できる |
出展: Cloudflare 「DDoS threat report for 2023 Q1」,閲覧日: 2024/08/28
本ドキュメントの項番 2.7. を参考に、「Maximum TCP & UDP」の設定を変更してください。
例えば、「特定宛先へのUDPのみの最大コネクション数を 最大 1,000」に制限したい場合は、「1. Extended Access List の設定」で指定のUDP通信のみマッチする Access List を定義してから、その Access List を使ったサービスポリシーを作成、 上記絵の「Connections:」の「Maximum TCP & UDP」を「1,000」と設定します。
Client 毎の最大UDP コネクション数も制限したい場合は、「Connection Per Client :」の「Maximum TCP & UDP」も設定します。
Connection Limit を超過時にログは、Syslog ID 201011 と 201013 で出力され、どちらも Error レベルになります。以下はシスログの出力フォーマットです。
%Threat Defense-3-201011: Connection limit exceeded cnt /limit for dir packet from sip /sport to dip /dport on interface if_name .
%Threat Defense-3-201013: Per-client connection limit exceeded curr num /limit for [input|output] packet from ip /port to ip /port on interface interface_name
FTD CLI から「System support diag」で、FTD内部の ASAエンジン(LINA)にアクセスし、「show access-list | in extended」と「show run policy-map」コマンドで、「1. Extended Access List の設定」と「2. DoS/DDoS 攻撃からの保護設定」の設定状況を確認できます。
Last login: Tue Aug 27 16:03:14 UTC 2024 from 170.72.0.11 on pts/0
Successful login attempts for user 'admin' : 4
Last login: Wed Aug 28 00:10:50 2024 from 170.72.0.11
Copyright 2004-2023, Cisco and/or its affiliates. All rights reserved.
Cisco is a registered trademark of Cisco Systems, Inc.
All other trademarks are property of their respective owners.
Cisco Firepower Extensible Operating System (FX-OS) v2.14.1 (build 131)
Cisco Firepower 1010 Threat Defense v7.4.1 (build 172)
> system support diagnostic-cli
Attaching to Diagnostic CLI ... Press 'Ctrl+a then d' to detach.
Type help or '?' for a list of available commands.
firepower#
firepower# show access-list | in extended
access-list Trusted-Server-IPs line 1 extended permit object-group ProxySG_ExtendedACL_317827580802 any 192.168.0.0 255.255.255.0 (hitcnt=10303775) 0x5bcdd123
access-list Trusted-Server-IPs line 1 extended permit tcp any 192.168.0.0 255.255.255.0 (hitcnt=10303775) 0x7a1eefa3
firepower#
firepower# show run policy-map
!
policy-map type inspect dns preset_dns_map
parameters
message-length maximum client auto
message-length maximum 512
no tcp-inspection
policy-map global_policy
class inspection_default
inspect dns preset_dns_map
inspect ftp
inspect h323 h225
inspect h323 ras
inspect rsh
inspect rtsp
inspect sqlnet
inspect skinny
inspect sunrpc
inspect sip
inspect netbios
inspect tftp
inspect ip-options
inspect icmp
inspect icmp error
class class_map_Trusted-Server-IPs <--- THIS
set connection embryonic-conn-max 1000 per-client-embryonic-max 100 <--- THIS
class class_snmp
inspect snmp
class class-default
set connection advanced-options UM_STATIC_TCP_MAP
policy-map type inspect ip-options UM_STATIC_IP_OPTIONS_MAP
parameters
eool action allow
nop action allow
router-alert action allow
!
いいえ、設定は FMC の GUI から設定が必要です。 設定後の設定状況やログ確認は、ASAと同様に CLI でも確認可能です。
ASA: MPFを用いたサービスポリシーの設定例と動作確認 の「TCP SYN Flood 攻撃の緩和策」や「コネクション タイムアウト値の変更と流量制限の設定例」を参照してください。
Cisco FTD How TO
https://community.cisco.com/t5/-/-/ta-p/5024782
検索バーにキーワード、フレーズ、または質問を入力し、お探しのものを見つけましょう
シスコ コミュニティをいち早く使いこなしていただけるよう役立つリンクをまとめました。みなさんのジャーニーがより良いものとなるようお手伝いします
下記より関連するコンテンツにアクセスできます