SSL 3.0, RC4 und Diffie-Hellman disablen

Weil diverse Sicherheitstests (nmap --script ssl-enum-ciphers -p 443 <rechnername>, https://www.ssllabs.com/ssltest/) die Standardsettings bei Windows bemeckern hier ein REG-File mit dem man die Dinger mundtot macht:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0]

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Client]
"DisabledByDefault"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Server]
"Enabled"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC4 128/128]
 "Enabled"=dword:00000000 

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC4 40/128]
 "Enabled"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\RC4 56/128]
 "Enabled"=dword:00000000 

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\KeyExchangeAlgorithms\Diffie-Hellman]
 "Enabled"=dword:00000000

Reboot nach dem Import und gut ists 🙂

Wenn Nutanix zuschlägt….

….bleibt kein Problem ungelöst 😀   Nachdem mein 1 Jahr Nicht-Betrieb Eintrag (völlig unbeabsichtigt) ziemlich eingeschlagen hat ist etwas passiert was mir in mehr als 25 Jahren professioneller IT noch nicht passiert ist: Die Herstellerfirma hat alles aber wirklich auch ALLES daran gesetzt alle Probleme zu lösen. Nochmal zum Mitschreiben: Eine Firma mit doch mittlerweile doch schon anständiger Größe setzt wirklich den gesamten Supportapparat (und noch viel mehr) in Bewegung um unserer Popelinstallation auf die Beine und zum Erfolg zu verhelfen. Was da abging will ich im Detail gar nicht schildern aber mir wurde noch nie so viel Aufmerksamkeit zuteil, hier die wichtigsten Punkte

  • Die Leute vor Ort (ja es gibt auch in Ö schon welche) haben sich beinahe instant um den Tausch der SATADOMs gekümmert und auch höchst persönlich erfolgreich durchgeführt – Problem auf absehbare Zeit gelöst.

  • Die Leute vom CAP (Critical Accounts Program, ja auch da waren wir :-D)  haben sich intensivstest (ja das Wort gibt’s nicht aber anders lässt es sich nicht beschreiben) und auch extrem zeitnah um diese Punkte gekümmert:
    • LiveMigration/VMQ – war größtenteils mein Fehler bzw. hat sich Release des KB Artikels bzw. des neuen Intel Treibers seit Setup überschnitten – Problem gelöst
    • Library – war auch größtenteils mein Fehler, ich bin zwar mit dem IP-Adressbasierten Whitelisting nicht sehr glücklich aber es tut jetzt – Problem gelöst
  • Nutanix hat neue Releases von NCC und AOS released welche u.a. das Monitoringproblem behandelt haben – Problem gelöst

  • Die Leute der Schulungsabteilung (man möge mir verzeihen der Name ist sicher nicht richtig) haben mir Resourcen zur Verfügung gestellt mit denen ich mein Wissen erweitern/vertiefen kann.

Nachdem jetzt alle technischen Probleme gelöst sind wandern nach und nach VMs auf die Cluster, über die Erfahrungen werde ich versuchen zu berichten.

P.S.: Nein ich wurde nicht “ermuntert” diesen Eintrag zu schreiben, es war mir genauso ein Bedürfnis wie damals den Rant loszuwerden – für mich ist das eine psychohygienische Maßnahme.

The Nutanix way of monitoring

Also schaut man in Nutanix’ Prism nach wie es dem Cluster geht:

Prism2

Also superfein, alles “Good”. Moment. 3 Hosts aber nur 2 VMs (Controller VMs in dem Fall weil keine User-VMs auf dem Cluster sind)?

Die Details offenbaren dass irgendwo 3 VMs sind aber nur 2 grün, die dritte wird einfach totgeschwiegen:

Prism

 

Nutanix: 1 Jahr Nicht-Betrieb

Vor etwas mehr als einem Jahr haben wir unsere 2 Nutanix Cluster (NX1350, die kleinsten Teile im Angebot) in Betrieb genommen (zumindestens behaupten die Systemdisken dass sie jetzt 373 bzw. 377 Tage laufen), Zeit für eine kleine Zusammenfassung der gemachten Erfahrungen (wir fahren mit Hyper-V was von mehr Bedeutung ist als ich ahnen konnte):

Das Positive zuerst: Der Support ist wirklich erstklassig; ich kenne keine andere Firma die dermaßen schnell reagiert und gleichzeitig dermaßen kompetentes Supportpersonal hat. Und ich muss es wissen – ich hatte bisher 23 Calls (also rund 2 pro Monat) und verbrachte locker 50 Stunden in Webexen.

Damit sind wir aber auch schon fertig, jetzt beginnt die Raunzerei:

  • Lizenzierung – zum Zeitpunkt der Beschaffung hat Nutanix die notwendigen Lizenzen extreme gut versteckt, sodaß wir nur eine Starter-Lizenz hatten und so Kleinigkeiten wie REST-API (furs Monitoring) oder Replikation über Standorte hinweg nicht produktiv betreiben dürfen (aber könnten weil es nicht hart abgefragt wird).
  • Geschäfte – bis vor kurzem war es extreme schwierig Geschäfte mit Nutanix in Europa zu Machen weil offenbar alles über die Schweiz gegangen ist, beim aktuellen Wechselkurs EUR/CHF ein kostspieliges Unterfangen.
  • Setup – früher stand auf der Nutanixseite dass man einen Cluster in wenigen Stunden live bringt und Erweiterungen in 30 Minuten erledigt sind. Eine glatte Lüge. Initialsetup ist über mehrere Tage gelaufen (inkl. Abholung aller Geräte um ganz von Vorne zu beginnen), Resetup eines Hosts letzten Freitag über Webex (weil selber darf man ja nix machen….) hat 7 (in Worten: sieben) Stunden bedurft.
  • Replikation – wurde verschwiegen dass das für Hyper-V gar ned geht bzw. ging, siehe auch Lizenzierung.
  • Hardware – in einem Jahr sind 2 (SATA) Disken verstorben und wie wir heute festgestellt haben sind alle 6 Systemdisken der Hosts (laufen auf SATADOMs) weared out und stehen kurz vorm Exitus. Die verbauten 10G-Karten (Intel) unterstützen nach wie vor kein VMQ bzw. sollte man dann keine LiveMigration machen (außer man steht auf blaue Bildschirme).
  • Softwareupdates – ich habe in dem Jahr 4 oder 5 mal ein NOS (Nutanix OS, jetzt heißts Acropolis) Update durchgeführt weil Support (teilweise zurecht) gehofft hat dass offene Probleme damit behoben werden – für mich entschieden zu oft, vor allem weil das ja eine Puls-200-Aktion ist wenn da so richtig viele VMs daneben produktiv laufen (obwohl nur einmal ein Host schief gegangen ist, sonst liefs wirklich superglatt).
  • PRISM/REST/NCC/NOS – selten ein dermaßen cooles HTML5 Interface gesehen welches auch wirklich browserübergreifend funktioniert aber die Technik dahinter ist dafür umso grauslicher, da wird beispielsweise um IPMI-Daten auszulesen mit Python (zwar über einen internen Adapter) völlig unsicher eine PowerShell Remoting Session am Host erzeugt, ein Sourceforge Commandline Tool aufgerufen (ipmitool.exe), dessen Ausgabe auf stdout geparsed, in ein JSON Object umgewandelt in die CVM ins Python zurück geschickt, dort dann wieder in ein Python Object geparsed und dann weiter verarbeitet. Ist auch nur ein Zeichen am falschen Platz oder wirft das Commandlinedingens einen unerwarteten Fehler leuchtet Prism wie ein Christbaum (und keiner weiß warum aber Vorteil am Linux is halt dass man alles reverse engineeren kann (wenn man die Zeit hat)…). Auch sonst ist die Anzahl an falschen, halbfalschen und nicht gemeldeten Problemen mannigfaltig – zuletzt war z.B. ein ganzer Host weg (offline), das hat PRISM aber nicht großartig für erwähnenswert gehalten 🙂
  • Das Linux Problem – Nicht nur dass die Controller VMs jede Menge Resourcen verbraten (ca. 20%, und das ohne was zu tun – sprich ohne VMs zu servicieren), sie laufen unter Linux – was per se ja nicht schlecht ist aber wenn Linux beginnt Microsoft-native Protokolle nachzubilden (Powershell, SMB) kommt normalerweise nix Gutes dabei raus – so auch leider in diesem Fall: LiveMigration aus dem Cluster raus oder rein hab ich bis heute nicht hinbekommen, die Security ist auf NFS-Niveau (IP-Adressen, keine User, und nicht mal das funktioniert richtig) und der SMB-Dialekt noch nicht über 3.02 hinaus gekommen. Die ganzen anderen Cross-Platform-Probleme lass ich mal weg – auch wenn sie schon arg tragend werden weil man halt wirklich viel Zeit troubleshootend auf der Commandline in der CVM verbringt und ohne teilweise tiefe Linuxkenntnisse im Allgemeinen bzw. Wissen über die brutal mächtigen Nutanix-Tools im Speziellen verloren ist.
  • Performance – ja wir haben die kleinsten Gurken, ja ich hab mir nicht viel erwartet – aber insgesamt schlägt sich das Teil trotzdem nicht schlecht wenn man bedenkt mit welchen Genen es ausgestattet wurde: riesige SATA Disken, 10G Adapter die nicht VMQ können und I/Os die mehrfach durch mehrere Kernel gehen müssen….für nicht kritische VMs reichts auf alle Fälle, solange nicht zu viele aufeinander treffen 😮
  • DPM Backup – Nein. Zumindestens nicht Hypervisor-based. Weil dafür müsste der Agent im Linux laufen, was natürlich nicht geht.
  • VMM Integration – Grundsätzlich ja, aber eine funktionierende Library hab ich nie hinbekommen beispielsweise – auch die Geschichte mit der LiveMigration mit Storagewechsel hat nie geklappt, d.h. Evakuierung wenn mal wieder was zu spinnen begonnen hat war immer eine Shutdown-Wegkopier-Sache.

In dem Jahr hatte ich auf den 2 Cluster bisher ganze 3 VMs produktiv. Für wenige Tage bis Wochen. Bis wieder irgendwas explodiert ist. Ich denke der Titel hat schon alles verraten 😀

Aktuell warten wir übrigens bis ein neues Modell der SATADOMs zertifiziert wird um alle (in Worten: ALLE) Hosts neu zu installieren. Wenn wir für jeden Host dermaßen viel Zeit investieren müssten und so wenig hinten raus käme….Halleluja.

 

AzureAD Connect: Lessons learned

Im folgenden ein paar Lektionen die ich bei meiner Reise zu einer funktionierenden Azure AD Connect Umgebung samt ADFS schmerzhaft gelernt habe:

  • Multi-Tree Forest: Bad idea. Das was MS mit Windows 2000 groß propagiert hat (eine Forest Root Domäne die quasi nix macht und daneben/darunter die “echten” Domänen) ist mittlerweile nicht nur keine gute Idee mehr sondern selbst MS Tools können jetzt nicht mehr damit umgehen. Wer eine filtered Sync mit AADC haben will muss die Gruppe bzw. den Sync User in der Forest Root Domäne anlagen (auch wenn er die gar ned syncen will) und der Azure AD Connect Wizard kann das ADFS Environment (Proxy+ADFS) NICHT automatisch/remote installieren – muss man manuell machen und dann im Wizard “Use existing AD FS farm” angeben; der Sync Account muss während des Wizard-Durchlaufs Admin auf dem AD FS Server sein.
  • Wenn man im Wizard bei den Azure AD apps nur O365 wählt warden per Default Vor- und Nachname nicht gesynced – was dazu führt dass man einen gesyncten Account nicht zum Global Admin machen kann weil da Vor/Nachname Pflicht sind. Also entweder im Wizard gleich mit angeben oder anschließend manuell (und brutal schmerzhaft) über die diversen Synckonsolen manuell einfügen:
    • Synchronization Service Manager: Connectors / xxx.onmicrosoft.com – AAD / Properties: Select Attributes / givenName + surname aktivieren
    • Synchronization Rules Editor: Outbound / Out to AAD – User Office ProPlus disablen + clonen (ID+1): je eine Transformation hinzufügen: Direct/surname od. givenName/sn od. givenName/Update
  • KMSI (Keep me signed in) enablen: Set-AdfsProperties -EnableKmsi:$true
  • AD FS / Authentication Policies / Edit Global Primary Authentication Policy / Bei Intranet “Forms Authentication” enablen – sonst funktionieren WIndows 10 Device Registration und Store Account nicht.
  • Non Microsoft Reverse Proxy (F5, nginx, etc.) nur dann verwenden wenn man auf extreme und andauernde Schmerzen steht. Echt jetzt. Kein Scherz.
  • Am Web Application Proxy KB3042121 installieren und Config anpassen (Set-WebApplicationProxyConfiguration -ADFSTokenAcceptanceDurationSec:60)
  • AD FS kann noch immer nicht per Default IE11/Edge/Firefox/Chrome WIA (windows integrated authentication) machen lassen (Set-AdfsProperties -WIASupportedUserAgents @("MSIE 6.0", "MSIE 7.0", "MSIE 8.0", "MSIE 9.0", "MSIE 10.0", "Trident/7.0", "MSIPC", "Windows Rights Management Client", "Mozilla/5.0"))
  • Und weils so schön ist brauchts für Chrome noch eine Extrabehandlung:
    Set-ADFSProperties -ExtendedProtectionTokenCheck None
 Ach ja: Wenn man User in Azure AD löscht landen die “nur” im Papierkorb, bei Änderung der zu synchronisierenden Properties holt Azure AD das Teil aus dem Papierkorb und ALLE alten Properties sind wieder da….daher: Get-MsolUser -ReturnDeletedUsers|Remove-MsolUser -RemoveFromRecycleBin -force (Holzhammer, in Echt vielleicht dann nicht alle auf einmal 😀 ).

 

 

Cryptolocker/Ransomware mit FSRM erkennen/behindern/stoppen

Basierend auf diesem ausgezeichneten Artikel kann man sich mit dem FSRM (File Server Resource Manager) über Cryptolocker/Ransomware-Aktivitäten recht gut informieren lassen und ggf. auch direkt reagieren (lassen); wenn man das aber manuell auf vielen Servern (z.b. Terminalserverfarm) einrichten muss ist das eher anstrengend, daher habe ich folgendes Scriptl zusammen geschrieben welches auf 2008R2 und 2012(R2) funktioniert – ja ab 2012 gibts Kraftmuschel Cmdlets dafür aber solange das FILESCRN Dingens noch geht ist es so einfacher weil OS übergreifend:

Add-WindowsFeature fs-resource-manager

filescrn admin options /AdminEmails:"myadminmailbox@mydomain.com" 
filescrn admin options /RunLimitInterval:"M,0"
filescrn admin options /RunLimitInterval:"E,0"
filescrn admin options /RunLimitInterval:"C,0"
filescrn admin options /RunLimitInterval:"R,0"
filescrn admin options /SMTP:"mysmtp.mydomain.com"
filescrn admin options /From:"fsrm@mydomain.com"

filescrn filegroup add /filegroup:"Ransomware" /members:"*.k|*.encoderpass|*.locky|*.key|*.ecc|*.ezz|*.exx|*.zzz|*.xyz|*.aaa|*.abc|*.ccc|*.vvv|*.xxx|*.ttt|*.micro|*.encrypted|*.locked|*.crypto|_crypt|*.crinf|*.r5a|*.xrtn|*.XTBL|*.crypt|*.R16M01D05|*.pzdc|*.good|*.LOL!|*.OMG!|*.RDM|*.RRK|*.encryptedRSA|*.crjoker|*.EnCiPhErEd|*.LeChiffre|*.keybtc@inbox_com|*.0x0|*.bleep|*.1999|*.vault|*.HA3|*.toxcrypt|*.magic|*.SUPERCRYPT|*.CTBL|*.CTB2|*.locky|HELPDECRYPT.TXT|HELP_YOUR_FILES.TXT|HELP_TO_DECRYPT_YOUR_FILES.txt|RECOVERY_KEY.txt|HELP_RESTORE_FILES.txt|HELP_RECOVER_FILES.txt|HELP_TO_SAVE_FILES.txt|DecryptAllFiles.txt|DECRYPT_INSTRUCTIONS.TXT|INSTRUCCIONES_DESCIFRADO.TXT|How_To_Recover_Files.txt|YOUR_FILES.HTML|YOUR_FILES.url|encryptor_raas_readme_liesmich.txt|Help_Decrypt.txt|DECRYPT_INSTRUCTION.TXT|HOW_TO_DECRYPT_FILES.TXT|ReadDecryptFilesHere.txt|Coin.Locker.txt|_secret_code.txt|About_Files.txt|DECRYPT_ReadMe.TXT|DecryptAllFiles.txt|FILESAREGONE.TXT|IAMREADYTOPAY.TXT|HELLOTHERE.TXT|READTHISNOW!!!.TXT|SECRETIDHERE.KEY|IHAVEYOURSECRET.KEY|SECRET.KEY|HELPDECYPRT_YOUR_FILES.HTML|help_decrypt_your_files.html|HELP_TO_SAVE_FILES.txt|RECOVERY_FILES.txt|RECOVERY_FILE.TXT|RECOVERY_FILE*.txt|HowtoRESTORE_FILES.txt|HowtoRestore_FILES.txt|howto_recover_file.txt|restorefiles.txt|howrecover+*.txt|_how_recover.txt|recoveryfile*.txt|recoverfile*.txt|recoveryfile*.txt|Howto_Restore_FILES.TXT|help_recover_instructions+*.txt|_Locky_recover_instructions.txt|_H_e_l_p_RECOVER_INSTRUCTIONS+dcd.png|_H_e_l_p_RECOVER_INSTRUCTIONS+dcd.txt|_H_e_l_p_RECOVER_INSTRUCTIONS+dcd.html"

set-content -Value "Notification=M" -Path C:\TEMP\FSRM-Mail.config
add-content -Value "To=myrecipient1@mydomain.com;myrecipient2@mydomain.com" -Path C:\TEMP\FSRM-Mail.config
add-content -Value "From=fsrm@mydomain.com" -Path C:\TEMP\FSRM-Mail.config
add-content -Value "ReplyTo=fsrm@mydomain.com" -Path C:\TEMP\FSRM-Mail.config
add-content -Value "Subject=Unauthorized file from the [Violated File Group] file group detected" -Path C:\TEMP\FSRM-Mail.config
add-content -Value "Message=User [Source Io Owner] attempted to save [Source File Path] to [File Screen Path] on the [Server] server. This file is in the [Violated File Group] file group, which is not permitted on the server." -Path C:\TEMP\FSRM-Mail.config

set-content -Value "Notification=E" -Path C:\TEMP\FSRM-Event.config
add-content -Value "EventType=Warning" -Path C:\TEMP\FSRM-Event.config
add-content -Value "Message=User [Source Io Owner] attempted to save [Source File Path] to [File Screen Path] on the [Server] server. This file is in the [Violated File Group] file group, which is not permitted on the server." -Path C:\TEMP\FSRM-Event.config

filescrn template add /Template:"Block Ransomware" /Type:Active /Add-Filegroup:Ransomware /Add-Notification:"M,C:\Temp\FSRM-Mail.config" /Add-Notification:"E,C:\Temp\FSRM-Event.config"

filescrn screen add /Path:C:\Users /SourceTemplate:"Block Ransomware" /Type:Active /Overwrite
filescrn screen add /Path:C:\ProgramData /SourceTemplate:"Block Ransomware" /Type:Active /Overwrite

Hinweise:
1) Bei 2012(R2) muss man -IncludeManagementTools beim Add-WindowsFeature angeben falls man die Konsole überall haben will.
2) Ich erzeuge die Config-Files inline weil ich das ganze via Invoke-Command aufrufen will und nicht in irgendwelche Kerberos-Delegation/CredSSP Kackehaufen springen wollte wenn die Config-Files irgendwo auf einem Share liegen.
3) Das ist nur Eventlog/Mailing-Config – wir machen nichts automatisch um irgendwelchen lustigen Leuten die dann aus Spaß entsprechende Files anlegen nicht die Gelegenheit zu geben gröber was anzurichten.
4) Auf die benutzte Mailbox (fsrm@mydomain.com) muss das Rechnerkonto mit “Send-As” berechtigt warden (direkt oder über Gruppe): Add-ADPermission -Identity 'Besitzer der Mailbox' -User 'Rechnerkonto oder Gruppe des FSRM Servers' -ExtendedRights 'Send-As'
5) Natürlich alles ohne Schusswaffe 🙂

Mobile Broadband/Cellular Status auslesen

Weil Windows 10 in der TH1 Variante (10.0.10240) im Network Connectivity Assistant (das Teil unten im Systray) und im “immversive Control Panel” den Status der WWAN Verbindung nicht angezeigt hat (TH2/10.0.10586 machts jetzt eh) wollte ich wissen wie man das programmatisch ausliest weil auf der Loginmaske konnte auch TH1 sehr wohl die Info anzeigen – das Ganze geht über Mobile Broadband API, da die COM basiert ist (C:\Windows\System32\wwanapi.dll als Referenz hinzufügen) kann man das auch recht fein von managed Code machen:

using System;
using MbnApi;

namespace CellularStatus
{
   class Program
   {
      static void Main(string[] args)
      {
         MbnConnectionManager oConnMgr = new MbnConnectionManager();
         MbnInterfaceManager oIntMgr = new MbnInterfaceManager();
         MBN_ACTIVATION_STATE oState;
         string sProfile;

         try
         {
            foreach (IMbnConnection oConn in ((IMbnConnectionManager)oConnMgr).GetConnections())
            {
               oConn.GetConnectionState(out oState, out sProfile);

               Console.WriteLine("State      : " + oState);
               Console.WriteLine("Profile    : " + sProfile);
            }
         }
         catch (Exception oExc)
         {
            Console.WriteLine("Exception getting connection(s): " + oExc.Message);
         }


         try
         {
            foreach (IMbnInterface oInt in ((IMbnInterfaceManager)oIntMgr).GetInterfaces())
            {
               Console.WriteLine("Data Class : " + (MBN_DATA_CLASS)((IMbnRegistration)oInt).GetCurrentDataClass());
            }
         }
         catch (Exception oExc)
         {
            Console.WriteLine("Exception getting interface(s): " + oExc.Message);
         }

      }
   }
}

VMId in VMM und DPM ändern

Wenn es sich mal ereignen sollte dass sich die ID einer VM ändert (warum überlasse ich hier mal der Fantasie) und sowohl Virtual Machine Manager (VMM) als auch Data Protection Manager (DPM) verrückt spielen (der eine meint die VM ist stopped und verreckt beim starten oder kann sonst eigentlich nix mit der VM machen und der andere scheitert mit irgendwelchen VSS Fehlern weil er noch die alte VMId in der Config hat) kann man die ID direkt in der VMM bzw. DPM DB anpassen (ist natürlich turboböse, in keinster Weise supported und vermutlich führt dieser Weg direkt in die Hölle – aber hey verzweifelte Zeiten erfordern verzweifelte Maßnahmen):

VMM-DB: Tabelle tbl_WLC_VMInstance, Felder VMId und VmcLocation (letzteres ist der Pfad mit der VMId als XML Name (normalerweise)).

DPM-DB: Tabelle tbl_IM_ProtectedObject, Felder ComponentName und PhysicalPath (letzteres ist ein XML für VSS wo die VMId 3x zu ersetzen ist)