Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ハニートークン型ハニーポットによる攻撃者の行動分析と脆弱性の発見と報告まで / AWS HoneyToken HoneyPot

graneed
March 20, 2021

ハニートークン型ハニーポットによる攻撃者の行動分析と脆弱性の発見と報告まで / AWS HoneyToken HoneyPot

2021年3月20日のJAWS DAYS 2021で登壇した資料です。
https://jawsdays2021.jaws-ug.jp/timetable/track-b-1000/

graneed

March 20, 2021
Tweet

More Decks by graneed

Other Decks in Technology

Transcript

  1. #jawsdays #jawsdays2021 #jawsdays2021_B 3 自己紹介 Kohei Isono(磯野 亘平) • 日本電気株式会社(NEC)にて、セキュア開発

    推進、脆弱性診断・ペネトレーションテスト、 インシデントレスポンス対応などに従事 (今回の発表は個人の活動です) • ハニーポットの構築・運用とCTFが趣味 https://graneed.hatenablog.com/ @graneed111
  2. #jawsdays #jawsdays2021 #jawsdays2021_B 8 アクセスキーとは • AWS CLI等のツールやプログラムから AWSのサービスへのアクセスに使用 •

    IAMユーザーまたはAWSアカウントの ルートユーザーの長期的な認証情報 • アクセスキーIDと シークレットアクセスキーから構成 アクセスキー ツール AWS サービス
  3. #jawsdays #jawsdays2021 #jawsdays2021_B 10 AWS Well-Architected フレームワーク セキュリティ 検出 アイデンティティ管理

    とアクセス管理 セキュリティの基礎 インフラストラクチャ 保護 データ保護 インシデント対応 オペレーショナル エクセレンス 信頼性 パフォーマンス 効率 コスト最適化 5本の柱 SEC 2 人とマシンの認証の管理は どのようにすれば よいですか? SEC 3 人とマシンのアクセス許可は どのように管理すれば よいでしょうか? 一時的な認証情報を 使用する 定期的に認証情報を 監査およびローテーションする 最小権限のアクセスを 付与する アクセス許可を 継続的に削減する ベストプラクティス AWS Well-Architected フレームワーク - アイデンティティ管理とアクセス管理 https://docs.aws.amazon.com/ja_jp/wellarchitected/latest/framework/a-identity-and-access-management.html
  4. #jawsdays #jawsdays2021 #jawsdays2021_B 11 IAMのセキュリティの ベストプラクティス •AWS アカウントの ルートユーザーアクセスキーをロックする •最小限の特権を認める

    •アクセスキーを共有しない •認証情報を定期的にローテーションする •不要な認証情報の削除 IAM でのセキュリティのベストプラクティス https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/best-practices.html
  5. #jawsdays #jawsdays2021 #jawsdays2021_B 12 AWSアクセスキーを 管理するためのベストプラクティス •アカウントアクセスキーを削除する (または生成しない) •長期のアクセスキーの代わりに一時的なセキュ リティ認証情報(IAMロール)を使用する

    •IAMユーザーのアクセスキーを適切に管理する AWS アクセスキーを管理するためのベストプラクティス https://docs.aws.amazon.com/ja_jp/general/latest/gr/aws-access-keys-best-practices.html
  6. #jawsdays #jawsdays2021 #jawsdays2021_B 13 CIS AWS Foundations Benchmark 2. Storage

    1. Identity and Access Management 3. Logging 4. Monitoring 5. Networking 1.4. Ensure no root user account access key exists 1.11. Do not setup access keys during initial user setup for all IAM users that have a console password 1.13. Ensure there is only one active access key available for any single IAM user 1.14. Ensure access keys are rotated every 90 days or less
  7. #jawsdays #jawsdays2021 #jawsdays2021_B 14 守るには・守ってもらうには • ホワイトペーパーやベスト プラクティスで言われてい ることは確かに重要 •

    ただ、忙しい開発現場に必 要性を理解してもらい、腹 落ち(納得)した上で対応 してもうらためには?
  8. #jawsdays #jawsdays2021 #jawsdays2021_B 18 ハニーポットの分類 ハニーポット 攻撃経路 サーバ クライアント ハニー

    トークン 高対話 ハイブリッド 低対話 インタラクション インタラクション 検知精度 情報収集 偽装性 スケーラ ビリティ 安全性 低対話型 低 低 低 高 高 高対話型 高 高 高 低 低 コロナ社「実践サイバーセキュリティモニタリング」より
  9. #jawsdays #jawsdays2021 #jawsdays2021_B 19 ハニーポットの分類 ハニーポット 攻撃経路 サーバ クライアント ハニー

    トークン 高対話 ハイブリッド 低対話 インタラクション インタラクション 検知精度 情報収集 偽装性 スケーラ ビリティ 安全性 低対話型 低 低 低 高 高 高対話型 高 高 高 低 低 コロナ社「実践サイバーセキュリティモニタリング」より 今回、採用した方式
  10. #jawsdays #jawsdays2021 #jawsdays2021_B 20 ハニーポットの システム要件と実現方法 痕跡を保存できること 攻撃者を誘い込めること 安全であること CloudTrailで証跡ログ保存

    Administrator Accessポリシー 付きのアクセスキーを提供 SCPを使用した AWSアカウントの権限制御 攻撃を分析できること Athenaを使用した CloudTrailの証跡ログ分析
  11. #jawsdays #jawsdays2021 #jawsdays2021_B 21 ハニーポットの システム要件と実現方法 痕跡を保存できること 攻撃者を誘い込めること 安全であること CloudTrailで証跡ログ保存

    Administrator Accessポリシー 付きのアクセスキーを提供 SCPを使用した AWSアカウントの権限制御 攻撃を分析できること Athenaを使用した CloudTrailの証跡ログ分析
  12. #jawsdays #jawsdays2021 #jawsdays2021_B 22 アクセスキーを提供 • 複数の方法でアクセスキー を公開し、攻撃者に提供 • 攻撃者は、アクセスキーで

    AWS環境に侵入し、何らか の行動を実施するはず • その行動を観察する AWS サービス ②アクセスキーで 侵入、目的行動 攻撃者 ハニー ポッター ①アクセスキー を公開 ③行動内容 を観察
  13. #jawsdays #jawsdays2021 #jawsdays2021_B 25 ハニーポットの システム要件と実現方法 痕跡を保存できること 攻撃者を誘い込めること 安全であること CloudTrailで証跡ログ保存

    Administrator Accessポリシー 付きのアクセスキーを提供 SCPを使用した AWSアカウントの権限制御 攻撃を分析できること Athenaを使用した CloudTrailの証跡ログ分析
  14. #jawsdays #jawsdays2021 #jawsdays2021_B 26 AWS Organizations • 複数のAWSアカウントを統合するための アカウント管理サービス •

    Service Control Policy(SCP)で、 AWSアカウント単位で権限制御が可能 • ほか、組織内のAWSアカウントの料金の 一括請求、マネージドサービスの統合管 理も可能
  15. #jawsdays #jawsdays2021 #jawsdays2021_B 29 マルチアカウントの構成例 SID331_Architecting Security and Governance Across

    a Multi-Account Strategy https://www.slideshare.net/AmazonWebServices/sid331architecting-security-and-governance-across-a-multiaccount-strategy
  16. #jawsdays #jawsdays2021 #jawsdays2021_B 31 Service Control Policy 【AWS Black Belt

    Online Seminar】AWS Organizations https://d1.awsstatic.com/webinars/jp/pdf/services/20180214_AWS-Blackbelt-Organizations.pdf
  17. #jawsdays #jawsdays2021 #jawsdays2021_B 32 SCPを使うと • ハニーポット用のAWSアカウントを AWS Organizationsのメンバーアカ ウントにし、マスターアカウントか

    らSCPで権限制限すれば、 AdministratorAccessポリシーがア タッチされていてもサービスを利用 できない状態に メンバーアカウント AdministratorAccess ポリシー SCPで権限がなければ サービス利用不可 マスタ―アカウント Organizations SCPで権限を制限 AWS サービス
  18. #jawsdays #jawsdays2021 #jawsdays2021_B 35 SCPの上限サイズ • SCPにはAWS管理ポリシーがない (FullAWSAccessだけ) • よって、IAMのReadOnlyAccessポリ

    シーの定義をコピーして作成 • ただ、SCPのサイズには 上限サイズ(5120バイト)があり、 ReadOnlyAccessポリシーが収まらない • 苦肉の策だが、 上限サイズに合わせて分割作成
  19. #jawsdays #jawsdays2021 #jawsdays2021_B 36 ハニーポットの システム要件と実現方法 痕跡を保存できること 攻撃者を誘い込めること 安全であること CloudTrailで証跡ログ保存

    Administrator Accessポリシー 付きのアクセスキーを提供 SCPを使用した AWSアカウントの権限制御 攻撃を分析できること Athenaを使用した CloudTrailの証跡ログ分析
  20. #jawsdays #jawsdays2021 #jawsdays2021_B 37 • ユーザー、ロール、または AWS の サービスによって実行されたアク ションを記録してくれるサービス

    • 本ハニーポットの分析の要 • AWS Organizationsを使用している と、全アカウントのCloudTrailを一 括で有効化できるので便利 CloudTrail
  21. #jawsdays #jawsdays2021 #jawsdays2021_B 38 • CloudTrailからCloudWatchLogsに連携 • Slack通知する関数をLambdaで作成し、 CloudWatchLogsのサブスクリプショ ンフィルタから呼び出すよう設定

    • ただ、一度侵入されると、すぐに通知 が100件以上溜まるため、適宜、通知 条件をカスタマイズ CloudTrailとSlack連携
  22. #jawsdays #jawsdays2021 #jawsdays2021_B 40 ハニーポットの システム要件と実現方法 痕跡を保存できること 攻撃者を誘い込めること 安全であること CloudTrailで証跡ログ保存

    Administrator Accessポリシー 付きのアクセスキーを提供 SCPを使用した AWSアカウントの権限制御 攻撃を分析できること Athenaを使用した CloudTrailの証跡ログ分析
  23. #jawsdays #jawsdays2021 #jawsdays2021_B 49 githubへの公開は? • githubにアクセスキーを誤って 登録してしまう事例は多い • ただ、AWS社でも監視しており、

    すぐに通知および対策指示を受 ける可能性が高いため、公開は 見送った • なお、対策しないと、リソース のブロックやAWSアカウントの 停止される可能性がある AWS からリソースに関する不正使用の報告を受け取った場合、どうすればよいですか? https://aws.amazon.com/jp/premiumsupport/knowledge-center/aws-abuse-report/
  24. #jawsdays #jawsdays2021 #jawsdays2021_B 53 パブリックAMIの公開 • インスタンス内に認証情報を残し た状態でAMIを作成すると、イ メージ内に認証情報が残る •

    そのAMIをパブリックに共有する • セキュリティのベストプラクティ スでも注意されている AWS セキュリティのベスト プラクティス https://d1.awsstatic.com/International/ja_JP/Whitepapers/AWS_Security_Best_Practices.pdf
  25. #jawsdays #jawsdays2021 #jawsdays2021_B 56 インスタンスメタデータサービス • EC2インスタンスのホスト 名、セキュリティグループ、 IAMロールなど各種情報を 取得できるサービス

    • EC2インスタンス自体から のみアクセス可能 $ curl http://169.254.169.254/latest/meta-data/ ami-id ami-launch-index ami-manifest-path block-device-mapping/ events/ hostname iam/ (省略) $ curl http://169.254.169.254/latest/meta-data/hostname ip-172-31-6-71.ap-northeast-1.compute.internal $ curl http://169.254.169.254/latest/meta-data/instance-type t3.nano EC2インスタンスからcurlコマンドでアクセスした例
  26. #jawsdays #jawsdays2021 #jawsdays2021_B 57 インスタンスメタデータサービス • インスタンスメタデータか ら、EC2インスタンスにア タッチされているIAMロール の一時的な認証情報の取得

    も可能 • MITREのATT&CKでも、攻撃 手法として定義されている $ curl http://169.254.169.254/latest/meta- data/iam/security-credentials/lab-dev-c2-role { "Code" : "Success", "LastUpdated" : "2021-03-15T18:24:53Z", "Type" : "AWS-HMAC", "AccessKeyId" : "ASIARMMTII225WBXGDO7", “SecretAccessKey” : “FqklOiT4PyPCM4oAnfw+~省略~", “Token” : “IQoJb3JpZ2luX2VjEMr//////////wEaDmFwLW5vcnRoZWFzd C0xIkYwRAIgdJhJCRm6Egmywm2K8DAH5VfIQVciB6uJX1Z3 m5YnI90CIFs5FRHR1~省略~ "Expiration" : "2021-03-16T00:28:58Z" } EC2インスタンスからcurlコマンドでアクセスした例 Unsecured Credentials: Cloud Instance Metadata API https://attack.mitre.org/techniques/T1552/005/
  27. #jawsdays #jawsdays2021 #jawsdays2021_B 63 サマリ • ②パブリックAMIに公開したアクセスキーと③インスタンスメタデータの利用は無し • 攻撃者ごとに行動に特徴があり、自動ツールだけでない人間の息づかいを感じる 攻撃者

    侵入経路 主な行動 A ④トップページにアクセスキーを公開 ・IAM、EC2、RDSの情報収集程度 B ④トップページにアクセスキーを公開 ・IAM、S3、Route53の情報収集程度 C ①インターネット上のサービスにアクセスキーを公開 ・S3のListBuckets(バケット一覧の確認)のみ D ④トップページにアクセスキーを公開 ・短時間に大量の読み取りAPIコール E ①インターネット上のサービスにアクセスキーを公開 ・SESサービスの確認 F ④トップページにアクセスキーを公開 ・m5ad.12xlargeのEC2インスタンス作成 G ④トップページにアクセスキーを公開 ・大量のAPIコール H ①インターネット上のサービスにアクセスキーを公開 ・LightsailのDownloadDefaultKeyPairをコール ・IAMユーザーのログインプロファイル作成 ・PutUserPermissionsBoundaryで権限を制限 I ①インターネット上のサービスにアクセスキーを公開 ・新規IAMユーザー作成、ログインプロファイ ルの更新 ・S3の新規バケット作成、Organizationsから の脱退、EC2インスタンスの削除
  28. #jawsdays #jawsdays2021 #jawsdays2021_B 66 攻撃者E • Simple Email Service(SES)が、 過去24時間に送信したメールの送信数や、

    送信可能なメールの最大数を取得する APIをコール • それも6つのリージョンに1回ずつ • レピュテーションの高いEメールアドレス の有無確認や、該当AWSアカウントの利 用企業の特定をしようとしていた可能性
  29. #jawsdays #jawsdays2021 #jawsdays2021_B 68 AWS Toolkit for Visual Studio AWS

    Toolkit for Visual Studio Demo https://www.youtube.com/watch?v=B190tcu1ERk
  30. #jawsdays #jawsdays2021 #jawsdays2021_B 69 攻撃者G • 「aws-sdk-go/1.4.10 (go1.7.4; linux; amd64)」のUserAgentか

    ら大量のAPIコール • AWS用セキュリティテストツー ル「pacu」を使用している可能 性が高い
  31. #jawsdays #jawsdays2021 #jawsdays2021_B 71 攻撃者H • Permissions Boundaryを設定し、 なぜか自らの権限をEC2のみに制限。 Service

    Quotasも確認していた。 • EC2に対する操作が失敗する理由に 悩み、試行錯誤していたと推察 • ほか、Lightsailサービスの DownloadDefaultKeyPairをコール
  32. #jawsdays #jawsdays2021 #jawsdays2021_B 74 Download DefaultKeyPair • ReadOnlyAccessポリシーのVersion47ま では、Download*の権限が付与 •

    2019-04-03 04:07更新の Version48で、 権限が外された • つまり、以前はReadOnlyAccessの権限 があれば、サーバにログインできた • もしReadOnlyAccessをコピーしてカス タムのポリシーを作っている場合は、 この問題が残存している可能性がある Version 48 Version 47
  33. #jawsdays #jawsdays2021 #jawsdays2021_B 75 攻撃者I • 2週間ほど日次アクセスする粘着さ • 新規IAMユーザー作成、ログインプロ ファイル更新してパスワード変更など、

    やりたい放題 • ほか、S3バケット作成、EC2インスタ ンスの削除、Organizationsからの脱退 などを試みていたようだが、 SCPでブロック余裕でした
  34. #jawsdays #jawsdays2021 #jawsdays2021_B 77 SCPが完全にはいったのに・・・ • SCPの設定を見直すが、EC2の書き込みア クションは許可していない • CloudTrailの証跡ログを確認すると、

    RunInstancesをコールしてEC2インスタン スを作成したIPアドレスとUserAgentが、 spotfleet.amazonaws.com • そして、RunInstancesのコールの直前で、 攻撃者によるRequestSpotFleetのコール
  35. #jawsdays #jawsdays2021 #jawsdays2021_B 78 スポットインスタンス /スポットフリート • スポットインスタンスは、使用されてい ないEC2キャパシティを利用して、割安 でインスタンスを立てられるサービス

    • スポットフリートは、入札制で、入札価 格が現在のスポット価格を上回っている と、スポットインスタンスとしてEC2イ ンスタンスを起動できる • RequestSpotFleetは入札するAPI
  36. #jawsdays #jawsdays2021 #jawsdays2021_B 79 RequestSpotFleetは PassRoleに依存 • RequestSpotFleetのコールは、 EC2の権限がなくても、IAMの 「PassRole」の権限があれば呼べる

    ことが判明 • PassRoleは、AWSのサービスに ロールをアタッチできる権限 • RunInstancesのコールによるインス タンス起動はEC2サービスから実行 EC2サービス (スポットフリート) RequestSpotFleetを コールして入札 iam:PassRole権限ありの IAMユーザ RunInstancesをコールして EC2インスタンス起動 (UAはspotfleet.amazonaws.com) EC2インスタンス
  37. #jawsdays #jawsdays2021 #jawsdays2021_B 80 原因の考察 • SCPでアカウントにEC2インスタ ンスの作成権限を与えていなく ても、AWSのEC2サービスから は作成できたようだ

    • SCPで、IAMFullAccessを許可し ていたため、iam:PassRoleの権 限も与えていた メンバーアカウント PassRoleがあれば RequestSpotFleetは可能 iam:PassRole権限ありの IAMユーザ(アクセスキー) SCPの制限にかからず RunInstancesが可能 SCPの制限により RunInstances不可 マスタ―アカウント EC2サービス (スポット フリート) EC2インスタンス Organizations SCPで ReadOnlyAccessと IAMFullAccessのみ許可
  38. #jawsdays #jawsdays2021 #jawsdays2021_B 83 攻撃への利用方法 • スポットフリートの入札時に、 AMI、VPC、サブネット、セキュリティグループの 指定が可能 •

    任意のプログラムを自動実行させるパブリックAMIを用意し ておくことで、以下のようなことが可能 –高性能なインスタンスを起動してマイニング –C2サーバにリバースシェルを張ってVPC内に侵入
  39. #jawsdays #jawsdays2021 #jawsdays2021_B 87 AWSサポートの 暫定措置 • IAMポリシー 「AWSExposedCredentialPolicy_DO_N OT_REMOVE」を作成し、漏洩したアク

    セスキーに紐づくIAMユーザにアタッチ • 拒否アクションが列挙された IAMポリシー { "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1538161409", "Effect": "Deny", "Action": [ "iam:UpdateUser", "iam:AttachUserPolicy", "lightsail:GetInstanceAccessDetails", "organizations:InviteAccountToOrganization", "iam:AttachRolePolicy", "ec2:StartInstances", "lightsail:Delete*", "iam:CreateInstanceProfile", "iam:UpdateAccessKey", "iam:PutUserPolicy", "iam:DeleteUserPolicy", "iam:AttachGroupPolicy", "lambda:CreateFunction", "iam:CreateLoginProfile", "lightsail:Start*", "iam:CreateUser", "ec2:RunInstances", "lightsail:Create*", "lightsail:Update*", "iam:PutUserPermissionsBoundary", "iam:ChangePassword", "iam:DetachUserPolicy", "organizations:CreateAccount", "iam:PutGroupPolicy", "organizations:CreateOrganization", "iam:UpdateAccountPasswordPolicy", "iam:CreateAccessKey", "iam:CreateRole", "lightsail:DownloadDefaultKeyPair", "ec2:RequestSpotInstances" ], "Resource": [ "*" ] } ] }
  40. #jawsdays #jawsdays2021 #jawsdays2021_B 88 利用者側で必要な措置 ① ルートユーザーのパスワード変更 ② 全てのアクセスキーのローテーション ③

    漏洩したアクセスキーに紐づくIAMユーザの削除 ④ 全てのリージョンのリソースをチェック ①~③が完了するまでサポートから対応状況を催促される 一定期間内に対応しないとアカウント凍結されるようだ
  41. #jawsdays #jawsdays2021 #jawsdays2021_B 89 AWSCompromisedKeyQuarantine • 2020/8/12にAWS管理ポリシー 「 AWSCompromisedKeyQuarantine 」

    が追加された。 • 今は、このポリシーが、侵害された IAMユーザにアタッチされる。
  42. #jawsdays #jawsdays2021 #jawsdays2021_B 96 タイムライン(2/3) インスタンスまだ起動してる?再現手順送ってくれない? インスタンスはもう消しちゃった。 手順は最初のレポートで送ったけど、もう1回送るよ もちろん。ところで、この問題っていつ直るの? 2020/4/13

    ありがとう、現在も調査しているよ。5営業日以内に連絡するよ ドラフト版ありがとう また何か気付いたことあったら報告してね ドラフト版でも共有してくれない? ドラフト版の資料送るよ(このスライドの前半部分) 2020/4/17 2020/4/7 2020/4/4
  43. #jawsdays #jawsdays2021 #jawsdays2021_B 102 まとめ アクセスキーの 管理を徹底しよう インシデントの 発生に備えよう 脆弱性レポートを

    出そう ・万が一、漏洩したら即座に使用される。 ・使用しないなら、そもそも発行しない。 ・可能であればMFAを設定する。 ・最小権限の付与も。 ・CloudTrailは全アカウント、全リージョン必須。 ・ログを分析する手順やツールを予め準備する。 ・リソース監視も大事。 ・AWS管理の機能にも抜け道や穴はありうる。 ・お客様のため、自社のため、自分のため、 AWSを使用しているみんなのため。