「史上最悪のソフトウェアバグ」ワースト10を紹介(上)

1982年に旧ソ連でシベリアを横断するガス・パイプラインが大爆発を起こしたのは、管理用に購入されたカナダ製コンピューターシステムに、米中央情報局(CIA)のスパイがバグを仕掛けたからだとされる。放射線治療装置がプログラムミスによる誤動作を起こし、死者が出たケースもある。――ワイアード・ニュースが選ぶバグの歴代ワースト10。

Simson Garfinkel 2005年11月15日

トヨタ自動車は先月、何もしないのに警告灯が点灯し、ガソリンエンジンが突然停止するとの報告を受け、ハイブリッド車『プリウス』約16万台を無償修理すると発表した。しかし、今回のプリウスの問題は、これまでの大規模な自動車のリコールと違い、ハードウェアが原因ではなかった――ハイテクを駆使したこのスマートカーに組み込まれたプログラムのバグが原因だった。

今回の問題により、プリウスはバグを抱えるコンピューターの仲間入りをした。史上初のコンピューター・バグは1945年、『ハーバード・マーク2』のFパネルの70番リレーに虫が挟まった時にまでさかのぼる。乗算器と加算器のテスト中、異常に気づいた技術者が、この部分に蛾が挟まっているのを見つけたのだ。原因となった蛾は、「バグ(虫)が実際に見つかった最初のケース」との説明文とともに、業務日誌にテープで貼り付けられた。

それから60年が経ったが、コンピューター・バグはいまだに存在しつづけ、絶滅する気配はない。ソフトウェアとハードウェアの境界があいまいになる中、プログラムのミスが日常生活に影響を与えることもますます増えている。もはやバグの生息地は、オペレーティング・システム(OS)やアプリケーションの中にとどまらない――今では携帯電話やペースメーカー、発電所や医療機器にもバグは潜んでいる。そして今回は車にも発見されたわけだ。

しかし、最悪のバグといったら、どれになるだろうか?

大混乱を引き起こしたバグをリストアップするのは簡単だ。だが、その重大性に順位を付けるとなると難しい。たとえば、ワームに悪用され、インターネットを数日間にわたってマヒ状態に追い込んだセキュリティーの脆弱性と、国中の電話システムが丸一日機能不能になるきっかけを作ったタイプミスと、どちらがより深刻だろうか? その答えは、あなたが電話をしたいのか電子メールをチェックしたいのかで変わってくる。

多くの人は、人命にかかわる事態を起こすバグが最悪のものだと考えている。もちろんその数は少ないが、1980年代後半、放射線治療装置『セラック25』がプログラムミスによる誤動作を起こし、放射線障害で死者が出たケースなどは、安全が非常に重視される用途にやみくもにソフトウェア的手段を用いることへの警告として知られている。

ただし、このようなシステムを研究する専門家は、あるソフトウェアによりごく少数の死者が出るとしても、こうした危険性にばかり焦点を当てていては、処理能力の向上が切に望まれている分野への新技術の導入が進まなくなる恐れがあると警告する。結局は、ソフトウェアが導入されなかったために命を落とす人のほうが、バグによる事故での死者よりも多くなりかねないというのだ。

ともかく、バグが尽きないことだけは確かなようだ。以下に、ワイアード・ニュースが選ぶバグの歴代ワースト10を年代順に挙げていく……あくまで現時点までのことだが。

1962年7月22日――火星探査機『マリナー1号』: マリナー1号は打ち上げ時に予定のコースを外れたが、これは飛行ソフトウェアのバグが原因だった。地上の管制センターは大西洋上でロケットを破壊した。事後調査により、鉛筆で紙に書かれた数式をコンピューターのコードに置き換えるときにミスが起き、これが原因でコンピューターが飛行コースの計算を誤ったことが判明した。

1982年――旧ソ連のガス・パイプライン: シベリアを横断するガス・パイプラインの管理に旧ソ連が購入したカナダ製のコンピューターシステムに、米中央情報局(CIA)のスパイがバグを仕掛けたことがあるという(PDFファイル)。旧ソ連は当時、米国の機密技術を密かに購入しようと――または盗み出そうと――しており、このシステムを入手したのもその一環だった。だが、計画を察知したCIAはこれを逆手にとり、旧ソ連の検査は問題なく通過するが、いったん運転に入ると機能しなくなるように仕組んだとされる。この結果起きたパイプライン事故は、核爆発以外では地球の歴史でも最大規模の爆発だったという(日本語版記事)

1985〜1987年――セラック25: 複数の医療施設で放射線治療装置が誤作動し、過大な放射線を浴びた患者に死傷者が出た。セラック25は2種類の放射線――低エネルギーの電子ビーム(ベータ粒子)とX線――を照射できるよう、既存の設計に「改良」を加えた治療装置だった。セラック25では電子銃と患者の間に置かれた金属製のターゲットに高エネルギーの電子を打ち込み、X線を発生させていた。セラック25のもう1つの「改良」点は、旧モデル『セラック20』の電気機械式の安全保護装置をソフトウェア制御に置き換えたことだった。ソフトウェアの方が信頼性が高いとの考えに基づく判断だった。

しかし、技術者たちも知らなかった事実があった――セラック20およびセラック25に使われたOSは、正式な訓練も受けていないプログラマーが1人で作成したもので、バグが非常にわかりにくい構成になっていたのだ。「競合状態」と呼ばれる判明しにくいバグが原因で、操作コマンドを素早く打ち込んだ場合、セラック25ではX線用の金属製ターゲットをきちんと配置しないまま高エネルギーの放射線を照射する設定が可能になっていた。これにより少なくとも5人が死亡し、他にも重傷者が出た。

(11/16に続く)

[日本語版:緒方 亮/長谷 睦]

WIRED NEWS 原文(English)