AMSI Defender Erweiterung für SharePoint aktivieren

AMSI steht für Antimalware Scan Interface. Die Software ist eine Art Zwischenschicht zwischen einer Antiviren-Lösung (wie Defender) und einem Software-Produkt (wie SharePoint, Exchange usw.), welche es der Software ermöglicht, zusätzliche Bedrohungen schon dann zu erkennen, bevor die Bedrohung die eigentlichen Prozesse erreicht. [1]

Im Grunde wird der HTTP-Datenstrom bzw. Arbeitsspeicher bzw. auf der Protokollebene von dem Softwareprodukt mit Hilfe der API der Antivirenlösung auf bedrohliche Elemente im voraus gescannt.

Die AMSI-Integration in SharePoint Server ist standardmäßig deaktiviert. [2]
In dieser Anleitung wird gezeigt, wie man AMSI für SharePoint aktiviert.

Es müssen mindestens folgende zwei Voraussetzungen erfüllt sein:

  • Antivirenprodukt muss AMSI unterstützen und
  • Das Produkt bzw. die Software muss die AMSI-Schnittstelle integriert haben.

Unter anderem folgende Elemente werden gescannt: [3]

  • Benutzerkontensteuerung oder UAC (Erhöhung der EXE-, COM-, MSI- oder ActiveX-Installation)
  • PowerShell (Skripts, interaktive Verwendung und dynamische Codeauswertung)
  • Windows Script Host (wscript.exe und cscript.exe)
  • JavaScript und VBScript
  • Office VBA-Makros

AMSI-Architektur

Voraussetzungen

Auf jedem SP-Server überprüfen:

  • Windows Server 2016 oder höher
  • SharePoint Server-Abonnementedition Version 22H2 oder höher
  • SharePoint Server 2019 Build 16.0.10396.20000 oder höher (KB-5002358: Sicherheitsupdate vom 14. März 2023 für SharePoint Server 2019)
  • SharePoint Server 2016 Build 16.0.5391.1000 oder höher (KB-5002385: Sicherheitsupdate vom 11. April 2023 für SharePoint Server 2016)
  • Microsoft Defender mit AV-Engine-Version 1.1.18300.4 oder höher (alternativ ein kompatibler AMSI-fähiger Drittanbieter für Antiviren-/Antischadsoftware) ^2

Mögliche Nachteile

  • Je nach Antiviren-Software kann die Performance des Softwareproduktes bzw. die CPU-Leistung stark beeinträchtigt werden, weil theoretisch jede HTTP-Anfrage untersucht werden könnte. ^2
  • Wird eine Antivirensoftware installiert, dann wird Defender automatisch deaktiviert, bis die Antivirensoftware deinstalliert wird. Falls die neue Antivirensoftware dabei kein AMSI unterstützt, dann ist der AMSI-Schutz nicht vorhanden.

AMSI-Provider anzeigen

Anzeigen, welche AMSI-Provider von Antiviren-Tools registriert wurden

$AMSI = Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\AMSI\Providers' -Recurse
$AMSI -match '[0-9A-Fa-f\-]{36}'
$Matches.Values | ForEach-Object {Get-ChildItem "HKLM:\SOFTWARE\Classes\CLSID\{$_}" | Format-Table -AutoSize}

Hier ist nur der Defender vorhanden, der auf die AMSI API zugreift.

Ausgabebeispiel:


True

    Hive: HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{2781761E-28E0-4109-99FE-B9D127C57AFE}

Name                   Property                                      
----                   --------                                      
Hosts                  (default) : Scanned Hosting Applications                                                          
Implemented Categories                                               
InprocServer32         (default)      : "C:\ProgramData\Microsoft\Windows Defender\Platform\4.18.23050.5-0\MpOav.dll"    
                       ThreadingModel : Both

SP-Farm Version anzeigen

# SharePoint Modul laden
Add-PSSnapin Microsoft.SharePoint.PowerShell
# Buildversion ausgeben 
(get-spfarm).buildversion

Die Farmversion muss ^2

  • Für SP 2016 > 16.0.5391.1000 sein
  • Für SP 2019 > 16.0.10396.20000 sein

Ausgabebeispiel:

Major  Minor  Build  Revision
-----  -----  -----  --------
16     0      10398  20000

Defender Engine Version anzeigen

CMD als Admin öffnen.

cd %ProgramData%\Microsoft\Windows Defender\Platform
dir
:: Angezeigten <Ordnernamen> mit höchster Version beim nächsten Befehl verwenden
cd <Ordnername>
mpcmdrun.exe -SignatureUpdate

Die Engine muss > 1.1.18300.4 sein ^2

Copyright (C) Microsoft Corporation. All rights reserved.
C:\ProgramData\Microsoft\Windows Defender\Platform\4.18.2105.5-0>MpCmdRun.exe -SignatureUpdate
Signature update started . . .
Service Version: 4.18.2106.6
➡ Engine Version: 1.1.18300.4 ⬅
AntiSpyware Signature Version: 1.343.1364.0
AntiVirus Signature Version: 1.343.1364.0
Signature update finished. No updates needed
C:\ProgramData\Microsoft\Windows Defender\Platform\4.18.2105.5-0>

AMSI Aktivierung per Zentraladministration

Pro Webanwendung folgende Schritte durchführen.

  1. CA aufrufen
  2. Application Management
  3. Manage web applications
  4. Webanwendung auswählen, für die AMSI aktiviert werden soll
    1. Manage Features (oben im Ribbon)
  5. Feature suchen
    1. SharePoint Server Antimalware Scanning
      Beschreibung: "Detect and block potential malware attacks against a web application."
    2. und auf Activate klicken.
    3. Mit OK das Fenster schließen.
  6. Für alle gewünschten WebApps wiederholen (bei uns MySite, Portal und CA).

AMSI Aktivierung per PowerShell (alternativ) ^2

Einzeln und selektiv (nach Bedarf) in PowerShell ausführen.


# SharePoint Modul laden
Add-PSSnapin Microsoft.SharePoint.PowerShell

# Alle WebApplikationen ausgeben (inkl. CA)
Get-SPWebApplication -IncludeCentralAdministration

# Prüfen, ob AMSI für eine bestimmte WebApp aktiv ist
Get-SPFeature -Identity 4cf046f3-38c7-495f-a7da-a1292d32e8e9 -WebApplication https://WebApp-url.de/
# Aktiviert, wenn Ausgabe ohne Fehler, bei Fehler (s.u.) nicht aktiviert.
# Get-SPFeature : Cannot find an Enabled Feature object with Id: 4cf046f3-38c7-495f-a7da-a1292d32e8e9 in scope  WebApplication Url: https://WebApp-url.de/

# AMSI für eine WebApp aktivieren
# DisplayName "AntimalwareScan"
Enable-SPFeature -Identity 4cf046f3-38c7-495f-a7da-a1292d32e8e9 -Url https://WebApp-url.de/

# AMSI für eine WebApp deaktivieren
# DisplayName "AntimalwareScan"
Disable-SPFeature -Identity 4cf046f3-38c7-495f-a7da-a1292d32e8e9 -Url https://WebApp-url.de/

# AMSI für alle WebApps (inkl. CA) aktivieren
# URLs der WebApps
$WebApps = Get-SPWebApplication -IncludeCentralAdministration | select Url
# WebApps zu String
# Vorsicht: Es gibt auch leere Zeilen davor und danach
$WebAppsString = $WebApps | Out-String
# Strin in Zeilen aufteilen
$WebAppArray = $WebAppsString.split("`n")
# Erste Header-Zeilen und letzten leeren Zeilen entfernen
$WebAppNoHeader = $WebAppArray | Select-Object -Skip 3 | Select-Object -SkipLast 3
# Feature für alle WebApps aktivieren
ForEach($WebApp in $WebAppNoHeader){
    Enable-SPFeature -Identity 4cf046f3-38c7-495f-a7da-a1292d32e8e9 -url $WebApp
}

Workflows nicht funktional nach Update Juli 2021 – KB5001975, KB5001976, KB5001992

Nach dem Einspielen der Juli 2021 Updates funktionieren SharePoint Workflows nicht mehr bzw. nicht vollständig (hier Nintex Workflow).

Problematische Patche:

Es könnten mehrere Probleme auftauchen. Im SharePoint 2019 könnte es passieren, dass Nintex Workwlows nicht veröffentlicht werden können.

Im SharePoint 2013 könnte (evtl. zusätzlich) das Problem auftauchen, dass die Workflows mit einem Warten-Element bzw. Pausen-Baustein bzw. „Anhalten für…“ unvollständig oder gar nicht ausgeführt werden können.

Fehler beim Veröffentlichen eines Workflows – Failed to publish workflow: This feature has been temporarily disabled

Es wird folgende Fehlermeldung angezeigt, wenn ein Nintex Workflow veröffentlicht wird:

soap:ServerServer was unable to process request. ---> Fehler bei der Veröffentlichung des Workflows: This feature has been temporarily disabled

bzw. auf Englisch

soap:ServerServer was unable to process request. ---> Failed to publish workflow: This feature has been temporarily disabled

Lösung

Auf allen SharePoint-Server für alle SharePoint-Sites bzw. für alle Zonen im Pfad
C:\inetpub\wwwroot\wss\VirtualDirectories\<Site>
die Datei web.config
wie folgt anpassen.

Bereich in der web.config Datei finden:

. . .
<authorizedTypes>
<targetFx version="v4.0">

und folgende zwei Zeilen dazu fügen:

 <authorizedType Assembly="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" Namespace="System" TypeName="Int64" Authorized="True" />
<authorizedType Assembly="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" Namespace="System" TypeName="Int64" Authorized="True" />

soap:ServerServer was unable to process request. ---> Failed to publish workflow: This feature has been temporarily disabled - webconfig - authorizedType - Int64

Danach IIS-Reset durchführen

iisreset

Quelle:

Unable to publish or run workflows after installing SharePoint On Premises July 2021 CU

Fehler: „Anhalten für… unvollständig

Nintex Workflow - Anhalten für - Fehler - Error - SharePoint2013

Workflow meldet „Fehler beim Ausführen von <Workflow Name>„. In Details steht:
Anhalten für... unvollständig

Im ULS-Log finden sich in den Spalte „Category“ „Legacy Workflow Infrastructure“ folgende oder ähnliche Einträge mit den IDs c42q8, c42ra, c42rh

Potentially malicious xoml node: <ns0:RootWorkflowActivityWithData x:Class="Microsoft.SharePoint.Workflow.ROOT" . . . 
. . . 
Error parsing xoml: <ns0:RootWorkflowActivityWithData x:Class="Microsoft.SharePoint.Workflow.ROOT"
. . .
RunWorkflow: System.InvalidOperationException: This feature has been temporarily disabled. bei Microsoft.SharePoint.Workflow.SPNoCodeXomlCompiler.CompileBytes(Byte[] xomlBytes, Byte[] rulesBytes, Boolean doTestCompilation, String assemblyName, SPWeb web, Boolean forceNewAppDomain) bei Microsoft.SharePoint.Workflow.SPNoCodeXomlCompiler.LoadXomlAssembly(SPWorkflowAssociation association, SPWeb web) bei Microsoft.SharePoint.Workflow.SPWinOeHostServices.LoadDeclarativeAssembly(SPWorkflowAssociation association, Boolean fallback) . . .
RunWorkflow: System.InvalidOperationException: This feature has been temporarily disabled. bei Microsoft.SharePoint.Workflow.SPNoCodeXomlCompiler.CompileBytes(Byte[] xomlBytes, Byte[] rulesBytes, Boolean doTestCompilation, String assemblyName, SPWeb web, Boolean forceNewAppDomain) bei Microsoft.SharePoint.Workflow.SPNoCodeXomlCompiler.LoadXomlAssembly(SPWorkflowAssociation association, SPWeb web)
. . .

Lösung bzw. lt. MS temporäres Workaround

Auf einem der SharePoint-Server folgende Kommandos im Admin-PowerShell-Fenster ausführen.

Add-PSSnapin Microsoft.SharePoint.PowerShell
$farm=Get-SPFarm
$farm.EnablePreParseSecurityCheckForWorkflow = $false
$farm.update()

Quelle:

Some scenarios of SharePoint 2010 workflow are affected after applying the July security update for SharePoint Server (KB5004862)

 

Das funktionierte nicht

IIS-Reset Server Neustarts und Löschen von SharePoint-Cache hat nichts gebracht.