Archive: Month 11, Year 2010

Passwörter von TightVNC ermitteln...

24.11.2010 yahe administration code legacy security windows

Nachdem ich letztens nachgewiesen habe, wie unsicher eines der Lieblingstools von Hannes Schurig ist, hat dieser mich gestern angeschrieben und gefragt, ob ich mir nicht mal das OpenSource-Tool TightVNC angucken könnte. Wie er mitbekommen hatte, speichert der TightVNC-Server in der Registry unter "HKCU\Software\TightVNC\Server" zwei Werte mit den Namen "Password" und "PasswordViewOnly". Seine Frage war nun, ob es möglich wäre, aus den kryptischen Werten die ursprünglichen Passworte für den "Remote Control"- und den "Remote View Only"-Zugang wiederherzustellen.

Da man von diesem Programm die Quelltexte erhält, habe ich mir diesen natürlich zuerst angeguckt und auch relativ schnell eine Antwort auf die Frage gefunden: Ja, man kann die ursprünglichen Passworte anhand der Werte in der Registry ermitteln!

Um das herauszufinden, habe ich am Quellcode entlang gehangelt. Begonnen habe ich in der Datei "ServerConfig.cpp". In dieser wird die Klasse ServerConfig definiert, die später anscheinend die gesamte Konfiguration vorhält. In dieser Klasse gibt es u.a. auch die beiden Methoden "setControlPassword()" und "setReadOnlyPassword()", die einen Rückschluss auf die verschiedenen Zugänge zulassen. Um zu sehen, was weiter geschieht, habe ich nachgesehen, wo die Methode "setControlPassword()" überall aufgerufen wird. Das wiederum ist u.a. in der Datei "ControlApplication.cpp" der Fall, in der sich die Methode "run()" befindet. In der Methode werden anscheinend Kommandozeilenparameter verarbeitet und wie es aussieht, kann man die Passwörter über die Kommandozeile setzen. Auffallend ist die Verwendung der Methode "getCryptedPassword()". Sie befindet sich in der gleichen Datei und enthält u.a. einen Aufruf der Form "VncPassCrypt::getEncryptedPass()". Diese Methode (die sich in der Datei "VncPassCrypt.cpp" befindet) enthält nun die eigentlich interessante Passage:

void VncPassCrypt::getEncryptedPass(UINT8 encryptedPass[8],
                                    const UINT8 plainPassword[8])
{
  DesCrypt desCrypt;
  desCrypt.encrypt(encryptedPass, plainPassword,
                   sizeof(encryptedPass), m_key);
}

Das Passwort, das oben eingekippt wird, wird unten DES-verschlüsselt wieder ausgegeben. Eine Entschlüsselungsmethode wird übrigens gleich mitgeliefert und selbst das Passwort liegt fest einprogrammiert im Quelltext vor:

const UINT8 VncPassCrypt::m_key[] = { 23, 82, 107, 6, 35, 78, 88, 7 };

Man sollte sich also dringend überlegen, wie man die Passwörter in der Registry absichert, wenn man vorhat, TightVNC zum Beispiel zur Fernwartung von Mitarbeiter-PCs zu nutzen. Die Leute könnten schneller an das Passwort kommen, als einem lieb sein dürfte.


Remotedesktopverbindung: Eine geht noch...

17.11.2010 yahe administration legacy windows

Häufig muss ich es erleben, dass ich mich via RDP zur Administration auf einen Windows-Server verbinden muss, nur um dann die Meldung an den Kopf geworfen zu kriegen, dass "Die maximale Anzahl der Verbindungen [...] erreicht" sei. Eine Verbindung ist also nicht möglich, solange sich nicht mindestens ein Kollege von dem Server abmeldet.

Das denkt man zumindest! Denn das Standard-Tool mstsc (auch bekannt als "Remotedesktopverbindung") kennt einen Kommandozeilenparameter, mit dem man sich direkt mit der physikalischen Session des Servers verbinden kann. Mit folgendem Aufruf schafft man es meistens noch, eine Session zu ergattern, um seine Arbeiten zu erledigen:

mstsc /admin

Anschließend kann man dann mit qwinsta und rwinsta einen Kollegen aus seiner RDP-Session kicken und sich so eine eigene Session ergattern. (Achtung: Das ist natürlich nur ein Scherz!)


Versteckte Dateien per .htaccess schützen

10.11.2010 yahe administration legacy linux security

In meinen Augen sollte dieses Verhalten selbstverständlich sein: Dateien und Ordner, die auf einem Linuxserver versteckt vorliegen (also solche, deren Name mit einem Punkt (".") beginnt), sollten vom Apache Webserver natürlich auch nicht ausgeliefert werden. Leider sehen das die Entwickler des Apache Webservers anders und liefern standardmäßig nur solche Dateien nicht aus, die mit ".ht" beginnen.

Da dies in einigen Situationen Sicherheitsprobleme nach sich ziehen kann, habe ich nun in einer ".htaccess"-Datei definiert, dass entsprechend benannte Dateien und Ordner durch eine 404-Fehlermeldung versteckt werden sollen. Dazu reicht eine einzelne Zeile aus:

RewriteRule ^(.*\/)?\.(.*)$ - [L,R=404]

Solltet ihr einen Apache-Server unter Linux betreiben, dann würde ich euch raten, dessen Verhalten im Bezug auf versteckte Dateien einmal zu überprüfen und entsprechend euren Erwartungen anzupassen.


Search

Links

RSS feed

Categories

administration (40)
arduino (12)
calcpw (2)
code (33)
hardware (16)
java (2)
legacy (113)
linux (27)
publicity (6)
review (2)
security (58)
thoughts (21)
windows (17)
wordpress (19)