目次
archlinux でCTF環境を構築する
7月1日に名古屋で開催されたSECCON for Beginnersに参加してきました。
ひとまずは運営が配布していたVMテンプレートを利用して、CTFに取り組んでいたのですが、慣れた環境で実施したかったため、archlinuxを使ってCTF環境を構築してみました。
更新履歴
2018/01/04 archlinux-2018.01.01-x86_64.isoにyaourtが初期導入されていない件について追記
リアルマシンではなく、VM環境で
モバイルノートにLinuxを導入すると、どうにもWi-Fi周りの設定がこけたり、安定しないということもあったり、メイン環境はWindowsのままが良いということなどから、VMware Workstation上に構築することにしました。
https://www.archlinuxjp.org/download/
まずはじめに、archlinuxのISOファイルをダウンロードしてきます。記事執筆時点での最新バージョンは「archlinux-2017.07.01-x86_64.iso」となります。
VMの構成は下記の通りとしました。
ここで重要なのが、オプションの詳細設定内の「BIOSではなくEFIで起動する」です。今回はUEFIで動作させることを想定して構築しますので、こちらの項目には必ずチェックを入れるようにしてください。
archlinuxのインストール
インストールの下準備
それでは、archlinux-2017.07.01-x86_64.isoをマウントして、VMの電源を入れます。
起動すると、「root@archiso ~ #」プロンプトが自動で上がってきます。
lsblk
を実行して、ディスクの状態を確認します。ディスクが1本であれば/dev/sdaしか無いはずですので、特に問題無いのですが、複数ディスクを搭載している場合は、ここでインストール対象ディスクがどれに当たるか必ず確認します。
もし日本語配列のキーボードを利用している場合は、下記コマンドでキーボード配列を変更してください。
loadkeys jp106
英字配列の場合は特に設定する必要はありませんが、念のために下記コマンドで英字配列を指定します。
loadkeys us
ディスクパーティショニング
次にgdiskを使ってディスクのパーティション設定を行います。
パーティションテーブルは以下の通り。
[table id=54 /]
gdisk /dev/sda
下記の通り入力を進めていきます。
GPT fdisk (gdisk) version 1.0.1 Partition table scan: MBR: not present BSD: not present APM: not present GPT: not present Creating new GPT entries. Command (? for help): o This option deletes all partitions and creates a new protective MBR. Proceed? (Y/N): y Command (? for help): n Partition number : 1 First sector: (何も入力せずにEnter) Last sector: +512M Hex code or GUID: ef00 Command (? for help): n Partition number: 2 First sector: (何も入力せずにEnter) Last sector: +4G Hex code or GUID: 8200 Command (? for help): n Partition number: 3 First sector: (何も入力せずにEnter) Last sector: +30G Hex code or GUID: (何も入力せずにEnter) Command (? for help): n Partition number: 4 First sector: (何も入力せずにEnter) Last sector: (何も入力せずにEnter) Hex code or GUID: (何も入力せずにEnter) Command (? for help): w Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING PARTITIONS!! Do you want to proceed?: y OK; writing new GUID partition table (GPT) to /dev/sda. The operation has completed successfully.
続いて作成した各パーティションを下記コマンドでそれぞれフォーマットします。
mkfs.fat -F32 /dev/sda1 mkswap /dev/sdX2 swapon /dev/sdX2 mkfs.xfs -m crc=1 /dev/sda3 mkfs.xfs -m crc=1 /dev/sda4
それぞれフォーマットし終わったら、下記のコマンドを順番通りに実行し、マウントを行います。
mount /dev/sda3 /mnt mkdir /mnt/boot mkdir /mnt/home mount /dev/sda1 /mnt/boot mount /dev/sda4 /mnt/home
base、base-developパッケージの展開
下記コマンドを実行して、「Server = http://ftp.jaist.ac.jp/pub/Linux/ArchLinux/$repo/os/$arch」を一番上の行に持ってきます。
これでプライマリのミラーサーバーをJAISTのサーバーに設定できます。
vi /etc/pacman.d/mirrorlist
次に下記コマンドでマウントした/mnt配下に対して、baseとbase-develをインストールします。
pacstrap /mnt base base-devel
完了したら、下記コマンドでfstabを生成します。
genfstab -U -p /mnt >> /mnt/etc/fstab
展開した環境の設定
下記コマンドで/mnt配下に展開したarchlinux環境へchrootします。
arch-chroot /mnt /bin/bash
chrootしたらまず、キーボード配列の設定変更を行います。
日本語配列の場合は、
loadkeys jp106
英語配列の場合は、
loadkeys us
をそれぞれ実行します。
ついでに都度loadkeysを実行するのも面倒ですので、下記コマンドで設定ファイルに書き込みを行います。
日本補配列の場合は、
echo "KEYMAP=jp106" > /etc/vconsole.conf
英語配列の場合は、
echo "KEYMAP=us" > /etc/vconsole.conf
をそれぞれ実行します。
次に下記コマンドでrootユーザーのパスワードを変更します。
passwd
続いて、言語設定を行うために、下記コマンドを実行して、「en_US.UTF-8」と「ja_JP.UTF-8」の先頭にある#を消してコメントアウトを解除します。
vi /etc/locale.gen
編集と保存が完了したら、下記コマンドでlocaleファイルを作成します。
locale-gen
次に下記コマンドを実行し、システムロケールを設定します。
echo "LANG=en_US.UTF-8" > /etc/locale.conf export LANG=en_US.UTF-8
次に下記コマンドを実行して、ホスト名を設定します。
echo "任意のホスト名" > /etc/hostname
更に下記コマンドを実行して、hostsファイルを編集します。
vi /etc/hosts
すると、下記のような記載が表示されます。
# # /etc/hosts: static lookup table for host names # #<ip-address> <hostname .domain.org=""> <hostname> 127.0.0.1 localhost.localdomain localhost 任意のホストネーム ::1 localhost.localdomain localhost 任意のホストネーム # End of file
これを下記のように書き換えます。
# # /etc/hosts: static lookup table for host names # #<ip-address> <hostname .domain.org=""> <hostname> 127.0.0.1 <任意のホスト名>.localdomain <任意のホスト名> ::1 <任意のホスト名>.localdomain <任意のホスト名> # End of file
次に下記コマンドで、タイムゾーンの設定を行います。
ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime hwclock --systohc --utc
次に、DHCPクライアントのサービスを自動で起動するように設定します。
systemctl enable dhcpcd.service
ここまで完了したら、下記コマンドを実行してpacmanの更新を行います。
pacman -Syy
ブートローダーのインストール
続いて、下記コマンドを実行してブートローダーであるGRUBを利用するための準備を行います。
pacman -S dosfstools efibootmgr grub
次に下記コマンドで、GRUBをインストールします。
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=arch_grub --recheck
GRUBのインストールが完了したら、設定を行います。
mkdir /boot/EFI/boot cp /boot/EFI/arch_grub/grubx64.efi /boot/EFI/boot/bootx64.efi grub-mkconfig -o /boot/grub/grub.cfg
これで全ての準備が完了しましたので、下記コマンドでchrootから抜けて、再起動を行います。
exit umount -R /mnt reboot
GUI環境の準備
一般ユーザーの作成
この状態ではまだCLI環境しかないため、CTF環境として常用するのは少し厳しいです。
そこで、なるべく軽量なXfce4とlightdmを組み合わせたGUI環境を準備します。
まず、下記コマンドで一般ユーザーを作成します。
useradd -m -g users -G wheel -s /bin/bash <ユーザー名> passwd <ユーザー名>
次に作成したユーザーでsudoを使えるようにするため、下記コマンドを実行します。
visudo
すると下記のような表記がありますので、先頭の#を消してコメントアウトを解除して保存します。
#%wheel ALL=(ALL) ALL
これを
%wheel ALL=(ALL) ALL
こうします。
VGAドライバのインストール
次に、VGAドライバをインストールします。これは各環境によって導入する物が変わってきますので、環境に応じたコマンドを実行してください。
インテルCPU内蔵VGAの場合
pacman -S xf86-video-intel
NVIDIAグラフィックボードを搭載している場合
pacman -S nvidia
Radeonグラフィックボードを搭載している場合
pacman -S xf86-video-amdgpu
VMware上で動作させている場合
yaourt -S open-vm-tools xf86-input-vmmouse xf86-video-vmware systemctl enable vmtoolsd systemctl enable vmware-vmblock-fuse
/etc/pacman.cfgを編集し、末尾に下記を追加します。
[archlinuxfr] SigLevel = Never Server = http://repo.archlinux.fr/$arch 追加して保存完了したら、下記コマンドを実行してyaourtをインストールします。 pacman --sync --refresh yaourt
Xサーバーのインストール
VGAドライバのインストールが完了したら、Xサーバーのインストールを行うため、下記のコマンドを実行します。
pacman -S xorg-server xorg-server-utils xorg-xinit mesa
もし日本語配列キーボードを使用しているのであれば、追加でX用のキーボードレイアウト設定を行う必要があります。
下記のコマンドを実行し、
vi /etc/X11/xorg.conf.d/10-keyboard.conf
下記の通り書き込んで、保存します。
Section "InputClass" Identifier "Keyboard Defaults" MatchIsKeyboard "yes" Option "XkbLayout" "jp" EndSection
Xfce4のインストール
次に、下記コマンドを実行してXfce4をインストールします。
pacman -S xfce4 xorg-xclock xterm lightdm lightdm-gtk-greeter
最後に下記コマンドを実行して、ロケール設定を日本語に切り替えます。
echo "LANG=ja_JP.UTF-8" > /etc/locale.conf
インストールが完了したら、下記コマンドを実行して再起動します。再起動後Xfce4のログイン画面が出てくれば成功です。
systemctl enable lightdm.service reboot
日本語環境の設定
GUI環境の導入が完了したら、次は日本語環境の設定を行います。
まずはじめに、ターミナルを立ち上げ下記コマンドを実行し、homeの中身を英語名に変更します。
sudo LC_ALL=C xdg-user-dirs-gdk-update
次に、下記コマンドを実行して日本語フォントをインストールします。
sudo pacman -S otf-ipafont
Fcitxの導入
次に日本語入力を行うために下記コマンドを実行してFcitxを導入します。
sudo pacman -S fcitx-im fcitx-configtool fcitx-mozc
Fcitxの導入が完了したら、下記コマンドを実行し、.xprofileの編集を行います。
vi ~/.xprofile
そして以下の内容を追記します。
export GTK_IM_MODULE=fcitx export QT_IM_MODULE=fcitx export XMODIFIERS=”@im=fcitx”
これで再起動を行えば、日本語入力が可能となります。
CTF環境の準備
さてここまで完了したら次はCTFで利用するソフトウェアなどを導入します。
ターミナルを開き、下記コマンドを実行します。
sudo pacman -S chromium wireshark sudo yaourt -S sleuthkit curl -O https://blackarch.org/strap.sh chmod +x strap.sh sudo ./strap.sh sudo pacman -S blackarch
最後のblackarchのインストールには非常に時間がかかります。
これであらかたの導入は完了です。
まとめ
自分のメモ用として書き起こしたのですが、いかがでしたでしょうか。
今思えば、archlinuxとの出会いは学生の頃に部活の先輩から、gentooかarchlinuxをインストールをする権利をやろう、と言われたことがきっかけでした。
それからは自分用のLinuxマシンは全てarchlinuxを採用しています。かれこれもう10年くらい使ってることになるんですね・・・
その後、卒研ではサーバーにFreeBSDを導入して、サーバー用にカーネルをチューニングした物を、Thinkpad X61にはarchlinuxをインストールした物を使っていました。
よくよく考えるとサーバーインフラ屋を目指したきっかけは、10年前のarchlinuxの出会いだったかも知れません。
それにしてもCTFおもしろいですね。これからはいろんなCTFに参加してみたいと思います。
バイナリ問題はてんでダメなので、そこが課題ですね・・・ 名古屋であったSECCON for BeginnersのWrite upもどきみたいな記事も明日か明後日くらいに書いてみます。
Source: Archlinux