🤯

RPKI ASPAの簡単なテスト

2024/01/10に公開

現在、ルーティングのセキュリティ強化として、ROAによる経路広告元の検証が行われていますが、オリジンASの詐称や経路迂回によるMITMには効果がありません。そこで、必要となるのがASパス検証です。現在、IETFのsidrops WGで検討が進んでいるのが、ASPA (Autonomous System Provider Authorization)です。ASパスの検証を厳密に行うのは非常に難しいため、ASPAはASパスを検証するのではなく、隣り合うAS間の隣接関係を記述し(ROAと同じように作成できる)、すべての隣接関係が有効であれば、正しいパスと考えていいだろうとします(完全な解決策ではない)。このやり方(ASPA)は、部分導入が可能という利点もあります。

現時点で、商用ルータでASPAはサポートされていません。ルーティング・ソフトウェアとしては、NIST BGP-SRx (研究プラットフォーム)、OpenBGPDが、Validatorとしては、RPKI-clientStayRTRRoutinatorRPSTIR2がASPAをサポートしています。

今回、OpenBGPDを使って簡単な検証を行いました。

  • 経路の注入には、GoBGPを使う
  • ASPAのValidated ASPA Payloads(VAPs)をOpenBGPDに直接設定する(aspa-set)

ネットワーク

GoBGP(Debian)とOpenBGPD(OpenBSD)を直結し、GoBGP側から経路を注入し、OpenBGPDでASPA検証の確認を行います。

GoBGP

設定は次のとおり。

[global.config]
  as = 100000
  router-id = "192.0.1.1"

[[neighbors]]
  [neighbors.config]
    peer-as = 200000
    neighbor-address = "192.168.243.130"

経路の注入は次のとおり。

gobgp global rib -a ipv4 add 100.100.100.0/24 aspath 300,200,100 origin igp
gobgp global rib -a ipv4 add 100.100.130.0/24 aspath 300 origin igp

OpenBGPD

設定は次のとおり。BGP neighborにroleの設定をしないと(RFC 9234)、ASPAの検証が行われません。今回、リモートASから見て、Peer(4)としました。

ASN="200000"
AS $ASN
router-id 192.0.2.1
prefix-set mynetworks {
	192.0.2.0/24
	2001:db8:abcd::/48
}
network prefix-set mynetworks set large-community $ASN:1:1
group "peers" {
	neighbor 192.168.243.120 {
		remote-as 100000
		role peer
	}
}
roa-set {
	100.100.100.0/24 maxlen 24 source-as 100
	100.100.130.0/24 maxlen 24 source-as 300
}
aspa-set {
	# vaid
	customer-as 300 provider-as { 100000 }
	# invalid
	customer-as 100 provider-as { 100000 }
}
allow to ebgp
allow from ebgp

テスト結果

ピアリングの確認

bgp2# bgpctl show                                                              
Neighbor                   AS    MsgRcvd    MsgSent  OutQ Up/Down  State/PrfRcvd
192.168.243.120        100000         42         41     0 00:19:12      2

RIBの確認(ASPA検証)

bgp2# bgpctl show rib                         
flags: * = Valid, > = Selected, I = via IBGP, A = Announced,
       S = Stale, E = Error
origin validation state: N = not-found, V = valid, ! = invalid
aspa validation state: ? = unknown, V = valid, ! = invalid
origin: i = IGP, e = EGP, ? = Incomplete

flags  vs destination          gateway          lpref   med aspath origin
*>    V-! 100.100.100.0/24     192.168.243.120   100     0 100000 300 200 100 i
*>    V-V 100.100.130.0/24     192.168.243.120   100     0 100000 300 i
AI*>  N-? 192.0.2.0/24         0.0.0.0           100     0 i
AI*>  N-? 2001:db8:abcd::/48   ::                100     0 i

想定通り、100.100.100.0/24はinvalid(!)、100.100.130.0/24は valid(V) となりました。

bgp2# bgpctl show rib detail 100.100.130.0/24

BGP routing table entry for 100.100.130.0/24
    100000 300
    Nexthop 192.168.243.120 (via 192.168.243.120) Neighbor 192.168.243.120 (192.0.2.2)
    Origin IGP, metric 0, localpref 100, weight 0, ovs valid, avs valid, external, valid, best
    Last update: 00:20:08 ago
    OTC: 100000
bgp2# bgpctl show rib detail 100.100.100.0/24

BGP routing table entry for 100.100.100.0/24
    100000 300 200 100
    Nexthop 192.168.243.120 (via 192.168.243.120) Neighbor 192.168.243.120 (192.0.2.2)
    Origin IGP, metric 0, localpref 100, weight 0, ovs valid, avs invalid, external, valid, best
    Last update: 00:01:11 ago
    OTC: 100000

ASAPオブジェクト

おそらく実験的にだと思いますが、ASPAオブジェクトをRPKIで配布している事業者があります。RPKIキャッシュの中から、*.asaのファイルを見つけると、88件見つかります(2024.1.10時点)。

$ rpki-client -f 5m80fwYws_3FiFD7JiQjAqZ1RYQ.asa
File:                     5m80fwYws_3FiFD7JiQjAqZ1RYQ.asa
Hash identifier:          s25yLaks3OXBzJcW3ZgvlLDiPUpyZbQk2jDHaPDgn1w=
Subject key identifier:   E6:6F:34:7F:06:30:B3:FD:C5:88:50:FB:26:24:23:02:A6:75:45:84
Certificate issuer:       /CN=caa805dbac364749b9b115590ab6ef0f970cdbd8
Certificate serial:       A1C7752FF8B1D2E01F
Authority key identifier: CA:A8:05:DB:AC:36:47:49:B9:B1:15:59:0A:B6:EF:0F:97:0C:DB:D8
Authority info access:    rsync://rpki.ripe.net/repository/DEFAULT/yqgF26w2R0m5sRVZCrbvD5cM29g.cer
Subject info access:      rsync://chloe.sobornost.net/rpki/RIPE-nljobsnijders/5m80fwYws_3FiFD7JiQjAqZ1RYQ.asa
Signing time:             Wed 07 Jun 2023 09:08:41 +0000
ASPA not before:          Wed 07 Jun 2023 09:08:14 +0000
ASPA not after:           Thu 06 Jun 2024 09:08:14 +0000
Customer ASID:            15562
Providers:                AS: 2914
                          AS: 8283
                          AS: 51088
                          AS: 206238
Validation:               OK

現時点の実用性について

RIR/NIRがASPAオブジェクトをサポートしていなくても、ASPAは部分導入が可能な点と、ローカルにValidatorやVAPsを持たせることできる点から、セキュリティを強化したい経路にはASPAによる検証を行うことは可能でしょう(もちろん、経路のドロップではなくアラートくらいに留めておきます)。

参考

変更履歴

  • 2024.1.10
  • 2024.1.12
  • 2024.1.18
GitHubで編集を提案

Discussion