抗議活動ウェアの増加:開発者が自らのコードを妨害する理由

抗議活動ウェアの増加:開発者が自らのコードを妨害する理由

npmのようなオープンソースレジストリにおける正規ソフトウェアへの攻撃や乗っ取りへの対策だけでも十分に困難ですが、アプリ開発者はソフトウェアによる自己破壊行為の弊害にますます直面しています。開発者は、ほとんどの場合「現状有姿」で、何の保証もなく配布されるオープンソースコードを、気まぐれに好き勝手に利用してしまうことがあります。また、今年増加傾向にあるように、開発者が抗議活動の一環として自らのソフトウェアライブラリを意図的に破壊し、ソフトウェアを「プロテストウェア」へと変貌させるケースも見られます。

7月、広く利用されているPythonライブラリ「atomicwrites」の開発者であるマルクス・ウンターヴァディッツァー氏は、人気コードレジストリPyPIが「重要プロジェクト」(レジストリのダウンロード数上位1%に該当するプロジェクト)のメンテナーに2要素認証を義務付けると発表したことを受け、自身のコードを一時的に削除しました。ウンターヴァディッツァー氏のatomicwritesプロジェクトはこの基準に該当し、アカウントは2要素認証への登録が義務付けられました。ウンターヴァディッツァー氏は自身の投稿で、この件について「自分のコードに依存している少数の企業にSOC2コンプライアンスを保証するため(自分の自由時間を犠牲にして)迷惑で横柄な行動だ」と述べています。

これを、プロジェクトの開発者が抗議として広く使われていたコードを削除した後にインターネットの大部分を一時的にダウンさせた 2016 年の left-pad 事件になぞらえる人もいる。開発者の Azer Koçulu 氏は、メッセージング アプリ Kik と商標紛争を起こした。これは、npm パッケージが「kik」と呼ばれていたためである。この紛争で npm が Kik に同調した後、Koçulu 氏は npm レジストリからすべてのコード (絶大な人気を誇ったleft-padライブラリを含む合計 273 個のモジュール) を削除した。これは完全に彼の権限内でできたことだったが、即座に問題を生じさせた。当時、絶大な人気を誇ったleft-padパッケージは 1,500 万回以上ダウンロードされており、現在でも毎週何百万回もダウンロードされ続けている。そのため、2016 年 3 月、アプリケーションが依存しているleft-padコンポーネントが見つからなくなったためにプロジェクトが機能しなくなったとき、世界中の開発者は混乱し、愕然とした。

数年前には孤立した抗議活動のように見えたかもしれないものが、2022年に開発者が自らの図書館を妨害することで復活した。時には大企業に反対を表明するためだが、最近ではロシアのウクライナ侵攻に抗議するためだ。

最近の抗議活動ソフトウェアの増加

2022年に入って1週間、npmプロジェクトのcolorsfakerに頻繁に依存する数千ものアプリケーションが機能不全に陥り、ユーザーの画面に意味不明なテキストが表示されるようになりました。これは、悪意のある人物がこれらの正規のライブラリを乗っ取って改変したためではありません。プロジェクトの開発者であるMarak Squires氏が、大企業への抗議メッセージを送るために、自身の成果物を意図的に改変していたことが判明しました。

スクワイアズ氏の抗議のきっかけは、Log4Shellのセキュリティ欠陥でした。この脆弱性は、Log4jプロジェクトのメンテナー(主にオープンソースボランティア)に、12月の休暇期間中にこの重大な脆弱性へのパッチ適用という重荷を課しました。スクワイアズ氏は以前、フォーチュン500企業が彼のオープンソースコードを無償で使用し、金銭的な支援や維持費の負担もしていないことに不満を表明していました。Log4Shellの脆弱性は、この不満をさらに強めるものでした。つまり、Log4jをあらゆる場面でアプリケーションに利用している企業は、自由時間を割いてこれらの重要なプロジェクトを支えている無給ボランティアへの支援を十分に行っていない、という不満です。

スクワイアズの抗議により、カラーライブラリに依存するプロジェクトは短期間で停止しただけでしたが、数か月後には、ロシアのウクライナ戦争に抗議するために開発者が何百時間も費やした自分のプロジェクトを妨害するという、抗議ウェアの流行が起こりました。

テッククランチイベント

サンフランシスコ | 2025年10月27日~29日

2022年3月、ロシア軍がウクライナ領に侵攻してから数週間後、毎週100万回以上ダウンロードされている人気のnpmプロジェクト「node-ipc」が、ロシアとベラルーシの開発者と疑われるユーザーのマシンのデータを消去し始めました。プロジェクトの開発者であるブランドン・ノザキ・ミラーは、コードに不正アクセスし、インストールされたコンピューターを破壊したとされています。言うまでもなく、不正アクセスされたバージョンのnode-ipc(今や事実上のマルウェア)は、npmレジストリから削除されました。

それ以来、プロテストウェアのテーマは、開発者がより平和的な抗議活動に熱中するテーマへと進化しました。event -source-polyfilles5-ext  、styled-componentsといったオープンソースプロジェクトの新しいバージョンでは、ロシア在住のユーザーに戦争に反対する行動を促すメッセージが表示されるだけです。これらのバージョンはレジストリのポリシーに違反していないため、npmに残っています。

開発者にとって、プロテストウェアを公開することは容易な決断ではないかもしれません。妨害されたプロジェクトのあらゆるバージョンが綿密に監視され、コミュニティの開発者への信頼が損なわれる可能性があります。彼らが過去に、そして将来も作成するソフトウェアは、再び信頼されるようになるのでしょうか?

styled-componentsの主要メンテナーの一人であるエヴァン・ジェイコブス氏は、TechCrunchに対し、同プロジェクトには活動的な歴史があり、「特に[Black Lives Matter]運動への支援と、ユーザーにEqual Justice Initiativeへの寄付を検討するよう推奨していることが顕著です」と語った。さらにジェイコブス氏は、「ロシア政府が西側諸国のニュースウェブサイトを検閲し始めていると聞き、npmパッケージのインストールという、通常とは異なる方法で簡潔かつ有益なメッセージを届けるまたとない機会だと気づきました」と付け加えた。

npm の nestjs-pino プロジェクトのスクリーンショット。戦時中のウクライナの写真が、「ウクライナの戦争。ウクライナのマリウポリにある防空壕で待つ子供たち」というキャプションとともに表示されています。
npmのnestjs-pinoプロジェクトのスクリーンショット。ウクライナのマリウポリにある防空壕で待機する子供たちの写真が目立つように表示されている。画像クレジット: TechCrunch / スクリーンショット

ジェイコブズ氏は、ロシア国民が国家の干渉を受けない正確な戦争ニュースを得ることが重要だと感じた。彼は、4月時点で月間ダウンロード数が1500万回を超えていたstyled-componentsを改良し、ロシア在住のユーザー向けに「ロシア軍がウクライナで犯している数々の残虐行為」を要約したバイリンガルメッセージを表示した。

「影響はあったか?おそらく永遠に分からないでしょう」とジェイコブス氏は言った。「とはいえ、情報を発信し、そうでなければ何が起きているのか分からなかったかもしれないロシアのソフトウェア関係者の目に留まる機会を得ることができたのは、本当に価値があったと思います。」

es5-extプロジェクトの開発者であるマリウス・ノワク氏は、ライブラリの後のバージョンを改変し、ロシアとベラルーシ在住のユーザーをBBCのTorサービスのような正確なニュースソースに誘導しました。ノワク氏はTechCrunchに対し、コード改変の決定について、ロシア国民が「何が起こっているのか正確に把握しておらず、プロパガンダメディアの影響下にある」ためだと語りました。これはロシアのメディアに対する厳格な国家統制を指しています。「このメッセージはロシアでソフトウェアをインストールした場合にのみ表示され、世界の他の地域では実際には表示されません」とノワク氏は述べました。

ノワック氏は、オープンソースライブラリを活動に利用することで、コミュニティ全体からの信頼性に影響はなかったが、当初は怒りの反応を数件受け取ったと述べた。

戦争への抗議としてオープンソースコードを刷新したのは、ジェイコブス氏とノワク氏だけではない。ソフトウェアサプライチェーンのセキュリティスタートアップであるSocketは、TechCrunchに対し、毎週10万回以上ダウンロードされている人気のnpmプロジェクトであるnestjs-pinoが、ウクライナで進行中の危機への注意喚起を目的としてメインの「readme」ファイルを更新したと語った。パッケージにバンドルされているインストールスクリプトも、インストール直後にコンソールメッセージを表示する。

「検証できないものは信頼できない」

オープンソース開発者は、プロジェクトに新機能を実装するだけでなく、大義のためにプロジェクトを改良することで、より大きな社会問題に対する自らの意見を積極的に表明するという、新たな創造的な方法を見つけつつあります。また、有料顧客の期待に沿って機能しなければならないプロプライエタリコードとは異なり、ほとんどのオープンソースライセンスは、消費者と開発者の両方にとって非常に寛容です。開発者がコードを使って何をすべきでないか、また決して行わないことについて一切保証しないライセンスでコードを提供しているため、プロテストウェアは擁護者にとってグレーゾーンとなっています。

実際、Sonatypeのセキュリティ研究者として、私は初期段階でプロテストウェアがいかに私たちにとって課題となったか、そして自動マルウェア検出アルゴリズムをどのように調整し、colorsfakerといったプロジェクトにおける自己破壊行為を検知できるようになったかを目の当たりにしてきました。従来、このシステムはオープンソースリポジトリにアップロードされたタイポスクワッティングマルウェアを検出するように設計されていましたが、悪意のあるハイジャックや開発者による警告なしの独自ライブラリの改変といったケースでは、プロテストウェアの複雑な仕組みをより深く理解する必要がありました。

このテーマは、Microsoft の子会社である GitHub が所有する npm などの主要なオープンソース レジストリも、こうしたエッジケースに対処する際に岐路に立たされる原因となっている。

Socketの創設者Feross Aboukhadijeh氏は、TechCrunchに対し、GitHubのようなレジストリは難しい立場にあると語った。「一方で、GitHubはメンテナーの表現の自由の権利と、彼らが信じる大義を支援するためにプラットフォームを利用する権利を支持したいと考えています。しかし他方で、GitHubはnpmユーザーに対して、npmサーバーから悪意のあるコードが提供されないようにする責任を負っています。これは時に難しいバランスを取る行為です」とAboukhadijeh氏は述べた。

ビルドでコンポーネントの検証済みバージョンのみを取得するシンプルな解決策は、npmの依存関係バージョンをピン留めすることです。こうすることで、プロジェクトの将来のバージョンが破壊されたり乗っ取られたりした場合でも、ビルドでは最新の汚染されたバージョンを取得するのではなく、「ピン留めされた」バージョンを使用し続けることができます。しかし、これはすべてのエコシステム、例えばPyPIのように、コンポーネントの既存バージョンが再公開される可能性があるエコシステムでは必ずしも効果的な戦略とは限りません。これは、ctx PyPIプロジェクトの乗っ取り事件で見られた通りです。

「『プロテストウェア』をめぐる議論は、実際にはソフトウェアサプライチェーンのセキュリティに関する議論です。検証できないものを信頼することはできません」と、ソフトウェアサプライチェーンのセキュリティに特化したスタートアップ企業Chainguardの共同創業者兼CEO、ダン・ロレンス氏はTechCrunchに語った。

ロレンツ氏は、プロテストウェアの防止策として、オープンソースのセキュリティ対策とベストプラクティスに従うことを勧めています。これらの対策は、開発者がプロ​​テストウェアをより容易かつ早期に開発する上で役立ちます。「まずは、依存関係を把握し、自社の環境で使用しているオープンソースコードを定期的にスキャン・監査することから始めましょう。」

しかし、ロレンク氏は、プロテストウェアに関する議論は、模倣犯を招き入れ、問題に加担させ、オープンソースソフトウェア擁護者が真に重要な問題、つまり悪意のある行為者を寄せ付けないことに集中できなくなる可能性があると警告している。そして、プロテストウェアには未知の未知が残る。プロテストウェアにとって、どんな問題が小さすぎるのか、あるいは大きすぎるのか?

オープンソース開発者がコードで何ができるかを実際に指示できる人は誰もいませんが、それは開発者が常に持っている力であり、今やそれを活用し始めたばかりです。

Squires の名前を修正するために更新されました。