やーまんぶろぐ

気が向いた時にだけ書くブログ

Amazon GuardDuty 徹底調査!

Amazon GuardDutyについて調べたのでメモしておきます。
非常に簡単に脅威検知が可能になるため、有効化必須のサービスといっても良いと思います。
東京リージョンでも利用可能です。

よくまとまったスライドがあるので一読すると概要が掴めると思います。

www.slideshare.net

目次です。

GuardDutyとは

Amazon GuardDuty とは - Amazon GuardDuty

  • Amazon GuardDuty は、VPC フローログおよび AWS CloudTrail イベントログを分析および処理する継続的なセキュリティモニタリングサービスです。

料金

Amazon GuardDuty の料金表 – アマゾン ウェブ サービス (AWS)

  • AWS CloudTrail イベントの数量 (1,000,000 イベントあたり) と分析された VPC フローログと DNS ログデータの量 (GB あたり) に基づいています。
  • 以下、Tokyoの例になります。
    • VPC フローログと DNS ログが 1.18 USD/GB
    • AWS CloudTrail イベントが 4.72 USD/1,000,000 イベント

f:id:yamano3201:20171228161411p:plain

GuardDutyのセットアップ

Amazon GuardDuty でサポートされるリージョン - Amazon GuardDuty

  • コンソールから「GuardDutyの有効化」を実施するだけです。
  • リージョンサービスのため、各リージョンで有効化を実施する必要があります。

f:id:yamano3201:20171228162950p:plain

無料トライアル

  • 30日間の無料トライアルがあります。リージョンごとに30日間無料サービスが提供されます。

IAMロールの自動作成

  • GuardDutyを有効化すると「AWSServiceRoleForAmazonGuardDuty」というIAMロールが作成されます。
  • 作成されたIAMロールはIAMからもGuardDutyからも編集は不可能になります。
  • AWSアカウントに対して1つ作成され、リージョンごとにGuardDutyを作成した場合は同じIAMロールを使用することになります。
# アクセス権限(AmazonGuardDutyServiceRolePolicy)
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeInstances",
                "ec2:DescribeImages"
            ],
            "Resource": "*"
        }
    ]
}
# 信頼関係
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "guardduty.amazonaws.com"
      },
      "Action": [
        "sts:AssumeRole"
      ]
    }
  ]
}

各種データソース

  • GuardDuty では AWS CloudTrail、VPC フローログ、DNS クエリログのデータソースを分析し結果を生成します。
  • ただし、AWS CloudTrail、VPC フローログ、DNS クエリログのイベントやログは提供しないので、AWS CloudTrailやVPCフローログのセットアップが別途必要になります。
  • VPCフローログが有効でなくてもGuardDutyの結果は生成されます。

AWS CloudTrailを有効にする必要があるかは不明であるが、全リージョンで有効にしておくことが無難だと思われる。要確認。
DNS クエリログはEC2インスタンス上から実行されたクエリログが解析対象のため、有効化は不要と思われる。要確認。

Amazon CloudWatch Events

  • GuardDutyのユーザインターフェースはCloudWatchをサポートしていませんので、CloudWatch側から設定する必要があります。
  • CloudWatchもリージョンサービスなので、リージョンごとに設定が必要になります。
  • イベントタイプにはGuardDuty Findingのみ用意されています。結果の生成をトリガーに通知が送信されます。

ex) ターゲットにSNSトピックを指定することで結果の生成をトリガーにメール通知を行うことができます。

f:id:yamano3201:20171228163024p:plain

信頼できるIPリストと脅威リスト

信頼できる IP リストと脅威リストのアップロード - Amazon GuardDuty

停止または無効化

Amazon GuardDuty の停止または無効化 - Amazon GuardDuty

  • GuardDuty停止
    • AWS 環境のセキュリティは監視されなくなり、新しい結果は生成されません。
    • 既存の結果は変更されず、GuardDuty の停止によって影響を受けることはありません。GuardDuty は後で再び有効にすることができます。
  • GuardDuty無効
    • 既存の結果と GuardDuty の設定は失われ、復旧できなくなります。
    • 既存の結果を保存する場合は、GuardDuty を無効にする前にそれらをエクスポートする必要があります。

GuardDutyの結果

  • 以下の結果タイプをサポートしています。
    • Amazon GuardDuty の結果タイプ - Amazon GuardDuty
    • BackDoor: AWSリソースが攻撃を受けていることを検出
    • Behavior: ベースラインとは異なるアクティビティやアクティビティパターンを検出
    • Crypto Currency: ビットコインイーサリアムなどの暗号通過に関連付けられたソフトウェアを検出
    • Pentest: 既知のペンテストツールで生成されたアクティビティと類似するアクティビティを検出
    • Recon: AWS環境の脆弱性を探そうとしているアクティビティを検出
    • Stealth: 攻撃アクションや形跡を隠そうとするアクティビティを検出
    • Trojan: トロイの木馬プログラムが攻撃に使用されていることを検知
    • Unauthorized Access: 不審なアクティビティまたアクティビティパターンの検出
  • 以下に結果タイプの詳細なリストが記載されています。
  • 結果タイプの説明横の四角いボタンから詳細なリストへリンクすることができます。

f:id:yamano3201:20171228164046p:plain

検出されたセキュリティ問題の修復

検証方法

  • 「全般」「結果サンプルの生成」ボタンから、サンプルを生成することができます。
  • [例]と書かれた32件のFindingsが作成されました。
  • CloudWatch Eventsも送信されるので通知先の動作確認を行うことができます。

※手軽に結果を生成させる方法がわかっていません。要確認。

エクスポート

  • JSON形式でエクスポートすることが可能です。
[
  {
    "schemaVersion": "2.0",
    "accountId": "xxxxxxxxxxxxxxxxxxxxxxxx",
    "region": "ap-northeast-1",
    "partition": "aws",
    "id": "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy",
    "arn": "arn:aws:guardduty:ap-northeast-1:xxxxxxxxxxxxxxxxxxxxxxxx:detector/xxxxxxxxxxxxxxxxxxxxxxxx/finding/yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy",
    "type": "CryptoCurrency:EC2/BitcoinTool.B!DNS",
    "resource": {
      "resourceType": "Instance",
      "instanceDetails": {
        "iamInstanceProfile": null,
        "imageId": null,
        "instanceId": "i-99999999",
        "instanceState": null,
        "instanceType": null,
        "launchTime": null,
        "networkInterfaces": null,
        "availabilityZone": null,
        "platform": null,
        "productCodes": null,
        "tags": null
      }
    },
    "service": {
      "serviceName": "guardduty",
      "detectorId": "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz",
      "action": {
        "actionType": "DNS_REQUEST",
        "dnsRequestAction": {
          "domain": "example.com",
          "protocol": "TCP",
          "blocked": false
        }
      },
      "resourceRole": "TARGET",
      "additionalInfo": {
        "sample": true
      },
      "eventFirstSeen": "2017-12-27T02:21:34Z",
      "eventLastSeen": "2017-12-27T02:21:34Z",
      "archived": false,
      "count": 1
    },
    "severity": 5,
    "createdAt": "2017-12-27T02:21:34.592Z",
    "updatedAt": "2017-12-27T02:21:34.592Z",
    "title": "Bitcoin-related domain name queried by EC2 instance i-99999999.",
    "description": "EC2 instance i-99999999 is querying a domain name that is associated with Bitcoin-related activity."
  }
]

アーカイブ

  • 「最近」から非表示にしたい場合は、アクションから「アーカイブ」することで「アーカイブ済み」に移すことができます。
  • 再度、「最近」に表示したい場合は、アクションから「元に戻す」ことで「最近」に移すことができます。

AWS アカウントの管理(マルチアカウント)

  • メンバーアカウントで検知した結果をマスターアカウントのGuardDutyで表示および管理することが可能になります。

※メンバーアカウントでも料金が発生するかは要確認。
※マスターアカウントでは、メンバーアカウントの料金も重複して発生するか要確認。

アカウント

  • マスターアカウント
    • 自分のアカウントおよびすべてのメンバーアカウントの GuardDuty を設定し、さらに GuardDuty の結果を表示および管理できます。GuardDuty に最大 100 のメンバーアカウントを登録できます。
  • メンバーアカウント
    • 自分のアカウントの GuardDuty を設定し、さらに GuardDuty の結果を表示および管理できます。メンバーアカウントのユーザーは、他のメンバーアカウントの結果を表示または管理することはできません。

AWS アカウントを同時に GuardDuty のマスターアカウントとメンバーアカウントにすることはできません。

マルチアカウントでの信頼できるIPリスト、脅威リスト

  • マスターアカウントで設定した信頼できるIPリスト、脅威リストはメンバーアカウントには反映されません

招待方法

Amazon GuardDuty での AWS アカウントの管理 - Amazon GuardDuty

  • ステップ 1 - アカウントを追加する
    • マスターアカウント側でアカウントIDとEメールを指定して追加します
    • CSVで一括招待することも可能です。
    • リージョンサービスになるので、リージョンごとの招待が必用です。
  • ステップ 2: アカウントを招待する
    • マスターアカウント側で「招待」をクリックします。「メッセージ」を記入して「招待の送信」ボタンを押します。
    • 日本語のメッセージは文字化けするので注意。メンバーアカウント側の通知画面からは日本語も表示されます。
    • エンタープライズサポート契約の場合、ccにTAMのアカウントが入ります。
  • ステップ 3 - 招待を受け入れる
    • メンバーアカウント側で「招待を承諾する」ボタンを押します。
    • 事前に有効化していた場合でも、招待を承諾することで各種設定やログが消えることはありません。
    • メンバーアカウント側ではアーカイブを実施することができません。

※招待を受け入れた後もメンバーアカウント側で自由に抜けることが可能です。抜けた後はアーカイブを実施することが可能になります。

最後に

組織を超えてAmazon GuardDutyの中央管理を行いたかったので、まとめてみました。

既にメンバーアカウント側でGuardDutyを有効化している場合も検知結果や設定はそのまま、マスターアカウント側で管理することが可能だったので展開自体はしやすいと感じました。

ただし、費用に関してはメンバーアカウント側でも発生して、マスターアカウント側ではメンバーアカウント側の費用も重複して発生しそうなのでコスト的にはデメリットとなるかもしれません。

また、メンバーアカウント側でアーカイブ機能に制限があり、いったんメンバーから離脱しないとメンバーアカウント側では検知されたイベントを消すことができないこともデメリットとなるかもしれません。

マルチアカウントにして、マスターアカウント側で管理することのメリットを明確にしないと、メンバーアカウントのメリットはわかりづらいというのが現時点での感想です。
ex) 社内のCSIRTと連携してインシデントレスポンスを迅速に行う。など

2017/12/14 AWS re:Invent 2017 Security re:Cap 参加レポート

今さらですが、AWS re:Invent 2017 Security re:Capの参加レポートになります。
connpass.com

公式の開催報告ブログがありました。資料もこちらから参照可能です。
aws.typepad.com

AWS Single Sign-On AWSソリューションアーキテクト 辻 義一さん


re:Inventと今後のdwangoでのAWSセキュリティについて 株式会社ドワンゴ 鈴木 栄伍さん

re InventのEBCにて、AWSの技術者に直接話を聞けるみたいですね。

re Inventの中で登壇者が一番ためになったセッションとのことです。

Amazon GuardDuty AWSパートナーソリューションアーキテクト 酒徳 知明さん


AWS re:Invent 2017振り返り SOCの立場からみたre:Invent 株式会社リクルートテクノロジーズ 安東 美穂さん


Security re:Cap 2017 トレンドマイクロ株式会社 姜 貴日 さん

資料のp10にGuardDutyとDeepSecurityの違いが載っています。

検出と遮断というのが大きく異なりますが、ポートスキャン、C&C通信、ブルーとフォースなど対応する脅威は被っているように見えますね。
多層防御なのでどっちかという話ではないかもしれないですが。

さっそくGuardDutyとDeepSecurity連携のコードが提供されていました。
AWSのマネージドIDSとDeepSecurityのIPSが連携するとセキュリティを向上させることができそうですね。

2017/10/07 脆弱性診断 初心者ハンズオントレーニング 参加レポート

今さらですが、脆弱性診断 初心者ハンズオントレーニングの参加レポートです。
pentest-web.connpass.com

XSS, SQLインジェクション 脆弱性、アクセス制御系の説明の後にBurpSuiteを使って実際に脆弱性がないかを診断していくハンズオンを実施しました。

OS, ミドルウェア脆弱性診断は機械的に実施することが多いが、アプリケーションの脆弱性診断はアプリの特性を理解する必要があるので、人がやるのが有効とのことでした。

2017/09/30 TDDBC Tokyo 2017-09 参加レポート

今さらですが、TDDBC Tokyoの参加レポートです。
tddbc.connpass.com

2011年にTDDBCに参加したときはRubyでした。

AWS Summit でTestable Lambdaのセッションを聞いてから、なるべくLambdaのテストを書くようにしています。

Lambdaの開発ではPythonを利用しているので、今回はPythonで受けてきました。

ペアプロの成果物は下の2つです。最後にpushしただけなので途中のコミットなどは残していません。
https://github.com/yamano/python_pytest/blob/with_azu1129/acme/semver.py
https://github.com/yamano/python_pytest/blob/with_azu1129/tests/acme/test_semver.py

2017/09/05 Deep Security User Night #5 参加レポート

今さらですが、Deep Security User Night #5の参加レポートです。
dsun.connpass.com

Google Cloud Japan Google Cloud Platformの紹介とセキュリティとDS on GCPの話


アイレット株式会社 Deep Security APIを活用したルールアップデートの自動化について

マルチテナントで子テナントの情報を取得できるようなREST APIが充実してほしいですね。
今だと子テナントにAPI用のユーザを作ってもらってテナントの数だけAPIを叩くような運用になってしまうので。

2017/09/01 NW X Security JAWS勉強会 #1 参加レポート

今さらですが、NW X Security JAWS勉強会 #1の参加レポートです。
connpass.com

アマゾンウェブサービスジャパン 桐山 隼人さん L5&L6&L7 AWS WAF の話とSecurity Automation の紹介

www.slideshare.net

今年の re inventでAWS WAFマネージドルールが出ましたね。
管理がめんどくさかったWAFのルールが、マネージドになるのは嬉しいですね。

東京海上日動火災保険 上田 哲也さん L7+:AWSユーザー向けサイバーリスク保険の概要および活用方法

保険の話。

2017/08/24 Security-JAWS 【第6回】参加レポート

今さらですが、Security-JAWS 【第6回】の参加レポートになります。

s-jaws.doorkeeper.jp

クラスメソッド株式会社 佐々木 大輔さん「ざっくりわかるAmazon Macie」

サービス発表されてすぐに大量の情報がまとめられているのはすごいですね。
dev.classmethod.jp

全てのバケットで有効にしたいけど、バージニアリージョンとオレゴンリージョンでしか使えないのが残念。
東京リージョンでも使えるようになると嬉しい。

アマゾン ウェブ サービス ジャパン株式会社 酒徳 知明さん「DevSecOps in AWS Multi-Account」

マルチアカウントのお話。

www.slideshare.net

今ググったら下の2つくらいが見つかった。後で読んでみる。
aws.amazon.com

dev.classmethod.jp