C言語におけるセキュリティの守護神、ISO/IEC TS 17961:2013(通称:C Secure Coding Rules)。これは「静的解析ツールで100%検出可能な脆弱性」を網羅した、極めて実戦的な国際規格です。
「規約なんて、開発のテンション(バイブ)を下げるだけだ」……そう思っていませんか? 本記事では、この鉄壁のルールを**「無意識の習慣」として取り込み、開発スピードを落とさずに最高レベルの安全性を手に入れるバイブコーディング(Vibe Coding)**の手法を紹介します。
1. ISO/IEC TS 17961 とは何か?
MISRA Cが「宇宙船を落とさないための安全性」なら、TS 17961は**「ハッカーに隙を与えないためのセキュリティ」**に特化しています。
主な特徴と「バイブ」への影響
- 機械的な検出可能性: 人間の「なんとなく」を許さず、静的解析ツールが確実に(過度な偽陽性なく)エラーを出せるルールのみを厳選。
- CERT Cのサブセット: 膨大なCERT C規約の中から「ツールで確実に拾える」エッセンスを抽出。
- 必須(shall)の嵐: 曖昧な推奨事項ではなく「やるべきこと」が明確。
2. 厳守すべき代表的なルールカテゴリ
全約40〜50のルールのうち、モダンな開発で特に意識すべき主要ルールを一覧化しました。
セキュアコーディング・ルールマップ
ルールID 日本語名(意訳) 主な禁止・要求内容 阻止する脆弱性
accfree 解放後アクセス禁止 free() 済みのポインタを二度と使わない Use-after-free
addroverflow アドレス演算の溢れ禁止 ポインタ加算でメモリ空間をラップアラウンドさせない バッファオーバーフロー
aryboundary 配列境界外アクセスの禁止 配列のインデックスは必ず範囲内であることを保証 境界外読み書き
bufferoverflow バッファ溢れの防止 gets 等の危険関数を排除し、コピーサイズを管理 典型的なスタック破壊
fileclose 確実なクローズ fopen したファイル記述子は必ず fclose する リソースリーク
nullptrref NULL参照の禁止 ポインタの中身を見る前に必ず NULL チェック Null pointer dereference
signedintover 符号付整数溢れ禁止 演算結果が型の上限・下限を超えないようガード 未定義動作・ロジック崩壊
strcopy 文字列コピーの安全確保 strncpy 等を使う際も、終端の \0 を手動で保証 終端欠落による情報漏洩
