知識マップ: Windowsアプリ開発のセキュリティ最低限チェックリスト

記事「Windowsアプリ開発のセキュリティ最低限チェックリスト」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。

この記事はWPF/WinForms/WinUI/C++/C#のWindows業務アプリを対象に、リリース前に外したくない最低限のセキュリティ対策をチェックリスト化しています。中心は、アプリ全体をrequireAdministratorにせず必要な処理だけを別プロセスやサービスへ分離すること、配布物にコード署名とタイムスタンプを付けて未署名配布や証明書検証の常時スキップを避けること、秘密情報を平文設定に置かずDPAPIなどで保護することです。あわせて、SQLの文字列連結が招くSQLインジェクションをプレースホルダで防ぐこと、DLLを名前だけで読み込むと検索順序ハイジャックを招くこと、ログへ機密情報を出すとログ自体が漏えい経路になることも扱っています。

Windowsアプリセキュリティ最低限チェックリストの知識マップ管理者権限の扱い、コード署名と更新物の検証、秘密情報の保護、SQLインジェクションやDLL読み込みなどの入力・実行時リスク、ログでの機密漏えいという最低限のセキュリティ項目どうしの関係を示す図で構成できるで構成できる用いるのは非推奨推奨される対応原因になり得る原因になり得る防止する軽減する防止する推奨される対応推奨される対応前提とする用いるのは非推奨原因になり得る防止する原因になり得る推奨される対応前提とする利用する前提とする推奨される対応管理者権限コード署名証明書アプリの秘密情報asInvoker実行レベルrequireAdministrator実行レベル対話ユーザーのデスクトップアプリ管理者権限処理の分離DLL検索順序ハイジャックDLLの名前だけでの読み込み未署名バイナリコード署名のタイムスタンプ証明書の期限切れ更新物の署名・ハッシュ検証未検証の更新適用証明書のピン留め証明書検証の常時スキップ証明書の失効確認SQL文字列連結SQLインジェクションプレースホルダ(プリペアドステートメント)ログへの機密情報出力ログ経由の機密情報露出DPAPI秘密情報の平文保存Windowsサービス

概念間の関係(全21件)

図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。

主要概念の定義

管理者権限
コンピューター全体の設定を変更できる権限。
コード署名証明書
ソフトウェアの発行元を証明し、改ざんを検出するための証明書。
アプリの秘密情報
業務アプリが扱う接続文字列・APIキーなどの秘密情報。ログオン済みマシンではドライブ暗号化では守れない。
requireAdministrator実行レベル
アプリ起動時に常に管理者権限への昇格を要求するWindowsアプリケーションマニフェストの実行レベル。
管理者権限処理の分離
管理者権限が必要な処理だけを別プロセスやserviceに分離し、アプリ全体は昇格させずに動かす設計。
DLLの名前だけでの読み込み
LoadLibraryに絶対パスを指定せず、名前だけで検索順序任せに読み込む実装。
コード署名のタイムスタンプ
署名時刻をRFC 3161タイムスタンプサーバーで証明する付与情報。証明書の期限が切れても署名の有効性を保つ。
更新物の署名・ハッシュ検証
ダウンロードした更新ファイルの署名またはハッシュを検証し、改ざんされていないことを確認する仕組み。
証明書のピン留め
対象ホストと証明書(拇印)を指定して、その組み合わせだけを例外的に許可する、検証緩和の対象を限定した実装。
証明書検証の常時スキップ
ServerCertificateValidationCallbackなどで証明書検証を常にtrueとして通してしまう実装。HTTPS通信の安全性を実質無効化する。
SQL文字列連結
利用者からの入力をSQL文にそのまま連結して組み立てる実装。
プレースホルダ(プリペアドステートメント)
SQL文の組み立てを全てプレースホルダで実装する実装方式。IPAがSQLインジェクションの根本的解決として挙げる対策で、原理的に脆弱性が生じ得ないとされる。
ログへの機密情報出力
パスワードやBearer token、API キー、接続文字列、個人情報などをログや例外メッセージにそのまま出力すること。
DPAPI
実行中のマシン上でアプリの秘密情報を保護するWindowsのデータ保護API。

機械可読データ

このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。