From f4e3f338509f15e8d7ea5e564fa6e6e6839b1eea Mon Sep 17 00:00:00 2001 From: Kamalgurna Date: Fri, 24 Jul 2026 19:33:18 -0400 Subject: [PATCH] Bitlocker Missing KeyProtectors Solution - Added the below content for Bitlocker Missing KeyProtectors - Automation : BitLocker - Missing Key Protectors - Compound Condition : Detect Bitlocker Missing KeyProtectors - Workstations - Compound Condition : Detect Bitlocker Missing KeyProtectors - Servers - Ticket Template : Missing Key Protectors c --- .../bitlocker-missing-key-protectors.md | 39 ++++++++++++++++++ ...bitlocker-missing-keyprotectors-servers.md | 37 +++++++++++++++++ ...cker-missing-keyprotectors-workstations.md | 37 +++++++++++++++++ .../missing-key-protectors.md | 37 +++++++++++++++++ docs/solutions/bitlocker-and-tpm-audit.md | 27 ++++++++++++ .../image1.webp | Bin 0 -> 8184 bytes 6 files changed, 177 insertions(+) create mode 100644 docs/ninjaone/automations/bitlocker-missing-key-protectors.md create mode 100644 docs/ninjaone/compound-conditions/detect-bitlocker-missing-keyprotectors-servers.md create mode 100644 docs/ninjaone/compound-conditions/detect-bitlocker-missing-keyprotectors-workstations.md create mode 100644 docs/ninjaone/cw-manage-ticket-templates/missing-key-protectors.md create mode 100644 static/img/docs/0f9279df-9d04-43ab-8db9-cc4b241c9e95/image1.webp diff --git a/docs/ninjaone/automations/bitlocker-missing-key-protectors.md b/docs/ninjaone/automations/bitlocker-missing-key-protectors.md new file mode 100644 index 000000000..976c70dc6 --- /dev/null +++ b/docs/ninjaone/automations/bitlocker-missing-key-protectors.md @@ -0,0 +1,39 @@ +--- +id: '0f9279df-9d04-43ab-8db9-cc4b241c9e95' +slug: /0f9279df-9d04-43ab-8db9-cc4b241c9e95 +title: 'BitLocker - Missing Key Protectors' +title_meta: 'BitLocker - Missing Key Protectors' +keywords: ['bitlocker', 'bitlocker-status', 'recovery-key', 'bitlocker-audit', 'recovery-password'] +description: 'Detects fully encrypted BitLocker volumes with protection off and a missing key protector.' +tags: ['bitlocker', 'security', 'auditing'] +draft: false +unlisted: false +last_update: + date: 2026-07-24 +--- + +## Overview +Detects fully encrypted BitLocker volumes with protection off and a missing key protector. + +## Sample Run + +`Play Button` > `Run Automation` > `Script` +![SampleRun1](../../../static/img/docs/0f9279df-9d04-43ab-8db9-cc4b241c9e95/image1.webp) + +## Dependencies + +- [Solution: BitLocker and TPM Audit](/docs/57c787ad-8d22-4ae4-b5e5-dac34fc600fc) + +## Automation Setup/Import + +[Automation Configuration](https://github.com/ProVal-Tech/ninjarmm/blob/main/scripts/bitlocker-missing-key-protectors.ps1) + +## Output + +- Activity Details + +## Changelog + +### 2026-07-24 + +- Initial version of the document diff --git a/docs/ninjaone/compound-conditions/detect-bitlocker-missing-keyprotectors-servers.md b/docs/ninjaone/compound-conditions/detect-bitlocker-missing-keyprotectors-servers.md new file mode 100644 index 000000000..639d186b6 --- /dev/null +++ b/docs/ninjaone/compound-conditions/detect-bitlocker-missing-keyprotectors-servers.md @@ -0,0 +1,37 @@ +--- +id: '0756ab51-5d8f-4f7e-b82e-50a51d36c641' +slug: /0756ab51-5d8f-4f7e-b82e-50a51d36c641 +title: 'Detect Bitlocker Missing KeyProtectors - Servers' +title_meta: 'Detect Bitlocker Missing KeyProtectors - Servers' +keywords: ['bitlocker', 'bitlocker-status', 'recovery-key', 'bitlocker-audit', 'recovery-password'] +description: 'Triggers BitLocker - Missing Key Protectors automation on windows Servers and creates tickets if any missing KeyProtector is detected on the machine.' +tags: ['bitlocker', 'security', 'auditing'] +draft: false +unlisted: false +last_update: + date: 2026-07-24 +--- + +## Summary +Triggers [BitLocker - Missing Key Protectors](/docs/0f9279df-9d04-43ab-8db9-cc4b241c9e95) automation on windows Servers and creates tickets if any missing KeyProtector is detected on the machine. + +## Details + +- **Name:** `Detect Bitlocker Missing KeyProtectors - Servers` +- **Description:** `Triggers BitLocker - Missing Key Protectors automation on windows Servers and creates tickets if any missing KeyProtector is detected on the machine.` +- **Recommended Agent Policies:** `Windows Server Policy` + +## Dependencies + +- [BitLocker - Missing Key Protectors](/docs/0f9279df-9d04-43ab-8db9-cc4b241c9e95) +- [Solution: BitLocker and TPM Audit](/docs/57c787ad-8d22-4ae4-b5e5-dac34fc600fc) + +## Compound Condition Creation + +- [Compound Condition Configuration](https://github.com/ProVal-Tech/ninjarmm/blob/main/compound-conditions/detect-bitlocker-missing-keyprotectors-Servers.toml) + +## Changelog + +### 2026-07-24 + +- Initial version of the document \ No newline at end of file diff --git a/docs/ninjaone/compound-conditions/detect-bitlocker-missing-keyprotectors-workstations.md b/docs/ninjaone/compound-conditions/detect-bitlocker-missing-keyprotectors-workstations.md new file mode 100644 index 000000000..d4001a589 --- /dev/null +++ b/docs/ninjaone/compound-conditions/detect-bitlocker-missing-keyprotectors-workstations.md @@ -0,0 +1,37 @@ +--- +id: '31e82508-7f54-40c4-97a8-6af3af24fa55' +slug: /31e82508-7f54-40c4-97a8-6af3af24fa55 +title: 'Detect Bitlocker Missing KeyProtectors - Workstations' +title_meta: 'Detect Bitlocker Missing KeyProtectors - Workstations' +keywords: ['bitlocker', 'bitlocker-status', 'recovery-key', 'bitlocker-audit', 'recovery-password'] +description: 'Triggers BitLocker - Missing Key Protectors automation on windows workstations and creates tickets if any missing KeyProtector is detected on the machine.' +tags: ['bitlocker', 'security', 'auditing'] +draft: false +unlisted: false +last_update: + date: 2026-07-24 +--- + +## Summary +Triggers [BitLocker - Missing Key Protectors](/docs/0f9279df-9d04-43ab-8db9-cc4b241c9e95) automation on windows workstations and creates tickets if any missing KeyProtector is detected on the machine. + +## Details + +- **Name:** `Detect Bitlocker Missing KeyProtectors - Workstations` +- **Description:** `Triggers BitLocker - Missing Key Protectors automation on windows workstations and creates tickets if any missing KeyProtector is detected on the machine.` +- **Recommended Agent Policies:** `Windows Workstation Policy` + +## Dependencies + +- [BitLocker - Missing Key Protectors](/docs/0f9279df-9d04-43ab-8db9-cc4b241c9e95) +- [Solution: BitLocker and TPM Audit](/docs/57c787ad-8d22-4ae4-b5e5-dac34fc600fc) + +## Compound Condition Creation + +- [Compound Condition Configuration](https://github.com/ProVal-Tech/ninjarmm/blob/main/compound-conditions/detect-bitlocker-missing-keyprotectors-workstations.toml) + +## Changelog + +### 2026-07-24 + +- Initial version of the document \ No newline at end of file diff --git a/docs/ninjaone/cw-manage-ticket-templates/missing-key-protectors.md b/docs/ninjaone/cw-manage-ticket-templates/missing-key-protectors.md new file mode 100644 index 000000000..e2383a7c2 --- /dev/null +++ b/docs/ninjaone/cw-manage-ticket-templates/missing-key-protectors.md @@ -0,0 +1,37 @@ +--- +id: 'bf16fc48-0565-4746-9ae9-a744e9363937' +slug: /bf16fc48-0565-4746-9ae9-a744e9363937 +title: 'Missing Key Protectors' +title_meta: 'FilenameMissing Key Protectors' +keywords: ['bitlocker', 'bitlocker-status', 'recovery-key', 'bitlocker-audit', 'recovery-password'] +description: 'This ticket template configures how a ConnectWise Manage ticket will be generated in response to the Detect Bitlocker Missing KeyProtectors Conditions.' +tags: ['bitlocker', 'security', 'auditing'] +draft: false +unlisted: false +last_update: + date: 2026-07-24 +--- + +## Overview +This ticket template configures how a ConnectWise Manage ticket will be generated in response to the [Compound Condition : Detect Bitlocker Missing KeyProtectors - Workstations](/docs/31e82508-7f54-40c4-97a8-6af3af24fa55) and [Compound Condition : Detect Bitlocker Missing KeyProtectors - Servers](/docs/0756ab51-5d8f-4f7e-b82e-50a51d36c641) condition. + +## Requirement + +Ensure that the ConnectWise Manage app is enabled and connected. +![Requirement](../../../static/img/docs/86a9b907-a95e-48a8-a304-2bb243c3b6a1/requirement.webp) + +## Dependencies + +- [Compound Condition : Detect Bitlocker Missing KeyProtectors - Servers](/docs/0756ab51-5d8f-4f7e-b82e-50a51d36c641) +- [Compound Condition : Detect Bitlocker Missing KeyProtectors - Workstations](/docs/31e82508-7f54-40c4-97a8-6af3af24fa55) +- [Solution: BitLocker and TPM Audit](/docs/57c787ad-8d22-4ae4-b5e5-dac34fc600fc) + +## Template Creation + +[CW Manage Ticket Template Configuration](https://github.com/ProVal-Tech/ninjarmm/blob/main/cw-manage-ticket-templates/missing-key-protectors.toml) + +## Changelog + +### 2026-07-24 + +- Initial version of the document \ No newline at end of file diff --git a/docs/solutions/bitlocker-and-tpm-audit.md b/docs/solutions/bitlocker-and-tpm-audit.md index 7645b8b52..2afa94358 100644 --- a/docs/solutions/bitlocker-and-tpm-audit.md +++ b/docs/solutions/bitlocker-and-tpm-audit.md @@ -54,6 +54,7 @@ The solution uses the **[BitLocker and TPM Audit](/docs/2d104874-ec69-4d95-b912- | Name | Function | | --- | --- | | [BitLocker and TPM Audit](/docs/2d104874-ec69-4d95-b912-7fcd240bf592) | Performs a comprehensive audit of the machine's security posture. It executes `Get-BitLockerDetail` to scan volumes and `Get-TPMDetail` to retrieve hardware security stats, populating the results into the respective Custom Fields. | +| [BitLocker - Missing Key Protectors](/docs/0f9279df-9d04-43ab-8db9-cc4b241c9e95) | Detects fully encrypted BitLocker volumes with protection off and a missing key protector. | ### Group @@ -67,6 +68,14 @@ The solution uses the **[BitLocker and TPM Audit](/docs/2d104874-ec69-4d95-b912- | --- | --- | | [BitLocker Audit - Workstations](/docs/368a9d6b-0f50-498b-94ba-32e95e402b66) | Performs BitLocker and TPM audit once per day on Windows workstations where auditing is enabled via the Custom Field. | | [BitLocker Audit - Servers](/docs/ee96061c-3700-44af-a10c-9f1dde32e611) | Performs BitLocker and TPM audit once per day on Windows servers where auditing is enabled via the Custom Field. **The BitLocker Drive Encryption feature must be enabled on servers to perform auditing. This script will not work without enabling this feature.** | +| [Detect Bitlocker Missing KeyProtectors - Workstations](/docs/31e82508-7f54-40c4-97a8-6af3af24fa55) | Triggers [BitLocker - Missing Key Protectors](/docs/0f9279df-9d04-43ab-8db9-cc4b241c9e95) automation on windows workstations and creates tickets if any missing KeyProtector is detected on the machine. | +| [Detect Bitlocker Missing KeyProtectors - Servers](/docs/0756ab51-5d8f-4f7e-b82e-50a51d36c641) | Triggers [BitLocker - Missing Key Protectors](/docs/0f9279df-9d04-43ab-8db9-cc4b241c9e95) automation on windows Servers and creates tickets if any missing KeyProtector is detected on the machine. | + +### Ticket Template + +| Name | Function | +| --- | --- | +| [Missing Key Protectors](/docs/bf16fc48-0565-4746-9ae9-a744e9363937) | This ticket template configures how a ConnectWise Manage ticket will be generated in response to the [Compound Condition : Detect Bitlocker Missing KeyProtectors - Workstations](/docs/31e82508-7f54-40c4-97a8-6af3af24fa55) and [Compound Condition : Detect Bitlocker Missing KeyProtectors - Servers](/docs/0756ab51-5d8f-4f7e-b82e-50a51d36c641) condition. | ## Implementation @@ -94,6 +103,7 @@ Create the following custom fields as described in the documentation: Create the following automation as described in the documentation: * [Automation: BitLocker and TPM Audit](/docs/2d104874-ec69-4d95-b912-7fcd240bf592) +* [Automation: BitLocker - Missing Key Protectors](/docs/0f9279df-9d04-43ab-8db9-cc4b241c9e95) ### Step 3 @@ -103,10 +113,19 @@ Create the following group as described in the documentation: ### Step 4 +Create the following ticket template as described in the documentation: + +* [Ticket Template : Missing Key Protectors](/docs/bf16fc48-0565-4746-9ae9-a744e9363937) + +### Step 5 + Create the following compound conditions as described in the documentation: * [Compound Condition: BitLocker Audit - Workstations](/docs/368a9d6b-0f50-498b-94ba-32e95e402b66) * [Compound Condition: BitLocker Audit - Servers](/docs/ee96061c-3700-44af-a10c-9f1dde32e611) +* [Compound Condition : Detect Bitlocker Missing KeyProtectors - Workstations](/docs/31e82508-7f54-40c4-97a8-6af3af24fa55) +* [Compound Condition : Detect Bitlocker Missing KeyProtectors - Servers](/docs/0756ab51-5d8f-4f7e-b82e-50a51d36c641) + ## FAQs @@ -212,6 +231,14 @@ Create the following compound conditions as described in the documentation: ## Changelog +### 2026-07-24 + +- Added the below content for Bitlocker Missing KeyProtectors + - Automation : BitLocker - Missing Key Protectors + - Compound Condition : Detect Bitlocker Missing KeyProtectors - Workstations + - Compound Condition : Detect Bitlocker Missing KeyProtectors - Servers + - Ticket Template : Missing Key Protectors + ### 2026-04-15 - Added the below custom fields and group to provide a simplified and consolidated view of BitLocker and TPM details: diff --git a/static/img/docs/0f9279df-9d04-43ab-8db9-cc4b241c9e95/image1.webp b/static/img/docs/0f9279df-9d04-43ab-8db9-cc4b241c9e95/image1.webp new file mode 100644 index 0000000000000000000000000000000000000000..f053a7f9f44179b1430edd89f32e7665ca963269 GIT binary patch literal 8184 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 e=Rh