Wertvolle Infos zu Innereien von wichtigen Dateiformaten

28 Februar 2015

Viele relevante Infos zu den Innereien und unterschiedlichen Versionen von Dateiformaten findet man hier: http://www.digitalpreservation.gov/formats/fdd/browse_list.shtml. Dabei werden auch die IANA-Mediatypes, MagicNumbers sowie Informationen über die Entwicklung angegeben. Es finden sich auch jede Menge Links zu weiteren Seiten mit tiefergehenden Details oder Standards.

Batchdatei als Administrator ausführen funktioniert nicht und was dies mit dem &-Zeichen im Benutzernamen zu tun hat

27 Februar 2015

Windows hat so seine Eigenheiten. Aktuell bin ich mal wieder über eine solche gestolpert, wo man sich fragt: Was geht da ab? Kurz zur Geschichte, ein Kunde hatte Probleme mit dem Adobe Reader Update: https://newyear2006.wordpress.com/2014/07/03/adobe-reader-installation-meldet-umgltiges-laufwerk-und-bricht-die-installation-ab/. Meine Antwort darauf war, eine Batchdatei anzulegen und diese mit Adminrechten auszuführen. Nur funktionierte die Variante nicht. Nach einigem hin und her wurde es dann klar, dass keinerlei Batchdatei des Kunden, welche über den Windows Explorer mit rechter Maustaste und “Als Administrator ausführen” angefordert wurde, klappte.

Dazu wurde eine einfach Test.BAT-Batchdatei im Benutzer-Verzeichnis C:\USERS\M&M geschrieben:

@ECHO Hallo
PAUSE

Also nichts weltbewegendes. Führt man diese Batchdatei in der Commandline aus, funktioniert alles wie gewünscht, ob mit oder ohne Adminrechte. Führt man die Batchdatei jedoch im Windows Explorer aus, funktioniert nur die Variante ohne Adminrechte. Bei der Variante mit den Adminrechten wird zwar nach dem Zulassen von CONSENT.EXE mit dem bekannten UAC-Dialog gefragt aber es wird effektiv nichts ausgeführt.

Bei der näheren Analyse mittels Procmon.EXE fiel dann folgendes auf, der Punkt  wo der CMD.EXE-Prozess erzeugt wird, wird die richtige Commandline übergeben:

Parent PID: 1996, Command line: "C:\Windows\System32\cmd.exe" /C "C:\Users\M&M\Test.bat" , …

Einige Zeilen später, wo die .BAT-Datei auf Vorhandensein geprüft wird, findet sich auf einmal diese Zeile:

QueryDirectory  C:\Users\M.*

Wo doch der Benutzer M&M heißt und nicht M.*!!

Und genau da entsteht nun das Problem, so dass wieder einige Zeilen später, der Versuch die Batchdatei zu lesen ins Leere läuft:

CreateFile C:\Windows\system32\M\Test.bat PATH NOT FOUND

Echt interessant! D. h. hier wird der Pfadname quasi in zwei Teile aufgelöst, einmal in C:\Users\M und einmal in M\Test.Bat, was eigentlich C:\Users\M&M\Test.Bat lauten sollte.

Dies bedeutet, dass keine Batchdatei des Benutzers M&M als Administrator ausgeführt werden kann! Sobald man aber hergeht und z. B. ein Verzeichnis C:\TestDir anlegt, dort die Test.BAT-Datei ablegt und diese als Administrator ausführt klappt wieder alles.

Was lernen wir daraus: Verwende unter Windows niemals einen Benutzernamen mit einem &-Zeichen!

Dieses Phänomen tritt von Windows 7 bis Windows 10 auf, wahrscheinlich sind aber generell auch ältere Versionen davon betroffen. Man könnte es zwar durch Escapen des &-Zeichen lösen aber im Punkt bei “Ausführen als Administrator” sind einem die Hände gebunden. Hier wird das Escapen beschrieben: http://www.robvanderwoude.com/escapechars.php.

Wireshark bleibt bei 100% beim Laden der Konfigurationsdateien hängen

23 Februar 2015

Scheinbar ein bekanntes Phänomen mit Windows 8.1 und dem Starten von Wireshark, dass Wireshark bei der Anzeige mit dem Laden der Konfigurationsdateien bei 100% hängen bleibt. Das Problem dabei ist nicht Wireshark selber sondern DUMPCAP.EXE welches direkt von Wireshark aus gestartet wird. Dies scheint irgendeine Info nicht zu bekommen und lässt dann alles hängen.

Im aktuellen Fall half der Artikel https://ask.wireshark.org/questions/26361/loading-configuration-files mit dem Hinweis

sc config npf start= delayed-auto

und Neustart des Rechners.

NPF steht für “NetGroup Packet Filter Driver” und ist ein Kerneltreiber.

C:\WINDOWS\system32>sc qc npf
[SC] QueryServiceConfig ERFOLG

SERVICE_NAME: npf
        TYPE               : 1  KERNEL_DRIVER
        START_TYPE         : 2   AUTO_START  (DELAYED)
        ERROR_CONTROL      : 1   NORMAL
        BINARY_PATH_NAME   : system32\drivers\npf.sys
        LOAD_ORDER_GROUP   :
        TAG                : 0
        DISPLAY_NAME       : NetGroup Packet Filter Driver
        DEPENDENCIES       :
        SERVICE_START_NAME :

Offenbar gab es damit auch schon früher Probleme mit Windows 7 und Wireshark: https://ask.wireshark.org/questions/1281/npf-driver-problem-in-windows-7.

Das eigentliche Problem scheint aber WinPCap zu sein, denn NPF.SYS ist der Kerneltreiber von WinPCap:

C:\> powershell -command "& {(get-item C:\windows\system32\drivers\npf.sys).VersionInfo.ProductName}"
WinPcap

Ganz einfach WLAN-Sicherheitsschlüssel unter Windows auslesen

23 Februar 2015

Ich hab hier früher schon einmal eine Methode beschrieben, wie man WLAN-Netzwerkkennwörter per Commandline auslesen kann: https://newyear2006.wordpress.com/2013/01/02/wifi-netzwerksicherheitsschlssel-unter-windows-per-powershell-auslesen/. Die Variante funktioniert, ist aber entsprechend aufwändig. Was wenn nun von Haus aus eine viel einfachere Methode existiert?

Na dann nutzen wir diese halt:

netsh wlan show profiles

listet zunächst die verfügbaren WLAN-Profile auf. Den Schlüssel dafür bekommt man mittels:

netsh wlan show profiles "Mein WLAN-Netzwerkname" key=clear

Dabei löscht clear nichts, sondern sagt lediglich, dass der Netzwerkschlüssel im Klarnamen angezeigt werden soll.

So sieht der Aufruf konkret z. B. bei einer Fritzbox aus:

netsh wlan show profiles "Fritz!Box 7490" key=clear

Die Sache funktioniert bereits bei Windows 7! Für Windows 8 gibt es sogar eine offizielle Doku: http://windows.microsoft.com/de-at/windows-8/manage-wireless-network-profiles.

Viel Spaß beim Stöbern…

Malware-Plage und jetzt auch noch Superfish

22 Februar 2015

Es wird immer schlimmer und keiner blickt mehr richtig durch. Das ganze TLS und Zertifikatsgedöns ist nicht nur kompliziert, sondern kann auch schön ausgehebelt werden. Aktuelles Beispiel Visual Search bzw. Visual Discovery von Superfish.

Nicht nur, dass es Leute gibt, die sich bewusst oder unbewusst irgendwelche schrottigen Onlinevergleichstools auf den Rechner laden und dadurch massiv ausspioniert werden bzw. tolle Werbeeinblendungen bekommen, nein jetzt werden auch noch Rechner ab Werk mit solchen Programmen ausgeliefert.

Heise Online meldet:

Ab sofort können sich Cyber-Gangs online gegenüber Besitzern von vielen Lenovo-Laptos mit einer beliebigen Identität ausweisen und gefährliche Man-in-the-Middle-Angriffe tätigen.
http://www.heise.de/newsticker/meldung/Lenovo-Laptops-Sicherheitsluecke-erreicht-kritisches-Stadium-2555934.html

Die Vorgehensweise, die Sache ausnutzen zu können ist dabei recht einfach. Robert Graham zeigt mit einfachsten Mitteln, wie es geht. http://blog.erratasec.com/2015/02/extracting-superfish-certificate.html. Er startet einfach die Malware und erzeugt mittels Procdump von Sysinternals einen Speicherdump des Prozesses. Danach holt er sich wiederum mittels Sysinternals-Tool Strings alle Strings aus dem Dump. Schwupps hat er den privaten Schlüssel des Zertifikats. Normalerweise müsste man nun das Passwort für den privaten Schlüssel brutforcen. Aber das kann dauern. Also geht er einfach her und verwendet eine Dictionary-Attacke. Doch zunächst ohne Erfolg. Dann denkt er sich, vielleicht ist das Passwort ja im Stringdump enthalten und schwupps hat er es: “komodia”.

Warum ist dies nun alles so gefährlich? Ein schöner einleitenden Artikel bringt wiederum Robert Graham: http://blog.erratasec.com/2015/02/some-notes-on-superfish.html. Die Quintessenz daraus ist, auch wenn man die Malware deinstalliert, dass Stammzertifikat bleibt immer noch auf dem Rechner und erlaubt später problemlos “Man in the middle”-Attacken.

Damit nicht alles graue Theorie bleibt, geht wiederum Robert Graham zum Beweis über und bastelt mittels Raspberry Pi ein plastisches Beispiel. Mittels eines Pi für 40€, einem WLAN-Modul für 15€, einer Speicherkarte für 5€ bastelt er einen Man in the Middle Proxy. dazu verwendet er SSLSplit und die Zertifikate und Passwörter von Superfish und kann nun problemlos seine verschlüsselte TLS-Kommunikation mitlesen. http://blog.erratasec.com/2015/02/exploiting-superfish-certificate.html. Natürlich muss es nicht ein Pi sein, sondern kann jede x-beliebige Maschine sein, es geht nur darum deutlich zu machen, dass so ein kleines Stück Hardware für solche Attacken nicht teuer sein muss.

Ach und aus Erfahrung kann ich sagen, dass Rechner, bei denen so eine Spionagesoftware mal nicht richtig funktioniert, massiv Probleme mit ihrer Internetverbindung haben und der unbedarfte Benutzer ständig komische Fehlermeldungen zwecks Proxy und so Gedöns an den Latz geknallt bekommt.

Hier noch ein paar Powershell-Befehle mittels derer man das Superfish-Zertifikat ermitteln kann:

dir cert:\ -Recurse| where {$_.Subject -match "Superfish"}

oder direkt per Fingerprint:

dir cert:\ -Recurse| where {$_.Thumbprint -eq "C864484869D41D2B0D32319C5A62F9315AAF2CBD"}

Wer braucht da noch nen Staatstrojaner, wenn die Computerhersteller bereits alles dafür tun, die Geräte mit Malware auszustatten. Interessant in diesem Zusammenhang ist noch dieses: http://blog.fefe.de/?ts=aa16d2ff. Der große Bruder lässt grüßen…

Probleme beim Drucker umbenennen unter Windows

22 Januar 2015

Bei einem Kunden mit Windows 8.1 gab es beim Umbenennen eines Druckers folgende Meldung:

[Window Title]
Druckereigenschaften

[Main Instruction]
Die Druckereinstellungen konnten nicht gespeichert werden.

Es ist bereits ein Drucker oder eine Druckerfreigabe mit diesem Namen vorhanden. Verwenden Sie einen anderen Namen für den Drucker.

[OK]

Wenn man aber bei den Druckern geschaut hat, war nix von einem Drucker mit diesem Namen zu sehen. Es war allerdings davor ein Drucker mit diesem Namen da, denn dieser wurde zuvor gelöscht. Blöd war nur, dass in dessen Druckerwarteschlange noch ein kaputter Druckvorgang war und somit scheinbar der Druckvorgang nicht abgeschlossen werden konnte. Wie ich auf diese gewagte These komme?

Na ganz einfach so: Mittels dieses Artikels https://newyear2006.wordpress.com/2014/07/09/gruppierung-bei-windows-druckern-aufheben/ über diesen Punkt

shell:::{2227A280-3AEA-1069-A2DE-08002B30309D}

die Ansicht geändert, dass alle Druckertreiber einzeln dargestellt wurden. Dabei war aber noch nichts vom Ghost-Druckertreiber zu sehen. Nun aber die versteckten Dateien eingeblendet. Also ALT-Taste gedrückt, damit das Menü “Datei Bearbeiten Ansicht Extras” erscheint und dort bei Extras die Ordneroptionen aufgerufen. Hier wiederum das Register Ansicht ausgewählt und den Punkt “Ausgeblendete Dateien, Ordner und Laufwerke anzeigen” aktiviert. Schwups war der Ghostdruckertreiber zu sehen und konnte nun entfernt werden. Denkste!

Beim Versuch den Druckertreiber zu löschen erschien diese Fehlermeldung:

[Window Title]
Druckereigenschaften

[Main Instruction]
Die Druckereigenschaften können nicht angezeigt werden.

Überprüfen Sie den Druckernamen, und stellen Sie sicher, dass der Drucker mit dem Netzwerk verbunden ist.

[OK]

Was jetzt? Logischerweise Neustart des Rechners oder vielleicht nur Neustart der Druckerwarteschlange, dann ist der Ghost-Druckertreiber weg und das Umbenennen des ursprünglichen Druckertreibers ist möglich.

Altes Windows XP aus VHD-Datensicherung wiederbeleben

31 Dezember 2014

Nur als Referenz, falls nochmals notwendig. Kurz die Situation, es gab einen Datenbestand auf den unbedingt zugegriffen werden musste. Allerdings war nur eine VHD-Komplettsicherung eines Windows XPs vorhanden. Man hätte nun zwar die Daten aus der VHD extrahieren können, allerdings lagen die Daten in einer Software vor, welche auf einem neuen Rechner nicht mehr installierbar war. Somit musste das alte XP-System reaktiviert werden. Dazu wurde die XP-Maschine als virtueller Rechner unter einem Hyper-V eingebunden. hier nun kurz die nötigen Schritte:

Diese Lösung setzt voraus, das Windows XP zum Einsatz kommt, nur eine Partition zurückgespielt werden muss und diese kleiner 128GB ist.

o Hyper-VM VM anlegen, falls Auswahl nur Generation 1
o Anlegen einer Partition die nicht größer als 128GB sein darf
o Booten von einer WinPE oder Windows-Start-CD
o Shift-F10 für Eingabeaufforderung
o Einbinden der VHD-Sicherung mittels DISKPART

DISKPART
SELECT VDISK FILE="Vollständige Pfad zu VHD-Datei"
ATTACH

o Einrichten und Formatieren des neuen Laufwerks

SELECT DISK 0
ACTIVE
CREATE PARTITION PRIMARY
FORMAT FS=NTFS QUICK
LIST VOLUME
EXIT

o Kopieren der Daten von VHD-Sicherung zum leeren Laufwerk. Dabei ist zu beachten, welche Laufwerksbuchstaben den Laufwerken bei der Ausgabe von obigem “List Volume” angezeigt werden. In meinen Beispiel war E: das Laufwerk mit der eingehängten VHD-Datei und C: die neue, noch leere Platte. Infos zu den Paramtern von XCOPY: http://support.microsoft.com/kb/323007/de.

XCOPY E:\*.* C:\  /O X /E H /K
BOOTSECT /NT52 C: /MBR

o Damit die Geschichte unter Hyper-V bootbar ist und kein “Inaccessible Bootdevice” Fehler auftritt, muss noch ein IDE-Treiber aktiviert werden. Weitere Infos hier: https://newyear2006.wordpress.com/2009/09/12/computer-bzw-hardware-virtualisieren-p2v-fr-microsoft-hyper-v-server/

REG LOAD HKLM\Temp C:\WINDOWS\SYSTEM32\CONFIG\SYSTEM
REG ADD "HKLM\Temp\ControlSet001\Control\CriticalDeviceDatabase\pci#VEN_8086&DEV_7111"
REG ADD "HKLM\Temp\ControlSet001\Control\CriticalDeviceDatabase\pci#VEN_8086&DEV_7111" -v Service -t REG_SZ -d intelide 
REG ADD "HKLM\Temp\ControlSet001\Control\CriticalDeviceDatabase\pci#VEN_8086&DEV_7111" -v ClassGUID -t REG_SZ -d "{4D36E96A-E325-11CE-BFC1-08002BE10318}"
REG ADD HKLM\Temp\ControlSet001\Services\intelide -v start -t REG_DWORD -d 0

REG UNLOAD HKLM\Temp

Das wars auf die Schnelle. Die Methode funktioniert im Prinzip auch bei Windows Vista, 7,8 usw. Allerdings muss man dort mit /NT60 bei BOOTSECT arbeiten und darauf Rücksicht nehmen, dass mehrere Partitionen vorhanden sind.

Vorhandene Windowsversionen aus Windows-Installations-ISO-Datei ausgeben

30 Dezember 2014

Wenn man eine Windows-Installations-ISO-Datei hat und schnell wissen möchte, welche Versionen darin enthalten sind, gibt es verschiedene Möglichkeiten dies herauszufinden.

Wenn man Windows 8 oder neuer hat, dann kann man dies mittels Powershell über diesen Einzeiler:

$m=Mount-DiskImage -ImagePath "C:\Temp\MS-ISOs\de_windows_8.1_with_update_x64_dvd_6051485.iso" -PassThru ; Get-WindowsImage -ImagePath "$(($m| Get-Volume).DriveLetter):\sources\install.wim";
$m|Dismount-DiskImage

Führt zum Ergebnis:

Index       : 1
Name        : Windows 8.1 Pro
Description : Windows 8.1 Pro
Size        : 13.324.853.116 bytes

Index       : 2
Name        : Windows 8.1
Description : Windows 8.1
Size        : 13.260.872.008 bytes

Der Reihe nach:

$m=Mount-DiskImage -ImagePath "C:\Temp\MS-ISOs\de_windows_8.1_with_update_x64_dvd_6051485.iso" -PassThru ;

Öffnet eine ISO-Datei und reicht das Objekt an $m weiter.

Get-WindowsImage -ImagePath "$(($m| Get-Volume).DriveLetter):\sources\install.wim";

Ermittelt den bei Mount-DiskImage vergebenen Laufwerksbuchstaben und schaut unter diesem im Verzeichnis nach der X:\Sources\Install.WIM-Datei. Dort werden mittels Get-WindowsImage die verfügbaren Versionen ermittelt und ausgegeben.

$m|Dismount-DiskImage

Entfernt das eingehängte ISO-Image wieder. Das wars.

Wenn sich mal wieder die BIOS Einstellungen nicht speichern lassen

30 Dezember 2014

Nur für künftige Aktionen, damit ich das nächste Mal nicht unnötig Batterien verbrenne. Wenn das BIOS die Meldung:

CMOS Settings Wrong
CMOS Date/Time Not Set
Press F1 to run SETUP

erscheint, so sollte man die Motherboard-Batterie austauschen, wenn es danach aber immer noch nicht klappt, hilft ein CMOS-Reset! Scheinbar war es dem NVRAM davor nicht möglich die Daten ordentlich zu speichern, obwohl beim Verlassen des BIOS keine negative Meldung angezeigt wurde, dass die Daten nicht gespeichert werden konnten.

Mit den BIOS Einstellungen kann man viel Spaß haben: https://newyear2006.wordpress.com/2012/11/27/rechner-geht-einfach-nach-anzeige-von-starting-windows-aus/

Format-Hex für Powershell

28 Dezember 2014

Soviel man mit Powershell auch machen kann eine entscheidende Funktion die fehlt ist Format-Hex, um z. B. eine Datei oder ein Bytearray als Hexdump ausgeben zu können.

Aber wie immer gibt es Lösungen im Internet. So hat Lee Holmes die Funktion bereits gebaut. Die Version ist gut aber besser ist die etwas erweiterte und fehlerbereinigte Version, die hier zu finden ist: https://gist.github.com/newyear2006/aae98d1c9c2fbdaba179.

Damit kann man ganz einfach Dinge machen wie z. B.

"Hallo Welt"| Format-Hex

Was dann zur Ausgabe hat:

          0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F

00000000 48 00 61 00 6C 00 6C 00 6F 00 20 00 57 00 65 00  H.a.l.l.o. .W.e.
00000010 6C 00 74 00                                      l.t.
          

Mit dem Paramter –NoHeader sieht es dann so aus:

00000000 48 00 61 00 6C 00 6C 00 6F 00 20 00 57 00 65 00  H.a.l.l.o. .W.e.
00000010 6C 00 74 00                                      l.t.
          

Mit zusätzlicher Angabe von –NoCounter siehts so aus:

48 00 61 00 6C 00 6C 00 6F 00 20 00 57 00 65 00  H.a.l.l.o. .W.e.
6C 00 74 00                                      l.t.
          

Aber man ist nicht begrenzt auf die Ausgabe von Strings, sondern kann auch Bytearrays ausgeben:

$text = "Hallo Wörld!"
$bytes = [System.Text.Encoding]::UTF8.GetBytes($text)
$bytes | Format-Hex -NoHeader -NoCounter

sieht dann so aus:

48 61 6C 6C 6F 20 57 C3 B6 72 6C 64 21       Hallo Wörld!

Hier sieht man nun deutlich die Umwandlung des ö in zwei Bytes bei UTF8 mittels C3 B6.

Hier gibts noch weitere Powershell Hex-Funktionen: https://newyear2006.wordpress.com/2011/06/20/powershell-und-byte-array-sowie-hex-funktionen/


Folgen

Erhalte jeden neuen Beitrag in deinen Posteingang.