05 – Vollständiger Prüfkatalog

Generiert aus catalog.js (Version 1.0.0). 211 Prüffragen in 12 Kapiteln. Alle Befehle sind ausschließlich lesend.

A – Windows Server (13)

Basis des Betriebs: Version, Ressourcen, Netz, Updates, Backup, Umgebungstrennung. Gate: SERVER

A01 Windows-Server-Version, Edition und Build

Get-ComputerInfo | Select-Object WindowsProductName, WindowsEditionId, OsVersion, OsBuildNumber, OsArchitecture

A02 Virtuelle Maschine oder physischer Server?

Get-CimInstance Win32_ComputerSystem | Select-Object Manufacturer, Model, TotalPhysicalMemory

A03 CPU-Kerne und Arbeitsspeicher

Get-CimInstance Win32_ComputerSystem | Select-Object NumberOfLogicalProcessors, @{n='RAM_GB';e={[math]::Round($_.TotalPhysicalMemory/1GB)}}

A04 Laufwerke, freier Speicher, Ablageort für Anwendungen

Get-PSDrive -PSProvider FileSystem | Select-Object Name, @{n='FreeGB';e={[math]::Round($_.Free/1GB,1)}}, @{n='UsedGB';e={[math]::Round($_.Used/1GB,1)}}

A05 Welche weiteren Anwendungen laufen auf demselben Server?

Get-Service | Where-Object Status -eq 'Running' | Where-Object StartType -eq 'Automatic' | Select-Object Name, DisplayName | Sort-Object Name

A06 Hostname, FQDN, DNS-Namen, unter denen die Anwendung erreichbar sein soll

[System.Net.Dns]::GetHostEntry($env:COMPUTERNAME).HostName; Get-DnsClientServerAddress -AddressFamily IPv4 | Select-Object InterfaceAlias, ServerAddresses

A07 Wird ausgehender Verkehr über einen Proxy geleitet?

netsh winhttp show proxy; [System.Net.WebRequest]::DefaultWebProxy.GetProxy('https://www.microsoft.com')

A08 Ausgehender Internetzugriff vom Server

Test-NetConnection api.nuget.org -Port 443 | Select-Object ComputerName, TcpTestSucceeded; Test-NetConnection registry.npmjs.org -Port 443 | Select-Object TcpTestSucceeded

A09 Firewall-Rahmen (eingehend)

Get-NetFirewallProfile | Select-Object Name, Enabled, DefaultInboundAction; Get-NetFirewallRule -Enabled True -Direction Inbound -Action Allow | ForEach-Object { $p = $_ | Get-NetFirewallPortFilter; [pscustomobject]@{Rule=$_.DisplayName; Port=$p.LocalPort; Proto=$p.Protocol} } | Where-Object { $_.Port -and $_.Port -ne 'Any' } | Sort-Object Port -Unique

A10 Update-Prozess des Servers

Get-HotFix | Sort-Object InstalledOn -Descending | Select-Object -First 5 HotFixID, InstalledOn

A11 Backup/Restore des Servers

Get-Service | Where-Object DisplayName -match 'Backup|Veeam|Acronis|Commvault|Arcserve' | Select-Object Name, DisplayName, Status; wbadmin get versions

A12 Vorhandene DEV/TEST/PROD-Trennung

Get-IISSite | Select-Object Name, State, @{n='Bindings';e={($_.Bindings | ForEach-Object bindingInformation) -join '; '}}

A13 Wartungsfenster und Neustartmöglichkeiten

(organisatorische Frage – kein Befehl)

B – Active Directory (12)

Authentifizierung, SSO, Gruppen, Service-Konten, Zugriff der App-Pool-Identität. Gate: SECURITY

B01 Ist der Webserver Mitglied der AD-Domäne?

Get-CimInstance Win32_ComputerSystem | Select-Object Name, Domain, PartOfDomain

B02 Domänencontroller erreichbar, Domänenname, Standort

nltest /dsgetdc:$env:USERDNSDOMAIN

B03 Ist die IIS-Rolle „Windows-Authentifizierung“ installiert?

Get-WindowsFeature Web-Windows-Auth | Select-Object Name, InstallState

B04 Gewünschtes/zulässiges Authentifizierungsmodell für die neue Anwendung

Get-WebConfiguration -Filter 'system.webServer/security/authentication/*' -PSPath 'IIS:\Sites\Default Web Site' | Select-Object SectionPath, enabled

B05 Kerberos oder NTLM im praktischen Einsatz?

klist | findstr /i HTTP
setspn -Q HTTP/<fqdn-des-webservers>

B06 Muss die Anwendung mit Benutzeridentität auf Backend-Ressourcen zugreifen (Double Hop / Delegation)?

setspn -L <computername>

B07 LDAP/LDAPS vom Webserver erreichbar?

$dc = (nltest /dsgetdc:$env:USERDNSDOMAIN | Select-String 'DC:').ToString().Split('\\')[-1].Trim(); Test-NetConnection $dc -Port 636 | Select-Object ComputerName, TcpTestSucceeded; Test-NetConnection $dc -Port 389 | Select-Object TcpTestSucceeded

B08 Können AD-Gruppen für Anwendungsrollen angelegt/genutzt werden?

whoami /groups | findstr /i APP
:: mit RSAT:
powershell -c "Get-ADGroup -Filter \"Name -like '*APP*'\" | Select-Object Name"

B09 Wer pflegt Gruppenmitgliedschaften und wie schnell?

(organisatorische Frage)

B10 Service Accounts / gMSA für App-Pools und Dienste

Get-KdsRootKey | Select-Object KeyId, EffectiveTime; Get-ADServiceAccount -Filter * | Select-Object Name

B11 Darf die App-Pool-Identität auf Netzwerkressourcen (SMB, DB mit integrierter Auth) zugreifen?

Get-IISAppPool | Select-Object Name, @{n='Identity';e={$_.ProcessModel.IdentityType}}, @{n='User';e={$_.ProcessModel.UserName}}

B12 Funktioniert Windows-SSO auch auf mobilen/verwalteten Clients (MobileIron/@Work)?

(Test am Gerät – Ergebnis dokumentieren: Login-Dialog? Fehler 401? transparent?)

C – IIS (41)

Detaillierte Bestandsaufnahme des Webservers: Rollen, Sites, Pools, Module, Limits, Delegation. Gate: SERVER

C01 IIS-Version

Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\InetStp' | Select-Object MajorVersion, MinorVersion, VersionString, SetupString

C02 Installierte IIS-Rollendienste

Get-WindowsFeature Web-* | Where-Object Installed | Select-Object Name, DisplayName

C03 Vorhandene Sites, Zustand, physische Pfade

Import-Module IISAdministration; Get-IISSite | Select-Object Name, Id, State, @{n='Path';e={$_.Applications['/'].VirtualDirectories['/'].PhysicalPath}}

C04 Bindings: Hostnamen, Ports, HTTPS, SNI

Get-WebBinding | Select-Object protocol, bindingInformation, sslFlags, certificateHash

C05 Wie kann die neue Anwendung eingehängt werden?

Get-WebApplication | Select-Object path, applicationPool, PhysicalPath

C06 HTTPS vorhanden – Zertifikatsquelle

Get-ChildItem Cert:\LocalMachine\My | Select-Object Subject, Issuer, NotAfter, HasPrivateKey, Thumbprint; netsh http show sslcert

C07 Zertifikatsprozess: Beantragung, Laufzeit, Verlängerung, Wildcard/SAN

Get-ChildItem Cert:\LocalMachine\My | Select-Object Subject, NotAfter, @{n='DaysLeft';e={($_.NotAfter - (Get-Date)).Days}}, @{n='SAN';e={($_.Extensions | Where-Object {$_.Oid.FriendlyName -eq 'Subject Alternative Name'}).Format($false)}}

C08 Application Pools: Runtime, Pipeline, Identität, Start Mode

Get-IISAppPool | Select-Object Name, State, ManagedRuntimeVersion, ManagedPipelineMode, StartMode, @{n='Identity';e={$_.ProcessModel.IdentityType}}, @{n='IdleMin';e={$_.ProcessModel.IdleTimeout.TotalMinutes}}

C09 Kann ein eigener Application Pool für die neue Anwendung angelegt werden?

(Get-IISAppPool).Count; whoami /groups | findstr /i 'IIS_IUSRS Administrators'

C10 Verfügbare Pipeline-Modi / CLR-Versionen

Get-IISAppPool | Select-Object ManagedRuntimeVersion, ManagedPipelineMode | Sort-Object -Unique ManagedRuntimeVersion, ManagedPipelineMode

C11 Zulässige App-Pool-Identität für die neue Anwendung

Get-IISAppPool | Select-Object Name, @{n='Identity';e={$_.ProcessModel.IdentityType}}, @{n='User';e={$_.ProcessModel.UserName}} | Sort-Object Identity

C12 Dürfen Recycling, Idle-Timeout und Start Mode für den eigenen Pool angepasst werden?

Get-IISAppPool | Select-Object Name, StartMode, @{n='IdleMin';e={$_.ProcessModel.IdleTimeout.TotalMinutes}}, @{n='RecycleTime';e={$_.Recycling.PeriodicRestart.Time}}, @{n='RecycleSchedule';e={($_.Recycling.PeriodicRestart.Schedule | ForEach-Object Time) -join ','}}

C13 Application Initialization (Preload/Warm-up) installiert?

Get-WindowsFeature Web-AppInit | Select-Object Name, InstallState

C14 Vorhandene Anwendungen und virtuelle Verzeichnisse

Get-WebApplication | Select-Object @{n='Site';e={$_.GetParentElement().Attributes['name'].Value}}, path, applicationPool, PhysicalPath; Get-WebVirtualDirectory | Select-Object path, PhysicalPath

C15 Handler Mappings (welche Runtimes sind verdrahtet?)

& $env:windir\system32\inetsrv\appcmd.exe list config -section:system.webServer/handlers | Select-String 'name=|modules='

C16 MIME-Typen für moderne Assets vorhanden?

& $env:windir\system32\inetsrv\appcmd.exe list config -section:staticContent | Select-String 'json|woff2|webmanifest|svg|wasm|mjs'

C17 Standarddokumente

& $env:windir\system32\inetsrv\appcmd.exe list config -section:defaultDocument

C18 Request Filtering: Limits, Erweiterungen, Hidden Segments

& $env:windir\system32\inetsrv\appcmd.exe list config -section:requestFiltering

C19 Erlaubte HTTP-Verben

& $env:windir\system32\inetsrv\appcmd.exe list config -section:requestFiltering /text:verbs; & $env:windir\system32\inetsrv\appcmd.exe list module WebDAVModule

C20 Komprimierung

& $env:windir\system32\inetsrv\appcmd.exe list config -section:urlCompression; & $env:windir\system32\inetsrv\appcmd.exe list config -section:httpCompression | Select-String 'mimeType|dynamicTypes|staticTypes'

C21 Output-/Kernel-Caching aktiv?

& $env:windir\system32\inetsrv\appcmd.exe list config -section:caching

C22 Aktive Authentifizierungsmodule an bestehenden Sites

Get-WebConfiguration -Filter 'system.webServer/security/authentication/*' -PSPath 'IIS:\' -Recurse | Select-Object PSPath, SectionPath, enabled | Where-Object enabled

C23 URL-Autorisierung (Authorization Rules) verfügbar?

Get-WindowsFeature Web-Url-Auth | Select-Object InstallState; & $env:windir\system32\inetsrv\appcmd.exe list config -section:system.webServer/security/authorization

C24 IP-/Domäneneinschränkungen im Einsatz?

& $env:windir\system32\inetsrv\appcmd.exe list config -section:ipSecurity

C25 IIS-Logging: Format, Pfad, Felder, Rotation

Get-WebConfigurationProperty -Filter system.applicationHost/sites/siteDefaults/logFile -Name directory, logFormat, period, enabled, logExtFileFlags | Format-List

C26 Failed Request Tracing verfügbar?

Get-WindowsFeature Web-Http-Tracing | Select-Object InstallState

C27 WebSocket-Protokoll installiert?

Get-WindowsFeature Web-WebSockets | Select-Object InstallState; & $env:windir\system32\inetsrv\appcmd.exe list config -section:system.webServer/webSocket

C28 URL Rewrite Modul installiert?

Get-WebGlobalModule | Where-Object Name -like '*Rewrite*' | Select-Object Name, Image

C29 Application Request Routing (ARR) / Reverse Proxy

Get-WebGlobalModule | Where-Object Name -like '*ApplicationRequestRouting*'; & $env:windir\system32\inetsrv\appcmd.exe list config -section:system.webServer/proxy

C30 Ist ein Reverse Proxy auf lokale Dienste (Kestrel/Node/Python) organisatorisch erlaubt?

(organisatorische Frage)

C31 FastCGI-Konfiguration

& $env:windir\system32\inetsrv\appcmd.exe list config -section:system.webServer/fastCgi

C32 ISAPI- und CGI-Einschränkungen

& $env:windir\system32\inetsrv\appcmd.exe list config -section:isapiCgiRestriction

C33 WebDAV

Get-WindowsFeature Web-DAV-Publishing | Select-Object InstallState; & $env:windir\system32\inetsrv\appcmd.exe list module WebDAVModule

C34 Rolle „Statischer Inhalt“ installiert?

Get-WindowsFeature Web-Static-Content | Select-Object InstallState

C35 Upload-/Request-Limits (maxAllowedContentLength, maxRequestLength, uploadReadAheadSize)

& $env:windir\system32\inetsrv\appcmd.exe list config -section:requestFiltering /text:requestLimits.maxAllowedContentLength; & $env:windir\system32\inetsrv\appcmd.exe list config -section:serverRuntime /text:uploadReadAheadSize

C36 Timeouts: connectionTimeout, executionTimeout, activityTimeout

Get-WebConfigurationProperty -Filter system.applicationHost/sites/siteDefaults/limits -Name connectionTimeout; & $env:windir\system32\inetsrv\appcmd.exe list config -section:system.applicationHost/webLimits

C37 Feature-Delegation: Welche Sektionen darf die web.config überschreiben?

foreach ($s in 'system.webServer/handlers','system.webServer/modules','system.webServer/security/authentication/windowsAuthentication','system.webServer/security/authentication/anonymousAuthentication','system.webServer/security/requestFiltering','system.webServer/httpProtocol','system.webServer/staticContent','system.webServer/webSocket','system.webServer/urlCompression','system.webServer/rewrite/rules') { [pscustomobject]@{Section=$s; OverrideMode=(Get-WebConfiguration -Filter $s -PSPath 'IIS:\' -Metadata).OverrideMode} }

C38 Schreibrechte auf Site-Ordner und web.config für das Deployment

icacls C:\inetpub\wwwroot

C39 Dürfen eigene HTTP-Header (CSP, HSTS, X-Frame-Options) gesetzt werden?

& $env:windir\system32\inetsrv\appcmd.exe list config -section:httpProtocol

C40 Zugriff des App-Teams auf den IIS-Manager

Get-WindowsFeature Web-Mgmt-Service | Select-Object InstallState; Get-Service WMSVC -ErrorAction SilentlyContinue | Select-Object Status, StartType

C41 HTTP/2 und TLS-Protokolle am Server

Get-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Services\HTTP\Parameters' -ErrorAction SilentlyContinue | Select-Object EnableHttp2Tls, EnableHttp2Cleartext; Get-ChildItem 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols' -Recurse -ErrorAction SilentlyContinue | Get-ItemProperty | Select-Object PSPath, Enabled, DisabledByDefault

D – Laufzeiten (29)

Immer unterscheiden: technisch vorhanden / installierbar / administrativ erlaubt / produktiv freigegeben / unbekannt. Gate: SERVER

D_netfx_tech .NET Framework: technischer Status

Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full' | Select-Object Version, Release

D_netfx_org .NET Framework: organisatorischer Status

(organisatorische Frage)

D_netfx_ver .NET Framework: Version

(Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full').Release

D_dotnet_tech Moderne .NET Runtime (8/9/10): technischer Status

dotnet --list-runtimes

D_dotnet_org Moderne .NET Runtime (8/9/10): organisatorischer Status

(organisatorische Frage)

D_dotnet_ver Moderne .NET Runtime (8/9/10): Version

dotnet --list-runtimes

D_hosting_tech ASP.NET Core Hosting Bundle (ANCM): technischer Status

Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*, HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | Where-Object DisplayName -like '*ASP.NET Core*Hosting*' | Select-Object DisplayName, DisplayVersion; Get-WebGlobalModule | Where-Object Name -like 'AspNetCoreModule*'

D_hosting_org ASP.NET Core Hosting Bundle (ANCM): organisatorischer Status

(organisatorische Frage)

D_hosting_ver ASP.NET Core Hosting Bundle (ANCM): Version

Get-WebGlobalModule | Where-Object Name -like 'AspNetCoreModule*' | Select-Object Name, Image

D_hosting_inproc Laufen bereits ASP.NET-Core-Anwendungen (In-Process) produktiv auf diesem IIS?

Get-ChildItem C:\inetpub -Recurse -Filter web.config -ErrorAction SilentlyContinue | Select-String 'aspNetCore' | Select-Object Path, Line

D_sdk_tech .NET SDK (auf Server oder Buildrechner): technischer Status

dotnet --list-sdks

D_sdk_org .NET SDK (auf Server oder Buildrechner): organisatorischer Status

(organisatorische Frage)

D_ps_tech PowerShell: technischer Status

$PSVersionTable.PSVersion; Get-ExecutionPolicy -List; Get-Command pwsh -ErrorAction SilentlyContinue | Select-Object Version

D_ps_org PowerShell: organisatorischer Status

(organisatorische Frage)

D_ps_ver PowerShell: Version

$PSVersionTable.PSVersion

D_php_tech PHP: technischer Status

php -v; Get-ChildItem C:\PHP*, 'C:\Program Files\PHP*' -ErrorAction SilentlyContinue | Select-Object FullName

D_php_org PHP: organisatorischer Status

(organisatorische Frage)

D_php_ver PHP: Version

php -v

D_php_ext PHP: Extensions (mysqli/pdo_mysql, openssl, mbstring, intl, gd/imagick) und Einschränkungen (disable_functions, open_basedir)

php -m; php -i | findstr /i "disable_functions open_basedir upload_max_filesize post_max_size memory_limit"

D_python_tech Python: technischer Status

python --version; py -0p

D_python_org Python: organisatorischer Status

(organisatorische Frage)

D_python_ver Python: Version

python --version

D_node_tech Node.js: technischer Status

node -v; npm -v; Get-WebGlobalModule | Where-Object Name -like '*iisnode*'

D_node_org Node.js: organisatorischer Status

(organisatorische Frage)

D_node_ver Node.js: Version

node -v

D_java_tech Java / Tomcat: technischer Status

java -version; Get-Service | Where-Object Name -like '*Tomcat*' | Select-Object Name, Status

D_java_org Java / Tomcat: organisatorischer Status

(organisatorische Frage)

D_pkg Paketquellen (NuGet/npm/pip): Zugriff von Entwicklungs-/Buildrechnern

Test-NetConnection api.nuget.org -Port 443 | Select-Object TcpTestSucceeded; Test-NetConnection registry.npmjs.org -Port 443 | Select-Object TcpTestSucceeded; dotnet nuget list source

D_devtools Auf Entwicklungsrechnern erlaubte Werkzeuge

dotnet --list-sdks; node -v; git --version

E – Datenbanken (21)

MySQL im Detail, andere Systeme nur feststellen. MySQL nicht ohne fachlichen Grund ersetzen. Gate: DATABASE

E01 MySQL: genaue Version (oder MariaDB?)

SELECT VERSION(), @@version_comment;

E02 MySQL: Host, Port, Standort (gleicher Server? DB-Segment?)

SHOW VARIABLES WHERE Variable_name IN ('hostname','port','bind_address');

E03 MySQL: TLS-Verschlüsselung

SHOW VARIABLES WHERE Variable_name IN ('have_ssl','require_secure_transport','tls_version'); SHOW STATUS LIKE 'Ssl_cipher';

E04 MySQL: Authentifizierungs-Plugin des App-Kontos

SELECT user, host, plugin FROM mysql.user WHERE user = SUBSTRING_INDEX(CURRENT_USER(),'@',1);

E05 MySQL: Rechte des vorgesehenen App-Kontos

SHOW GRANTS FOR CURRENT_USER();

E06 Eigenes Schema/Datenbank je Modul anlegbar?

SHOW DATABASES;

E07 Wer verwaltet DB-Konten/Rechte und wie lange dauert es?

(organisatorische Frage)

E08 Storage Engine / Transaktionen

SHOW ENGINES; SHOW VARIABLES LIKE 'default_storage_engine';

E09 Charset/Collation

SHOW VARIABLES WHERE Variable_name IN ('character_set_server','collation_server');

E10 Event Scheduler aktiv (zeitgesteuerte DB-Jobs)?

SHOW VARIABLES LIKE 'event_scheduler';

E11 MySQL: Backup/Restore-Verfahren

SHOW VARIABLES WHERE Variable_name IN ('log_bin','binlog_expire_logs_seconds','datadir');

E12 Restore auf Test-Datenbank / Kopie möglich?

(organisatorische Frage)

E13 max_connections und aktuelle Auslastung

SHOW VARIABLES LIKE 'max_connections'; SHOW STATUS WHERE Variable_name IN ('Threads_connected','Max_used_connections');

E14 MySQL vom IIS-Server erreichbar?

Test-NetConnection <mysql-host> -Port 3306 | Select-Object ComputerName, TcpTestSucceeded

E15 MySQL von Entwicklungsrechnern erreichbar?

Test-NetConnection <mysql-host> -Port 3306 | Select-Object TcpTestSucceeded

E16 Verfügbare Connectoren/Treiber

Get-OdbcDriver | Where-Object Name -like '*MySQL*' | Select-Object Name, Platform

E17 MySQL: Logging/Audit

SHOW VARIABLES WHERE Variable_name IN ('general_log','slow_query_log','log_bin'); SHOW PLUGINS;

E18 SQL Server vorhanden/zulässig?

Get-Service | Where-Object Name -like 'MSSQL*' | Select-Object Name, Status

E19 PostgreSQL vorhanden/zulässig?

Get-Service | Where-Object Name -like 'postgres*' | Select-Object Name, Status

E20 Weitere Datenhaltung: SQLite-Dateien, LocalDB, Access, Dateien?

(Nachfrage bei IT/Fachbereich)

E21 Zeitzone von DB und Server

SHOW VARIABLES LIKE '%time_zone%'; -- PowerShell: (Get-TimeZone).Id

F – Schnittstellen (24)

Je Schnittstelle: vorhanden, erreichbar, erlaubt, Authentifizierung, Verantwortlicher, Dokumentation. Gate: NETWORK

F01 Interne REST/HTTPS-APIs anderer Fachsysteme

Invoke-WebRequest https://<api-host>/ -UseBasicParsing -Method Head | Select-Object StatusCode

F01_det Interne REST/HTTPS-APIs anderer Fachsysteme: Authentifizierung, Verantwortlicher, Dokumentation

(Nachfrage)

F02 Zentraler Reverse Proxy / WAF / Gateway vor dem IIS

Invoke-WebRequest https://<app-host>/ -UseBasicParsing -Method Head | Select-Object -ExpandProperty Headers

F02_det Zentraler Reverse Proxy / WAF / Gateway vor dem IIS: Authentifizierung, Verantwortlicher, Dokumentation

(Nachfrage)

F03 LDAP/LDAPS (aus der Anwendung)

Test-NetConnection <dc> -Port 636 | Select-Object TcpTestSucceeded

F03_det LDAP/LDAPS (aus der Anwendung): Authentifizierung, Verantwortlicher, Dokumentation

(Nachfrage)

F04 SMB/Netzlaufwerke (Import/Export-Ablagen)

Get-SmbMapping; net use; Test-NetConnection <fileserver> -Port 445 | Select-Object TcpTestSucceeded

F04_det SMB/Netzlaufwerke (Import/Export-Ablagen): Authentifizierung, Verantwortlicher, Dokumentation

(Nachfrage)

F05 SMTP/Exchange (Mailversand)

Test-NetConnection <smtp-host> -Port 25 | Select-Object TcpTestSucceeded; Test-NetConnection <smtp-host> -Port 587 | Select-Object TcpTestSucceeded

F05_det SMTP/Exchange (Mailversand): Authentifizierung, Verantwortlicher, Dokumentation

(Nachfrage)

F06 Microsoft Graph / Microsoft 365

Test-NetConnection graph.microsoft.com -Port 443 | Select-Object TcpTestSucceeded

F06_det Microsoft Graph / Microsoft 365: Authentifizierung, Verantwortlicher, Dokumentation

(Nachfrage)

F07 Webhooks (eingehend/ausgehend, z. B. Teams)

Test-NetConnection <webhook-host> -Port 443 | Select-Object TcpTestSucceeded

F07_det Webhooks (eingehend/ausgehend, z. B. Teams): Authentifizierung, Verantwortlicher, Dokumentation

(Nachfrage)

F08 WebSockets Ende-zu-Ende (Client → Gateway/Tunnel → IIS)

(siehe Client-Test „WebSocket“)

F08_det WebSockets Ende-zu-Ende (Client → Gateway/Tunnel → IIS): Authentifizierung, Verantwortlicher, Dokumentation

(Nachfrage)

F09 Server-Sent Events Ende-zu-Ende

(siehe Client-Test „SSE“)

F09_det Server-Sent Events Ende-zu-Ende: Authentifizierung, Verantwortlicher, Dokumentation

(Nachfrage)

F10 Redis

Test-NetConnection <redis-host> -Port 6379 | Select-Object TcpTestSucceeded

F10_det Redis: Authentifizierung, Verantwortlicher, Dokumentation

(Nachfrage)

F11 RabbitMQ / Message Broker / MSMQ

Test-NetConnection <broker-host> -Port 5672 | Select-Object TcpTestSucceeded; Get-WindowsFeature MSMQ-Server | Select-Object InstallState

F11_det RabbitMQ / Message Broker / MSMQ: Authentifizierung, Verantwortlicher, Dokumentation

(Nachfrage)

F12 Datenaustausch per Datei: Formate und Quellen (Import/Export)

(Nachfrage)

F13 Darf die Anwendung ausgehende HTTP-Aufrufe machen?

Test-NetConnection www.microsoft.com -Port 443 | Select-Object TcpTestSucceeded

G – Hintergrundverarbeitung (8)

Belastbarer Weg für automatische Importe, Berechnungen und Benachrichtigungen. Gate: SERVER

G01 Windows Task Scheduler für Anwendungs-Jobs nutzbar?

Get-ScheduledTask | Where-Object { $_.TaskPath -notlike '\Microsoft*' -and $_.State -ne 'Disabled' } | Select-Object TaskName, TaskPath, State, @{n='User';e={$_.Principal.UserId}}

G02 Eigener Windows Service installierbar?

Get-CimInstance Win32_Service | Where-Object { $_.PathName -notlike '*\Windows\*' } | Select-Object Name, StartMode, State, StartName, PathName

G03 Unter welchem Konto dürfen Jobs/Dienste laufen?

Get-ScheduledTask | Select-Object TaskName, @{n='User';e={$_.Principal.UserId}}, @{n='LogonType';e={$_.Principal.LogonType}} | Where-Object User

G04 Sind In-Process-Jobs im IIS (Hangfire, IHostedService) zulässig?

(organisatorische Frage; technisch siehe C12/C13)

G05 Vorgaben zu Laufzeit, Zeitfenstern und Ressourcenlimits für Jobs

(organisatorische Frage)

G06 Neustart-/Wiederherstellungsverhalten von Diensten und Tasks

sc qfailure <dienstname>

G07 Monitoring/Alarmierung für Hintergrundjobs

Get-Service | Where-Object DisplayName -match 'PRTG|Zabbix|checkmk|SCOM|Nagios|Datadog' | Select-Object Name, Status

G08 Benachrichtigungswege für Nutzer

(siehe F05/F07)

H – Deployment (12)

Veröffentlichungsweg, Test, Freigabe, Rollback, Rechte, Wartungsfenster. Gate: SERVER

H01 Aktueller Veröffentlichungsweg

Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\* | Where-Object DisplayName -like '*Web Deploy*' | Select-Object DisplayName, DisplayVersion; Get-Service MsDepSvc, WMSVC -ErrorAction SilentlyContinue | Select-Object Name, Status

H02 Git / Quellcodeverwaltung

git --version; git remote -v

H03 CI/CD-System vorhanden?

(Nachfrage IT)

H04 Testumgebung für Webanwendungen

Get-IISSite | Select-Object Name, State

H05 Freigabeprozess für Produktion

(organisatorische Frage)

H06 Rollback-Verfahren

(organisatorische Frage)

H07 Versionierung/Release-Nummerierung

(organisatorische Frage)

H08 Wer darf deployen?

(organisatorische Frage)

H09 Akzeptable Downtime / Wartungsfenster für Deployments

(organisatorische Frage)

H10 Build-Tooling (Node/npm, .NET SDK) auf Entwicklungsrechnern erlaubt?

node -v; dotnet --version

H11 AppLocker / Software Restriction / Signaturpflicht auf dem Server?

Get-AppLockerPolicy -Effective -ErrorAction SilentlyContinue | Select-Object -ExpandProperty RuleCollections | Select-Object RuleCollectionType, EnforcementMode

H12 Antivirus-Ausnahmen für Anwendungs-/Upload-Ordner möglich?

Get-MpPreference -ErrorAction SilentlyContinue | Select-Object -ExpandProperty ExclusionPath

I – Logging / Monitoring / Audit (9)

Nachvollziehbarkeit im Betrieb und revisionsnahe Speicherung operativer Daten. Gate: SERVER

I01 Zugriff des App-Teams auf IIS-Logs

icacls C:\inetpub\logs\LogFiles

I02 Darf die Anwendung ins Windows Event Log schreiben (eigene Quelle)?

Get-WinEvent -ListLog Application | Select-Object LogName, MaximumSizeInBytes, LogMode, RecordCount

I03 Zentrales Logging

Get-Service | Where-Object DisplayName -match 'Splunk|Elastic|Beats|Graylog|Monitoring Agent' | Select-Object Name, Status

I04 Monitoring/Health Checks/Alarmierung

(siehe G07)

I05 Aufbewahrungsdauer für Logs (Tage)

(organisatorische Frage)

I06 Darf die Anwendung Logdateien im eigenen Ordner schreiben?

icacls <app-ordner>\logs

I07 Audit-Anforderungen an operative Daten

(fachliche Frage)

I08 Zeitquelle synchron (NTP) auf Server und DB?

w32tm /query /status

I09 Wer darf personenbezogene Logs/Audit-Daten einsehen?

(organisatorische Frage)

J – Sicherheit / Datenschutz (12)

Netz, Zugriff, MFA, TLS, personenbezogene Daten, Freigaben. Keine Sicherheitsmechanismen umgehen. Gate: SECURITY

J01 Netzsegmentierung: Segment des Webservers, der DB, der Clients

Get-NetIPConfiguration | Select-Object InterfaceAlias, IPv4Address, IPv4DefaultGateway

J02 Zugriffswege zur Anwendung

(organisatorische Frage)

J03 MFA-Anforderung

(organisatorische Frage)

J04 TLS-/Zertifikatsvorgaben

(siehe C41)

J05 Verarbeitete personenbezogene Daten

(fachliche Frage)

J06 Vorgaben zum Rollen-/Rechtemodell

(fachliche Frage)

J07 Aufbewahrungs-/Löschkonzept

(organisatorische Frage)

J08 Security-Test/Freigabeprozess

(organisatorische Frage)

J09 Gibt es Vorgaben zu CSP/Security-Headern?

Invoke-WebRequest https://<bestehende-app>/ -UseBasicParsing | Select-Object -ExpandProperty Headers

J10 Secrets-Management (Connection Strings, API-Keys)

Get-ChildItem C:\inetpub -Recurse -Filter appsettings*.json -ErrorAction SilentlyContinue | Select-Object FullName

J11 Web-Filter/Proxy/Security-Gateway zwischen Client und IIS?

(Client-Test im realen Pfad)

J12 Explizit verbotene Techniken

(organisatorische Frage)

K – Clients (12)

Browser, Geräte, Richtlinien, Netzabdeckung, Druck. Gate: CLIENT

K01 Unterstützte Browser

gpresult /r | findstr /i browser
rem Auf Client: edge://policy und chrome://policy im Browser öffnen

K02 Browser-Versionsstand

reg query "HKLM\SOFTWARE\Microsoft\Edge\BLBeacon" /v version

K03 Zentrale Browserverwaltung (GPO/MDM-Richtlinien)?

reg query HKLM\SOFTWARE\Policies\Microsoft\Edge /s

K04 JavaScript per Richtlinie eingeschränkt?

reg query HKLM\SOFTWARE\Policies\Microsoft\Edge /v DefaultJavaScriptSetting

K05 Richtlinien zu Cookies, Local Storage, Downloads, Zwischenablage

reg query HKLM\SOFTWARE\Policies\Microsoft\Edge /s | findstr /i "Cookie Download Clipboard"

K06 PWA-Installation erlaubt/gewünscht?

(Richtlinie prüfen)

K07 Gerätetypen im Einsatz

(Nachfrage)

K08 Dashboard-Monitore: Gerät, Browser/Kiosk, Auflösung, Auto-Login, Neustartverhalten

(Gerät prüfen)

K09 Auflösungen, Touch, Bildschirmgrößen

(Nachfrage)

K10 Netzabdeckung/Verbindungsabbrüche im Einsatzumfeld

(Nachfrage; Client-Test „Verbindungsabbruch“)

K11 Druck/PDF

(Client-Test „PDF-Anzeige“)

K12 Benutzergruppen und ihre typischen Clients

(Nachfrage)

L – Zugriffspfad / MobileIron / Tunnel (18)

Die Ende-zu-Ende-Kette Client → MDM → VPN/Tunnel → Netz → IIS ist eine gleichwertige Systemgrenze. Ergänzt durch den realen Client Capability Test. Gate: NETWORK

L01 Reale Zugriffspfade (Ende-zu-Ende)

(Nachfrage IT/MDM-Admin)

L02 MobileIron/Ivanti-Version (Core/EPMM, Mobile@Work, Web@Work, Tunnel)

(am Gerät ablesen)

L03 Browser innerhalb der MDM-Umgebung

(am Gerät ablesen; User-Agent im Client-Test)

L04 Tunnel-Art auf Mobilgeräten

(Nachfrage MDM-Admin)

L05 Unterschiede Desktop / Notebook / Tablet / Smartphone im Zugriff

(Nachfrage)

L06 Clientprofile je Benutzergruppe (welche Gruppe nutzt welchen Pfad?) und Pflichtclients

(Nachfrage)

L07 JavaScript-Einschränkungen durch MDM-/Browser-Richtlinien

(Client-Test „JavaScript“)

L08 Einschränkungen: Downloads, Uploads, Kamera, Zwischenablage, lokale Speicherung

(Client-Test + Nachfrage)

L09 Externe Ressourcen, Proxys, Webfilter, CSP, Security-Gateways im Pfad

(Client-Test „externe Ressourcen“, „CDN“)

L10 Wer stellt Testgeräte je Profil bereit und wann?

(organisatorische Frage)

L11 Vertraut die MDM-Umgebung dem Zertifikat des Webservers (interne CA)?

(Client-Test öffnet Seite über HTTPS)

L20 No-JS-Baseline: Navigation möglich?

(manueller Test)

L21 No-JS-Baseline: Anmeldung möglich?

(manueller Test)

L22 No-JS-Baseline: Formulare nutzbar (Erfassen/Ändern)?

(manueller Test)

L23 No-JS-Baseline: Daten speichern möglich?

(manueller Test)

L24 No-JS-Baseline: Tabellen/Listen lesbar?

(manueller Test)

L25 No-JS-Baseline: Fehler verständlich?

(manueller Test)

L26 No-JS-Baseline: Wesentliche operative Informationen abrufbar?

(manueller Test)

Client Capability Tests (L2)

ID Test Gruppe
html5 HTML5-Grundfunktionen Basis
css_local CSS / lokales Stylesheet Basis
font_local Lokale Fonts Basis
icon_local Lokale Icons (SVG) Basis
js_basic JavaScript grundsätzlich JavaScript
es_modern Moderne JS-Sprachfeatures (ES2020+) JavaScript
dom DOM-Manipulation JavaScript
secure_context Sicherer Kontext (HTTPS) Basis
form_get Klassisches GET-Formular Formulare
form_post Klassisches POST-Formular Formulare
xhr XMLHttpRequest Netzwerk
fetch Fetch API Netzwerk
fetch_post API-/Fetch-POST (JSON) Netzwerk
internal_api Interner API-Aufruf Netzwerk
cookie Cookies (JS + Session-Cookie) Speicher
cookie_samesite SameSite-Verhalten Speicher
localstorage LocalStorage Speicher
sessionstorage SessionStorage Speicher
indexeddb IndexedDB Speicher
websocket WebSockets Realtime
sse Server-Sent Events Realtime
serviceworker Service Worker PWA
pwa PWA-Funktionen (Manifest) PWA
upload Datei-Upload Dateien
upload_multi Mehrfach-Upload Dateien
download Download Dateien
pdf PDF-Anzeige Dateien
clipboard Clipboard API Geräte-APIs
camera Kamera / MediaDevices Geräte-APIs
geolocation Geolocation Geräte-APIs
webcrypto WebCrypto Geräte-APIs
cors CORS (Cross-Origin-Request) Extern
external_https Externe HTTPS-Ressource Extern
cdn CDN-Ressource Extern
long_request Langer Request / Timeout Netz/Tunnel
big_response Größere Antwort (2 MB) Netz/Tunnel
connection_drop Verhalten bei Verbindungsabbruch Netz/Tunnel
session_lifetime Session-Lebensdauer Netz/Tunnel