人生やまあり

大学卒業後IT会社に就職してITをやってます。

【AWS利用者必読】パスワード+MFAでは防げないAWS不正アクセスを防ぐ方法。


<スポンサードリンク>

必要なときに必要な分だけ利用できるパブリッククラウド。非常に便利な反面、AWSやAzureなどへの不正アクセスが発生し、数百万円も請求される事例が発生しているようです。

AWS で不正アクセスされて凄い額の請求が来ていた件 - yoya's diary
【やじうまWatch】AWSへの不正アクセスで190万円を請求されたユーザーの体験談が反響を呼ぶ - INTERNET Watch Watch

私も1年前の4月にAWS乗っ取りとその対策について記事を書いていました。

AWSのアカウントのっとり、認証キーの奪取に注意!数百万の高額請求される事案が発生しています。 - 人生やまあり

今回はAWS不正アクセスに対して、IAMのパスワード変更や、MFAデバイスのワンタイムパスワードを利用した2要素認証で防げると勘違いされている方もいるようなので、不正アクセスの仕組と、その対策方法とについて詳しくまとめたいと思います。

<内容>

  1. AWSが不正利用される原因
  2. パスワードの複雑化、変更やワンタイムパスワード導入では防げない理由
  3. AWS不正アクセスされないための方法
  4. AWS不正アクセス検知方法
  5. AWS不正アクセスが発覚した場合の対処法

AWSへ不正アクセスされる原因

AWSへのアクセス方法

まず不正アクセスを理解するためにAWSへのアクセス方法を説明します。AWSへのアクセス方法は大きく分けて2つあります。1つはAWSルートアカウントを利用したログインと、IAMを利用したログインです。

ログイン方法 説明
AWSルートアカウント AWSを利用するために登録するアカウントで、メールアドレス+パスワード(+ワンタイムパスワード)で認証されます。EC2やS3などのAWSサービス利用、請求管理のほか、AWSサービス解約さえできてしまうすべての権限を持ちます。アクセス元IPや操作権限を絞ることができないため、MFAデバイスを利用したワンタイムパスワードが必須。
IAM AWSルートアカウント内に作成できる子アカウントのようなもの。IAMユーザ、IAMグループ、IAMロールなどがある。IAMユーザはアクセス元IPや、操作できる権限設定(例えばEC2の起動だけできる権限など)を細かく設定可能。

通常利用時はAWSルートアカウントではなくIAMを利用することを強く推奨いたします。AWSも正式にIAMを利用することを進めております。

ログインするための3つの認証方法

AWSルートアカウント、IAMユーザを利用してAWSにアクセスする場合に、どちらも大きくわけて3つの認証方法があります。

認証方法 説明
ID+パスワード facebookやtwitterなどのSNSログイン同様、IDとパスワードでのログインです。AWSルートアカウントの場合はIDがメールアドレス、IAMユーザの場合はIAMユーザ名がIDになります。必要に応じてMFAデバイスを利用したワンタイムパスワードの設定ができます。主にAWSマネジメントコンソールを利用してWebログインする場合に利用されます。
認証キーの利用 アクセスキー、シークレットキーの組み合わせで認証する方法です。AWSルートアカウントやIAMユーザ毎に複数発行することができます(すでにルートアカウントへの発行はできなくなっている。)。主にCLIやSDKなどのAPIアクセスする場合に利用されます。よく勘違いされますが、ここにワンタイムパスワードを設定することはできません。後述しますが、AWS不正アクセスで高額請求される大部分はこの認証キーが外部に漏れたことが原因です。
証明書の利用 Signing Certificate(X.509証明書)を利用した認証。最近ではほぼ利用されなくなったので説明割愛。

パスワードの複雑化、変更やワンタイムパスワード導入では防げない理由

「3つの認証方法がある=AWSにアクセスするための入り口が3つ存在する」ことになります。
f:id:lance104:20150406115112j:plain

AWSのアカウントのっとり、認証キーの奪取に注意!数百万の高額請求される事案が発生しています。 - 人生やまあり」や「AWS で不正アクセスされて凄い額の請求が来ていた件 - yoya's diary」の記事ででてくるほとんどの事例が、2番目の認証キーをスクリプトに埋め込んだままGitHubなどに公開されてしまい、認証キーが漏洩したことによる不正アクセスが原因ということがわかります。(最近のfacebookやtwitterのなりすまし投稿なども、実はこれが原因となっている場合がほとんど)

【やじうまWatch】AWSへの不正アクセスで190万円を請求されたユーザーの体験談が反響を呼ぶ - INTERNET Watch Watchのはてブコメントを見えていると、「パスワード見直そう」「ワンタイムパスワード設定しよう」というコメントが多数見受けられますが、これは「ID+パスワード」の入り口を守っているだけで、AWS不正アクセスの根本的な解決にはなりません。(もちろんID+パスワードがハックされることによる不正アクセスもあります)

不正アクセスから守るためには、それぞれの入り口に対して、適切な対応を実施する必要があります。

AWS不正アクセスされないための方法

ID+パスワードによる不正アクセス防止のための注意事項

  1. 他のパスワードを使いまわさない。
  2. パスワードは複雑なものを利用する。英数字記号が混じったものにする。
  3. 名前、誕生日など推測されやすいワードを利用しない。
  4. 定期的にパスワードを変更する。
  5. MFAデバイスを利用したワンタイムパスワードを設定する

こちらは他のWebサービスを利用する場合でも同じなのでみなさん馴染みがあると思います。ワンタイムパスワードについては、iPhoneやAndroidのアプリGoogle Authenticator(Googlenつくったワンタイム発行アプリ)が利用できます。

AWS Multi-Factor Authenticationでvirtual MFA devicesとしてGoogle Authenticatorを利用 | DevelopersIO

認証キーを利用した不正アクセス防止のための注意事項

  1. AWSルートアカウントに紐づく認証キーは絶対発行しない!(これを怠ると高額請求、本番システムの全削除、個人情報漏洩などの大きなリスクをおうことになります。)
  2. 最小限に権限を絞ったIAMユーザに対して認証キーを発行する!
  3. 絶対にスクリプトにハードコーディングしたものを公開しない!
  4. 可能な限りIAMロールを利用する!

AWS不正アクセス検知方法

Billingアラートの設定

BillingとSNSアラート機能を利用して、AWS利用料金に合わせてアラートメールを発行することができます。可能な限りはやく検知するためにも必ず設定しましょう。

CloudTrailとSNSを利用した不正ログイン検知

CloudTrailとCloudTrail Logsを利用してあくまで簡易版ですが不正ログイン検知することができます。ログイン認証失敗回数や、ログイン元IPを検知しアラートメールを飛ばす設定をいれます。

http://dev.classmethod.jp/cloud/aws/aws-cloudtrail-cloudwatch-logs-badip/

AWS不正アクセスが発覚した場合の対処法

実際に多額の請求をされた後の対応は下記に詳しく書いてありますので、そちらをご参照ください。

皆さん、自分の銀行口座番号と暗証番号を周りに教えたりしないですよね?AWSの不正アクセスはAWSサービスに問題があるわけではなく、まさに「自分の銀行口座番号と暗証番号を世界中に公開」してたことが原因になります。自分の身は自分で守る。各自が徹底することで不正アクセスからの多額の請求が無くなること、そしてビットコインの発掘のような不正利用が無くなることを願っています。