/* * RobinとTuck * * 投稿者:Welee * * 自分が読んだ本にあった話を紹介。長文です(苦笑) * */ [[[[[[[ RobinとTuck ]]]]]]]  1970年代の中頃、モトローラ社の何人かのシステムサポート担当者が、XeroxCP-V タイムシェアリングシステムののシステムセキュリティの裏をかく比較的単純な方法を発 見した。簡単なプログラミングテクニックを駆使すれば、ユーザープログラムがシステム をだましてプログラムの一部を「マスターモード」(スーパーバイザー状態)で実行でき るようになるのだ。このモードでは、メモリ保護が適用されないので、「特権レベル」バ イト(普通は書き込み保護されている)に大きな値を設定できるようになり、その結果、 ファイル管理システム内のすべてのレベルのセキュリティをバイパスし、システムモニタ にパッチを当てたりいろいろ面白いことができるようになる。つまり、納屋の扉が大きく 開いてしまうのだ。  当然、モトローラ社はこの問題を、公式の「レベル1SIDR」(「昨日直す必要がある」 ほどの緊急性を示すバグレポート)によってXerox に報告した。個々のSIDRのテキストは 多くの人間の目に触れるおそれのあるデータベースに入れられるので、モトローラ社は望 ましい手順にしたがった。この問題を「セキュリティSIDR」としてだけ報告し、必要な資 料と再現方法などをすべて別に添付したのだ。  ところがXerox のCP-Vの担当は何もしなかった。問題の深刻さを理解しなかったのかも 知れないし、正式なパッチを開発して配布するのに必要なオペレーティングシステム要員 を確保できなかったのかも知れない。  数ヶ月が過ぎた。モトローラ社の連中はXerox のフィールドサポート担当者をさんざん つついたが、なしのつぶてだった。そこで彼らはとうとう直接行動に出ることにし、シス テムを破るのがどれほど簡単で、セキュリティ機構をどれほど徹底的に出し抜けるかをXe rox の連中に見せつけてやることにしたのだ。  彼らはオペレーティングシステムのコードを解析し、極めて邪悪なパッチを書き上げた 。そしてこのパッチを"RobinHood" と"FriarTuck" という名前の1組のプログラムを組み 込んだ。RobinHood とFriarTuck は「ゴーストジョブ」(Unix用語でいうデーモン)とし て動くように設計されており、例の抜け道によってシステムセキュリティの裏をかいて必 要なパッチを施すと、システムオペレータ(要するにスーパーユーザー)が自分たちを終 了させないようにするために、お互いの状態を監視するようになっている。  あるうららかな日に、ElSegundo にあるメインCP-Vソフトウェア開発システムのシステ ムオペレータは数々の怪奇現象に度肝を抜かれた。次のような現象が起こったのだ。 ●テープドライブが作業の途中でテープを巻き戻し、ディスマウントしてしまう。 ●ディスクドライブが床の上を歩き出しそうなくらいに激しく前後にシークする。 ●パンチカード出力装置がときどき勝手に動き始めてレースカード(lace card)を打ち出  す。たいていこれでパンチが詰まってしまう。 ●コンソールに、Robin HoodからFriar Tuckへの(あるいはその逆の)悪口雑言が表示さ  れる。 ●Xerox のカードリーダには出力スタッカーが2つあり、スタッカーAに排出するかBに  排出するか指示できるし、あるいはAに排出し、読み取れなかったカードはBに排出す  るようにも指示できる。しかし、ゴースト当てられたパッチのせいで、カードリーダの  ドライバにコードが追加され、カードを読んだら2つのスタッカーに交互にはじき出す  ようにされてしまった。その結果、カードの束は読まれてから半分ずつの山に吐き出さ  れ、オペレータが手で並べ直さなければならない羽目になった。  当然、オペレータはオペレーティングシステム開発者に助けを求めた。彼らは悪さをす るゴーストジョブが動いているのを発見すると、そいつらを殺した……つもりだったのだ が、そこでまた仰天する事態が起こる。RobinHood を殺すと、次のようなイベントが発生 したのだ。 !X id1 id1: Friar Tuck... I am under attack! Pray save me! (修道士タックよ... やられそうだ! お助けを!) id1: Off (aborted) id2: Fear not, friend Robin! I shall rout the Sheriff of Nottingham's man! (心配するなロビン! ノッティンガムの代官の手下どもなぞ打ち倒してく れる!) id1: Thank you, my good fellow! (感謝するよ、タック!)  どちらのゴーストジョブも相手が殺されたのを感知して、殺されたプログラムの新しい コピーを数ミリ秒以内で起動するのだ。ゴーストを両方ともやっつけるには、同時に殺す (これは非常に難しい)か、システムをわざとクラッシュさせるしかない。  結局システムプログラマは後者の手段を選んだ−−ところがシステムをリブートすると 、あの悪党どもがまた出てくるではないか。やがて、この2つのプログラムはブート時O Sイメージ(UNIXでいうカーネルファイル)にパッチを当てており、ブート時に起動され るプログラムのリストに自分自身を加えているのが判明した。RobinHood とFriarTuck の ゴーストは、システム担当者がシステムをきれいなブートテープからリブートし、モニタ をインストールし直してやっと退治できた。その後間もなく、Xerox はこの問題に対処す るパッチをリリースしたのだった。  Xerox はモトローラ社のお偉い方に対し、2人の社員のいたずらについて正式に抗議し たらしい。だが、どちらの社員も重い処分が下されたという記録はない。 Fin.