Chapter 16
ファジングと堅牢性・長時間試験 — 想定外で壊れないか
この章のゴール.
正常系ではなく異常系・極限で機器がどう振る舞うかを体系的に試す——入力ファジング、 リソース枯渇、電源・環境ストレス、そして長時間流し続けるソーク試験。 生成 AI 製ファームが最も転びやすい領域を、外から追い込めるようになること。
この章で使う既出の用語(定義は各リンク先). USB(01 章 2 節)、オラクル(01 章 8 節)、記録(01 章 4 節)、UART(05 章 1 節)、グレーボックス(08 章)、接続(09 章 2 節)、ファジング(10 章)
1. 生成 AI 製ファームの弱点は「例外」
生成 AI はハッピーパス(正常な使い方)を書くのは得意だが、想定外——不正入力、溢れ、枯渇、長時間、電源異常——の処理を抜かしがちである。ブラックボックスの堅牢性テストは、この例外の谷を狙って突き落とす作業だといえる。10 章(BLE ファジング)を一般化し、あらゆる入口・資源・環境に広げる。
2. 入力ファジング — あらゆる入口に
10 章の 4 軸(値の境界・型/書式・順序・タイミング)を、機器のすべての入口に適用する。
- 入口の棚卸し: UART コマンド、BLE/Wi-Fi、USB、ボタン列、設定ファイル、ファーム更新パッケージ……。13 章までで見つけた面を全部並べる
- 境界を撃つ: 長さ 0/最大/最大+1、最小値/最大値、空・NUL・巨大、壊れたチェックサム
- 道具:
boofuzz(プロトコルを記述して自動生成)、AFL 系の発想(カバレッジ誘導、グレーボックスなら 08 章の観測と組む)、自作ファザ(10 章の型)
生存確認(10 章)はここでも命綱。撃つたびに「まだ生きているか」を別経路で確かめ、落ちた瞬間の入力を保存する(再現できないバグは直せない、02 章)。
3. リソース枯渇 — 溢れさせる
有限の資源をわざと使い切って、優雅に耐えるか破綻するかを見る。
- メモリ: 大量接続・大量メッセージ・巨大入力でヒープを食い潰す → メモリリーク(じわじわ減って復帰しない)が最頻出
- バッファ/キュー: 受信を処理より速く流し込み、溢れたとき捨てるか・壊れるか・固まるか
- 接続・ハンドル: つないで放置/即切りを繰り返し、枯渇で新規を受けられなくなるか(10 章・11 章)
- スタック: 深い再帰・長い入力でスタックオーバーフロー(08 章のガードが働くか)
これらは電流波形(03 章)やレイテンシの時系列(14 章)に兆候が出る(だんだん遅く/消費増)。観測を併用して早期に捕まえる。
4. 電源と環境のストレス
機能テストが素通りしても、現実の汚い電源と過酷な環境で転ぶ機器は多い。
- 電源: 電圧を規定下限まで下げる、瞬断(数 ms 切る)、ゆっくり落とす(ブラウンアウト)、投入時の突入・チャタリング。復帰時にきれいに初期化されるか、設定が壊れないか(03 章・15 章の道具で)
- 温度・湿度: 恒温槽で高温・低温。クロックずれ、センサ誤差、はんだ/部品の限界
- 機械・電磁: 振動、静電気(ESD)、近くの強い電磁ノイズ(EMC)
- クロック・時刻: RTC を飛ばす、時刻を巻き戻す・進める(うるう秒的な境界)
5. 長時間・ソーク試験
短時間では出ないバグ(リーク、断片化、カウンタ溢れ、熱累積)を、何時間〜何日流し続けて炙り出す。
- ソーク(soak)試験: 一定負荷を長時間かけ続け、遅延・メモリ・エラー率の時系列を記録(14 章)。右肩上がりの劣化=リークの兆候
- カウンタ溢れ:
millis()系(約 49 日で一周)、シーケンス番号、統計カウンタが一周する瞬間に壊れないか。時刻を進めて(本章 4 節のクロック・時刻操作)人工的に境界へ運ぶ - 繰り返しストレス: 接続・スリープ復帰・更新を何万回。まれな確率のバグも回数で顕在化
6. 状態の抜け穴 — 異常な順序
ファームのバグの多くは「値」でなく「順序」に潜む。
- 初期化前・認証前の操作、二度打ち、途中中断、並行操作(競合状態)
- 状態遷移図を外から推定して、あり得ない辺を故意に通す(10 章の順序ファジングの一般化)
- 競合(レース)は再現困難——負荷とタイミングをずらして確率を上げ、生存確認で捕まえる
7. 何をオラクルにするか
- 不正入力・溢れ・枯渇でクラッシュ/ハングしない。拒否か、優雅な劣化か、安全停止
- 電源異常・環境ストレスからきれいに回復し、設定・データが壊れない
- 長時間で劣化しない(リーク・断片化がない)、カウンタ境界を越えられる
- 落ちた場合は入力が保存され再現できる
8. 手を動かす
入力ファジングと生存確認
この章のポイント
- 生成 AI 製ファームは例外処理が弱い。堅牢性テストは異常系・極限を狙う
- 入力ファジングをすべての入口に、4 軸(境界・型・順序・タイミング)で。生存確認が命綱
- リソース枯渇(メモリ/バッファ/接続/スタック)を溢れさせ、優雅に耐えるか見る
- 電源・環境ストレス(低電圧・瞬断・温度・ESD・時刻)への回復力を試す
- ソーク試験で長時間の劣化・カウンタ溢れを炙り出し、異常な順序で状態の抜け穴を突く