最古のコンピューター脆弱性
First published Thu Dec 24 23:57:46 2015 +0900 ; substantive revision Fri Dec 25 03:01:15 2015 +0900
皆さんが日夜格闘している脆弱性ですが、ところで脆弱性とは何なのでしょうか?もちろん「脆弱性」というキーワードで検索すれば辞書的な説明—例えば、「セキュリティ上の欠陥」—はいくらでも得られます。とはいえ、「セキュリティ上の欠陥」では単なる言い換えに過ぎません。
もっと具体的な定義を与えることもできそうですが、細かく定義していくと今度は「セキュリティ上の欠陥」についての見解の相違が表面化してきます。あるいはバグハンターなら、「セキュリティ上の欠陥」かどうかでベンダーと見解が合わずに苦い思いをした経験があるかもしれません。ベンダーのセキュリティエンジニアなら逆の立場で苦労することもあるでしょう。
ここでは見方を変えて、語られるものとしての脆弱性をそもそも可能にしている、脆弱性という概念そのものを探ってみたいと思います。脆弱性の概念を分析するためのひとつの手がかりは、コンピューター脆弱性は少なくともコンピューターの登場によって初めて可能になった概念であるということです。
まあ、確かに18世紀アメリカのどこを探してもコンピューター脆弱性はなさそうですが、コンピューターの登場といってもENIACに脆弱性はあったのでしょうか?戦略としては、今実際に通用している「脆弱性」から見ていくのがよさそうです。
CVE-1999-0001
まずはお馴染みCVE (Common Vulnerabilities and Exposures) から追ってみます。MITRE CorporationによるCVE制度は1999年1月の第2回Research with Security Vulnerability Databasesワークショップで発表された「Towards a Common Enumeration of Vulnerabilities」で提案されています。
この約5ヶ月後に最初のCVE識別子が出ました。1999年6月7日に割り当てられているOpenBSDにおけるDoSに関するCVE-1999-0001です。ところが、これは1998年12月21日に公表されたCA-1998-13と同一の脆弱性であるという注記があります。
実はCVE制度に先立ってすでに、CA (CERT/CC Advisories) をはじめとする脆弱性情報データベースが存在していました。ただ、当時のCERT/CCは脆弱性に関して特に攻撃に結びつくような情報は公表しない方針でした。これには(攻撃手法が分からないと)具体的な防御策が立てにくいといった批判もあり、PoCやexploitも合わせて公開できるBugTraqのような場が全面開示 (full disclosure) の動きから生まれたりもしています。CVE制度の設立には、このような時代情勢を背景に、とりあえず散らばった脆弱性情報を集約して脆弱性を特定可能にするという意図がありました。
CA-1988-01
元の目的に戻って、今度はCVE以前のCERT/CC時代の脆弱性を追っていきます。
CVE-1999-0001から遡ること約11年、1988年12月にCERT/CCから最初のアドバイザリーであるCA-1988-01が出ています。これはsendmailの脆弱性やftpdの脆弱性、推測されやすいパスワード等々に関するものです。
このCA-1988-01はCERT/CCの設立に深く関わっています。アドバイザリー公表1ヶ月前の1988年11月、コンピューターワームに関するおそらく最初のインシデントであるMorris worm事件が起こりました。この事件への対応に際して脆弱性情報の共有がうまくいかなかったことの反省から、カーネギーメロン大学のSoftware Engineering Instituteに設置されたのが世界初のCSIRTであるCERT/CCです。CA-1988-01のsendmailの脆弱性は、他ならぬこのMorris wormによってexploitされた脆弱性のひとつです。
ちなみにこの事件で、1986年に成立したコンピュータ詐欺及び不正使用取締法 (Computer Fraud and Abuse Act) が初めて適用されることになりました。
先史時代
ここまで脆弱性のいわば諸年表の始まりを辿ってきましたが、実際のところCERT/CCが設立された1988年の時点ではすでにハッカーという言葉がコンピューター犯罪者を指して使われていたほどで、脆弱性の起源に至るにはさらに遡る必要があります。
そもそもCERT/CCが脆弱性情報を共有するためにできたことを考えればこれ以前の資料をきちんと探すのはかなり大変なのですが、ありがたいことに2005年にOSVDBが記録が残っている最古の脆弱性を探すコンテストを開催しています!結果発表によれば、CA-1988-01からさらに遡ること約23年、1965年1月1日のIBM 7094 CTSS System Text Editor Multiple Instance Password File Local Disclosureがコンテストで見つかった最古の脆弱性でした。
ただ、具体的にどのような記録が根拠になったのかは示されていません。調べたところ、同じような内容の信頼できそうな記述が2箇所ありました。
The one time XEC * was used in a good way was the day in 1966 that a certain Computation Center administrator’s mistake caused the CTSS password file and the message of the day to be swapped. Everybody’s password was displayed in clear to each user that logged in. (The editor in those days created a temporary file with a fixed name.) This was before (and was the origin of) the idea of one-way encrypting passwords. Bill Mathews of Project TIP noticed the passwords coming out, and quickly entered the debugger and crashed the machine by entering an XEC * instruction. Naturally this happened at 5 PM on a Friday, and I had to spend several unplanned hours changing people’s passwords. (The problem is described and analyzed in Corby’s Turing Award Lecture.) — The IBM 7094 and CTSS
After an accident on CTSS in 1965 when two users edited files in the same directory, not realizing that the editor created intermediate files of a constant name: this caused the whole CTSS password file to type out in the message of the day on every login at 4PM on a Friday, until an alert user (Bill Mathews) noticed it and entered an XEC* instruction in the debugger to freeze the system. But I digress. — Multics Security
すなわちこの脆弱性は、当時IBM 7094で走っていたタイムシェアリングシステムCTSSのテキストエディタに、一時ファイルが固定ファイル名で(おそらく同じ場所に)作成されるため、エディタを複数起動して同時に使うと一時ファイルが書き換わってしまうというバグがあり、これに起因してログインメッセージの中身が全ユーザーのパスワード一覧に置き換わってしまった、というものです。3者とも微妙に食い違っているので特定はできないのですが、1965年頃にこのようなことがあったのは確かなようです。
また、上の引用にもある通り、この脆弱性はフェルナンド・J・コルバトの1991年チューリング賞受賞講演でも言及されています。
But of course a mistake was made. Overlooked was a software design decision in the standard system text editor. It was assumed that the editor would only be used by one user at a time working in one directory so that a temporary file could have the same name for all instantiations of the editor. But with two system programmers editing at the same time in the system directory, the editor temporary files became swapped and the disaster occurred. — http://larch-www.lcs.mit.edu:8001/~corbato/turing91/
ハッカー倫理、セキュリティ、脆弱性
この1965年の脆弱性—CTSSにおけるテキストエディタの一時ファイルの不適切な処理によるパスワード漏洩—がCTSSというタイムシェアリングシステムにおける脆弱性であることは、脆弱性の概念を考える上できわめて示唆的です。というのも、タイムシェアリングシステムはパスワードというセキュリティ機構がコンピューターに導入された最初期の形態であり、当時の「ハッカー」とはかなりの緊張関係にありました。いわゆる「いい意味での」ハッカーの原型を描いたレビーの『ハッカーズ』には、CTSSについて具体的な記述があります。
いい換えれば、CTSSはハッキングに水をさすシステムだった。[…]ときには、手近にあるものでハックしなければならないハッカーがCTSSを使おうとすると、スクリーンに、「パスワードなしでは使えません」というメッセージが現れるのだ。そんなとき、ハッカーは復讐を誓わざるをえない。なぜならハッカーにとって、パスワードは錠のおりたドアよりもいっそう忌まわしいものだからだ。おまえにはコンピュータを使う権利がないと誰かにいわれることよりも、ひどいことがあるだろうか?(レビー 1987: 144)
ここで注意すべきなのは、先に述べたようにCTSSがパスワード機構を作り出したのであって、パスワードはそもそも当たり前ではなかったということです。同書の別の箇所で、レビーはリチャード・ストールマンを次のように描いています。
しかし、七〇年代の進歩につれて、リチャード・ストールマンは自分の愛するなわばりに変化が起こるのを目にし始めた。最初の侵略は、公認ユーザーにパスワードが割り当てられ、非公認ユーザーは締め出されるという形で行なわれた。[…]今度のシステムにひびを入らせるのは、ストールマンにとってもたやすいことではなかった。しかし、[…]彼が後にいっているように、「あのプログラムの中のある一語を変えれば、[…]システム・コンソールにパスワードがプリントアウトされるのを発見した」(レビー 1987: 521-592)
馬鹿げた主張のように見えますが、今日に至るまで「善意のハッカー」論はここを出発点に、悪意によらない、悪用ではない、被害を与えないハッキングがある、という主張を根底に据えてきました。バグバウンティプログラムのような取り組みも、このような立場と融和しつつ、時には対立しつつ、現在進行形で展開してきています。
脆弱性の概念が生まれた場面は、情報セキュリティの形成とハッカー倫理の形成がせめぎあう場面でもあり、今日において「倫理的ハッカーである」ということもまた、それほど自明なことではなさそうです。
参考文献
- スティーブン・レビー(古橋芳恵,松田信子訳)『ハッカーズ』工学社,1987年.