wp.bmemo.pw

自分のための覚書・備忘録

AWS セキュリティー

GitHubの優秀な検索のせいでAWSなどのアクセスキーが流出している件

投稿日:

GitHubって便利ですよね。この前AWSを使ったコードを書きました。

AWSの全データセンターから最も価格の低いスポットインスタンスを検索するスクリプト

で、これ書く前、参考にGitHub漁ってたんですが、意外と「APIキーとシークレットをハードコードしてGitHubにアップロード」する人が未だにいるんだなあと思った。と同時に、「GitHubの検索が優秀すぎて簡単にAPIキーを探せる状況」であることに気付いた。

日本でもこんな事例

AWSが不正利用され300万円の請求が届いてから免除までの一部始終

が2015年から現在にかけてたまに聞きます。↑のは結構最近。

いや怖いですね。GitHubは数分前にインデックスされたソースコードもすぐに検索できますので下手するとアップロード後すぐに不正利用されてもおかしくありません。GitHubの検索が優秀すぎて逆に(悪い意味で)キー検索に便利な構造になってます。

検索

画像とかリンクは載っけません。もちろん使えるかどうか確認など、キーを不正に使うことはしてはいけません。


GitHubのソースコード検索は登録者のみ

ソースコードの詳細検索機能はGitHubアカウントにログインしている場合のみです。GitHubのトップページから検索することでグローバルな検索モードに入ることができます。

AWSのAPIキー構造が検索のしやすさに拍車

自分でAPIキー発行してても思ったのですが、少なくともEC2とS3はAWSのAPIキーは「必ずAKIAJから始まる」ようですね。シークレットはランダムなようですが、偏りがある気がします。

キーに固定値が入っていると格段に検索しやすくなるのはおわかりでしょう。なぜAWSが固定値から始めるのは謎です。何か理由があるのでしょうか。なければやめたほうがいいのではと思うのですが・・・?

APIキーがハードコードされているソースが見つかった場合は、シークレットも必然的に近くに記述されています。当然です。APIを扱うオブジェクトを生成するのにキーもシークレットも必要ですし、開発者はpublicリポジトリにソースコードをホスティングしていることに無頓着な人間です。キーだけ記述されていてシークレットがどこにも無いパターンは少ないです。

共通のライブラリが検索のしやすさに拍車

AWSに限らずTwitterやFacebookなど、APIを扱うのに定番のライブラリがありますよね。そのライブラリで使用するキーやシークレットを記述する定数名が固定である場合が多いため、検索しやすくなります。

AWSのAPIを扱う定番ライブラリはPython3だとboto3です。boto3を環境変数を使わずにキーをハードコートする場合は、オブジェクト生成時に「aws_access_key_idとaws_secret_access_key」を指定します。これらを検索対象に含めることにより検索にヒットしやすくなります。

Twitterだと、TWITTER_CONSUMER_KEYや、TWITTER_CONSUMER_SECRETがよく使われます。TWITTER_ACCESS_TOKENや、TWITTER_ACCESS_TOKEN_SECRET なんかも検索ワードとして使えます。

もちろん多くのコードは対策済み

実際は流出しているコードよりも、もっと多くのコードがAPIキー流出をしないように対策しています。

例えば.envなどの環境設定ファイルにAPIキーを記述し、.gitignoreに.envを加えたりなどです。

他にも「TWITTER_CONSUMER_KEY=YOUR_COMSUMER_KEY」にしてダミーを入れておくようなコードも見かけます。

うっかりミスを防ぐためにもキーを記述したファイルは.gitignoreに加える対策が有効ではないかと思います。

boto3などでは環境変数にキーとシークレットを設定することで、コードに記述しなくても使用できるように配慮されています。

要はハードコードダメ・ゼッタイってやつですね。


-AWS, セキュリティー

執筆者:


  1. […] GitHubの優秀な検索のせいでAWSなどのアクセスキーが流出している件 – wp.bmemo.pw […]

Leave a Reply to githubに間違えてpushしたパスワードなどの情報を履歴ごと削除する方法│文系エンジニア大学生の技術ブログ Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

関連記事

no image

Raspberry Pi やAndroid でAMラジオを発信する

エアギャップネットワーク / コンピュータ というものをご存知でしょうか。LAN、WLAN、BT等の公衆ネットワークから完全に切り離されたスタンドアロンのネットワーク / コンピュータのことです。 こ …

強力だけど覚えやすくて打ちやすいパスワードの作成方法

正直パスワードがランダム文字列だと覚えられないし打ちにくい。楽したい でも世間はそれを許してくれない。比較的強力だけど覚えやすいパスワードの作成方法で、自分が実践している方法を紹介します もくじ文章化 …

WordPressとMarkdownを使ったXSS

去年見つけたXSS紹介します. WordPress上でとあるMarkdownプラグインを使用すると,JavaScriptの投稿を禁じられたユーザーでもJavaScriptを投稿できるようになります.複 …

Avast! 無料版 WEBスキャン機能の脆弱性

最近見つけたけど僅差で先を越されて報奨金取りそこねた脆弱性の解説をします.既に直ってます. 大手のアンチウイルスソフトには「WEBセーフスキャン」だとか「HTTPSスキャン」とかいう「暗号化されたHT …

安全で小回りの効く高対話型Honeypotを作る

知っている人がこのアドベントカレンダーに投稿していたので、過去にやっていた研究の話をアウトプットしようと思い私も投稿します。 ただし、筆者はコンピュータ初心者であり、今回の内容もCSS2016に出した …