archlinux でCTF環境を構築する

アプリ
スポンサーリンク

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上に構築することにしました。

Arch Linux JP Project - ダウンロード

まずはじめに、archlinuxのISOファイルをダウンロードしてきます。記事執筆時点での最新バージョンは「archlinux-2017.07.01-x86_64.iso」となります。

VMの構成は下記の通りとしました。

archlinux でCTF環境を構築する

archlinux でCTF環境を構築する

ここで重要なのが、オプションの詳細設定内の「BIOSではなくEFIで起動する」です。今回はUEFIで動作させることを想定して構築しますので、こちらの項目には必ずチェックを入れるようにしてください。

archlinuxのインストール

インストールの下準備

それでは、archlinux-2017.07.01-x86_64.isoをマウントして、VMの電源を入れます。

※もし、VMではなく実機にインストールする場合は、Secure Bootを無効化してからブートしてくださいね。

起動すると、「root@archiso ~ #」プロンプトが自動で上がってきます。

lsblk

を実行して、ディスクの状態を確認します。ディスクが1本であれば/dev/sdaしか無いはずですので、特に問題無いのですが、複数ディスクを搭載している場合は、ここでインストール対象ディスクがどれに当たるか必ず確認します。

本記事では、/dev/sdaにarchlinuxをインストールするようにしています。違うディスクにインストールする場合は、適宜/dev/sdaを変更してコマンド実行するようにしてください。

もし日本語配列のキーボードを利用している場合は、下記コマンドでキーボード配列を変更してください。

loadkeys jp106

英字配列の場合は特に設定する必要はありませんが、念のために下記コマンドで英字配列を指定します。

loadkeys us

ディスクパーティショニング

次にgdiskを使ってディスクのパーティション設定を行います。

パーティションテーブルは以下の通り。

パーティション用途サイズGUID (HEX)ファイルシステム
/dev/sda1ブート領域512MBef00FAT32
/dev/sda2swap領域4GB8200swap
/dev/sda3/領域30GB8300XFS
/dev/sda4/home領域15.5GB(空きのこり全て)8300XFS
今回VMに2GBのRAMを割り当てています。swap領域は搭載RAMの2倍として設定しますので、今回の場合、swap領域は4GBとなります。
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
編集が完了したら、Escキーを押下してコマンドモードに移り、「:w」と入力してEnterキーを押下することで、保存終了を行うことが出来ます。

次に下記コマンドでマウントした/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
archlinux-2018.01.01-x86_64.isoを利用してインストールしてみたところ、yaourtが最初からインストールされなくなったようですので、下記手順でyaourtを導入します。

/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
archlinux-2018.01.01-x86_64.isoを利用してインストールしたところ、xorg-server-utilsパッケージは存在しないと怒られたので、xorg-server-utilsを外してインストールを先に進めます。

もし日本語配列キーボードを使用しているのであれば、追加で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

archlinux でCTF環境を構築する

archlinux でCTF環境を構築する

日本語環境の設定

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

コメント

タイトルとURLをコピーしました