知らないと勘違いする「合成の誤謬」の罠

(Last Updated On: 2019年2月21日)

今回は情報技術者にも役立つ経済学の用語を紹介します。多くのWebアプリケーション開発者、もしかすると他の技術者も知らない合成の誤謬です。「合成の誤謬」(ごうせいのごびゅう)とはもともとは経済学用語で、以下のように定義されています。

《 fallacy of composition 》個人や個々の企業ミクロ視点で合理的な行動をとった結果社会全体では意図しない結果が生じること。例えば、企業が経営健全化するために人件費を削減すると、個人消費が減少し、景気低迷を長引かせる結果となることなど。

http://kotobank.jp/word/合成の誤謬

注:誤謬(ごびゅう)とは「誤り」「間違い」を意味する言葉です。解りやすく書くなら「合成の誤り」です。あまり一般的な用語ではないと思いますが、経済学用語なのでそのまま使っています。

「合成の誤謬」は経済学でのみ発生するのではなく、様々な分野で発生します。情報セキュリティもその一つです。合成の誤謬を解説する前に、なぜミクロ経済学とマクロ経済学があるのか解説します。

ミクロ経済学とマクロ経済学

ミクロ経済学とは経済を構成する一部、個人や企業といった小さな部分、の経済学です。マクロ経済学とは経済全体を対象とする経済学です。同じ経済学なのになぜミクロとマクロに分かれているのでしょうか?その理由は合成の誤謬の定義そのものです。ミクロ経済として合理的で正しい行動や判断を行っても、個々の”正しい”行動・判断が集合したマクロ経済では”正しい”結果でなく、好ましくない悪い結果を生む場合があります。ミクロ経済学とマクロ経済学は分けて考えないとどうしても矛盾が発生するので別々に体系化されています。

ミクロ的には「良い」ことであっても、マクロ的には「悪い」結果をもたらす、このような事は経済学に限らず様々な分野で発生します。局所的に良い事を積み重ねても、必ずしも全体として良い結果とはならない。これが合成の誤謬の罠です。これは情報セキュリティにおいても同じです。

合成の誤謬とセキュリティ

セキュリティをミクロで考えると「特定の脆弱性」に対して「最も効果が高い対策」つまり「直接的な原因に対する対策」を行うと効果的に見えます。「脆弱性が発生した直接の原因となる部分に対策を行う」は間違っていません。しかし、これを繰り返すとどうなるでしょうか?

「脆弱性が発生した直接の原因となる部分に対策を行う」が最良の行動である、こうすべきである、と考えてしまうと「脆弱性が発生した直接の原因となる部分に対策」以外は「セキュリティ対策として不適切」という考えに陥ってしまいます。こうなってしまうとセキュリティ対策の基本概念である「境界防御」や多重の対策を行う「縦深防御」を否定する事になります。

セキュリティをミクロで考える事も大切ですが、マクロで考える方が重要です。セキュリティ対策の目的は「個別の小さな部分のリスクを緩和・除去する」ことのみでありません。「全体のリスクを管理・緩和する」ことが目的です。ミクロ経済学が不必要でないことと同じで、ミクロ的なセキュリティ対策は不必要ではありません。しかし、個別の脆弱性に対するミクロ的な対策を積み重ね、直接的でない対策である「境界防御」「縦深防御」を否定しまっては本末転倒です。

合成の誤謬を生じるかも知れない考え方は、セキュリティ標準と基本概念を理解すれば防げると思います。これについては既に解説しています。

参考:標準と基本概念から学ぶ正しいセキュリティの基礎知識

ミクロ経済学とマクロ経済学が分けて体系化されているように、セキュリティ対策もミクロ的対策とマクロ的対策は分けて理解する必要があります。

経済学とセキュリティ対策の本質

経済学は経済全体を学問します。ミクロ経済学は経済学の一部でしかありません。セキュリティ対策は全体のセキュリティを維持または向上させる為に行います。ミクロ経済学は経済学の一部でも重要な学問です。しかし、ミクロ(局所的)に最適化された場合、経済全体では悪い結果をもたらす事があります。ミクロ(局所的)に最適化されたセキュリティ対策だけでは、セキュリティ全体に悪い結果をもたらす事があります。

木を見て森を見ず、では経済全体は語れない。同様に、木を見て森を見ず、ではセキュリティ対策も語れません。全体を見ることが大切です。合成の誤謬を生む局所的な対策は部分的には正しいので、誤りに気付くことは難しい場合もあると思います。経済学でもセキュリティでも、合成の誤謬を生んでしまう対策は全体としては正しいとは言えません。

経済学もセキュリティ対策も基本的には「全体に対する考え方」と理解すると誤解してしまう可能性を減らせると思います。

セキュリティにおける合成の誤謬を定義するとすれば、以下のような物になるでしょう。

脆弱性に対してミクロの視点で脆弱性を解消する最適解を求める合理的な行動をとった結果、システム全体としてのセキュリティを低下させる結果となること。例えば、個別の脆弱性の原因と対策のみを考慮し対策した結果、セキュリティ対策の基本概念である境界防御や縦深防御などの必要不可欠な対策を行わないなど。

ミクロセキュリティ対策でITシステムのセキュリティ対策が十分にならない理由

 

ITシステムのセキュリティ対策の目的は「ITシステムの許容可能なリスクの範囲内で利用する」です。ITシステムと使っている限りリスクは必ずどこかに残ります。「ITシステム全体」としてセキュリティリスクを許容範囲内に抑えるには、

  • ITシステム全体のリスクを把握し、
  • 許容可能なリスクは許容し、
  • 許容できないリスクには緩和、削減、廃除、代替(保険など)を行う

リスク管理が欠かせません。

ミクロセキュリティ対策だけの積み重ねだけでは、リスク管理の基本である全体のリスクの把握、許容可能なリスクの許容と管理が無い為、ブラックリスト型のセキュリティ対策(目立った悪い部分だけの対策)になり全体最適化が行なえません。ブラックリスト型のセキュリティ対策は構造的にホワイトリスト型のセキュリティ対策(リスク管理の基本を踏まえた対策)より脆弱です。

「目立った悪い部分」は許容できないリスクである場合がほとんどですが、それだけを対策するのは十分にするのは困難です。ITシステムは非常に複雑なので個別のセキュリティ対策の積み重ねのみでは不十分であること見識のあるセキュリティ専門家は指摘しています。

参考:ソフトウェアのセキュリティ専門家は個別脆弱性対策ではない、入力バリデーションを最大のセキュリティ対策としている。

そもそも100%脆弱性がないシステムを作ることは、ある程度の大きさを超えると、ほぼ不可能です。仮定の話として、脆弱性廃除を行い100%脆弱性がないシステムが作れたとします。しかし、ITシステムは常に変化します。

  • OSのバージョンアップ
  • ライブラリのバージョンアップ
  • フレームワークのバージョンアップ
  • アプリケーションのバージョンアップ

これらの他にリスク対策の基準が時代と共に変わっていく場合もあります。(例:古い銀行のキャッシュカードにはカードに暗証番号が記録されていた。これは現在では到底受け入れられないリスクです)

これらは避けられず、致命的な脆弱性を含む、脆弱性が入り込む余地が常にあります。つまり、新しい脆弱性が次々に入り込むにも関わらず、脆弱性廃除だけを行っていてもITシステムは安全になりません

まとめ

セキュリティ対策は「ミクロセキュリティ対策」と「マクロセキュリティ対策」に分けて考える事はありません。個別の脆弱性に対する対策を考える場合にミクロ的な視点は必要ですが、基本的にはコンピューターを利用する事によって発生するリスク全体を管理・削減する対策が「セキュリティ対策」です。

私はコンピューターサイエンス専攻ですが、大学に入った当初は経済学を専攻しようと考えていました。この為、経済学の基本単位を取得しています。経済学でのダブルメジャー(複数の主専攻)も考えたのですが、経済学の履修が単位となる経営学をMinor専攻(準専攻・副専攻)しています。「合成の誤謬」は経済学の基礎知識なので常識と感じているのですが、技術者の多くはそうではないのではないでしょうか?もしかすると、この違いが基本的な部分での考え方の違いの原因なのかも知れません。

プログラミングには合成の誤謬と全く反対方向の定石もあります。Divide and Concur(分割統治)はコンピューターサイエンスの基本です。問題を小さな問題に切り分けて解決することはコンピューターの基本処理です。これは正しいのですが、不適切な切り分け方でこの概念をセキュリティ対策に適用すると、「合成の誤謬」を生み悪い結果をもたらします。Divide and Concurも勘違いの原因の一つかも知れません。

”小さな事からコツコツと”は基本的には正しいです。しかし、時として全体としては好ましくない結果、間違った結果を生む場合があります。「合成の誤謬」は知識の一つとして知っておくと良いと思います。経済学の基礎知識がない方に「合成の誤謬」と言うと難しいかも知れません。「部分最適化より全体最適化」と説明した方が解りやすいかも知れません。

合成の誤謬の罠には気を付けましょう!

具体例: 出力対策はミクロ視点の対策(問題が発生している箇所に着目)、入力対策はマクロ視点(全体として問題が発生する原因に着目)の対策です。出力対策”だけ”の対策は、問題が起きた所に近い場所だけ木を見て森を見ず、の対策になります。セキュリティ対策ではミクロとマクロ、両方の視点からの対策がないと効果的/効率的/根本的な対策になりません。

「出力対策だけのセキュリティ設計」が誤りである理由

エンジニアなら理解る文字エンコーディングバリデーションの必要性

7PK – セキュリティソフトウェア ≠ ソフトウェアセキュリティ

参考:

投稿者: yohgaki