こんにちは、SSTでWeb脆弱性診断用のツール(スキャンツール)開発をしている坂本(Twitter, GitHub)です。
先日、お仕事で Raspberry Pi 4(以下「ラズパイ4」) を触る機会がありました。 WiFi接続設定, SSH/VNCの有効化, 有線LANの静的IP設定などを行いましたので、簡単ですがセットアップ記録として共有します。
なお今回ラズパイ4を触る目的としては、ラズパイ4をWiFi-AP化してスマホに接続し、スマホからのHTTP/HTTPS通信(tcp:80/443)を PC上のBurp の Invisible(透過型) Proxy Listener にiptablesでforwardするのがゴールです。 WiFi AP化以降の解説は以下の記事に分けましたので、そちらを参照してください: techblog.securesky-tech.com
- 使用した Raspberry Pi 4 : :Model B Starter Kit
- 初期セットアップ: キット組み立て ~ OS インストール
- システムのアップデート
- WiFi 接続
- SSH と VNC の有効化
- 有線LANへの静的IP設定
- まとめ
※本記事で紹介しているURLについては、2021-08-10時点のものになります。
使用した Raspberry Pi 4 : :Model B Starter Kit
今回使用したラズパイ4は以下のキットを使いました。
- TRASKIT Raspberry Pi 4 Model B Starter Kit
- メモリ4GB, 技適マーク付
- 同梱物:
- MicroSDHCカード64GB NOOBSプリインストール済み
- ネジ止め無しで取り付けられるクリアケース
- 5.1V/3A Type-C スイッチ付電源
- MicroHDMI-to-HDMIケーブル x 2
- ヒートシンク x 3
- 透明冷却ファン x 2
- GPIOリファレンスカード
- 日本語取扱説明書
初期セットアップ: キット組み立て ~ OS インストール
日本語取扱説明書に従い、ハードウェアを組み立てます。 ネジ止めが無いので、ドライバー不要で組み立てられます。
- ヒートシンクをラズパイ4の基板上のチップに貼り付けます。
- ヒートシンクの大きさごとに貼り付けるチップが異なります。
- 説明書の絵を見ながらやれば、どのチップにどのヒートシンクを貼り付ければいいか分かります。
- クリアケースの蓋に、冷却ファンを取り付けます。
- 冷却ファンが2個入ってましたが、1個しか取り付けられなかったため、残る1個は予備としておきました。
- 冷却ファンの取付方向(向き)についても説明書に赤字で注意書きがありますので、よく読みましょう。
- クリアケースの底を外し、ラズパイ4のボードを取り付けて、クリアケースに収めます。
- この辺りも説明書の絵を見ながらでできると思います。
- 冷却ファンの電源コードをラズパイ4のGPIOに接続します。
- 接続するPINによって低速/高速を切り替えられるようです。
- 説明書に、どのPINだと低速/高速になるか解説がありますので、それに従います。
- とりあえずそこまで負荷をかける用途では無いので、低速用のPINに接続しました。
- 蓋を締めて、付属の MicroSDHCカードを挿入して完成です。
- USBキーボードとマウスを接続し、MircroHDMI-to-HDMI ケーブルでディスプレイに接続します。
- 付属のTypc-C 電源を接続して電源ONします。
- MicroSDHC にプリインストール済みのインストーラ NOOBS が起動します。
- NOOBS から Raspbian (32bit) をインストールします。
- この辺りの流れも説明書にスクリーンショット付きで解説されてました。
- インストール後のガイドに従い、再起動や
pi
ユーザのパスワード設定を行い、OSセットアップ完了です。- インストール中、あるいはインストール後にタイムゾーン / キーボード / 国の設定をします。
- デスクトップメニュー →
Preferences
→Raspberry Pi Configuration
から各種設定を変更できます。 - 今回の設定:
- Locale: en_US, UTF-8 に設定
- キーボード :
Generic 105-key PC (intl.)
を選択、Layout
/Variant
共にJapanese
に設定し、日本語キーボードに対応させました。 - WiFi Country Code:
JP
に設定
- 同様の設定は
sudo raspi-config
→Localisation Options
からも設定可能です。
2021年7月時点の最新状況だと、OSの名前が「Raspbian」から 「Raspberry Pi OS」に変更され、インストーラも NOOBS から Raspberry Pi Imager が推奨になっているようです。 本キットは若干古い組み合わせを採用していますが、今回の用途としては問題ないためこのまま Raspbian (32bit) で進めます。
参考:
- Raspberry Pi Documentation
- https://www.raspberrypi.org/documentation/
- 各種ガイドが簡潔な英語文書で整理されています。
- かゆいところに手が届く感じで、細かいところまで解説があったりします。あれこれググる前/後とかで、あちこち見て回るのをオススメします。
- https://www.raspberrypi.org/software/operating-systems/
- 「圧倒的に速い」──ラズパイにOSをインストールする新ツール「Raspberry Pi Imager」:名刺サイズの超小型PC「ラズパイ」で遊ぶ(第21回)(1/2 ページ) - ITmedia NEWS
- Raspberry PIのインストール方法が変わりNOOBSが使えない - 直接ダウンロードしてインストールする方法 - Qiita
- Raspberry PiにNOOBSでOSをインストールする方法
システムのアップデート
Raspbian は Debian ベースのOSなので、 apt
コマンドでシステム更新を行います。
Terminal などのコマンドラインから以下を実行します。
$ sudo apt update $ sudo apt full-upgrade
rpi-update はしなくてOK
昔のドキュメントなどを見ると、firmware 更新のために sudo rpi-update
を実行しているケースがあります。
2021年7月時点では、このコマンドは動作が十分検証されていないソフトウェアをインストールするため、ラズパイの利用者向けとしては非推奨とされています。
ラズパイ自体の開発者向けという位置づけのようです。
そのため、今回は実行を見送りました。
- Updating and Upgrading Raspberry Pi OS > Using rpi-update
- やらないで!! rpi-update | ゆっくり遅報
- raspberrypiのOSを更新する方法 - Qiita
- Raspberry Pi の OS を最新の安定版にアップデートする(2020年7月版) - Qiita
※試しにやってみたりもしたのですが、今回のキットでは以下のような警告が表示されてしまいました。 OSインストールも終わった状態でSDカードのパーティションを操作するのは怖かったので、Nでキャンセルしました。
pi@raspberrypi:~ $ sudo rpi-update *** Raspberry Pi firmware updater by Hexxeh, enhanced by AndrewS and Dom *** Performing self-update *** Relaunching after update *** Raspberry Pi firmware updater by Hexxeh, enhanced by AndrewS and Dom *** We're running for the first time *** Backing up files (this will take a few minutes) *** Backing up firmware *** Backing up modules 5.10.17-v7l+ Partition size 255M may not be sufficient for new Pi4 files This could result in a system that will not boot. 256M FAT partition is recommended. Ensure you have a backup if continuing. Would you like to proceed? (y/N)
WiFi 接続
OSセットアップ完了後、まずは WiFi に接続してみました。 公式ドキュメントで詳しく解説されています。 英語ですが、メニュー名やコマンドなどから何をどうすれば良いのか、なんとなく分かると思います。
- デスクトップからWiFi接続する公式ドキュメント(英語) : Configuring Networking > Using the Desktop
- コマンドラインからWiFi接続する公式ドキュメント(英語) : Configuring Networking > Using the Command Line
なお、今回の接続先はSSIDをブロードキャストしていない「ステルスSSID」でした。 デスクトップからはSSIDが表示されないため、デスクトップから Terminal を起動してコマンドラインから設定しました。
pi@raspberrypi:~ $ wpa_passphrase MyStealthSSID # reading passphrase from stdin (ステルスSSIDのパスワードを入力) network={ ssid="MyStealthSSID" #psk="(...)" psk=ceebe8478a30b4f42d766300b63bb64ca04d1d9f63ea24c94397023efce979e7 }
→ #psk=...
の行を削除し、 /etc/wpa_supplicant/wpa_supplicant.conf
に追記します。
ステルスSSID の場合は scan_ssid=1
を挿入します。
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 country=JP network={ ssid="MyStealthSSID" scan_ssid=1 psk=ceebe8478a30b4f42d766300b63bb64ca04d1d9f63ea24c94397023efce979e7 }
ラズパイを再起動 (sudo reboot
) し、ステルスSSIDに接続してインターネットに接続できることを確認します。
ステルスSSIDへの接続の参考資料:
Configuring Networking > Using the Command Line
- https://www.raspberrypi.org/documentation/computers/configuration.html#using-the-command-line
- コマンドラインでのWiFi接続設定全般が書かれている。
- まずは "Using raspi-config" セクションを参照し、
Localisation Options
->Change wireless country
で国コードを設定。 - ステルスSSIDへの接続は "Hidden networks" セクション参照。
- 全体的な手順としては、
wpa_passphrase <ssid>
で生成された設定テキストにscan_ssid=1
を追加したものを/etc/wpa_supplicant/wpa_supplicant.conf
に追記する。
Raspberry Pi4でステルス設定のSSIDのWifiへの接続方法 - PokuG stdio.h
Raspberry Pi ステルスSSIDへの接続方法 - Qiita
ステルスSSIDのセキュリティ効果について
自宅の WiFi-AP ですが、近所からの不正利用を防ぐ意図でステルスSSIDを設定していたのですが・・・今回、ステルスSSIDへの接続設定の記事を調べる中で、あまり効果がないという記述に遭遇し、改めて調べてみました。
Wi-Fiアクセスポイントには「ステルスSSID」を設定しないほうが省エネ? - いまさら聞けないiPhoneのなぜ | マイナビニュース
SSIDステルスなら安全? 設定方法とメリット・デメリット:株式会社 日立ソリューションズ・クリエイト
無線LANルーターのSSIDはステルスにした方が良いのでしょうか? [更新] | サイバーセキュリティ情報局
Wi-Fiの名前を隠す「ステルスSSID」は使わないほうが良い?(PHILE WEB) - Yahoo!ニュース
上記の資料によると、たしかにWiFi-AP自身からSSIDを広告することは無くなります。 一方でステルスSSIDを設定したクライアント側が、外に持ち出すなどしてWiFiに再接続しようとしたときにプローブ要求を出し、その際に設定済みのステルスSSIDが周囲に漏洩する可能性があるようです。
全体的に、ステルスSSIDだからといってセキュリティが堅牢になることは無いようなので、隠してるからといって安易なパスワードを設定しないよう注意した方が良さそうです。
SSH と VNC の有効化
WiFi接続で自宅のネットワークに接続できましたので、PCから SSH/VNC でラズパイにログインできるようにします。
- デスクトップから
- デスクトップメニュー →
Preferences
→Raspberry Pi Configuration
→Interfaces
から SSH, VNC を "Enable" に切り替えます。
- デスクトップメニュー →
- コマンドラインから
sudo raspi-config
→Interface Options
から SSH, VNC を有効化します。
念の為 sudo reboot
で再起動して、PCから pi
ユーザでSSHログインできるか確認します。
VNCについては VNC Viewer をインストールして、同様に pi
ユーザでログインできるか確認します。
今回は無事SSH/VNCでアクセスできました。
このタイミングでHDMIケーブル未接続でも起動して、VNC経由でデスクトップアクセスできるようにします。
デフォルトではHDMIケーブル未接続で起動 → VNC接続すると、VNCの画面には次のエラーメッセージが表示されます。
Cannot currently show the desktop
デスクトップを表示するために、SSHで接続して /boot/config.txt
を編集し、 hdmi_force_hotplug=1
を有効にします。
$ sudo vi /boot/config.txt ... # uncomment if hdmi display is not detected and composite is being output #hdmi_force_hotplug=1 # ↑このコメントを外す↓ hdmi_force_hotplug=1 ... $ sudo reboot
再起動がしばらく時間がかかりますが、5分くらいそっとしておいてからVNC接続すると、正常にデスクトップ画面が表示されました。
参考資料:
- Raspberry Pi Documentation - Configuration
- https://www.raspberrypi.org/documentation/computers/configuration.html
- 設定メニューが一通り説明されています。
- Raspberry PiのSSH設定方法 - Qiita
- Raspberry Pi 4にSSHとVNCで接続してみた | DevelopersIO
- https://dev.classmethod.jp/articles/raspberry-pi-4-ssh-vnc-remote/
- HDMIケーブルを接続していない状態で起動する場合の設定変更や、VNC接続したときの解像度変更の方法などが解説されている。
- Raspberry Pi 4でディスプレイを繋がずにVNCする - Qiita
- VNCでRaspberry Piにリモートデスクトップ接続 (Windows/Mac/Linux対応)
- https://www.indoorcorgielec.com/resources/raspberry-pi/raspberry-pi-vnc/
- Mac, Linux でのやり方が解説されている。
セキュリティ観点での堅牢化
リモートでラズパイアクセス可能にすると、セキュリティ観点での堅牢化(hardening) を検討したいところです。
・・・とはいえ、今回はお仕事でごく短期間、技術検証用途で稼働させるだけです。 その後も、ごく短期間(数時間~数日)だけ自宅NW内限定で動かすことになりそうで、用途としても何かサービスを動かすわけではなく、WiFi-AP化したり、あとはIoTの勉強などに使う程度を予定しています。 外部からの不正アクセスのリスクは低いものと考えられます。
ということで、今回はセキュリティ観点での堅牢化はスキップしました。
参考資料:
- Raspbian初期設定(RaspberryPi4) - Qiita
- https://qiita.com/legitwhiz/items/bc897259b27f3c0e7aa0
- rootパスワードを設定, ログイン用のユーザを別途追加, pi ユーザを削除, SSH設定のhardening, 自動更新設定, Bluetooth 無効化など全体的に堅牢化を意識した記事になっている。
有線LANへの静的IP設定
今回ラズパイ4をセットアップした目的は、WiFi-AP化です。 そのため自宅のネットワークには有線LANで接続できるように切り替えます。 また、この際なので有線LANに静的IPを設定し、PCから常に同じIPでSSH/VNC接続できるようにします。
$ ip link (... 有線LANのインターフェイス名を確認, 今回は "eth0" ...) $ sudo vi /etc/dhcpcd.conf ... # 以下を追記, IPアドレスは実際の自宅ネットワークに応じて調整。 interface eth0 static ip_address=192.168.0.4/24 static routers=192.168.0.254 static domain_name_servers=192.168.0.254 8.8.8.8 $ sudo reboot
再起動後、PCから静的IPアドレス宛にSSH/VNC接続に成功しました。
詳細は公式ドキュメントを参照してください:
まとめ
TRASKIT Raspberry Pi 4 Model B Starter Kit をセットアップしました:
- ハードウェア組み立て
- SDカードからNOOB 起動 → Raspbian (32bit) インストール
- Raspbian の基本設定(言語, キーボード, WiFi の国コード)
- WiFi 接続 (ステルスSSID)
- SSH, VNC 有効化, HDMIケーブル未接続でもVNC経由でデスクトップアクセス可能に。
- 有線LAN(eth0) で静的IPアドレス設定
あらためて、今回ラズパイ4を触る目的は以下になります:
- ラズパイ4をWiFi-AP化してスマホから接続する。
- スマホからのHTTP/HTTPS通信(tcp:80/443)を PC上のBurp の Invisible(透過型) Proxy Listener にiptablesでforwardする。
これにより、スマホ側で特にProxy設定をすることなく、HTTP(S)通信を Burp でキャプチャできること *1 を目指します。 詳細は記事を分けて、以下で解説していますのでそちらを参照してください: techblog.securesky-tech.com
*1: Burp のルートCA証明書のインストールは必要