[RESOLU] Partage paquet mise à jour Definition Microsoft Defender Zero Touch

Questions about WAPT Packaging / Requêtes et aides autour des paquets Wapt.
Règles du forum
Règles du forum communautaire
* English support on www.reddit.com/r/wapt
* Le support communautaire en français se fait sur ce forum
* Merci de préfixer le titre du topic par [RESOLU] s'il est résolu.
* Merci de ne pas modifier un topic qui est taggé [RESOLU]. Ouvrez un nouveau topic en référençant l'ancien
* Préciser version de WAPT installée, version complète ET numéro de build (2.2.1.11957 / 2.2.2.12337 / etc.) AINSI QUE l'édition Enterprise / Discovery
* Les versions 1.8.2 et antérieures ne sont plus maintenues. Les seules questions acceptées vis à vis de la version 1.8.2 sont liés à la mise à jour vers une version supportée (2.1, 2.2, etc.)
* Préciser OS du serveur (Linux / Windows) et version (Debian Buster/Bullseye - CentOS 7 - Windows Server 2012/2016/2019)
* Préciser OS de la machine d'administration/création des paquets et de la machine avec l'agent qui pose problème le cas échéant (Windows 7 / 10 / 11 / Debian 11 / etc.)
* Eviter de poser plusieurs questions lors de l'ouverture de topic, sinon il risque d'être ignorer. Si plusieurs sujet, ouvrir plusieurs topic, et de préférence les uns après les autres et pas tous en même temps (ie ne pas spammer le forum).
* Inclure directement les morceaux de code, les captures d'écran et autres images directement dans le post. Les liens vers les pastebin, les bitly et autres sites tierces seront systématiquement supprimés.
* Comme tout forum communautaire, le support est fait bénévolement par les membres. Si vous avez besoin d'un support commercial, vous pouvez contacter le service commercial Tranquil IT au 02.40.97.57.55
Verrouillé
olaplanche
Messages : 178
Enregistré le : 26 janv. 2017 - 11:11

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 :lol:

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 :
00 20 * * * wget --user-agent="Mozilla" -O /var/www/waptwua/mpam-fe.exe 'https://go.microsoft.com/fwlink/?LinkID=121721&arch=x64'
Petit résumé de ce que fait l'audit du paquet:

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')
Merci à Simon pour l'aide à la réalisation de ce paquet.
- Version de WAPT installée : 2.6.0.16795 Enterprise
- OS du serveur : Linux / Debian Bookworm
- OS de la machine d'administration/création des paquets : Windows 10
Avatar du membre
dcardon
Expert WAPT
Messages : 1717
Enregistré le : 18 juin 2014 - 09:58
Localisation : Saint Sébastien sur Loire
Contact :

07 févr. 2025 - 12:28

Bonjour Olivier,

merci pour le partage :-) . Pour info, nous sommes entrain de travailler sur un l'intégration du protocole SOAP MS-WUSP de communication entre l'agent Windows Update et un serveur WSUS dans l'agent et le serveur WAPT. Microsoft a fournit une implémentation de référence [1] en dotnet qui implémente ce protocole. Ca prend en compte la mise à jour des définitions Windows Defender. Donc il y a peut être des nouvelles choses intéressantes qui vont arriver bientôt :-)

Je passe le topic en RESOLU pour l'instant.

Cordialement,

Denis

[1] https://github.com/microsoft/update-server-server-sync/
Denis Cardon - Tranquil IT
Communiquez autour de vous sur WAPT! Envoyez nous vos url de blog et d'articles dans la catégorie votre avis du forum, nous les mettrons en avant sur le site WAPT
Verrouillé