# 自作のサービス妨害
## 定義
自作のサービス妨害(self-inflicted attack / self-inflicted DoS)とは、能動的な敵対者が一切存在しないにもかかわらず、正規利用者由来の需要がサービス容量を上回り、波形の上では敵対者による DoS 攻撃と区別がつかない急増を引き起こす現象である。原因は大きく2種類ある。1つは外部イベントによるユーザー行動の同期で、地震のような出来事が住民の行動を一斉に同じ方向(安否確認・検索・SNS投稿)へ向かわせ、通常は独立した意思決定によって滑らかに均される需要曲線に鋭いスパイクを作る。もう1つはクライアントソフトウェアの誤った再試行(retry)挙動で、サーバがエラーを返した際にクライアントがバックオフなしで単純な再試行を行うと、多数のクライアントが同時にこのループへ陥り、その需要自体が復旧を妨げる悪循環を生む。対応チームが「敵対者を打ち負かす」という前提に固執すると、根本原因の切り分け(需要側の同期という別の説明の検討)を誤ることが、この概念の実務上の要点である。(Source: [[@2020__OReilly__Building Secure and Reliable Systems - Chapter 10 Mitigating Denial-of-Service Attacks]] ch.10 §Dealing with Self-Inflicted Attacks)
## 横断的知見
(本概念は現時点では [[@2020__OReilly__Building Secure and Reliable Systems - Chapter 10 Mitigating Denial-of-Service Attacks]] 単独からの立ち上げである。今後、過負荷・クライアントリトライ挙動・レジリエンスを扱う他ソースが ingest された際、この分野の突き合わせ知見をここに蓄積する。)
## 未解決の問い
- クライアントの再試行ループが自作 DoS を生む条件(バックオフの有無、ジッターの有無)は本章で明確だが、外部イベントによるユーザー行動の同期(地震の例)については、事前にどこまで需要スパイクの規模を予測・キャパシティプランニングに織り込めるかは本章では論じられていない。
- 敵対者による攻撃と自作のサービス妨害は波形だけでは区別がつかないと本章は述べるが、両者を実務的に切り分けるための具体的な判定手順(トラフィックの発生源分布、リクエスト内容の多様性など)は、Bot or Not のコラム(2009年 Google Web Search の事例)で個別に示された調査の勘所以上には一般化されていない。この切り分け手順を体系化した他ソースがあるかは未確認。
- 権威 DNS サーバが受ける「アウテージ後の再試行率が平常の約30倍に達する」という具体例は DNS に固有の現象か、他のプロトコル・サービスでも同程度の倍率が観測されるのか、本章単独では一般化できない。
- 自作のサービス妨害という現象は、[[過負荷制御]] が扱う「需要超過への防御側の受付制御」とは逆向きの問題(需要側の設計不備が受付制御の負荷そのものを増幅する)にあたる。両者を統合した「需要側と供給側を跨ぐ過負荷対策」の枠組みが他ソースに存在するかは未検証。
## 関連
- ソース: [[@2020__OReilly__Building Secure and Reliable Systems - Chapter 10 Mitigating Denial-of-Service Attacks]](§Dealing with Self-Inflicted Attacks: User Behavior・Client Retry Behavior・Bot or Not?)
- 概念: [[過負荷制御]](需要超過に対する防御側の受付制御という隣接領域) / [[サービス妨害攻撃とネットワークプロトコルの悪用]](敵対者が存在する場合のDoSとの対比)
- 章: [[@2020__OReilly__Building Secure and Reliable Systems - Chapter 10 Mitigating Denial-of-Service Attacks]]
## 出典
- Heather Adkins et al. (eds.), *Building Secure and Reliable Systems*, O'Reilly Media, 2020, Chapter 10.