7. セキュアプログラミング
Java
- サンドボックス
- AccessContoroller、SecurityManager
- 任意のセキュリティポリシを適用できるポリシベースのセキュリティ管理が可能に
- カプセル化
- メモリ管理はJavaVMが行うのでBOFは発生しない
- ガーベージコレクション
- 動的に確保したメモリ領域が不要になると自動的に解放する
C++
XSSの種類
- クロスサイトスクリプティング
- インターネットを利用している一般ユーザが悪意あるWebサイトを閲覧したときに被害を受ける攻撃の一種
- 反射型XSS Type1
- 格納型XSS Type2
- DOMベースのXSS Type0
- ブラウザ側で実行されるJavaScriptを利用したXSS
- JavaScriptの脆弱性を突く
- 対策
- DOM操作用のメソッドやプロパティを使用する
- JavaSctiptのライブラリを最新にする
SQLインジェクション
- 入力された項目を使ってSQL文を組み立てて実行している場合
- ORに続いて絶対に満たす条件を付け加えると意図しない実行ができてしまう
- 対策
バッファオーバーフロー
- 確保したメモリエリアの大きさを超えるデータがメモリエリアに渡されるとリターンアドレスまで書き換えられてしまう
- オーバフロー部分に不正なプログラムのアドレスを入れておくと不正なプログラムが実行されてしまう
- 対策
- 脆弱性のある関数を使わない
- strcpy → strncpy
- strcat → strncat
- gets → fgets
- sprintf → snprintf
- vsprintf → vsnprintf
- プログラムの中で、データをメモリエリアに転記する際に大きさをチェックするようにコーディングする
- データ実行防止機能
- 指定されたメモリ領域でのコード実行を禁止できるが、領域外にlibcが存在するのでReturn-to-libc攻撃は実行できる
- アドレス空間ランダム化配置技術
- スタック、ヒープ等のメモリ領域の配置をランダム化でき、メモリアドレスを予測しづらくなり、Return-to-libc攻撃が困難になる
- 脆弱性のある関数を使わない
CSRF
- 悪意のあるサイトにアクセスしたことで、スクリプト付きのWebページをダウンロードしてしまい、それが自動実行され他のサイト(認証機能を持つ)にアクションを起こされる攻撃
- 対策
その他の攻撃
- OSコマンドインジェクション
- コマンドを混入させる
- セッションフィクセーション
- 事前に取得したセッションIDを攻撃対象に使わせてなりすます
- セッションハイジャック
- 他人のセッションを盗んでなりすます
- Use-After-Free