はじめに
動機はサイバーセキュリティ初心者の身として攻撃と防御の両方を手を動かして学びたいと感じたことです。ちなみに筆者はIT知識をほぼ有していない大学生ですので間違いはあります。記事のゴールはKailからUbuntuに接続できる状態とします。
環境
| 項目 | 内容 |
|---|---|
| ホストPC | MacBook Air (M5) / メモリ24GB |
| macOS | 26.5.2 |
| 仮想化ソフト | UTM 4.7.5 |
| 攻撃側VM | Kali Linux 2026.2 (ARM64) / メモリ4GB / 2コア / 50GB |
| 標的側VM | Ubuntu Server 26.04.1 LTS (ARM64) / メモリ2GB / 2コア / 約22GB |
| ネットワーク | UTM共有ネットワーク (192.168.64.0/24) |
全体構成
前提知識
1. 仮想マシンとは何か
仮想マシン(VM:Virtual Machine)とは、ソフトウェアの技術を使用し、一台のコンピュータ(物理マシン)の中に「もう一台の独立したコンピュータ」を仮想的に作り出す仕組みです。これにより私のようなMacユーザーでもさまざまなOSを動かすことができます。
2. 仮想化とエミュレーションの違い
仮想化と似ている概念に、エミュレーションがあります。エミュレーションとは、あるハードウェア(特にCPU)の動作を、別のハードウェア上でソフトウェアによって模倣する技術です。
仮想化は、ゲストOSの命令をホストのCPUにほぼそのまま実行させるため高速ですが、ホストと同じCPUアーキテクチャのOSしか動かせません。一方エミュレーションは、命令を1つずつ変換しながら実行するため、異なるアーキテクチャのOSも動かせる代わりに、動作が大幅に遅くなります。
3. なぜARM64版を選ぶ必要があったのか
前提として、Apple SiliconはARM64です。対してintelやAMD製のCPUはx64というアーキテクチャが使用されています。仮想化ではホストと同じアーキテクチャのCPUしか動かせないので、ARM64版を選ぶ必要がありました。逆にx64版はエミュレーションが必要で、動きが重くなるので使用しませんでした。
5. Kali Linux(攻撃側)の構築
5-1. ISOの入手
Kali公式サイトのダウンロードページで 「Apple Silicon (ARM64)」 タブを選び、Installer(Recommended)をダウンロードしました(約3.7GB)。
- Weekly:テストされていない最新ビルドなので、学習用には避けました
- NetInstaller:インストール中にパッケージをダウンロードする方式で、回線によっては時間がかかります
ダウンロード後、公式ページの「sum」に書かれたハッシュ値と一致するかを確認しておくと、ファイルの破損や改ざんがないことを確かめられます。
shasum -a 256 ~/Downloads/kali-linux-*-installer-arm64.iso
5-2. VMの作成
UTMで「仮想化」→「Linux」を選び、次の設定で作成しました。
| 項目 | 設定値 |
|---|---|
| 仮想化エンジン | QEMU(「Apple仮想化を使用」はオフ) |
| 起動イメージ | Boot from ISO image(ダウンロードしたISO) |
| メモリ | 4096MB |
| CPUコア | 2〜4 |
| ディスク | 50GB |
| ネットワーク | 共有ネットワーク(初期値) |
「Apple仮想化を使用」はUTM上でも実験的機能と案内されているため、推奨のQEMUを使いました。QEMUでもホストとゲストが同じARM64なので、エミュレーションではなく仮想化として高速に動作します。
ディスクを多めの50GBにしたのは、Kaliはツールやアップデートで容量が膨らみやすいためです。
5-3. インストール
GRUBメニューでは 「Graphical install」ではなく「Install」(テキスト版) を選びました。UTM環境ではグラフィカル版で画面が表示されなくなることがあるためです。見た目が違うだけで、インストールされるKali自体(デスクトップ環境付き)は同じです。
⚠️ 実際には「Install」を選んだ後も画面が表示されず、シリアルデバイスを追加して解決しました。詳しくは「7. ハマったポイントと解決策」で説明します。
主な選択肢は次のとおりです。
| 画面 | 選択 | 理由 |
|---|---|---|
| Language | English | テキスト版インストーラでは日本語が文字化けしやすいため |
| Location | other → Asia → Japan | タイムゾーンを日本にするため |
| Keyboard | 手元のMacの配列に合わせる | JISなら Japanese、USなら American English |
| Partitioning method | Guided - use entire disk | 練習用VMなのでLVMや暗号化は不要 |
| Partitioning scheme | All files in one partition | 初心者向けの推奨設定 |
| Write changes to disks? | Yes | 初期値が No なので注意 |
| Software selection | 初期設定のまま(Xfce+default) | 標準のデスクトップとツール一式 |
インストールが完了したら、再起動する前に ISOを取り外します(→7章)。
5-4. インストール後の設定
まずシステムを最新にします。
sudo apt update && sudo apt full-upgrade -y
次に、Macとのクリップボード共有(コピー&ペースト)を有効にするため spice-vdagent を入れます。再起動後に反映されます。
sudo apt install -y spice-vdagent
最後に、VMを停止した状態でUTMの一覧から右クリック →「複製」でバックアップを取りました。設定を壊しても、このコピーからすぐにやり直せます。
6. Ubuntu Server(標的側)の構築
6-1. ISOの入手
Ubuntuの日本語サイトにある「Ubuntu Desktop」は今回の用途とは違うので注意が必要です。公式の英語サイトの Ubuntu Server for ARM のページから、ファイル名に live-server-arm64 を含むISOをダウンロードしました。
Desktop版ではなくServer版を選んだのは、次の理由からです。
- GUIの分のメモリやディスクを節約できる
- 実際のサーバはGUIなしで運用されることがほとんどで、練習としても実態に近い
6-2. VMの作成
Kaliと同じく「仮想化」→「Linux」→「Boot from ISO image」で作成しました。
| 項目 | 設定値 |
|---|---|
| 仮想化エンジン | QEMU(「Apple仮想化を使用」はオフ) |
| メモリ | 2048MB |
| CPUコア | 2 |
| ディスク | 約22GB |
| ネットワーク | 共有ネットワーク(初期値) |
Ubuntuのインストーラは画面表示の問題が起きなかったので、シリアルデバイスの追加は不要でした。
6-3. インストール
| 画面 | 選択 | 理由 |
|---|---|---|
| Language | English | コンソールでの文字化けを避けるため |
| Keyboard | 手元のMacの配列に合わせる | |
| Type of installation | Ubuntu Server(minimizedではない方) | minimized版は基本的なコマンドまで削られていて不便なため |
| Network | 初期設定のまま(DHCP) | IPアドレスが自動で割り当てられる |
| Proxy / Mirror | 初期設定のまま | |
| Storage | Use an entire disk | ※LVMの初期設定に注意(→7章) |
| Profile | ユーザー名・サーバ名・パスワードを設定 | サーバ名はKaliと区別しやすい名前にする |
| Ubuntu Pro | Skip for now | 有償サポートのため、練習用には不要 |
| SSH | Install OpenSSH server にチェック | Macのターミナルから操作するため |
| Import SSH key | Cancel(スキップ) | 今回はパスワード認証で十分なため |
| Featured server snaps | 何も選ばない | 必要なものは後から入れられるため |
SSHの画面では「Allow password authentication over SSH」にもチェックが入っていることを確認しました。鍵認証への切り替えは、今後「SSHを守る」練習のときに試す予定です。
インストール完了後、「Reboot Now」を押すと Please remove the installation medium と表示されるので、ISOを取り外してからEnterを押します。
6-4. インストール後の設定
ログインすると、システム情報の中にIPアドレスが表示されます。
IPv4 address for enp0s1: 192.168.64.3
コマンドで確認する場合は次のどちらかです。
ip a
hostname -I
ログイン画面には GNU/Linux ... aarch64 と表示されており、ARM64(aarch64)版のOSが動いていることも確認できました。
システムを最新にします。
sudo apt update && sudo apt upgrade -y
⚠️ このとき
Usage of /: 51.2% of 10.70GBと表示され、割り当てたディスクの半分ほどしか使われていないことに気づきました。対処法は7章で説明します。
7. ハマったポイントと解決策
7-1. Kaliのインストーラが表示されない
症状
GRUBメニューで「Install」を選んだ後、画面が黒いままインストーラが表示されませんでした。キーボードで入力した文字(ls や矢印キーの ^[[A)がそのまま表示されるだけの状態です。
ディスプレイカードを virtio-ramfb に変更してみたところ、今度は Display output is not active と表示されました。
原因
インストーラが画面ではなくシリアルコンソール側に出力しており、UTMの通常の画面には何も映っていなかったと考えられます。
解決策
- VMを停止し、UTMの一覧で右クリック →「編集」
- ディスプレイカードを元の初期設定に戻す
- 「デバイスを追加」から シリアル を追加(モードは「内蔵ターミナル」)
- 保存して起動し、GRUBで「Install」を選ぶ
これでシリアル側のウィンドウにインストーラが表示され、そのまま操作を進められました。インストール後のデスクトップは通常の画面側に表示されるので、シリアルデバイスは後から削除して問題ありません。
7-2. Ubuntuのディスクが半分しか使われていない
症状
ログイン時の表示で、22GBのディスクを割り当てたはずが / の容量が約10.7GBしかありませんでした。
Usage of /: 51.2% of 10.70GB
vgs で確認すると、ボリュームグループに未使用の領域(VFree)が約11GB残っていました。
$ sudo vgs
VG #PV #LV #SN Attr VSize VFree
ubuntu-vg 1 1 0 wz--n- <21.95g 10.97g
原因
Ubuntu Serverのインストーラは、LVMを使う初期設定のとき、ディスク全体ではなく一部だけをルート用の論理ボリューム(ubuntu-lv)に割り当てることがあります。
解決策
残りの領域をすべて ubuntu-lv に割り当て、同時にファイルシステムも拡張します。
sudo lvextend -l +100%FREE -r /dev/ubuntu-vg/ubuntu-lv
-
-l +100%FREE:空き領域をすべて追加する -
-r:論理ボリュームと一緒にファイルシステムもリサイズする
実行後、df -h / でサイズが約21GBに増えていれば完了です。
💡 最初は
%を打ち忘れて+100FREEと入力してしまい、Invalid argument for --extentsというエラーになりました。UTMの画面で記号が打ちにくい場合は、MacのターミナルからSSHで接続して実行すると、Macのキーボードやコピー&ペーストがそのまま使えて確実です。
インストール時にLVMのチェックを外すか、確認画面で ubuntu-lv のサイズを最大まで広げておけば、この作業は不要です。
7-3. 再起動するとまたインストーラが起動する
原因
インストール用のISOが、仮想的なDVDとしてVMに差し込まれたままになっているためです。
解決策
インストール完了後、再起動する前にUTMのツールバーにあるCD/DVDのアイコンからISOを「取り出す」ようにします。ツールバーから外せない場合は、VMを停止して「編集」→「CD/DVD」→「消去」でも取り外せます。
8. 動作確認
8-1. MacからUbuntuへSSH接続
Macのターミナルから接続します。
ssh oooo@192.168.64.3
初回接続時には次のような確認が表示されます。
The authenticity of host '192.168.64.3 (192.168.64.3)' can't be established.
ED25519 key fingerprint is: SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
これは「初めて接続する相手なので、本当にそのサーバで合っているか確認してください」という意味です。yes と入力すると、サーバの指紋(fingerprint)がMacの ~/.ssh/known_hosts に記録され、次回からは表示されなくなります。
もし将来、同じIPアドレスなのに指紋が変わっていると、SSHは REMOTE HOST IDENTIFICATION HAS CHANGED! と警告します。これは通信の途中で別のサーバになりすます 中間者攻撃 を防ぐための仕組みです。
厳密に確認したい場合は、Ubuntu側で次のコマンドを実行し、表示された値がMac側の表示と一致するかを見比べます。
ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub
パスワードを入力し、ログインできることを確認しました。
8-2. KaliからUbuntuへの疎通確認
Kaliのターミナルで、Ubuntuに通信が届くかを確認します。
ping -c 3 192.168.64.3
続いて、Ubuntuで開いているポートを調べます。
nmap 192.168.64.3
結果に 22/tcp open ssh が表示されれば、KaliからUbuntuのSSHサービスが見えていることになります。これは攻撃の最初のステップである 偵察(スキャン) にあたります。
9. 注意事項
- 今回のような攻撃・スキャンの練習は、自分で構築した環境、または練習用として許可されたサービス(TryHackMe、Hack The Boxなど)でのみ 行ってください。
- 許可のないサーバへのスキャンや侵入の試みは、日本では 不正アクセス禁止法 などに抵触するおそれがあります。
- 今後、標的のUbuntuをわざと脆弱な設定にして練習する場合は、UTMのネットワークを「ホストのみ」に切り替え、インターネットから切り離した状態で行う予定です。脆弱なサーバをインターネットに公開すると、すぐに乗っ取られて攻撃の踏み台にされる危険があります。
10. まとめと次にやること
Apple Silicon MacにUTMを使って、攻撃側のKali Linuxと標的側のUbuntu Serverからなるセキュリティ学習環境を構築しました。
今回の学びをまとめると、次のとおりです。
- Apple SiliconはARM64なので、仮想化で動かすOSもARM64版を選ぶ必要がある
- UTMでKaliを入れるときは、インストーラがシリアル側に出力されることがある
- Ubuntu ServerのLVM初期設定では、ディスクが一部しか使われないことがある
- SSHの初回接続時の確認は、中間者攻撃を防ぐための重要な仕組みである
次回は、Ubuntu上にDockerでDVWA(わざと脆弱に作られたWebアプリ)を立て、KaliからSQLインジェクションなどの攻撃を試してみる予定です。攻撃を体験したうえで、自分のアプリでどう防ぐかまでつなげていきたいと思います。