C++ のセキュリティ推奨事項
更新 : 2007 年 11 月
ここでは、推奨されるセキュリティ ツールおよびセキュリティ対策について説明します。これらのリソースやツールを使用しても、アプリケーションを攻撃から完全に防御できるわけではありませんが、攻撃が成功する可能性を低減できます。
Visual C++ セキュリティ機能
ここでは、Visual C++ コンパイラおよびリンカに組み込まれているセキュリティ機能について説明します。
/GS (バッファのセキュリティ チェック)
このコンパイラ オプションを使用すると、コンパイラは、利用される危険性がある関数にオーバーラン検出コードを挿入します。オーバーランが検出されると、実行が停止します。このオプションの既定値はオンです。/SAFESEH (安全な例外ハンドラがあるイメージ)
このリンカ オプションを使用すると、リンカは、例外ハンドラのアドレスを格納したテーブルを出力イメージに含めます。実行時に、オペレーティング システムはこのテーブルを使用して適切な例外ハンドラのみが実行されるようにします。これにより、実行時に悪意のある攻撃を受けて例外ハンドラが実行されることを回避できます。このオプションの既定値はオフです。/analyze (Enterprise コード分析)
このコンパイラ オプションを使用すると、潜在的なセキュリティ上の問題 (バッファ オーバーラン、非初期化メモリ、null ポインタの逆参照、メモリ リークなど) を報告するコード解析がアクティブになります。このオプションの既定値はオフです。詳細については、「C/C++ のコード分析の概要」を参照してください。
セキュリティが拡張された CRT
Visual C++ 2005 では、C ランタイム ライブラリ (CRT) が強化され、セキュリティ上のリスクをもたらす関数の安全なバージョンが導入されました (チェックが適用されない文字列コピー関数 strcpy など)。このようなセキュリティが万全ではない以前の関数は推奨されません。これらの関数を使用すると、コンパイル時に警告が表示されます。プログラマには、コンパイル時に警告が表示されないようにすることよりも、これらの CRT 関数の安全なバージョンを使用することが強く求められます。詳細については、「CRT のセキュリティ強化」を参照してください。
チェックを行う反復子
チェックを行う反復子を使用すると、標準 C++ ライブラリ コンテナ クラスのユーザーに、コンテナの範囲外から要素にアクセスしようとしていることが通知されます。詳細については、「Checked Iterators」を参照してください。
マネージ コードのコード分析
マネージ コードのコード分析は FxCop とも呼ばれ、Microsoft .NET Framework デザイン ガイドラインに準拠するためにアセンブリをチェックするツールです。FxCop は各アセンブリ内のコードとメタデータを解析して、次の点に不備がないかどうかを検証します。
ライブラリ デザイン
ローカリゼーション
名前付け規則
パフォーマンス
セキュリティ
マネージ コードのコード分析は、Visual Studio Team System に含まれています。また、https://www.gotdotnet.com/team/fxcop/ からダウンロードすることもできます。
Windows アプリケーション検証ツール
Application Compatibility Toolkitの一部として使用できるアプリケーション検証ツール (AppVerifier) は、開発者がアプリケーションの互換性、安定性、および潜在的なセキュリティ上の問題を特定するためのツールです。
AppVerifier はアプリケーションの実行中に、アプリケーションがオペレーティング システム (ファイル システム、レジストリ、メモリ、API など) をどのように使用しているかを監視します。検出した問題をソース コード レベルで修正する方法を示します。
検証ツールを使用して、次の手順を実行することができます。
プログラミング上の共通の誤りが原因で発生する潜在的なアプリケーションの互換性エラーがないかどうかをテストします。
アプリケーションにメモリ関連の問題がないかどうかを調べます。
アプリケーションが Designed for Windows XP または Certified for Windows Server™ 2003 ロゴ プログラムの各種要件に準拠しているかどうかを確認します。
アプリケーションの潜在的なセキュリティ上の問題を特定します。
Windows アプリケーション検証ツールは https://www.microsoft.com/windows/appcompatibility/appverifier.mspx から入手できます。
.NET Framework のセキュリティ機能
ここでは、関連する 2 つの .NET Framework セキュリティ機能の概要について説明します。
コード アクセス セキュリティ
.NET Framework セキュリティ システムについて、およびそれがアプリケーション コードのインターフェイスとしてどのように機能するかについて説明します。セキュリティ ポリシーの設定
.NET Framework セキュリティ ポリシーを調整するためのガイドラインおよびツールについて説明します。
Windows ユーザー アカウント
Administrators グループに属する Windows ユーザー アカウントを使用すると、開発者とユーザー (機能拡張により) がセキュリティ上の危険にさらされます。詳細については、「ユーザー グループのメンバとしての実行」を参照してください。
Windows Vista でユーザー アカウント制御 (UAC: User Account Control) を使用してセキュリティを向上させる
ユーザー アカウント制御 (UAC: User Account Control) は、限られた特権をユーザー アカウントに付与する Windows Vista の機能です。詳細については、「ユーザー アカウント制御 (UAC: User Account Control) がアプリケーションに与える影響」を参照してください。
参照
概念
ユーザー アカウント制御 (UAC: User Account Control) がアプリケーションに与える影響