組み込みソフトの不具合、その問題の原因は「ウイルス」か「バグ」か:組み込みエンジニアの現場力養成ドリル(7)(1/2 ページ)
組み込みソフトウェアの不具合原因を突き詰めるには、冷静な判断が求められます。不具合の多くはバグによるものですが、ウイルスが原因であることもあります。あるオフィスのセキュリティシステムに起こった不具合の原因を解明してください。
はじめに
20世紀に発明された楽器がスチールドラムとテルミンなら、20世紀に「発明」され、21世紀で猛威を振るう犯罪が「振り込め詐欺」と「コンピュータ・ウイルス」でしょう。
商用のソフトウェアを開発しているプログラマーにとって、コンピュータウイルスは大きな脅威ですね。顧客に納入した製品の中にウイルスが混入していると、大きな責任問題、信用問題になりますので、ウイルスが入っていないか厳重にチェックします。
一方、教員をしていて感じますが、高校生や大学生はウイルスに対する脅威の感覚に乏しく、意識も非常に低いように思います。演習で作ったソフトウェアがウイルスに感染していたり、高校生プログラミングコンテストの全国大会レベルでも、提出するソースコードを格納したUSBメモリがウイルスに感染していたりします。
言うまでもなく、ウイルス入りプログラムを他人に配布するような行為はあってはなりませんし、ソフトウェア技術者であるまえに人間として最大限の注意を払うべきです。ウイルスの脅威に対して意識の低い学生には、警告のカードを出すことにしています。
「コンピュータ・ウイルス」という言葉を初めて使ったのは、セキュリティの世界的権威であるレナード・アドルマン氏だといわれています。1981年のことです。アドルマン氏の名前は知らなくても「RSA暗号」という言葉は聞いたことがあるかもしれません。
RSA暗号は、データを暗号化する時の鍵と復号する時の鍵が同じではない非対称暗号であり、いわゆる公開鍵方式の暗号です。これを開発したのが、ロナルド・リヴェスト氏、アディ・シャミア氏、レナード・アドルマン氏であり、3人の頭文字を取って「RSA」と名付けられました。
現実社会に影響を与えたコンピュータ・ウイルス
RSA暗号の誕生から10年、新聞やテレビがコンピュータ・ウイルスを2度に渡って大々的に取り上げました。
最初が1991年に起こった湾岸戦争です。多国籍軍がイラクを空爆しましたが、イラクがフランスから購入した防空システム用プリンタのマイクロプロセッサに、ウイルスが仕込まれていたのです。多国籍軍は空爆直前にウイルスを「活性化」し、イラクの防空システムを混乱させました。空爆は成功し、「武器」としてのウイルスが注目されたのです。
2つ目の事件はその2カ月後。1991年3月に一般社会で発病しました。いわゆる「ミケランジェロ・ウイルス」です。これは、ハード・ディスクのブートセクタ領域(電源を入れてOSが最初に読んで実行する箇所)を書き換えたウイルスです。
ウイルスに感染したコンピュータは、イタリアの偉大な芸術家であるミケランジェロの誕生日である3月6日に発病しました。発病したコンピュータはディスク上のデータを広範囲に破壊したため、アメリカでは大きな社会問題になりました。翌年の1992年3月6日も、同じようなデータ破壊が起きる可能性があると、メディアは大きく報道し、警告を出しました。
問題編(制限時間30分)
ここまでの話は問題編の背景で、ここから問題編です。
1992年、私がボストンに駐在していた時のことです。オフィスの規模が大きくなり、エンジニアの数が50人を越えたことや、機密情報の保護を強化するため、本格的な入退室セキュリティ制御システムが導入されました。同年1月半ばのことです。
このシステムは、典型的な組み込み系で、中に組み込んだマイクロプロセッサが正面玄関、裏口、コンピュータ・センター、文書保管室の4つのドアと有線でつながっており、ドアの開閉を制御します。なお、このシステム本体は、コンピュータ・センターに設置してありました。
オフィスで働くプログラマーは、1人1枚の磁気カードを持ち、正面玄関、裏口、コンピュータ・センター、文書保管室へ入る時に、ドア脇のリーダにカードを読み込ませます。休祝日、曜日、時刻、その人の入室権限等を入退室セキュリティ制御システムが総合的に判断してドアの開閉をコントロールする仕組みになっていました。
玄関と裏口のドアは、平日の朝6時から深夜12時まで、全従業員のカードで開きますが、それ以外の時間帯と休日、祝日は終日ドアがロックされ、正面玄関の内側に座っているガードマンに手で合図して中から開けてもらう仕組みでした。また、文書保管室やコンピュータ・センターは、高レベルの入室権限がないとドアは開きません。このシステムが本格的に稼働したのが2月のはじめでした。
そのころ、新聞やテレビで「3月6日にミケランジェロ・ウイルスが発病する」と話題になっていましたが、私をはじめとした50人のプログラマーは、人ごとだと思っていました。ところが、その3月6日にオフィスの入退室セキュリティ制御システムが動作しなくなったのです。何度カードを読ませてもドアは開きません。取りあえずその日はセキュリティシステムを解除し、物理的な鍵による施錠と、手動操作でドアを開閉させました。
不思議なことに、翌週、3月9日の月曜日には、セキュリティ・システムは正常に動作したのです。「新ミケランジェロ・ウイルスは、有効期限が1日限定なのかもしれない」と思い、気持ち悪さを感じつつも、「自然治癒」したと安心していたのですが、その週の13日(しかも金曜日)、再び、セキュリティ・システムが機能しなくなりました。
以上から、入退室セキュリティ制御システムが正しく動作しなかった原因を推理してください。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- 「順調すぎるデバッグ」は本当に順調?
組み込みソフトウェアの開発プロジェクトは工程表に沿って進行します。そこにはデバッグフェーズもありますが、あまりに「順調」である場合、そこには落とし穴が潜んでいるかもしれません。プロマネの立場で「落とし穴」を見つけてください。 - 世界最高のIQを持つ女性 vs 数学者軍団
問題を考える上で感覚(直感)の役目も大きなものですが、感覚だけに頼ると論理的な結果が見えにくくなることがあります。有名な問題を例に、組み込みエンジニアとしてどう問題に取り組むべきか、考えてみましょう。 - 図書館「蔵書分類」のバグ
今回は図書館でおなじみ「本の分類」を取り上げます。情報処理系の本は007(情報学、情報科学)に547(通信工学・電気通信)、548(情報工学)とバラバラに分類されていますが、この分類を「仕様書」と考え、その問題解決に取り組んでみましょう。 - 将棋「名人位」挑戦規定のバグ
組み込みエンジニアの現場力を上げるドリル、今回は「仕様書のバグ」に挑戦します。将棋界の最高タイトルの1つである、名人位の挑戦規定という仕様書に潜むバグを発見してください。 - 「仕様に潜むバグ」を見つける、たった1つの心掛け
組み込み開発の「現場力」を上げるには、問題に取り組み解決することが一番です。今回は「仕様のバグ」に挑みます。実は、仕様に潜むバグを見つけるには、たった1つの心掛けさえあれば良いのです。