オープンソース・ソフトウェアの世界以外では、Linuxシステムでデータ圧縮のために小さいながらも広く使われているツール、XZ Utilsについて聞いたことがある人はほとんどいないだろう。しかし先週末、セキュリティ専門家が、ネットワーク接続されたLinuxコンピューターが悪意ある攻撃を受けやすくなる深刻かつ意図的な欠陥を発見した。
この欠陥は、知識のあるハッカーが脆弱なLinuxシステムをコントロールできるようにする重大な問題であることが確認されている。Linuxは電子メールやWebサーバー、アプリケーション・プラットフォームとして世界中で使用されているため、この脆弱性によって攻撃者は世界中のコンピューターにある重要な情報に無言でアクセスできるようになる可能性があった。
SolarWindsのハッキングやHeartbleedバグのような大規模なソフトウェアの脆弱性は目新しいものではないが、今回の脆弱性はそれとは大きく異なる。
XZ Utilsのハッキングの試みは、オープンソースのソフトウェア開発がよく行う方法を利用したものだ。多くのオープンソースプロジェクトがそうであるように、XZ Utilsは非常に重要で広く使われているツールである。このシステムは、フリーソフトウェアという形で世界に大きな利益をもたらしているが、同時にユニークなリスクも抱えている。
オープンソースとXZユーティリティ
まず最初に、オープンソース・ソフトウェアについて簡単に復習しておこう。WindowsオペレーティングシステムやInstagramアプリなど、ほとんどの商用ソフトウェアは「クローズドソース」だ。対照的に、「オープンソース」ソフトウェアでは、ソースコードがオープンに公開されており、人々はそれを使って自由に好きなことをすることができる。
オープンソース・ソフトウェアは、特に消費者が目にすることのないソフトウェアの「肝心な部分」において非常に一般的であり、大きな価値がある。ある最近の研究では、現在使用されているオープンソース・ソフトウェアの総価値を8兆8000億米ドルと見積もっている。
2年ほど前まで、XZ UtilsプロジェクトはLasse Collinという開発者によって管理されていた。その頃、Jia Tanという名前のアカウントがソフトウェアの改良を提出した。
それから間もなく、バグを報告したり、機能要求をCollinに提出したりする、これまで知られていなかったアカウントが現れ、Collinにプロジェクト維持の助っ人を引き受けるようプレッシャーをかけた。Jia Tanは論理的な候補者だった。
その後2年間、Jia Tanはますますプロジェクトに関与するようになり、ソフトウェアのソースコードに慎重に隠された武器を導入した。
修正されたコードは、OpenSSHと呼ばれるユビキタスなネットワーク・セキュリティ・ツールである別のソフトウェアを密かに変更し、ターゲット・システムに悪意のあるコードを渡すようにした。その結果、特定の侵入者はターゲット・マシン上で好きなコードを実行できるようになる。
バックドアを含むXZ Utilsの最新バージョンは、一般的なLinuxディストリビューションに含まれ、世界中に展開される予定だった。しかし、Microsoft社のエンジニアが自分のシステムでちょっとしたメモリの異常を調査したところ、間一髪でこのバックドアが発見された。
迅速な対応
この事件はオープンソース・ソフトウェアにとって何を意味するのだろうか?まあ、最初の見かけとは裏腹に、オープンソース・ソフトウェアが安全でない、信頼できない、信用できないという意味ではない。
すべてのコードが公開されているため、世界中の開発者がバックドアとそれがどのように実装されたかの履歴を迅速に分析し始めることができる。これらの努力は文書化され、配布され、共有され、特定の悪意のあるコード断片が特定され、削除される可能性がある。
この規模の対応は、クローズドソースのソフトウェアでは不可能だっただろう。
攻撃者は、クローズド・ソースのツールを標的にするには、やや異なるアプローチを取る必要がある。おそらく、長期間にわたって会社の従業員を装い、クローズド・ソースのソフトウェア生産システムの弱点(官僚主義、階層構造、不明確な報告ライン、不十分な知識共有など)を悪用するのだろう。
しかし、もし彼らがプロプライエタリ・ソフトウェアでそのようなバックドアを実現したとしても、大規模な分散コード監査のチャンスはないだろう。
学ぶべき教訓
このケースは、別の種類の弱点や脆弱性について学ぶ貴重な機会である。
第一に、匿名ユーザーと開発者のオンライン上の関係が容易に有害になりうることを実証している。実際、この攻撃はこのような有害な相互作用の常態化に依存していた。
この攻撃のソーシャル・エンジニアリングの部分は、匿名の「ソックパペット」アカウントを使って、リード・メンテナに罪悪感を与え、感情的に強要し、何年にもわたって、一見無害に見える小さなコードの追加を受け入れさせ、Jia Tanに開発の主導権を譲るよう圧力をかけたようだ。
あるユーザーアカウントはこう訴えた:
あなたは、このメーリングリストで腐敗している多くのパッチを無視している。今、あなたは自分のレポを窒息させている。
開発者が精神衛生上の問題を公言すると、別のアカウントは非難した:
あなたのメンタルヘルスの問題は残念ですが、自分の限界を自覚することは重要です。
このようなコメントは、個々には無害に見えるかもしれないが、全体としては暴徒となる。
私たちは、開発者や保守者がコーディングの人間的側面や、分散されたコードがどのように作られるかに影響を与えたり、支えたり、指示したりする社会的関係をよりよく理解できるように支援する必要がある。特に、メンタルヘルスの重要性の認識を向上させるために、やるべきことはたくさんある。
第二の教訓は、「難読化」を認識することの重要性である。難読化とは、ソフトウェアのコードやプロセスを理解したりリバースエンジニアリングしたりすることを困難にするために、ハッカーがしばしば用いるプロセスである。多くの大学では、標準的なソフトウェア工学コースの一部としてこのことを教えていない。
第三に、XZ Utilsの危険なバージョンをまだ実行しているシステムがあるかもしれない。冷蔵庫、ウェアラブル端末、ホームオートメーションツールなど、人気のあるスマートデバイスの多くはLinux上で動作している。これらのデバイスは、メーカーがソフトウェアをアップデートすることが経済的に不可能になる年齢に達することが多い。
そして最後に、この攻撃の背後にいるのが誰であれ(国家権力者ではないかと推測する人もいる)、2年間にわたってさまざまなコードベースに自由にアクセスし、慎重かつ忍耐強い欺瞞を行ったのである。現在でも、その敵対者はシステム管理者、Linuxディストリビューション制作者、コードベース管理者がこの攻撃にどのように反応しているかを学んでいるはずだ。
ここからどこへ?
世界中のコードメンテナーは今、戦略的・戦術的なレベルで脆弱性について考えている。コードそのものだけでなく、コードの配布メカニズムやソフトウェアのアセンブリープロセスについても心配するようになるだろう。
私の同僚で、非営利のサイバーセキュリティ組織IDCAREを運営するデビッド・レイシーは、サイバーセキュリティの専門家が直面している状況は、IRAの声明によく表れているとよく私に思い出させる。1984年のブライトン・グランド・ホテル爆破事件の失敗を受けて、テロ組織は冷ややかにこう主張した:
今日は不運だったが、幸運になるのは一度だけだ。常に幸運でなければならない。
コメント