[RISOLTO] Definizione di aggiornamento della condivisione dei pacchetti Microsoft Defender Zero Touch

Domande sul packaging WAPT / Richieste e assistenza sui pacchetti Wapt.
Regole del forum
Regole del forum della community
* Supporto in inglese su www.reddit.com/r/wapt
* Supporto della community in francese disponibile su questo forum
* Si prega di anteporre [RISOLTO] al titolo dell'argomento se è stato risolto.
* Si prega di non modificare un argomento contrassegnato con [RISOLTO]. Aprire un nuovo argomento facendo riferimento a quello precedente.
* Specificare la versione di WAPT installata, la versione completa e il numero di build (2.2.1.11957 / 2.2.2.12337 / ecc.) nonché l'edizione Enterprise/Discovery.
* Le versioni 1.8.2 e precedenti non sono più supportate. Le uniche domande accettate relative alla versione 1.8.2 riguardano l'aggiornamento a una versione supportata (2.1, 2.2, ecc.).
* Specificare il sistema operativo del server (Linux/Windows) e la versione (Debian Buster/Bullseye - CentOS 7 - Windows Server 2012/2016/2019).
* Specificare il sistema operativo della macchina di amministrazione/creazione dei pacchetti e della macchina con l'agente problematico, se applicabile (Windows 7/10/11/Debian 11/ecc.).
* Evitare di porre più domande quando si apre una discussione, altrimenti potrebbe essere ignorata. Se ci sono più discussioni, aprirle separatamente, preferibilmente una dopo l'altra e non tutte contemporaneamente (ovvero, non intasare il forum).
* Includere frammenti di codice, screenshot e altre immagini direttamente nel post. I link a Pastebin, Bitly e altri siti di terze parti verranno sistematicamente rimossi.
* Come in qualsiasi forum della community, il supporto è fornito volontariamente dai membri. Se si necessita di supporto commerciale, è possibile contattare il reparto vendite di Tranquil IT al numero 02.40.97.57.55
Bloccato
olaplanche
Messaggi: 178
Registrazione: 26 gennaio 2017 - 11:11

30 gennaio 2025 - 16:41

Buongiorno,

Un pacchetto esiste già sullo store Wapt, ma l'ho modificato in modo che l'aggiornamento sia completamente automatico grazie alla funzione di audit (eliminando la necessità della funzione update_package). L'obiettivo è distribuire l'aggiornamento il più rapidamente possibile e senza intervento umano.
Probabilmente il codice è confuso: è la prima volta che manipolo date e orari :lol:

Prerequisiti:

Ogni agente WAPT cercherà il binario mpam-fe.exe nel proprio repository WAPT per evitare di saturare il collegamento Internet.
Sul server WAPT, è quindi necessario aggiungere, ad esempio, la seguente riga a crontab:
00 20 * * * wget --user-agent="Mozilla" -O /var/www/waptwua/mpam-fe.exe 'https://go.microsoft.com/fwlink/?LinkID=121721&arch=x64'
Un breve riassunto di cosa fa l'audit del pacchetto:

Verifica confrontando la data del binario disponibile nel repository e il binario memorizzato nella cache in c:\windows\temp\mpam-fe.xe per vedere se è disponibile una nuova versione del binario.
Se il file binario non esiste ancora in "c:\windows\temp\mpam-fe.exe", falsifica la data per forzare il download.
Se la data è diversa, scarica il nuovo binario e poi controlla la firma del binario (deve provenire da 'Microsoft Corporation').
Quindi installa il nuovo binario.

Non resta che configurare la frequenza di controllo ;)

setup.py:

Codice: Seleziona tutto

# -*- 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')
Grazie a Simon per il suo aiuto nel mettere insieme questo pacchetto.
- Versione WAPT installata: 2.6.0.16795 Enterprise
- Sistema operativo del server: Linux / Debian Bookworm
- Sistema operativo della macchina per l'amministrazione/creazione dei pacchetti: Windows 10
Avatar utente
dcardon
Esperto WAPT
Messaggi: 1908
Registrazione: 18 giugno 2014 - 09:58
Ubicazione: Saint Sébastien sur Loire
Contatto:

7 febbraio 2025 - 12:28

Ciao Olivier,

grazie per la condivisione :-) . Per tua informazione, stiamo attualmente lavorando all'integrazione del protocollo di comunicazione SOAP MS-WUSP tra l'agente di Windows Update e un server WSUS nell'agente e nel server WAPT. Microsoft ha fornito un'implementazione di riferimento [1] in .NET che implementa questo protocollo. Tiene conto dell'aggiornamento delle definizioni di Windows Defender. Quindi potrebbero esserci alcune nuove funzionalità interessanti in arrivo a breve. :-)

Per ora contrassegno questo argomento come RISOLTO.

Cordiali saluti,

Denis

[1] https://github.com/microsoft/update-server-server-sync/
Denis Cardon - Tranquil IT
Condividi le tue esperienze su WAPT! Inviaci gli URL dei tuoi blog e articoli nella "La tua opinione del forum e li pubblicheremo sul di WAPT
Bloccato