Windows EventlogをS3に自動で格納する(PS1編)

こんにちは。
株式会社クラスアクト インフラストラクチャ事業部の大塚です。

最近SBD（Security By Design）の要件を満たすために色々苦労をしています。その業務の中で学んだことを忘れないようにするために簡単にアウトプットしていこうと思います。

# 用語
## SBD
Security By Desigeの略
セキュリティ・バイ・デザイン（Security by Design/SBD）、またはセキュア・バイ・デザイン（Secure by Design）とは、システム開発のライフサイクルにおいて、企画・設計段階からセキュリティ対策を意識して実装すること、またその概念。

https://www.scsk.jp/sp/itpnavi/glossary/sa_line/sa_line_se/securitybydesign.html#:~:text=セキュリティ・バイ・デザイン（Security,すること、またその概念。

以下ChatGPTよりアウトプットを受けました。Security as an Afterthoughtって聞いたことないのですが、、、一般的なんでしょうか？

>旧来のシステム開発ではセキュリティが後回しにされることが一般的でした。このアプローチは「セキュリティ後付け」（Security as an Afterthought）とも呼ばれます。
>
>限定的なリスク評価:
プロジェクトの後半で行われるセキュリティリスクの評価は、既に実装されたシステムを基にしているため、根本的な設計変更が難しくなる。
>
>不完全なセキュリティテスト:
開発後期に行われるセキュリティテストは、時間やリソースの制約が厳しく、包括的なテストが行えないことがある。
>
>高コストと手間:
後からセキュリティを追加する場合、既存のコードや設計に大きな変更を加える必要があり、開発コストや手間が増大する。
>
>セキュリティ教育の不足:
>開発チームがセキュリティに関する知識や意識を十分に持たないまま開発が進められるため、脆弱性が残る可能性が高い。

## Windows Eventlog

https://e-words.jp/w/%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%83%AD%E3%82%B0.html

EventLogには以下の種類があります。今回はアプリケーションログ、システムログ、セキュリティログを扱っていきます。

- **アプリケーションログ**：アプリケーションやプログラムが記録するイベントが含まれます。
- **システムログ**：Windowsオペレーティングシステムによって記録されるイベントが含まれます。
- **セキュリティログ**：セキュリティ関連のイベント（ログイン成功、失敗など）が含まれます。
- **セットアップログ**：Windowsのインストールやアップグレードに関するイベントが含まれます。
- **フォワードイベントログ**：他のコンピュータから転送されたイベントが含まれます。

# 環境イメージ
かなり簡単ですが、以下環境を作っていきます。
今回はPS1を使ってS3バケットにEventlogを保管していきますので、そのためにEC2にAWS CLIをダウンロードしていきます。また、S3へアクセスするためのIAM Roleを作成、アタッチしていきます。S3に対してのログアップロードは定期実行していきます。
※このようなEventlogをS3に退避する方法として、他にもCloudWatch Logsを使う事も出来るようです。この辺りについては今後設定方法を確認していきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/7862bdf5-466a-e226-cce9-8fb728c7272f.png)

# 構築
## EC2作成
以下の構成でWindows Serverをデプロイしていきます。
![00002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/ffbb8dc6-d948-96a3-0bdb-1281c264fa2b.png)
デプロイできましたら、画面右上の接続を押下します。
![00003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/f8279882-4609-3b58-f976-922e87913ca5.png)
RDPクライアントのタブを押下して、RDPファイルのダウンロードします。またこちらでRDP用のパスワードを入手します。
具体的な手順は端折ります。
![00004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/73621732-7310-380b-51f6-190e04a2fb0d.png)
RDP出来ることを確認します。
![00005.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/f3ca938f-73e0-0199-d4d2-eb99e74b3f95.png)

## AWS CLI導入
任意のWebブラウザ（Edgeが入っていますのでこれで良いかと思います）で以下にアクセスしてcliインストーラをダウンロードします。ダウンロード後ダブルクリックで実行します。

https://awscli.amazonaws.com/AWSCLIV2.msi

Wizardは特に気にせずにどんどん進めていきます。
![00006.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/1589d8a6-0d6d-810f-d124-a3ea25a2bba6.png)
![00007.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/ac8079b1-e9f2-d0c9-6c14-4bb0b8462702.png)
![00008.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/ff6fcdae-4495-4a85-35f4-27e2876c660f.png)
![00009.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/749690df-9695-45c5-d1c8-a635219aaae7.png)
![00010.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/27feb9b8-3ded-d371-4b77-b8c499fe515b.png)
powershell及びcmdでawsコマンドを実行してみます。
出力があれば正常にインストールされています。
![00011.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/bb683808-76a7-b2cb-baf9-5a25d444bc50.png)

## S3作成
任意のバケット名を決めて作成します。基本デフォルトの設定で問題ないかと思います。
![00012.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/d60673c5-6aa0-a490-89bd-6fe364e66cba.png)
作成したS3にフォルダを切ります。
![00013.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/42a6a515-2736-7da4-e3ae-adfb4d075290.png)

## IAM Role作成
IAMの管理画面を開き、ロール作成を押下します。
![00014.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/e7ae005d-9b6a-5f16-28ba-5222ef46f71b.png)
AWSサービスを押下し、EC2を選択します。
![00015.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/b352bd15-6735-8a3f-44bd-935e6fba66bd.png)
S3に対してのアクセス権を与えたいため、今回はガバガバですがFullAccessを選択します。
![00016.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/3f74712d-27cd-732f-e798-5f28e92a36a9.png)
Roleの名前を入力して作成していきます。
作成したものをEC2にアタッチしましょう。
![00017.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/8aa5b55a-fbb4-0471-ec0a-7acd0de55a5c.png)
Windows Serverにアクセスしてpowershell上でaws s3 lsコマンドを実行して自分のs3バケットが表示されればOKです。
![00019.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/d6769c86-db19-c009-62a8-664b3e997d74.png)

## PS1,task scheduler作成
以下の内容のPS1ファイルを作成しました。
今回はC:\Users\Administrator\Documentsにeventlog_backup_s3.ps1というファイルで作成しました。
```eventlog_backup_s3.ps1
# AWS S3 bucket name
$bucketName = "win-eventlog-s3"

# Current date and time in YYYYMMDD_HHmm format
$date = (Get-Date).ToString("yyyyMMdd_HHmm")

# Log file paths
$ApplicationLog = "C:\Windows\System32\winevt\Logs\Application.evtx"
$SystemLog = "C:\Windows\System32\winevt\Logs\System.evtx"
$SecurityLog = "C:\Windows\System32\winevt\Logs\Security.evtx"

# Destination file paths with date and time
$ApplicationLogDest = "C:\Users\Administrator\Documents\$date`_Application.evtx"
$SystemLogDest = "C:\Users\Administrator\Documents\$date`_System.evtx"
$SecurityLogDest = "C:\Users\Administrator\Documents\$date`_Security.evtx"

# Copy logs to new location with date and time
Copy-Item -Path $ApplicationLog -Destination $ApplicationLogDest
Copy-Item -Path $SystemLog -Destination $SystemLogDest
Copy-Item -Path $SecurityLog -Destination $SecurityLogDest

# Clear the original logs
wevtutil cl Application
wevtutil cl System
wevtutil cl Security

# Output the paths to check correctness
Write-Output "Copied and renamed Application Log to $ApplicationLogDest"
Write-Output "Copied and renamed System Log to $SystemLogDest"
Write-Output "Copied and renamed Security Log to $SecurityLogDest"

# (Optional) Upload the copied files to S3 using AWS CLI
aws s3 mv $ApplicationLogDest s3://$bucketName/Application/$date`_Application.evtx
aws s3 mv $SystemLogDest s3://$bucketName/System/$date`_System.evtx
aws s3 mv $SecurityLogDest s3://$bucketName/Security/$date`_Security.evtx

Write-Output "Uploaded Application Log to S3: s3://$bucketName/Application/$date`_Application.evtx"
Write-Output "Uploaded System Log to S3: s3://$bucketName/System/$date`_System.evtx"
Write-Output "Uploaded Security Log to S3: s3://$bucketName/Security/$date`_Security.evtx"
```
task schedulerを起動します。LibraryからCreate Basic Taskを押下します。
![00020.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/1e5868d3-2c83-c4d0-9a2a-906be6a09294.png)
taskの名前と説明を記入します。今回はeventlog_backup_to_s3としました。
![00021.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/6d752a2a-4381-a40c-8bd1-1bba01dfe0bb.png)
One Timeを選択します。
![00022.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/30fba0a5-60cf-e1a4-c4c9-50cf30307000.png)
これはデフォルトのままで行きます。
![00023.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/64dcc18f-040a-60be-c8ad-109eeaddf062.png)
Start a programを選択します。
![00024.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/a8a9bc5b-5be5-b2fc-6bbc-b10cc1dcbc04.png)
Program/Scriptに対してpowershell.exeと入力しておきます。
またAdd argumentsに”ExecutionPolicy Bypass -File "C:\Users\Administrator\Documents\eventlog_backup_s3.ps1"と入力します。作成したPS1を実行してくださいと命令している形となります。
![00025.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/e0ed3596-e9d4-8023-620a-f7a25d1dc2ec.png)
最終確認してFinishを押下します。
![00026.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/30d337b3-599c-1947-b23c-904eb6d6cb64.png)
今の設定のままでは定期実行されないので、そのための設定をしていきます。作成されたtaskを選択してPropertiesを押下します。
![00027.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/f140aa5f-d2d8-f47b-2153-a32b7fb25b2d.png)
TriggersのタブからOne Timeと記載されているものを選択しEditを押下。Repeat task everyで10分を選択。
duration ofにindefinitelyを選択します。こうすることで10分間隔ごとにtaskを実行し、S3にlogをアップロードするようになります。
![00028.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/0355806e-28ec-4bb5-5a4a-ffdcec5bc326.png)
![00029.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/a47f4608-25a1-3a71-9016-7b94815bcd6f.png)
S3バケットにlogがアップロードされていれば正常に設定完了です。
![00030.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/b8247c16-e2ea-7f2e-ae31-ffc9a38aed8c.png)
![00031.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/749f766a-b08b-751b-a3b6-4965aa30157e.png)
![00032.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/dd4e4fec-c205-9238-b0b4-e8b2f1d65353.png)