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)

Skype for Business 2016 kann Adressbuch nicht synchronisieren

Irgendwie scheint Skype for Business 2016 Probleme damit zu haben das Adressbuch vom Lync/SfB Server zu holen – wobei es wenn man den diversen Forenposts Glauben schenkt ziemlich egal ist was so am Server läuft (2013 oder 2015); im Client erscheint immer rechts unten das beliebte Rufezeichen mit der Meldung dass dass Adressbuch nicht synchronsiert werden kann.

Irgendein Post hat mich dann zu Schertz geführt, schnell die einzige Client Policy mit Get-CsClientPolicy|Set-CsClientPolicy -AddressBookAvailability WebSearchOnly von Download auf Onlinesuche umgestellt, SfB 2016 Client restarted (ggf. vorher alte GAL*.* Files unter %USERPROFILE%\AppData\Local\Microsoft\Office\[Version]\Lync\sip_[SIP-Name] vorher entsorgen) und schon pfeifts wieder mit der Kontaktsuche….

Visual Studio für Offline Installation saugen

Die Visual Studio 2015 Downloads (Community/Express zumindestens, die „richtigen“ Versionen bekommt man eh z.B. in MSDN Subscriber Downloads oder VLSC als ISO) sind ja nur ein kleines 2 oder 3 MB Installer EXE welches dann alles frisch saugt – das alles ist halt u.U. recht viel und wenn man grad nicht mit Bandbreite ohne Ende gesegnet ist, überhaupt kein Internet hat oder einfach nicht will kann man das gesamte Paket schon vorab holen und dann offline installieren: Einfach das Mini Installer EXE mit Parameter /layout starten und das große Saugen (ohne Installen) beginnt….

SCCM Client liefert SCEP Definitionsstatus nicht beim SCCM Server ab

SCEP Report „Gesamtstatus und Verlauf der Antischadsoftware“ liefert unter anderem den Definitionsstatus der Clients, also wie alt die Definitionen dort so sind:
SCEP

Die wo gar keine Definitionen gefunden werden entstehen unter Umständen durch einen WMI Defekt wie ich gestern mühsam feststellen musste: Die Klasse ROOT\Microsoft\SecurityClient\AntiMalwareHealthStatus sollte eigentlich vom SCEP Client befüllt, vom SCCM Client (Logfile: ExternalEventAgent.log, da sieht man auch recht gut die Daten, bzw. auch nicht 🙂 ) abgeholt und via „normalem“ State Messaging an den SCCM Server geschickt werden. Im gegenständlichen Fall war aber bis auf die Version in der Klasse nix befüllt (von Defaultwerten mal abgesehen) – SCEP neu installieren hat auch nix geholfen. Erst die Neuregistrierung der Klasse (und damit des Providers) mit MOFCOMP "C:\Program Files\Microsoft Security Client\AmStatusInstall.mof" hat das Problem gelöst (SCCM typisch natürlich nicht sofort aber SCCM untypisch schneller als ein Tag – alle 5 Minuten werden die Daten aktualisiert).

Apple Magic

Wir haben es alle immer vermutet, befürchtet oder gehofft – hier stehts schwarz auf weiß (aus dem Service Log des Apple MDM aka Profile Manager):

AppleMagic