DevOpsを保護するには

近年、パブリックリポジトリを利用したサプライチェーン攻撃が増加しています。こうした攻撃に対処する方法とは。

今年の春、Rubyプログラミング言語の公式ライブラリ配布チャネルであるRubyGemsが汚染されたことを複数のIT関連ニュースメディアが報じました(英語)。何者かが悪意あるスクリプトを含む偽のパッケージをアップロードし、これをプログラマーたちが自分のプロジェクトに使用したため、意図せずユーザーのコンピューターをマルウェアに感染させてしまい、暗号通貨ウォレットのアドレスが改竄される結果となりました。

パブリックリポジトリを狙ったサプライチェーン攻撃は、当然ながら今回が初めてではありません。このタイプの攻撃は普及しつつあるように見受けられますが、それももっともです。攻撃が1回成功すれば、何万人、何十万人というユーザーを感染させることができるからです。感染の規模は、汚染されたリポジトリのコードを使って開発されたソフトウェアの普及の度合いによります。

悪意あるパッケージをリポジトリに忍ばせる手口

RubyGemsのケースでは、広く利用されている正規のパッケージと似た名前のプロジェクトが、リポジトリ内に大量に作成されていました。これは、パッケージ名を間違えて入力した開発者が悪意あるパッケージを意図せずダウンロードすることを狙ったか、あるいは、検索結果としてパッケージ名が一覧表示されたときにどれが本物か分からないようにすることを意図したもので、「タイポスクワッティング」と呼ばれます。最も一般的なサイバーポイズニング手法とされるこの手口は、Python Package Indexを介した攻撃や、Docker Hubへの偽画像アップロードで用いられています(リンク先はいずれも英語)。

仮想通貨ウォレットCopayのインシデントでは、GitHubのリポジトリにアップロードされていたライブラリが攻撃に利用されました。リポジトリの作成者がプロジェクトへの興味をなくして管理者権限を手放した後、後を引き継いだ者がこのライブラリに悪意あるコードを追加したため、多数の開発者がこのライブラリを自分の製品に使用してしまいました。

正規の開発者のアカウントを本人に気付かれないように使用して、本物のパッケージを偽物にすり替えるという手口もあります。構文チェックツールであるESLintの事例がまさにそうで、npm(Node Package Manager)に置かれたESLintのライブラリが、悪意あるライブラリにすり替えられていました(英語記事)。

コンパイル環境の悪用

ソフトウェア製品を開発する企業も、APTグループの関心の的となる可能性があります。こうした企業の顧客が彼らの標的となった事例は、セキュリティエキスパートの目に定期的に入ってきます。

  • 2017年8月、APTグループがNetSarang製のソフトウェアに悪意あるモジュールを追加(英語記事)。調査によると、攻撃者はソフトウェアビルドサーバーに不正アクセスした可能性があります。
  • 2018年、Piriformのビルドサーバーが感染。このために、クリーンなソースコードで作成されたCCleanerのプログラムが、コンパイル中に悪意あるコードを追加される事態となりました。
  • 2019年、当社のエキスパートがAPT活動「ShadowHammer」を発見。この活動の中で、数社のソフトウェア製品にバックドアが埋め込まれました。調査の結果、攻撃者がソースコードにアクセスしたか、またはコンパイル段階で悪意あるコードを注入したことが分かっています。

コンパイル環境が侵害されると、最終製品が「感染」するだけでなく、兵器化されたマルウェアが正式なデジタル署名付きで信頼できる開発元から拡散してしまうことにもなります。このような理由から、開発プロセスにおいては、外部からの干渉に対する防御を強化する必要があります。

問題の本質

実際のところ、パブリックリポジトリの使用が危険なのではなく、現代のソフトウェア開発アプローチ、すなわちDevOpsの欠陥に危険が潜在しています。DevOpsとは、プログラム開発サイクルの短縮を目的とした実践様式です。開発は常に、セキュリティと使いやすさの間でバランスを取らなければなりません。現在の過酷な環境で競争力を維持していくために、開発者はプログラムの新バージョンを可能な限り早くリリースする必要があります。しかし、使いやすさを高めると、品質が低下したり市場投入までの時間が長くなったりしがちです。そのため、開発者は、セキュリティ担当者をできるだけ関与させないようにするか、排除しようとします。

結果として、ITセキュリティの入る余地がありません。しかし、開発部門も、IT部門も、セキュリティ部門も、「高品質で安全な製品をタイミングよく提供する」という共通の目標に向かって取り組んでいます。アップデートにバックドアやスパイモジュールが含まれていてはなりません。したがって、この業界は「DevOps (開発+運用)」から「DevSecOps(開発+セキュリティ+運用)」に移行しなければならないと当社は考えます。

DevSecOpsは、ソフトウェア開発プロセスの全段階において、サイバーセキュリティの文化と実用的なチェック工程を取り入れることで、柔軟性およびスピードの低下を招くことなく、セキュリティとDevOpsの隔たりを埋めようという試みです。当社では、このプロセスの技術面を支えるツールをご提供します。

Kasperskyのソリューション

ソフトウェア開発プロセスの保護に特化したツールは多くありません。そこで当社では、Kaspersky Hybrid Cloud Securityをアップデートするに当たってプログラマーのニーズを考慮し、パフォーマンスに影響を与えることなくセキュリティツールを開発プロセスに統合するためのテクノロジーを搭載しました。主にサプライチェーン攻撃の阻止に必要となる、リポジトリ、イメージ、コンテナーをスキャンするテクノロジーです。

Kaspersky Hybrid Cloud Securityは、JenkinsやTeamCityなどの継続的インテグレーション(CI)および継続的デリバリー(CD)のプラットフォームとの相互運用のためのインターフェイスを備えています。このソリューションは、コマンドラインを通じて開発プロセスに統合可能です。

当社ソリューションの革新的な技術は、これだけではありません。Kaspersky Hybrid Cloud SecurityとDevOpsプロセス保護の詳細については、製品ページをご覧ください。

ヒント