SIEM on Amazon Elasticsearch Serviceを試してみました

# SIEM on Amazon Elasticsearch Serviceを試してみました

## `SIEM on Amazon Elasticsearch Service`とは？
- いい感じにAWS上のセキュリティ状況を可視化してくれるサービスです。以下のような可視化が可能です。
![000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/415280/af1418e7-89bc-f829-6593-95a053760b7a.png)
- `「サービスです」`と書きましたが、1つのサービスで完結するわけではなくAWSが提供してる様々なセキュリティサービスを`Amazon Elasticsearch Service`を使って可視化してくれるというものです。
- このサービスの良いところは、Elasticsearchのダッシュボードも用意してくれているので、自分で0から分析を考えるという手間がない点だと個人的には考えています。セキュリティサービスの設定はしたのだけど、セキュリティ分析をどこから始めていいかよく分からないという場合には、とても助かりますね！
- 構築方法は以下のgithub上の情報を参考に進めることができます。
    - [siem-on-amazon-elasticsearch](https://github.com/aws-samples/siem-on-amazon-elasticsearch/blob/main/README_ja.md) 


## README通り進めます
- 一番簡単な方法で進めていきます。(カスタマイズする方法もあってGitHub上にはそちらについても手順が用意されているので親切です。→ [高度なデプロイ](https://github.com/aws-samples/siem-on-amazon-elasticsearch/blob/main/docs/deployment_ja.md))
- 今回行う簡単な方法の概要は以下です。
    1. MaxMind 社の GeoLite2 Free をダウンロードする
        - ダッシュボードにIP アドレスや国情報・緯度・経度のロケーション情報を付与するために必要です 
    2. クイックスタートでCloudFormationを実行する
    3. Kibanaの設定をする
        - セキュリティ状況を可視化するためのダッシュボードがKibanaで提供されるので、その設定です
    4. ログの取り込みをする
        - 可視化したいログをS3バケットに連携することで可視化が行われるので、その設定です

### 1. MaxMind 社の GeoLite2 Free をダウンロードする
- まずはサインアップからです。以下のページに進みます。
    -  [GeoLite2 Free Downloadable Databases « MaxMind Developer Site](https://dev.maxmind.com/geoip/geoip2/geolite2/)にアクセスして、画面の下の方にあるサインアップをクリックします。  
      ![001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/415280/685c8f58-fe35-bca3-250d-d5c4e421d1f5.png)  
    - 必要な情報を記載すると、メールが送られてきます。そのメールにToken付きのURLが記載されているので、そこにアクセスしてパスワードを設定するとログインできるようになります。  
    - ログインできたら、左メニューの`My License Key`を開き`Generate new license key`をクリックします  
    ![002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/415280/90c55234-daa2-1793-d108-120b05c50fc8.png)  
    - `License key desscription`に任意の値を入れてキーを作成します。`GeoIP Update?`はNoで進めます。  
    ![003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/415280/3e9a3589-3c10-af0f-86ac-e3e5a2dbd4d7.png)  
    - ライセンスキーが作成されましたので、控えておきます。  
    ![004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/415280/36564fc1-c6f2-b9fd-b04f-2d8c43f74116.png)  
- 手順1はこれで終了です。


### 2. クイックスタートでCloudFormationを実行する
- ここから構築の開始です。GitHub上のREADMEからクイックスタートですぐに始められます。今回はTokyoリージョンを選択しました。  
![005.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/415280/3053624c-341f-98bc-cd2a-d6775cdb3a2f.png)  
- CloudFormationの実行画面になりますので「次へ」で進めます。  
![006.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/415280/2e7c8a67-0ca3-b55e-9784-ba33654d641a.png)  
- パラメーターを入力します。(以下の画像のパラメーターはデフォルトの値ですので変更する必要があります)  
![007.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/415280/2f123a01-d3f6-7973-dc68-cc0a2df6d0c6.png)  
    - パラメーターで設定する値の説明は以下のようになっています。
        - 気にするのは`AllowedSourceIpAddresses`です。今回は、ダッシュボードを見れるIPアドレスを/32で限定しました。
    
|パラメーター|説明|
|------------|----|
|AllowedSourceIpAddresses|Amazon VPC 外に SIEM on Amazon ES をデプロイした時に、アクセスを許可するIPアドレス。複数アドレスはスペース区切り|
|GeoLite2LicenseKey|Maxmindのライセンスキー。IP アドレスに国情報を付与|
|SnsEmail|メールアドレス。SIEM on Amazon ES で検知したアラートを SNS 経由で送信する|

- あとは実行して20分ほど待つだけです。手順2はこれで終了です。

### 3. Kibanaの設定
- 正常完了となったCloudFormationスタックの`出力`からKibanaにアクセスするためのURL・ユーザー・パスワードが確認できます。  
![009.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/415280/b5b2dd50-dd2c-21a5-4057-b054917fb024.png)  
- URLにアクセスするとログイン画面が見えました。  
![010.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/415280/11529d9e-51bd-0163-73ab-d66a692136ae.png)  
  - ちなみに許可されていないIPアドレスからアクセスすると以下のような画面が表示されました。ちゃんと弾いてくれていますね。  
  ![008.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/415280/660b1c67-627a-5cbe-af5f-b6648ca4c688.png)
        - あとこのログインするユーザーをCognitoと連携することもできるらしいので、この辺りはCognitoの勉強にもなるので実装していきたいですね！

- 次にダッシュボードを作っていきます。
    - ログインすると以下の画面がでてくるので`Explore on my own`を選択して次へ進みます。  
![011.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/415280/868bb4fd-c560-741f-dcb7-472ec18ef23a.png)

    - ここからダッシュボードを作っていきます。作るというか、これも用意されているのでそれをインポートしていきます。
    - [ダウンロード先](https://aes-siem.s3-ap-northeast-1.amazonaws.com/assets/saved_objects.zip) ←これをクリックすると設定ファイルがダウンロードされます。
    - ダウンロードと解凍ができたら、Kibanaに戻って、以下の画面にすすみます。(Management(左下の歯車) -> Saved Objects -> Importの順です)  
    ![012.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/415280/0f10cd6f-812c-f58b-5270-e9e35db7b8e3.png)  
    - 解凍したZIPファイルの中ある`dashboard_v770.ndjson`をインポートしていきます。    
![014.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/415280/41adce1d-e862-df54-722a-30dec9f6d11e.png)
- 無事にインポートできました。これで手順3が完了です。

### 4. ログの取り込み
- 残るはログを取り込むのみです。取り込めるログは以下のようになっています。
    - 個人的にはここに`aws config`が追加されると嬉しいですね。

|AWS Service|Log|
|-----------|---|
|AWS CloudTrail|CloudTrail Log Event|
|Amazon Virtual Private Cloud (Amazon VPC)|VPC Flow Logs|
|Amazon GuardDuty|GuardDuty finding|
|AWS WAF|AWS WAF Web ACL traffic information<br>AWS WAF Classic Web ACL traffic information|
|Elastic Load Balancing|Application Load Balancer access logs<br>Network Load Balancer access logs<br>Classic Load Balancer access logs|
|Amazon CloudFront|Standard access log<br>Real-time log|
|Amazon Simple Storage Service (Amazon S3)|access log|
|Amazon Route 53 Resolver|VPC DNS query log|

- ちなみに取り込み方法についても[AWS サービスの設定方法](https://github.com/aws-samples/siem-on-amazon-elasticsearch/blob/main/docs/configure_aws_service_ja.md)に記載してくれています。こういう親切さが助かりますね。

- ということで、今回は基本的なところで`CloudTrailのログ`を取り込んでいきたいと思います。
    - CloudTrailの画面に移動して、新規で証跡をつくります。気にする点は以下2点です。
        - `証跡ログバケット名`を今回のCloudFormationで作成されたバケットを選択すること
        - ログファイルの暗号化を有効にした上で`AWS KMS エイリアス`に、今回作成されたエイリアスを選択すること
![015.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/415280/bedde792-adc5-35bb-386a-2c6ed82a967d.png)
    - あとはデフォルトの設定で進めていけばCloudTrail側の設定は完了です。
- CloudTrailを設定してすぐにKibanaを見ると、まだ連携されていないのか何も表示されませんが心配しないで下さい。数分したらサマリーが表示されます。
    - まだ連携されていな場合  
    ![016.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/415280/d60a2df7-abbe-a034-0d93-59a2a6c61cba.png)  
    - 数分待つと、、、連携されました！  
    ![017.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/415280/122d9e13-86b0-63a0-482c-bc01ee7d9283.png)  
- `CloudTrail Summary`をクリックしてみるといい感じに監視化されたものが見えました！  
![019.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/415280/e35fb4fd-38ae-f7a6-bc7f-1e789e3d1a9b.png)  
- 試しにEC2にsshして、EC2から`aws s3 ls`を実行してみました。これで`API Call`が記録されていればいいなあと思ったのですが、、、  
![020.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/415280/6486854b-9cbb-31f1-2d68-a779e07160ef.png)  
   - ちゃんと`aws s3 ls`を実行したEC2インスタンスのインスタンスIDがuser.nameとして記録されていましたし、eventNameとして`ListBuckets`が記録されています。
   - また、対象のインスタンスIDだけで絞ることができてハイライトも自動でしてくれます。  
   ![021.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/415280/9121e09c-023e-89c1-01ff-ffac9af7b54d.png)  
   - たまにCloudTrailを直で見て対象のAPI Callを探したりするのですが、割と大変でした。それがぱっと見られるようになるのは、とても嬉しいですね。

- これで手順4も完了です。
    
## まとめ
- GitHubのREADMEに沿って設定しただけで、いい感じのダッシュボードが出来上がりました。
- とても便利で素晴らしいのですが、自分でダッシュボードを作っていないということは、どんな意図でダッシュボードが作られているかを理解していく必要があるということです。
    - でもこの理解を進めるということは、AWSセキュリティのベストプラクティスを学んでいくということにも繋がると思うので、しっかりとダッシュボードの意図を読み取れるようにしていきたいと思います。