LoginSignup
6
3

More than 3 years have passed since last update.

[TryHackMe]Docker+KaliでOpenVPN(+αでParrot OSに関して)

Last updated at Posted at 2020-05-16

概要

CTFに興味を持ってTryHackMeとHackTheBoxのアカウントを作ったあと、OpenVPNに関するチュートリアルがあり、VMを推奨していたがせっかくなのでDockerでやってみようと思った。
つまずいた点が多々あったので備忘録としても記しておきます。

対象

マシンスペックに不安がある人やVMの設定が面倒だなって人向け

本題

Dockerはコンテナの作成廃棄を頻繁に行うべきという姿勢らしいのでDockerfileとdocker-compose.ymlを作成して管理を用意にします。

最低限の構成

CTF御用達Kali-linuxを使います。
今回使うイメージはbooyaabes/kali-linux-full

Dockerfile
FROM booyaabes/kali-linux-full

docker-compose.yml
version: '3'
services:
  kali-linux:
    container_name: kali
    build:
     context: .
     dockerfile: Dockerfile
    volumes:
      - ./test:/test
    stdin_open: true
    tty: true


この2つのファイルを同じディレクトリに配置しそこにtestディレクトリを作成しコンテナ内とファイル共有スペースを作成します。
TryHackMeのOpenVPN/Task1のページからMy Configuration Fileを取得し先ほど作成したtest内に入れておきます。

Screenshot at 2020-05-16 18-39-24.png

躓いた点

一旦このままコンテナを立ち上げてコンテナ内に入りOpenVPNを使ってみます。

$ docker-compose up --build -d
$ docker exec -it コンテナID bash
$ cd test
$ sudo openvpn testにいれたファイル名

#エラーメッセージ
ERROR: Cannot open TUN/TAP dev /dev/net/tun: No such file or directory (errno=2)

No such file or directoryとのことなのでみてみると確かにdev以降が存在していませんでした。

解決策1

エラーメッセージを調べたところ以下のようなわかりやすい説明の記事を発見。

ユニバーサル TUN/TAP デバイスドライバについて

上記の指示に従って先程存在しないといわれた子たちを作ります。

$ mkdir /dev/net (まだ /dev/net が存在しない場合)
$ mknod /dev/net/tun c 10 200

しかしこんどはpermissionに関するエラーが発生。

ERROR: Cannot ioctl TUNSETIFF tun: Operation not permitted (errno=1)

解決策2

最も簡単な方法としてdocker-compose.yml内でprivilegedをいじって特権を与えると成功するがセキュリティ面に問題が大きいらしい。
Dockerコンテナを特権モードで実行することが危険な理由

どうにか特権をいじらずにできないか模索していると海外ニキたちが以下のような質問をしていた。
Calling OpenConnect VPN client in docker container shows TUNSETIFF failed: Operation not permitted

要約すると特権の方でもできるけど--cap-add SYS_NET_ADMINでもいけるとのこと。
全権限を付与しているのでなく権限を限定している感じっぽい(詳しい人教えてください)

よってymlを以下のように変更。

version: '3'
services:
  kali-linux:
    container_name: kali
    build:
     context: .
     dockerfile: Dockerfile
    volumes:
      - ./test:/test
    stdin_open: true
    tty: true
    cap_add:
      - NET_ADMIN
#SYS_NET_ADMINだとそんなんないよってエラーが出た

何度もmkdirするのもめんどくさいのでDockerfileも変更。

Dockerfile
FROM booyaabes/kali-linux-full

RUN mkdir -p /dev/net && \
    mknod /dev/net/tun c 10 200

余談ですがDockerfileのコマンドはそれぞれ1回しか呼び出さないようにするのが基本のようです。コンテナの作成廃棄の頻度の件も下記に紹介する本に記載されていました。ネットだけである程度の知識も集まるもののこういうよく使う技術に関する本は一冊持っておくと良さそう。
(自宅ではじめるDocker入門)[https://books.rakuten.co.jp/rb/15828738/]

実行結果

コンテナ内でopenvpnをsudoで実行すると無事接続されました。

Screenshot at 2020-05-16 20-22-28.png

余談(Parrot OS)

HachTheBoxの方ではKaliと共にParrotなるものが推奨されていました。
初めて聞いたので調べてみるとKaliのようにペネトレーションテストに特化したイタリア出身のLinuxディストリビューションらしいです。

日本記事が非常に少ないというデメリットはありながらもKaliより軽量でありKali VS Parrotなんて記事や動画も多く出回っており、その中のコメントや記事内ではParrotはKaliを超えているという意見がそこそこ多かったように思えました。
個人の好みはもちろんあるでしょうし一概にどっちが優れているかという話でなく、そこまでの力がありながら日本でシェアが低いのは割と謎なので先日購入したジャンクのThinkPadにParrotを実際にいれてみたので知識が深まればそれも記事にしたいと考えています。
(本記事の内容もParrotでDockerを立ち上げて動かしてます)

これに関しても詳しい人いたらツイッターとかにフォロー飛ばしていろいろ教えてください。

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3