<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>compliance Archive - M365 Blog - Julian Stabentheiner</title>
	<atom:link href="https://stabentheiner.de/tag/compliance/feed/" rel="self" type="application/rss+xml" />
	<link>https://stabentheiner.de/tag/compliance/</link>
	<description>Blog über Microsoft 365 Device Management</description>
	<lastBuildDate>Wed, 25 Dec 2024 12:21:41 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>
	<item>
		<title>Intune &#8211; Custom Compliance-Policy</title>
		<link>https://stabentheiner.de/2024/12/22/custom-compliance-policy-intune/</link>
					<comments>https://stabentheiner.de/2024/12/22/custom-compliance-policy-intune/#respond</comments>
		
		<dc:creator><![CDATA[Julian Stabentheiner]]></dc:creator>
		<pubDate>Sun, 22 Dec 2024 14:39:29 +0000</pubDate>
				<category><![CDATA[Compliance]]></category>
		<category><![CDATA[Intune]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[compliance]]></category>
		<category><![CDATA[intune]]></category>
		<guid isPermaLink="false">https://stabentheiner.de/?p=228</guid>

					<description><![CDATA[<p>Da durch BIOS-Updates oft schwerwiegende Sicherheitslücken geschlossen werden, gibt es die Anforderung, ein Gerät nur als Compliant zu taggen, wenn eine bestimmte BIOS Version installiert ist. Dies kann derzeit nicht mit den integrierten Funktionen von Intune überprüft werden. Dafür bedienen wir uns einer Custom Compliance-Richtlinie. Zusätzlich können auch weitere Anforderungen an die Compliance des Gerätes geprüft werden, was ich in diesem Beispiel ebenfalls zeigen möchte. Es gibt natürlich auch Compliance-Richtlinien für andere Betriebssysteme, ich beziehe mich hier aber auf die Möglichkeiten unter Windows. Dieser Artikel ist im Dezember 2024 mit der zu dem Zeitpunkt aktuellen Intune Version erstellt worden. Wie&#46;&#46;&#46;</p>
<p>Der Beitrag <a href="https://stabentheiner.de/2024/12/22/custom-compliance-policy-intune/">Intune &#8211; Custom Compliance-Policy</a> erschien zuerst auf <a href="https://stabentheiner.de">M365 Blog - Julian Stabentheiner</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Da durch BIOS-Updates oft schwerwiegende Sicherheitslücken geschlossen werden, gibt es die Anforderung, ein Gerät nur als Compliant zu taggen, wenn eine bestimmte BIOS Version installiert ist. Dies kann derzeit nicht mit den integrierten Funktionen von Intune überprüft werden. Dafür bedienen wir uns einer Custom Compliance-Richtlinie. Zusätzlich können auch weitere Anforderungen an die Compliance des Gerätes geprüft werden, was ich in diesem Beispiel ebenfalls zeigen möchte.</p>



<p>Es gibt natürlich auch Compliance-Richtlinien für andere Betriebssysteme, ich beziehe mich hier aber auf die Möglichkeiten unter Windows. </p>



<p><em>Dieser Artikel ist im Dezember 2024 mit der zu dem Zeitpunkt aktuellen Intune Version erstellt worden</em>.</p>



<h2 class="wp-block-heading">Wie funktioniert eine Custom Compliance-Richtlinie?</h2>



<p>In den Einstellungen einer Compliance-Richtlinie ist dir sicher schon einmal der Punkt <strong>Custom Compliance</strong> aufgefallen. Genau diesen benötigen wir. Mit der Custom Compliance-Richtlinie haben wir die Möglichkeit, mittels PowerShell-Script alles Mögliche am Client auswerten zu können, um diese Daten für die Bewertung der Gerätecompliance zu verwenden.</p>



<p>Dafür müssen wir zwei Dateien vorbereiten. Einmal eine PowerShell-Datei, die uns die benötigten Daten direkt auf dem Client ausliest und diese dann an Intune liefert. Die zweite Datei ist eine JSON-Datei, die der Compliance-Richtlinie mitteilt, wie die Compliance zu bewerten ist. Konkret möchte ich in diesem Beispiel die BIOS-Version auslesen und unterhalb einer bestimmten Version das Gerät als NICHT compliant markieren.</p>



<h2 class="wp-block-heading">PowerShell-Script zur Datenerfassung</h2>



<p>Das folgende PowerShell-Script ermittelt die Informationen über das Gerät selbst und die BIOS-Version. Auch habe ich ein Beispiel zur Erkennung von installierter Software eingefügt. So kann man das Gerät als nicht compliant taggen, sofern z.B. die Software Steam installiert ist. <br>Zusätzlich werden die Informationen über den TPM abgefragt, welche ich in diesem Beispiel aber nicht weiter auswerten werde.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="powershell" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">$WMI_ComputerSystem = Get-WMIObject -class Win32_ComputerSystem
$WMI_BIOS = Get-WMIObject -class Win32_BIOS 
$TPM = Get-Tpm

#App Detection
$InstalledSoftware = Get-ChildItem "HKLM:\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall"
if ($InstalledSoftware -like "*Steam*") {
    $steam = "Detected"
}
else {
    $steam = "Not Detected"
}

$hash = @{ Manufacturer = $WMI_ComputerSystem.Manufacturer; BiosVersion = $WMI_BIOS.SMBIOSBIOSVersion; TPMChipPresent = $TPM.TPMPresent; Steam = $steam}
return $hash | ConvertTo-Json -Compress</pre>



<p>Nach dem Abrufen der Informationen wird ein Hash gebildet, der anschließend ins JSON-Format konvertiert wird, um diese Informationen an Intune zu liefern. Die Daten in der $hash Variable sehen dann wie folgt aus:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="bash" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">PS C:\Windows\system32> $hash

Name                           Value
----                           -----
TPMChipPresent                 True
Steam                          Not Detected
Manufacturer                   Dell Inc.
BiosVersion                    1.17.0</pre>



<p>Nach der Konvertierung zu JSON erhalten wir Folgendes:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="json" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">{"TPMChipPresent":true,"Steam":"Not Detected","Manufacturer":"Dell Inc.","BiosVersion":"1.17.0"}</pre>



<p>Anschließend müssen wir das fertige Script im Intune als <strong>Compliance Discovery Script</strong> hinzufügen. Dies tun wir im <strong>Intune admin center</strong> unter <strong><em>Home &gt; Endpoint Security &gt; Device Compliance &gt; Scripts &gt; Add &gt; Windows 10 and later</em></strong></p>



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="881" height="434" src="https://stabentheiner.de/wp-content/uploads/2024/02/image-15.png" alt="" class="wp-image-233" srcset="https://stabentheiner.de/wp-content/uploads/2024/02/image-15.png 881w, https://stabentheiner.de/wp-content/uploads/2024/02/image-15-300x148.png 300w, https://stabentheiner.de/wp-content/uploads/2024/02/image-15-768x378.png 768w" sizes="(max-width: 881px) 100vw, 881px" /></figure>



<p>Nachdem wir dem Script einen Namen gegeben haben, können wir den Inhalt der PowerShell-Datei hinzufügen. </p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="562" src="https://stabentheiner.de/wp-content/uploads/2024/02/image-16-1024x562.png" alt="" class="wp-image-234" srcset="https://stabentheiner.de/wp-content/uploads/2024/02/image-16-1024x562.png 1024w, https://stabentheiner.de/wp-content/uploads/2024/02/image-16-300x165.png 300w, https://stabentheiner.de/wp-content/uploads/2024/02/image-16-768x422.png 768w, https://stabentheiner.de/wp-content/uploads/2024/02/image-16.png 1040w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">Definition der Custom Compliance</h2>



<p>Die eigentliche Auswertung der Custom Compliance-Richtlinie wird über ein JSON File definiert. Für dieses Beispiel habe ich folgende Konfiguration erstellt, welche ich nachfolgend erläutern werde:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="json" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">{
"Rules":[ 
    { 
       "SettingName":"BiosVersion",
       "Operator":"GreaterEquals",
       "DataType":"Version",
       "Operand":"1.19.0",
       "MoreInfoUrl":"https://stabentheiner.de",
       "RemediationStrings":[ 
          { 
             "Language":"en_US",
             "Title":"BIOS Version needs to be upgraded to at least 1.19.0. Value discovered was {ActualValue}.",
             "Description": "BIOS must be updated. Please refer to the link above"
          },
          {
             "Language":"de_DE",
             "Title":"BIOS-Version muss auf mindestens 1.19.0 aktualisiert werden. Der erkannte Wert lautet {ActualValue}.",
             "Description": "BIOS muss aktualisiert werden. Bitte beziehen Sie sich auf den obigen Link"
          }
       ]
    },
    {
       "SettingName":"Manufacturer",
       "Operator":"IsEquals",
       "DataType":"String",
       "Operand":"Dell Inc.",
       "MoreInfoUrl":"https://stabentheiner.de",
       "RemediationStrings":[ 
          { 
             "Language": "en_US",
             "Title": "Only Dell devices are supported.",
             "Description": "You are not currently using a Dell device."
          },
          {
             "Language": "de_DE",
             "Title": "Nur Dell-Geräte werden unterstützt.",
             "Description": "Sie verwenden derzeit kein Dell-Gerät."
          }
       ]
    },
    { 
       "SettingName":"Steam",
       "Operator":"IsEquals",
       "DataType":"String",
       "Operand":"Not Detected",
       "MoreInfoUrl":"https://stabentheiner.de",
       "RemediationStrings":[ 
          { 
             "Language": "en_US",
             "Title": "Unsupported Application Detected",
             "Description": "Steam has been detected on your device. Please uninstall this software to meet the compliance requirements."
          },
          {
            "Language": "de_DE",
            "Title": "Nicht unterstützte Anwendung erkannt",
            "Description": "Steam wurde auf Ihrem Gerät erkannt. Bitte deinstallieren Sie diese Software um die Compliance Anforderungen zu erfüllen."
         }
       ]
    }
 ]
}</pre>



<p>Es werden drei Variablen überprüft und dafür wird jeweils eine Regel erstellt. Regeln sind grundsätzlich so aufgebaut, dass zunächst das zu überprüfende Setting per <strong>SettingName</strong> definiert wird. Für die erste Regel lautet der Wert <strong>BiosVersion</strong>. Wir erinnern uns: Über das Detection Script wurde eine Variable mit diesem Namen geliefert. Danach habe ich den Operator <strong>GreaterEquals</strong> gewählt, denn ich möchte nicht nur auf eine genaue Bios Version prüfen, sondern eine Mindestversion voraussetzen. Durch das Setzen des <strong>DataType</strong> auf <strong>Version</strong> kann ich so den <strong>Operand</strong> auf <strong>1.19.0</strong> setzen, und alle BIOS-Versionen, welche mindestens der 1.19.0 entsprechen, würden ein positives Ergebnis zurückmelden. Also auch 1.21.1, jedoch nicht 1.9.0, da diese kleiner ist. Hätte man den <strong>DataType</strong> auf <strong>String</strong> gesetzt, ginge das nicht.</p>



<p>Die <strong>MoreInfoUrl</strong> kann dafür genutzt werden, um dem User eine Information bereitzustellen, wie er z.B. sein BIOS updaten kann, damit da Gerät wieder Compliant ist. </p>



<p>Zuletzt kann über die <strong>RemediationStrings</strong> eine Information an den User zurückgegeben werden, sofern die Prüfung negativ ausfällt. Man kann zusätzlich mehrere Sprachen definieren, sollte man Betriebssysteme mit unterschiedlichen Sprachen im Unternehmen einsetzen.</p>



<p>Was die zweite und dritte Regel macht, sollte nun selbsterklärend sein.</p>



<h2 class="wp-block-heading">Anlegen der Custom Compliance-Richtlinie</h2>



<p>Jetzt kann die eigentliche Compliance-Richtlinie angelegt werden. Diese erstellen wir unter <strong>Devices > Compliance > Create Policy</strong></p>



<p>Wir geben der Policy einen zur gewählten Namensgebung passenden Namen und wechseln in den Konfigurationsblock <strong>Custom Compliance</strong>. </p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="865" src="https://stabentheiner.de/wp-content/uploads/2024/12/createCompliancePolicy_01-1024x865.png" alt="" class="wp-image-365" srcset="https://stabentheiner.de/wp-content/uploads/2024/12/createCompliancePolicy_01-1024x865.png 1024w, https://stabentheiner.de/wp-content/uploads/2024/12/createCompliancePolicy_01-300x253.png 300w, https://stabentheiner.de/wp-content/uploads/2024/12/createCompliancePolicy_01-768x649.png 768w, https://stabentheiner.de/wp-content/uploads/2024/12/createCompliancePolicy_01-1536x1298.png 1536w, https://stabentheiner.de/wp-content/uploads/2024/12/createCompliancePolicy_01.png 2036w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>Dort wählen wir das Discovery Script aus und laden anschließend die eben erstellte JSON-Datei mit den Compliance-Settings hoch. </p>



<p>Abschließend wählen wir noch den Scope aus. Ich habe in diesem Fall <strong>All Devices</strong> gewählt, aber zusätzlich einen <strong>Filter</strong> für das <strong>Gerätemodell</strong> ausgewählt, bei dem ich genau diese Compliance Version prüfen möchte und diesen per <strong>Include</strong> einbezogen. </p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="351" src="https://stabentheiner.de/wp-content/uploads/2024/12/createCompliancePolicy_02-1024x351.png" alt="" class="wp-image-366" srcset="https://stabentheiner.de/wp-content/uploads/2024/12/createCompliancePolicy_02-1024x351.png 1024w, https://stabentheiner.de/wp-content/uploads/2024/12/createCompliancePolicy_02-300x103.png 300w, https://stabentheiner.de/wp-content/uploads/2024/12/createCompliancePolicy_02-768x264.png 768w, https://stabentheiner.de/wp-content/uploads/2024/12/createCompliancePolicy_02-1536x527.png 1536w, https://stabentheiner.de/wp-content/uploads/2024/12/createCompliancePolicy_02-2048x703.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Die <strong>Actions for noncompliance</strong> sind individuell wie bei allen Compliance-Richtlinien zu wählen.</p>



<h2 class="wp-block-heading">Auswertung der Compliance-Richtlinie</h2>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="649" src="https://stabentheiner.de/wp-content/uploads/2024/12/createCompliancePolicy_03-1024x649.png" alt="" class="wp-image-367" srcset="https://stabentheiner.de/wp-content/uploads/2024/12/createCompliancePolicy_03-1024x649.png 1024w, https://stabentheiner.de/wp-content/uploads/2024/12/createCompliancePolicy_03-300x190.png 300w, https://stabentheiner.de/wp-content/uploads/2024/12/createCompliancePolicy_03-768x487.png 768w, https://stabentheiner.de/wp-content/uploads/2024/12/createCompliancePolicy_03-1536x973.png 1536w, https://stabentheiner.de/wp-content/uploads/2024/12/createCompliancePolicy_03-2048x1298.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Schauen wir uns nun die Auswertung der Richtlinie an. In diesem Beispiel ist erst einer der Rechner als <strong>Compliant</strong> markiert. Dieser hat bereits die geforderte Version 1.19.0 installiert. Die Geräte, welche als <strong>Not compliant</strong> markiert sind, haben noch eine ältere BIOS-Version installiert. Und alle Geräte, welche im Status <strong>Not applicable</strong> stehen haben, entsprechen nicht dem Filter für die Modellnummer.  </p>



<p>Die Version in der JSON-Datei kann so nach jedem BIOS-Release angepasst werden, um die BIOS-Version als Voraussetzung für einen positiven Compliance-Status zu verwenden.</p>



<h2 class="wp-block-heading">Praxistipps</h2>



<p>Eine Compliance-Richtlinie mit verschiedenen Prüfungen in nur einer Policy zu verpacken, wird in der Praxis eher nicht so gut funktionieren. Ich würde die Prüfung auf die BIOS Version in eine eigene Policy packen, um flexibler mit der Zuweisung zu sein und bei einer Änderung an zum Beispiel der App Detection nicht mehrere Policys anpassen zu müssen. Deshalb gilt es immer zu prüfen, welche Punkte in welcher Policy geprüft werden sollen.</p>
<p>Der Beitrag <a href="https://stabentheiner.de/2024/12/22/custom-compliance-policy-intune/">Intune &#8211; Custom Compliance-Policy</a> erschien zuerst auf <a href="https://stabentheiner.de">M365 Blog - Julian Stabentheiner</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://stabentheiner.de/2024/12/22/custom-compliance-policy-intune/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
