AWS公式資料で挑むSCS認定(15)-GuardDuty

##### [前回] [AWS公式資料で挑むSCS認定(14)-Detective](https://qiita.com/mingchun_zhao/items/1d15c7c25c8f405b9ef9)

## はじめに
「AWSを使うことで、エンジニアは魔法使いになれる」
  [ソフトウェア・ファースト - あらゆるビジネスを一変させる最強戦略] より

今回も「Security, Identity & Compliance」サービス、Amazon GuardDutyです。
機械学習を用いて脅威検知を自動化した、エージェント導入不要のサービス。

## 教材を選ぶ

[AWS Black Belt Online Seminar [Amazon GuardDuty]](https://d1.awsstatic.com/webinars/jp/pdf/services/20180509_AWS-BlackBelt_Amazon-GuardDuty.pdf) 資料を使用します。

自分の中で本資料のベストスライドは、「AWSセキュリティサービスの整理」。
サービスのカテゴライズから、セキュリティサービスの全体像(森)を再認識できました。

- ID・アクセス管理
- 発見的統制
- データ保護
- インフラストラクチャー保護
- リスクコンプライアンス
- インシデントレスポンス

どの側面も、目的はお客様データの保護ですね(機密性/完全性/可用性のCIA原則)。

### 発見的統制(Detective Control)

発見的統制とは、不正やミスの発生を発見し除外/修正するために、一連の業務の流れの中で組み込まれた手続きのこと。

AWSサービスによる発見的統制:

- CloudWatch
    - AWSサービスのリソース モニタリング
    - ログモニタリング (CloudWatch Logs)
    - プロアクティブ モニタリング (CloudWatch Events)
- CloudTrail
    - 呼び出されたAPIに関するイベントを継続的にロギング
    - コンプライアンスの簡素化
    - セキュリティの自動化
- GuardDuty
    - セキュリティ脅威リスクを検知・可視化
    - 悪意のあるIPアドレス、異常検出、機械学習などの統合脅威インテリジェンスを使用した脅威検知

## Amazon GuardDutyとは

- セキュリティの観点から脅威リスクを検知するAWSマネージド・サービス
- 分析のソースには下記を利用し、メタデータの連続ストリームを分析
    - VPC Flow Logs
    - AWS CloudTrail Event Logs
    - DNS Logs
- 統合脅威インテリジェンスを使用して脅威を認識
    - 脅威インテリジェンス(threat intelligence)とは
        - 脅威の防止や検知に利用できる情報の総称
    - 脅威インテリジェンスの例
        - 攻撃に使われた悪意のあるIPアドレス
        - 異常検出で得られた攻撃手段などの情報
        - 機械学習で分析した脅威の特徴

## GuardDuty 脅威検知の仕組み

### アーキテクチャ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2523098/b781ebb6-2304-8486-488b-c34903404016.png)

引用元: https://d1.awsstatic.com/webinars/jp/pdf/services/20180509_AWS-BlackBelt_Amazon-GuardDuty.pdf

### 検知方法

- シグネチャ検知型
    - シグネチャを使って検知(Signature Based Stateless Findings)
    - シグネチャは、不正な通信や攻撃を識別するためのルール集
- 振る舞い検知型
    - 振る舞いを分析し検知(Behavioral Stateful Findings)
    - 異常検知(Anomaly Detections)

### 脅威検知種類(Threat Detection Types)

- 悪意のあるスキャン
    - Instance Recon
        - Port Probe/Accepted Comm
        - Port Scan (intra-VPC)
        - Brute Force Attack (IP)
        - Drop Point (IP)
        - Tor Communications
    - Account Recon
        - Tor API Call (failed)
- インスタンスへの脅威
    - シグネチャ検知型による検知
        - C&C Activity
        - Malicious Domain Request
        - EC2 on Threat List
        - Drop Point IP
    - 振る舞い検知型による検知
        - Unusual Network Port
        - Unusual Traffic Volume/Direction
        - Unusual DNS Requests
        - Domain Generated Algorithms
    - その他
        - Malicious Comms (ASIS)
        - Bitcoin Mining
        - Outbound DDoS
        - Spambot Activity
        - Outbound SSH Brute Force
- アカウントへの脅威
    - シグネチャ検知型による検知
        - Malicious API Call (bad IP)
        - Tor API Call (accepted)
        - CloudTrail Disabled
    - 振る舞い検知型による検知
        - Instance Launch Unusual
        - Region Activity Unusual
        - Suspicious Console Login
        - Unusual ISP Caller
        - Mutating API Calls (create, update, delete)
        - High Volume of Describe calls
        - Unusual IAM User Added
    - その他
        - Password Policy Change

### データソース(Data Sources)

- VPC Flow Logs
    - VPC Flow Logs が有効でなくても GuardDuty Findings を生成
    - 一方で、中長期的なログ分析において、VPC Flow Logs を有効にすることを推奨
- DNS Logs
    - EC2 インスタンス上から実行されたクエリログが DNS Logs 解析対象
- CloudTrail Events
    - CloudTrail イベントログを利用
    - AWS Management Console, SDKs, CLI から実行されるAPIコール 

### 信頼IPリスト&脅威リスト(Trusted & Threat IP Lists)

- GuardDuty 提供の脅威インテリジェンス
    - 攻撃者が使用することがわかっている IP アドレスとドメインで構成
        - CrowdStrike
        - Proofpoint
        - AWS Security
- カスタムリストを作成することで、既知の脅威リストをカスタマイズ
    - Trusted IP List(ホワイトリスト)
        - 登録IPに対するアクティビティは、GuardDutyはFindingとして検知しない
    - Threat IP List(ブラックリスト)
        - 既知の悪意のあるIPリストを登録、脅威リストに基づきGuardDuty Findingsとして通知

### Findings

#### Findingsが提供する情報

- AWS Management Console提供の脅威に関する情報
    - 重要度
    - 頻度
    - リージョン
    - 国
    - 脅威タイプ
    - 影響範囲
    - 攻撃元情報
- API / JSON 形式の脅威情報の活用
    - SIEM 連携
    - データ活用
    - 自動アクション
    - それ以外の情報
        - ARN
        - 時間
        - リソース情報

#### Findings の目的

脅威または潜在的な攻撃リスクに対処

- Backdoor : AWS リソースが攻撃を受けていることを検出
- Behavior : ベースラインとは異なるアクティビティやアクティビティパターンを検出
- Crypto Currency : ビットコインやイーサリアムなどの暗号通貨に関連付けられたソフトウェアを検出
- Pentest : 既知のペンテストツールで生成されたアクティビティと類似するアクティビティを検出
- Recon : AWS 環境の脆弱性を探そうとしているアクティビティを検出
- Stealth : 攻撃アクションや形跡を隠そうとするアクティビティを検出
- Trojan : トロイの木馬プログラムが攻撃に使用されていることを検知
- Unauthorized Access : 不審なアクティビティまたアクティビティパターンの検出

#### Finding タイプ

- Backdoor:EC2/XORDDOS
- Backdoor:EC2/Spambot
- Backdoor:EC2/C&CActivity.B!DNS

など。

引用元: http://docs.aws.amazon.com/ja_jp/guardduty/latest/ug/guardduty_finding-types.html

#### Findingの重要度(Severity Levels)

- 検知するFindingsには重要度(Severity)を設定
- 重要度は、0.0 – 10.0 の範囲で設定
    - High (重要度: 高) : Severity 7.0 – 8.9
        -  例) EC2 instance / IAM user credentials 関連
    -  Medium (重要度: 中) : Severity 4.0 – 6.9
        -  例) 大量トラフィック、通常アクティビティから外れる動き
    -  Low (重要度: 低) : Severity 0.1 – 3.9
        -  例) リソースに影響を及ぼす前にブロックされた悪意の疑いのあるアクティブティ

## GuardDutyの利用

### GuardDuty Service-Linked Role

- GuardDutyを有効にすると、サービスにリンクされたロール`AWSServiceRoleForAmazonGuardDuty` が自動作成される
- ロールは、`AWSServiceRoleForAmazonGuardDuty`と名付けられたAWSマネージドポリシーで構成される

```json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ec2:DescribeInstances",
        "ec2:DescribeImages",
        "ec2:DescribeVpcEndpoints",
        "ec2:DescribeSubnets",
        "ec2:DescribeVpcPeeringConnections",
        "ec2:DescribeTransitGatewayAttachments"
        "organizations:ListAccounts",
        "organizations:DescribeAccount",
        "s3:GetBucketPublicAccessBlock",
        "s3:GetEncryptionConfiguration",
        "s3:GetBucketTagging",
        "s3:GetAccountPublicAccessBlock",
        "s3:ListAllMyBuckets",
        "s3:GetBucketAcl",
        "s3:GetBucketPolicy",
        "s3:GetBucketPolicyStatus",
      ],
      "Resource": "*"
    }
  ]
}
```

ロール AWSServiceRoleForAmazonGuardDuty にアタッチされている信頼ポリシー:

```json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "guardduty.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
} 
```

## GuardDutyのAWSアカウント管理

- あるAWSアカウントで検知したFindingを、他AWSアカウントのGuardDutyに転送・統合管理可能
    - 例えば、セキュリティ管理アカウントに他AWSアカウントのGuardDuty Findingsを集約し一元管理が可能

### Amazon CloudFormation のスタックセットを使用

Amazon CloudFormationとは、

- Infrastructure as a code
- DevSecOpsを実現する主要サービス
- マルチアカウント、マルチリージョン対応
- 管理者アカウント用IAMロール(Default)
    - AWSCloudFormationStackSetAdministrationRole
-  ターゲットアカウント用IAMロール(Default)
    -  AWSCloudFormationStackSetExecutionRole

CloudFormation スタックセットとは、

- AWS CloudFormationスタックのコンテナ
- 1つのAWS CloudFormation テンプレートを使用し、複数AWS アカウントおよびリージョンにまたがってスタックをプロビジョニングできる


 CloudFormation テンプレートの例

```
AWSTemplateFormatVersion: "2010-09-09"
Description: A sample template
Resources:
  MyEC2Instance: #An inline comment
    Type: "AWS::EC2::Instance"
    Properties: 
      ImageId: "ami-0ff8a91507f77f867" #Another comment -- This is a Linux AMI
      InstanceType: t2.micro
      KeyName: testkey
      BlockDeviceMappings:
        -
          DeviceName: /dev/sdm
          Ebs:
            VolumeType: io1
            Iops: 200
            DeleteOnTermination: false
            VolumeSize: 20

```

### GuardDuty のクロスアカウントアクセス

- 管理者アカウントの作成と招待
    - CreateMembers
        - `aws guardduty create-members --detector-id 12abc34d567e8fa901bc2d34e56789f0 --account-details AccountId=123456789012,Email=guarddutymember@amazon.com`

    - InviteMembers
        - `aws guardduty invite-members --detector-id 12abc34d567e8fa901bc2d34e56789f0 --account-ids 123456789012`

- 管理対象アカウントの作成と招待
    - CreateDetector
        - `aws guardduty create-detector --enable`
    - AcceptInvitation
        - `aws guardduty accept-invitation --detector-id 12abc34d567e8fa901bc2d34e56789f0 --master-id 012345678901 --invitation-id 84b097800250d17d1872b34c4daadcf5 
`

## Amazon GuardDutyのまとめ

- 機械学習を用いた脅威検知
- エージェント導入不要・既存環境に影響を与えずパフォーマンス劣化無し
- 初期費用不要・無料期間付きで導入が容易
- CloudWatch Events/Lambdaによる、検知から対応までの自動化
- サードパーティ/エコシステム連携

## おわりに

Amazon GuardDutyで悪意のある挙動を検知し、サイバー攻撃を未然に防げそうです。
次回は、Amazon Inspectorです。お楽しみに。

##### [次回] [AWS公式資料で挑むSCS認定(16)-Inspector](https://qiita.com/mingchun_zhao/items/847a7a4e8e6f3615d9f3)