はじめに
「詳解 セキュリティコンテスト」(以降、CTF本)の実習環境はvagrantを使用してデプロイすることとなっていますが、x86_64アーキテクチャを前提とした構成となっており、アーキテクチャが異なるApple Silicon Macではそのまま動かすことができません。
...この手の実習系はASM民には辛いですね。
今回、Mac向けの仮想化環境であるUTMを使って何とか動かすことができましたので、備忘として公開します。
なお、CTF本の手順通りに構成した場合はUbuntu Server 20.04 vagrant could imageをベースに構成したものが出来上がりますが、この記事ではcloud imageではないUbuntu Server上に同等の環境を再現するという方針で構成します。完全に同等の環境となるものではなく、動作の保証は出来かねる点は予めご留意ください。
想定する読者
- CTF本を買って実習しようとワクテカしてたけど、Apple Silicon Macしか持ってなくてつまづいてしまった方
なぜ動かない?
CTF本の実習環境はx86_64アーキテクチャのvagrant+VirtualBox環境を前提としていますが、Apple SiliconのCPUはARMアーキテクチャであり互換性がないためです。
使うもの
- Apple Silicon Mac
- 言わずもがなですね。本記事の執筆にあたってはMacBook Air(M1, 2020)で確認しています。
- Homebrew
- サードパーティのパッケージマネージャーです。UTMを導入するのに使用します。
- UTM
- Mac向けの仮想化環境ソフトウェアです。同一アーキテクチャのハイパーバイザーに加えて、異なるアーキテクチャのエミュレーションにも対応しています。遅くなりますが。
実態としてはQEMUにGUIのフロントエンドが付いたものです。本記事ではHomebrew経由でインストールしますが、App Storeの有償版(App Storeから更新できる以外には機能差異無し)や、サイト上のdmgイメージからの導入でもOKです。
- Ubuntu Server 20.04
- 実習環境を構成するベースのOSとして、x86_64向けのUbuntu Server 20.04を使用します。Manual Installation用のISOイメージをダウンロードしておきましょう。
手順1. 各種ソフトウェアの導入
まずはHomebrewをインストールします。ターミナル上でHomebrewのトップページに記載されているインストールコマンドを実行します。
# Homebrewインストールコマンドの実行
% /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
==> Checking for `sudo` access (which may request your password).
Password: (パスワードを入力)
==> This script will install:
/opt/homebrew/bin/brew
/opt/homebrew/share/doc/homebrew
/opt/homebrew/share/man/man1/brew.1
/opt/homebrew/share/zsh/site-functions/_brew
/opt/homebrew/etc/bash_completion.d/brew
/opt/homebrew
==> The following new directories will be created:
/opt/homebrew/Cellar
/opt/homebrew/Caskroom
Press RETURN to continue or any other key to abort (Enterを入力)
==> /usr/bin/sudo /bin/mkdir -p /opt/homebrew/Cellar /opt/homebrew/Caskroom
(中略)
==> Installation successful!
==> Homebrew has enabled anonymous aggregate formulae and cask analytics.
Read the analytics documentation (and how to opt-out) here:
https://docs.brew.sh/Analytics
No analytics data has been sent yet (or will be during this `install` run).
==> Homebrew is run entirely by unpaid volunteers. Please consider donating:
https://github.com/Homebrew/brew#donations
==> Next steps:
- Run these two commands in your terminal to add Homebrew to your PATH:
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> /Users/kumaneko/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"
- Run `brew help` to get started
- Further documentation:
https://docs.brew.sh
%
# Next stepsとして指示されたコマンドを実行
% echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> /Users/kumaneko/.zprofile
% eval "$(/opt/homebrew/bin/brew shellenv)"
% rehash
続いてUTMをインストールします。
% brew install UTM
(中略)
% rehash
これで必要なソフトウェアのインストールは完了しました。
手順2. Vagrantfileのダウンロードと内容確認
実習環境を構成するにあたり参考とするため、Vagrantfileをダウンロードし内容を確認します。
# 作業用ディレクトリの作成・移動
% mkdir ~/ctfbook2
% cd ~/ctfbook2
# Vagrantfileのダウンロード
% curl (CTF本記載のURL) -o Vagrantfile
# Vagrantfileの内容確認
% less Vagrantfile
Vagrantfileの内容から、主に以下の3点を確認しておきます。
- 仮想マシンの構成情報
- rootユーザーで実行するコマンド群
- vagrantユーザーで実行するコマンド群
手順3. 仮想マシンの作成
アプリケーションにUTM.appが導入されていますので、これを起動します。
ウィンドウ上部の"+"をクリックして仮想マシンを追加します。
"Emulate"をクリックします。
"Linux"をクリックします。
"Browse"をクリックし、予めダウンロードしてあるUbuntu ServerのISOイメージファイルを選択します。その後、"Next"をクリックします。
Hardwareは既定のままで、"Next"をクリックします。 ※ CTF本に合わせるならMemory 2048MB、CPU Cores 2でも可。
Storageは既定のままで"Next"をクリックします。
Shared Directoryも既定のまま、"Next"をクリックします。
SummaryではNameで名前を付け、"Save"をクリックします。
これで仮想マシンの作成は完了です。
手順4. OSのインストール
続いて仮想マシンにOSをインストールします。
UTMの左ペインで作成した仮想マシンを選択し、ウィンドウ上部右から2番目のボタン(Run selected VM)をクリックします。
仮想マシンコンソールのウィンドウが開き、Ubuntu Serverのインストールが開始されます。
インストーラー上の手順は割愛します。大体言いなりで大丈夫です。
ちょっと気になった点をいくつか。
- 言語はEnglishとする(Japaneseがない)
- キーボードレイアウトはJapanese/Japanese
- OpenSSH Serverは有効にする
- インストーラーのアップデートはやる
- ユーザー名/パスワードはCTF本に倣ってvagrant/vagrantとする
- インストール完了まで80分ほど(initramfs更新走り過ぎ!)
手順4. 仮想マシンの調整
Vagrantfileの記載を参考に、rootユーザーおよびvagrantユーザーで実行するコマンド群を仮想マシン上で実行させます。
# パッケージのアップデート
$ sudo apt-get update
$ sudo apt-get upgrade -y
# IPアドレスを確認(SSH経由で作業したいので)
$ ip addr
MacのターミナルからSSHでログインし直して作業続行。
% ssh vagrant@(仮想マシンのIPアドレス)
$ sudo bash
#
(以降Vagrantfileの「inline: <<-ROOT_SHELL」から「ROOT_SHELL」までの内容を実行する)
注意点
- 一気に複数行コピペしてもうまく通らない場合があるので、ていねいに一行ずつ気持ちを込めてコピペしましょう(笑)。
- libc関連のパッケージにバージョン指定(=2.31-0ubuntu9)が入っており、エラーを招く。バージョン指定を外して回避する(但しあえてバージョン指定してあるので、何か影響があるかもしれない)。
- docker-composeのバージョンが古いので、docker-composeのリリースページから最新版を確認し、URLを置き換えた方がよい(もちろん何か影響があるかもしれない)。
- Burp Suiteもバージョンが古いので、リリースページを確認して最新版に差し替えた方が良い。また、インストーラーへの入力がインラインで記載されているが、バージョンが変わると入力内容が変わる可能性があるので、念の為手入力した方がよい。
続いてvagrantユーザーで実行するコマンド群を投入します。
# exit
$
(以降Vagrantfileの「inline: <<-USER_SHELL」から「USER_SHELL」までの内容を実行する)
$
# 念の為リブート
$ sudo reboot
さて、これで一通り同等の構成ができたはずです。
問題が見つかりましたら適宜アップデートします。