「Debian」「Ubuntu」「Linux Mint」などのLinuxディストリビューションファミリでプログラムをインストールしたいと思えば、必ずと言っていいほどメインのソフトウェアインストーラプログラム「Advanced Package Tool」(apt)を使うことになる。これは役に立つツールだが、セキュリティ研究者のMax Justicz氏は先ごろ、aptに中間者攻撃を仕掛ける厄介な手法を発見した。
さらに悪いことに、Justicz氏は、リモート攻撃者がこのセキュリティホールを利用すると、何らかのパッケージをインストールしているあらゆるシステムで、root権限で任意のコードを実行できることを発見した。攻撃の手法を理解するには、aptの仕組みを理解する必要がある。
aptは、パッケージングシステム「dpkg」のフロントエンドだ。パッケージングシステムとは、「Firefox」などのプログラムを実行するためにファイルにインストールする必要のある「パッケージ」のデータベースのことだ。aptを使えば、新しいプログラムの検索やインストール、アップグレード、削除、ローカルのdbkgデータベースのアップデートが可能になる。
ここまでは問題ない。だが、新規プログラムをインストールするか既存のプログラムをアップデートする場合、aptはパッケージ内のリクエストされたUniform Resource Identifier(URI)に問題があるかどうかを確認しない。代わりに、URIの「Done」(完了)レスポンスで返された「Pretty Good Privacy」(PGP)のセキュリティハッシュと、署名されたパッケージマニフェストの値を比較するだけだ。しかし、中間者攻撃を仕掛ける攻撃者は報告されたハッシュを制御できるので、これを偽造して、マルウェアパッケージを正規のもののように見せかけることができる。
Ubuntuのaptセキュリティ勧告で説明されているように、「バージョン0.8.15以降のaptはリダイレクトのターゲットURLをデコードするが、改行の確認はしないため、中間者攻撃の攻撃者(またはリポジトリミラー)はメインプロセスに返された結果に任意のヘッダを挿入できる。想定されるファイルのハッシュがURLに組み込まれている場合は、これを利用して、ダウンロードされたファイルのあらゆるバリデーションを無効にできる。偽のハッシュは正しいハッシュの前に追加されるからだ」
Justicz氏は、Release.gpgファイルを使って、標的としたシステムに悪意のある.debを埋め込めることを示した。このファイルは、aptを使ったアップデート中に必ずプルされ、通常はインストールされる場所が予測可能だ。
Justicz氏はさらに、「デフォルトで、DebianとUbuntuはどちらもプレーンなhttpリポジトリをそのまま使っている」と指摘した。よりセキュアなhttpsによってaptのセキュリティが実際に強化されたかどうかをめぐっては議論が過熱しているが、Justicz氏の立場は明確だ。「デフォルトのパッケージサーバがhttpsを使っていたら、この投稿の冒頭でDockerfileを悪用することはできなかっただろう」(Justicz氏)
ではこれは実際、どれほど悪い状況なのだろうか?一言で言えば、悪い。
DebianセキュリティチームのメンバーであるYves-Alexis Perez氏は、次のように述べている。「この脆弱性が、aptとミラーの間に中間者として入り込んだ攻撃者に悪用されて、HTTP接続に悪意のあるコンテンツを挿入されかねない。このコンテンツはその後、aptに有効なパッケージと認識され、標的となったマシンのroot権限でコード実行に使われるおそれがある」
このバグの最大限のリスクを考慮し、すでにDebianおよびUbuntu向けにパッチが公開されている。
この記事は海外CBS Interactive発の記事を朝日インタラクティブが日本向けに編集したものです。