Scribble at 2022-09-30 10:29:44 Last modified: 2022-10-01 22:05:23

添付画像

Ken Thompson really did launch his "trusting trust" trojan attack in real life (niconiconi.neocities.org)

まず事情を説明すると、C 言語のオリジナル開発であるケン・トンプソンという人物がいて、彼はもともと UNIX システムを開発するためのプログラミング言語として C を設計したとされている。その人物が1983年にチューリング賞を受けた際のスピーチで、"trusting trust" 式のバックドアというアイデアを語ったとされていて、英語版(日本語版には全く紹介されていない)の Wikipedia では "compilar backdoors" として取り上げられている。つまり、コンパイラに感染させたプログラムによって、もともとのプログラムがどれほど安全であっても、コンパイルされた中間コード(オブジェクト・コード)や実行可能ファイルが安全であると保証するには十分ではないという議論が可能だ。そして、上記のページでブックマークされたブログ記事によると、ケン・トンプソンが実際にそういうプログラムを書いて使ったことがあるのかどうかは誰も知らなかったため、或る種の都市伝説とされていたようなのだが、実際に彼がそういうプログラムを実行したという証拠を Usenet の投稿から見つけたという。このようなプログラムが作れてしまうのは、もちろん原理的にはコンパイラもまたコンパイルされて生成されたプログラムであり、処理としての妥当性(機能要件)だけではなく適正性(非機能要件)も満たしていなくてはいけないからだ。そして、コンパイラの適正性を、コンパイルされたような何らかのプログラムによって検査するというなら、これは全く無限後退になってしまう。

ちなみに全くの余談だが、Hacker News のスレッドでは、まずこのブログ記事についたコメントはバックドアの話でもなければケン・トンプソンの話でもなく、既にブログ記事からは削除されているようだが、記事の末尾に掲載されていた萌えキャラのイラストについての発言だった。コメントを書いた人物(それを指摘するコメントすら消えているようだが、そんなに不適切な話をしていたようには思えない。この厳格さが Hacker News の qualification という強みでもあるが、Slashdot のような面白味はないな)も言っていたように、この「IT系の本を手に持った萌えキャラ」というイラストをブログ記事に掲載するという、何か meme のようなものがあるんだろうか。日本人は、逆に〈そんなやつ〉ばっかでキモいわけだが。

ともあれ、原理的にそういう攻撃が可能であることは確かだし、安全に書かれたコンパイラを再び記述しても、それをコンパイルすることで再び感染してしまうのだから、これはコンパイルという作業をどこまで遡って検査すればいいのかという話になりかねない。あるいは、或る実行可能ファイルをコンパイルしたコンパイラがなんであるかを遡るという、非常に面倒で確実性もあるのかどうか疑わしい ancestor relation を検討するだけでなく、いま手元にある実行可能ファイルそのものをリバース・エンジニアリングで解析する手立てもありえるが、残念ながら人の目や手でバイト・コードを解析できるわけでもないのだから、そういう作業にもコンパイルされたプログラムが必要となるわけで、リスクは低減されない。なるほど、"trusting trust" というのが現実であり、そこを疑うと検証コストは莫大なものになる。

そして技術的な話題もさることながら、それ以外にも上記の話題で思うことはある。それは、たかだか20年前の記録すら簡単に検索したり追跡できないという事実である。しかも、ケン・トンプソンのような IT 業界のセレブについてすら、その発言や事績のデータを集めたり「発掘」するのは難しいということである。もちろん、セレブであるがゆえに wannabe どものエア引用とか出鱈目な伝聞とか name-dropping を目的としたデマとか、色々な偽情報も多いであろう。僕も PHILSCI.INFO でご紹介したことがある話だが、"What gets measure gets managed."(測れるものは管理できる)というフレーズをドラッカーの格言だと言ってるような手合いは、経営学の学識どころかものを調べる力も意欲も誠実さもない無能である。しかし、そういうものはたいてい統計あるいは初歩的な学術研究の経験や知見をもたない WELQ バイト学生とかアフィリエイトの主婦みたいな素人のやることであり、われわれのような学術研究の手ほどきを受けた一定の見識なり学識をもつ人間にとっては、記録やデータが失われていない限りは所定の手続き(どこがアーカイブとして信頼できるサイトを利用するとか、検索条件で使うべき適正なキーワードを使うとか)を取れば、何カ月もかからずに済むと期待できる。もちろん、検索できればの話だが。

かようにして、アーカイブだの電子データの永続性だのと言われながら、実際のところは「データ」の大半は続々と消去され、失われてゆく。誰も保存していないし、バックアップもとっていない。僕が、「デジタル考古学」だの老人の余技だのと言われるであろうと思いつつ、当サイトでたびたび Scrapbook というブラウザのアドオンでウェブ・ページを保存し続けている話をしたり、最近になって SingleFile というモダン・ブラウザ用のアドオンに変更してページを保存しているという話をするのにも、こういう予感というか実感という理由があるからなのだ。また、当サイトで C Shell という非常に古い UNIX/GNU Linux シェルの資料集みたいなページを公開しているのも、JavaScript という言語の命名について歴史的な詮索とも思える記事を公開しているのも、多かれ少なかれ人というものは歴史に学ばず、それゆえ同じ(全く同じとすら言ってもいい)間違いを繰り返すと思うからだ。僕は、単純に古い生活や古い人の暮らしとか感情の一部を(もちろん憎んでいるところもあるが)愛でるという風雅さもあるにはあるが、それだけではなく過去の人々が犯した間違いを、単純に「東京人の一部は関東大震災のときに朝鮮人を虐殺した人でなしの子孫だ」と責めるだけではなく、再び何かあったときに愚かな思考や行動をとらないためにどうすればいいかを考える礎にしたいとも思う。

ちなみに、こういう trusting trust タイプのバックドアという理論的な可能性があるからといって情報セキュリティとして対策が非常に難しかったり、あるいは原理的に対策不能であるかと言えば、そうでもない。つまるところ、情報セキュリティというものは資産の価値をどのていど守るかという与件によって、幾らでも成功条件なり勝利条件の変わるゲームだと言ってもよいからだ。そして、最近ではヒューリスティック対策と呼ばれる手法がセキュリティ・ソフトに実装されているのをご承知かと思うが、仮に従来のシグネチャでは検出できないウイルスなどに感染しても、その挙動パターン、つまりは感染していようがいまいがプログラムの挙動という結果によって処理の是非を判定するというアイデアも実現している。これも "zero trust" と呼ばれるキャンペーンの一環として出てきている機能であり、考え方としては事前に検知するだけではなく、事後にも検知するチャンスを作るという点では十分に有効だと言える。

  1. もっと新しいノート <<
  2. >> もっと古いノート

冒頭に戻る


※ 以下の SNS 共有ボタンは JavaScript を使っておらず、ボタンを押すまでは SNS サイトと全く通信しません。

Twitter Facebook