Azure Azure ARC – Extension IaaSAntimalware

LOGO_MS_Defender

Lors d’un récent projet, nous avons eu le besoin de configurer Microsoft Defender sur les ressources IaaS Azure et Azure ARC. Pour réaliser cette configuration, de manière automatique depuis une pipeline par exemple, il existe plusieurs méthodes dont l’utilisation d’une extension Azure “IaaSAntimalware”.

L’avantage d’utiliser cette extension par rapport à un script est l’utilisation de template ARM pour déployer celle-ci. De plus il est possible de mettre à jour la configuration de Microsoft Defender simplement en redéployant l’extension depuis le portail Azure ou autre moyen permettent de déployer de l’ARM.

Cette extension couvre 2 besoins :

  • Déploiement et Configuration de Microsoft Defender pour les OS :
    • Windows Server 2008r2.
    • Windows Server 2012.
    • Windows Server 2012R2.
  • Configuration de Microsoft Defender (déjà installé) pour les OS :
    • Windows Server 2016 et plus.

Dans le cas que j’ai rencontré, uniquement le second cas a été testé, configuration de Microsoft Defender sur des machines de type Windows Server 2016 et plus.

Dans le lien ci-dessous, vous trouverez la documentation Microsoft autour de l’extension “IaaSAntimalware” :

PICTO_AVERTISSEMENT

Depuis Windows Server 2016, des exclusions existent déjà par défaut sur Microsoft Defender, celle-ci sont automatiquement créées par le système lors de l’installation de certains rôles ou produits :

PICTO_AVERTISSEMENT

Il convient de faire attention à la version des OS supportés, à savoir Windows Server 2008 r2 et supérieur.

Vous ne pouvez pas par exemple configurer ATP sur des machines Linux au travers de cette extension.

Sommaire

Azure VM

Dans le lien ci-dessous, vous trouverez des exemples de codes afin de déployer l’extension sur des VM Azure :

ARM Template

Étant donné qu’il s’agit d’une extension de VM, il convient d’avoir déjà déployé une machine avant de déployer l’extension. L’exemple de code ci-dessous part de ce principe et se concentre sur l’extension uniquement. Il est bien entendu possible d’ajouter ce code directement dans les templates ARM de déploiement de vos machines comme une extension traditionnelle.

Ce template ARM autorise en entrée 3 paramètres :

  • vm_Name –> le nom de la VM Azure sur laquelle sera déployée l’extension.
  • IaaSAntimalwareExclusionsSettings –> les exclusions que vous souhaitez configurer.
  • IaaSAntimalwareScheduledScanSettings –> la planification des scans antivirus que vous souhaitez configurer.
     

Deux autres paramètres peuvent être configurés, mais dans cet exemple forcé à “True” :

  • AntimalwareEnabled –> permet de désactiver l’AV.
     
  • RealtimeProtectionEnabled –> permets de désactiver l’analyse en temps réel.
     

J’ai forcé ces 2 paramètres, car il ne me parait pas opportun de pouvoir désactiver ces fonctionnalités. Cependant, si vous le souhaitez ceux-ci sont possibles.

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "vm_Name": {
            "type": "string",
            "metadata": {
                "description": "VM Name"
            }
        },
        "IaaSAntimalwareExclusionsSettings": {
            "type": "object",
            "metadata": {
                "description": "Antimalware Exclustion Settings"
            },
            "defaultValue": {
                "Extensions": "",
                "Paths": "",
                "Processes": ""
            }
        },
        "IaaSAntimalwareScheduledScanSettings": {
            "type": "object",
            "metadata": {
                "description": "Antimalware Scheduling Settings"
            },
            "defaultValue": {
                "isEnabled": "true",
                "scanType": "Quick",
                "day": "7",
                "time": "120"
            }
        }
    },
    "variables": {},
    "resources": [
        {
            "type": "Microsoft.Compute/virtualMachines/extensions",
            "name": "[concat(parameters('vm_Name'),'/IaaSAntimalware')]",
            "apiVersion": "2019-07-01",
            "location": "[resourceGroup().location]",
            "properties": {
                "publisher": "Microsoft.Azure.Security",
                "type": "IaaSAntimalware",
                "typeHandlerVersion": "1.3",
                "autoUpgradeMinorVersion": true,
                "settings": {
                    "AntimalwareEnabled": "true",
                    "Exclusions": "[parameters('IaaSAntimalwareExclusionsSettings')]",
                    "RealtimeProtectionEnabled": "true",
                    "ScheduledScanSettings": "[parameters('IaaSAntimalwareScheduledScanSettings')]"
                },
                "protectedSettings": null
            }
        }
    ]
}

Ci-dessous le fichier de paramètres correspondant à l’ARM.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "vm_Name": {
      "value": "AzureVMName"
    },
    "IaaSAntimalwareExclusionsSettings": {
      "value": {
        "Processes": "",
        "Extensions": "",
        "Paths": ""
      }
    },
    "IaaSAntimalwareScheduledScanSettings": {
      "value": {
        "day": "7",
        "time": "120",
        "isEnabled": "true",
        "scanType": "Quick"
      }
    }
  }
}

Vous pouvez configurer les exclusions en respectant le format ci-dessous :

    "IaaSAntimalwareExclusionsSettings": {
      "value": {
        "Processes": "word.exe,msedge.exe",
        "Extensions": ".mdf,.ndf,.ldf",
        "Paths": "c:\\sources"
      }
    },

En prenant pour base le template ci-dessus, nous allons réaliser le déploiement de l’extension et observer les changements.

Ci-dessous les paramètres du template :

La configuration de Microsoft Defender originale, obtenue à l’aide de la commande. Comme vous pouvez le constater, la planification des scans est par défaut et la liste des exclusions est vide :

Get-MpPreference

Les settings pour le déploiement de l’extension :

Une fois le déploiement de l’ARM template terminé, nous pouvons constater qu’une nouvelle extension est pressante sur la VM “IaaSAntimalware” :

Du côté de Microsoft Defender, la configuration a été prise en compte :

PowerShell

Cette même extension peut-être déployée via PowerShell. Vous trouverez des exemples de code pour le déploiement ce celle-ci dans le KB Microsoft ci-dessous :

Exemple PowerShell donné par Microsoft (les settings sont les mêmes que celle disponible dans l’ARM, je vous conseille de reprendre la partie settings avec celles sur script PowerShell Azure ARC) :

# Script to add Microsoft Antimalware extension to Azure Resource Manager VMs
# Specify your subscription ID
$subscriptionId= " SUBSCRIPTION ID HERE "
# specify location, resource group, and VM for the extension
$location = " LOCATION HERE " # eg., “Southeast Asia” or “Central US”
$resourceGroupName = " RESOURCE GROUP NAME HERE "
$vmName = " VM NAME HERE "

# Enable Antimalware with default policies
$settingString = '{"AntimalwareEnabled": true}';
# Enable Antimalware with custom policies
$settingString = '{
    "AntimalwareEnabled": true,
    "RealtimeProtectionEnabled": true,
    "ScheduledScanSettings": {
        "isEnabled": true,
        "day": 0,
        "time": 120,
        "scanType": "Quick"
    },
    "Exclusions": {
        "Extensions": ".ext1,.ext2",
        "Paths":"",
        "Processes":"sampl1e1.exe, sample2.exe"
    },
    "SignatureUpdates": {
        "FileSharesSources": "",
        "FallbackOrder”: "",
        "ScheduleDay": 0,
        "UpdateInterval": 0,
    },
    "CloudProtection": true         
}';
# Login to your Azure Resource Manager Account and select the Subscription to use
Login-AzureRmAccount
 
Select-AzureRmSubscription -SubscriptionId $subscriptionId
# retrieve the most recent version number of the extension
$allVersions= (Get-AzureRmVMExtensionImage -Location $location -PublisherName "Microsoft.Azure.Security" -Type "IaaSAntimalware").Version
$versionString = $allVersions[($allVersions.count)-1].Split(".")[0] + "." + $allVersions[($allVersions.count)-1].Split(".")[1]
# set the extension using prepared values
# ****—-Use this script till cmdlets address the -SettingsString format issue we observed ****—-
Set-AzureRmVMExtension -ResourceGroupName $resourceGroupName -Location $location -VMName $vmName -Name "IaaSAntimalware" -Publisher "Microsoft.Azure.Security" -ExtensionType "IaaSAntimalware" -TypeHandlerVersion $versionString -SettingString $settingString

Azure ARC VM

ARM Template

Je n’ai pas vu de méthode donner par Microsoft concernant le déploiement de cette extension via ARM pour les ressources Azure ARC. Mais il est peut-être possible de faire du reverse engineering sur une machine déjà déployer afin d’extraire l’ARM de l’extension (à tester).

PowerShell

La méthode officielle donnée par Microsoft et qui fonctionne très bien est via PowerShell.

Dans le lien ci-dessous Microsoft, fournis des exemples de code afin de réaliser ce déploiement.

Vous trouverez ci-dessous le script que j’utilise pour déployer cette extension (script fortement inspiré du code fourni par Microsoft, mais sans erreur ^^).

#Before using Azure PowerShell to manage VM extensions on your hybrid server managed by Azure Arc-enabled servers, you need to install the Az.ConnectedMachine module. Run the following command on your Azure Arc-enabled server:
install-module -Name Az.ConnectedMachine
Import-Module -name Az.ConnectedMachine

# specify location, resource group, and VM for the extension
$subscriptionid = "XXXXXX-XXXXXX-XXXXXX-XXXXXX"
$location = "West Europe"
$resourceGroupName = "ARC-Machines_RG"
$machineName = "W2K19-ARC01"

# Enable Antimalware with custom policies
$settingString = '{
    "AntimalwareEnabled": true,
    "RealtimeProtectionEnabled": true,
    "ScheduledScanSettings": {
        "isEnabled": true,
        "day": 5,
        "time": 120,
        "scanType": "Quick"
    },
    "Exclusions": {
        "Extensions": ".mdf,.ndf;.ldf",
        "Paths": "",
        "Processes": "word.exe, msedge.exe"
    },
    "CloudProtection": true         
}';

# Will be prompted to login 
Connect-AzAccount 
# Enable Antimalware with the policies

$params = @{
    'Name' = "IaaSAntimalware"
    'ResourceGroupName' = $resourceGroupName
    'MachineName' = $machineName
    'Location' = $location
    'SubscriptionId' = $subscriptionid
    'Publisher' = "Microsoft.Azure.Security"
    'Settings' = $settingString
    'ExtensionType' = "IaaSAntimalware"
}

New-AzConnectedMachineExtension @params

L’exécution du script ci-dessus déploie l’extension, il faut compter quelques minutes avant que le déploiement soit terminé.

Du côté de la VM Azure ARC, l’extension apparait dans la liste des extensions de celle-ci.

Et pour finir, du côté de l’OS la configuration de Microsoft Defender a été prise en compte.

Etant qu’assez souvent j’ai des erreurs lors du déploiement de cette extention via PowerShell, notament lors de la conversion des paramètres de string vers hashtable, j’utilise désormais les templates ARM.

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {},
    "variables": {},
    "resources": [
        {
            "type": "Microsoft.HybridCompute/machines/extensions",
            "apiVersion": "2022-05-10-preview",
            "name": "[concat('VMNAME','/','IaaSAntimalware')]",
            "location": "[resourceGroup().location]",
            "properties": {
                "publisher": "Microsoft.Azure.Security",
                "type": "IaaSAntimalware",
                "typeHandlerVersion": "1.6.0.7",
                "autoUpgradeMinorVersion": false,
                "enableAutomaticUpgrade": true,
                "settings": {
                    "AntimalwareEnabled": "true",
                    "Exclusions": {
                        "Extensions": ".mdf,.ndf;.ldf",
                        "Paths": "",
                        "Processes": ""
                    },
                    "RealtimeProtectionEnabled": "true",
                    "ScheduledScanSettings": {
                        "isEnabled": "true",
                        "scanType": "Quick",
                        "day": "7",
                        "time": "120"
                    }
                },
                "protectedSettings": null
            }
        }
    ]
}

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.