F5 クラウドネイティブ・ネットワーク機能によるDNSセキュリティ強化
This post is also available in English (英語)
本記事では、F5 の BIG-IP Next Cloud-Native Functions に実装された新機能をご紹介します。
Kubernetesのセキュリティ強化
アプリケーションのデプロイと公開には多数のリスク要因があるため、Kubernetes ワークロードを保護することは困難です。 CNCF では、従うべきいくつかのベスト プラクティスがリストされていますが、DNS などのプロトコルには、より専門的な強化が必要です。
F5の役割
以前の記事で述べたように、F5 CNF はより多くの機能で Kubernetes を拡張し、DDoS および不正侵入防御システム (IPS) 機能を有効にすることでクラウドネイティブ DNS インフラストラクチャの保護を提供することもできます。これらの機能は、DNS キャッシュ、トラフィックの最適化、NAT 機能と同じレイヤーで有効にできるため、セキュリティを犠牲にすることなくパフォーマンスを向上できます。
技術概要
DNS インフラストラクチャを保護するために使用できる 2 つの機能は、ポート 53 へのトラフィックを保護するための多くのパラメーターを提供する DDoS ポリシーと IPS ポリシーです。これらの機能は、Kubernetes API にデプロイされたカスタム リソース定義 (CRD) を使用して構成されます。したがって、K8s とのネイティブ統合があり、選択したオートメーションまたは CI/CD ツールセットにシームレスにプラグインする機能もあります。
以下のポリシーは、RFC 標準に準拠していない、または既知の攻撃シグネチャと一致する不正な形式の DNS パケットを含む外部攻撃から保護します。ネットワーク内に存在すべきでないベクターに対するデフォルトの軽減策を有効にしました。これにより、ベスト プラクティスが実装され、構成が簡素化されます。
以下の例はデフォルトのしきい値を示していますが、実際の値はバックエンド システムの容量、ネットワーク リンク容量、ベースライン トラフィック量などによって異なることに注意してください。値は、TMM ポッドごとのしきい値を表します。
DDoSポリシーカスタムリソース
以下は、DNS リスナーのカスタム リソースで参照および有効化できる DDoS ポリシーの例です。
apiVersion: "k8s.f5net.com/v1"
kind: F5BigDdosPolicy
metadata:
name: dns-ddos-01
spec:
hslPublisher: "publisher1"
vectors:
floodVectors:
commonConfigVectors:
- vectorType: ip-frag-flood
state: detection-only
- vectorType: icmpv4-flood
state: detection-only
perSourceIpDetectionEps: 1000
perSourceIpLimitEps: 10000
- vectorType: tcp-psh-flood
state: detection-only
perSourceIpDetectionEps: 100000
perSourceIpLimitEps: 100000
- vectorType: tcp-rst-flood
state: detection-only
perSourceIpDetectionEps: 100000
perSourceIpLimitEps: 100000
- vectorType: udp-flood
state: detection-only
perSourceIpDetectionEps: 40000
perSourceIpLimitEps: 100000
dnsFloodVectors:
commonConfigVectors:
- vectorType: dns-a-query
state: mitigation
detectionThresholdEps: 1
rateLimit: 50000
detectionThresholdEps: 1250
rateLimit: 2500
- vectorType: dns-aaaa-query
state: mitigation
detectionThresholdEps: 1250
rateLimit: 2500
- vectorType: dns-any-query
state: mitigation
detectionThresholdEps: 100
rateLimit: 200
- vectorType: dns-axfr-query
state: mitigation
detectionThresholdEps: 50
rateLimit: 100
- vectorType: dns-cname-query
state: mitigation
detectionThresholdEps: 100
rateLimit: 200
- vectorType: dns-ixfr-query
state: mitigation
detectionThresholdEps: 50
rateLimit: 100
- vectorType: dns-mx-query
state: mitigation
detectionThresholdEps: 50
rateLimit: 100
- vectorType: dns-ns-query
state: mitigation
detectionThresholdEps: 100
rateLimit: 200
- vectorType: dns-other-query
state: mitigation
detectionThresholdEps: 50
rateLimit: 100
- vectorType: dns-ptr-query
state: mitigation
detectionThresholdEps: 400
rateLimit: 800
- vectorType: dns-soa-query
state: mitigation
detectionThresholdEps: 50
rateLimit: 100
- vectorType: dns-srv-query
state: mitigation
detectionThresholdEps: 400
rateLimit: 800
- vectorType: dns-txt-query
state: mitigation
detectionThresholdEps: 400
rateLimit: 800
specificConfigVectors:
dnsNxdomainQuery:
state: mitigation
detectionThresholdEps: 400
rateLimit: 800
ipV6FloodVectors:
commonConfigVectors:
- vectorType: ipv6-frag-flood
state: detection-only
- vectorType: icmpv6-flood
state: detection-only
perSourceIpDetectionEps: 1000
perSourceIpLimitEps: 10000
specificConfigVectors:
extHdrTooLarge:
state: detection-only
perSourceIpDetectionEps: 100
perSourceIpLimitEps: 1000
lowHopCnt:
state: detection-only
tooManyExtHdrs:
state: detection-only
withExtHdrFrames:
state: detection-only
perSourceIpDetectionEps: 1000
perSourceIpLimitEps: 10000
dnsErrorVectors:
commonConfigVectors:
- vectorType: dns-malformed
detectionThresholdEps: 40
- vectorType: dns-qdcount-limit
detectionThresholdEps: 40
このポリシーが DNS トラフィックを処理しているリスナーに適用されると、さまざまな攻撃から保護されます。
テストするには、scapy というツールを使用して悪意のあるパケットを作成します。
send(IP(dst="100.100.200.150")/UDP(dport=53)/DNS(id=50713,rd=1,opcode=-1,qdcount=1,ancount=0,qd=DNSQR(qname="fake1.terry.f5.com",qclass="IN",qtype="A")),count=5000,inter=0.0001)
デフォルトでこれらの攻撃が軽減されているため、この不正な形式の DNS パケットが検出され、ドロップされることがわかります。
IPSポリシーカスタムリソース
以下は、許可するクエリを定義するポリシーに DNS トラフィックが準拠していることを確認するために使用できる IPS ポリシーの例です。他のリスナー タイプ (Context Secure) も、このポリシーの参照をサポートしています。
apiVersion: "k8s.f5net.com/v1"
kind: F5BigIpsPolicy
metadata:
name: "dns-ips-01"
spec:
services:
- name: dns
ports:
- "53"
compliances:
- name: dns_disallowed_query_type
value: "IQUERY"
action: reject
- name: dns_disallowed_resource_records
value: "A6 DLV GID MAILA MAILB MB MD MF MG MR NULL NXT SINK TALINK UID UINFO UNSPEC ISDN ATMA X25"
action: reject
- name: dns_domains_blacklist
value: "fake1.terry.f5.com"
action: reject
- name: dns_experimental_resource_records
value: "AFSDB APL ISDN LOC MB MG MINFO MR NULL RP RT X25"
action: reject
- name: dns_malformed_pdu
action: reject
- name: dns_maximum_reply_length
value: "4096"
action: reject
- name: dns_maximum_request_length
value: "520"
action: reject
- name: dns_obsolete_resource_records
value: "KEY MAILA MD MF"
action: reject
- name: dns_unknown_resource_record_type
logging: disabled
signatures:
- name: dns_blacklist_dns_reverse_lookup_response_for_known_malware_domain_spheral_ru_win_trojan_glupteba
action: reject
- name: dns_dns_query_amplification_attempt
action: drop
- name: dns_malformed_dns_query_with_http_content
action: drop
- name: dns_named_authors_attempt
action: drop
- name: dns_named_authors_attempt_1
action: drop
- name: dns_named_version_attempt
action: drop
- name: dns_named_version_attempt_1
action: drop
- name: dns_os_linux_os_linux_x86_linux_overflow_attempt
action: drop
- name: dns_os_linux_os_linux_x86_linux_overflow_attempt_1
action: drop
- name: dns_os_linux_os_linux_x86_linux_overflow_attempt_admv2
action: drop
- name: dns_os_other_os_other_x86_freebsd_overflow_attempt
action: drop
- name: dns_os_solaris_exploit_sparc_overflow_attempt
action: drop
- name: dns_server_other_bind_buffer_overflow_named_tsig_overflow_attempt
action: drop
- name: dns_server_other_bind_buffer_overflow_named_tsig_overflow_attempt_1
action: drop
- name: dns_server_other_bind_buffer_overflow_via_nxt_records
action: drop
- name: dns_server_other_bind_buffer_overflow_via_nxt_records_named_overflow_adm
action: drop
- name: dns_server_other_bind_buffer_overflow_via_nxt_records_named_overflow_admrocks
action: drop
- name: dns_server_other_bind_named_overflow_attempt
action: drop
- name: dns_spoof_query_response_ptr_with_ttl_of_1_min_and_no_authority
action: drop
- name: dns_spoof_query_response_with_ttl_of_1_min_and_no_authority
action: drop
- name: dns_tcp_inverse_query
action: drop
非準拠のシナリオをテストするには、以下の scapy スクリプトを実行して、IQUERY または リバース DNS ルックアップを実行するメソッドを示すopcode 1 を持つパケットを送信します。
send(IP(dst="100.100.200.150")/UDP(dport=53)/DNS(id=RandShort(), opcode=1, rd=1, qdcount=1, ancount=0, nscount=0, arcount=0,qd=DNSQR(qname="fake1.terry.f5.com", qtype=1, qclass="IN")))
パケットが検出され、以下のようなプロトコル検査の統計とログが表示されます。
IPS: on_flags/264: Found '10010' match (file '/builds/d3347dec/0/dpi/ips-lib/src/ips_service_dns.cpp:264')
IPS: ips_insp_callback/807: COMPL CHECK MATCH: id=10010, ctx='IQUERY', action=REJECT, support_id = 0000ff520000271a
これら 2 つの例は、F5 ハードウェアと VE ソフトウェアでこの保護を強化するのと同じエンジンを使用して、コンテナ ベースの DNS インフラストラクチャのセキュリティを確保する方法を示しています。