ソフトウェアの「パッケージ」を利用してAppleやPayPalなどの大企業をハッキングする方法とは?
高度にデジタル化された社会においてハッキングは大きな脅威となっており、2020年にはアメリカ政府機関への大規模なハッキング被害が判明したほか、水道システムがハッキングされて基準値の100倍もの有害物質が水道水に混入されかける事件も発生しました。そんな中、サイバーセキュリティ研究者のAlex Birsan氏が、ソフトウェアの「パッケージ」を利用して名だたる大企業にハッキングを仕掛ける方法について解説しています。
Dependency Confusion: How I Hacked Into Apple, Microsoft and Dozens of Other Companies | by Alex Birsan | Feb, 2021 | Medium
https://medium.com/@alex.birsan/dependency-confusion-4a5d60fec610
An exploit let a security researcher into Apple, Microsoft, and PayPal - The Verge
https://www.theverge.com/2021/2/10/22276857/security-researcher-repository-exploit-apple-microsoft-vulnerability
いくつかのプログラミング言語では、特定の機能を定義した「パッケージ」と呼ばれるコードが存在しています。開発中のソフトウェアに組み込むべき機能を備えたパッケージが存在する場合、自分でゼロからコードを書かなくても、パッケージを宣言することで定義されている機能を呼び出して利用可能です。多くのソフトウェアは全てのコードを書いているのではなく、既存のライブラリやパッケージとの依存関係にあります。
また、リポジトリに格納された公開パッケージをダウンロードして使うだけでなく、企業や機関が内部の開発者だけに配布するプライベートな内部パッケージを作成する場合もあります。Birsan氏は、企業が使用する内部パッケージに着目し、単純な方法でハッキングを仕掛ける仕組みを考案したとのこと。
Birsan氏が考案した手法とは、「企業がソフトウェアに用いる内部パッケージを、悪意のあるコードを仕込んだ公開パッケージに置き換える」というもの。「ソースからパッケージをダウンロードした場合、あなたは基本的にパッケージの発行者を信頼して自分のマシン上で実行します。では、この盲目的な信頼は悪意のある攻撃者によって悪用される可能性があるでしょうか。もちろんあります」と、Birsan氏は述べています。
Birsan氏は2020年の夏にPayPalの脆弱性(ぜいじゃくせい)を発見しようとした際、仲間からGitHub上にある興味深いNode.jsコードを教えてもらったとのこと。このコードはPayPalの内部使用を目的としたものらしく、Node.jsのパッケージ管理システムであるnpmからホストされた公開パッケージと、PayPal内部で開発されたとみられる内部パッケージの依存関係が混在していたそうです。
内部パッケージと同じ名称の公開パッケージがnpmレジストリに存在していないことを確認したBirsan氏は、「この内部パッケージと同じ名称で悪意のあるコードを公開パッケージとしてアップロードした場合、PayPalの内部パッケージを公開パッケージに置き換えられるのではないか?」と考えました。そこでBirsan氏は、本当に逮捕されかねない機密情報の収集に当たらない範囲で、インストールされたマシンに関するデータを収集・送信するコードを作成しました。
攻撃の基本計画を整えたBirsan氏は、PayPal以外の企業においても同様の脆弱性がないかをチェックし、GitHubやその他のさまざまな場所で内部パッケージに関する情報を集めました。その後、npm・Pythonのpip・Rubyのgem(RubyGems)といった各パッケージ管理システムに、悪意のあるパッケージをアップロードしたとのこと。
その結果、Birsan氏はPayPalを含めた35もの企業に対してハッキングを仕掛けることに成功しました。PayPal以外にもApple・Microsoft・Netflix・Yelp・Uber・Shopifyなどの企業をハッキングできたそうで、被害を受けた企業の大多数は従業員が1000人を超える企業でした。大企業が被害を受けやすかった理由についてBirsan氏は、大規模な組織では内部ライブラリの使用率が高いことが反映されているのではないかと推測しています。
公開パッケージが内部パッケージに置き換えられる理由には不明な部分もあるものの、Pythonのパッケージでは「引数を設計上安全ではない方法で使用した」場合に発生することがわかっています。特定の引数を使用してパッケージを指定すると、「指定された名称のパッケージを公開・内部の両方で検索し、両方に見つかった場合はバージョン番号が大きい方をインストールする」仕組みとなっています。そのため、悪意のある公開パッケージのバージョン番号を大きくすることで、正しい内部パッケージを押しのけてインストールさせることが可能だそうです。
Birsan氏はパッケージの脆弱性を発見したことで、PayPalから3万ドル(約315万円)、ShopifyやAppleからも3万ドル、Microsoftからは4万ドル(約420万円)のバグ報奨金を受け取りました。これらの金額は、各企業がバグ報奨金として設定した上限かそれを上回るものだそうで、企業側もこの脆弱性を深刻なものと捉えていることがうかがえます。脆弱性について通知された多くの企業は迅速にパッチを当てたため、脆弱性はなくなったとのことです。
・関連記事
Googleが提案するオープンソースプロジェクトのセキュリティを高めるための「Know, Prevent, Fix」とは? - GIGAZINE
HDDのコントローラーをハッキングするとデータの傍受やHDD基板へのLinuxインストールが行える - GIGAZINE
SolarWinds製ソフトウェアの欠陥を利用したアメリカ政府への新たなハッキングの痕跡が見つかる - GIGAZINE
中国政府とつながるハッカー集団が日本企業を標的に大規模なハッキング攻撃を仕掛けているとの報告 - GIGAZINE
医薬品の規制当局がサイバー攻撃を受けてファイザーの新型コロナワクチンの情報がリークされる - GIGAZINE
・関連コンテンツ