[RESOLU] Partage paquet mise à jour Definition Microsoft Defender Zero Touch
Posté : 30 janv. 2025 - 16:41
Bonjour,
Il existe déjà un paquet sur le store wapt, mais je l'ai modifié afin que la mise à jour se fasse de manière totalement autonome grâce à la fonction audit (pas besoin de la fonction update_package du coup). L'objectif étant de déployer la mise à jour le plus rapidement possible et sans intervention humaine.
Le code est sans doute cracra, c'est une première pour moi la manipulation de date/heure
Prérequis :
Chaque agent WAPT va chercher le binaire mpam-fe.exe sur son repo WAPT pour ne pas saturer le lien internet.
Sur le serveur WAPT, il faut donc ajouter par exemple la ligne suivante à crontab :
Il vérifie en comparant la date du binaire dispo sur le dépôt et le binaire en cache dans c:\windows\temp\mpam-fe.xe si il y a une nouvelle version du binaire disponible.
Si le binaire n'existe pas encore dans "c:\windows\temp\mpam-fe.exe", il fake la date afin de forcer le téléchargement.
Si la date est différente il télécharge le nouveau binaire puis vérifie la signature du binaire (elle doit être de 'Microsoft Corporation').
Puis il installe le nouveau binaire.
Y plus qu'à paramétrer la fréquence de l'audit
setup.py :
Merci à Simon pour l'aide à la réalisation de ce paquet.
Il existe déjà un paquet sur le store wapt, mais je l'ai modifié afin que la mise à jour se fasse de manière totalement autonome grâce à la fonction audit (pas besoin de la fonction update_package du coup). L'objectif étant de déployer la mise à jour le plus rapidement possible et sans intervention humaine.
Le code est sans doute cracra, c'est une première pour moi la manipulation de date/heure

Prérequis :
Chaque agent WAPT va chercher le binaire mpam-fe.exe sur son repo WAPT pour ne pas saturer le lien internet.
Sur le serveur WAPT, il faut donc ajouter par exemple la ligne suivante à crontab :
Petit résumé de ce que fait l'audit du paquet:00 20 * * * wget --user-agent="Mozilla" -O /var/www/waptwua/mpam-fe.exe 'https://go.microsoft.com/fwlink/?LinkID=121721&arch=x64'
Il vérifie en comparant la date du binaire dispo sur le dépôt et le binaire en cache dans c:\windows\temp\mpam-fe.xe si il y a une nouvelle version du binaire disponible.
Si le binaire n'existe pas encore dans "c:\windows\temp\mpam-fe.exe", il fake la date afin de forcer le téléchargement.
Si la date est différente il télécharge le nouveau binaire puis vérifie la signature du binaire (elle doit être de 'Microsoft Corporation').
Puis il installe le nouveau binaire.
Y plus qu'à paramétrer la fréquence de l'audit

setup.py :
Code : Tout sélectionner
# -*- coding: utf-8 -*-
from setuphelpers import *
import requests
import os
from datetime import datetime, timedelta
import time
import waptlicences
r"""
Usable WAPT package functions: install(), uninstall(), session_setup(), audit(), update_package()
"""
# Declaring global variables - Warnings: 1) WAPT context is only available in package functions; 2) Global variables are not persistent between calls
def install():
pass
def audit():
# Declaring local variables
osversion = get_os_version()
repo_url = [r for r in WAPT.repositories if r.name == 'wapt'][0].repo_url
repo_headers = WAPT.waptserver.head('waptwua/mpam-fe.exe')
repo_last_modified = repo_headers.get('last-modified')
repo_last_modified_pattern = "%a, %d %b %Y %H:%M:%S %Z"
repo_last_modified_date = datetime.strptime(repo_last_modified, repo_last_modified_pattern)
repo_last_modified_date_loc = repo_last_modified_date + timedelta(hours=1)
if isfile(r'c:\windows\temp\mpam-fe.exe') :
file_modTimesinceEpoc = os.path.getmtime(r'c:\windows\temp\mpam-fe.exe')
else :
# fake modification time if no bin
file_modTimesinceEpoc = int(float('1002387810.4883926'))
file_modificationTime_str = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(file_modTimesinceEpoc))
file_modificationTime_date = datetime.strptime(file_modificationTime_str, '%Y-%m-%d %H:%M:%S')
# Downloading new bin
if repo_last_modified_date_loc != file_modificationTime_date :
with WAPT.waptserver.get_requests_session() as session:
wget("%swua/mpam-fe.exe" % repo_url, r'c:\windows\temp\mpam-fe.exe', requests_session=session)
# Check signature bin
expected_issuer = 'Microsoft Corporation'
sign_name = waptlicences.check_msi_signature(r'c:\windows\temp\mpam-fe.exe')[0]
if sign_name != expected_issuer:
error('Bad issuer %s != %s ' % (sign_name,expected_issuer))
# Installing bin
versionfile = get_file_properties(r'c:\windows\temp\mpam-fe.exe')['ProductVersion']
if get_windows_defender_version() < versionfile:
run(r'c:\windows\temp\mpam-fe.exe /s')
if get_windows_defender_version() < versionfile:
error('AntivirusSignatureVersion not in %s' % versionfile)
print(r'OK: Definition Version is %s' % versionfile)
return "OK"
def get_windows_defender_version():
for i in get_antivirus_info():
if not i["name"] == "Windows Defender":
continue
return Version(i['AntivirusSignatureVersion'])
return Version('0')