Schlagwort-Archive: Windows

Deinstallation von Kaspersky Endpoint / Total / Select Security

Wenn es eine Software gibt, welche potentiell mehr Schaden anrichten kann und schwerer zu entfernen ist als ein Virus, dann handelt es sich um ein Produkt aus der Schlangenölbranche. Ein besonderes Schätzchen ist hier Kaspersky, deren Firmenchef sich gerne als Gehilfe diverser Dienste positioniert und aktuell unter Beschuss steht. Aber genug Themenausflug – mein Wunsch ist schnell definiert: Deinstallieren. Vorzugsweise automatisch. Nicht wegen den aktuellen Problemen, sondern eher da die Systeme sauber sein sollen.

Kaspersky besteht dabei in der Business-Variante aus drei Teilen:

Das Kaspersky Security Center (KSC, ehemals Kaspersky Administration Kit oder auch KAK), welches zentral installiert ist und für Management und Deployment zuständig ist

Der Kaspersky Administration Agent, einem kleinen Tool, welches auf allen Rechnern installiert ist und primär die Verbindung zwischen dem Security Center und den Schutzprogrammen des Rechners herstellt. Weiterhin kann es zur Installation von beliebigen Programmen und Patches genutzt werden.

Zuletzt das eigentliche Schutzprogramm, auf Nutzerseite meist Kaspersky Endpoint Security, welches Dienste wie Signaturscan, Software-Firewall und Gerätekontrolle bereitstellt.

Leider ist das Management an vielen Stellen trotz der langen Reife noch ausbaufähig. Verschiedene Sprachversionen oder gar Rechner mit unterschiedlichen Service-Packs der Software lassen sich nur schwer gemeinsam verwalten oder gegeneinander austauschen, die Managementverbindung geht gerne mal verloren und für die Rechnergeschwindigkeit ist eine solche Software ebenfalls nur wenig zuträglich.

Zur Deinstallation hatte ich hierzu üblicherweise eine “Geheimwaffe”: Den KAVRemover. Dieses Tool des Herstellers ist in der Lage viele Installationen auf dem verwendeten Rechner mit einem Schlag zu entfernen. Aus Sicherheitsgründen hat sich der Hersteller jedoch dazu entschieden die Deinstallation mit einem CAPTCHA abzusichern. Da ich nun eine größere Charge Rechner vor mir hatte tut diese Unmöglichkeit der Automation natürlich weh. Also ran an die offiziellen Deinstallationsroutinen.

Erstes Problem: Passwörter. Insgesamt gibt es 2-3 Passwortebenen, mit denen eine lokale Installation im genannten Konstrukt geschützt ist:

Endpoint Security nutzt, wenn in der entsprechenden Policy angegeben, einen Passwortzugang zu allen administrativen Funktionen. Dieses wird auch zur Deinstallation benötigt. Bei neueren Versionen (ab 10.2ish) wird zusätzlich ein Benutzername verlangt, welcher jedoch augenscheinlich auf “KLAdmin” hardcoded ist.

kavmenuIst dieses Passwort nicht bekannt, jedoch Zugang und Verbindung zum Security Center noch vorhanden, kann man den Passwortschutz per Policy einfach ausschalten und so die Deinstallation etwas vereinfachen. Hierzu öffnet man die zum Produkt gehörende Policy und entfernt unter “Advanced Settings” -> “Interface” die Checkbox “Enable password protection”. Dies muss selbstverständlich für jede Sprache und Service-Pack-Version wiederholt werden.

Der Administration Agent nutzt eine separate Policy und hat ein dediziertes Passwort für die Deinstallation gesetzt. Ob sich dies ebenfalls irgendwo abschalten lässt habe ich nicht geprüft.

Das Passwort lässt sich glücklicherweise bei der Deinstallation als Parameter – natürlich je nach Version mit anderem Namen – angeben. Um die Funktion nutzen zu können muss man das Passwort jedoch vorher umrechnen: Es muss als ASCII-String einer HEX-Repräsentation des Passworts als 16Bit-ASCIIish (sieht aus wie ein Byte-Invertiertes UTF16) eingetragen werden. Besser keine Fragen stellen.

Also rechnen wir mal: Wäre unser Passwort “Geheim” müssen wir dies erst mal in Hex konvertieren. Hierzu kann man – bei einfachen Zeichen – die gute, alte ASCII-Tabelle bemühen. G ist in HEX 0x47, e 0x65 – und so weiter. Am Ende erhalten wir “47 65 68 65 69 6D”. Da wir jedoch noch die 00en für 16 Bit brauchen wird daraus ein “470065006800650069006D00”. Mit diesem String können wir dann weiter an’s Werk. Zu beachten ist, dass einige Versionen der 10er-Serie (10.0.3361) zwischendrin plötzlich mal nur 8 Bit brauchten um beim nächsten Update wieder auf 16 zu springen. Kurzfassung: Wenns nicht geht einfach anders nochmal versuchen.

Für die Deinstallationen benötigt man weiterhin die MSI-IDs der Produkte. Einige seien hier mal gelistet, wer weitere hat: Die Kommentare stehen offen. Wer sich nicht sicher ist sollte in der Registry unter HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall und HKLM\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall nach Kaspersky-Einträgen suchen.

Danke an dawinci für das Listen der auswärtigen Agent-IDs

  • Kaspersky Endpoint Security 8.x Deutsch
    • {D72DD679-A3EC-4FCF-AFAF-12E2552450B6}
  • Kaspersky Endpoint Security 10.x (Deutsch, 64Bit)
    • {04CF7FBD-E56C-446D-8FC9-DD444BDBEE8E}
  • Kaspersky Endpoint Security 10.x (English, 32Bit)
    • {7A4192A1-84C4-4E90-A31B-B4847CA8E23A}
  • Kaspersky Admin Agent 9.x/10.x (Deutsch)
    • {2F383CB3-6D7C-449D-9874-164E49E1E0F5}
  • Kaspersky Admin Agent 9.x/10.x (English)
    • {BCF4CF24-88AB-45E1-A6E6-40C8278A70C5}
  • Kaspersky Admin Agent 9.x/10.x (Arabisch)
    • {FA7BF140-F356-404A-BDA3-3EF0878D7C63}
  • Kaspersky Admin Agent 9.x/10.x (Bulgarisch)
    • {4DBF6741-FA51-4C14-AFD2-B7D9246995F6}
  • Kaspersky Admin Agent 9.x/10.x (Tschechisch)
    • {478A6A0B-D177-4402-B703-808C05C56B13}
  • Kaspersky Admin Agent 9.x/10.x (Französisch)
    • {2924BEDA-E0D7-4DAF-A224-50D2E0B12F5B}
  • Kaspersky Admin Agent 9.x/10.x (Ungarisch)
    • {8899A4D4-D678-49F8-AD96-0B784F58D355}
  • Kaspersky Admin Agent 9.x/10.x (Italiänisch)
    • {DC3A3164-36B3-4FB4-B7BF-16A41C35A728}
  • Kaspersky Admin Agent 9.x/10.x (Japanisch)
    • {790C176F-7780-4C84-8B9C-455F5C0E61C5}
  • Kaspersky Admin Agent 9.x/10.x (Koreanisch)
    • {70812A40-973B-4DA1-96B9-C2011280CD99}
  • Kaspersky Admin Agent 9.x/10.x (Polnisch)
    • {1A7B331A-ABBE-4230-995E-BCD99C5A18CF}
  • Kaspersky Admin Agent 9.x/10.x (Portugiesisch / Brasilien)
    • {0F05E4E5-5A89-482C-9A62-47CC58643788}
  • Kaspersky Admin Agent 9.x/10.x (Rumänisch)
    • {FF802D76-E241-41D3-AAB4-DC7FBD659446}
  • Kaspersky Admin Agent 9.x/10.x (Russisch)
    • {ED1C2D7E-5C7A-48D8-A697-57D1C080ABA7}
  • Kaspersky Admin Agent 9.x/10.x (Chinesisch, vereinfacht)
    • {FBD7C01E-49CB-4182-8714-9DB1EAE255CB}
  • Kaspersky Admin Agent 9.x/10.x (Chinesisch, Traditionell)
    • {F6AD731A-36B4-4739-B1D4-70D6EDA35147}
  • Kaspersky Admin Agent 9.x/10.x (Spanisch / Mexiko)
    • {29748B5F-D88A-4933-B614-1CCCD6EFB0B7}
  • Kaspersky Admin Agent 9.x/10.x (Türkisch)
    • {2475A66D-698B-4050-93FF-9B48EE82E2BA}

Die Deinstallationsbefehle für die Endpoint Security lauten:

  • Kein Passwort
    • MsiExec.exe /x {MSI-ID} /qb- REBOOT=ReallySuppress
  • Nur Passwort
    • MsiExec.exe /x {MSI-ID} /qb- REBOOT=ReallySuppress KLPASSWDHEX=470065006800650069006D00
    • bzw. MsiExec.exe /x {MSI-ID} /qb- REBOOT=ReallySuppress KLPASSWDHEX=47656865696D
    • Alternativ kann man bei KES statt KLPASSWDHEX die Variable KLPASSWD verwenden und das Kennwort in Klartext angeben
  • Nutzername + Passwort
    • MsiExec.exe /x {MSI-ID} /qb- REBOOT=ReallySuppress KLLOGIN=KLAdmin KLPASSWDHEX=470065006800650069006D00

Für den Kaspersky Administration Agent lauten die Befehle:

  • Ohne Passwort
    • MsiExec.exe /x {MSI-ID} /qb- REBOOT=ReallySuppress
  • Mit Passwort
    • MsiExec.exe /x {MSI-ID} /qb- REBOOT=ReallySuppress KLUNINSTPASSWD=470065006800650069006D00

Beim Admin-Agent schlägt die Installation teilweise trotz richtigem Passwort mit dem Exit-Code 1603 fehl. In dem Fall kann es helfen einfach mal bis 10 zu zählen und die Deinstallation nochmal zu starten.

Bei /qb- wird ein Fortschrittsbalken angezeigt, welcher leider auch “abbrechen” ermöglicht. Alternative /qn komplett im Hintergrund.

In meinem Fall habe ich eine Loop, welche für jede bekannte MSI-ID alle Deinstallationsbefehle mehrmals durchprobiert. Bei ca. 90% der Rechner funktioniert holzhammer(); – immerhin etwas weniger Arbeit.

Windows: Wo ist Java?

Ich bin von Linux ja irgendwie verwöhnt: Alle Binärdateien sind üblicherweise unter /usr/bin und lassen sich direkt über den Namen des Programms aufrufen. Unter Windows gibt es mit $PATH zwar eine ähnliche Funktion, jedoch ist dort meist nur der Systempfad eingetragen. Da es für fast jedes Programm ein eigenes Verzeichnis gibt hat man so keine direkte Möglichkeit ein Programm zu starten ohne an den Systemvariabeln herumzueditieren.

In vielen Fällen nicht wirklich ein Problem – einmal gefunden kann man den Pfad in seinen Scripten hinterlegen und so die Software ansprechen. Leider ist das bei Programmen wie Java nicht so einfach: Diese legen ein Verzeichnis mit der Versionsnummer an, z.B. C:\Program Files\Java\jre_8.0.121\bin\java.exe. Ergebnis: Nach jedem Update versteckt sich die gesuchte EXE an einer anderen Stelle.

Hier ein Quick&Dirty CMD, welches die Java-Binary aufspüren sollte. Nicht Ideal, da z.B. nur das Systemlaufwerk unterstützt wird und diverses Errorhandling fehlt, aber immerhin zuverlässiger als hardcoded…

 

YubiKey: GPG-Kartenfehler / Sharing Violation unter Windows

Ugh – Windows und Sicherheitsfunktionen passt irgendwie immer noch nicht zusammen. Schon länger nutze ich einen YubiKey als GPG-Smartcard um E-Mails zu signieren und entschlüsseln. Das funktionierte mit GPG4Win und Thunderbird bisher auch recht brauchbar – also bis auf den Windows-GPG-Agent-Bug.

Wie gesagt: Bisher. Heute dann ein etwas seltsamer Bug:

Wat. Schnell nochmal den Daemon durchstarten: Nix. Im Log findet man folgende Info:

Wait. Sharing violation? Greift sonst noch wer zu? Jepp, natürlich tut das Jemand. Ich hatte zwischenzeitlich auf dem YubiKey für ein anderes System X.509-Zertifikate (aka PIV) eingerichtet. Diese kommen z.B. zur Authentifizierung zum Einsatz und können unter Windows auch z.B. für Remote-Logins und das entschlüsseln von Bitlocker-Festplatten verwendet werden. Entsprechend hat nun also auch Windows die PIV-Smartcard gefunden und belagert das Device dauerhaft – somit ist der Zugriff für gpg nicht mehr möglich. Abhilfe schafft hier den Dienst “CertPropSvc” (aka “Zertifikatverteilung”) zu beenden bzw. neuzustarten. In letzterem Fall bleibt das Gerät frei bis man die nächste Software mit PIV-Zugriff (z.B. Remotedesktop) startet.

Also als weiterer Punkt auf dem nicht enden wollenden Wunschzettel für einen würdigen Nachfolger für die leider sicherheitstechnisch bedenklich gewordenen YubiKeys: Parallelität der SC-Reader…

Windows/GPG/Smartcard – GPG mit Powershell bei SC-Verbindung neu starten

Beim Thema E-Mail-Verschlüsselung ist GPG weit verbreitet. Die Gundfunktionen sind z.B. mit Thunderbird und Enigmail oder gar eine Appliance auch für Einsteiger nutzbar und durch das WoT erstpart man sich die Abhängigkeit von – teils Zweifelhaften – zentralen Zertifizierungsstellen. Ich selbst nutze seit einiger Zeit keinen Softwareschlüssel sondern ein dediziertes HSM (Hardware Security Module) in Form eines YubiKey. Hiermit befindet sich der Key nicht mehr auf dem PC und auch die Verschlüsselung/Signierung läuft in Teilen auf dem Prozessor des YubiKey. Was unter Linux ohne große Änderungen funktioniert macht bei Windows eher wenig Spaß. Zwar ist auch GPG4Win in der Lage mit CryptoCards & Co umzugehen, häufiges Ein- und Ausstecken führt jedoch schnell zu einem hängenden GPG-Agent oder Absturzen der scdaemon.exe (GPG SmartCard Daemon). Einzige Abhilfe: Alle GPG-Prozesse beenden und neu starten. Da Verschlüsselung und Windows ohnehin eher selten zu finden ist sind auch Informationen dazu dünn gesät. Da ich teilweise um das System aus Redmond nicht herum komme und ein Fix in GPG4Win nicht in Sichtweite ist muss also wieder einmal der Holzhammer her: Irgendwie muss beim Einstecken des USB-Gerätes das GPG-System zurückgesetzt werden.

Also frisch ans Werk. Als Sprache soll mal wieder Powershell herhalten – direkt verfügbar, halbwegs systemnah, sollte passen. Über WMI kann man sich auch über ab- und angesteckte Geräte informieren lassen. Leider konnte ich keine Möglichkeit finden weitere Infos wie z.B. Hersteller oder Treiber gleich mit zu erhalten. Da sonst eher wenig Gerätefluktuation zu erwarten ist ziehe ich die “passt scho”-Karte und werde das GPG-System bei jedem neu auftauchenden Gerät einmal zurücksetzen.

Das Grundkonstrukt selbst scheint von Andy.L13 zu stammen, die kläglichen versuche von Mass-Storage auf andere USB-Geräte umzustellen stammen von mir. In Zeile 24 kann man für WindowStyle statt Minimized auch Hidden nutzen um das Ganze im Hintergrund laufen zu lassen – ich bevorzuge ein optisches Feedback. Das Script kann passend in Autostart oder als geplanter Task verstaut werden.

Sicher keine saubere Lösung, aber “works for me”.


Edit: Stackoverflow (bzw warriorpostman) liefert

Das folgende Script reagiert nur noch auf den vom YubiKey emulierten Smartcard-Reader. Das Objekt $Event.SourceEventArgs.NewEvent.TargetInstance sieht wie folgt aus – die Informationen für’s Query sollten sich im Gerätemanager finden lassen:

Ich werde mich am Service WUDFRd (aka Gerät mit Windows SmartCard-Treber) orientieren. Prinzipiell könne man aber auch auf die USB-ID triggern uns so Scripte bauen, welche bei einstecken eines USB-Sticks ein Backup durchführen oder bei verbinden einer unbekannten USB-Tastatur entsprechend reagieren (böse Ente). Das zugehörige Script:

 

BitNotice #102 – Windows Server für’s Klonen vorbereiten (SYSPREP)

Spätestens wenn man einen Haufen Server benötigt und eine Virtualisierung einsetzt möchte man nicht dutzende male das Windows-Setup durchführen und seine wichtigsten Tools per Hand installieren. Einfach die Festplatte zu kopieren ist aber auch keine wirkliche Lösung, denn Windows hat intern IDs, welche im lokalen Netzwerk besser nicht mehrmals vorkommen sollten. Über das Tool “Sysprep”, welches praktischerweise in der der Standardinstallation schon dabei ist, kann man eine Windows-Installation schnell von eindeutigen Merkmalen befreien und so für das Klonen vorzubereiten. Das Tool steht in allen aktuellen Versionen zur Verfügung.

Bitte beachtet, dass je nach Windows-Lizenz nur eine gewisse Anzahl, Art und Hostkonfiguration abgedeckt ist, ein genauer Blick in die Lizenzvereinbarung ist entsprechend Pflicht.

Ergänzungen:

  • 2:14 – …159265… (SCNR)
  • 3:27 – Neu im Sinne von Windows-Einstellungen wurden zurückgesetzt, installierte Programme, Updates, etc bleiben erhalten

BitBastelei #195 – Windows 2012R2 Failovercluster mit VMware

Wieder mal eine Runde “Serverzeugs”: Windows Server 2012 R2 kann über “Failoverclustering” eine Hochverfügbarkeit bereitstellen. Hierzu müssen alle Clusterknoten auf einen gemeinsamen Speicher direkt zugreifen können. Kommt eine Virtualisierungsinfrastruktur wie VMWare hinzu muss man etwas basteln um eine stabile Funktion zu erreichen.

VMWare KB1037959: Microsoft Clustering on VMware vSphere: Guidelines for supported configurations

Ranttime #10 – Übertriebene Usability: FreeDownloadManager

Der FreeDownloadManager war immer meine Software der Wahl wenn es darum ging unter Windows größere Mengen an Dateien aus dem Internet zu laden. Mit der neuen Version hat man aber “die Usability verbessert”. Oder anders gesagt: Alle Funktionen entfernt um die Oberfläche Idiotensicher zu machen.

Software als Windows-Service

Programme starten ist toll. Einige müssen aber immer wieder gestartet werden, hierzu nutzt man unter Windows so genannte “Dienste”. Leider sind das unter Windows NT (also auch z.B. Windows 7/8/10, Windows Server 2008/2012) keine einfachen Programme, sondern erfordern spezielle Registrierungen. Leider gent so etwas (soweit mir bekannt) nicht mit Hausmitteln.

Abhilfe schafft ein kleines Tool: winserv verwandelt ein beliebiges Programm in einen passenden Dienst. Hierbei gibt es folgende Modi:

install richtet ein Programm als Dienst ein
configure ändert einen vorhandenen Dienst
uninstall entfernt den Dienst

Zum Anlegen gibt man folgende Parameter:

-displayname Angezeigter Name des Dienstes
-description Beschreibung (das, was in der Diensteverwaltung in der zweiten Spalte steht)
-start Start-Art des Dienstes – “auto” “demand” oder “disabled” (Bedeutung selbstredend, oder?)

Beispiel:

Alternativ kann man auch einen Geplanten Task mit dem Trigger “Bei Systemstart” verwenden, hier muss man jedoch auf die komfortableren Prüf- und Verwaltungsfunktionen des Dienst-Managers verzichten.

Q’n’D Windows-Shutdown-Daemon in PHP

Alles in Deckung, ich mache wieder unschönes Zeugs. Ich hatte ja bereits erklärt wie man über RPC/Samba einen Windows-PC von Linux herunterfahren kann. Leider ist die Installation von Samba aus Embedded-Systemen eine eher ungünstige Sache und ist in meinem Fall wegen Speichermangel nicht drin. Allerdings ist sowohl auf dem Embedded-System als auch dem betroffenen Rechner PHP verfügbar. I aim to misbehave.

Auf dem herunterzufahrenden Windows-Rechner wird per PHP ein TCP-Socket geöffnet. Dieser Code basiert auf einem Beispiel von Michael Kliewe. Um Scriptkiddies nicht direkt Zugang zu geben ist etwas (sehr schlechte) Challenge-Response-Authentifizierung drin – nunja, ist kein kritisches System. Wird der Client bestätigt folgt ein simples Shutdown per exec. Nicht viel, aber schnell Fertig und funktioniert:

Der Client bastelt sich eine passende Authentifizierung und spielt Zündknopf:

Hoffen wir, dass es läuft und ich nie wieder drauf schauen muss, denn irgendwo tut sowas selbst mir weh ;)