Elastic StackによるAkamaiログの保存2 ～SIEM Integration連携～


## この記事の目的
Akamaiの複数のソリューションでSIEMによるログ連携をサポートしています。本記事では、Linodeで構築したLinuxサーバーにElastic Stackをインストールし、各種ログを集約して可視化できるようにします。
Elastic Stackの構築から準備までを前半となる１回目で解説しました。後半となる今回の記事では、SIEM Integrationによるセキュリティイベントログの取得までの手順を紹介します。


https://qiita.com/kabe-akam/items/d56ad69c4fcebb970888

## SIEM Integration連携の設定について
AkamaiのサービスとSIEM Integrationによる連携を行うためには、Webベースの統合管理用インターフェース「Akamai Control Center（ACC）」による設定作業及び、Elastic Stackでの設定作業が必要となります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821330/786784f8-1749-82c7-e716-004cfe460046.png)



## Security Configの設定
まずはAkamai Control CenterのSecurity ConfigurationにてSIEM Integrationの有効化を行います。本設定はAkamaiのプロフェッショナルサービスによる実装作業も可能ですので、必要に応じてご依頼ください。ここでは簡単に設定個所を記載します。

Security Configurationの詳細設定にてSIEM Integration（SIEM統合）をオンにしてActivationを行います。なお**Webセキュリティ設定ID**については後ほど使いますので、IDをメモしておいてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821330/79ce49d6-4cd3-93dc-70c2-d687d57dac72.png)

Activationなどの設定の流れについてはこちらをご参照ください。

https://techdocs.akamai.com/siem-integration/docs/akamai-siem-integration-for-splunk-and-cef-syslog#step-1-turn-on-siem-integration



## SIEM用APIクレデンシャルの作成
SIEM Integration連携をするためには、SIEM用のユーザー作成及び、APIクレデンシャルを作成する必要があります。

まずはAkamai Control Center → Security ConfigurationsメニューからSecurity Config一覧を開き契約とグループIDをメモしておいてください。作成したユーザーに割り当てるロールを適用するグループに用います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821330/777cc2e8-13a4-b86d-2951-532c064b0eea.png)


以下リンクのStep2、Step3を参照の上ユーザーとAPIクレデンシャルの作成を行ってください。注意点としては、作成したユーザーには、先ほどメモをした契約IDもしくはグループIDに対して「Manage SIEM」ロールのみ適用する必要があります。

https://techdocs.akamai.com/siem-integration/docs/akamai-siem-integration-for-splunk-and-cef-syslog#step-2-set-up-a-user-to-manage-siem



APIクレデンシャルの作成方法については以下もご参考ください。

https://qiita.com/kabe-akam/items/499507d19220b44b4901


APIクレデンシャル作成時に出力された以下の情報については後ほど使いますので、メモをしておいてください。
- client_secret
- host
- access_token
- client_token




## Fleetのインストール
Fleetは、Elastic Stackのデータ収集を効率的に管理するためのプラットフォームです。Fleetは、Central Managementと呼ばれる機能によって、設定や管理を一元化し、大規模な環境でも容易に管理できるようにします。ただしここでは単に連携用のツールとしての理解で問題ありません。


### ポートの許可

Fleetで使用するポートをufwにて許可します。
```
$ sudo ufw allow 8220
Rule added
Rule added (v6)

$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22                         ALLOW IN    Anywhere
9200                       ALLOW IN    Anywhere
5601                       ALLOW IN    Anywhere
8220                       ALLOW IN    Anywhere
22 (v6)                    ALLOW IN    Anywhere (v6)
9200 (v6)                  ALLOW IN    Anywhere (v6)
5601 (v6)                  ALLOW IN    Anywhere (v6)
8220 (v6)                  ALLOW IN    Anywhere (v6)
```

### Fleetのインストール

KibanaにてFleetメニューを選択します。
<img width=70% src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821330/a3e9f6ee-cae4-462a-cfb6-737e61fab029.png">


Fleetサーバーの追加をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821330/5b73ac4e-dbde-4731-268e-2609b3b0f3a6.png)


任意の名前およびURLを入力します。URLは「https://[LinodeインスタンスのグローバルIP]:8220」とします。
各項目を入力後、「Fleetサーバーポリシーの生成」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821330/04c1a38b-a701-9428-330d-14bf74ddfdda.png)


Fleetサーバーをインストールするためのコマンドが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821330/f80001ad-9eab-f74e-6b10-cf0e382b3d8d.png)


Elastic StackがインストールされたLinux上で表示されたコマンドをコピーし実行します。
```
$ cd ~
$ curl -L -O https://artifacts.elastic.co/downloads/beats/elastic-agent/elastic-agent-8.6.2-linux-x86_64.tar.gz
tar xzvf elastic-agent-8.6.2-linux-x86_64.tar.gz
cd elastic-agent-8.6.2-linux-x86_64
sudo ./elastic-agent install \
  --fleet-server-es=https://172.104.111.180:9200 \
  --fleet-server-service-token=AAEAAWVsYXN0aWMvZmxlZXQtc2VydmVyL3Rva2VuLTE2NzkyODgyMzUyNzg6Mk9xaHo3bUtTNnk5c2dNUkFhMVdwZw \
  --fleet-server-policy=fleet-server-policy \
  --fleet-server-es-ca-trusted-fingerprint=7ab5ebda9eba8d14d22b5872bf3359487a765edd250a76f6cb662b6c0f5e60e7


Elastic Agent will be installed at /opt/Elastic/Agent and will run as a service. Do you want to continue? [Y/n]:y

Successfully enrolled the Elastic Agent.
Elastic Agent has been successfully installed.
```

「Fleetサーバーが接続されました」と表示されます。ここでは何もせず閉じます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821330/b820db85-09b9-930f-6f2f-5974e9a51347.png)

## Akamai Agentの インストールと設定
Akamai AgentはElastic StackにてSIEM Integrationと連携するためにあらかじめ用意されているAgentです。


Fleetメニューからエージェントポリシーを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821330/bc413e74-ac80-a0e4-97df-913f0b7e0d5e.png)


「統合の追加」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821330/0c384374-e198-63d0-3693-beac76a9067d.png)


「Akamai」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821330/e329a10b-28f0-344d-8e14-5f10ae814e2b.png)

「Akamaiの追加」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821330/7240b7ce-88d6-fb35-af2a-4ca1c19cde78.png)

SIEM Integrationに必要な情報を入力します。任意の統合名を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821330/fb8fdaec-5807-2bbb-36c5-ef89729799b9.png)

SIEM Inegration用API Clientのクレデンシャルを入力します。
ZoneIDは、Security Configでメモしておいた「Webセキュリティ設定ID」です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821330/676a1b8f-9d3a-1430-be60-105bfa311162.png)

IntervalやInitial Intervalを適切な値に調整します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821330/1385750e-7626-fb2b-206b-bc6aa5e78bbd.png)


「Collect Akamai SIEM logs via Google Cloud Storage」は今回はOffにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821330/af63b871-e112-f303-316c-725aaf87ff78.png)



「保存して続行」をクリックして保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821330/594b295c-7246-26e3-2010-4773ff899551.png)

「変更を保存してデプロイ」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821330/e923c3dd-7503-f6e4-f404-b873832ab3b7.png)


## Elastic StackにてDashboardの表示


しばらく待ってから、「Analytics →　Dashboard」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821330/b380b702-cb3d-1deb-a4b5-28cff38d0e6d.png)

「[Akamai SIEM] Akamai Overview」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821330/f3a4c362-ec46-0a27-67ed-ec0651f7d498.png)


App and API Protectorなどのログが取得できていることが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821330/5117e3cf-6560-ea57-1bb5-7c28782ce4c4.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821330/b9a1ac7e-0bcf-9f60-fd57-e35c5e37e446.png)




項目や値を選択することができますので、簡単に抽出を行うことができます。もちろんダッシュボードを修正することで独自の視点で可視化することも可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821330/34a2cbc1-4d94-2c5c-0a1c-0554c3df5d9e.png)


## 参考：取得したログの例
以下はセキュリティログイベントの一例です。どのような項目があるか確認用としてご参考ください。
```
{
  "_index": ".ds-logs-akamai.siem-default-2023.03.21-000001",
  "_id": "xxxxxxx",
  "_version": 1,
  "_score": null,
  "fields": {
    "akamai.siem.request.headers": [
      {
        "sec-fetch-mode": "navigate",
        "Cookie": "xxxxx"",
        "sec-fetch-site": "none",
        "x-akamai-ro-piez": "on",
        "Accept": "text/html,application/xhtml xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
        "x-im-piez": "on",
        "x-akamai-a2-disable": "on",
        "dpr": "2",
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36",
        "Host": "xxxx",
        "Accept-Encoding": "gzip, deflate, br",
        "sec-fetch-user": "?1",
        "viewport-width": "1476",
        "Sec-CH-UA": "\"Google Chrome\";v=\"111\", \"Not(A:Brand\";v=\"8\", \"Chromium\";v=\"111\"",
        "sec-ch-ua-mobile": "?0",
        "sec-ch-ua-platform": "\"Windows\"",
        "upgrade-insecure-requests": "1",
        "Accept-Language": "ja,en-US;q=0.9,en;q=0.8",
        "sec-fetch-dest": "document"
      }
    ],
    "event.category": [
      "network"
    ],
    "elastic_agent.version": [
      "8.6.2"
    ],
    "http.request.id": [
      "1c0b3283"
    ],
    "client.geo.country_iso_code": [
      "JP"
    ],
    "client.address": [
      "xx.xx.xx.xx"
    ],
    "observer.vendor": [
      "akamai"
    ],
    "http.request.method": [
      "GET"
    ],
    "http.response.bytes": [
      305
    ],
    "source.geo.region_name": [
      "Tokyo"
    ],
    "akamai.siem.rule_actions": [
      "alert",
      "deny_custom_xxx"
    ],
    "source.ip": [
      "xx.xx.xx.xx"
    ],
    "agent.name": [
      "el-stack"
    ],
    "client.as.organization.name": [
      "xxx"
    ],
    "source.geo.region_iso_code": [
      "JP-xx"
    ],
    "client.geo.country_name": [
      "Japan"
    ],
    "event.agent_id_status": [
      "verified"
    ],
    "http.response.status_code": [
      403
    ],
    "client.as.organization.name.text": [
      "xxx"
    ],
    "event.kind": [
      "event"
    ],
    "akamai.siem.rules": [
      {
        "ruleSelectors": [
          "REQUEST_FILENAME"
        ],
        "ruleVersions": [
          "3"
        ],
        "ruleTags": [
          "ASE/WEB_ATTACK/LFI"
        ],
        "ruleMessages": [
          "Local File Inclusion (LFI) Attack"
        ],
        "ruleActions": [
          "alert"
        ],
        "rules": [
          "3000120"
        ],
        "ruleData": [
          "xxxx"
        ]
      },
      {
        "ruleSelectors": [
          "REQUEST_FILENAME"
        ],
        "ruleVersions": [
          "2"
        ],
        "ruleTags": [
          "ASE/WEB_ATTACK/LFI"
        ],
        "ruleMessages": [
          "Anomaly Score Exceeded for Local File Inclusion (LFI) Attack"
        ],
        "ruleActions": [
          "deny_custom_xxx"
        ],
        "rules": [
          "LFI-ANOMALY"
        ],
        "ruleData": [
          "Vector Score: 1000, Group Threshold: 5, Triggered Rules: 3000120, Triggered Scores: 1000, Triggered Selector: REQUEST_FILENAME, Mitigated Rules: , Last Matched Message: "
        ]
      }
    ],
    "source.geo.city_name": [
      "Tokyo"
    ],
    "input.type": [
      "httpjson"
    ],
    "client.ip": [
      "xx.xx.xx.xx
    ],
    "data_stream.type": [
      "logs"
    ],
    "tags": [
      "akamai-siem",
      "forwarded"
    ],
    "akamai.siem.policy_id": [
      "fw01-xxx"
    ],
    "url.path": [
      "xxxx"
    ],
    "agent.id": [
      "xxxxx"
    ],
    "client.as.number": [
      xxxx
    ],
    "observer.type": [
      "proxy"
    ],
    "ecs.version": [
      "8.6.0"
    ],
    "event.created": [
      "2023-03-22T03:54:28.894Z"
    ],
    "agent.version": [
      "8.6.2"
    ],
    "event.start": [
      "2023-03-22T03:51:35.000Z"
    ],
    "source.as.number": [
      xxxx
    ],
    "client.geo.continent_name": [
      "Asia"
    ],
    "akamai.siem.config_id": [
      "12345"
    ],
    "akamai.siem.rule_tags": [
      "ase/web_attack/lfi"
    ],
    "source.geo.location": [
      {
        "coordinates": [
          123.6805,
          12.6837
        ],
        "type": "Point"
      }
    ],
    "source.address": [
      "xx.xx.xx.xx"
    ],
    "akamai.siem.response.headers": [
      {
        "Server": "AkamaiGHost",
        "Alt-Svc": "h3=\":443\"; ma=93600",
        "Server-Timing": [
          "cdn-cache; desc=HIT",
          "edge; dur=1",
          "ak_p; desc=\"xxx
        ],
        "Connection": "keep-alive",
        "Pragma": "no-cache",
        "Date": "Wed, 22 Mar 2023 03:51:35 GMT",
        "X-Frame-Options": "SAMEORIGIN",
        "Cache-Control": "no-cache, no-store, must-revalidate",
        "Expires": "0",
        "Mime-Version": "1.0",
        "Content-Length": "305",
        "Content-Type": "text/html"
      }
    ],
    "agent.type": [
      "filebeat"
    ],
    "client.geo.region_name": [
      "Tokyo"
    ],
    "event.module": [
      "akamai"
    ],
    "client.geo.location": [
      {
        "coordinates": [
          123.6805,
          12.6837
        ],
        "type": "Point"
      }
    ],
    "related.ip": [
      "xx.xx.xx.xx"
    ],
    "source.geo.country_iso_code": [
      "JP"
    ],
    "url.port": [
      443
    ],
    "elastic_agent.snapshot": [
      false
    ],
    "url.full": [
      "xxx.com/xx"
    ],
    "source.as.organization.name.text": [
      "xxx"
    ],
    "client.geo.city_name": [
      "Tokyo"
    ],
    "client.geo.region_iso_code": [
      "JP-xx"
    ],
    "elastic_agent.id": [
      "xxxxx"
    ],
    "data_stream.namespace": [
      "default"
    ],
    "source.geo.continent_name": [
      "Asia"
    ],
    "source.as.organization.name": [
      "xxx"
    ],
    "url.full.text": [
      "xxx.com/xx"
    ],
    "event.ingested": [
      "2023-03-22T03:54:30.000Z"
    ],
    "@timestamp": [
      "2023-03-22T03:51:35.000Z"
    ],
    "data_stream.dataset": [
      "akamai.siem"
    ],
    "url.domain": [
      "xxx.com"
    ],
    "agent.ephemeral_id": [
      "xxxxxx"
    ],
    "event.id": [
      "xxxx"
    ],
    "source.geo.country_name": [
      "Japan"
    ],
    "event.dataset": [
      "akamai.siem"
    ]
  },
  "sort": [
    1679457095000
  ]
}
```

## まとめ
今回は、2回にわたりLinode上でElastic Stackの構築及びAkamai Webセキュリティソリューションのイベントログを収集できるSIEM Integrationと連携を行いました。Elastic Stackは非常に高機能なログ分析システムで、Linodeにて構築することで安価に様々なソリューションと連携が可能です。ぜひ自社各種ソリューションとSIEM連携を行い、Linodeを統合ログ分析プラットフォームとして活用していただければと思います。