1. FlatSatを買ったので、日本で安全に使うための予習ロードマップを整理してみた
衛星セキュリティ教材として使われている「FlatSat」を購入した。
まだ発送時期は分からないのだけれど、今後FlatSatを実際に触ったり、人に説明したりする機会が増えそうなので、必要になってから初めて触るのではなく、今のうちから少しずつ理解しておこうと思った。
そこで始めるのが、この「FlatSat実験ノート」。
FlatSatを実際に触りながら、
衛星通信
CCSDS
ファームウェア
セキュリティ
CTF的な攻撃演習
SDR・無線
日本の技適や電波法
などを調べた記録を残していくつもりだ。
ただし、最初に一つ重要な方針を決めた。
日本国内で合法的に送信できることが確認できるまでは、FlatSatから電波を出さない。
今回は、この前提で「実機が届く前から何を勉強しておくか」を整理してみる。
そもそもFlatSatとは?
FlatSatは、ざっくり言えば机の上で動かせる模擬人工衛星だ。

RP2040を中心とした小さな基板にLoRa無線やセンサーなどを搭載しており、衛星通信で使われるCCSDS(Consultative Committee for Space Data Systems)のSpace Packet Protocolなども扱える。
さらにPwnSatの教材として、セキュリティ演習を行えるようになっている。
公開されている教材を見ると、
APID Enumeration
Eavesdropping
Fuzzing
Command Injection
GPS Spoofing
Authentication Spoofing
Replay
RESET Command
といった内容が用意されている。
単なる「LoRaを触る電子工作キット」というより、
衛星システムを題材に、通信・プロトコル・ファームウェア・セキュリティを横断して学ぶための実験環境
と考えるのが近そうだ。
でも、日本ではいきなりRFを使わない
FlatSatにはLoRa通信機能がある。
ここで気を付けなければならないのが、日本の電波法と技適だ。
海外でISMバンドとして使われている周波数であっても、
「海外で免許不要だから、日本でもそのまま使える」
とは限らない。
周波数だけでなく、送信電力、帯域幅、送信制御、無線設備そのものの技術基準適合なども関係する。
そのため、FlatSatが到着しても、
とりあえずアンテナを付けて電源ON!
とはしないつもりだ。
アンテナを外しておけばいい、という考え方でもなく、可能ならファームウェア側からRF送信そのものを無効化しておきたい。
まず作りたい「RF Disabled」環境
実機が届く前に、FlatSatの公開ファームウェアを読んで、
Radioの初期化
Telemetryの無線送信
LoRa TX
自動送信処理
などがどこで行われているか確認する。
そして可能なら、自分用に
Japan / RF Disabled Buildのようなファームウェアを作っておきたい。
イメージとしては、
USB CDC : ON
Sensors : ON
CCSDS / SPP : ON
LoRa TX : OFF
Auto RF TX : OFFという状態。
つまり、
「送信コマンドを使わなければ電波は出ない」
ではなく、
「そもそも送信できない状態で起動する」
ところから始める。

Phase 1:実機が届く前に技適を調べる
実機が届くまで何もしないのはもったいない。
むしろ今のうちに調べたいのが、日本でFlatSatのRF機能を合法的に使える可能性だ。
確認したい項目はかなりある。
FlatSatのHardware Revision
搭載されている無線チップ/モジュール
使用周波数
最大送信電力
占有周波数帯幅
LoRaの変調パラメータ
アンテナ仕様
キャリアセンス
送信時間制御
日本の920MHz帯の技術条件
技術基準適合証明を1台だけ取得できるか
技適未取得機器を用いた実験等の特例制度を利用できるか
など。
幸い、FlatSatはハードウェアやファームウェアの情報が公開されている。
実機がなくても、かなりの部分までは調べられそうだ。
技適調査用の資料もまとめておく
自分のPCに、こんなフォルダを作る予定。
FlatSat Japan Compliance/
│
├─ Hardware/
│ ├─ Schematic
│ ├─ BOM
│ └─ Hardware Revision
│
├─ Radio/
│ ├─ Radio Datasheet
│ ├─ Frequency
│ ├─ TX Power
│ ├─ Bandwidth
│ ├─ Modulation
│ └─ Antenna
│
├─ Firmware/
│ ├─ Radio configuration
│ ├─ TX control
│ └─ Firmware Version
│
└─ Certification/
├─ ARIB
├─ 技適
├─ 登録証明機関
└─ 実験等の特例制度最終的には、登録証明機関などに相談するときに、
「この無線機器はこういう仕様です」
と説明できるところまで整理したい。
もしFlatSatが届く前に技適取得などの見込みが立てば、その段階からRFを使った実験計画も考える。
逆に難しそうなら、無理にRFを使わない。
Phase 2:CCSDSを予習する
FlatSatで一番勉強しておきたいものの一つがCCSDS。
特にSpace Packet Protocol(SPP)。
ざっくりしたイメージは、
Ground Station
│
│ Telecommand
▼
FlatSat
│
│ Telemetry
▼
Ground Stationというもの。
Space Packetには、
Packet ID
Sequence Control
Packet Length
Data Fieldなどが含まれる。
FlatSatではAPID(Application Process Identifier)によってコマンドなどの処理を振り分ける。
まずは、
「APIDって何?」
と聞かれたときに、30秒くらいで説明できるようになることを最初の目標にする。

Phase 3:PC側の環境を準備する
FlatSatが届く前に、Windows側の準備もしておく。
今のところ、
Git
Python 3
Arduino IDE 2.x
VS Code
あたりを使う予定。
GitHubからFlatSatとPWNSAT-C3のリポジトリも取得して、
PwnSatLab/
├─ FlatSat/
└─ PWNSAT-C3/という感じでまとめておく。
実機がなくても、攻撃スクリプトやファームウェアを読むことはできる。
届いてからGitHubを探し始めるより、先に構造を把握しておいた方が楽だろう。
Phase 4:実機が届いたら、まずRF OFF
FlatSatが届いたら最初に確認したいのは、
Hardware Revision
搭載RF部品
アンテナ
Firmware Version
USB認識
Serial通信
センサー
Telemetry
など。
ただし、ここでもRF送信はしない。
まずは、
PC
│
│ USB
▼
FlatSatという構成だけで動かす。
可能であればSDRなども使って、
意図しないRF送信が発生していないこと
まで確認してみたい。

Phase 5:最初は「正常系」を理解する
セキュリティ教材だからといって、いきなり攻撃するのは避ける。
まずは通常の利用者として、
PING
Telemetry
RESET
CCSDS Packet
APID
Sequence
などを確認する。
正常な状態を理解していなければ、異常な状態を見ても何がおかしいのか分からない。
これは普通のペネトレーションテストでも同じだと思う。
Phase 6:APID Enumeration
正常系が分かったら、最初に試してみたいのがAPID Enumeration。
例えば、
APID 0x00
APID 0x01
APID 0x02
APID 0x03
...と調べていき、
応答する
コマンドが実装されている
未実装
無反応
などを分類する。
これは、
仕様書を持っていない衛星をブラックボックスとして偵察する
ような演習になる。
FlatSatで最初にやるセキュリティ演習として、かなり面白そうだ。
もちろん最初はUSB経由で行う。
Phase 7:Command InjectionとReplay
次に試したいのがCommand Injection。
例えば、
SET_THRUSTER
RESETなどのTelecommandを作る。
ここで考えたいのは、
正しい形式のコマンドなら、誰が送信したものでも実行していいのか?
という問題。
その次はReplay。
正常なTelecommand
↓
記録
↓
再送
↓
再び実行されるという流れを見る。
ネットワークセキュリティではおなじみの考え方だけれど、衛星を題材にするとかなり新鮮そうだ。
Phase 8:Fuzzing
その次はFuzzing。
CCSDS Packetの、
APID
Length
Sequence
Payload
などを意図的に変化させる。
Malformed Packet
↓
Parser
↓
Unexpected Value
↓
Crash / Abnormal Behaviorという流れを確認する。
ここでは単に、
「落ちた!」
で終わらせない。
最終的にはソースコードを追って、
なぜその入力でクラッシュするのか
まで理解したい。
Phase 9:ファームウェアを読む
ある程度動作を理解したら、FlatSatのファームウェアを本格的に読む。
最終的には、
CCSDS/SPPの仕様
FlatSat Firmware
Ground Station側
Radio部分
を切り分けられるようになりたい。
何か動かなかったときに、
「これはLoRaの問題ではない」
「CCSDS Packetまでは正常に来ている」
「APID Handler以降がおかしい」
と考えられるところまで行ければ理想的。
Parallel Phase:RFを合法的に使える方法を探す
USBを中心とした学習とは別に、RFについては並行して調査する。
流れとしては、
FlatSatのRF仕様を確認
↓
日本の技術基準と比較
↓
不足情報を整理
↓
必要ならメーカーにも確認
↓
登録証明機関などへ相談
↓
合法的に送信できる方法を検討という感じ。
そして、ここで分岐する。

RFを使える見込みが立った場合
技適取得など、合法的に送信できる条件が整ったら、
USB only
↓
RF基本動作
↓
LoRa Telemetry
↓
RF Command
↓
RF Attackへ進みたい。
その段階で、
SDR受信
Uplink / Downlink
RF版APID Enumeration
RF Command Injection
RF Replay
Eavesdropping
などを試す。
RFを使うのが難しかった場合
無理に使わない。
FlatSatには、RFを使わなくても学べることがかなりある。
USB
CCSDS
Firmware
Attack Scripts
Protocol解析
SDRによる受信などを中心に進めればいい。
つまりRFは、
FlatSat学習のスタート地点ではなく、条件が整った場合に追加するレイヤ
と考えることにした。
今の優先順位
現時点では、こんな感じ。
★★★★★ 技適・RF仕様調査
★★★★★ RF Disabled環境の構築
★★★★★ CCSDS / Space Packet Protocol
★★★★★ USB通信
★★★★★ APID Enumeration
★★★★★ Command Injection
★★★★☆ Replay
★★★★☆ Firmware解析
★★★☆☆ Fuzzing
------ RF利用可能確認後 ------
★★★☆☆ SDR / LoRa
★★★☆☆ RF Command
★★★☆☆ RF Attack
★★☆☆☆ HackRF
★★☆☆☆ GPS Spoofing以前なら無線機器なのだから、まず電波を出して試したくなるところ。
今回は逆に、
「まず電波を出さない」ことを最初の技術課題
にしてみる。
FlatSatが届くまでにやっておきたいこと
当面の目標は、
CCSDS/SPPの基礎を理解する
FlatSatのGitHubを読む
RF送信部分を特定する
RF Disabled版の作り方を考える
FlatSatのRF仕様を整理する
日本の技術基準と比較する
技適取得などの可能性を調べる
ところまで。
実機が届いたら、
RF OFF
↓
USB接続
↓
正常系の確認
↓
CCSDS
↓
Attack
↓
Firmware解析と進める。
その間に合法的なRF利用の見込みが立てば、
RF OFF
↓
条件確認
↓
RF ON
↓
無線実験へ進む。
海外製セキュリティ教材を「日本で使う」ところまで含めて実験する
FlatSatを買った目的は、単にCTFの問題を解くことだけではない。
衛星セキュリティ、CCSDS、組み込み、LoRa、SDRなどを横断して理解していきたい。
そして今回は、それにもう一つ、
「海外製の無線セキュリティ教材を、日本で合法的かつ安全に使うにはどうすればいいのか」
というテーマも加わった。
実際に調べていけば、技適について勘違いしていたことや、想定していなかった問題も出てくるかもしれない。
その過程も含めて、この「FlatSat実験ノート」に残していく。
さて。
FlatSatが届くのが先か、技適についてある程度の結論が出るのが先か。
まずは、CCSDSとファームウェアを読むところから始めてみようと思う。
続きはこちら!
いいなと思ったら応援しよう!
よろしければ応援お願いします! いただいたチップは活動費に使わせていただきます!