> [!abstract] 概要(abstract の日本語訳)
> 現代の計算機システムは脆弱で信頼性に乏しい。人間は計算機システムの運用のあらゆる段階で、その保守と修復に関与している。この水準の人間の関与を将来にわたって維持することは不可能になるだろう。同等以上の複雑性を持つ生物・社会システムは、その生存に不可欠な自己治癒プロセスを備えている。将来の計算機システムが複雑で敵対的な環境の中で繁栄しようとするならば、そうしたシステムを模倣する必要があるだろう。本論文は将来研究のための戦略を記述し、既存のソフトウェアシステムを土台とした現在向けの具体的な施策を要約する。
## 論文情報
- タイトル: Computer Immunology
- 著者: Mark Burgess(Centre of Science and Technology, Oslo College, Norway)
- 媒体: Proceedings of the 12th Systems Administration Conference(LISA '98), USENIX Association, Boston, MA, 1998-12-06〜12-11(掲載ページ 283–299)
- URL: https://www.usenix.org/conference/lisa-98/computer-immunology
- コード/関連プロジェクト: GNU cfengine(著者自身が開発したサイト構成管理ツール)
## 概要
著者 Mark Burgess(cfengine の作者)が、生物・社会システムの自己治癒プロセスとの類推から、計算機システムに「免疫系」を組み込むという構想を提示した位置づけ論文(vision paper)。単一の実験や定量評価を主目的とはせず、既存のシステム管理ツール群(特に cfengine)を免疫系の部品として再解釈し、将来研究の方向性を具体的な設計指針として整理する内容である。
## 問題設定
- **前提**: 現代の計算機システムはエラーや障害のたびに人間の診断・介入を必要とする。オペレーティングシステムの設計はタスク間の資源共有が中心であり、資源保護・維持のための追加的な仕組み(免疫系)が組み込まれていない。
- **入力**: システムログ、プロセスのシグナル、ディスク使用量などのシステム状態の観測。
- **出力**: 望ましくは、人間の介入なしに問題状態を検知し是正する自律的な応答(免疫応答)。
- 著者は「人間が計算機と同じくらい無力だったら」という思考実験(体の不調のたびに医師が呼ばれる状況)を導入部で提示し、現在の計算機システム運用の異常さを強調する。
## 提案手法
- **収束的意味論(converging semantics)によるリアクタモデル**: cfengine は望ましい状態を宣言的に記述し、系がその状態に達すると不活性(quiescent)になる。この「収束」は免疫系が病原体を排除して平常状態に戻る挙動のアナロジーとして位置づけられる。Figure 1(本ページに埋め込み)は cfengine が Disks・Processes・SWATCH/BRO と双方向に通信し、系を安定化させる構造を示す。
- **危険モデル(danger model)の採用**: 自己/非自己の区別に基づく古典的免疫理論には、自己抗原に反応しない・未知の抗原にも抗体を作れるといった説明できない現象がある。論文は Matzinger の危険モデル(細胞が「悪い死に方」をしたときに発するシグナルに反応する)を採用し、計算機のアナロジーとして SIGCHLD(通常終了、apoptosis に相当)と SIGSEGV/SIGBUS/SIGABRT 等(異常終了、necrosis に相当)の区別を提案する(Figure 2 相当の signals.h の対応表)。
- **多スケールのパターン照合**: 危険なコードパターンの検知を単一スケールで行うと非現実的な数の照合が必要になる(下記「実験設定」参照)。手続き呼び出し・ループ・高水準文といった複数の粒度でパターンを照合することで、現実的な照合回数に近づけられると論じる。
- **フィードバックとリアクタの階層化**: cfengine のようなリアクタ(条件を検知して応答を起動する系)がログを記録し、その記録を用いて次回の挙動を調整するフィードバックループを提案する。ネットワーク層でも同様に、プロトコル解析に基づいて動的にパケットフィルタやアクセス制御リストを調整するリアクタが構想される。
- **時系列・統計力学的アプローチ**: システムの活動を離散イベントの集合としてではなく、温度・エントロピーに類する統計的な平均量として捉える構想を提示する。Figure 4(本ページ未埋め込み、テキストで言及)は 1 週間分のディスク使用量とその「エントロピー」「エントロピー勾配」を重ねて示した図であり、平均化によって連続的なポテンシャルが得られることを示す例として提示される。
## 新規性
- 当時のシステム管理ツール(Tivoli、HP OpenView、Sun Solstice、Host Factory 等)を、免疫系の要素として比較・再評価している点が特徴である。論文は各ツールを「双方向通信はあるが自動修復がない」「マスタイメージによる置換は乱暴すぎる」などと評し、cfengine を「宣言的・収束的意味論を持つ点で先行ツールと異なる」と位置づける。
- 自己/非自己モデルではなく危険モデルを計算機システムに適用するという着想は、当時(1998年)の免疫学における議論(Matzinger 1994)を直接輸入したものであり、著者自身も「議論の余地がある(controversial)」理論と明記した上で採用している。
- cfengine の実運用経験(Burgess の一連の先行研究 [3, 4, 5, 6, 36])を土台に、免疫系構想を「既存ソフトウェアの延長として実現可能な範囲」と「将来 OS のコアに組み込むべき範囲」に切り分けて論じている点は、単なる生物学アナロジーのエッセイに留まらない実装志向を示す。
## 実験設定
本論文は定量実験を主目的としない位置づけ論文であり、独立したデータセットや比較対象を用いた評価は行われていない。ただし以下の定量的な見積もりが本文中に示される。
- **パターン照合の必要回数の見積もり**: 危険パターンの総量を S バイト、単一の検知エージェントが認識できる範囲を ΔS としたとき、n 個の検知エージェントで脅威を見逃す確率は Pn ≈ e^(−nΔS/S) と近似される。50% の脅威を識別するには n ≈ 0.7·(S/ΔS) 個の照合が必要となる。ΔS/S ≈ 0.001(危険パターン総数が数千程度と仮定)の場合、n ≈ 7000 回の照合が 1 個の疑わしいオブジェクトに対して必要になると試算し、これは生物学的な免疫系(1012 個のリンパ球規模)の物量に比べて計算機には非現実的な数だと結論づける(出典: Perelson and Weisbuch 1997 の標準的な議論を援用)。
- **生物学的免疫系の規模**: 免疫系は任意の時点で 10^7 種類の感染性タンパク質を認識し、T 細胞は 10^16、B 細胞は 10^11 のレパートリーを持つ一方、免疫応答自体の効率は 10^-5(0.001%)程度に過ぎないと紹介する(出典: Perelson and Weisbuch 1997)。最小の機能する免疫系(オタマジャクシの幼生)でも 10^6 リンパ球規模であり、いかなる計算機システムよりも桁違いに大きいと比較する。
## 実験結果
上記のとおり本論文は独立した実験結果を持たない。提示される「結果」は既存システム(特に cfengine)の運用経験に基づく定性的評価と、上記の理論的見積もりに限られる。Table 1(本ページに markdown 表として転記)は、著者が「今日構築できる最良の免疫系」として cfengine・Bro/Network Flight Recorder・load average の組み合わせを提示したものである。
**Table 1: A makeshift immune system today**
| 機能 | 要素 | 説明 |
|---|---|---|
| Convergence(収束) | cfengine | 構成管理のためのエキスパートシステムを構築し、システム状態と活動を「クラス」を用いたスイッチで相関させ応答を起動する |
| Detection(検知) | Bro / Network Flight Recorder | イベント発生に基づく侵入検知 |
| Detection(検知) | load average | プロセス負荷平均の閾値検知が cfengine のクラスデータにフィードバックする |
| — | cfengine(応答) | サービスへのアクセス制限、不正プロセスの kill 等を実行する |
(Source: Table 1, p.295)
## 考察
- **強み**: cfengine の実運用実績を土台に、免疫系構想を段階的な設計指針(prevention / infection or attack / learning systems / protocols)に分解して論じている点。生物学的知見(danger model、クローン選択、抗体の冗長性)を単なる比喩ではなく、計算機アーキテクチャへの具体的な写像(SIGCHLD/SIGSEGV の区別、パターン照合のスケール分解等)として提示している点。
- **限界・課題(著者自身が明記)**:
- パターン照合による危険検知は、生物学的な物量(10^12 リンパ球規模)を計算機システムでは再現できず、「数のゲーム」では戦えないと著者自身が認める。
- 自己/非自己モデルは計算機的に定義しづらく、著者は危険モデルへの転換を提案するが、危険モデル自体も生物学において「議論の余地がある」理論であることを明記している。
- セキュリティについては意図的に議論を避け(「主観的で厳密な議論から外れる」)、安定性(stability)の議論に絞ると明言している。
- 論文末尾の "Note Added" で、著者は投稿後に Hoogenboom and Lepreau [67] の時系列解析に関する近い研究を知ったと述べ、十分な検討ができなかったことを認めている。
- 本論文は 1998 年時点の essay/vision paper であり、後の autonomic computing・self-healing systems・AIOps 研究の先駆的な問題提起として読める。
## 強み / 弱点・課題
- **Strengths**: 生物学的アナロジーを SIGCHLD/SIGSEGV のような具体的なシステムコール・シグナルの区別にまで落とし込み、実装可能な設計原則(収束的意味論、多スケール照合、フィードバックループ)として提示した。cfengine という実在するツールの経験に裏打ちされている。
- **Weaknesses/Limitations**: 定量評価が理論的な見積もりに留まり、実システムでの効果測定は行われていない。危険モデルの採用根拠は生物学側でも係争中の理論に依拠する。セキュリティを意図的にスコープ外としており、免疫系構想が想定する「脅威」の範囲が障害・資源枯渇に偏っている。
**Figure 1: Cfengine communicates with its environment in order to stabilize the system**
![[_attachments/burgess-lisa98-computer-immunology/fig01-cfengine-reactor-architecture.png]]
(Figure 1. cfengine が Disks・Processes・SWATCH/BRO と双方向矢印で通信する構成を示す。cfengine が系を望ましい状態に収束させ、いったん収束すると不活性(quiescent)になるという「収束的意味論」の哲学に本質的な通信であると本文は説明する。Source: Adapted from Figure 1, p.287.)
**Signals 対応表(Figure 2 相当、p.291)**
| Signal | Cause |
|---|---|
| SIGINT | Interrupt/break or CTRL-C |
| SIGTERM | Terminate signal |
| SIGKILL | Instant death |
| SIGSEGV | Segmentation (memory) violation |
| SIGBUS | Bus error/hardware fault |
| SIGABRT | Abnormal termination |
| SIGILL | Illegal instruction |
| SIGIOT | Hardware fault |
| SIGTRAP | Hardware fault |
| SIGEMT | Hardware fault |
| SIGCHLD | Child process exiting (apoptosis) |
(Source: Figure 2, p.291. 本文は SIGCHLD による正常終了を apoptosis(プログラム細胞死)、SIGABRT/SIGBUS/SIGSEGV 等による異常終了を necrosis になぞらえ、免疫応答を起動する危険シグナルの計算機的対応物として位置づける。)
> [!note] Figure 3・4 について
> Figure 3(システム挙動の平均化によるトレンド抽出の模式図、p.294)と Figure 4(1 週間のディスク使用量・エントロピー・エントロピー勾配の重ね書きグラフ、p.295)はいずれもベクター描画のグラフであり、pdf.js による埋め込みラスター画像抽出では取得できなかった。PyMuPDF によるページ座標クロップも軸ラベルとキャプションのテキストブロックが重なり精度が低かったため、本ページでは画像として埋め込まず、上記「提案手法」節で内容をテキストとして記述するに留めた。