SCCM Task Sequence mit Referenz auf leeres Driver Package kommt nie an

Szenario:

  • SCCM (irgendwie glaube ich die Version ist egal, wir hatten 1702)
  • Windows 10 Upgrade Task Sequence
  • Verweis auf driver content („Provide the following driver content to Windows Setup during upgrade“) – ein Driver package
  • Das Driver package existiert zwar, enthält aber keine Treiber

Ergebnis:

  • GUI-seitig schaut alles pipifein aus
  • am Client kommt nix an – SW Center zeigt nichts an, es wird nix installiert
  • in irgendeinem Log (execmgr?) taucht die Task Sequence auf, es schaut also so aus als käme was an

Grund:

  • SCCM Server kann wohl für ein leeres Package keinen Hash erzeugen
  • Package ohne Hash kann offenbar nicht von einer Task Sequence referenziert werden
  • Policy wird nicht erstellt
  • Sehen kann man das am SCCM server im policypv.log:
    CPolicySource::CreateSoftwarePolicy: Package hash data (ABC12345) has not been created or replicated on this site, will retry later.
    Failed to create policy and policy assignment based on package ABC12345, program * and offer ABC67890

Offensichtliche Lösung: Verweis auf leeres Package aus Task Sequence entfernen (oder Treiber ins Package geben/redistributen).

AzureStack DK VPN Verbindung ohne viele Tools

Die Anleitung für die Herstellung einer VPN Verbindung zur AzureStack Development Kit Installation ist relativ anstrengend und langatmig wo es einfacher geht ohne irgendwelche ZIPs zu laden, entpacken, Module importieren, etc. – man braucht einzig das AzureStack Root CA Zertifikat an einem zugänglichen Ort speichern (am einfachsten am Host von einem der Portale mit dem Browser exportieren) und dieses Mini-Scriptl laufen lassen (mit angepassten Parametern natürlich 😀 ):

$ConnectionName="AzureStack"
$ServerAddress="1.2.3.4"
$Username="administrator"
$PlainPassword="insert_secure_password_here"
$RootCert="\\somenode\someshare$\AzureStackRootCA.crt"

Remove-VpnConnection -Name $ConnectionName -Force
Add-VpnConnection -Name $ConnectionName -ServerAddress $ServerAddress -TunnelType L2tp -EncryptionLevel Required -AuthenticationMethod MSChapv2 -L2tpPsk $PlainPassword -Force -RememberCredential -PassThru -SplitTunneling 
Add-VpnConnectionRoute -ConnectionName $ConnectionName -DestinationPrefix 192.168.102.0/24 -RouteMetric 2 -PassThru
Add-VpnConnectionRoute -ConnectionName $ConnectionName -DestinationPrefix 192.168.105.0/27 -RouteMetric 2 -PassThru

Copy-Item $RootCert "$env:TEMP\AS.crt" -Force
Import-Certificate -CertStoreLocation cert:\localmachine\root -FilePath "$env:TEMP\AS.crt"
rasdial "$ConnectionName" "$Username" "$PlainPassword"

Zur Erinnerung (ADFS Mode):

  • Admin Portal
  • User Portal
  • *.azurestack.external in die Proxyausnahmen
  • Default User nach Deployment: azurestackadmin@azurestack.local

Linux SCCM Client mit OpenSSL 1.1.0

Wer leichtsinnigerweise Debian auf Version 9 (Stretch) hebt wird erkennen dass anschließend der SCCM Client (und der OMI Server) tot sind – ein Reinstallversuch endet in der Meldung dass OpenSSL 1.1.0 nicht supported ist (nur 0.9.8 und 1.0.*).

Drei kleine Änderungen „beheben“ dieses Problem (neuen SCCM Client gibt es ja nicht – der letzte ist vom März 2016 (!!!!)):

1) Im Install Script in Zeile 1063 einfach das 1.1 in der Regular Expression einfügen:
OPENSSL_SYSTEM_VERSION_100=`echo $OPENSSL_SYSTEM_VERSION_FULL | grep -Eq '^1.(0|1).'; echo $?`

2) Im Install Script alle Aufrufe von CreateOpenSSLLinksIfNecessary auskommentieren.

3) Im ccm-Universalx64.tar im Verzeichnis omi_100 im install Script den nicht funktionierenden Aufruf von openssl -h durch openssl help ersetzen und das File im TAR austauschen.

LDAP ohne TLS/SSL und/oder Signing

Im Event mit ID 2887 im Logfile Directory Service, Source Microsoft-Windows-ActiveDirectory_DomainService wird einmal täglich angemeckert wenn sich Clients ohne TLS/SSL oder ohne Signing der Daten verbinden – wenn man dann Diagnostics für LDAP Interface (HKLM/SYSTEM/CurrentControlSet/Services/NTDS/Diagnostics/LDAP Interface=0x2) enabled bekommt pro einem solchen Versuch einen Event mit ID 2889 im gleichen Logfile (Source „LDAP Interface“) wo in den Event-Properties dann Client (Adresse) und benutzter User drin steht, ist daher nett mit Powershell auswertbar:
Invoke-Command (Get-ADDomain).ReplicaDirectoryServers { Get-WinEvent -LogName "Directory Service"|? { $_.Id -eq 2889 }|% { write-output "$($_.TimeCreated): $($_.Properties[0].Value) => $($_.Properties[1].Value)" } }

Skype for Business: File transfer failed for some replica machines

Frontend Server testweise mit Zertifikat von Let’s Encrypt versorgt – ab da Events mit Source LS File Transfer Agent Service und ID 1017:

File transfer failed for some replica machines. Skype for Business Server 2015, File Transfer Agent will continuously attempt to replicate to these machines.

While this condition persists, configuration changes will not be delivered to these replica machines.
Replica file transfer failures: edgeserver.meinedomäne.com: Https request failed.

Details: System.ServiceModel.FaultException: Invalid certificate presented by remote source in cluster frontendserver.meinedomäne.com. Details: No match.

In Anlehnung an diesen Artikel das Zertifikat der Let’s Encrypt Intermediate CA in den Computer Store, Folder „Intermediate Certification Authorities“ importiert, SfB Services restarted und Ruhe kehrt ein.

Event Microsoft-Windows-CAPI2 mit ID 513 bei Backup

Eventtext: Cryptographic Services failed while processing the OnIdentity() call in the System Writer Object. Details: AddLegacyDriverFiles: Unable to back up image of binary Microsoft Link-Layer Discovery Protocol. System Error: Access is denied.

Lösung ist hier beschrieben aber IMHO falsch weil nicht nur der notwendige DACL ACE eingefügt wird sondern auch eine SACL die vorher nicht existiert hat erzeugt wird (startet mit S: in der SDDL).

Daher:

sc sdset mslldp D:(D;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BG)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SY)(A;;CCDCLCSWRPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWRPWPDTLOCRRC;;;SO)(A;;LCRPWP;;;S-1-5-80-3141615172-2057878085-1754447212-2405740020-3916490453)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)

Geht eigentlich nur um das hier: (A;;CCLCSWLOCRRC;;;SU) – vorne das A heißt ALLOW und hinten SU ist das Kürzel für Service Users.

Und gut ists (gilt für Windows Server 2016).

Zertifikat mit CERTUTIL finden und revoken

Die CA Konsole ist jetzt nicht gerade ein Ausbund an Komfort daher macht es Sinn bei wi(e)derkehrenden Tätigkeiten die Commandline zu bemühen, so auch beim Find und Revoken eines Zertifikats.

Finden:
certutil -view -config "meineca.meinfqdn.com\CA Displayname" -out NotBefore,CommonName,RequesterName,SerialNumber -restrict "Issued Common Name=meinzertifikat.meinfqdn.com"

Gibt man bei -out nichts an wird der gesamte Datenbankeintrag gedumped; ganz oben im Output gibt CERTUTIL dankenswerterweise das DB Schema aus, dort findet man dann die gewünschten Felder und deren Kurznamen. Wichtig fürs Revoken ist auf alle Fälle die Seriennnummer.

Revoken:
certutil -revoke -config "meineca.meinfqdn.com\CA Displayname" meineseriennummer 4

Der letzte Parameter (4 im Beispiel) gibt den Grund für das Revoke an, ruft man CERTUTIL -revoke ohne Parameter auf bekommt man alle möglichen Werte präsentiert:

0: CRL_REASON_UNSPECIFIED  -- Unspecified (default)
1: CRL_REASON_KEY_COMPROMISE  -- Key Compromise
2: CRL_REASON_CA_COMPROMISE  -- CA Compromise
3: CRL_REASON_AFFILIATION_CHANGED  -- Affiliation Changed
4: CRL_REASON_SUPERSEDED  -- Superseded
5: CRL_REASON_CESSATION_OF_OPERATION  -- Cessation of Operation
6: CRL_REASON_CERTIFICATE_HOLD  -- Certificate Hold
8: CRL_REASON_REMOVE_FROM_CRL  -- Remove From CRL
9: CRL_REASON_PRIVILEGE_WITHDRAWN  -- Privilege Withdrawn
10: CRL_REASON_AA_COMPROMISE -- AA Compromise
-1: Unrevoke -- Unrevoke

BMC/IPMI low level reset

IPMIUTIL gibts zwar auch für Windows, hat aber leider nicht wie IPMITOOL (welches es wiederum nur für Linux gibt) ein spezielles Kommando um den BMC zu resetieren (was, man möge es kaum für möglich halten, echt manchmal notwendig ist weil das Teil einfach abgekackt ist).

In der IPMIUTIL-Doku gibts das CMD Kommando mit dem man raw commands ausführen kann, die notwendigen Parameter sind wie folgt beschrieben:

PARAMETERS
The  following  parameters  are used by icmd.  Each is represented as a two-digit hex byte.  The parameters have no default values.

bus    This byte contains the bus number for this command, usually  00.

rsSa   This is the resource slave address, usually 0x20 for the BMC.

netFn/lun
       This  byte  combines  the net Function and Lun.  The 2 low-order
       bits are the Lun and the 6 high-order bits are the net Function.
       This representation is consistent with the DOS CMDTOOL/IPMITOOL.

cmd    This byte contains the IPMI command.

[data bytes]
       This is a sequence of zero to 16 bytes that represent data bytes
       specific to this command.

00 20 ist also schon mal klar. netFn/lun ist etwas tricky aber wer sich durch IPMI Spezifikation gewühlt hat wird fündig:

  • In Abschnitt 19.3. finden wir den Hinweis dass die mandatory commands mit LUN 0x00 abgesetzt werden müssen.
  • In Abschnitt 5.1. finden wir die Network Function Codes, 0x06 ist hier für „App“ definiert
  • Im Appendix G finden wir in der Tabelle unter „IPM Device Global Commands“ die Werte für Cold und Warm Reset (0x02 bzw. 0x03) – als NetFn steht dort „App“ (also 0x06 wie wir aus 5.1. wissen)

D.h. wir fummeln 0x00 (LUN) und 0x06 (um 2 Bit geshifted) zusammen, bekommen also binär 0001 1000 = hex 18 für netFn/lun raus.

Alles zusammen sieht das Kommando für einen remote Kaltstart also so aus:

ipmiutil cmd -N meinbmc -U meinuser -P meinpw -V 4 00 20 18 02

(-V 4 brauchen wir weil in der Tabelle in Appendix G ein Kreuzerl bei „A“ steht – und -V 4 heißt „Administrator Level aktivieren“)

Voll easy, ey 😀

Fujitsu iRMC Zertifikat

Wie wir in Supermicro IPMI Zertifikat gelernt haben wollen diverse Linux basierte Oberflächen Zertifikat und private Key im PEM Format:

openssl pkcs12 -in my.pfx -nokeys -out my_cert.pem
openssl pkcs12 -in my.pfx -nocerts -nodes -out my_key.pem

Fujitsu iRMC setzen da aber noch eins oben drauf, der private Key muss auch noch im RSA Format vorliegen, dies kann mit

openssl rsa -in my_key.pem -out my_rsa_key.pem

erledigt werden.

SSL/TLS Schwachstellen testen

Zusammenfassung von https://www.contextis.com//resources/blog/manually-testing-ssltls-weaknesses/

  • SSLv2:
    openssl s_client –ssl2 -connect example.com:443
  • SSLv3:
    openssl s_client –ssl3 -connect example.com:443
  • Cipher Suites:
    nmap --script ssl-enum-ciphers -p 443 example.com
  • Zertifikate:
    openssl s_client -connect example.com:443 | openssl x509 -noout -text
  • Heartbleed:
    nmap -p 443 --script ssl-heartbleed --script-args vulns.showall example.com
  • Change Cipher Spec:
    nmap -p 443 --script ssl-ccs-injection example.com