Dev Study
← 運用の土台
レッスン 5 / 10·約 9 分·第15期 運用の土台

順位は、観測ではなく合意である

リクエストがアプリケーションに届くまで
  1. ブラウザURL入力
  2. DNS名前→IP
  3. ルータ経路選択
  4. ロードバランサ振り分け
  5. Nginx受け口
  6. アプリ処理今ここ
  7. DB保存

運用の数字は、どれも誰かが引いた線です。この回は、広く引用される順位表そのものがどういう手続きで作られたかを読みます。

まず結論

OWASP Top 10 2021 の10項目は、集めたデータの上位10件ではありません。公式の導入文書が「8項目はデータから、2項目はコミュニティ調査から選んだ」と明記しています。

データを全部使わなかったのは手抜きではなく、宣言された判断です。文書は理由を2度書いています — 集めたデータを見ることは過去を見ることであり(looking into the past)、そのデータは不完全だから(because it's incomplete)。

順位は「世界を測った結果」ではなく「測れたものと、測れていないが重要だと人が言ったものを、どう混ぜるか決めた結果」です。

? 読む前に予測

OWASP Top 10 2021 の10項目は、提供されたデータの中で上位10件だったものが並んでいるのでしょうか。

当てることが目的ではありません。外した予測ほど記憶に残るので、直感で選んでください。

抽象原理

「運用の線」— 順位表は測定の出力ではない

この期では、運用の数字を「誰かが引いた線」として読み直します。第14期が設計の線を扱ったので、こちらは運用の線と呼び分けます。

順位表を見ると、私たちは自然にこう読みます — 世界を測った結果で、上から順に「よくある」ものが並んでいる、と。しかし順位表を作るには、少なくとも3つの判断が要ります。

  1. 何を数えるか — 件数か、見つかったアプリの割合か
  2. どこまでを1つのまとまりとするか — 分類の粒度
  3. 測れていないものを、入れるか外すか

どれもデータからは決まりません。データは「こう数えたらこうなった」としか言えず、どう数えるかは先に決めておく必要があるからです。だから順位表は、測定の出力ではなく測定と判断を混ぜた合意になります。

具体実物

OWASP Top 10 2021 は、自分でそう書いている

珍しいのは、この文書が自分の作り方を明文化している点です。2021版の導入文書はこう書きます。

OWASP Top 10 2021, Introduction — Methodology(原文抜粋)コマンド出力
This installment of the Top 10 is more data-driven than ever
but not blindly data-driven. We selected eight of the ten
categories from contributed data and two categories from the
Top 10 community survey at a high level. We do this for a
fundamental reason, looking at the contributed data is
looking into the past.

読み落としやすいのは2行目です。not blindly data-driven — 以前よりデータに基づくが、盲目的にデータへ従うのではない。批判者の言葉ではなく、作った側の自己規定です。

そして配分が書かれています。10枠のうち8枠がデータ、2枠が調査。残り2枠は余りではなく、最初から確保された枠です。

理由も同じ文にあります。looking at the contributed data is looking into the past(提供データを見ることは、過去を見ることである)。新しい弱点が見つかってから検査方法が確立し、道具に組み込まれ、大規模に測れるようになるまでには遅れがある、という認識です。

✓ ここまでの確認

OWASP Top 10 2021 の導入文書が「2項目をデータ以外から選んだ」理由として挙げているのはどれですか。

抽象原理

一般化 — 「データが無い」には2種類ある

同じ理由が、文書の別の節ではもっと短く書かれています。

Therefore, we only pick eight of ten categories from the data because it's incomplete.

because it's incomplete — データが不完全だから。続けて調査枠の役割を、実務者が「データに無いかもしれない、そしてデータには永久に現れないかもしれない(and may never be expressed in data)」リスクに投票できるようにするためだ、と説明します。

データが無いことには2種類あります。

  • まだ写っていない — 測る手段が追いついていないだけで、いずれ数字になる
  • そもそも写らない — その測り方では数字にならない

順位表を作る側は「2枠は数字の外から入れる」と決めました。この判断はデータからは出てきません。 データは自分が何を取りこぼしているかを示さないからです。性能編『写っていないことは、起きていない証拠ではない』と同じ構造が、順位表の作り方の側に現れています。

10枠がどう埋まるか
提供データover 500,000 applications
コミュニティ調査実務者の投票
それぞれの選び方
発生率の高い順に8件frequency は使わない
データに無いものの上位2件データ側にあるものは除く
合わせて
Top 10 2021 の10枠8 + 2。配分は文書に明記
  • 8枠と2枠は集計の結果ではなく、先に決められた配分
  • 選出後に、悪用しやすさと影響の一般化された係数を当てて並べ替える
具体実物

対比例 — 同じ文書が、分類の作業についても同じことを書いている

同じ文書の別の場所、カテゴリの切り方を見ます。

OWASP Top 10 2021, Introduction — How the categories are structured(原文抜粋)コマンド出力
We spent several months grouping and categorizing CWEs
and could have continued for additional months.
We had to stop at some point.

We had to stop at some point(どこかで止めるしかなかった)。完成した分類ではなく打ち切った分類だと書いています。実際、1カテゴリあたり平均 19.6 個の CWE がまとめられ、少ないほうは1個、多いほうは40個です。同じ「1カテゴリ」でも粒度は揃っていません。

収集の枠組みも変わっています。従来は約30個の CWE を指定して募っていましたが、提供側がその30個にしか目を向けなくなることが分かり、2021版では制限なしで募集して分析対象は約400個の CWE に広がりました。

版のあいだで順位が動くとき、原因は3つありえます。

  • 測られている側が変わった
  • 測り方(何を募り、何を数えるか)を変えた
  • 分類の切り方、あるいは打ち切る場所が変わった

後ろの2つは、脅威の実態とは独立に順位を動かします。

✓ ここまでの確認

「Top 10 の順位が版ごとに変わるのは、脅威の実態が変わったからだ」という説明は、2021版の導入文書の記述と照らしてどう評価できますか。

⇄ 2つを見比べる
具体例 A

Top 10 2021 の10枠

データからは8枠だけを採り、2枠は調査に充てています。提供データを見ることは過去を見ることであり、そのデータは不完全だから、という理由が明記されています。

由来表
枠数 由来 選び方
8 提供データ 発生率の高い順
2 調査 データに無いものの上位
具体例 B

カテゴリの切り方

分類作業はあと数か月続けられたが、どこかで止めるしかなかったと書かれています。結果として1カテゴリの CWE 数は1個から40個まで幅があります。粒度は測って決まったのではなく、打ち切った場所で決まっています。

1カテゴリの CWE 数表
指標 値
平均 19.6 個
最小 1 個
最大 40 個

「2枠を調査から採る」と「分類をどこかで打ち切る」。対象は違いますが、共通する構造は何でしょうか。

どちらもデータだけでは決まらないことを誰かが決めています。決めたことを文書がどう扱っているかに注目してください。

この章のまとめ

  • OWASP Top 10 2021 の10項目は、データの上位10件ではない。8項目がデータ、2項目がコミュニティ調査という配分が導入文書に明記されている。
  • 文書は自らを not blindly data-driven と規定している。「よくある脆弱性の集計一覧」という読み方は、公式文書自身が否定している。
  • 2枠を残した理由も明記されている。looking at the contributed data is looking into the past と because it's incomplete。
  • 調査由来と名指しされているのは A09 と A10。A06 は調査で2位だったがデータ側でも入ったため、この2枠には数えられていない。
  • 分類についても We had to stop at some point とある。順位が版ごとに動く原因には測り方と分類の切り直しが含まれ、実態の変化だけではない。
  • 順位表を読む技術は、どこまでが測った値でどこからが決めた値かを切り分けること。個々の項目の中身はクイズ「OWASP Top 10(2021)全10項目」で扱う。

自分の現場で確かめる

読んだだけでは身につきません。手元の環境で実際に見てみてください。

環境:

理解度チェック

読んだ直後は「分かった」と感じやすいものです。実際に解いて確かめてください。

問題 1 / 4正解: 0

OWASP Top 10 2021 の導入文書が自らの方法論に与えている自己規定はどれですか。

用語集(4語)
OWASP Top 10
Web アプリのセキュリティリスクを10のカテゴリにまとめた文書。本レッスンで扱うのは 2021 版。8項目は提供データから、2項目はコミュニティ調査から選ばれている。
コミュニティ調査 (Top 10 community survey)
現場の実務者に「データにまだ出ていないが重要だと思う弱点」を投票してもらう調査。2021版では、データに既に入っているものを除いた上位2件が採用された。
発生率 (incidence rate)
そのカテゴリの所見が見つかったアプリの割合。2021版はこれで8カテゴリを選ぶ。報告件数(frequency)は明示的に使わないと書かれている。
CWE
弱点の種類につけられた分類番号。2021版では約400個が分析対象になり、1カテゴリあたり平均19.6個がまとめられている。