Androidスマートフォンをペンテスト仕様にカスタムする方法としてNethunterをROM焼きするか、TermuxにNethunter Rootless(nh)を導入する方法が一般的だが、Kali(特にnh rootless)はBlackArchと比較してツール数が少なかったり幅広い開発・侵入用支援モジュールが不足している側面も見受けられる。ユニバーサルなDebianとハッカーフレンドリーなArchLinuxの違いだと考えている。ほんの出来心でBlackArch環境をTermux上に構築してみる。
本稿ではNetHunter Rootlessの代替として機能するBlackArch環境構築の手引きとnh以外の選択肢を示すことにする。
先に自動化スクリプトを公開しておく。これをインストールしたproot ArchLinux環境で実行。
#!/bin/bash
#
# setup-blackarch.sh
#
#
# 中立かつ安定したDNSに変更
echo "nameserver 1.1.1.1" > /etc/resolv.conf
# パッケージリストの更新と下準備
pacman -Syyu && pacman -S curl base-devel yay
# BlackArch化modを適用
curl -sL http://blackarch.org/strap.sh | bash -
#先に入手できる範囲のツールを取得、取得できない場合はyayで補う
pacman -Syyu && pacman -S nmap sqlmap hydra hashcat recon-ng sn0int sherlock
GitHubでAPKを入手するか、F-Droidから入手する必要がある。
pkgコマンドでパッケージのアップグレードとproot-distroをインストールする。確認を求められるのが嫌なら各々-y
オプションを付ける。
pkg upgrade
pkg install proot-distro
セットアップが完了したらproot-distro install archlinux
を実行しルートディレクトリとなる圧縮ファイルをダウンロードする。
prootはchrootのtermux実装でchrootと同じくルートディレクトリ構造をファイルシステムと認識しその中で仮想的なOSとして振る舞う。
その為xz形式(だっけ?)を展開する。
ArchLinuxのインストールが完了すればproot-distro login archlinux
でログイン。その後先程のシェルスクリプトを実行する。
# スクリプトとして実行する場合。ファイルに落とし込む場合は要CUIエディタ
chmod +x <任意のファイル名>.sh
blackarchレポジトリにアクセスできない場合、/etc/pacman.d/blackarch-mirrorlist
を適宜修正する。例えばKDDIの日本サーバーのコメントアウトを外すなど。
ルートでは動かないyayやnmapを使うため(後述)、非rootユーザーを作成する。その為のbase-devel。
まずホームディレクトリとログインシェルと同時にユーザーを設定する。
useradd -m -s /bin/bash username # ユーザー名とシェルは好みに合わせて変更すること
一旦rootに戻どりパスワードを設定する。
passwd username
ArchLinuxのパッケージは同梱されているPKGBUILDというビルドファイルに基づいている。大抵の場合PKGBUILDにパッケージの対象アーキテクチャが書かれており、表記意外のアーキテクチャでは利用できない。
ペンテスト環境を整える上で必須のMetasploitとJohnもどういう訳かこれに引っかかっている為、そのPKGBUILDを書き直すかyayを使ってAURのリポジトリから落とす。今回はyayで行く。Aarch64(スマートフォン)プロセッサだとBlackArchと本家で利用できないパッケージが多々存在する。その都度AURを使うといいだろう。
本稿で示した手筈の通り進めていればyayは利用可能。先程作成したユーザー名をsudo -i -u <ここにmyuser>
という形で渡してやると非rootユーザーにログインできる。
yayはrootユーザーでは利用できない。
ここでは2つの不足しているパッケージをインストールする。
yay -S john-git metasploit-git --noconfirm
AURパッケージの命名規則としてXXX-git
というものがあるが、これはgitサーバーのソースファイルを参照しているという表しで、基本的にアーキテクチャー指示も含まれていないのでスマートフォンにもインストールできる。
他にインストールしたいツールがあるなら yay -Ss
コマンドで巡回するといいだろう。
追記: 今確認したところAURのjohn-gitはビルド時にエラーでトリップしてしまう為KaliのGitLabで開発されているjohnを自前でビルドする必要がある。
https://gitlab.com/kalilinux/packages/john
ハッカーの好みとしてbashを使うのかzshを使うか、はたまたfishか、プロンプトテーマは自作するかという終わりのない悩みはあると思うが、概して嗜好なので好きなものを使っていただきたい。
BlackArchはblackarch-config-bash
とblackarch-config-zsh
というプロンプトテーマセットをpacmanで提供している。職人気質の殺風景は避けられるだろう。
参考に私がblackarch-config-bash
をもとに作成したテーマを置いておく。
# .bashrc
#
#
## v1.0.0
#
# colors
darkgrey="$(tput setaf 8)"
white="$(tput setaf 15)"
blue="$(tput setaf 12)"
cyan="$(tput setaf 14)"
red="$(tput setaf 9)"
nc="$(tput sgr0)"
# exports
export PATH="${HOME}/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:"
export PATH="${PATH}/usr/local/sbin:/opt/bin:/usr/bin/core_perl:/usr/games/bin:var/lib/snapd/snap/bin:"
if [[ $EUID -eq 0 ]]; then
export PS1="\[$blue\][ \[$darkgrey\]\u@\[$cyan\]\H \[$darkgrey\]\w\[$darkgrey\] \[$blue\]]\\[$darkgrey\]# \[$nc\]"
else
export PS1="\[$blue\][ \[$darkgrey\]\u@\[$cyan\]\H \[$darkgrey\]\w\[$darkgrey\] \[$blue\]]\\[$darkgrey\]% \[$nc\]"
fi
export LD_PRELOAD=""
# alias
alias ls="ls --color"
alias vi="vim"
alias sqlmap="sqlmap --tor"
alias shred="shred -uvzf"
alias nmap="nmap -vvv -Pn --dns-server 1.1.1.1"
alias wget="wget -U 'noleak'"
alias curl="curl --user-agent 'noleak'"
# source files
[ -r /usr/share/bash-completion/completions ] &&
. /usr/share/bash-completion/completions/*
# custom functions
#
ops-mode()
{
export PS1="\[$blue\]┌[\[$darkgrey\]\u@\[$cyan\]\H\[$blue]\]-[\[$cyan\]$(date +"%Y-%m-%d/%H:%M:%S")\[$blue\]]-[\[$cyan\]\w\[$blue\]]\n\[$blue\]└-\[$blue\]╼\[$cyan\]#>> \[$nc\]"
}
clwhois()
{
curl -sL http://cli.fyi/$1 | jq .
}
remoteshell()
{
sshpass -p 'segfault' ssh -D 1080 root@segfault.net
}
myip()
{
curl -sL ip-api.com/json | jq .
}
wiki()
{
case $1 in
ja)
proxychains4 -q w3m ja.wikipedia.org/wiki/$2
;;
en)
proxychains4 -q w3m en.wikipedia.org/wiki/$2
;;
arch)
proxychains4 -q w3m wiki.archlinux.org/title/$2
esac
}
whatime()
{
date +"%Y-%m-%d %H:%M"
}
一通り設定が終わると私の場合こうなる。
nh紹介動画でおなじみのNmapでdns.google.comを調べてみる、1つ注意点があり、ステルススキャンができない。Termux全般に言えることだが、端末自体はroot化されていない為、ステルススキャンを行う上で必要なSYNパケットを生成するソケットをNmapは使用できない。それどころかNmapは実行者がrootである事を検出すると自動でステルススキャン(-sS)を試みるがソケットを触れない以上Nmapはrootユーザーでは使用できない。そのため非rootユーザーでTCPスキャン(-sT)をを行いう必要がある。非rootユーザーのデフォルトは常に-sT
Nethunter Rootlessと同等のBlackArchを揃えることができた。しかしnhにはkex
と呼ばれるVNCサーバー機能があり、これによってグラフィカルなデスクトップ環境を提供している。
次号はVNC機能構築についてもトライしたい。
BlakArchの提供するツールはグールプ化されている。例えばpacman -S blackarch-scanner
と叩くと即座に各種スキャナーをインストールすることができる。
しかし、基本的にAndroidはAarch64ファミリーのCPUで動くためx86系ではない。もし仮にグルーピングされたパッケージにx86_64用依存関係が含まれていた場合、正常なインストールができないので(依存関係を調べ上げ、かつAURかgitから落としてパスを通せば別)欲しいパッケージが手に入らなかったりする。例えばMetasploitはx86_64パッケージとして用意されてるし、BlackArch環境を作るぐらいなら、nhを使った方が間違いなく早く手堅いと思う。だがnhは数年に1回の頻度でセットアップで難が出るので、fake root環境の再構築の度泣きを見るので、臨時でなら使えるかもしれない。PKGBUILDのアーキテクチャ指定を都度差し替えるのは中々骨が折れると思うが…