📝
ALB, CloudFront, Lambda, Global Accelerator にタイムスタンプ要求を送信してみた
TCPタイムスタンプオプションに関する脆弱性: 技術情報 | NEC
TCPの実装において、タイムスタンプオプションの処理に関して脆弱性が存在することが確認されています。この脆弱性により、遠隔の第三者がTCPコネクションの内部タイマの値を任意に設定することが可能となり、Protect Against Wrapped Sequences(PAWS)機能を利用している場合に、サービス運用妨害(Denial-of-Service)攻撃を受ける可能性があります。
TCP タイムスタンプオプションの脆弱性調査の一環として AWS リソースでも確認してみました。
ALB
$ sudo hping3 -S <ALB-DNS-Name> -c 3 -p 80 --tcp-timestamp
HPING ALB-DNS-Name (eth0 18.176.119.215): S set, 40 headers + 0 data bytes
len=56 ip=18.176.119.215 ttl=254 DF id=0 sport=80 flags=SA seq=0 win=26847 rtt=1.1 ms
TCP timestamp: tcpts=1088003253
len=56 ip=18.176.119.215 ttl=254 DF id=0 sport=80 flags=SA seq=1 win=26847 rtt=1.1 ms
TCP timestamp: tcpts=1088004253
HZ seems hz=1000
System uptime seems: 12 days, 14 hours, 13 minutes, 24 seconds
len=56 ip=18.176.119.215 ttl=254 DF id=0 sport=80 flags=SA seq=2 win=26847 rtt=1.2 ms
TCP timestamp: tcpts=1088005253
HZ seems hz=1000
System uptime seems: 12 days, 14 hours, 13 minutes, 25 seconds
--- ALB-DNS-Name hping statistic ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 1.1/1.1/1.2 ms
CloudFront
$ sudo hping3 -S <CloudFront-DNS-Name> -c 3 -p 80 --tcp-timestamp
HPING CloudFront-DNS-Name (eth0 18.172.50.149): S set, 40 headers + 0 data bytes
len=56 ip=18.172.50.149 ttl=250 DF id=0 sport=80 flags=SA seq=0 win=65535 rtt=1.5 ms
TCP timestamp: tcpts=1131116527
len=56 ip=18.172.50.149 ttl=250 DF id=0 sport=80 flags=SA seq=1 win=65535 rtt=1.4 ms
TCP timestamp: tcpts=683522580
len=56 ip=18.172.50.149 ttl=250 DF id=0 sport=80 flags=SA seq=2 win=65535 rtt=1.5 ms
TCP timestamp: tcpts=2312628421
HZ seems hz=1000
System uptime seems: 26 days, 18 hours, 23 minutes, 48 seconds
--- CloudFront-DNS-Name hping statistic ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 1.4/1.5/1.5 ms
Lambda
$ sudo hping3 -S <Lambda-URL> -c 3 -p 443 --tcp-timestamp
HPING Lambda-URL (eth0 57.180.140.150): S set, 40 headers + 0 data bytes
len=56 ip=57.180.140.150 ttl=254 DF id=0 sport=443 flags=SA seq=0 win=26847 rtt=0.4 ms
TCP timestamp: tcpts=2598164381
len=56 ip=57.180.140.150 ttl=254 DF id=0 sport=443 flags=SA seq=1 win=26847 rtt=0.3 ms
TCP timestamp: tcpts=2598165381
HZ seems hz=1000
System uptime seems: 30 days, 1 hours, 42 minutes, 45 seconds
len=56 ip=57.180.140.150 ttl=254 DF id=0 sport=443 flags=SA seq=2 win=26847 rtt=0.3 ms
TCP timestamp: tcpts=2598166381
HZ seems hz=1000
System uptime seems: 30 days, 1 hours, 42 minutes, 46 seconds
--- Lambda-URL hping statistic ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.3/0.4/0.4 ms
Global Accelerator
$ sudo hping3 -S <GA-DNS-Name> -c 3 -p 80 --tcp-timestamp
HPING GA-DNS-Name (eth0 166.117.180.66): S set, 40 headers + 0 data bytes
len=56 ip=166.117.180.66 ttl=249 DF id=0 sport=80 flags=SA seq=0 win=65535 rtt=1.5 ms
TCP timestamp: tcpts=402277039
len=56 ip=166.117.180.66 ttl=249 DF id=0 sport=80 flags=SA seq=1 win=65535 rtt=1.5 ms
TCP timestamp: tcpts=393364063
len=56 ip=166.117.180.66 ttl=249 DF id=0 sport=80 flags=SA seq=2 win=65535 rtt=1.6 ms
TCP timestamp: tcpts=402279039
HZ seems hz=1000
System uptime seems: 4 days, 15 hours, 44 minutes, 39 seconds
--- GA-DNS-Name hping statistic ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 1.5/1.5/1.6 ms
AWS の責任範囲について
責任共有モデル | AWS
本記事執筆時点で上記サービスにはタイムスタンプ要求を無効化するオプションはありません。
ただし、AWS がマネージドに管理している部分は AWS 側の責任範囲であるため、AWS 側でセキュリティ対策が実施されている可能性があります。
AWS 内部の仕組みについては原則非公開であるため、本記事では上記検証結果以上の言及はできません。
技術的なお問い合わせに関するガイドライン | AWS サポート
AWS 内部の仕組みについてのお問い合わせ
まとめ
今回は ALB, CloudFront, Lambda, Global Accelerator にタイムスタンプ要求を送信してみました。
どなたかの参考になれば幸いです。
Discussion