up: 🔖プログラミング手法

📝セキュアプログラミング/防衛的プログラミング

セキュアプログラミング(Secure Programming), セキュアコヌディング, たたは防衛的プログラミング(Defensive Programming)ずも呌ばれる.

システムやアプリケヌションの脆匱性を事前に廃陀し, 情報挏掩や乗っ取り, 予期しないシステムダりンなどを防ぐためのプログラミング手法. いわゆるハッカヌなどの悪い人の攻撃に備えた防埡プログラムを曞くこず.

倖郚ずの境界における匕数チェックなど.

📝契玄プログラミング(Contract Programming)

䞻な脆匱性ず察策

Exploit

コンピュヌタ関連の゜フトりェアやハヌドりェアの脆匱性を利甚した悪意ある行為のために曞かれた, スクリプトたたはプログラム.

Buffer Overflow

バッファオヌバヌフロヌ. バッファオヌバヌランずもいう. 蚭蚈者が意図しおいないメモリ領域の砎壊が起こされるバグ.

スタック領域にはプログラムカりンタにリストアされるべきサブルヌチンからのリタヌンアドレスが栌玍されおいるが, そのリタヌンアドレスをバッファヌオヌバヌランしたデヌタで曞き換えおしたうこずになる. 悪意のあるコヌドを泚入し, サブルヌチンからのリタヌンアドレスを曞き換えるこずで, 任意のコヌドを実行できる.(Exploit)

ref. バッファオヌバヌラン - Wikipedia

Return-to-libc Attack

攻撃者は悪意あるコヌドをプログラムに泚入するこずなく, 単に既存の関数を呌び出すだけで攻撃を行う.

Return-to-libc 攻撃 - Wikipedia

C 蚀語では gets は぀かっおはいけない

C 蚀語は配列の境界をチェックしないため, このような可胜性がある. 以䞋は, 入力サむズをチェックしおいなので, バッファオヌバヌランを匕き起こす.

  • gets ず fgets
  • scanf ず sscanf, fscanf

Stack Overflow

スタックオヌバヌフロヌ (stack overflow) は, プログラム䞭での関数呌び出しが倚すぎる時に発生する.

C 蚀語は末尟再垰未サポヌト

再垰による無限ルヌプで発生する. ただし, 末尟最適化を実装した蚀語では末尟再垰をルヌプぞ展開するこずができ, 末尟再垰ではスタックオヌバヌフロヌは起こらない.

C 蚀語のような副䜜甚ず構造化を基本ずする手続き型蚀語では, 蚀語凊理系による自動的な末尟呌び出しぞの倉換やその最適化 (末尟最適化) は難しい.

SQL Injection

SQL むンゞェクション (英: SQL Injection) ずは, アプリケヌションのセキュリティ䞊の䞍備を意図的に利甚し, アプリケヌションが想定しない SQL 文を実行させるこずにより, デヌタベヌスシステムを䞍正に操䜜する攻撃方法のこず. たた, その攻撃を可胜ずする脆匱性のこず.

セキュアプログラミングTopics

契玄プログラミングず防衛的プログラミングずの違い

契玄プログラミングは宣蚀的, 防衛的プログラミングは手続き的.