lu100101の日記

勉強の記録

7. セキュアプログラミング

Java

  • サンドボックス
  • AccessContoroller、SecurityManager
    • 任意のセキュリティポリシを適用できるポリシベースのセキュリティ管理が可能に
  • カプセル化
  • メモリ管理はJavaVMが行うのでBOFは発生しない
  • ガーベージコレクション
    • 動的に確保したメモリ領域が不要になると自動的に解放する

C++

XSSの種類

  • クロスサイトスクリプティング
  • インターネットを利用している一般ユーザが悪意あるWebサイトを閲覧したときに被害を受ける攻撃の一種
  • 反射型XSS Type1
    • 攻撃者は、脆弱性のあるサイトへのリンクに、そこで実行させたい"スクリプト"を含めておいて、そのリンクが踏まれるのを待つ
    • 利用者がそのリンクを踏むと、脆弱性のあるサイトではリンクに続いている記述をスクリプトとして解釈し、スクリプトを含むレスポンスを利用者の画面に返す
    • その結果、利用者のクライアントで、スクリプトが実行される
    • PC内のCookieを漏洩させたり、ファイルを破壊したりするなど
    • サーバ側の動的HTMLを組み立てる際の脆弱性
    • 対策
      • 意図しないスクリプトを実行しないようにサニタイジング処理を行う
        • & → &
        • < → &lt;
        • > → &gt;
        • " → &quot;
        • ' → &#39;
      • Content-Typeフィールドの適切な設定
        • 意図しているファイルタイプや文字コードを明示的に指定しておく
  • 格納型XSS Type2
    • 反射型XSS同様サーバ側の脆弱性を突く攻撃
    • スクリプトに相当する文字列をサーバ側に永続的に保存する
    • サーバに格納されるので、そこにアクセスするユーザが閲覧するたびに攻撃にあう
    • 対策は反射型と同様
  • 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ページをダウンロードしてしまい、それが自動実行され他のサイト(認証機能を持つ)にアクションを起こされる攻撃
  • 対策
    • Cookieとは別のトークンを使用する
      • Cookieとは別にログイン完了時等に疑似乱数をサーバが発行し、hiddenフィールドを利用して、画面遷移時に連続性のある正当なリクエストかどうかをチェックし、トークンのないアクセスを破棄するようにアプリケーションの設計をする
    • 確定時に入力を要求
      • パスワードの再入力
      • CAPTCHAを利用
        • 人とbotとを区別するために利用されるアレ

その他の攻撃

  • OSコマンドインジェクション
    • コマンドを混入させる
  • セッションフィクセーション
    • 事前に取得したセッションIDを攻撃対象に使わせてなりすます
  • セッションハイジャック
    • 他人のセッションを盗んでなりすます
  • Use-After-Free

開発時に参考になる規格等

  • 設計プロセス
    • CIS Benchmarks
      • システムを安全に構成するための構成基準及びベストプラクティス
      • OS、ミドルウェア、アプリケーションごとに必要なセキュリティ対策をまとめている
    • OWASAP ASVS
      • Webアプリケーションの設計、開発、脆弱性診断などにおいて必要となるセキュリティ要件の標準を確立することを目指す
      • アプリケーションセキュリティ検証標準を作成・管理する
  • 実装プロセス
    • CERT コーディングスタンダード
      • セキュアなソフトウェアを作るためのコーディングガイドライン
      • 脆弱性の防止だけでなく、コードの移植性及び保守性の向上も期待できる