Skip to content

GitHubに潜む6つの重大なセキュリティ脅威

    
GitHubに潜む6つの重大なセキュリティ脅威

GitHubはソースコードホストの巨大ザメ「メグロドン」であり、ソフトウェアサプライチェーンを攻撃しようとするハッカーの注意を引く巨大な標的の中心となっているようだ。

2023年1月時点で、このプラットフォームは世界最大であり、1億人を超える開発者が携わりが携わり3億7,200万以上のリポジトリ(少なくとも2,800万の公開リポジトリを含む)があると報告されている。9月に発見された、悪意のあるプルリクエストやコミットがDependabot(GitHub上の依存関係の更新を支援するツール)に偽装されたなりすまし攻撃では、この巨大なリポジトリが脅かされた。

Contrast Securityの最高情報セキュリティ責任者であるDavid Lindnerは、9月29日付のCISOの視点で、ユーザはリクエストを何も疑わずに承認してしまう可能性が高く、その結果シークレットやパスワードが盗まれることになる。」と警告している。「お使いの管理コードベースにコミットする新しいリクエストに細心の注意を払うよう、改めて注意を喚起する。」

しかしDependabot攻撃は、GitHubに焦点を合わせた複数の脅威のうちのひとつに過ぎない。その他の最近のインシデントは以下の通り:

大きな標的で埋めつくされているコードリポジトリはGitHubだけではない。例えば、2021年7月には、GoogleのWebブラウザChromeで 、正規のパスワード復元ツールを使用して認証情報を盗むコードの爆弾がオープンソースコードリポジトリのnpmに潜んでいたことが発見されている。

実際、Sonatype社の最新レポートによると、オープンソースソフトウェアのサプライチェーンへの攻撃は1年間で3倍に増加している。オープンソースのダウンロードの8件に1件は既知のリスクがあり、24万5000件の悪意のあるパッケージが発見されており、これは過去の全ての年の合計の2倍である。

開発者や企業が直面するGitHubコードのセキュリティ上の脅威と、コードやデータを守るために実装できる防御策について、Contrast CISOのDaveに話を聞いた。彼からのアドバイスを読んで頂きたい。

GitHubコードのセキュリティ脅威

1.認証情報の露出

ログを分析したところ、Dependabot攻撃の被害者の中には、盗まれたPAT(個人用アクセストークン)によってアカウントが侵害されていたことが判明している。このトークンは開発者のシステム上にローカルに保存され、二要素認証(2FA)を経由せずにGitHubにログインするたことができる。初期の分析では、これらの認証情報がどのように漏洩したのかは明らかにされていないが、マルウェアの感染や悪意のあるパッケージのインストールが原因だった可能性がある。

実際、意図せずに認証情報や個人情報が漏れることは、GitHubで最もよく見られるセキュリティ脅威のひとつだ。開発者は、コードリポジトリにAPI(アプリケーションプログラミングインターフェース)キーやパスワード、アクセストークンをうっかり入れてしまうことがある。ハッカーは積極的にGitHubのリポジトリをスキャンしてそのような情報を見つけ、それを悪用して不正アクセスを行う。

「Fine-grained PAT(きめ細い個人用アクセストークン)を使用していない場合、これらのトークンは通常、非常に広範なアクセス権が提供される。」とDaveはコメントしている。「そして、トークンは無くしやすい。人は、どんな理由であれ、それをコード内でコミットする。もしくは、メールに保存する。あるいは、ノートパソコンのドキュメントに入れたりもする。PATは必要だから保存するのだが、パスワードマネージャや、PATの所有者が勤務している会社で使用しているシークレット管理ツールに保存されるべきだ。」

PAT紛失のリスクを増大させるのは、その所有者が必ずしもPATがなくなったことに気づかないことだと、彼は説明する。PAT紛失のリスクは非常に高く、それによって「コードが盗まれたり、攻撃者がコードをコミットする可能性がある。」とCISOは言う。攻撃者はあらゆるコード機能を使うことができる。例えば、課金機能にアクセスできるかもしれない。PATにどのレベルのアクセス権があるかによって、攻撃者はすべてにアクセスできる可能性がある。PATが単に組織レベルのスコープである人もいる。その場合、PATが侵害されると、その組織内のすべての単一リポジトリへの完全なアクセスが許可されてしまう。」

防御策:Fine-grained PAT

GitHubのFine-grained PAT(きめ細かい個人用アクセス トークン)に切り替えることで、各ユーザを特定の権限に制限することができ、漏洩時のリスクを減らすことができる。1年前にリリースされた、このトークンはGitHubの組織、ユーザ、リポジトリAPIへのアクセスを制御する50以上の詳細な一連のアクセス許可を付与できる。2022年10月にGitHubの説明による利点には、以下のようなものがある。

  • 各権限にはそれぞれ、「No access(アクセスなし)」、「Read-only(読み取り専用)」、「Read and write(読み取り/書き込み)」のいずれかを選択できる。例えば、課題(issue)を読むだけで、他は何もできず、リポジトリの内容を読むことさえできないPATを作成できるようになった。
  • Fine-grained PATには、有効期限がある。また、ユーザがアクセスできる全てのリポジトリにアクセスすることもできない。代わりに、明示的にアクセスを許可されたリポジトリや組織にのみアクセスできる。組織内の単一のリポジトリを対象にすることもできる。

防御策:シークレット管理

脅威を軽減するために、開発者は強固なシークレット管理を実践すべきだ。GitHub Actionsのシークレットのようなツールや、HashiCorp Vaultなどのサードパーティソリューションは、機密データを安全に保存して管理することができる。Contrastでは、コード内の認証情報を検索するオープンソースのシークレットスキャンツールである、TruffleHogエンタープライズ版を使用している。このツールは、誰かがコードにコミットした可能性のあるGitHubトークン(または別の例では、尊い神のようなAWSトークン)を嗅ぎ分けることができると、Daveは述べている。

防御策:監査

リポジトリの定期的な監査を実施し、秘密情報の偶発的な漏洩を防止する。

2.悪意のあるコードインジェクション

悪意のある第三者が、プルリクエストを通じて、またはサードパーティの依存関係の脆弱性を悪用して、リポジトリにコードを注入しようとするかもしれない。このようなコードのインジェクションは、データ漏洩、コード実行、バックドアのインストールなど、様々なセキュリテイの問題につながある可能性がある。

防御策:コードのレビューと依存関係のスキャン

コードインジェクションを特定して防止するためには、コードのレビューが不可欠である。GitHubに組み込まれている依存関係のスキャンような自動ツールは、脆弱な依存関係を特定し、潜在的なセキュリティリスクを明確にするのに役立つ。また、開発者は、悪用のリスクを最小限に抑えるために、依存関係を常に最新の状態に保つ必要がある。

3.クロスサイトスクリプティング(XSS)

XSS攻撃は、攻撃者が他のユーザが閲覧するWebアプリケーションに悪意のあるスクリプトを注入することで発生する。GitHubのコンテキストでは、XSSの脆弱性はイシュー、プルリクエストのコメント、リポジトリのREADMEに入り込む可能性がある。この脆弱性によって、ユーザアカウントが侵害され、不正アクセスにつながる可能性がある。

防御策:入力値の検証と無害化

開発者は、XSS攻撃を防ぐためにユーザ入力を検証し、無害化(サニタイズ)する必要がある。GitHubは、このような攻撃のリスクを軽減するために、CSP(コンテンツセキュリティポリシー)ようなセキュリティ機能も提供している。さらに、イシューやコメントを定期的にセキュリティ監査することで、悪意のあるコンテンツを特定して削除することができる。

4.サプライチェーン攻撃

サプライチェーン攻撃は、ソフトウェアのサプライチェーンを侵害し、開発プロセスに悪意のあるコードを注入する。GitHubはサードパーティのライブラリや依存関係に依存しているため、このような攻撃を受けやすくなっている。攻撃者はこれらの依存関係を標的にしており、攻撃を受けてしまうとプロジェクト全体の完全性を損なう可能性がある。

防御策:依存関係の検証

サプライチェーン攻撃を防ぐために、開発者は依存関係を徹底的に調査して検証する必要がある。コード署名を実装し、既知の脆弱性を定期的にチェックし、予期せぬ変更がないか依存関係ツリーを監視することで、サプライチェーンの完全生を確保できる。

5.内部脅威

外部からの脅威は重大な懸念事項だが、内部からの脅威も見過ごせない。GitHubリポジトリにアクセスできる開発者や従業員が、意図的または不注意に機密情報を漏らしたり、コードを改ざんする可能性がある。

防御策:アクセス制御と監視

機密性の高いリポジトリへのアクセスを制限するために、効果的なアクセス制御の仕組みを導入すべきである。ロールベースのアクセス制御(RBAC)、二要素認証(2FA)、定期的なアクセス監査は、内部脅威の防止に役立つ。さらに、監視ツールや異常検知システムによって、不審な活動を企業に警告することができる。

6.未使用のアカウント

悪意ある第三者は、広く普及しているライブラリで、しばらく使用または更新されていないものを標的にする。このような「使用されていない」ライブラリが乗っ取られて、放置されたライブラリによって保守管理者のアカウントが侵害されそうになる。「誰も注意を払っていなければ、攻撃者によってアップデートが行われ、悪意のあるコードが含まれている可能性がある。」とDaveは言う。

防御策:シングルサインオン(SSO)の使用

OktaのようなSSOソリューションを使用すれば、従業員が退職したときにリポジトリへのアクセスを削除することができる。

GitHubコードのセキュリティにおけるベストプラクティス

特定の脅威に対処するだけでなく、企業や開発者が GitHubにおけるコードのセキュリティを強化するために採用できるベストプラクティスがいくつかある。

  • セキュリティ機能の有効化:GitHubは依存関係スキャン、シークレットスキャン、自動脆弱性アラートなど、さまざまなセキュリティ機能を提供している。これらの機能をリポジトリで有効にして、潜在的なセキュリティリスクに関する通知をタイムリーに受け取れるようにすること。
  • 依存関係の定期的な更新:プロジェクトの依存関係を常に最新の状態に保つことは、セキュリティにとって極めて重要だ。古いライブラリの脆弱性は、攻撃者に悪用される可能性がある。可能な限り依存関係管理のプロセスを自動化し、更新を見落とすリスクを減らすこと。
  • 強力な認証の導入:すべてのGitHubアカウントに2FAのような強力な認証の仕組みを導入すること。この追加のセキュリティレイヤーによって、たとえ認証情報が漏洩したとしても、不正アクセスの試みを阻止することができる。
  • 開発者の教育:セキュリティのベストプラクティスとコードリポジトリに関連するリスクについて、開発部門を教育すること。定期的なトレーニングセッションや意識向上プログラムを実施することで、開発者のセキュリティに対する意識を高めることができる。
  • 定期的なセキュリティ監査の実施定期的にリポジトリを監査して、セキュリティの潜在的な問題がないか確認すること。これにはコードの脆弱性レビュー、露出したシークレット情報の確認、アクセス許可やアクセス制御の検査などが含まれる。
  • インシデント対応の計画:GitHubでセキュリティインシデントが発生した場合の対応策をまとめたインシデント対応計画を策定すること。明確な計画を立てることで、情報漏えいの影響を最小限に抑えることができる。
  • 異常の監視継続的な監視と異常検出を実装して、GitHubリポジトリ上の異常なアクティビティを特定すること。コードに対する異常なパターンのアクセスや変更は、セキュリティ侵害の初期の兆候である可能性がある。

まとめ

GitHubアプリケーションのセキュリティ脅威は、企業や開発者にとって無視できない厳しい現実だ。これらの脅威を理解し、防御策とベストプラクティスを実施することで、セキュリティ侵害のリスクを大幅に減らし、コード、データ、企業価値を守ることができる。今日のデジタル時代において、コードセキュリティは贅沢品ではなく必需品だ。ソフトウェア開発ライフサイクル(SDLC)全体を通してセキュリティを維持するには、GitHubやその他のコードリポジトリを保護する必要がある。その役割は極めて重要であり、見落としてはならない。

お問い合わせ

Related: 

Contrast Security Japan