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

  • 137
    いいね
  • 4
    コメント

前置き

情けないことだが、自身の過失により、GitHubで長年Privateリポジトリで運用していたリポジトリを、とある事情でpublicに変更したのだが、その中にAWSのS3のアクセスキーとシークレットキーがファイルに直接ハードコーディングされているのにすっかり気づかず、自身のAWSのアクセスキーとシークレットキーが流出してしまうという失態を起こしてしまった。

その不正利用により届いた請求金額は約300万円。請求を見た時は頭が真っ白になり冷や汗ものだったが、過去に同様のミスとその状況と対応をまとめてくださっていた方々のおかげで、なんとか深呼吸して対応することができたので、自分も少しでも今後起きうる同様の状況の方に対する助けになればと、一部始終を共有しておくことにしようと思う。

初心者がAWSでミスって不正利用されて$6,000請求、泣きそうになったお話。
AWS で不正アクセスされて凄い額の請求が来ていた件

流出発覚〜色々と対応

あるPrivateリポジトリをpublicリポジトリに変更してから1週間ほど経った頃、AWSより英語で

AWSアカウントで、不正アクセスのパターンに一致する不規則なアクティビティが検出されました。アカウントにログインして、すべてのリソースが正当なものであることを確認してください。

なるメールが届いた。自身のAWSコンソールを確認すると、見知らぬEC2インスタンスが大量に稼働し、約300万円分もの請求が自分のアカウントへ記載されており、直ぐに何が起きたかを悟った(同時にそれを引き起こした原因の自分の失態も)。

この辺りは、直ぐに起こした行動は半分テンパりながら作業していたこともあり、記憶がやや曖昧で的を得ないことを書いているかもしれないが、ご了承を願いたい。(因みにこの時点では筆者のAWSに対する知見はあまり深くない。)

まず自分の場合は確認した請求額に東京リージョン以外の全てのリージョンでc4.8xlargeのインスタンスの稼働によるサービス料金がプラスで請求に記載されていた。その額およそ300万円。通常なら毎月1万円以下の請求金額だったので、さすがにこの数字を見た時は、頭を突然殴られたかのような衝撃だった。
スクリーンショット 2017-05-04 2.27.39.png

まずは、直ちにGithubの該当リポジトリをprivateに戻し、AWSのインスタンスの状況を見ようと、EC2のコンソールから各リージョンを変えてみて、インスタンス稼働状況を見てみるも、問題のc4.8xlargeのインスタンスたちが稼働している様子は見受けられない。いつも通り東京リージョンに自分の作成したインスタンス以外は稼働していないように見えた。(ここに関しては今も謎で、なぜそうなのかわかっていない。とにかく焦っていたので、自分が何か勘違いしている?)

ただ、各リージョンで発覚の数日前に作られた不審なセキュリティグループがあるのが確認できたので、そのセキュリティグループを消していった。その後、色々と見ているとAWS Identity and Access Management(IAM)より、同じく発覚の数日前に作られた不審なアクセスキーを発見する。これも直ちに削除した。因みに他の自分が作ったアクセスキーはこの不審なアクセスキーが作られた日に勝手に削除されていた。(流出させてしまったキーも削除され無効になっていた)

恐らくこの発覚からの初動でやったのはこの動作であったはずである。そんなこんなで色々と自身のAWSをパトロールしていたら、AWSより再び英語にて、

公開されたアクセスキーを削除するための迅速な対応をしていただきありがとうございます。すべての不正なAWSの使用が削除されているように見えるので、私はあなたに代わって払い戻しリクエストを提出しました。リクエストの状況をお知らせするため、7-10営業日後に再度ご連絡いたします。

とのメールが追伸で届いた。ここまでは発覚から1時間くらいの出来事である。このメールをもらって「一旦は安心なのか? 払わなくていい可能性があるのか?」とちょっと安心し、落ち着いて物事を考えられるようになってきた。

過去の事例を調べる〜日本語で問い合わせ

何とか応急処置は出来たっぽいものの、あまりに不安なので、過去の同じような事例を調べていて、下記の2つにたどり着いた。

初心者がAWSでミスって不正利用されて$6,000請求、泣きそうになったお話。
AWS で不正アクセスされて凄い額の請求が来ていた件

こちらはどちらも同じ状況になり、結果的に不正利用分の請求は免除となっているので、少し心が救われた。300万の支払いが回避できる希望が見えつつもやはり、まだかなり不安。(こちらのお二方には本当に心が救われました。発覚当時の不安を和らげてくれて、大変ありがとうございますm(_ _)m)

AWSに問い合わせてみようにも、何と発覚時はGW初日。平日のみの問い合わせ対応で後5日間待たなければならない。しかし、月1万円のビジネスサポートプランだと年中無休で1時間以内二返信をくれるらしいので、300万支払いのリスクを少しでも減らせるなら、と即時プランを購入して問い合わせてみた。結果的に1時間以内に返信をもらえるのはアカウントサポートではなく、技術サポートだけだったが、しっかりと無駄に動いてるEC2インスタンスはないことなどを確認してもらえたり、不正使用の際に行うべきマニュアル日本語版をもらえたり(英語版は前の英語メールに付属されてきていた)とサポートプランを買ってよかった。

日本での同様の事例は先述の2件だけだったが、色々不安をぬぐい去るために、海外事例も調べてみた。

My AWS account was hacked and I have a $50,000 bill, how can I reduce the amount I need to pay?
Dev put AWS keys on Github. Then BAD THINGS happened
Ryan Hellyer’s AWS Nightmare: Leaked Access Keys Result in a $6,000 Bill Overnight

「全部、無事に支払いを免除されている!まだ、不正利用の金額を支払うことになったという記事はまだ見ていない」 だいぶ希望が湧いてきた。(まぁでも支払うことになったらわざわざブログとかには書かないか…)
どうやらどこも共通して免除の審査は1~2週間ほどかかるそうだ。もう審査の結果が出る1~2週間の間まで、本件に関してはなるべく考えないようにしよう。
(因みにここを執筆の時点でまだ結果は出ていないが、これで免除にされなかったらどう生きるか。。そもそも全貯金出しても300万は支払えない。。。)

審査待ちの間に反省、セキュリティの強化、対策の模索

二度と本件のような失態を犯さないため、なるべく対策を立てたい。あまり詳しくなかったAWSのセキュリティなども少し調べてみた。

・まずコードレベルで秘密鍵などの情報はファイルにハードコーディングで直接書かない(当然)。環境変数などに入れる。
・AWSのMulti-Factor Authentication(MFA)の二段階認証を利用する
・全権限を持つルートユーザーを使わず、IAMユーザーを作成し、そのIAMユーザーにて、AWSを使用する。
「git secret」と言うパスワードなどの機密情報がコミットされることを防ぐライブラリの使用(Amazonがメールで教えてくれましたm(_ _)m)
・あとは一定コストを超えると通知が来るような設定もAWSはできるようなので、それを設定するなど。

今回の失態で、今まで軽視していたことを否めないセキュリティに関しては痛い目を見て、懲りたので、AWS(や、その他セキュリティ)に関してはまだまだ未熟な部分も多く、もっとこれから真剣に調べていかねば。。

また、数日後に日米ともにAWSサポートセンターからメールが届き、「申請の結果が出るまでサポートいたしますので、なんでも聞いてください」と非常に丁寧に対応いただけました。ありがとうございます。

免除審査結果の通知

発覚から8日ほど経った日、米国AWSから通知が。書き出しは「Great News!! 免除申請が許可されました(英語)」という内容のメールが届く。その後、日本のAWSからも(日本にも問い合わせていたので、)「無事に申請が許可されました。」とのメールが届きました。

日本のメールからには、非常に丁寧にどの部分が免除されたのかなどの情報が記載されており、1$にも満たないデータ転送料のような箇所まで丁寧に金額免除していただけました。そして、最後に「免除は今回限りになります」との注意書き。それはそうである。。今回免除していただいたことだけでも本当に感謝しかないです。

今回、AWSさんには自分のミスにより、損害を発生させてしまったことは重々反省し、今後AWSさんへ恩返しできるように努めていきたいと思います。