CDN Forwarding Loop攻撃


CDN Forwarding Loop攻撃とは、CDNに悪意を持った設定を行うことにより、CDNサービスを高負荷にする攻撃/脆弱性である(CDNにより他のWebサーバに対するDOS攻撃を行うものではなく、CDN自体を機能不全に陥れる攻撃である)。

また、この脆弱性による負荷の上昇は、CDNへの意図的な攻撃だけでなく、ユーザによる単純な設定ミスでも発生する。ただし、その影響は限定的であり、この攻撃単体でCDNを機能停止に陥れるのは困難である。

基本的な攻撃テクニック

  • 設定
    • CDNにおけるオリジンサーバに、CDNの配信サーバを設定する。
  • 目的
    • ユーザからのリクエストにより、CDNサーバでループを発生させCDNサーバの負荷を上げる。cdn-forwarding
  • ループ回数
    • リクエストヘッダの肥大による停止:500回程度
      • ループ(中継)毎にX-Fowarded-For等がリクエストに付与される場合、ある回数以上の中継で、リクエストサイズが不正なリクエストとして扱われるまで巨大化し、ループは停止する。
    • Abort-forwardingによる中継の停止:30秒間程度
      • オリジンサーバ接続のタイムアウトおよびタイムアウト時における中継の停止(Abort-forwarding)が設定されている場合、クライアントのリクエストからタイムアウト時間(30秒程度)でループが停止する。ただし、30秒であっってもかなりの数のループとなる。fowarding-abort
    • 上記制限がない場合:無制限

ループの種類

  • Self-Loop:単独CDNサーバ内部におけるリクエストループ
  • Intra-CDN Loop:あるCDN事業者内におけるリクエストループ
  • Inter-CDN Loop:CDN事業者をまたがったリクエストループ
  • Dam Flooding:高度なオリジン制御を行うリクエストループ※
    • ※オリジン設定ににホスト名を使用し、ループを最大化するようにホストのIPアドレスを制御する。

 対策

  • 社会面
    • 安易なオンラインサインアップの中止(ユーザの匿名性を排除する)
  • 機能面
    • オリジンサーバ設定におけるIPアドレスの識別
      • CDNサーバ群のIPアドレスレンジをオリジンサーバとしない
    •  CDNに特徴的なリクエストヘッダの追加
      • CDNサーバでは、このリクエストヘッダを持つリクエストを中継しない
    • タイムアウトの設定
      • abort-forwardingを設定し、(最初の)ユーザリクエストから規定値以内に完了しないループを強制切断する。
  • 課題
    • 上記対策を行わないCDN事業者がいる場合、Inter-CDN LoopによりCDN全体が危険に陥る。

参考文