[GELÖST] Updatedefinition für die Paketfreigabe: Microsoft Defender Zero Touch
Veröffentlicht: 30. Januar 2025 – 16:41 Uhr
Guten Morgen,
Im Wapt-Store existiert bereits ein Paket, das ich jedoch so modifiziert habe, dass das Update dank der Audit-Funktion vollautomatisch erfolgt (wodurch die Funktion `update_package` überflüssig wird). Ziel ist es, das Update so schnell wie möglich und ohne menschliches Eingreifen bereitzustellen.
Der Code ist wahrscheinlich unübersichtlich; ich manipulte zum ersten Mal Datum und Uhrzeit
Voraussetzungen:
Jeder WAPT-Agent sucht in seinem WAPT-Repository nach der Binärdatei mpam-fe.exe, um eine Überlastung der Internetverbindung zu vermeiden.
Auf dem WAPT-Server müssen Sie daher beispielsweise die folgende Zeile in die Crontab-Datei einfügen:
Es prüft, ob eine neue Version der Binärdatei verfügbar ist, indem es das Datum der im Repository verfügbaren Binärdatei mit dem Datum der in c:\windows\temp\mpam-fe.xe zwischengespeicherten Binärdatei vergleicht.
Falls die Binärdatei noch nicht unter "c:\windows\temp\mpam-fe.exe" existiert, wird das Datum gefälscht, um den Download zu erzwingen.
Wenn das Datum abweicht, lädt es die neue Binärdatei herunter und überprüft dann die Signatur der Binärdatei (sie muss von der 'Microsoft Corporation' stammen).
Dann installiert er die neue Binärdatei.
Jetzt muss nur noch die Prüfhäufigkeit konfiguriert werden
setup.py:
Vielen Dank an Simon für seine Hilfe bei der Zusammenstellung dieses Pakets.
Im Wapt-Store existiert bereits ein Paket, das ich jedoch so modifiziert habe, dass das Update dank der Audit-Funktion vollautomatisch erfolgt (wodurch die Funktion `update_package` überflüssig wird). Ziel ist es, das Update so schnell wie möglich und ohne menschliches Eingreifen bereitzustellen.
Der Code ist wahrscheinlich unübersichtlich; ich manipulte zum ersten Mal Datum und Uhrzeit
Voraussetzungen:
Jeder WAPT-Agent sucht in seinem WAPT-Repository nach der Binärdatei mpam-fe.exe, um eine Überlastung der Internetverbindung zu vermeiden.
Auf dem WAPT-Server müssen Sie daher beispielsweise die folgende Zeile in die Crontab-Datei einfügen:
Eine kurze Zusammenfassung dessen, was die Paketprüfung umfasst:00 20 * * * wget --user-agent="Mozilla" -O /var/www/waptwua/mpam-fe.exe 'https://go.microsoft.com/fwlink/?LinkID=121721&arch=x64'
Es prüft, ob eine neue Version der Binärdatei verfügbar ist, indem es das Datum der im Repository verfügbaren Binärdatei mit dem Datum der in c:\windows\temp\mpam-fe.xe zwischengespeicherten Binärdatei vergleicht.
Falls die Binärdatei noch nicht unter "c:\windows\temp\mpam-fe.exe" existiert, wird das Datum gefälscht, um den Download zu erzwingen.
Wenn das Datum abweicht, lädt es die neue Binärdatei herunter und überprüft dann die Signatur der Binärdatei (sie muss von der 'Microsoft Corporation' stammen).
Dann installiert er die neue Binärdatei.
Jetzt muss nur noch die Prüfhäufigkeit konfiguriert werden
setup.py:
Code: Alle auswählen
# -*- 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')