├── CODE_OF_CONDUCT.md ├── LICENSE ├── README.md ├── SECURITY.md ├── SUPPORT.md ├── assets ├── IMG001_DatabaseSecurity_NIST_CSF.svg ├── IMG002_SharedResponsibility.svg ├── IMG003_DefenseInDepthForDataSecurity.svg ├── IMG006_DatabaseSecuritOverview.svg ├── IMG007_AzurePrivateLink.svg ├── IMG009_CheckIcon.png ├── IMG010_DefenderForCloudDataCollectionPresentation.png ├── IMG011_DefenderSetting1.png ├── IMG013_DefenderSetting3.png ├── IMG014_DefenderSQLSetting1.png ├── IMG015_DefenderSQLSetting2.png ├── IMG016_DefenderSQLSetting3.png ├── IMG017_Attension.png ├── IMG017_Notice.png ├── IMG017_Warning.png ├── IMG018_SecurityAlert1.png ├── IMG019_SecurityAlert2.png ├── IMG020_VulnerabilityCheck1.png ├── IMG021_VulnerabilityCheck2.png ├── IMG022_VulnerabilityCheck3.png ├── IMG023_VulnerabilityCheck4.png ├── IMG024_VulnerabilityCheck5.png ├── IMG025_AlrertMail1.png └── IMG026_AlrertMail2.png ├── chapter01.md ├── chapter02.md ├── chapter03.md └── chapterfin.md /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Microsoft Open Source Code of Conduct 2 | 3 | This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). 4 | 5 | Resources: 6 | 7 | - [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/) 8 | - [Microsoft Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) 9 | - Contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with questions or concerns 10 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) Microsoft Corporation. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Azure SQL: セキュリティの脅威への対策ガイド 2 |
3 | 4 | 本ドキュメントでは、データ基盤、データベースで求められるセキュリティについて解説し、Microsoft Defender for SQL を使った効果的なセキュリティ対策について紹介しています。 5 | ここで取り上げた製品・サービスの詳細および最新情報は、[製品ドキュメント](https://docs.microsoft.com/ja-jp/azure/azure-sql/database/azure-defender-for-sql)をご参照ください。 6 | なお、本ドキュメントの作成には、[株式会社アクアシステムズ様](https://www.aqua-systems.co.jp/)にご協力をいただきました。 7 | 8 |
9 | 10 | ### [第1章 データ基盤におけるデータセキュリティの重要性](/chapter01.md) 11 |
12 | 13 | 大量のデータの利活用を前提にした DX の推進が求められる時代。データ利活用にはセキュリティを担保することも要求されます。データ セキュリティの全体像を紹介します。 14 |
15 | 16 | ### [第2章 データ基盤でのセキュリティ要件](/chapter02.md) 17 |
18 | 19 | 重要データを守るために、データ基盤、データベースにおけるセキュリティ要件についてまとめます。 20 | 認証及びアクセス制御、通信やデータの暗号化といった防御対策に加えて、防御をすり抜ける、あるいは、正当なアクセス権による正常とみなされる操作の中にあるリスクに対しての検知対策の重要性について解説します。 21 |
22 | 23 | ### [第3章 Microsoft Defender for SQL で実現するデータベースセキュリティ](/chapter03.md) 24 |
25 | 26 | セキュリティの中でもデータ基盤レイヤでの対策を理解した要員、体制を維持することは、時間もコストもかかり、ハードルが高いのが現実です。 27 | Microsoft Defender for SQL によって効果的なデータ基盤のセキュリティを効率的に実現していく方法を紹介します。 28 |
29 | 30 | ### [まとめ](/chapterfin.md) 31 |
32 | 33 |
34 |
35 | 36 | ## Contributing 37 | 38 | This project welcomes contributions and suggestions. Most contributions require you to agree to a 39 | Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us 40 | the rights to use your contribution. For details, visit https://cla.opensource.microsoft.com. 41 | 42 | When you submit a pull request, a CLA bot will automatically determine whether you need to provide 43 | a CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions 44 | provided by the bot. You will only need to do this once across all repos using our CLA. 45 | 46 | This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). 47 | For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or 48 | contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. 49 | 50 | ## Trademarks 51 | 52 | This project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft 53 | trademarks or logos is subject to and must follow 54 | [Microsoft's Trademark & Brand Guidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general). 55 | Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship. 56 | Any use of third-party trademarks or logos are subject to those third-party's policies. 57 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ## Security 4 | 5 | Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [our GitHub organizations](https://opensource.microsoft.com/). 6 | 7 | If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://docs.microsoft.com/en-us/previous-versions/tn-archive/cc751383(v=technet.10)), please report it to us as described below. 8 | 9 | ## Reporting Security Issues 10 | 11 | **Please do not report security vulnerabilities through public GitHub issues.** 12 | 13 | Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://msrc.microsoft.com/create-report). 14 | 15 | If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://www.microsoft.com/en-us/msrc/pgp-key-msrc). 16 | 17 | You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://www.microsoft.com/msrc). 18 | 19 | Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue: 20 | 21 | * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.) 22 | * Full paths of source file(s) related to the manifestation of the issue 23 | * The location of the affected source code (tag/branch/commit or direct URL) 24 | * Any special configuration required to reproduce the issue 25 | * Step-by-step instructions to reproduce the issue 26 | * Proof-of-concept or exploit code (if possible) 27 | * Impact of the issue, including how an attacker might exploit the issue 28 | 29 | This information will help us triage your report more quickly. 30 | 31 | If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://microsoft.com/msrc/bounty) page for more details about our active programs. 32 | 33 | ## Preferred Languages 34 | 35 | We prefer all communications to be in English. 36 | 37 | ## Policy 38 | 39 | Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://www.microsoft.com/en-us/msrc/cvd). 40 | 41 | -------------------------------------------------------------------------------- /SUPPORT.md: -------------------------------------------------------------------------------- 1 | # TODO: The maintainer of this repo has not yet edited this file 2 | 3 | **REPO OWNER**: Do you want Customer Service & Support (CSS) support for this product/project? 4 | 5 | - **No CSS support:** Fill out this template with information about how to file issues and get help. 6 | - **Yes CSS support:** Fill out an intake form at [aka.ms/onboardsupport](https://aka.ms/onboardsupport). CSS will work with/help you to determine next steps. 7 | - **Not sure?** Fill out an intake as though the answer were "Yes". CSS will help you decide. 8 | 9 | *Then remove this first heading from this SUPPORT.MD file before publishing your repo.* 10 | 11 | # Support 12 | 13 | ## How to file issues and get help 14 | 15 | This project uses GitHub Issues to track bugs and feature requests. Please search the existing 16 | issues before filing new issues to avoid duplicates. For new issues, file your bug or 17 | feature request as a new Issue. 18 | 19 | For help and questions about using this project, please **REPO MAINTAINER: INSERT INSTRUCTIONS HERE 20 | FOR HOW TO ENGAGE REPO OWNERS OR COMMUNITY FOR HELP. COULD BE A STACK OVERFLOW TAG OR OTHER 21 | CHANNEL. WHERE WILL YOU HELP PEOPLE?**. 22 | 23 | ## Microsoft Support Policy 24 | 25 | Support for this **PROJECT or PRODUCT** is limited to the resources listed above. 26 | -------------------------------------------------------------------------------- /assets/IMG001_DatabaseSecurity_NIST_CSF.svg: -------------------------------------------------------------------------------- 1 | 資産(データ)識別評価データデータデータ脆弱性脅威データ対象対策検知対応修復アクセス制御モニタリング対象外対象 -------------------------------------------------------------------------------- /assets/IMG003_DefenseInDepthForDataSecurity.svg: -------------------------------------------------------------------------------- 1 | ネットワークセキュリティアクセス制御暗号化ログモニタリング許可されていないDBへのアクセスDBアクセス範囲外へのアクセスアクセス権限っているが許可されていないアクセス正当権限使った不正アクセス -------------------------------------------------------------------------------- /assets/IMG006_DatabaseSecuritOverview.svg: -------------------------------------------------------------------------------- 1 | FWIDS/IPSWAFDoSAnti-spoofingポートスキャンWeb server know vulner-abilitiesPattern-BasedAttacksParameterTamperingSQLInjectionCookiePoisoningデータ基盤WebアプリインターネットサーバーWebサーバーCross SiteScripting防御をすりける不正にみえない操作権限内部による操作なりすましによる操作 -------------------------------------------------------------------------------- /assets/IMG009_CheckIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/jp-sqlsecurity/0d9d0e897b6c2c802cd59e0ec585ea22cbbf1e80/assets/IMG009_CheckIcon.png -------------------------------------------------------------------------------- /assets/IMG010_DefenderForCloudDataCollectionPresentation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/jp-sqlsecurity/0d9d0e897b6c2c802cd59e0ec585ea22cbbf1e80/assets/IMG010_DefenderForCloudDataCollectionPresentation.png -------------------------------------------------------------------------------- /assets/IMG011_DefenderSetting1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/jp-sqlsecurity/0d9d0e897b6c2c802cd59e0ec585ea22cbbf1e80/assets/IMG011_DefenderSetting1.png -------------------------------------------------------------------------------- /assets/IMG013_DefenderSetting3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/jp-sqlsecurity/0d9d0e897b6c2c802cd59e0ec585ea22cbbf1e80/assets/IMG013_DefenderSetting3.png -------------------------------------------------------------------------------- /assets/IMG014_DefenderSQLSetting1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/jp-sqlsecurity/0d9d0e897b6c2c802cd59e0ec585ea22cbbf1e80/assets/IMG014_DefenderSQLSetting1.png -------------------------------------------------------------------------------- /assets/IMG015_DefenderSQLSetting2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/jp-sqlsecurity/0d9d0e897b6c2c802cd59e0ec585ea22cbbf1e80/assets/IMG015_DefenderSQLSetting2.png -------------------------------------------------------------------------------- /assets/IMG016_DefenderSQLSetting3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/jp-sqlsecurity/0d9d0e897b6c2c802cd59e0ec585ea22cbbf1e80/assets/IMG016_DefenderSQLSetting3.png -------------------------------------------------------------------------------- /assets/IMG017_Attension.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/jp-sqlsecurity/0d9d0e897b6c2c802cd59e0ec585ea22cbbf1e80/assets/IMG017_Attension.png -------------------------------------------------------------------------------- /assets/IMG017_Notice.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/jp-sqlsecurity/0d9d0e897b6c2c802cd59e0ec585ea22cbbf1e80/assets/IMG017_Notice.png -------------------------------------------------------------------------------- /assets/IMG017_Warning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/jp-sqlsecurity/0d9d0e897b6c2c802cd59e0ec585ea22cbbf1e80/assets/IMG017_Warning.png -------------------------------------------------------------------------------- /assets/IMG018_SecurityAlert1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/jp-sqlsecurity/0d9d0e897b6c2c802cd59e0ec585ea22cbbf1e80/assets/IMG018_SecurityAlert1.png -------------------------------------------------------------------------------- /assets/IMG019_SecurityAlert2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/jp-sqlsecurity/0d9d0e897b6c2c802cd59e0ec585ea22cbbf1e80/assets/IMG019_SecurityAlert2.png -------------------------------------------------------------------------------- /assets/IMG020_VulnerabilityCheck1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/jp-sqlsecurity/0d9d0e897b6c2c802cd59e0ec585ea22cbbf1e80/assets/IMG020_VulnerabilityCheck1.png -------------------------------------------------------------------------------- /assets/IMG021_VulnerabilityCheck2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/jp-sqlsecurity/0d9d0e897b6c2c802cd59e0ec585ea22cbbf1e80/assets/IMG021_VulnerabilityCheck2.png -------------------------------------------------------------------------------- /assets/IMG022_VulnerabilityCheck3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/jp-sqlsecurity/0d9d0e897b6c2c802cd59e0ec585ea22cbbf1e80/assets/IMG022_VulnerabilityCheck3.png -------------------------------------------------------------------------------- /assets/IMG023_VulnerabilityCheck4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/jp-sqlsecurity/0d9d0e897b6c2c802cd59e0ec585ea22cbbf1e80/assets/IMG023_VulnerabilityCheck4.png -------------------------------------------------------------------------------- /assets/IMG024_VulnerabilityCheck5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/jp-sqlsecurity/0d9d0e897b6c2c802cd59e0ec585ea22cbbf1e80/assets/IMG024_VulnerabilityCheck5.png -------------------------------------------------------------------------------- /assets/IMG025_AlrertMail1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/jp-sqlsecurity/0d9d0e897b6c2c802cd59e0ec585ea22cbbf1e80/assets/IMG025_AlrertMail1.png -------------------------------------------------------------------------------- /assets/IMG026_AlrertMail2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Azure/jp-sqlsecurity/0d9d0e897b6c2c802cd59e0ec585ea22cbbf1e80/assets/IMG026_AlrertMail2.png -------------------------------------------------------------------------------- /chapter01.md: -------------------------------------------------------------------------------- 1 | # 第1章 データ基盤におけるデータ セキュリティの重要性 2 |
3 | 大量のデータの利活用を前提にした DX の推進が求められる時代。データ利活用にはセキュリティを担保することも要求され、多層防御の中で、データの格納先であり、データの源泉であるデータ基盤でのセキュリティの重要性が高まっています。 4 | まずは、データ セキュリティの全体像を紹介します。 5 | 6 | ## 1. NIST CSF(Cyber Security Framework)コア機能と Azure での対応 7 | 企業・組織が サイバーセキュリティ対策を向上させるための指針として、ISMS、CIS Controls、PCI DSS、NIST CSF などが活用されます。 8 | データ基盤である SQL Database、Azure Synapse Analytics でもこれらのフレームワークを元にセキュリティ対策を実施することが求められます。 9 | 10 | 「重要インフラのサイバーセキュリティ対策を改善するためのフレームワーク」である [NIST CSF(Cyber Security Framework)は、IPA より翻訳版](https://www.ipa.go.jp/files/000071204.pdf)が公開されており、世界で多くの企業・組織で活用されています。 11 | その 5 つのコア機能に対して、データ基盤 SQL Database, Azure Synapse Analytics での主な対策と利用できるサービスは以下のようになります。 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 |
機能内容Azure データ基盤での対応活用が可能なサービス
識別・評価
Identify
脅威検出/データ資産評価データ識別・分類、脆弱性評価Microsoft Purview Data Catalog(データ識別・分類)
Microsoft Sentinel(定期分析)
Microsoft Defender for SQL
防御
Protect
ネットワーク セキュリティ構成(VNET, プライベート リンク)
FW
IPS・IDS
認証ユーザー認証(AAD 認証/SQL 認証)
アクセス制御DB でのアクセス制御設定(ロール、オブジェクト、行、列)
マスキング
データ保護暗号化(NW 及び DB の暗号化)
検知
Detect
ログ モニタリング
フォレンジック
データ識別・分類、脆弱性評価Microsoft Defender for SQL
対応
Respond
対応計画の作成、コミュニケーション、分析、低減、改善 Microsoft Sentinel(インシデント対応)
復旧
Recover
復旧計画の作成、改善、コミュニケーション
63 | 64 | 65 | 66 | ※[NIST CSF(Cyber Security Framework)における機能とカテゴリーの識別子(IPA)](https://www.ipa.go.jp/files/000071204.pdf) 67 | 68 |
69 | 70 | 1. 識別・評価( Identify ) 71 | 72 | セキュリティ対策の対象を識別し、脆弱性の評価を行うことがまず求められます。すべてのリソース、データを対象とすることは不可能であり、対策の強度が適切でなくなります。 73 | 74 | セキュリティ対策を決定する際に、このプロセスは重要ですが、データを取り扱うシステム担当とセキュリティ担当との間での連携が必要であり、その識別の難しさもあいまって、とりあえず全部を対象にしたい、といった要求がされることはよくあることと思います。またシステムは変化し、追加削除も行われるため、常に評価をアップデートし続けることが求められます。 75 | 76 | 2. 防御( Protect ) 77 | 78 | 守るべきデータ資産とその脆弱性に応じて、必要十分な防御対策を行います。 79 | 80 | 防御においては、明らかにリスクであり不正と識別されるものを排除し、データ資産にアクセスさせないことになります。 81 | 82 | ここでは、ネットワークの境界防御がわかりやすく、ほとんどの企業、システムで最低限の対策として行われるものです。 83 | 84 | それに加えて、データ基盤では、データ基盤が提供するアクセス制御を適切に組み込むことを意識し設計する必要があります。 85 | 86 | 3. 検知( Detect ) 87 | 88 | 防御対策だけで 100% 守れるものではありません。防御をすり抜ける、不備を突く攻撃や、正当な操作の中に潜むリスクに対応する検知の対策も重要です。 89 | 90 | セキュリティ インシデントが起こることを前提として、データ基盤やシステム内での振る舞いを記録しログをモニタリングすることで、脅威やインシデント発生をいち早く検知し、被害を最小限に食い止めるための対応、復旧へとつなげていく必要があります。 91 | 92 | それぞれの防御対策が有効に機能しているか、新たな脆弱性がないか、といったセキュアな環境の維持のためにも欠かせません。 93 | 94 | 4. 対応( Respond ) 95 | 96 | インシデント発生の予兆や、インシデント発生を検知するための組織としての対応体制を構築することが求められます。 97 | 98 | 5. 復旧( Recover ) 99 | 100 |
101 | 102 | ![データ基盤のセキュリティ](/assets/IMG001_DatabaseSecurity_NIST_CSF.svg) 103 | 104 |
105 | 106 | ## 2. クラウド サービスでのセキュリティ 107 | 108 | #### Shared Responsibility の考え方 109 | 今や広く活用が進む、クラウド サービス。クラウド サービスでのセキュリティについて、Shared Responsibility の考え方は広く認識されるようになっています。 110 | 111 | クラウド サービスとして提供される環境でのデータ資産に対するセキュリティについても、基本的な考え方である Shared Responsibility を確認し、データ基盤におけるデータ オーナーとしての責任を理解し対策を考えることが重要と言えます。 112 | 113 | 逆に、クラウド サービスを活用することで、クラウド プロバイダーに責任をシフトすることができ、すべての セキュリティリスクへ対応するために必要な膨大なリソースを、より効果的な対応に集中することができます。 114 | 115 | ただし、クラウド環境のデプロイの種類に関係なく、以下については、利用者・ユーザーがすべて責任を負うことを理解しなければなりません。 116 | 117 | * データ 118 | * エンドポイント 119 | * Account 120 | * アクセス管理 121 | 122 | データ基盤では基本的にユーザー側にその責任があることを認識することが重要です。 123 |
124 | 125 | ![Shared Responsibility](/assets/IMG002_SharedResponsibility.svg) 126 | 127 | 128 | 129 |
130 | 131 | ### Azure SQL Database 用の Azure セキュリティ ベースラインの活用 132 | クラウド ベンダーから提供されているベスト プラクティスを活用することで、セキュリティ対応を一から設計し対策を構築するよりも、早くそして確実にセキュアなデータ基盤を構築、運用することができます。 133 | 134 | **Azure SQL Database 用の Azure セキュリティ ベースライン** 135 | 136 | 137 | ネットワークのセキュリティ 138 | NS-1: 内部トラフィック用のセキュリティを実装する 139 | NS-2: プライベート ネットワークをまとめて接続する 140 | NS-3: Azure サービスへのプライベート ネットワーク アクセスを確立する 141 | NS-6: ネットワーク セキュリティ規則を簡略化する 142 | NS-7: セキュリティで保護されたドメイン ネーム サービス ( DNS ) 143 | ID 管理 144 | IM-1: Azure Active Directory を中央 ID および認証システムとして標準化する 145 | IM-2: アプリケーション ID を安全かつ自動的に管理する 146 | IM-3: アプリケーションのアクセスに Azure AD シングル サインオン ( SSO ) を使用する 147 | IM-7: 意図しない資格情報の公開を排除する 148 | 特権アクセス 149 | PA-1: 高い特権を持つユーザーを保護および制限する 150 | PA-3: ユーザー アクセスを定期的に確認して調整する 151 | PA-6: 特権アクセス ワークステーションを使用する 152 | PA-7: Just Enough Administration (最小限の特権の原則) に従う 153 | PA-8: Microsoft サポートの承認プロセスを選択する 154 | アセット管理 155 | AM-1: セキュリティ チームが資産のリスクを確実に可視化できるようにする 156 | AM-2: セキュリティ チームが資産インベントリとメタデータに確実にアクセスできるようにする 157 | AM-3: 承認された Azure サービスのみを使用する 158 | ログと脅威検出 159 | LT-1: Azure リソースの脅威検出を有効にする 160 | LT-2: Azure ID とアクセスの管理のために脅威検出を有効にする 161 | LT-3: Azure ネットワーク アクティビティのログ記録を有効にする 162 | LT-4: Azure リソースのログ記録を有効にする 163 | LT-5: セキュリティ ログの管理と分析を一元化する 164 | LT-6: ログの保持期間を構成する 165 | LT-7: 承認された時刻同期ソースを使用する 166 | 体制と脆弱性の管理 167 | PV-1: Azure サービスのセキュリティで保護された構成を確立する 168 | PV-2: Azure サービスのセキュリティで保護された構成を維持する 169 | PV-3: コンピューティング リソースにセキュリティで保護された構成を確立する 170 | PV-8: 定期的に攻撃シミュレーションを実施する 171 | エンドポイント セキュリティ 172 | ES-2: 一元管理された最新のマルウェア対策ソフトウェアを使用する 173 | ES-3: マルウェア対策ソフトウェアと署名が確実に更新されるようにする 174 | バックアップと回復 175 | BR-1: 定期的な自動バックアップを保証する 176 | BR-2: バックアップ データを暗号化する 177 | BR-3: カスタマー マネージド キーを含むすべてのバックアップを検証する 178 | BR-4: キー紛失のリスクを軽減する 179 | 180 |

181 | 182 | -------------------------------------------------------------------------------- /chapter02.md: -------------------------------------------------------------------------------- 1 | # 第2章 データ基盤でのセキュリティ要件 2 |
3 | 4 | 多層防御で重要データを守るために、データ基盤でも、データベースで提供される認証及びアクセス制御の機能を活用し適切に設定することでリスクを低減します。またデータをやりとりする通信に加えて、データの暗号化、マスキングにより、データを無害化することも可能です。 5 | 6 | そして、防御をすり抜ける、あるいは、正当なアクセス権による正常とみなされる操作の中にあるリスクに対して、検知の対策を行うことが最重要です。 7 | 8 | データ基盤、データベースにおけるセキュリティ要件をまとめます。 9 | 10 | 11 | ## 1. ネットワークの制御だけで十分か? 求められる多層防御 12 | セキュリティ対策の中でも、ネットワークの対策やエンドポイントでの対策に比べ、データ基盤、データベースにおける対策はあまり意識されないことが多く、後回しにされがちです。 13 | 14 | 侵入された場合は無防備であり、近年大きな問題となっている、標的型攻撃、ランサムウェアのような攻撃で、権限を奪取されデータ基盤まで侵入されるといったリスクが拡大しています。多層防御として、データ基盤、データベースでの対策を考えることが重要です。 15 | 16 |
17 | 18 | ![多層防御によるデータ セキュリティ](/assets/IMG003_DefenseInDepthForDataSecurity.svg) 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 |
データ基盤へのアクセスパターン対応レイヤ
ネットワークデータベース
許可されていない DB へのアクセス構成(VNET, プライベート リンク)
FW
IPS・IDS
ユーザー認証(AAD 認証/SQL 認証)
DB 内アクセス範囲外へのアクセスDB でのアクセス制御設定
(ロール、オブジェクト、行、列)
マスキング
アクセス権限は持っているが 許可されていないアクセス通信の暗号化データベースの暗号化
正当な権限を使った不正アクセスDB 操作ログのモニタリング
フォレンジック
52 | 53 |
54 | 55 | 56 | 57 | [「第1章 データ基盤におけるデータセキュリティの重要性」](/chapter01.md/#1-nist-csf(cyber-security-framework)コア機能と-azure-での対応)で紹介した防御対策の中で、「ネットワーク セキュリティ」で入り口での防御対策は第一歩であり、セキュリティの大前提です。 58 | 59 | その上で、データ基盤までアクセスできる場合のリスクを考えた防御対策である、データ基盤のアクセス制御や暗号化に加えて、データ基盤でのふるまいをログとして記録しモニタリングすることは、最後の砦であり非常に重要であることを認識する必要があります。 60 | 61 | 防御対策は、アクセス情報を持っていない宛先に対する無差別なアクセスの試行、許可されていないデータ資源に対する攻撃の試行、といった、決められたアクセス元 IP/ホストからの決められたポートに対するアクセスのみ許可する、といったルール化が可能な試みをブロックすることが主な対応となります。 62 | 63 | それらはほぼすべて、データ基盤に入る前にブロックされます。 64 | 65 | それだけで大丈夫でしょうか? 66 | 67 | これまでの事例や昨今の攻撃手法をみると、データ基盤までアクセスでき、そのことによって重大なセキュリティ インシデントになってしまうことがわかります。 68 | 69 | データ基盤での対策は最後の砦ともいえるでしょう。 70 | 71 | データ基盤での対策としては以下の2種類のユーザーに対しての制御が必要になります。 72 | 73 | * データ基盤へのアクセスはできるが、アクセス範囲が限定され、アクセスできる範囲や方法が限られる 通常の DB ユーザー 74 | * アクセス制限はなく重要データにもアクセスできる 管理者・特権ユーザー 75 | 76 | また、防御では区別が困難で、検知の対策がより重要になってきます。 77 | 78 |
79 | 80 | ※防御対策の限界、課題 81 | 82 | * 認証及びアクセス制御で防御できる範囲の限界 83 | * 正常と判断されるものの中に潜む異常の判別 84 | * 誤検知(異常と判断されてしまうこと)及び、切り分けの難しさ 85 | * 特に、DB にログイン/アクセスできてしまう、権限ユーザーのなりすまし、その権限ユーザー自体の問題(内部リスク) 86 | 87 |
88 | 89 | ![Database Security 全体像](/assets/IMG006_DatabaseSecuritOverview.svg) 90 | 91 |

92 | 93 |
Tips : データベース アクセスをセキュアに
94 |
95 | ネットワーク層でセキュアなデータベース アクセスを実現する 「Azure Private Link」 96 | 97 | 98 | 99 | Azure Private Link を使用し、仮想ネットワーク内の[プライベート エンドポイント](https://docs.microsoft.com/ja-jp/azure/private-link/private-endpoint-overview)経由で Azure SQL Database など Azure でホストされているサービスにアクセスできます。 100 | 101 | 仮想ネットワークとサービスの間のトラフィックは、Microsoft のバックボーン ネットワークを通り、パブリック インターネットにサービスを公開する必要はないため、 セキュアでプライベートなアクセスを実現します。 102 | 103 | ![Azure Private Link](/assets/IMG007_AzurePrivateLink.svg) 104 |
105 | 106 |

107 | 108 | ## 2. データ基盤、データベースでのリスクとセキュリティのポイント 109 | 110 | データ基盤、データベースでのリスクとセキュリティ対策のポイントを、具体例を元にご紹介します。 111 | 112 |
113 | 114 | #### ◆ SQL インジェクション 115 | 116 | 昔から知られているデータベースでのリスクとして、SQL インジェクションがあります。 117 | 118 | SQL インジェクションは基本的にはアプリケーションで問題のある SQL が生成されないよう、サニタイジングします。しかしながら、100% を求めることは難しいため、データベース層でもモニタリングしておくことも必要です。 119 | 120 | セキュリティ インシデント事例 121 | : Web サイトコンテンツ管理システム(CMS)で提供された、コメントフォームなどに対するスパムをブロックするプラグインに SQL インジェクションの脆弱性があった。 122 | ユーザーエージェントをデータベースの独自テーブルに格納するため、ユーザーが SQL クエリを準備するなどが必要で、その SQL 処理にユーザーが意図しない SQL 文を紛れ込ませるというもの。この脆弱性を利用することは比較的容易で、記事を書き換えたり、意図しない投稿がされたり、データベースを削除する、といったことが可能だった。 123 | 124 |
125 | 126 | #### ◆ アカウントとパスワードの漏えい、搾取 127 | 128 | Web を介したサービスにおいては、顧客アカウントの搾取リスクは常に存在します。 129 | 130 | アプリケーションを経由したアクセスでは、DB でのアクセス制御は正常と判断され、無意味です。データベースでの振る舞いで初めて異常と判断されることになります。 131 | 132 | セキュリティ インシデント事例 133 | : 広く公開される EC サイトで、ある日、大量の更新操作が記録され、データベースの更新ログ領域が爆発した。ユーザー アカウント・パスワードが奪取(広く知れ渡ったものでの辞書攻撃)されていて、当該アカウントによる大量の更新操作が行われたことによる被害だった。 134 | 購入行為ではなかったので、大きな問題にはならなかったが、アクセスしづらくなるなど、サービスへの影響が発生した。 135 | 136 |
137 | 138 | #### ◆ 内部リスク 139 | 140 | 発生件数としては多くありませんが、内部リスクでの被害は非常に大きなものになることが多々あります。多層防御の視点において、権限をもったアクセス及び操作でのセキュリティ リスクへの対策は、データ基盤としては特に重要なものとなります。 141 | 142 | 内部からの過失や悪意によるものだけでなく、標的型攻撃による、権限を与えられているアカウントの奪取などによって、”内部”の操作におけるリスクが高まっています。 143 | 144 | また、情報漏えいのみをターゲットにしがちですが、改ざんや破壊行為にも十分な注意を払う必要があります。 145 | 146 | セキュリティ インシデント事例 147 | : システム運用を委託するグループ会社の派遣エンジニアによって、直接データベースから顧客個人情報を大量に取得し、名簿業者に複数回に渡って売却された。 148 | 組織的な問題として個人情報へのアクセス権を申請承認して付与する仕組みはあったが、アクセス権限の見直しが行われていなかった。また内部不正を想定しておらず、管理体制が十分ではなかった。 149 | 個人情報を細分化などして、アクセス権を細かく設定したり、データ使用目的別にマスキングしたりするなどのデータベースでのアクセス制御も十分ではなかった。データベースのアクセス ログは取得していたが、定期的にモニタリングされることはなく、流出した個人情報が転売先で利用されたことによって発覚した。 150 | 151 |
152 | 153 | データ基盤、データベースもクラウドへのシフトが進んでおり、クラウド サービスによって、レプリケーション、エクスポート、バックアップといった、データの保管やコピー、転送などの操作は、これまでより容易に実行することができるようになってきました。 154 | クラウド データ基盤においては、こういった特性も踏まえて対策を実施する必要があることを付け加えたいと思います。 155 | 156 |
157 | 158 | ## 3. データ基盤、データベース セキュリティ セルフチェック 159 | 160 | データベース セキュリティをセルフチェックしてみましょう。 161 | 162 |
163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 |
項目対応済み一部対応未対応わからない
認証・アクセス制御
アカウントは、利用者別に、必要最小限の権限に限定して作成する
不要なアカウントはすみやかに削除する
特定業務だけに使用するようなアカウントは、通常時は利用できないようにロックする
一時的な利用の際には、その都度アカウント作成するか、パスワード設定を行って利用させるようにする
開発環境と本番環境で、アカウントやパスワードは分ける
強力な権限を持つ DB 管理者アカウントは、担当者別に割り当て、利用は必要最小限とどめる
パスワードは、複雑なパスワードにし、払い出されたパスワードの初回利用時に変更させる
DB 管理者アカウントに対しては、パスワードの定期的な変更や、有効期限を設定する
ログインに連続して失敗した場合にはアカウントロックするなど対策する
アカウントは定期的に棚卸し、権限を含めて見直しをする
アクセス権を付与できるアカウントは限定する
データ保護
DB とクライアント間の通信は暗号化する
DB 格納データを暗号化する
エクスポート、スナップショットなど、バックアップデータを暗号化する
検知・ログ モニタリング
インシデント調査/追跡を可能にするため、適切な内容のログを取得する
必要な場合に利用できるよう、取得したログを適切に保全する
不正アクセスやその試行を早期に検知する仕組みを設ける
不正アクセスの原因究明や、不正行為を検出するため、ログを分析する仕組みを設ける
環境及び運用
DB にアクセス可能な端末あるいはセグメントを限定し、不特定多数の端末から直接アクセスできないようにする。
また DB にアクセスするアプリケーションの配布範囲を限定する
最新の脅威を踏まえて、システム稼働前、及び定期的にセキュリティ診断を実施する
DB 構成ファイル、定義スクリプトへのアクセスを制限し、定期的に権限見直しを実施する
稼動するプログラムは改ざんがなされないようチェック、およびテストを実施する
197 | 198 |
199 | 200 | 201 | -------------------------------------------------------------------------------- /chapter03.md: -------------------------------------------------------------------------------- 1 | # 第3章 Microsoft Defender for SQL で実現するデータベース セキュリティ 2 |
3 | 4 | データ基盤でのデータ セキュリティを実現し運用し続けるためには、時間もコストもかかることがネックとなります。セキュリティの中でもデータ基盤レイヤでの対策を理解した要員、体制を維持することはハードルが高いのが現実です。 5 | 6 | Microsoft Defender for SQL は、データ基盤で効果的なセキュリティを効率的に実現します。 7 | 8 |
9 | 10 | #### Microsoft Defender for SQL で実現できること 11 | 12 | ##### 1. セキュリティ インシデントの検知・アラート(監査) [「SQL Advanced Threat Protection」](#1-sql-advanced-threat-protection) 13 | ##### 2. 脆弱性の診断と推奨アクションの提起 [「SQL 脆弱性評価」](#2-sql-脆弱性評価) 14 | 15 |
16 | 17 | ## 1. SQL Advanced Threat Protection 18 | 19 | 20 | セキュリティ対策の中で「検知」対策はあまり重要なものと意識されてきませんでしたが、セキュリティインシデントが起こることを前提にした多層防御が求められる中、特にデータ基盤での「検知」対策は必ず実査すべきものといえます。 21 | 22 | 何をログとして取得すればよいのか、また取得する方法がわからないためログすらも取得しない、あるいはログを取得しても労力のわりに成果が形になって表れることが少なく、結果的に、ログを取得するだけでモニタリングまで行えていない、となりがちです。 23 | 24 | そういった「検知」対策の悩みにこたえるインテリジェントなサービスが、Microsoft Defender for SQL の Advanced Threat Protection です。 25 | 26 | ![Advanced Threat Protection 何が実現できるのか](/assets/IMG009_CheckIcon.png) 何が実現できるのか? 27 | 28 | データ基盤、データベースでのリスクである、不審なデータベース アクティビティ、潜在的な脆弱性、SQL インジェクション攻撃や、異常なデータベース アクセスやクエリのパターンを、異常なアクティビティとして検知し、セキュリティ アラートを上げます。 29 | 30 | さらに、Microsoft Defender for Cloud に統合して管理することで、不審なアクティビティの詳細と、脅威の調査や危険性の軽減のために推奨される対処方法まで提示されます。 31 | 32 | ![Advanced Threat Protection どんなメリットがあるのか ](/assets/IMG009_CheckIcon.png) どんなメリットがあるのか? 33 | 34 | こういったデータベース セキュリティに必要とされる、データベース セキュリティの専門的な知識、経験は必要なく誰でもどの SQL 環境でも利用できます。また、そのための高度に難易度の高い、セキュリティ監視システムを導入して管理する必要もありません。 35 | 36 | ![Advanced Threat Protection どうすれば利用できるのか ](/assets/IMG009_CheckIcon.png) どうすれば利用できるのか? 37 | 38 | Microsoft Defender for SQL を有効にしていただくだけですぐに利用できるようになります。 39 | 40 | また、より完全で高度な調査やリスク監視を実現する場合は、SQL の「監査」機能を有効にし、データベース イベントを Azure ストレージ アカウントに監査ログを書き込み、モニタリング範囲を広く深くしていただくことが推奨されます。 41 | 42 | 監査設定について 43 | : Azure SQL Database と Azure Synapse の監査 44 | 45 | Azure SQL Managed Instance の監査 46 | 47 | 48 |
49 | 50 | ### Advanced Threat Protection のインテリジェントな分析手法 51 | 52 | Defender for Cloud は、攻撃者によって脆弱性の悪用手法が次々に生み出され、複雑化していく中で、その検出アルゴリズムを迅速に更新し、脅威の環境の変化に対応しています。 53 | 54 | Defender for Cloud では、誤検知を減らして真の脅威を検出するために、Azure のリソースやネットワークから、ログ データを収集し、分析、統合しています。接続されているパートナー ソリューション (ファイアウォールやエンドポイント保護ソリューションなど) とも連動。Defender for Cloud は、これら情報を分析し、複数の情報源から得た情報との関連性も探りながら、脅威を特定しています。 55 | 56 |

Defender for Cloud Data collection and presentation

57 | 58 | Defender for Cloud では、シグネチャ ベースの手法とは比較にならない高度なセキュリティ分析を利用できます。ビッグ データや機械学習といった革新的なテクノロジーでクラウド環境全体にわたってあらゆるイベントを評価します。 59 | 手作業に頼った手法、これまでの攻撃の進化を予測する手法では特定できない脅威でも検出することができるのです。 60 | 61 |
62 | 63 | ### 1.1. Microsoft Defender for SQL を有効にする 64 | Azure、ハイブリッド、その他のクラウド プラットフォームで実行されているワークロードのセキュリティ体制管理と脅威保護のためのツール Microsoft Defender for Cloud の中で、Microsoft Defender for SQL は高度な SQL セキュリティ機能のための統合パッケージです。 65 | Microsoft Defender for Cloud は、Azure SQL Database、Azure SQL Managed Instance、Azure Synapse Analytics で使用可能です。データベースの潜在的な脆弱性の検出及び軽減する機能、データベースに対する脅威を示す異常な行動を検出する機能が含まれ、これらの機能を 1 つの場所で有効にし、管理することができます。 66 | 67 | Microsoft Defender for Cloud の Microsoft Defender for SQL プランを ON にして有効にします。サブスクリプション レベル、リソース レベルで設定が可能です。 68 | 69 | https://docs.microsoft.com/ja-jp/azure/azure-sql/database/azure-defender-for-sql 70 | 71 |
72 | 73 | ##### Azure ポータルでの「サブスクリプション レベル」での設定手順 74 | 75 | 1. サービスで、[ Microsoft Defender for Cloud ] を選択 76 | [ 環境設定 ] から、サブスクリプション] の右のメニューから [ 設定の編集 ] をクリックして設定画面を開く 77 | 78 |

Defemder for Cloud 設定 ポータル メニュー

79 | 80 | 2. 「データベース」をオンにして保存します。 81 | 82 |

Defemder for Cloud 設定

83 | 84 |
85 | 86 | ### 1.2. Advanced Threat Protection for Azure SQL Database を構成する 87 | 88 | Azure portal で Advanced Threat Protection を設定・構成します。 89 | 90 | PowerShell を使用して Advanced Threat Protection を設定することも可能です。 91 | 92 | ##### 1.2.1. Microsoft Defender for SQL がまだ有効になっていない場合は、[ Enable Microsoft Defender for SQL ] をチェックし有効にします。 93 | 94 |

Microsoft Defender for SQL 設定1

95 | 96 | ##### 1.2.2. [ 構成 ] をクリックし Microsoft Defender for SQL の構成を設定します。 97 | 98 |

Microsoft Defender for SQL 設定2

99 | 100 | ##### 1.2.3. [ Advanced Threat Protection 設定 ] で、[ Defender for Cloud のサブスクリプションのメール設定に連絡先の詳細を追加します ] をクリックして、通知の連絡先を指定します。 101 | 102 |

Microsoft Defender for SQL 設定3

103 | 104 | ◇ メールの受信者 105 | 異常なデータベース アクティビティの検出時に通知を受け取るユーザーを設定 106 | ・ロールで指定 107 | ・[ 追加のメール アドレス(コンマで区切って入力)]  108 | ◇ [ 通知の種類 ] で通知送信を実行するアラートの重大度をカスタマイズする 109 |
110 | [ 保存 ] して [ × ] で画面を終了します。 111 | 112 |
113 | 114 | ### 1.3. SQL Database と Azure Synapse Analytics での Advanced Threat Protection アラートの活用 115 | 116 | 117 | Microsoft Defender for SQL を有効にすることで、即座にアラートを活用することができます。 118 | 119 | [「第2章 2. データ基盤、データベースでのリスクとセキュリティのポイント」](/chapter02.md/#2-データ基盤データベースでのリスクとセキュリティのポイント)で紹介したデータ基盤でのリスク例に対して、SQL Advanced Threat Protection のアラートがどのように対応できるかをご紹介します。 120 | 121 |
122 | 123 | #### 【リスク1】SQLインジェクション 124 | 125 | Web サイトコンテンツ管理システム(CMS)で提供された、コメントフォームなどに対するスパムをブロックするプラグインに SQL インジェクションの脆弱性があった。 126 | ユーザーエージェントをデータベースの独自テーブルに格納するため、ユーザーが SQL クエリを準備するなどが必要で、その SQL 処理にユーザーが意図しない SQL 文を紛れ込ませるというもの。この脆弱性を利用することは比較的容易で、記事を書き換えたり、意図しない投稿がされたり、データベースを削除する、といったことが可能だった。 127 | 128 | **Advanced Threat Protection のアラート** 129 | 130 | 「 SQL インジェクションの可能性」のアラートにより、テストフェーズで事前に検知したり、早期に攻撃を発見して対応を可能にします。 131 | 132 | **※A possible vulnerability to SQL Injection(SQL インジェクションにつながる可能性のある脆弱性)** 133 | : 攻撃前 PreAttack 重要度 中 134 | 135 | データベースでエラーのある SQL ステートメントが生成された。SQL インジェクション攻撃に対する脆弱性がある可能性を意味します。 136 | 137 | * エラーのあるステートメントが生成される要因 138 | - アプリケーション コードの欠陥によって誤った SQL 文を生成 139 | - アプリケーション コードまたはストアド プロシージャで、SQL 文を生成する際にユーザー入力をサニタイズせず、SQL インジェクションに悪用される可能性のある誤った SQL 文を生成 140 | 141 | **※SQL インジェクションの可能性** 142 | : 攻撃前 PreAttack 重要度 高 143 | 144 | SQL インジェクションの脆弱性が確認されたアプリケーションを攻撃する、アクティブなエクスプロイトが発生している。
145 | 攻撃者が脆弱なアプリケーション コードまたはストアド プロシージャを使用して、悪意のある SQL 文の注入を試みていることを意味します。 146 | 147 |
148 | 149 | #### 【リスク2】アカウントとパスワードの漏えい、搾取 150 | 151 | 広く公開される EC サイトで、ある日、大量の更新操作が記録され、データベースの更新ログ領域が爆発した。ユーザー アカウント・パスワードが奪取(広く知れ渡ったものでの辞書攻撃)されていて、当該アカウントによる大量の更新操作が行われたことによる被害だった。 152 | 購入行為ではなかったので、大きな問題にはならなかったが、アクセスしづらくなるなど、サービスへの影響が発生した。 153 | 154 | **Advanced Threat Protection のアラート** 155 | 156 | ブルートフォース攻撃の検知で、アカウント・パスワードの搾取を検知します。また、流出したアカウント・パスワードを使ったと思われる異常行動も監視します。 157 | 158 | **※Suspected brute force attack(ブルート フォース攻撃の可能性)** 159 | : 攻撃前 PreAttack 重要度 高 160 | 161 | ブルートフォース攻撃の可能性を検出。 162 | 163 | **※Suspected successful brute force attack(ブルート フォース攻撃が成功した可能性)** 164 | : 攻撃前 PreAttack 重要度 高 165 | 166 | 明らかにブルートフォースアタックが行われた後、ログインに成功。 167 | 168 | ◇ Microsoft Sentinel でオリジナルなアラート ルールとして、以下のような検知ルールを作成することも効果的です。 169 | 170 | ・同一アカウントによる短時間での大量ログイン 171 | ・同一アカウントによる短時間での大量の SQL 実行 172 | 173 |
174 | 175 | #### 【リスク3】内部リスク 176 | 177 | システム運用を委託するグループ会社の派遣エンジニアによって、直接データベースから顧客個人情報を大量に取得し、名簿業者に複数回に渡って売却された。 178 | 組織的な問題として個人情報へのアクセス権を申請承認して付与する仕組みはあったが、アクセス権限の見直しが行われていなかった。また内部不正を想定しておらず、管理体制が十分ではなかった。 179 | 個人情報を細分化などして、アクセス権を細かく設定したり、データ使用目的別にマスキングしたりするなどのデータベースでのアクセス制御も十分ではなかった。データベースのアクセス ログは取得していたが、定期的にモニタリングされることはなく、流出した個人情報が転売先で利用されたことによって発覚した。 180 | 181 | **Advanced Threat Protection のアラート** 182 | 183 | 大量のデータで、アカウント・パスワードの搾取を検知します。また、流出したアカウント・パスワードによる異常行動も監視します。 184 | 185 | **※Unusual export location(通常とは異なるエクスポート場所)** 186 | : 不正転送 Exfiltration 重要度 高 187 | 188 | SQL Server から大量のデータを通常と異なる場所にエクスポート。 189 | 190 | ◇ Microsoft Sentinel でオリジナルなアラート ルールとして、以下のような検知ルールを作成することも効果的です。 191 | 192 | ・重要データのあるテーブルに対する、大量データの取得操作 193 | ・管理者など権限のある DB ユーザーによる操作のログは定期的に確認しておくことも重要です。 194 | 195 |
196 | 197 | #### Microsoft Defender for SQL の Advanced Threat Protection のアラート リスト
198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 |
アラート(アラートの種類)攻撃戦術
MITRE tactics
重要度
A possible vulnerability to SQL Injection(SQL インジェクションにつながる可能性のある脆弱性)攻撃前
PreAttack
Attempted logon by a potentially harmful application(潜在的に有害なアプリケーションによりログオンが試行されました)攻撃前
PreAttack
Log on from an unusual Azure Data Center(通常とは異なる Azure データ センターからのログオン)探査
Probing
Log on from an unusual location(通常とは異なる場所からのログオン)悪用
Exploitation
Login from a principal user not seen in 60 days(プリンシパル ユーザーからのログインが 60 日以内に確認されていません)悪用
Exploitation
Login from a suspicious IP(疑わしい IP からのログイン)攻撃前
PreAttack
Potential SQL Brute Force attempt(SQL ブルートフォース攻撃試行の可能性)探査
Probing
SQL インジェクションの可能性攻撃前
PreAttack
Potentially Unsafe Action(安全でない可能性のあるアクション)
Suspected brute force attack using a valid user(有効なユーザーを使用したブルート フォース攻撃の可能性)攻撃前
PreAttack
Suspected brute force attack(ブルート フォース攻撃の可能性)攻撃前
PreAttack
Suspected successful brute force attack(ブルート フォース攻撃が成功した可能性)攻撃前
PreAttack
Unusual export location(通常とは異なるエクスポート場所)不正転送
Exfiltration
273 | 274 | 275 |

276 |
277 | Microsoft Sentinel で、以下のようなデータベースのログ監視、アラート ルール定義を活用できます。 278 |
    279 |
  • Failed Logon Attempts on SQL Server ログイン試行による失敗ログイン
  • 280 |
  • Failed Logon on SQL Server from Same IPAddress in Short time Span 同じ IP アドレスからの短時間でのログイン試行(失敗ログイン)
  • 281 |
  • Multiple Failed Logon on SQL Server in Short time Span 短時間での複数の失敗ログイン
  • 282 |
  • New User created on SQL Server 新規ユーザーの作成
  • 283 |
  • User added to SQL Server SecurityAdmin Group セキュリティ管理者グループのユーザー作成
  • 284 |
  • SQL User deleted from Database ユーザーの削除
  • 285 |
  • User removed from SQL Server SecurityAdmin Group セキュリティ管理者グループからのユーザー削除
  • 286 |
  • User removed from SQL Server Roles SQL Server ロールからのユーザー削除
  • 287 |
  • User Role altered on SQL Server ユーザーのロール変更
  • 288 |
  • Response rows stateful anomaly on database - hunting query 異常な動的レコード応答
  • 289 |
  • Anomalous Query Execution Time 異常なクエリ実行回数
  • 290 |
  • Boolean Blind SQL Injection ブール値ブラインドによる SQL インジェクション
  • 291 |
  • Prevalence Based SQL Query Size Anomaly 異常なサイズのクエリ率(割合)
  • 292 |
  • Suspicious SQL Stored Procedures 怪しいストアドプロシージャ
  • 293 |
  • Time Based SQL Query Size Anomaly 異常なサイズのクエリ実施時間
  • 294 |
  • Affected rows stateful anomaly on database - hunting query 異常に動的に影響を受けるレコード
  • 295 |
296 |
297 | 298 |
299 | 300 | ### 1.4. 疑わしいイベントの検出とアラートの調査 301 | セキュリティ アラートは、Azure Portal の Microsoft Defender for Cloud 概要ページ上部にある [ セキュリティ アラート ] で確認できます。また、これらのアラートへの対応も Azure Portal で行うことができます。 302 | 303 | 304 | 305 |

Microsoft Defender for Cloud 概要

306 | 307 |

セキュリティ アラート

308 | 309 |

310 | 311 | ## 2. SQL 脆弱性評価 312 | 313 | 314 | SQL 脆弱性評価は、データ基盤、データベースのセキュリティの状態を可視化するサービスです。セキュリティ プロセスにおける「識別・評価 Identify」の脆弱性評価として活用できます。 315 | 316 | システム導入時点での評価だけでなく、運用フェーズでも、常に最新の状態を評価することは重要です。しかし、システムリリース後に常に監視しセキュリティ レベルをアップデートすることは困難です。リソースを割くことも難しくなります。 317 | 318 | このサービスを利用することで、常に最新で最適なセキュリティの状態を維持することができます。 319 | 320 | この脆弱性評価には、セキュリティの問題を解決し、データベースのセキュリティを強化するために実践できる手順も含まれていることもポイントです。 321 | 322 | 常に変化し変更の追跡が難しいデータベース環境を監視し、そのセキュリティ対応を維持しさらに改善します。 323 | 324 | 脆弱性評価は、Azure SQL Database に組み込まれているスキャン サービスで、セキュリティの脆弱性にフラグを付ける、ナレッジベースのルールを使います。 325 | 326 | 誤った設定、過剰なアクセスの許可設定、保護されていない機密データなど、データベース セキュリティのベスト プラクティスからの逸脱した状況を明らかにし警告します。 327 | 328 | SQL 脆弱性評価のルールは Microsoft のベスト プラクティスに基づいて、データベース及びその中に格納された機微データにとって最大のリスクとなるセキュリティ問題に着目して定義されています。データベース レベルの問題と、サーバーのファイアウォール設定やサーバー レベルの権限などのサーバー レベルのセキュリティ問題の両方がカバーされます。 329 | 330 | スキャンの結果には、各々の問題を解決するために実践できる手順が含まれ、またカスタマイズした修復用のスクリプトも適宜提供されます。また、初期にデフォルトで定義されるベースラインから、環境に応じて、次回以降に適用したいベースラインを再定義・設定することにより、環境に合わせて評価レポートをカスタマイズすることができます。 331 | 332 | ベースラインの判定項目 333 | 334 | * アクセス許可の構成 335 | 336 | * 機能の構成 337 | 338 | * データベース設定 339 | 340 |
341 | 342 | ### 2.1. 脆弱性評価を構成する 343 | 344 | Azure portal で 脆弱性評価 を設定・構成します。 345 | 346 | ##### 2.1.1. Azure SQL Database、SQL Managed Instance データベース、または Azure Synapse の特定のリソースにアクセスし、[ セキュリティ ] > [ Microsoft Defender for Cloud ] をクリックして開きます。 347 | 348 |

脆弱性評価1

349 | 350 | ##### 2.1.2. [ Microsoft Defender for SQL ] にある [ 構成 ] をクリックし、サーバー全体またはマネージド インスタンスの Microsoft Defender for SQL 設定画面を開きます。 351 | 352 |

脆弱性評価2

353 | 354 |

脆弱性評価3

355 | 356 | ◇ストレージ アカウントの構成 357 | 358 | データベースに対するスキャン結果が格納されるストレージ アカウントを構成します。 359 | 360 | ◇定期的なスキャンの設定 361 | 362 | 週単位のスキャンを自動的に実行するように脆弱性評価を構成する場合、[ 定期的な反復スキャン ] を [ オン ] に設定します。 363 | 364 | 結果は、[ スキャン レポートの送信先 ] で指定したメール アドレスに送信されます。[ 管理者とサブスクリプションの所有者にもメール通知を送信する ] を有効にすると、管理者とサブスクリプションの所有者にもメール通知を送信することもできます。 365 | 366 | オンデマンドでの脆弱性スキャンの実行も可能です。変更などがあった場合に実施することをお勧めします。 367 | 368 |
369 | 370 | ### 2.2. 脆弱性の修復 371 | 脆弱性スキャンを行った結果のレポートが Azure portal に表示されます。 372 | 373 | レポートには次のものが表示されます。 374 | 375 | - セキュリティ状態の概要 376 | - 検出された問題の数 377 | - リスクの重要度別の概要 378 | - 詳細な調査の結果一覧 379 | 380 |

脆弱性スキャン結果レポート

381 | 382 |

脆弱性スキャン結果詳細

383 | 384 | **検出された脆弱性を修復する** 385 | 386 | 脆弱性のスキャンの結果として問題があると判定された項目は「失敗したチェック」として一覧表示されます。 387 | 388 | 評価結果一覧には、(判定ポイントである)セキュリティ チェック、適用対象、セキュリティのカテゴリ、リスクの重要度が表示されています。評価結果一覧の項目をクリックすると詳細が表示されます。その内容を確認し、影響やセキュリティ チェックが失敗となった理由を把握しセキュリティ上で問題となるかどうかを判断します。 389 | 390 | 詳細ページには、問題の解決方法を説明する実行可能な修復情報も含まれています。 391 | 392 | 脆弱性のスキャンで使用される一連の組み込みルールは以下を参照してください。 393 | 394 | SQL 脆弱性評価ルール リファレンス ガイド 395 | 396 | 397 |
398 | 399 | ### 2.3. 拡張機能 400 | 401 | * 評価レポートのエクスポート 402 | 脆弱性をスキャンした結果を Excel レポートとして作成することができます。またこのレポートをダウンロードし、組織内やセキュリティ担当者間で共有することで、セキュリティの向上に役立てることも可能です。 403 |
404 | * スキャン履歴の表示 405 | 406 | 以前に実行されたすべての脆弱性スキャンの履歴と、それぞれのスキャンの詳細な結果を確認することができます。 407 |
408 | * Microsoft Defender for Cloud で検出された特定の項目を無効にする (プレビュー) 409 | 410 | 組織のニーズとして、検出結果を修復するのではなく無視する必要がある場合は、必要に応じて検出結果を無効にできます。 411 | 例えば、重大度が中以下、パッチを適用できない、といった場合、その検出結果を無効化ルールで定義することで、検出結果の一覧には表示しないようにすることができます。 412 | 無効化された検出結果は、セキュリティ スコアに影響を与えたり、不要なノイズを生成したりすることはありません。 413 | 414 |

415 | 416 | ## 3. 脅威検知とログ モニタリングのテスト 417 | 418 | テストケースを使って、Advanced Threat Protection による脅威検知のアラートや、Microsoft Sentinel によるモニタリング レポートをすぐに体験することができます。 419 | Microsoft から提供されている Shell や、検証のためのコマンド例をご紹介します。 420 | 421 | 「Azure VM 上の SQL Server」を対象にした場合、以下の、脅威アラート用サンプル操作のコマンドと、Sentinel でのモニタリング用の Hunting Query を使って簡単にテスト、検証いただけます。 422 | 423 | #### 3.1. 脅威検知のアラートのテスト 424 | Microsoft Defender for Cloud Blog [Validating Alerts on Microsoft Defender for SQL on machines](https://techcommunity.microsoft.com/t5/microsoft-defender-for-cloud/validating-alerts-on-microsoft-defender-for-sql-on-machines/ba-p/3070714) より、脅威となる操作を模擬的に実行し体感することができます。 425 | 426 | https://techcommunity.microsoft.com/t5/microsoft-defender-for-cloud/validating-alerts-on-microsoft-defender-for-sql-on-machines/ba-p/3070714 427 | 428 | * 脅威検知の留意事項 429 | ニアリアルタイムでの通知ですので、即時ではない場合があります。 430 | 過検知および大量の通知を抑えるため、内部で事後のイベントを通知しない設計になっているため、繰り返した場合には、アラートを上げないケースがあります。 431 | 432 |
433 | 434 | ##### 手順 435 | 1. 「Azure VM 上の SQL Server」を用意する 436 | 2. Log Analytics agent を「Azure VM 上の SQL Server」に適用する 437 | 3. Microsoft Defender for Cloud の環境を設定する 438 | 4. テスト用スクリプトを、対象の「Azure VM」上で PowerShell で「SqlAdvancedThreatProtectionShell」をインポートし、テストケースを実行する 439 |
440 | 441 | ###### ◆SQLインジェクション 442 | 443 | インポートしたテストケース「Test-SqlAtpInjection」を実行します。 444 | 445 | アラート メール例 446 |

アラートメールイメージ

447 | 448 |
449 | 450 | ###### ◆ブルートフォース 451 | 452 | インポートしたテストケース「Test-SqlAtpBruteForce」を実行します。 453 | 454 | 455 | 456 | sqlcmd ユーティリティを使ってログイン失敗を短時間に繰り返すことでも簡単にテストできます。 457 | 例えば、以下のような、パスワードエラーのログイン試行を 30 回程度実行すると、脅威が検知されアラートが実行されます。「Azure SQL (Managed Instance 含む)」でもご利用いただけます。 458 | 459 | sqlcmd ユーティリティでのログイン試行例 : 460 | 461 | Sqlcmd -U dbuser -P 123456 -S usersql.database.windows.net 462 | Sqlcmd -U dbuser -P 123456789 -S usersql.database.windows.net 463 | Sqlcmd -U dbuser -P 12345 -S usersql.database.windows.net 464 | Sqlcmd -U dbuser -P qwerty -S usersql.database.windows.net 465 | Sqlcmd -U dbuser -P password -S usersql.database.windows.net 466 | Sqlcmd -U dbuser -P 12345678 -S usersql.database.windows.net 467 | Sqlcmd -U dbuser -P 111111 -S usersql.database.windows.net 468 | Sqlcmd -U dbuser -P 123123 -S usersql.database.windows.net 469 | Sqlcmd -U dbuser -P 1234567890 -S usersql.database.windows.net 470 | Sqlcmd -U dbuser -P 1234567 -S usersql.database.windows.net 471 | Sqlcmd -U dbuser -P qwerty123 -S usersql.database.windows.net 472 | Sqlcmd -U dbuser -P 0 -S usersql.database.windows.net 473 | Sqlcmd -U dbuser -P 1q2w3e -S usersql.database.windows.net 474 | Sqlcmd -U dbuser -P aa12345678 -S usersql.database.windows.net 475 | Sqlcmd -U dbuser -P abc123 -S usersql.database.windows.net 476 | Sqlcmd -U dbuser -P password1 -S usersql.database.windows.net 477 | Sqlcmd -U dbuser -P 1234 -S usersql.database.windows.net 478 | Sqlcmd -U dbuser -P qwertyuiop -S usersql.database.windows.net 479 | Sqlcmd -U dbuser -P 123321 -S usersql.database.windows.net 480 | Sqlcmd -U dbuser -P password123 -S usersql.database.windows.net 481 | Sqlcmd -U dbuser -P pass01 -S usersql.database.windows.net 482 | Sqlcmd -U dbuser -P pass02 -S usersql.database.windows.net 483 | Sqlcmd -U dbuser -P pass03 -S usersql.database.windows.net 484 | Sqlcmd -U dbuser -P pass04 -S usersql.database.windows.net 485 | Sqlcmd -U dbuser -P pass05 -S usersql.database.windows.net 486 | Sqlcmd -U dbuser -P pass06 -S usersql.database.windows.net 487 | Sqlcmd -U dbuser -P pass07 -S usersql.database.windows.net 488 | Sqlcmd -U dbuser -P pass08 -S usersql.database.windows.net 489 | Sqlcmd -U dbuser -P pass09 -S usersql.database.windows.net 490 | Sqlcmd -U dbuser -P pass10 -S usersql.database.windows.net 491 | 492 | 493 | アラート メール例 494 |

アラートメールイメージ

495 | 496 |

497 | 498 |
Tips : 安全は構築するもの
499 | 攻撃は、その "隙" をつく!
500 | 「Azure VM 上の SQL Server」を作成から数時間たたないうちに、よく知られている DB ユーザーである、「sa」によるログイン試行 のアラートを受信。
501 | Microsoft Sentinel で、ログイン失敗アクションを確認したところ「sa」によるログイン試行が数十回繰り返されていました。
502 | 検証用の環境なので、特にアクセス元を制限せず、インターネットに公開されていた環境ですが、SQL Server 環境作成からわずかの間で、すぐにブルートフォース攻撃を受けるという危険性を実感しました。
503 |
504 | 505 |

506 | 507 | #### 3.2. モニタリング レポート 508 | 509 | 「Azure VM 上の SQL Server」と「Azure SQL データベース」では、監査設定方法が異なり、そのため監査ログの送信先、管理先が異なります。 510 | 511 | 512 | 「Azure VM 上の SQL Server」は、Event (Windows Eventsに書き込みするように設定されたSQL Audit events のログ)でログが確認できます。Microsoft Sentinel によるモニタリングについては「Azure VM 上の SQL Server」では Event のログを使って行うことができます。 513 | 以下のサイトを参考に、SQLEvent 関数を作成し [Huntging Query](https://techcommunity.microsoft.com/t5/microsoft-sentinel-blog/monitoring-sql-server-with-azure-sentinel/ba-p/1502960) を利用してよくあるパターンのログ レポートを容易に確認することができます。 514 | https://techcommunity.microsoft.com/t5/microsoft-sentinel-blog/monitoring-sql-server-with-azure-sentinel/ba-p/1502960 515 | 516 | ※「Azure SQL データベース」は、AzureDiagnostics でログが確認できます。Microsoft Sentinel によるモニタリングについては「Azure SQL データベース」では AzureDiagnostics のログを使って行うことができます。 517 | 518 | 「Azure VM 上の SQL Server」と「Azure SQL データベース」は、出力フォーマットが異なり、条件や出力カラムが異なっています。 519 | 520 | ログイン失敗の例 (出力項目は一部の例です): 521 | * Event では、以下のように出力されます。 522 | [ RenderedDescription ] 523 | Login failed for user 'dbnusername'. Reason: Password did not match that for the login provided. [CLIENT: aaa.xxx.yyy.zzz] 524 | [ EventData ] 525 | dbusername Reason: Password did not match that for the login provided. [CLIENT: aaa.xxx.yyy.zzz] 526 | * AzureDiagnostics では、以下のように出力されます 527 | [ action_id_s ] 528 | DBAF 529 | [ succeeded_s ] 530 | FALSE 531 | [ client_ip_s ] 532 | aaa.xxx.yyy.zzz 533 | [ server_principal_name_s ] 534 | dbnusername 535 | [ additional_information_s ] 536 | 184568 537 | -------------------------------------------------------------------------------- /chapterfin.md: -------------------------------------------------------------------------------- 1 |  2 | # まとめ 3 |
4 | 5 | データ利活用を進める上でセキュリティ対策は重要であることは言うまでもありません。しかしながら「データ セキュリティ」の中で、データ基盤、データベース層での対策はあまり意識されず、力を入れられてこなかったのが現状ではないでしょうか。 6 | データベース セキュリティについて理解した体制を維持していくにはコスト面も含めてハードルが高いというのも事実だと思います。 7 | 8 | 今回ご紹介した、Microsoft Defender for SQL は、そういったデータ基盤、データベースのセキュリティを効率的に実現することができるソリューションです。 9 | 脅威の検知とモニタリングのルールは、Micosoft のインテリジェントなしくみにより常に最新で効果的な状態で提供されます。ユーザー側でのコストは限りなく低減でき、かつ、ハイレベルのセキュリティが担保できます。 10 | 本ドキュメントで行った、具体的なリスクをイメージした脅威検知とモニタリングの検証では、Microsoft Defender for SQL を有効にするだけで、疑似的に行った攻撃が即座に検知されることを実感できました。 11 | クラウド データベースはその容易さが魅力ですが、データベース層でのセキュリティ リスクが残ったまま公開されてしまうと、あっという間に攻撃される、ということもご理解いただけたのではないでしょうか。 12 | また、データベース レベルでの脆弱性を判定し対応まで提供する脆弱性チェックを定期的に行うことで、さまざまな環境変化に即座に対応することが求められる運用フェーズでも力を発揮します。 13 | 14 | Microsoft Defender for SQL はデータベース環境単位で有効化し設定することができ、1ヵ月は無料で試すことが可能ですので、まずはご紹介した検証をぜひ行ってみていただければと思います。 15 | 本ドキュメントがセキュアなデータ基盤、データベースを構築し維持する一助になれば幸いです。 16 | 17 |
18 | 19 | 20 | --------------------------------------------------------------------------------