2021/03/29

PHP へのバックドア挿入の試み、失敗に終わる

021 年 3 月 29 日 Marc Laliberte 著

人気のある Web スクリプティング言語 PHP が、未知の攻撃者によって git プルリクエストからコアのコードライブラリにバックドアを挿入されました。これを受け、リファレンスソースコードを保守と PHP の実装を担当している開発者グループである「PHP Group」は、同グループが保守いたコードリポジトリサーバを引退させ、GitHub に移行する決定を下しました。PHP の創始者である Rasmus Lerdorf 氏自身のように見せかけた変更は、PHP のソースコードに含まれている gzip 圧縮ライブラリを変更し、スペルミスを修正しようとするものでした。このコードは、HTTP リクエストヘッダ「User_Agent」に「zerodium」 (この意味については後ほど解説) というキーワードが含まれているか検索し、その文字列が含まれている場合、一部を PHP コードとして処理し、任意のコマンドを実行する、というものでした。この変更により、攻撃者は HTTP リクエストに特定のカスタムヘッダを追加するだけで、脆弱なサーバ上でコマンドを実行しようとしていました。

PHP 開発者の Nikita Popov 氏は、この悪意のあるコミットにいち早く気付いて 4 時間後にはそのコミットを取り消し、おそらく主犯と見られるアカウント自身が、その日のうちにコミットを取り消しました。PHP Group は、今回のコミットは個人の Git アカウントではなく、公式のサーバ自体が侵害された可能性が高いと判断し、独自のインフラストラクチャのホスティングの中止を決定しました。Popov 氏は日曜日に投稿した記事の中で、「独自の git インフラストラクチャを維持することは、セキュリティリスクを高めるだけであると判断し、git.php.net サーバを廃止することにしました。代わりに、これまでミラーとして使用していた GitHub のリポジトリが正規となります」と述べています。

このコミットは誰の、どのような手法によるものか、また、バックドアを挿入する前に難読化をしなかった理由については、まだ不明です。このコードは、ゼロデイエクスプロイトを収益化している Zerodium 社の名前を出していますが、同社 CEO は、何の関連性もないとのツイートをしています。

(ツイートスクリーンショット、内容は以下)

今日の PHP git の侵害で、コミットに「Zerodium」の文字列が入れられましたが、もちろん、当社はこの件とは何の関係もありません。
おそらく、このバグやエクスプロイトを発見した研究者は、多くの企業に売ろうとしたものの、このようなゴミのようなバグを欲しがるところはなかったので、面白半分でやったのでしょう。

もし今回の悪用がより巧妙に隠されていたら、壊滅的な被害に繋がっていたかもしれません。推定では、インターネット上の Web サイトの約 80% で PHP が使用されており、そこにバックドアが組み込まれれば、先日の SolarWinds のサプライチェーン攻撃よりもはるかに大きな影響を与えていたでしょう。幸い今回のコードは、明らかに目立つものでした。とはいえ、認証で保護されているはずだったサーバ上で攻撃者が、どのようにコミットを行ったのかについて PHP Group が公開するまで、自前の git サーバを管理している読者の方は、コードのコミットには細心の注意を払ってください。