セキュリティに配慮したコーディング
Secure Coding
せきゅりてぃにはいりょしたこーでぃんぐ
脆弱性を作り込まないように、安全なプログラムの書き方の原則に従ってコーディングすること。セキュアコーディングとも呼ぶ。入力値の検証、出力時のエスケープ、プレースホルダの使用、エラーメッセージでの情報の出し過ぎの防止などを、コーディング規約、コードレビュー、SASTによる検査で徹底する。
Related
関連キーワードの用語
プログラムの書き方について、組織やプロジェクトで定めた規則。名前の付け方、字下げなどの書式、使ってはならない命令、エラー処理の方法、注釈の書き方などを定め、読みやすさと保守性を高め、誤りや脆弱性を作り込みにくくする。静的解析ツールで遵守を確かめられる。
動作中のアプリケーションに外部から検査用のリクエストを送り、その応答から脆弱性を検出する検査手法。攻撃者と同じ視点で、XSSやSQLインジェクション、設定不備などを実行環境を含めて確認できる。ソースコードがなくても実施できるが、問題の箇所をコード上で特定しにくく、検査が到達しない機能は確認できない。
確保したメモリ領域を超えてデータを書き込ませ、プログラムの制御を奪うバッファオーバーフロー攻撃への対策。入力データの長さを検査する、境界を確認しない危険な関数を使わない、メモリ安全な言語を選ぶといったコーディング上の対策に加え、スタックの破壊を検知するカナリア、データ領域でのコードの実行を禁止するDEP、メモリの配置をランダムにするASLRといった、OSやコンパイラの防御機構を組み合わせる。
ソフトウェアやハードウェアの脆弱性を、その原因となる弱点の種類(タイプ)で分類した一覧で、MITREが管理する。「CWE-79」がクロスサイトスクリプティング、「CWE-89」がSQLインジェクションのように識別番号が付き、個々の脆弱性を指すCVEに対して、CWEは脆弱性の種類を指す。危険度の高い弱点をまとめたCWE Top 25も公表されている。
プログラムを実行せずに、ソースコードや実行ファイルの内容を調べて分析する手法。マルウェアの解析では、逆アセンブルなどで検体のコードや埋め込まれた文字列を調べ、機能や通信先を推定する。ソフトウェアの開発では、ツールでソースコードを検査して不具合や脆弱性を見つけるのに使う。
自動車業界が策定したC言語のコーディング規約。安全性・信頼性の高い組込みソフトウェア開発のためのルール集で、未定義動作の回避やコードの可読性向上を目的とする。車載システムに限らず組込み全般で参照される。
