【Hack The Box】環境設定 for M1Mac Docker-compose

## 概要
M1MacでHack the Box攻略用のKali-linuxをDocker-compose上で動作させます。
完了形は、Docker上のKali-linuxでHack the BoxのOpenVPNを接続し、10.10.10.10に導通を確認したら成功です。

## 環境など
macOS, Docker Desktop, Docker-composeのバージョンは以下の通りです。
```:terminal
➜  workspace git:(main) ✗ sw_vers       
ProductName:		macOS
ProductVersion:		14.6.1
BuildVersion:		23G93

➜  workspace git:(main) ✗ docker version
Client:
 Version:           27.2.0
 API version:       1.47
 Go version:        go1.21.13
 Git commit:        3ab4256
 Built:             Tue Aug 27 14:14:45 2024
 OS/Arch:           darwin/arm64
 Context:           desktop-linux

Server: Docker Desktop 4.34.0 (165256)
 Engine:
  Version:          27.2.0
  API version:      1.47 (minimum version 1.24)
  Go version:       go1.21.13
  Git commit:       3ab5c7d
  Built:            Tue Aug 27 14:15:41 2024
  OS/Arch:          linux/arm64
  Experimental:     false
 containerd:
  Version:          1.7.20
  GitCommit:        8fc6bcff51318944179630522a095cc9dbf9f353
 runc:
  Version:          1.1.13
  GitCommit:        v1.1.13-0-g58aa920
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
  
➜  workspace git:(main) ✗ docker-compose version
Docker Compose version 2.29.2
```

## Docker-composeの準備
まず、作業ディレクトリを確保します。Terminalで以下のコマンドを実行してください。
```:terminal
mkdir workspace
cd workspace
touch Dockerfile
touch docker-compose.yml
mkdir HTB
```
作成した、`Dockerfile`と`docker-compose.yml`に以下のコードをコピペしてください。
```:Dockerfile
FROM kalilinux/kali-rolling:arm64

# Update package list and install essential packages
RUN apt update && apt upgrade -y && apt install openvpn -y

# Set the working directory
WORKDIR /root/workspace
```

```:docker-compose.yml
version: "3.8"
services:
  kali:
    image: kalilinux/kali-rolling:arm64
    container_name: kali_container
    cap_add:
      - NET_ADMIN
    ports:
      - "1337:1337/udp"
      - "443:443/tcp"
    devices:
      - /dev/net/tun
    volumes:
      - ./workspace:/root/workspace # ホストの./workspaceをコンテナの/root/workspaceにマウント
    tty: true
    stdin_open: true
    restart: unless-stopped
    sysctls:
      - net.ipv6.conf.all.disable_ipv6=0
```
`docker-compose.yml`を格納しているディレクトリで以下のコマンドを実行し、KaliのBashに入ってください。
```:bash
docker-compose up -d
docker exec -it kali_container /bin/bash
```
以下からはKali上で実行するコマンドです。
```:terminal
apt install sudo -y
sudo apt upgrade -y
sudo apt update -y
sudo apt install kali-tools-top10 -y
sudo apt install openvpn -y 
```

## Hack the boxのOpenVPNに接続する
[HTBのHome](https://app.hackthebox.com/home)にアクセスし、画像の矢印→の通りに操作して下さい。
まずは、「CONNECT TO HTB」をクリック
![Hack the box VPN (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/969587/1753219d-0dd7-2547-9b58-c60080d6053b.png)
「Machines」をクリック
![Hack the box VPN.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/969587/c603ea02-8e4f-2188-7b6e-012f03323fdc.png)
「OpenVPN」をクリック
![Hack the box VPN (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/969587/cd5ea7d5-2add-eb89-4c22-5292e1954e92.png)
1つ目は「US」か「EU」、2つ目は適当で、3つ目はUDPとTCPも好み、4つ目でダウンロードする。
すると`lab_{username}.ovpn`というファイルが手に入る。そして、先ほど作成した`workspace/HTB`に保存してください(Macで操作して大丈夫です)。
![Hack the box VPN (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/969587/798616ac-f3f7-f86c-5057-b83be07d2200.png)



## KaliでOpenVPNに接続する
KaliのBashで以下のコマンドを実行してください。`lab_{username}.ovpn`のファイル名を変更することだけ気をつけてください。
```:bash
sudo sysctl net.ipv6.conf.all.disable_ipv6=0
cd /root/workspace/HTB
mkdir -p /dev/net
mknod /dev/net/tun c 10 200
chmod 600 /dev/net/tun
sudo openvpn lab_{username}.ovpn
```
VPNのログが表示され続けられるため、タブを消去せず、新しいTerminalを開いてKaliに入ってください。
```:terminal
cd workspace
docker exec -it kali_container /bin/bash
```
```:bash
cd /root/workspace/HTB
curl 10.10.10.10
```
`curl 10.10.10.10`でHTMLから`flag{??????????_????????}`が取れたら成功です。お疲れ様でした。


## 上手くいかない時
* Dockerのバージョンが低くてだめだった場合は以下の「Use the new Virtualization framework」にチェックボックスを入れてみてください。![スクリーンショット 2024-08-30 0.27.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/969587/f9a711b7-950f-2f55-1685-9c61f1b206e9.png)
* HTBのOpenVPNのサーバーを変更してみてください。通信方式が若干異なるので画像以外でも試してみてください。
## おわりに
Qiitaで記事を書き慣れていないため、改善点などがあったらコメントしてください。また、上手くVPNが繋がらなかった時も、是非コメントしてください！解決して、より良い記事にして行きましょう！