Chapter 04

構築手順の解説(Linux編)

yutafujii
yutafujii
2021.07.08に更新

さて,ここからは前の章で紹介した構築手順について,周辺知識も含めて解説していこうと思います.この章ではLinuxに関する部分をいくつか取り上げます.

  • Kali Linuxとは
  • Linuxのディレクトリ構成
  • ドライバ

Kali Linuxとは

Kali LinuxとはDebianベースのLinuxの一種で,ペネトレーションテストなどセキュリティに関する様々な処理に向いているOSです.

Kali Linux is an open-source, Debian-based Linux distribution geared towards various information security tasks, such as Penetration Testing, Security Research, Computer Forensics and Reverse Engineering.

公式サイト

ネットワークに関連する脆弱性を見つけるために便利なツールも最初から多数備わっており,たとえばWiresharkも最初からインストールされています.ネットワークやセキュリティの勉強をするには非常に有益なOSです.ちなみに類似OSにはParrotOSというのもあり,こちらも気になる人は使ってみてください(私はVMで利用した程度ですが,何より背景画像が美しい).

もちろん今回のWiFiアクセスポイント構築において,Kali Linuxである必要はありませんし,その場合の手順も基本的に変わらないと考えています.

Linuxディレクトリ構造

"Everything in Linux is a file." という言葉の通り,Linuxでは全てのものがファイルとして扱われます.物理デバイスは /devにファイルとして仮想化され,プロセスはシステムリソースは/procにファイルとして仮想化されています.

ディレクトリ基本構成

Directory Explanation
/ ディレクトリ構造のルート
/boot OSのブートイメージが格納される
/sbin 通常システム管理者が利用するコマンド.実態は/usr/sbinであることも
/bin ps, lsなどユーザーが利用する各種コマンド.実態は/usr/binであることも
/home 各ユーザーのホームディレクトリ
/root ルートユーザーのホームディレクトリ
/var 様々な(variable)動的ファイルが保存されるべきところ.ログファイルが代表例
/etc 設定(configuration)ファイルが保管されるべきところ.各種 .confが代表例
/dev 物理デバイスのマウントポイント
/lib 起動時や各コマンド実行に必要な共通ライブラリ./lib/modulesはカーネルモジュールを保管
/usr よりユーザーレベルのライブラリやconfigなど.ミニLinuxのようなディレクトリ
/opt 静的なアドオンパッケージを保管.自作したバイナリを保存するのに使うなど.
/proc プロセスとシステムリソース状況が保存される仮想フォルダ

本書の手順の中で触れることがある部分は以下の通りです

  • /etc DNSやHostapdなど各種設定ファイルを管理する
  • /lib/modules/ ドライバを保存し読み込む
  • /proc/sys/net IPレイヤの挙動を変更する

ちなみにディレクトリ構成について理解するにはLinuxの man hier コマンドが非常におすすめです.

ドライバ

driverとはハードウェアを動かすためのソフトウェアです.

今回TP-Linkというネットワークアダプタを利用してWiFiをホスティングしましたが,このハードウェアを動かすためにソフトウェアとしてaircrack-ngの8188eusというドライバをローカル上でコンパイル・インストールしました(ソースコードはGitHubに存在).

Windowsでは外部機器を購入するたびにCDでドライバをインストールすることも多いのですが,Linuxではあまりそのようなことはありません.これはLinuxがOSSで開発されているからで,周辺機器大手メーカーはLinux用のドライバを合わせて開発し,ライブラリとして追加していきます.だからよく使う機器は購入後すぐLinuxに繋げて使えることが多いのです.

今回そうはいかなかった背景を少し説明します.

そもそも何故ネットワークアダプタを購入する必要があったのか

今回はTP-Linkというネットワークアダプタを購入しましたが,Raspberry PiにもWiFiチップは最初からついています.

ではなぜこれを使わなかったのかというと,Raspberry Piボードに内蔵のWiFiチップはアクセスポイントをホストすることができないからです.


[2021/07/08追記]
読者の方からご指摘があり再度確認したところ,ボード内蔵のWiFiチップはMasterモードで正しく稼働することがわかり,アクセスポイントをホストできないという主張は誤りでした(内蔵チップが動作しないのはMonitorモードです).失礼いたしました.

今回のWiFi構築では,2つのワイヤレスネットワークインターフェイスを用いてパケットをインターネットにパススルーしていくという内容からも,内蔵WiFiチップの他にもう一つネットワークアダプタが必要になるため,引き続き以降ではTP-Linkを購入しての構築を前提に記載させていただきます.


WiFiをホスティングするにはnetwork interfaceがMasterモードで動く必要があるのですが(モードについてはすぐ後で述べます),内蔵WiFiチップはそのモードに対応していないため,自身がアクセスポイントとなることができないのです.

ちなみに市販のWirelessネットワークアダプタには同じくMasterモードに対応していない製品があるので,購入の際はご注意ください(私はそれで1つ無駄にしました).

手順にある「同一名称のドライバを削除する」はなぜ必要だったのか?

そもそもネットワークアダプタには起動モードが複数あります.

Mode Explanation
Managed アクセスポイントに接続する
Master 自身がアクセスポイントとして振る舞う
Monitor 受信するパケットをモニタする
Ad-Hoc (省略)
Secondary (省略)
Repeater (省略)
Auto (省略)

詳細はman iwconfigで確認できる.また全てのWireless NIC(Network Interface Card)がどのモードで動いているかは iwconfigで確認できる.

確かにKali Linuxには最初からRealtek社チップで動くネットワークアダプタを動かすためのドライバがインストールされていました.しかしそのドライバはManagedモードしか利用できないようになっておりました.

一方今回はMasterモードを利用したかったので,既存のドライバは /lib/modules/.../kernel/drivers/net/wireless から除いておく必要があったというわけです.

ちなみにMonitorモードはアダプタをアンテナのように使い飛んでいる電波をキャッチするモードで,自身が管理しているWiFiであればWiFiのパスワードクラッキングを実際に試すことも可能です.TP-LinkのアダプタはMonitorモードにも対応しているので,セキュリティに関心がある方は具体的な利用方法を(必ず)確認した上で使ってみても良いと思います.

ドライバがうまく動かないとき

TP-Linkがうまく動かない時は以下のような点を順に確認していただければと思います.

1.Raspberry Piが正しく機器TP-Linkを認識できているか→lsusb

$ lsusb
...
Bus 001 Device 003: ID 2357:010c TP-Link TL-WN722N v2/v3 [Realtek RTL8188EUS]

これが出てこない場合はそもそもデバイスをKernelが認識できていないので,USBの接続や延長ケーブルが挿しているポート(USB3.0など)に対応しているかなど確認してみてください.

2.ドライバは合っているか→airmon-ng

$ airmon-ng
PHY	Interface	Driver		Chipset
phy0	wlan0		8188eu		TP-Link TL-WN722N v2/v3 [Realtek RTL8188EUS]
phy1	wlan1		brcmfmac	Broadcom 43430

ネットワークアダプタをUSBに挿した状態で実行してください.詳細は省きますが,これはネットワーク系の脆弱性テストで利用されるライブラリのコマンドです.このコマンドはKali Linuxを使っていない場合はインストールする必要があると思われます.

実行結果には各WiFiチップに対応するドライバが表示されます.TP-Linkで私が購入したものは8188euですが,もしこれと異なるドライバが表示されていたら,本書と異なるドライバを自身でビルド・インストールしてみてください.

3.ドライバをカーネルが認識できているか→lsmod, modprobe

$ lsmod
...
binfmt_misc            24576  1
brcmfmac              339968  0
8188eu               1355776  0
brcmutil               24576  1 brcmfmac
cfg80211              798720  2 8188eu,brcmfmac
...

カーネルのモジュールをリスト表示します.ここに「8188eu」がない場合は,カーネルがドライバを認識できていません.以下コマンドでカーネルモジュールにドライバを追加してみてください.

$ modprobe 8188eu

逆に,lsmodでは「8188eu」が表示されているのに,その後のホスティングが上手くいかないという時は初期インストールされている同一名称の「8188eu」ドライバが残っているか確認し,残っていたら削除してください.また,念の為一度 rmmod 8188eu を実行してカーネルモジュールから除いてください(このコマンドはドライバ自体は削除しませんのでご安心を)