Boss of the SOC のはじめかた (Splunk)

はじめに

研究でSplunkを使ってログ解析をする機会があったので, たまたま見つけたBoss of the SOCというSplunkが無料で提供しているコンテンツをやろうと思いました. しかし, 日本語で検索するもほぼドキュメントがなく渋々本家のドキュメントを見て何度も詰まりながらなんとかセルフ開催CTFするところまでできたので, まとめておきます.

今回はmacOSへのインストールを行いましたが, 他の環境でもSplunkのインストール以外ではほぼ差異はないと思います(思います).

僕も英語が得意なわけではないので, 間違ったことを書いていたら, コメントなどでご教示いただければと思います.

目次

Boss of the SOC とは

BOSS OF THE SOC (BOTS) 1.0によると, ジョパディ形式のSplunkを使って行うCTFで, リアルだけど実在しない企業に起きたインシデントに対する問題に答えるものらしいです. また, もともとはカンファレンスで行われていたこのCTFをオープンソースにして, データセットにも無料でアクセスできるし, 自前でCTFプラットフォームもデプロイできるようにしたものらしいです.

CTFプラットフォームは結構簡単にデプロイできたし, 問題やヒントの追加もcsvに書き足すだけなので, 勉強会でも簡単に使えそうなどと考えながらセットアップをしていました. ただし, 今回の記事では, 一人でセルフ開催CTFするところまでしか書かないので, 実際に勉強会などをやろうとしたらユーザーの権限まわりの設定や, コンテストの開催時間の設定などを追加で行う必要があります.

また, BOTSは1.0(2016)と2.0(2017)が現在利用できるようですが, 今回は1.0のほうを使っていきます.

Splunk Enterpriseのインストール

これについては, いくらでも記事があるためそちらを参照いただければと思います. 今回, 僕が使ったのはSplunk Enterpriseで, 下記からダウンロードできるかと思います.

無料トライアルでSplunkのSIEMを体感

以下, めちゃくちゃ適当に見つけたインストールの記事を記載しておきます.

依存App/Add-Onのインストール

データセットをインポートする前に, 依存App/Add-Onのインストールを行います. (今回はtgzファイルをいちいちダウンロードしていちいちアップロードしてインストールしましたがもっと良い方法があれば教えて下さい..)

以下, App/Add-Onのインストール手順です.

1. Splunkのホーム画面左のAppバーの右にある歯車ボタンをクリックする.

2. Appの管理画面に遷移するので,画面右上にあるファイルからAppをインストールをクリックする.

3. 下記表のURLにアクセスし, 画面右のDownloadをクリックする.

4. 2つのチェックボックスにチェックを入れ, Agree to DownloadをクリックしてAppファイルをダウンロードする.

5. ダウンロードしたtgzファイルを選択しアップロードをクリックする.

6. 再起動が必要です的なことが言われたらすぐに再起動をする

  • ここで再起動をせずに他のAppのインストールを続けると, Splunkがクラッシュする可能性があります.
  • クラッシュしてしまうと, 500エラーでログインすらできなくなってしまいます.
  • ぼくがクラッシュさせてしまったときには, rm -rf /Applications/Splunkで一度Splunk自体を削除してもう一度インストールしました.

クラッシュさせるとめんどくさいので, 気をつけてインストールを行ってください. (間違ってもぼくのように, めんどくさいからまとめてやればええやろ!!などといって再起動を怠らないこと.)

ソースの表では, Splunk Stream Add-onに併せて, Splunk App for Streamがありますが, 同じApp(同じURL)なので, ここでは略記させていただいています. 実際にインストールするときも, 1回だけインストールすれば大丈夫です.

App / Add-on Version Download
Fortinet Fortigate Add-on for Splunk 1.3 https://splunkbase.splunk.com/app/2846
Splunk Add-on for Tenable 5.0.0 https://splunkbase.splunk.com/app/1710/
Splunk Stream Add-on / Splunk App for Stream(Note Stream 6.6.1 is no longer available. Use Version 7.1.1 instead.) 6.6.1 https://splunkbase.splunk.com/app/1809/
Splunk Add-on for Microsoft Windows 4.8.3 https://splunkbase.splunk.com/app/742/
TA-Suricata 2.3 https://splunkbase.splunk.com/app/2760/
Microsoft Sysmon Add-on 3.2.3 https://splunkbase.splunk.com/app/1914/
URL Toolbox 1.6 https://splunkbase.splunk.com/app/2734/

データセットのダウンロードとインポート

データセットのダウンロードとインポートには若干時間がかかってしまうため, 最初の方にしておきます.

BOTS1.0のデータセットにはbotsv1_data_set.tgz (6.1GB compressed)と, botsv1-attack-only.tgz(135MB compressed)の2つがあります. 後者(以降,フルデータとよぶ)は攻撃のログだけを含むデータセットで, 135MBと非常に小さくなっています. 前者(以降,攻撃データとよぶ)は攻撃以外のログも含むデータセットで, 圧縮した状態でも6.1GBと非常に大きいデータセットになっています.

しかし, 無料枠では1日に500MBまでのデータしかインポートできません. 今回は, 無料枠ということもあり, 攻撃データの小さい方を使って進めていきます. (ちなみに, 公式によれば月に3回までは制限を超えても大丈夫らしいです.)

攻撃データのダウンロードとインポート手順は以下の通りです.

1. botsv1-attack-only.tgz(135MB compressed)からデータをダウンロードする.

2. Splunkのホーム画面左のAppバーの右にある歯車ボタンをクリックする.

3. Appの管理画面に遷移するので,画面右上にあるファイルからAppをインストールをクリックする.

4. Appのアップロード画面に遷移するので,画面中央にあるファイルを選択でダウンロードしたbotsv1-attack-only.tgzをアップロードする.

5. Appの管理画面に遷移して, 画面上部に「Splunk Boss of the SOC (BOTS) Version 1 Data Set」は正常にインストールされましたと表示されていれば, アップロードが正常に完了.

アップロードが正常に完了したら, 下記の手順でデータを確かめる.

1. Appの管理画面左上の, splunk>enterpriseロゴの右隣にあるAppプルダウンをクリックして, Search&Reportingをクリックする.

Search&Reportingを開く
Search&Reportingを開く

2. Search&Reporting Appの新規サーチ画面に遷移するので, 次のようなコマンドを打ち込む.

index=botsv1 earliest=0

3. コマンドを打ち込んだフォームの右にある過去24時間と書いてあるプルダウンをクリックして,全時間をクリックする.

4. 検索ボタン(虫眼鏡アイコン)をクリックし, 次のような画面が表示されることを確かめる.

データの確認
データの確認

CTFデータへのアクセスのための登録

BOTSのデータは基本的に無料でアクセスができます. ただし, データセット本体についてはgithubで簡単にアクセスできるのに対して, CTFの問題と回答,ヒントなどのデータについては別途登録を行う必要があります. そのため, ここでは登録方法について説明します.

登録なんてこんなん見なくてもできるだろ!なんて声が聞こえてきそうですが詰まったポイント(笑)があったので書き残しておきます.

手順は下記の通りです.

1. BOSS OF THE SOC (BOTS) 1.0にアクセスする.

2. 下記画像の右側のフォームを埋める.

BOTS登録画面
BOTS登録画面

3. State: * Zip Code: *のフォームにマウスをフォーカスして右クリックし,「検証」をクリックしてHTMLのソースコードを表示する.

ソースコード表示方法
State: * Zip Code: *のソースコード表示方法

4. <select name="stateOrProvince" class="form-control" style="display: none;">を探す(PostalCodeのフォームの上あたりにあります).

stateOrProvinceを探す
stateOrProvinceを探す

5. display:none;を2回クリックして消す.

6. Countryのフォームの下にStateフォームが現れるので,Non-US/Canadaを選択する.

Stateフォームが姿を表す
Stateフォームが姿を表す

7. その他の入力が済んでいたら, Submitを押して登録を完了する.

登録が完了したらメールでteamsplunk@splunk.comからCTFの問題と回答,ヒントなどを含むGoogle Driveのリンクが送られてきます. これらのファイルは後で使うので, 必ず送られてきていることを確認してください.

ちなみに, Stateフォームに値を入力せずに登録しようとすると次のような画面(笑)になってしまいます. ぼくはこれで小一時間悩んだ結果このやり方にたどり着きました...ショッパナからBOTSをはじめるハードルが高い... もしかしたらちゃんとした登録方法があるのかも..?

Stateフォームを入力しなかったときのエラー画面
Stateフォームを入力しなかったときのエラー画面

CTFプラットフォームAppのインストール

いよいよCTFをセルフ開催していきます. SA-ctf_scoreboardのREADMEを見てみると, 次のような機能が使えて, BOTSでなくても簡単にSplunkを利用したCTFが開催できそうです.

  • User/Team management
  • Scoring management
  • Question/Answer management
  • Hint management
  • Comprehensive scoreboards, dashboards, and analytics

基本的にはREADMEに則ってSA-ctf_scoreboardをインストールしていきます. ただしここでも少し詰まるポイントがあるので, しっかり説明をしていきます.

インストールの手順は以下の通りです.

1. 環境変数$SPLUNK_HOMEを以下の手順で設定する(macOS).

  • ~/.bash_profileなどに次を追加する.
export SPLUNK_HOME="/Applications/Splunk"
  • source ~/.bash_profile環境変数を設定する.
  • macOS以外でも, 同様にしてSplunkのインストール先を環境変数に保存する.

2. 下記の4つのAppを依存App/Add-Onのインストールと同様にしてインストールする.

3. 次のコマンドで, CTF Scoreboard appをインストールする.

cd $SPLUNK_HOME/etc/apps
git clone https://github.com/splunk/SA-ctf_scoreboard

4. 次のコマンドで, CTF Scoreboard Admin appをインストールする.

cd $SPLUNK_HOME/etc/apps
git clone https://github.com/splunk/SA-ctf_scoreboard_admin

5. 次のコマンドで, Splunkを再起動する.

$SPLUNK_HOME/bin/splunk restart

6. 次のコマンドでスコアボードのログのためのディレクトリを作成する.

mkdir $SPLUNK_HOME/var/log/scoreboard

7. Splunkのホーム画面にアクセスすると, AppバーにCapture the Flagと, Capture the Flag Adminが追加されていることを確認する.

8. 次の手順でメインユーザをctfのadminとして設定する.

  1. Splunkのホーム画面右上の設定プルダウンをクリックし, アクセス制御をクリックする.
    アクセス制御
    アクセス制御
  2. アクセス制御画面に遷移するので, ユーザーをクリックする.
  3. 普段ログインするユーザーのアクションカラムにある編集をクリックする.
  4. ロールに割り当て利用可能アイテムから次の3つをクリックして選択済みアイテムに追加する.
    • can_delete
    • ctf_admin
    • ctf_answer_service
  5. ここで, ctf_competitorを選択してしまうと, 後々CTFの問題に回答できなくなってしまうため注意が必要.

9. 次の手順でカスタムコントローラーを作成し, 設定を書き込む.

  1. 下記のコマンドでexampleからカスタムコントローラーをコピーする.
cd $SPLUNK_HOME/etc/apps/SA-ctf_scoreboard/appserver/controllers
cp scoreboard_controller.config.example scoreboard_controller.config
  1. カスタムコントローラーに適当な値を設定する(設定時[]は必要なし)
[ScoreboardController]
USER = [先程設定したユーザー名]
PASS = [先程設定したユーザーのログインパスワード]
VKEY = [10-20文字のランダムな文字列(なんでもいい)]

10. 次のコマンドで, Splunkを再起動する.

$SPLUNK_HOME/bin/splunk restart

11. BOTS1.0の問題/解答/ヒントを以下の手順で読み込む.

ここで, 本家インストール手順の13番目(Load sample data)をしてしまうと, サンプルデータとBOTS1.0の問題番号がコリジョンしてしまい, 正しいFlagがCorrectしなくなってしまうので注意が必要.

  1. CTFデータへのアクセスのための登録で登録したメールアドレスに送られてきたメールに記載されているGoogle Driveのリンク(BOTS v1: Access here)からBOTS1.0のCTFデータをダウンロードする.
  2. ダウンロードしたbotsv1content.zipを展開するとctf_{questions,answers,hints}.csvの3つが得られる.
  3. Splunkのホーム画面左のAppバーにあるCapture the Flag Adminをクリックする.
  4. Capture the Flag Admin Appの管理画面に遷移するので, 画面上部のバー左側にあるEdit...プルダウンをクリックし, Edit Questionsをクリックする.
  5. Lookup Editor AppのLookups / ctf_questions画面に遷移するので, 画面右上のImportボタンをクリックする.
  6. Import Fileダイアログが表示されるので, Select file to importボタンをクリックして, 先程展開したctf_questions.csvを選択してインポートする.
  7. 同様の手順で, Capture the Flag Admin AppのEditプルダウンの, Edit AnswersおよびEdit Hintsからctf_answers.csvctf_hints.csvをそれぞれインポートする.

12. Agreementのサンプルデータを下記の手順でロードする

  • Splunkのホーム画面左のAppバーにあるCapture the Flag Adminをクリックする.
  • Capture the Flag Admin Appの管理画面に遷移するので, 画面上部のバー左側にあるData Management...プルダウンのLoad SAMPLE Data (DANGER)...をクリックし, Load sample User Agreementをクリックする. (DANGERとあるのは, CTF競技中にこれをやると, データが上書きされてしまうためであり, 最初にやる事自体はなんらDANGERではないとのこと)

Let's play CTF!

以上で, CTFプラットフォームおよびデータセットの準備が完了したので, 実際に1問だけ動作を確認してみます. 以下の手順で, 実際にCTFをプレイしていきます.

1. Splunkのホーム画面左のAppバーにあるCapture the Flagをクリックする.

2. Capture the Flag AppのWelcome画面に遷移するので, 画面左中央にあるUser AgreementのView/Acceptボタンをクリックする.

3. 先程ロードしたSampleのUser Agreementが表示されるので, ダイアログ右下のAccept Agreementをクリックする.

4. WelcomeページのYour Event Details直下にある表のUser Agreement欄がAcceptedになったことを確認する.

5. Capture the Flag Appの上部バーのQuestionsをクリックする.

6. Number 1の問題をクリックする.

7. This is a simple question to get you familiar with submitting answers. What is the name of the company that makes the software that you are using for this competition? Just a six-letter word with no punctuation.とのことなので, Answerフォームにsplunkと入力する.

8. 下記画面が表示されれば, CTFは正常にプレイできる.

Correct画面
Correct画面

おわりに

今回は, SplunkとIncident Response的なsomethingを同時に学べる一石二鳥なBoss of the SOCというオープンソースCTFのはじめかたを解説しました.

このように, 1から順序立ててはじめかたを説明されたドキュメントは日本語はおろか, 英語の公式ドキュメントでも情報がバラバラと散らばっており, かなりとっつきにくい状況でした. 実際, 公式ドキュメントを読み進めていく中でも何度もつまづくポイントがあり, せっかくかなり良いコンテンツなのに, 環境構築でつまづいて実際に遊べないというのはもったいないなと思い, 今回記事におこすにいたりました.

ぼくはSplunkの第一人者でもなければ, 一般ユーザーにも及ばない初心者ですが, この記事をみて, BOTSのデータセットおよびCTFに触れたことがない人の, このコンテンツをはじめるきっかけ, あるいははじめる手助けになればと思います.

なにか間違いや, 他に詰まったポイントがあれば気軽にコメントやTwitter等でお知らせいただけると幸いです.