「.NET 開発基盤部会 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
システム開発工程とセキュリティ対策
工程毎の実施例 †
要件定義 †
工程 †
・・・
実施 †
方式設計 †
工程 †
・・・
実施 †
- セキュリティ基本要件の決定
- セキュリティ目標
- 適用 / 準拠 基準
- セキュリティ基本要件
- セキュリティ実装要件の決定
- 識別 / 認証
- アクセス制御
- データ保護(暗号化)
- セキュリティ監視
- セキュリティ監査
- マルウェア対策
- DoS攻撃対策
- アプリケーション・セキュリティ要件の決定
- 開発環境のセキュリティ対策要件
- アプリケーション特性からのセキュリティ要件
- セキュリティ・テスト方式に関する要件
- システム・セキュリティ管理要件の決定
- ID管理
- 鍵管理
- パッチ管理
- 構成 / 設定 / 変更管理
- ログ管理
- インシデント / 問題 管理
基本・詳細設計 †
工程 †
実施 †
- システム領域
- 要件:セキュリティ実装要件、システム・セキュリティ管理要件
- ネットワーク、サーバ機器、セキュリティ製品の構成決定
- 構築手順書の整備
- プログラミング領域
- 要件:セキュリティ実装要件、アプリケーション・セキュリティ要件
- プログラム構成の決定
- 共通モジュール、モジュール間I/F仕様の決定
構築、PG、UT †
工程 †
- システム基盤構築
- プログラミング
- プログラムテスト
実施 †
- セキュア・プログラミング
- プログラム開発
- ソースコード・レビュー(ホワイト・ボックス)
テスト †
工程 †
実施 †
本番前の脆弱性検査 / 診断
運用・保守 †
工程 †
・・・
実施 †
本番前の脆弱性検査 / 診断
言語毎の留意点 †
C/C++ †
OSコマンド・インジェクション †
- 実践だったら、そもそもサニタイジング・ライブラリ無いなら、
- ユーザ入力をOSコマンドの入力にもっていくなという話だが、
- 試験的には、徹底的にメタ文字をチェックしろとしか書いておらず、
- 具体的に、何をチェックすればOKという話まで書かれていない。
セキュリティ機構 †
- 設定項目
- 署名者(signedBy)
- コードの場所(codeBase)
- アクセス権(permission)
- 設定箇所
- システム・ポリシーファイル ({java.home} 以下)
- ユーザ・ポリシーファイル ({user.home} 以下)
- クラスローダ
- アクセス権を持ったクラス・オブジェクトの定義
- 上記を統合して、クラスを実行時インストールする
- セキュリティ・マネージャ
- セキュリティモデルを、セキュリティ・マネージャに委ねる場合。
- System.getSecurityManager?でSecurityManager?クラスを取得し、
- security.checkXXXXメソッドでチェックする。
- アクセス・コントローラ
- 特定のセキュリティモデルを使用する場合、
- XXXXPermissionクラスをnewし、
- AccessController?.checkPermissionメソッドでチェックする。
レース・コンディション †
- 変数
主に、Instance変数ではない、
static変数により競合が発生する。
- RDBMSレコード
仮予約などの機構で競合し、
他人の予約を参照できてしまう。
その他 †
- 公開不要なメソッド、メンバ変数は、Publicではなく、Privateに設定
- 不要な、setter / getterは、Interfaceに定義しない
(そして、ユーザはClassではなくInterfaceを利用)。
留意点 †
グローバル変数でvarを省略しない
(本来、別々の変数が同じ値になったりする)。
その他 †
- Ajax
- クライアント側ライブラリとしてXMLHttpRequest?を使う。
- データ・フォーマットとしては主にJSONを使う。
- eval()は危険なので、JSON.parse()を使用する。
セキュリティ規格・基準 †
ASVS †
OWASP の ASVS
- ASVS : Application Security Verification Standard
- アプリケーションセキュリティ検証標準