Splunk Attack Range 3.0をローカルmacOSに構築

# 伝えたいこと

Splunkを使ったログ分析を基本とするサイバーレンジ環境「Splunk Attack Range」が3.0になりローカルで構築しやすくなったので
構築手順と"はまるポイント"の備忘録です。
「buildに失敗したら、１度削除して１からやり直した方が無難です。」

# Splunk Attack Range 3.0

https://github.com/splunk/attack_range/releases

リリースブログ
https://www.splunk.com/en_us/blog/security/attack-range-v3-0.html

v3.0  リリース日：2023/01/13
バージョンアップ機能
- Packerの利用
- Apache Guacamoleの利用
- Crowdstrike FalconとVMware Carbon Black Cloudの統合
- Attack Range LocalをAttack Rangeに全機能を統合
- クラウドプロバイダーからのログを自動的に取り込む Attack Range Cloudを統合
- Attack Rangeを使い始めるのに役立つ独自のドキュメントサイトを作成
- - https://attack-range.readthedocs.io/en/latest

v2.0が2022/07/02 リリースなので、約半年でのバージョンアップです。

**Attack Range LocalをAttack Rangeに全機能を統合**
によりローカル環境でも構築できるようになりました。~~クラウドで構築するのと同じ手順で統一的に構築できるようになりました~~
/packer/フォルダの中を見ると、v3.0.0ではPackerの利用はawsかazureに限られているようです。

# サーバー構成図

![servers.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646242/c3cfe6dc-65d7-5750-a7a8-7ee62a86c07d.png)

Splunkブログ内に貼られていた構築するローカル環境の構成図です。注意しなければならないのは、画像の中のコマンド名がv2.0で古く、今は *attack_range_local.py*ではなく*attack_range.py*、かつ-aオプションも無くなりました。

> 引用: https://www.splunk.com/en_us/blog/security/attack-range-v3-0.html
Attack Range Local Integrated into Attack Range
Previously, we decided to split Attack Range Local into its own GitHub project. Attack Range Local builds an Attack Range on either Virtualbox or VMware Fusion installed on your computer. It leverages Vagrant and Ansible to build and configure it. 
We received a lot of customer feedback that Attack Range Local is very important. Therefore, we decided to integrate the Attack Range Local into Attack Range with all its features. By setting the cloud_provider to local in attack_range.yml, you can build an Attack Range on your local workstation or server.


# 構築手順

今回はmacOS Monterey (12.2) に構築します。
Pythonはv3.9を使っています。

構築手順は以下の公式ドキュメントに準拠します。

https://attack-range.readthedocs.io/en/latest/Attack_Range_Local.html#macos

### 1. ワークスペースとなるフォルダ

例：ワークスペース
/Users/hacket/workspace/SplunkAttackRange/

以下の操作はこのワークスペースを起点にしています。

### 2. 必要なソフトウェアのインストール

virtualboxとvagrantのインストール
```
brew update

brew install --cask virtualbox

brew install --cask vagrant

```

poetryのインストール

```
curl -sSL https://install.python-poetry.org/ | python -

export PATH="/Users/hacket/.local/bin:$PATH

```

### 3. attack_rangeのインストール

ダウンロードと展開
```
wget https://github.com/splunk/attack_range/releases/download/v3.0.0/attack-range-v3.0.0.tar.gz

tar xzvf attack-range-v3.0.0.tar.gz
```

poetryにてインストール
```
mv attack_range-v3.0.0 attack_range
cd attack_range
poetry shell
poetry install
```

### 4. 設定

```
python attack_range.py configure

> continuing with attack_range configuration...

           ________________
         |'-.--._ _________:
         |  /    |  __    __\\
         | |  _  | [\_\= [\_\
         | |.' '. \.........|
         | ( <)  ||:       :|_
          \ '._.' | :.....: |_(o
           '-\_   \ .------./
           _   \   ||.---.||  _
          / \  '-._|/\n~~\n' | \\
         (| []=.--[===[()]===[) |
         <\_/  \_______/ _.' /_/
         ///            (_/_/
         |\\            [\\
         ||:|           | I|
         |::|           | I|
         ||:|           | I|
         ||:|           : \:
         |\:|            \I|
         :/\:            ([])
         ([])             [|
          ||              |\_
         _/_\_            [ -'-.__
    snd <]   \>            \_____.>
          \__/
starting configuration for AT-ST mech walker
    
? select cloud provider local
? enter a master password for your attack_range "YOUR_PASSWORD"
> configuring attack_range settings
> configuring attack_range environment
? shall we build a windows server Yes
? which version should it be 2019
? should the windows server be a domain controller Yes
? should we install red team tools on the windows server Yes
? should we install badblood on the windows server, which will populate the domain with objects Yes
? shall we build another windows server Yes
? which version should it be 2016
? should the windows server join the domain Yes
? should we install red team tools on the windows server Yes
? shall we build a linux server Yes
? shall we include Splunk SOAR No
> configuration file was written to: /Users/hacket/workspace/SplunkAttackRange/attack_range/attack_range.yml, run `python attack_range.py build` to create a new attack_range
you can also edit this file to configure advance parameters
> setup has finished successfully ... exiting
```

SplunkのSOARプロダクト(Phantom)もインストールするかや、サーバーのOSバージョンやドメイン参加について聞かれます。
v3.0.0のローカル構築ではPhantomをbuildしようとすると失敗します。今回は、上記設定のようにphantomなしで行っています。

### 5. 構築

```
python attack_range.py build
```

ネットワーク環境と端末スペックにも依存しますが、1~2時間くらいかかりました。

正常に終了すると
> INFO - attack_range - attack_range has been built using vagrant successfully

がコマンドプロンプトに表示されます。
また、各サーバーの稼働状況とSplunk WebへのURLやWindowsサーバーへのRDPアクセス、Linuxサーバーへのsshアクセス情報が表示されているはずです。

`python attack_range.py show`を実行するたびにその情報は再度表示されますので安心です。


## ハマりポイントとその解決策

### 1. 設定パスワードを複雑に

上記、「4.設定」のコマンドプロンプトでいう、"YOUR_PASSWORD"にあたる部分です。
覚えやすいようにと安易なものを設定しては、構築段階でのWindows ADへのパスワードポリシーを満たせず、パスワードの設定に失敗し、attack_rangeが立ち上がりません。configureで設定する際に、推奨パスワードが表示されるのでその通りにするか、Windows推奨のパスワードポリシーを満たすものにしてください。

### 2. build前に既存のSplunkは停止せよ

8089/tcpを利用している既存サービスがあれば停止しておいてください。
ローカルのattack_rangeがSplunkのREST APIで使用します。
例えばすでにmacOSにインストールしているSplunkなど。

### 3. Vagrantのprivate_networkのIPアドレス範囲制限の解除

>==> ar-phantom-attack-range-key-pair-ar: Clearing any previously set network interfaces...
The IP address configured for the host-only network is not within the
allowed ranges. Please update the address used to be within the allowed
ranges and run the command again.
  Address: 10.0.1.13
  Ranges: 
Valid ranges can be modified in the /etc/vbox/networks.conf file. For
more information including valid format see: https://www.virtualbox.org/manual/ch06.html#network_hostonly

このようなエラーが出てきたら、参照先に習って
/etc/vbox/networks.conf
に設定を入れましょう。
0.0.0.0/0 ::/0　で、範囲制限の解除です。

### 4. 一度 buildを失敗したら１からやり直した方が無難

build途中でエラーになり、失敗した場合、途中までの環境に変更済みのパスワードが登録されてしまっていると、ansible処理が失敗します。

無難なのは、エラー箇所を修正したら一度
 `python attack_range.py destroy`
で既存環境を削除してから、再度
 ```python attack_range.py build```
をすることです。私はこの方法で最終的にうまく行きました。

# まとめ

新しいターミナルで利用する場合は、attack_rangeフォルダ内で`poetry shell`を実行するとpython attack_range.pyが使えるようになります。
あとは攻撃シミュレーションを実行してSplunkに痕跡を残します。
私はAtomicRedTeamが好みです。
https://attack-range.readthedocs.io/en/latest/Attack_Simulation.html


Splunk Attack Rangeを使えば、攻撃シミュレーションした結果がSplunkにログとして残るため検証しやすいメリットがあります。
昨年より更新がされなくなってしまったDetectionLabと違い、Phantom(SOAR)やLinuxサーバーへの攻撃検知などの機能もあり、DetectionLabのリプレイス先としてはちょうどいいかもしれません。
私は個人用のPhantomのコミュニティライセンスを持ってなかったので申請したのですが、三週間ほどでSplunk社から無償ライセンスをいただけました。

以上です。ご一読ありがとうございました。