GitHubでのキー漏洩とその回避方法

2019年4月5日

ノースカロライナ州立大学のリサーチャーは、トークンや暗号化キーなどの機密データがオープンな形で保存されているプロジェクトがGitHubに10万件以上あることを発見しました(英語記事)。パブリックドメインで見つかったそのようなオブジェクトは合計50万個以上、ユニーク数にして20万個以上でした。しかも、これらはGoogle、Amazon MWS、Twitter、Facebook、MailChimp、MailGun、Stripe、Twilio、Square、Braintree、Picaticなどの大手企業が発行したトークンでした。

 

GitHubは、ソフトウェアの共同開発でよく使われるリソースです。オープンアクセスまたは制限付きアクセスの状態でリポジトリにコードを保存し、関係者と連携してプログラムをテストしたり、開発済みのオープンソースソフトウェアを使用したりすることができます。アプリやサービスの開発が簡素化され、時間の短縮にもなるため、多くのプログラマーが好んで使用しています。オープンソースのモジュールを基にソフトウェア開発を行っている企業が積極的に利用しているほか、透明性を重視する企業もGitHubを頻繁に利用しています。

ただし、GitHubにコードをアップロードするときには特別な注意が必要です。常にそうしている開発者ばかりではないようですが。

パブリックドメインに置かれていたデータ

トークンやキーを含むコードが、誰もがアクセスできる状態でGitHubに多数ホスティングされていることが明らかになったわけですが、このようなトークンやキーがあれば、権限を手にし、利用者やアプリになり代わって一定の操作を実行できるようになります。意図せず公開状態となっていた情報には、以下のものがあります。

  • 主要Webサイトの管理者アカウントのログイン情報
  • アプリ内のAPI機能(プログラムやWebサイトなどさまざまなシステムコンポーネント間でやり取りするためのツールのセット)を利用可能とするAPIキーやトークン
  • 暗号化キー。パスワードの代わりに単独で認証に使用されることが多いため、1つのキーを入手すれば、プライベートネットワークも含め多くのリソースにアクセス可能になる

トークンと暗号化キーの漏洩が危険な理由

アカウントへの不正アクセスは、たとえ限定的であっても、企業にとって重大な脅威となります。いくつか例を見てみましょう。

悪用方法の1つは、そうしたトークンの発行元会社からと見せかけて大量のメールを配信したり投稿を行ったりすることです。たとえば、企業のWebサイト、またはFacebookやTwitterのアカウントに何者かが不正にアクセスし、悪意ある投稿やフィッシングサイトへのリンクを置いていくことが考えられます。一般的に、企業の公式Webサイトや公式アカウントは信頼できる情報源と見なされるため、多くの人がこういった投稿やリンクを安全だと思い込む危険性が大いにあります。

さらに、企業Webサイトの購読者リストに載っている人が、フィッシングのターゲットになる可能性もあります(メール配信システムであるMailChimpを使っている場合など)。先ほどの例と同じように、利用者は自分が購読申込みをした、実在する会社からのメールを信じてしまうでしょう。このような攻撃は、企業の評判を著しく傷付ける可能性があり、多くの顧客を失ったり、通常業務に戻るまでに時間がかかったりするなどの害をもたらしかねません。

また、サイバー犯罪者が、サービスの有料の機能(Amazon AWSなど)を、あなたの支払いで利用する可能性もあります。たとえば、ブロガーのルーク・チャドウィック(Luke Chadwick)氏の身に降りかかった一件を見てみましょう(英語記事)。ある日チャドウィック氏は、自分のキーがGitHub上で誰にでも見られる状態になっているという連絡をAmazonから受けました。調べてみると、クローズしていなかった古いプロジェクトの中にそのキーが見つかりました。どうなっているかと自分のAmazonアカウントにログインしてみたところ、3,493ドルが請求されて未払い状態であることが判明しました。公開されていたキーを誰かが手に入れ、チャドウィック氏のアカウントを使って仮想通貨のマイニングをしていたようです。同氏は最終的にAmazonに返金してもらうことができましたが、いつも同じようにハッピーエンドとはいかないことは肝に銘じておきましょう。

プライベートなデータはどのようにしてGitHubへ行きつくのか

調査結果を分析してみると、パブリックドメインに機密情報を残しているのは、若くて経験の浅いプログラマーだけではないようです。たとえば、大規模な政府系教育機関のWebサイトにアクセスできるデータが、10年の実績を持つ開発者によってGitHubにアップロードされていました。

トークンやキーがGitHubのリポジトリで公開されているのには、さまざまな理由があります。あるサービスへアプリを統合するのに、認証ツールが必要かもしれません。テスト用にコードを発行するとき、デバッグキーではなく実際に有効なキーを使ってしまった人が、そのままパブリックドメインから削除することを忘れている場合もあります。

Securosisのアナリスト兼CEOであるリッチ・モグル(Rich Mogull)氏の場合を例に取りましょう(英語記事)。モグル氏は、カンファレンスでの発表用に開発したアプリをGitHubにアップロードしました。このプログラムはAmazon AWSを呼び出すようになっており、認証用の全データはローカルに保存されていました。しかし、コードの個々のブロックをデバッグするために、アクセスキーをいくつか含むテスト用ファイルを作成した同氏は、デバッグが済んだ後にファイルからアクセスキーを削除するのを単純に忘れていました。これを何者かが発見し、知らないうちにAmazonのサービスを500ドル分使っていたのです。

また、GitHubリポジトリに有効なトークンを置いたままにすることのリスクと、コードをリポジトリに置く前にトークンを探して削除する(または置き換える)必要性に、単に気付いていない開発者もいるかもしれません。

リソースを保護するには

  • 誰でもアクセスできるリポジトリに有効なトークンやキーをアップロードするのは有害かつ危険であることを、開発者に意識付けましょう。プログラマーは、コードをアップロードする前に、公にしてはならない情報が含まれていないことを必ず確認すべきであることを理解している必要があります。
  • GitHub上にある自社プロジェクトに機密情報が含まれていないかどうか、製品管理者に精査させ、そういった情報が含まれている場合は削除しましょう。削除の際には、変更履歴にも何も残さないように徹底的に削除してください。
  • GitHubに保存されている何らかの自社データにパスワードが含まれている場合は、パスワードを変更しましょう。すでに誰かがそのコードを見て、保存している可能性が否定できないためです。
  • 日頃から従業員の情報セキュリティへの意識を高めるように努め、GitHubをはじめとするツールやリソースの責任ある利用を習慣づけましょう。Kaspersky Labのプラットフォームは、業務に支障を与えずに、効果的かつ実際的な方法で意識を高めるのに役立ちます。