検証から判明したセキュアコーディングに効く厳選14個のルール
調査の結論としては、22個のコーディングルールが脆弱性の低減に役立つことが明らかになり、改めて基本的なセキュアコーディングの重要性を感じさせられました(ちなみに、CERT Cコーディングスタンダードには全体で約300のルールがあります)。22個でもちょっと多く感じるかもしれませんが、基本的なコーディングルールばかりです。とくにバッファエラーに関係のあるルール14個を下に並べてみましたが、いかがでしょうか。
調査レポートと合わせて、CERT Cコーディングルールも参考にしていただければ幸いです。
- ARR30-C 境界外を指すポインタや配列添字を生成したり使用したりしない
- ARR38-C ライブラリ関数が無効なポインタを生成しないことを保証する
- STR31-C 文字データと null 終端文字を格納するために十分な領域を確保する
- STR32-C 文字列は null 終端させる
- EXP33-C 未初期化のメモリを参照しない
- EXP34-C NULL ポインタを参照しない
- EXP39-C 適合しない型のポインタを使って変数にアクセスしない
- FIO37-C 読み取られたデータが文字データであると思い込まない
- INT18-C より大きいサイズの整数との比較や代入を行う前に、整数式をそのサイズで評価する
- INT30-C 符号無し整数の演算結果がラップアラウンドしないようにする
- INT32-C 符号付き整数演算がオーバーフローを引き起こさないことを保証する
- MEM30-C 解放済みメモリにアクセスしない
- MEM35-C オブジェクトに対して十分なメモリを割り当てる
- MSC24-C 非推奨関数や時代遅れの関数を使用しない
