セキュリティインシデント体験ツール「ZANSIN」の構築方法と使ってみた感想

はじめに

はじめにNTT西日本の長谷川です。
本記事では、セキュリティ業界の有志で運営している「MINI Hardening」というコミュニティのメンバーにより開発された、サイバー攻撃を想定したインシデント・レスポンスを体験するためのトレーニングツール「ZANSIN」の体験談と自身で環境を構築する際の手順と注意点をまとめています。
※Hardening とは情報セキュリティ分野においてセキュリティ強化演習を指す用語です。

出典:ZANSIN(GitHub)https://github.com/ZANSIN-sec/ZANSIN

セキュリティの勉強をすすめていると、よく攻撃手法やその脅威をテキストとして見ることはありますが、座学だけではその動きや脅威はあまり実感できません。
このZANSINはそれを体験できるツールですので、セキュリティのスキル強化やセキュリティ対策の重要性を理解し、スキルアップに役立てるべく紹介していきます。

  • トレーニング環境はローカル環境やプライベートゾーンなど外部から悪用されない安全な環境で構築してください。
  • 許可なくインターネットサイトを攻撃することは法律(不正アクセス禁止法等)に抵触する行為となるため、絶対に行わないでください。

この「ZANSIN」を用いて以下の習得が期待できます。

  • 実践的なセキュリティ強化スキル
  • 脆弱性をついた攻撃とその対策方法
  • セキュリティ対策の重要性

本ツールは体験・トレーニングツールとして公開されているため、初級~中級を主なターゲットにしています。

対象読者

本記事が想定する対象読者は以下の通りです。

  • サーバーのセキュリティ対策に興味があり、そのスキルを伸ばしたい方
  • サイバーセキュリティ対策の腕試しをしたい方
  • サイバーセキュリティ対策の実践力を鍛えたい方

目次


1.背景

セキュリティの勉強を進めていくと、さまざまな攻撃や脆弱性について語られることがありますが机上では学べないものが多く、以下のように悩むことがあります。

  • 実際に脆弱性をついた攻撃などを体験する機会がない。
  • 脆弱性を確認するにも環境構築からが大変。
  • 実践的なスキルを身につける環境が欲しい。

私自身も、頭では理解しているつもりでも「実際に何が起きるのか」が結び付かず、もどかしさを感じていました。
このような悩みを持つ方も多いのではないでしょうか?
こういった机上では学べないことを実際に体験してみましょう。


2.ZANSIN利用の目的

2-1. 実践的なセキュリティ強化の習得

ZANSIN は Ubuntu®で構築されたControlサーバーとTrainingサーバーの2台で構成され、Trainingサーバーには「MINI QUEST」というWeb ゲームが稼働しています。

ControlサーバーはTrainingサーバーに対してサイバー攻撃を行います。

出典:ZANSIN(GitHub)https://github.com/ZANSIN-sec/ZANSIN

利用者はTrainingサーバーに潜む脆弱性を特定し、対策を施していくことでサイバー攻撃や不正行為に対して迅速かつ効果的な対応スキルを体験的に学ぶことができます。

実行される攻撃例

  • 不正ログイン
  • バックドア設置
  • ゲームサービス妨害
  • ゲームのチート行為

これらの攻撃に対する対策を通してセキュリティ対策スキルを養っていきます。
トレーニングの性質上どういった攻撃が実行されるかは明示しませんが、よく耳にする攻撃からの対策方法を学ぶことができます。
(あくまで防御について学ぶトレーニングツールであり、攻撃手法が学べるものではありません)

ZANSINはあえて複数の脆弱性を含んだシステムを用意し、攻撃を受けながら守り方を学ぶという設計思想となっています。

実運用では本来避けるべき構成や設定も含まれていますが、それらを「なぜ危険か」「どう検知し、どう是正するか」を体験的に理解することを目的としています。
※ZANSINは教育目的専用のツールです。実際の本番システムへの攻撃に応用することは法律で禁止されています(不正アクセス禁止法等)

2-2. 脅威モデリングと対策検討

事前資料から潜在的な脆弱性の洗い出し、攻撃シナリオの想定を行うことでセキュリティ設計の基本も体験できます。
ぶっつけ本番でおこなって体験するのもいいですが、効果的なトレーニングにするためにはしっかり事前準備するとより効果が得られます。

2-3.ZANSINのトレーニングシナリオ

ZANSINは以下の指示に従ったトレーニングを行います。

  • Ubuntuで構築されたゲームサーバー(Trainingサーバー)が公開されましたが、脆弱性を含んでいるようです。
  • ゲームサーバー(Trainingサーバー)にはMINI QUESTと呼ばれるブラウザゲームが稼働しています。
  • ゲームサーバー(Trainingサーバー)がサイバー攻撃にさらされています。サイバー攻撃に対応しシステムを保護してください。
  • 稼働しているMINI QUESTをチート行為から守ってください。
  • トレーニング時間(240min)の間に多様な攻撃が行われます。どの程度脆弱性が修正されたかで評価します。

2-4.ゲームサーバー(Trainingサーバー)の構成

ゲームサーバーにはUbuntu上に構築されたNGINX®、MySQL®、Redis®、Docker®で動作しており、構成は概略として以下となっています。

出典:ZANSIN(GitHub)https://github.com/ZANSIN-sec/ZANSIN

このゲームサーバには多くの脆弱性が潜んでいます。
トレーニングを受けるユーザーはこの構成図と配布されるGAME API設計書から脆弱性の予測と洗い出しを行い、トレーニングに挑みます。

2-5.トレーニング例

トレーニングに影響が出るといけないので、多くは書けませんが、 実際にどのような攻撃が行われるか一つの例をあげてみます。

Trainingサーバーにはいくつかの脆弱性があります。
その中の一つに脆弱なパスワードを使っているユーザーがいます。 それを放置しているとパスワードを推測されて不正ログインされた結果、管理者権限を奪われ、バックドアとなる不正ユーザーが作成されます。(不正ユーザーが作成される経路は複数用意されています)

ログなどから不審なユーザーが登録されていることを見つけることができれば、その後バックドア経由での攻撃を防げるかもしれません。

他にもセキュリティを勉強しているとよく目にするいろいろな攻撃が仕掛けられます。
ログや配布資料をもとに攻撃を特定し対策をしていきます。


3.ZANSINを使ったトレーニングイベントに参加してみて

実際に私もZANSINを使ったトレーニングイベントに参加してみました。

3-1.チームでのトレーニング

トレーニングイベントでは参加者は4~5人のチームに割り振られました。
チームごとに提供された事前情報をもとにサーバーを防御するというものでした。 このときはZANSINというものは知っていたので、実際に体験するいい機会でした。

イベントでは初対面同士でチームが構成されてトレーニングに臨みました。
写真:社内で実施したトレーニングイベントの様子

トレーニング実施前の準備時間に、与えられた情報から簡単に以下の役割を決めました。

  • 全体管理
  • ログ等からの分析
  • 実際の改修、修復

3-2.実際のトレーニング結果

実際にトレーニングを行った結果はボロボロでした。 (普段から専門的にセキュリティ対策に携わっていないと初見ではかなりやられると思います)

ですが、今まで机上でしか知ることがなかった攻撃が目の前で実行されます。
それをログなどから追いかけ対策を講じていくというのは非常に多くの学びがありました。
紹介していたようにWeb ゲームが動いていますが、どうしようもなく破壊されたときには頭を抱えるほどでした。

3-3.トレーニングを受けて感じたこと

実践的な経験を通じたトレーニングの有効性を改めて実感しました。

私は即席のチームでイベントに臨みましたが、いろいろな対応が必要になるためチームビルディングの重要性を感じました。
トレーニングに挑む際には以下にあげたような役割を決めて挑むほうが、慌てず対処できると思います。

  • 全体管理
  • ログ分析(攻撃監視)
  • 対策(スクリプト・設定修正)

ZANSINは公開されているので、自身で環境構築をすればこのトレーニングを通してスキルの向上に役立てられそうです。
実際、1回ですべて対策できるとはとても思えないくらい多様な攻撃が行われます。
繰り返しトレーニングしてスキルを高めていきたいと思わせるツールです。


4.ZANSINの構築方法

自身でトレーニングをするためのZANSINを構築していきます。
ZANSINはUbuntu Serverで動作しますが、ControlサーバーとTrainingサーバーの2台が必要になります。
ZANSINの要求スペックは低いのでローカル環境でも十分構築できると思います。
Ubuntu Serverは20.04以上が必要とされており、22.04までは正常にインストールできることが確認されています。
24.xではインストールスクリプトを修正すればインストールが可能とコミュニティへの報告もありますが、22.04で構築することをお勧めします。

4-1.要求スペック

それぞれのサーバーに必要とされる最低スペックは以下のとおりとなっています。

コア数 メモリ 記憶域
Controlサーバー 1 2GB 30GB
Trainingサーバー 1 2GB 30GB
  • 記憶域は30GBとなっていますが、実際は10GB程度しか使っていないことを私の環境(Ubuntu 22.04, 2026年3月時点)で確認しているため、節約したい場合は20GB程度でも動作します。
  • メモリは2GBとなっていますが、1GB以上のSWAPがあればメモリは1GBでも動作します。

4-2.構築場所

ZANSINが要求するスペックは高くありません。 古いPCを2台用意する方法もありますが、仮想環境を用意して構築するほうが現実的かもしれません。
AWS®やAzure®といったクラウド環境であれば手軽に構築を始められるかわりにローカル環境の構築より手順が多くなっています。
クラウド環境構築に必要な追加手順や外部から悪用されないセキュリティ設定などに不安があるのであれば、ローカル環境でHyper-V®やVirtualBox®などを用いるほうが手軽に構築できます。
(ローカル環境構築の場合も外部ネットワークに公開しないなどのセキュリティを考慮した設定は行ってください。)

※クラウド環境の場合いくつかの追加モジュールが初期インストールされていないため、手動追加する必要があります。
(”4-4.クラウド環境(AWSやAzure)におけるZANSIN事前設定”や”4-5.ZANSIN構築手順”の手順5~6が必要)

4-3.ローカル環境におけるOS構築手順(Controlサーバー、Trainingサーバーで共通)

※クラウド環境は、Ubuntuの22.x系を選択し、4-4項を実施。

以下にインストール時のパラメータを示す。
Controlサーバー、Trainingサーバー用に2台用意し、同じ設定で構築する。
インストール手順については公式ドキュメント等を参照してください。

項目 備考
OS Ubuntu Server 22.x インストールメディア・iso等
インストールタイプ Ubuntu Server(minimized) 両サーバー共通
Profile:Your name zansin 両サーバー共通
Profile:Your servers name 例:ControlServer、TrainingServer 運用上わかりやすい名前を任意で設定
Profile:Pick username zansin 両サーバー共通
Profile:Choose a password 任意のパスワード 両サーバー共通
SSH設定 チェック 利用できるようチェックする

ローカル環境で構築する場合、トレーニング受講者のみがアクセスできる安全なプライベートネットワークにControlサーバー、Trainingサーバーを構築してください。

4-4.クラウド環境におけるZANSIN事前設定(AWS&Azureのみ実施)

AWSやAzureを利用した場合の追加となる事前設定。
(Hyper-VやVirtualBox等ローカル環境で構築の場合は不要)

この設定を行わないとAWSやAzureではインストールスクリプトが正常に終了しなかったり、トレーニングが正常に行えないため、必ず実施する。
自分でOSからインストールする場合は不要。

1.ネットワークセキュリティ設定(トレーニング用途限定

トレーニングに必要な以下のネットワーク通信を許可する。

プロトコル ポート
TCP 5555
TCP 3000
TCP 22
TCP 6379
TCP 80
TCP 3306
TCP 443
TCP 2375
ICMP (推奨)

これらのポートへの接続ができなければ、正常なトレーニングが行えないため、トレーニング環境に限定して通信を許可すること。

※これらのポートはトレーニング用途で解放するもので、そのままでは脆弱性につながるものがあります。
※本番環境では解放するポートについては用途を確認し十分注意して解放すること。
※特にTCP:2375の解放は本番環境では注意すること。

勘の鋭い人はここからどんな攻撃が行われるか予測できるかもしれませんね。

クラウド環境の場合、外部からの不正アクセスに対する設定を行ってください。
以下が一例ですが、このような設定を推奨します。
・ トレーニング受講者のみがアクセスできるようなIPによるアクセス制限の追加。
・ 以下のようなSSHのみ許可した踏み台サーバを用意し、踏み台サーバからポートフォワード機能を利用してトレーニング環境へアクセスする。
(踏み台サーバの構築、ポートフォワード機能については本記事では取り上げておりません)

2.zansinユーザーの作成

アカウント:zansinを作成する。

コマンド例
$ sudo useradd zansin
$ sudo passwd zansin

パスワードは任意で登録。
ただしControlサーバーとTrainingサーバーでパスワードは共通にしておくこと

3.ZANSIN展開用ホームフォルダの作成

以下の例を参考にホームフォルダを作成する

コマンド例
$ sudo mkdir /home/zansin
$ sudo chown zansin:zansin /home/zansin

4.sudoersの追加

以下コマンド例を参考にアカウント:zansinでsudoが使えるようにする。

コマンド例
$ sudo usermod -aG sudo zansin

5.apache2の停止

クラウド環境ではapahe2がインストール済みで自動起動している場合がある。(AWSでは確認済み) ZANSINの構築時には競合するため、停止させておく。

コマンド例
$ sudo systemctl stop apache2
$ sudo systemctl disable apache2

6.SWAP作成(推奨)

※必須ではないものの、やっておいた方が安定性とレスポンスが向上する

コマンド例
$ sudo mkdir /swap
$ sudo dd if=/dev/zero of=/swap/swapfile bs=1M count=2048
$ sudo chmod 600 /swap/swapfile
$ sudo mkswap /swap/swapfile
$ sudo swapon /swap/swapfile
$ sudo echo ‘/swap/swapfile none swap sw 0 0 ‘ | sudo tee -a /etc/fstab

4-5.ZANSIN構築手順(ローカル環境、クラウド環境共通)

ZANSINをインストールして環境を構築します。
一番の山場で時間がかかります。
ここは手順通りに進めていても不安になりやすい箇所なので、焦らず進めることが大切です。
※AWS、Azureで構築した場合はインストーラがモジュール不足でエラーを出し、正常にインストールできません。5及び6の修正作業が必要

1.sshdの設定変更(Controlサーバー、Trainingサーバー両方で実施) ※本番環境では非推奨

ControlサーバーはパスワードログインのSSHを通してTrainingサーバーを制御しています。
そのため両サーバーでSSHのパスワードログインを有効にします。
パスワードログインの有効化
/etc/ssh/sshd.confの修正
以下コメントアウト もしくは追記
PasswordAuthentication yes

※SSHのパスワードログインはセキュリティリスクにつながる可能性があります。
本番環境では特別な理由がない限りは推奨されません。

2.ZANSINセットアッスクリプトのダウンロード(Controlサーバーで実施)

ZANSINをインストールするためのスクリプトを入手します。
以下は ZANSIN のインストールスクリプトを取得するコマンドです。
このスクリプトは GitHubで公開されています。
https://github.com/ZANSIN-sec/ZANSIN

コマンド例
$ cd /home/zansin
$ wget https://raw.githubusercontent.com/ZANSIN-sec/ZANSIN/main/zansin.sh 

※このコマンドで指定しているのはGitHubの公開リポジトリへの直接リンクである。そのため将来リポジトリ構成が変更された場合にリンク切れとなる可能性がある。その場合はGitHubから変更されたリンクを確認すること。

3.インストールスクリプト実行(Controlサーバーで実施)

インストール作業はカレントディレクトリを/home/zansinに変更して実施。

コマンド例
$ cd /home/zansin
$ chmod +x zansin.sh
$ ./zansin.sh

4.インストールスクリプト(Controlサーバーで実施)

スクリプトを実行するとインストーラが走ります。 インストールに必要な情報として以下を入力するよう求められます。

sudoパスワード(設定したzansinパスワード)
ControlサーバーとなるマシンのIPアドレス
(プライベートIPv4アドレス)
TrainingサーバーとなるマシンのIPアドレス
(プライベートIPv4アドレス)
zansinパスワード:zansinのパスワード(設定したパスワード)

必要な情報を入力してインストールが開始されます。
マシンスペックにもよりますが、データ転送に時間がかかります。
要求最低減のスペックの場合、30分以上かかる場合もあります。
特にコンテンツデータの転送は時間がかかり止まってるように見えますが、気長に待ちましょう。
※クラウド環境で実行した場合モジュール不足でエラーが表示されます。(インストールは最後まで走る)
※クラウド環境で構築する場合、以下を追加で実行する必要があります。(AWS、Azure以外では不要)

5.Controlサーバーでのモジュール追加(AWS、Azure環境のみ実行

※AWS、Azureで構築した場合はインストーラがPython®のモジュール不足でエラーを出し、正常にインストールできないためこの作業でモジュールを手動追加します。

エラーが出る不足モジュールを追加します。

$ source /home/zansin/red-controller/red_controller_venv/bin/activate
$ pip3 install python-nmap
$ pip3 install bs4
$ pip3 install paramiko
$ pip3 install requests
$ pip3 install docopt
$ pip3 install aiohttp

6.インストールスクリプト再実行(AWS、Azure環境のみ実行 Controlサーバーで実施)

以下コマンドでインストールを再実行します。

$ ./zansin.sh

4-6.ZANSINトレーニング開始

構築作業お疲れさまでした。
以上でZANSINの構築は完了しました。
ここからは、ZANSINを実際に動かしてみましょう。
最初はすべての攻撃に対応できなくても問題ありません。 私も初回は思うように対処できず、かなり戸惑いました。

特にこういったインシデントに初めて触れる人は以下を目標とするくらい気楽にやる方がいいかもしれません。

  • ログやWeb画面で攻撃を目の当たりにする
    (何が起きているかを追えるようになるとさらにGood)
  • なにか一つ対処できた
    (こうすれば対処できたといった振り返りができただけでも十分)

ZANSINでトレーニングを開始する場合は以下を参考にコマンドを実行します。
SSHでControlサーバーに接続しトレーニング実行のコマンド以下を実行します。

通常モードでトレーニング開始

~$ source /home/zansin/red-controller/red_controller_venv/bin/activate  
~$ cd /home/zansin/ red-controller/
~$ python3 red_controller.py -n ***** -t ***.***.***.*** -c ***.***.***.*** -a 1  

python3 red_controller.py オプションパラメータ補足
-n Trainingユーザー名指定(自由に指定可能)
-t TrainingマシンのIP指定(AWSではプライベートIPV4アドレス)
-c ControlマシンのIP指定(AWSではプライベートIPV4アドレス)
-a 攻撃シナリオ(上記例は1)
標準で登録されている攻撃シナリオは以下のとおり 0:デバッグシナリオ、1:標準シナリオ、2:簡易シナリオ(動作チェック等でなければ1を選択すること)

コマンド例:
Trainingユーザー名:test01
TrainingマシンのIP:10.10.10.1
ControlマシンのIP:10.10.10.2
攻撃シナリオ:1

$ python3 red_controller.py -n test01 -t 10.10.10.1 -c 10.10.10.2 -a 1

5.最後に

環境を用意する手間はありますが、仮想化技術を活用することで、トレーニング環境は容易に構築できます。
こういったトレーニング環境を活用することで、セキュリティインシデントを他者に影響与えることなく体験することができます。
セキュリティに興味のある方は、力試しやスキルアップの機会として活用を検討してみてください。 きっとセキュリティ設計やトラブルシュートに役立つ学びがあると思います。


執筆者 

長谷川 喬一(NTTビジネスソリューションズ(株) エンタープライズビジネス営業部 ネットワーク&ソリューション推進担当)
サーバーやクラウド、セキュリティの案件支援及びエリアのPMOに携わっています。

参考資料・出典

GitHub - ZANSIN-sec/ZANSIN · GitHub

商標 

「Ubuntu®」は、Canonical Ltd. の登録商標です。
「Hyper‑V®」および「Azure®」は、Microsoft Corporation の登録商標です。
「VirtualBox®」および「MySQL®」は、Oracle America, Inc. またはその関連会社の登録商標です。
「AWS®」は、Amazon Technologies, Inc. またはその関連会社の登録商標です。
「NGINX®」は、F5 Networks, Inc. の登録商標です。
「Redis®」は、Redis Ltd. の登録商標です。
「Docker®」は、Docker, Inc. の登録商標です。
「Python®」は、Python Software Foundation の登録商標です。

免責事項

本記事の情報を利用した結果として生じた損害・トラブルについて、当社および執筆者は一切の責任を負いかねます。

© NTT WEST, Inc.