やっつけ不定記

好きなときに好きなことをちゃっちゃと書いてます

Kali Linuxコンテナをラズパイで動かしてみた1

先日行ったPurple Teamingの勉強会。
このテのセキュリティハンズオン系勉強会は、ローカルに攻撃用と受け用の
仮想環境(VM)を立てて実施することになりますが、
要求されるPCのスペックがかなりのもの。
受け用のVMにメモリ割り当て2GBは欲しいとのことで、利用するPCには
最低でも物理メモリ8GBが求められますが、世に出回っているエントリモデルだと、
まだまだ4GBの方が多いと思います。


私の場合、自宅PCは物理メモリ8GBでそれなりのものをWindows10で使っていますが、
持ち運びはチューンアップしてるとはいえ、物理4GBのUbuntu
買い替えるのも何だし、いい方策ないかなと考えていたところ、
目に入ったのが2年前に購入してインテリア化していたRaspberry Pi 3。
これ、使えんじゃね!?


受け側は攻撃されるだけあっていろいろと変更が入るけど、
攻撃側の変更はアップデートくらい。
となると、攻撃用サーバをラズパイに逃がしたら、
その分のリソースを受け側に回せるのではないか?
というわけで、ラズパイにKali Linuxを導入してみました。
物理的に入れるだけなら手順は探したら出てきますが、
それだけだと面白くない&何かあったときに戻しがめんどくさそう。
どうせやるならDockerでやってみます。
移り変わりが激しい分野のようで、すぐに使えなくなるかもしれませんが
参考までにメモ。
ココで入るKali LinuxはいわゆるLight版的なもののようで、最低限のツールしかない模様。
あとで追加導入する必要がありますが、それについては後日。


(1)ラズパイへのホストOS導入
普通にやるならRaspbianですが、Kali LinuxのDockerイメージ
https://www.kali.org/news/official-kali-linux-docker-images/
を試してみたところ、まともにDocker runが走りません。
探ってみた限りでは、ホストOSが64ビットOSで、
CPUがx64アーキテクチャでなければしんどそうな印象。
Raspbianは32ビット互換で動くとかそうでないとか言われている一方、
ラズパイ3は純粋にarm64で動かすことが可能とのこと。
そもそも理解を間違えてる可能性はありますが、ココは純粋な64ビットOSを入れてみます。
選んだのはDebianのラズパイ3用arm64向けイメージ。
https://wiki.debian.org/RaspberryPi3
ここから
2018-01-08-raspberry-pi-3-buster-PREVIEW.img.xz
microSD(16GBを利用)に焼き込んで導入しました。
焼き込みにはWin10のWin32DiskImagerを使っています。




(2)ネットワークの確認
ラズパイ3をルータにつないで、内部LANとしてSSHがつながるかを確認しました。
HDMIディスプレイをつないだらラクなのでしょうが、全部をCUIでやっているので
コマンドでがんばってみます。
DHCPでIPが割り振られるので、Windows10からこんな感じのコマンドでIPアドレスを調査。
同じようなロジックをシェルスクリプトで書いたらLinuxでも行けると思います。
(xxx.xxx.xxxは内部LANのセグメント)
> for /l %i in (1,1,254) do ping -w 1 -n 1 xxx.xxx.xxx.%i


IPアドレスが判明したら、リモートから初期ユーザ(root)と
初期パスワード(raspberry)でSSH接続を確認する。
もちろん、後で初期パスワードは変更もしくは
認証自体を鍵方式に変更しましょう。
以下、SSH完了後の確認コマンド。
# apt-get update
# apt-get upgrade
# df -kh
初期状態で810MB程度使っていました。
# cat /etc/issue
Debian GNU/Linux buster/sid \n \l




(3)Docker導入準備
Docker導入時にcurlコマンドが必要ですが、
初期状態では導入されていないので入れてあげます。
# apt-get install curl
また、curlコマンド発行時に時刻に大きなズレがあると失敗するので
NTPを入れて調整しておきます(ズボラしてタイムゾーンUTCから変えていません)。
# date
Thu Dec 14 22:32:59 UTC 2017
# apt-get install ntp
# date
Tue Oct 2 14:48:30 UTC 2018




(4)Docker導入
curlコマンドでDockerをインストールします。
Dockerの公式手順をそのまま使っています。
# curl -sSL https://get.docker.com | sh
・・・
Version: 18.06.1-ce
API version: 1.38
・・・
OS/Arch: linux/arm64
Experimental: false
・・・
# docker run hello-world
Hello Worldのコンテナが確認できればDocker自体の導入は完了。
このコンテナはもう使わないのでdocker rmなりdocker rmiして削除する。




(5)Kali Linuxコンテナの作成
・Kali Linuxイメージの導入
Kali Linuxの公式サイト
https://www.kali.org/news/official-kali-linux-docker-images/
に手順が書いてあるのですが、ここに書いてあるシェルスクリプト
Releaseを見に行っているようで、ビルドに失敗します。
https://github.com/docker-linux/kali/blob/master/build-kali.sh
に修正済み(?)シェルスクリプトが公開されていたので、これを参考にします。
# vi (ファイル名).sh
上記URLのシェルを持ってくる。
ホストOSにrootでログインしているのでsudoコマンドは外しておく。
# chmod 755 (ファイル名).sh
# ./(ファイル名).sh
Reading package lists... Done
Building dependency tree
・・・
Tagging kali with kali-rolling
Build OK
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
linuxkonsult/kali kali-rolling (イメージID) 11 minutes ago 266MB
linuxkonsult/kali latest (イメージID) 11 minutes ago 266MB


・Kali Linuxコンテナの作成と確認
# docker run -it --name (コンテナ名) linuxkonsult/kali /bin/bash
root@(コンテナID):/# uname -a
Linux (コンテナID) 4.14.0-3-arm64 #1 SMP Debian 4.14.12-2 (2018-01-06) aarch64 GNU/Linux
root@(コンテナID):/# cat /etc/lsb-release
DISTRIB_ID=Kali
DISTRIB_RELEASE=kali-rolling
DISTRIB_CODENAME=kali-rolling
DISTRIB_DESCRIPTION="Kali GNU/Linux Rolling"
root@(コンテナID):/# cat /etc/os-release
PRETTY_NAME="Kali GNU/Linux Rolling"
NAME="Kali GNU/Linux"
ID=kali
VERSION="2018.4"
VERSION_ID="2018.4"
ID_LIKE=debian
ANSI_COLOR="1;31"
HOME_URL="https://www.kali.org/"
SUPPORT_URL="https://forums.kali.org/"
BUG_REPORT_URL="https://bugs.kali.org/"
root@(コンテナID):~# exit


コンテナ作成後のコマンドはこんな感じ。
・起動
# docker start (コンテナ名)


・起動済みコンテナに入る
# docker exec -it (コンテナ名) /bin/bash


・コンテナ停止
# docker stop (コンテナ名)


・コンテナ削除
# docker rm (コンテナ名)