SSTによる安全なWebサイト運営のためのセキュリティ情報

エンジニアブログ
  • shareSNSでシェア
  • Facebookでシェアする
  • Xでシェアする
  • Pocketに投稿する
  • はてなブックマークに投稿する

Raspberry Pi 4 Model B Starter Kit のセットアップ記録

こんにちは、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化以降の解説は以下の記事に分けましたので、そちらを参照してください:
Raspberry Pi 4 を使ったスマホ向け透過型Proxy環境の構築

※本記事で紹介している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 インストール

日本語取扱説明書に従い、ハードウェアを組み立てます。
ネジ止めが無いので、ドライバー不要で組み立てられます。

  1. ヒートシンクをラズパイ4の基板上のチップに貼り付けます。
    • ヒートシンクの大きさごとに貼り付けるチップが異なります。
    • 説明書の絵を見ながらやれば、どのチップにどのヒートシンクを貼り付ければいいか分かります。
  2. クリアケースの蓋に、冷却ファンを取り付けます。
    • 冷却ファンが2個入ってましたが、1個しか取り付けられなかったため、残る1個は予備としておきました。
    • 冷却ファンの取付方向(向き)についても説明書に赤字で注意書きがありますので、よく読みましょう。
  3. クリアケースの底を外し、ラズパイ4のボードを取り付けて、クリアケースに収めます。
    • この辺りも説明書の絵を見ながらでできると思います。
  4. 冷却ファンの電源コードをラズパイ4のGPIOに接続します。
    • 接続するPINによって低速/高速を切り替えられるようです。
    • 説明書に、どのPINだと低速/高速になるか解説がありますので、それに従います。
    • とりあえずそこまで負荷をかける用途では無いので、低速用のPINに接続しました。
  5. 蓋を締めて、付属の MicroSDHCカードを挿入して完成です。
  6. USBキーボードとマウスを接続し、MircroHDMI-to-HDMI ケーブルでディスプレイに接続します。
  7. 付属のTypc-C 電源を接続して電源ONします。
  8. MicroSDHC にプリインストール済みのインストーラ NOOBS が起動します。
  9. NOOBS から Raspbian (32bit) をインストールします。
    • この辺りの流れも説明書にスクリーンショット付きで解説されてました。
  10. インストール後のガイドに従い、再起動や pi ユーザのパスワード設定を行い、OSセットアップ完了です。
    • インストール中、あるいはインストール後にタイムゾーン / キーボード / 国の設定をします。
    • デスクトップメニュー → PreferencesRaspberry Pi Configuration から各種設定を変更できます。
    • 今回の設定:
      • Locale: en_US, UTF-8 に設定
      • キーボード : Generic 105-key PC (intl.) を選択、Layout / Variant 共に Japanese に設定し、日本語キーボードに対応させました。
      • WiFi Country Code: JP に設定
    • 同様の設定は sudo raspi-configLocalisation Options からも設定可能です。

2021年7月時点の最新状況だと、OSの名前が「Raspbian」から 「Raspberry Pi OS」に変更され、インストーラも NOOBS から Raspberry Pi Imager が推奨になっているようです。
本キットは若干古い組み合わせを採用していますが、今回の用途としては問題ないためこのまま Raspbian (32bit) で進めます。

参考:

システムのアップデート

Raspbian は Debian ベースのOSなので、 apt コマンドでシステム更新を行います。

Terminal などのコマンドラインから以下を実行します。

$ sudo apt update
$ sudo apt full-upgrade

rpi-update はしなくてOK

昔のドキュメントなどを見ると、firmware 更新のために sudo rpi-update を実行しているケースがあります。

2021年7月時点では、このコマンドは動作が十分検証されていないソフトウェアをインストールするため、ラズパイの利用者向けとしては非推奨とされています。

ラズパイ自体の開発者向けという位置づけのようです。

そのため、今回は実行を見送りました。

※試しにやってみたりもしたのですが、今回のキットでは以下のような警告が表示されてしまいました。
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 に接続してみました。
公式ドキュメントで詳しく解説されています。
英語ですが、メニュー名やコマンドなどから何をどうすれば良いのか、なんとなく分かると思います。

なお、今回の接続先は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への接続の参考資料:

ステルスSSIDのセキュリティ効果について

自宅の WiFi-AP ですが、近所からの不正利用を防ぐ意図でステルスSSIDを設定していたのですが・・・今回、ステルスSSIDへの接続設定の記事を調べる中で、あまり効果がないという記述に遭遇し、改めて調べてみました。

上記の資料によると、たしかにWiFi-AP自身からSSIDを広告することは無くなります。
一方でステルスSSIDを設定したクライアント側が、外に持ち出すなどしてWiFiに再接続しようとしたときにプローブ要求を出し、その際に設定済みのステルスSSIDが周囲に漏洩する可能性があるようです。

全体的に、ステルスSSIDだからといってセキュリティが堅牢になることは無いようなので、隠してるからといって安易なパスワードを設定しないよう注意した方が良さそうです。

SSH と VNC の有効化

WiFi接続で自宅のネットワークに接続できましたので、PCから SSH/VNC でラズパイにログインできるようにします。

  • デスクトップから
    • デスクトップメニュー → PreferencesRaspberry Pi ConfigurationInterfaces から SSH, VNC を “Enable” に切り替えます。
  • コマンドラインから
    • sudo raspi-configInterface 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接続すると、正常にデスクトップ画面が表示されました。

参考資料:

セキュリティ観点での堅牢化

リモートでラズパイアクセス可能にすると、セキュリティ観点での堅牢化(hardening) を検討したいところです。

・・・とはいえ、今回はお仕事でごく短期間、技術検証用途で稼働させるだけです。
その後も、ごく短期間(数時間~数日)だけ自宅NW内限定で動かすことになりそうで、用途としても何かサービスを動かすわけではなく、WiFi-AP化したり、あとはIoTの勉強などに使う程度を予定しています。
外部からの不正アクセスのリスクは低いものと考えられます。

ということで、今回はセキュリティ観点での堅牢化はスキップしました。

参考資料:

有線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 をセットアップしました:

  1. ハードウェア組み立て
  2. SDカードからNOOB 起動 → Raspbian (32bit) インストール
  3. Raspbian の基本設定(言語, キーボード, WiFi の国コード)
  4. WiFi 接続 (ステルスSSID)
  5. SSH, VNC 有効化, HDMIケーブル未接続でもVNC経由でデスクトップアクセス可能に。
  6. 有線LAN(eth0) で静的IPアドレス設定

あらためて、今回ラズパイ4を触る目的は以下になります:

  1. ラズパイ4をWiFi-AP化してスマホから接続する。
  2. スマホからのHTTP/HTTPS通信(tcp:80/443)を PC上のBurp の Invisible(透過型) Proxy Listener にiptablesでforwardする。

これにより、スマホ側で特にProxy設定をすることなく、HTTP(S)通信を Burp でキャプチャできること *1 を目指します。
詳細は記事を分けて、以下で解説していますのでそちらを参照してください:
Raspberry Pi 4 を使ったスマホ向け透過型Proxy環境の構築

 

*1: Burp のルートCA証明書のインストールは必要

  • shareSNSでシェア
  • Facebookでシェアする
  • Xでシェアする
  • Pocketに投稿する
  • はてなブックマークに投稿する

この記事の筆者

筆者

坂本昌彦

SSTでWeb脆弱性診断用のツール(スキャンツール)開発をしています。
Twitter: https://twitter.com/msakamoto_sf
GitHub: https://github.com/msakamoto-sf/