up: 🔖プログラミング手法
📝セキュアプログラミング/防衛的プログラミング
セキュアプログラミング(Secure Programming), セキュアコーディング, または防衛的プログラミング(Defensive Programming)とも呼ばれる.
システムやアプリケーションの脆弱性を事前に廃除し, 情報漏洩や乗っ取り, 予期しないシステムダウンなどを防ぐためのプログラミング手法. いわゆるハッカーなどの悪い人の攻撃に備えた防御プログラムを書くこと.
外部との境界における引数チェックなど.
📝契約プログラミング(Contract Programming)
主な脆弱性と対策
Exploit
コンピュータ関連のソフトウェアやハードウェアの脆弱性を利用した悪意ある行為のために書かれた, スクリプトまたはプログラム.
- エクスプロイト - Wikipedia
- バッファオーバーラン - Wikipedia (Exploit に関連する話題がある
Buffer Overflow Attack
スタック領域にはプログラムカウンタにリストアされるべきサブルーチンからのリターンアドレスが格納されているが, そのリターンアドレスをバッファーオーバーランしたデータで書き換えてしまうことになる. 悪意のあるコードを注入し, サブルーチンからのリターンアドレスを書き換えることで, 任意のコードを実行できる.(Exploit)
Return-to-libc Attack
攻撃者は悪意あるコードをプログラムに注入することなく, 単に既存の関数を呼び出すだけで攻撃を行う.
C言語では gets はつかってはいけない
C 言語は配列の境界をチェックしないため, このような可能性がある. 以下は, 入力サイズをチェックしていなので, バッファオーバーランを引き起こす.
- gets と fgets
- scanf と sscanf, fscanf
SQL Injection
SQL インジェクション (英: SQL Injection) とは, アプリケーションのセキュリティ上の不備を意図的に利用し, アプリケーションが想定しない SQL 文を実行させることにより, データベースシステムを不正に操作する攻撃方法のこと. また, その攻撃を可能とする脆弱性のこと.
セキュアプログラミングTopics
契約プログラミングと防衛的プログラミングとの違い
契約プログラミングは宣言的, 防衛的プログラミングは手続き的.