VulnHubのVMイメージコンテナ化#1
Twitterで、 VulnHubについて片っ端からコンテナ化してみたいとつぶやいてみたら思いのほか反応があったのと、ちょっといくつか仕事(ちゃんと働いてます!)やらなんやら面倒な件がとりあえず落ち着きそうなので、次の私生活ミッションに突入前の一服でやってみます。
環境は相変わらずmacでやってますが、windowsでももちろんできます。VirtualBoxとDockerは使える状態にしておいてください。・・・あ、Windowsだと同時に使えなかったので、もしやるなら切り替えてでしょうか。めんどくさいな・・・。実は途中までwindowsでやってます。でもめんどくさくなってMacに変えちゃいました。途中から急にSSのテイスト変わるのは気にしないでください。
今回やってみるのはこちらのイメージ。
なぜこれにしたかは特にないです。片っ端から、ということで、なんでも良かったの。ダウンロードしてVirtualBoxで起動させます。vmdkファイルなので、VMWare Playerのほうがやりやすいかもですが。入れてなかったので面倒だっただけです。面倒って言ってばっかり。VirtualBoxの場合は仮想マシンの新規作成でタイプ選んだりしなくちゃいけないですけど、わからなければそれっぽいの選んでおいて後で起動しなかったら変えて行けばOKだと思います。起動すればいいんだよ起動すれば!
仮想マシンイメージは、ダウンロードしてきたものを展開しておいて選択します。「すでにある仮想ハードディスクファイルを使用する」から選べるようになっているので、vmdkファイルを指定して仮想マシンを作成します。
仮想マシンができたら起動しますが、ネットワークはホストオンリーアダプターを設定しておくとかして、通信できるようにしておきます。コンテナイメージを作る際、tarで固めたファイルをホスト側に持ってきたいので、何らかの方法で通信できるようにしておきたいです。また、そもそも最初はログインするパスワードすらわかりませんので、どうにかこうにかして仮想マシンをrootでごにょごにょできるようにしておかないと、ただ城を眺める歩兵状態です・・・。
というわけで起動しました。ここからログインしていろいろやっていきたいわけです。もちろんSSHでログインとかでもなんでもよいので、とにかくそのステージに立ちたい!という想いのもと、攻略していきます。このへんのノウハウはネット上で先人達が頑張ってくれているので・・・あれをああしてこうやって・・・という3分クッキング的な端折り方でログインできたとします!できあがったのがこちら!
はい。コンテナ作成用のtarを作成できました。この辺の手順はこちらと一緒なのでご確認ください。
出来上がったファイルは、scpでホスト側に持ってきても良いですし、/var/www/htmlとかに置けば、ブラウザからダウンロードしてきてもいけます。とにかく持ってくればよいのです。その後、dockerイメージを作成してみます。
785MB。まあまあですね。実は#1のイメージも作ってみましたがこちらは578MB。みんな軽量でえらいです。それに比べてMetasploitable3ったら肥えちゃってまあ・・・。
あとはもうdocker側だけの問題になってきますので、コンテナ起動→コンテナ内で必要なサービス起動という流れです。どんなのが使えるかは、話私はいつも/etc/init.d以下のものを探ってますが、他に良い方法があるかもしれません。少なくとも、VM側で動いてるサービスを事前に見ておいて同じものを立ち上げてみるというのが大前提になるかと思います。
root@a6a8a2c11ea2:/etc/init.d# ls -la
total 296
drwxr-xr-x 2 root root 4096 Apr 15 2011 .
drwxr-xr-x 1 root root 4096 Mar 2 10:39 ..
-rw-r--r-- 1 root root 1335 Jan 23 2009 README
-rwxr-xr-x 1 root root 5736 Jun 18 2009 apache2
-rwxr-xr-x 1 root root 2653 May 6 2009 apparmor
-rwxr-xr-x 1 root root 969 Feb 20 2007 atd
-rwxr-xr-x 1 root root 3597 Jan 23 2009 bootclean
-rwxr-xr-x 1 root root 2121 Jan 23 2009 bootlogd
-rwxr-xr-x 1 root root 1768 Jan 23 2009 bootmisc.sh
-rwxr-xr-x 1 root root 3454 Jan 23 2009 checkfs.sh
-rwxr-xr-x 1 root root 10602 Jan 23 2009 checkroot.sh
-rwxr-xr-x 1 root root 6355 May 30 2007 console-screen.sh
-rwxr-xr-x 1 root root 1634 Nov 27 2008 console-setup
-rwxr-xr-x 1 root root 1761 May 12 2009 cron
-rwxr-xr-x 1 root root 1223 Jun 22 2007 dns-clean
-rwxr-xr-x 1 root root 7195 Sep 12 2008 glibc.sh
-rwxr-xr-x 1 root root 1228 Jan 23 2009 halt
-rwxr-xr-x 1 root root 909 Jan 23 2009 hostname.sh
-rwxr-xr-x 1 root root 4521 Sep 26 2008 hwclock.sh
-rwxr-xr-x 1 root root 4528 Sep 26 2008 hwclockfirst.sh
-rwxr-xr-x 1 root root 1376 Nov 27 2008 keyboard-setup
-rwxr-xr-x 1 root root 944 Jan 23 2009 killprocs
-rwxr-xr-x 1 root root 1729 Nov 23 2007 klogd
-rwxr-xr-x 1 root root 748 Jan 23 2006 loopback
-rwxr-xr-x 1 root root 1399 Oct 6 2008 module-init-tools
-rwxr-xr-x 1 root root 596 Jan 23 2009 mountall-bootclean.sh
-rwxr-xr-x 1 root root 2430 Jan 23 2009 mountall.sh
-rwxr-xr-x 1 root root 1465 Jan 23 2009 mountdevsubfs.sh
-rwxr-xr-x 1 root root 1544 Jan 23 2009 mountkernfs.sh
-rwxr-xr-x 1 root root 594 Jan 23 2009 mountnfs-bootclean.sh
-rwxr-xr-x 1 root root 1244 Jan 23 2009 mountoverflowtmp
-rwxr-xr-x 1 root root 3123 Jan 23 2009 mtab.sh
-rwxr-xr-x 1 root root 5755 Nov 14 2008 mysql
-rwxr-xr-x 1 root root 2515 Nov 14 2008 mysql-ndb
-rwxr-xr-x 1 root root 1905 Nov 14 2008 mysql-ndb-mgm
-rwxr-xr-x 1 root root 1771 Apr 17 2011 networking
-rwxr-xr-x 1 root root 2377 Oct 23 2007 pcmciautils
-rwxr-xr-x 1 root root 375 Oct 4 2007 pppd-dns
-rwxr-xr-x 1 root root 1261 Jul 10 2008 procps
-rwxr-xr-x 1 root root 7891 Jan 23 2009 rc
-rwxr-xr-x 1 root root 522 Jan 23 2009 rc.local
-rwxr-xr-x 1 root root 117 Jan 23 2009 rcS
-rwxr-xr-x 1 root root 692 Jan 23 2009 reboot
-rwxr-xr-x 1 root root 1000 Jan 23 2009 rmnologin
-rwxr-xr-x 1 root root 4945 Apr 10 2008 rsync
-rwxr-xr-x 1 root root 1199 Jan 23 2009 sendsigs
-rwxr-xr-x 1 root root 585 Jan 23 2009 single
-rwxr-xr-x 1 root root 4215 Jan 23 2009 skeleton
-rwxr-xr-x 1 root root 3839 May 14 2008 ssh
-rwxr-xr-x 1 root root 510 Jan 23 2009 stop-bootlogd
-rwxr-xr-x 1 root root 647 Jan 23 2009 stop-bootlogd-single
-rwxr-xr-x 1 root root 3343 Nov 23 2007 sysklogd
-rwxr-xr-x 1 root root 2488 Apr 14 2009 udev
-rwxr-xr-x 1 root root 706 Apr 14 2009 udev-finish
-rwxr-xr-x 1 root root 7239 Jan 20 2009 ufw
-rwxr-xr-x 1 root root 4030 Jan 23 2009 umountfs
-rwxr-xr-x 1 root root 1833 Jan 23 2009 umountnfs.sh
-rwxr-xr-x 1 root root 1863 Jan 23 2009 umountroot
-rwxr-xr-x 1 root root 1815 Jan 23 2009 urandom
-rwxr-xr-x 1 root root 2445 Jan 23 2009 waitnfs.sh
-rwxr-xr-x 1 root root 1626 Mar 12 2008 wpa-ifupdown
-rwxr-xr-x 1 root root 1843 May 13 2008 x11-common
今回の場合はこんだけありました。./apache2 start とかやってあげると、無事webサービスが立ち上がってるのが確認できました。あ!dockerのネットワークの作り方にもよりますが、標準であればコンテナ立ち上げ時にポートを指定してホストからコンテナの80番とか必要なポートにアクセスできるようにしておいてください。
はい。こんな感じで使えるようになっています。
こんなようなことをひたすらやってます。コンテナ化のメリットとしては、必要なホスト側のリソースの少なさが最も大きいと思ってます。いろんなイメージ使って遊びたくても、容量無くて泣く泣く前のを消す・・・とか結構ある。あと起動の速さとか動作の軽さとかももちろんだし、すぐやり直せたりするとか、いっぱい立ち上げても大丈夫とか、ハッキングラボ的遊び方をするにはとても向いてると思ってます。イメージもVMよりはかなり軽くできるし。DockerHUBにも既にいろいろなイメージがあるので、使ってみるとさらに簡単に環境構築できると思います。・・・kioptrixは検索してみましたが無かったです。
私は、各イメージがどう作られているのかを見たいという欲求もあるので自分で作って勉強させてもらってますが、通常の動作であれば、もしイメージが存在するならそちらが手っ取り早いです。
逆に、じっくりちょっとずつ演習を進めたい時などにはコンテナは向かないかな?状態を保存しておいてまた続きを・・・とかだと、VMでしっかり保存しておいたほうが良いかもしれません。私としては、90分とか180分とかで使える使い捨て環境が理想で、10分以内に環境がリセットできて別の人がすぐ使えるとかいうのと、kubernetestとかで演習環境を一括管理できるのが魅力です。
では、これからkioptrix#3を本格的に攻めてみようと思います!
この記事が気に入ったらサポートをしてみませんか?