Windows NT Angriffsmethoden: °°°°°°°°°°°°°°°°°°°°°°°°°°°° ================================ || von Ernesto Tequila y Mota || || ernesto_tequila@2die4.com || || www.AnthraxLP.de || ================================ Hi Folks, willkommen zu meinem Text über Microsofts Windows NT. Obgleich Windows NT, meiner Meinung nach, so ziemlich das einzige ist, was bei Microsoft mal Hand und Fuss hat, hat es doch immernoch eine ganz Menge Schwachstellen. Dabei müssen wir jedoch oft auf eine gewisse Dummheit des Administrators hoffen, da NT richtig konfiguriert, genauso sicher ist wie jedes UNIX-System. Microsoft hat bei der Entwicklung wieder einmal ein paar (Alte?) Fehler gemacht, die das System unsicherer machen, als es sein könnte. Da wäre einerseits die Abwärtskompatibilität zu älteren Client Versionen, oder z.b. die Benutzerfrendlichkeit (alter M$ Fehler). Denn die Benutzung der alten NetBIOS-, CIFS-, und SMB-Netzwerkprotokolle ist sicherlich eine Schwachstelle im System, und auch die Verschlüsselung der Benutzerkennwörter nach dem alten LanManager-Algorithmus ist nicht sehr schlau, aber uns kann das im Prinzip ja egal sein, oder? Die Benutzerfreundlichkeit verleitet oft unerfahrene Systemverwalter dazu sich bei NT mal als Admin zu versuchen, doch auch erfahrene Admins wählen unter NT selten starke Passwörter (dazu später mehr). Daher ist es unter NT immer mal möglich in einem Netzwerk mindestens einen Rechner zu finden, bei dem das Admin-Konto nicht mit einem Passwort versehen ist. Deshalb ist es natürlich erstmal nötig festzustellen mit wasfüreinem System wir uns gerade befassen. Dazu benutzt ihr ja wahrscheinlich einen Portscan. Wenn dabei z.b. Port: 139, 135 offen sind handelt es sich sehr wahrscheinlich um ein NT System, ist nur Port 139 offen ist es wohl eine Win 9X Maschine, aber wer wird sich schon mit Win 9X befassen?? Wenn ihr Probleme, oder keine Ahnung von Portscanning, Footprinting etc.. habt schreibt mir einfach eine Mail, wenn da genug Bedarf ist schreibe ich dazu auch noch einen Text. Der "nmap" Scanner für Linux bietet die Option "-O" mit der ein OperationSystemGuess ausgeführt wird, d.h. der Scanner versucht aus den Daten die er bekommt das Betreibssystem zu bestimmen. Aber denkt immer daran, dass schon das abscannen eines Rechners oder Netzwerkes rechtlich verboten ist. Also versucht da mal ein paar Sachen aus, nmap bietet da relativ gut Möglichkeiten um seine Aktivitäten zu vertuschen, wobei 99% der Admins sowieso zu faul sind einem dämlichen Portscann zu verfolgen, aber immerhin sind sie gewarnt, das vielleicht ein Angriff bevorsteht. Ein gutes Tool, das euch den Aufbau eines Netzwerkes zeigt sei an dieser Stelle noch genannt. "Cheops" (www.marko.net/cheops) ist ein Nezuwerkerkennungstool, mit einem Grafischen Interface. Es beinhaltet Portscanning, traceroute, ping, OS-Erkennung in einem. Also wem es zu umständlich ist alles einzeln zu machen, oder wer lieber schöne bunte Bilder als ASCI mag sollte sich das mal anschauen. Ich bin einfach ASCI-Konsolen-Fan, tut mir leid ;) Jetzt wollen wir mal anfangen euch die verschiedenen Angriffsmethoden etwas näher zu bringen. Ich werde mit den etwas einfacheren Methoden anfangen, und dann zu schwereren übergehen. Es ist bei NT noch zu beachten, dass der Remote-User solange nichts wert ist, solange er keine Administratorrechte besitzt, da man unter NT nur als Admin Befehle über die Remoteshell ausführen kann! Kennwörter raten: ^^^^^^^^^^^^^^^^^ Um unter NT, oder eigentlich bei jedem System, Passwörter raten zu können benötigt man ersteinmal eine Liste mit funktionierenden Benutzrkonten. Es gibt dann die Methode des manuellen Passwörter ratens, oder des automatischen, oder per Lauschangriff auf den Anmeldedialog von NT. Wie bekommt man gültige Benutzerkonten: °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° Es gibt eine ganze Menge an Methoden um an gültige Konten zu kommen, ich möchte mal ein paar davon erklären. Das NTRK: °°°°°°°°° Das NT Ressource Kit, oder auch NT Hacking Kit genannt, beinhaltet eine erstaunliche Sammlung an Tools die man, ob man es fassen kann oder nicht, gegen NT verwenden kann. Was immer sich M$ dabei gedacht haben mag, das ist doch wirklich seltsam, aber wir sehen mal wieder, dass NT ZU benutzerfreundlich ist. Das NTRK kann man für ca $200 im Laden kaufen, da es bei NT nicht standardmässig dabei ist. Aber man findet es auch manchmal auf Warezseiten. Ein anderer Befehl ohne NTRK ist nbtstat -A 123.123.123.123 Wobei 123.123.123.123 natürlich die IP eures NT Rechners ist. Dieser Befehl liest die NetBIOS Namenstabelle aus, und eine erfolgreiche Ausgabe sähe dann so aus: NetBIOS Remote Machine Name Table Name TYPE Status FRITZ <20> Registered FRITZ <00> Registered INTERNET <00> Registered FRITZ <03> Registered INTERNET <1E> Registered ADMINISTRATOR <03> Registered INTERNET <1D> Registered ..__MSBROWSE__. <01> Registered Mac Address = 00-C0-4F-86-80-05 Wir erfahren, dass der Systemname FRITZ ist, die Domäne in der sich das System befindet heisst INTERNET und wir erfahren den Namen aller angemeldeten Benutzer ADMINISTRATOR Bei dem NTRK sind einige Tools dabei, die noch mehr Informationen geben als nbtstat, und diese sind von einer Null-Sitzung unabhängig. Beispielsweise usrstat, showgrps, local und global. Aber am besten ist DumpACL, denn es liefert die Benutzer, Gruppen, NT-Systemrichtlinien und Benutzerprivilegien. DumpACL wird von der Konsole aus gestartet und könnte z.b. so aussehen: c:\>dumpacl /computer=\\192.168.202.33 /rpt=useronly /saveas=tsv /outfile=c:\temp\users.txt c:\>cat c:\temp\users.txt 24/12/00 24.00 PM - Somarsoft DumpACL - \\192.168.202.33 UserName FullName Comment pvogel Peter Vogel blabla kknauss Klaus Knauss blabla Guest Guest Account max Max Frisch blabla Ein weiteres sehr taugliches Tool ist das Packet sid2user und user2sid (www.chem.msu.su:8080/~rudnyi/NT/sid.txt) Diese beiden Tools werden aus der Befehlszeile gestartet und lesen Benutzerkonten aus der NT-SIDs aus (SID = Security Identifier). Zuerst wird user2sid verwendet um die SID einer Domäne auszulesen: c:\>user2sid \\192.168.202.33 "domain users" Sie-1-5-21-8915387-1645822062-1819828000-513 Number of subauthorities is 5 Domain is WINDOWSNT Length of SID in memory is 28 Bytes Type of SID ist SidTypeGroup Die SID ist die Zahlenkombination, die mit S beginnt, und durch Bindestriche getrennt ist. Die letzte Zahl nach einem Bindestrich ist die RID (Relative Identifier), der für standardmässige Benutzer wie Administrator oder Guest benutzt wird. Wobei der Admin immer 500 und der Guest immer 501 ist. Jetzt kann man sid2user benutzen und die SID mit der RID von Administrator benutzen und das sieht dann ungefähr so aus: c:\>sid2user \\192.168.202.33 5 21 8915387 1645822062 1819828000 500 Name is max Domain is WINDOWSNT Type of SID is SidTypeUser So und schon haben wir den Namen des Administrators S-1 und die Bindestriche wurden weggelassen. Dem ersten erstellten User wird automatisch die RID 1000 geben, dem zweiten erstellten USer die 1001 etc... Diese RIDs werden jeweils nur einmal verwendet, so ist es also möglich auch ältere Konten aufzuspüren. Alte Konten sind interessant weil sie oft noch existieren aber nichtmehr benutzt oder kontrolliert werden. Ausserdem funktioniert sid2suer/user2sid auch wenn RestrictedAnonymous aktiviert ist, hauptsache port 139 ist aktiv! Oft kann das SNMP (Simple Network Managment Protocol) zur Auswertung von Benutzerinformationen benutzt werden. Da Admins dieses Protokoll irgendwie gerne übersehen, gut für uns. Wir benutzen dazu das SNMP-Browser-Tool "snmputil" aus dem NTRK. Eine Ausganbe könnte so aussehen: C:\>snmputil walk 192.168.202.33 public .1.3.6.1.4.1.77.1.2.25 Variable = .iso.org.dot.internet.private.enterprises.lanmanager.lanmgr2.server.svUSerTable,svUSerEntry.svUSerName.5.71.117.101.115.116 Value = .iso.org.dot.internet.private.enterprises.lanmanager.lanmgr2.server.svUSerTabel.svUserEntry.svUserName.13 65.100.109.105.110.105.115.116.114...97.116.111.114 Value = OCTET STRING - Administrator End of MIB subtree Die Zahl .1.3.6.1.4.1.77.1.2.25 ist der sogenannt OID (Object Identifier) sie bezeichnet eine bestimmte Branche im MIB (Managment Information Base) von Microsoft gemäss SNMP Protokoll. Wenn man die Zahl ändert um weiter nach oben im Baum zu wandern erhält man eine grössere Informationsmenge, statt der Zahl kann man aber äquivalent auch Zeichen verwenden, z.b.: SNMP MIB (anhängen an .iso.org.dod.internet.private.enterprises.lanmanager.lanmgr2) Erkannte Dienste: .server.svSvcTablesvSvcEntry.svSvcName => laufende Dienste .server.svSvcTable.svShareEntry.svShareName => gemeinsame Dienste (Shares) .server.svSvcTable.svShareEntry.svSharePath => Kommentare zu Shares .server.svSvcTable.svUSerEntry.svUserName => Benutzernamen .domain.domPrimaryDomain => Domänennamen Wem das zu viel Tipparbeit ist, der kann den SNMP-Browser von www.solarwinds.net herunterladen, und sich das ganze mit einer Grafischen Oberflächen anschauen. Ansonsten funzt das andere aber auch! Backdoors/Trojaner: ^°^°^°^°^°^°^°^°^°^ Um einen Trojaner zu installieren, um über ihn an die gecachten Benutzer/Passwörter zu kommen ist natürlich auch möglich. Ganz einfach per E-Mail, oder was auch immer. Ein etwas eleganterer Weg ist die unterbringung per NetBIOS. Über dieses Thema habe ich schon einen Tutor geschrieben, den copy/paste ich jetzt einfach mal (ist ja nur von mir selbst geklaut): ZITAT ANFANG: "Ihr habt da ein Netzwerk in das ihr gerne rein wollt, aber ihr habt einfach kein Glück. Dann versucht es mal ein wenig hinten herum. Über andere Rechner, die an euer Netz gehängt wurden. Als erstes solltet ihr mal eine whois Suche über euer Unternehmen starten. Unter Linux geht das so: winnie@nethacker:> whois dummy oder: whois dummy.de Dann solltet ihr ein paar Infos über den Administrator den Sitz der Firmenleitung etc.. bekommen. Und wenn ihr Glück habt noch den/die dns-server, und den IP Bereich den das Netzwerk unseres Unternehmens belegt. Den dns server könnten wir für dns abfragen nutzen, aber das ist ein anderes Thema, wir wollen jetzt Rechner in dem Netzwerk suchen, die netBIOS ressourcen zur "freien" verfügung haben. Dazu suchen wir das gesammte netzwerk (angenommen: 183.254.20.1 -> 183.254.23.23) mit einem Pingsuchlauf ab. Das heisst, wir testen welches dieser Systeme überhaupt aktiv ist. Also testen wir mal ob Port 80 offen ist. Dazu benutzen wir nmap auch wieder unter Linux: nmap -sP -PT80 183.254.20.1-254 nmap -sP -PT80 183.254.21.1-254 nmap -sP -PT80 183.254.22.1-154 nmap -sP -PT80 183.254.23.1-23 Wir scannen hier jeden Bereich einzeln, weil ich die Syntax nicht kenne um alles auf einmal zu scannen, aber egal. Dann erhaltet ihr eine Liste mit hosts die geantwortet haben, am besten lasst ihr euch die ausgabe in ne datei speicher, hängt einfach > /tmp/nmap_out an die befehlszeile an. Jetzt wechseln wir mal schnell wieder zu Windows, und starten den Legion 2.1 (gibts bei www.nethacker.de) und suchen das gesamte netzwerk nach netbios ressourcen ab, auf die wir zugreifen können. Natürlich nehmen wir nur hosts, die vorher beim Ping Suchlauf auch geantwortet haben. Wenn wir jetzt nen Host finden zeigt Legion das an, ihr braucht nur die IP zu nehmen und in der Form \\183.254.20.180 in euren Browser einzugeben. Jetzt kann es einige Zeit gehen, und ihr solltet alle offenen Verzeichnisse sehen. Schaut euch jetzt mal nach .PWL files, oder sonstigen lustigen Sachen um, die euch Zugang zum gesamten Netzwerk, das ihr ja nicht vergessen sollen *fg*, verschaffen könnten." ZITAT ENDE So, an dieser Stelle könntet ihr jetzt eine Datei herunterladen (rechtsklick kopieren) und diese dann mit einem Trojaner-Server versehen. Dann kopiert ihr die File zurück auf den Server, und zwingt ihn dazu die File zu öffnen. (Meistens kann man bei shared ressources txt files etc.. anzeigen, aber bei exe Dateien sieht das anders aus (vielleicht mache ich was falsch *g*). Deshalb müsst ihr das System halt zwingen die File zu öffnen die den Trojaner beinhaltet. Dazu steckt ihr den Trojaner am besten in eine File die beim Windowsstart geöffnet wird. Wie ihr den PC jetzt zum rebooten bringt, und welche Dateien da in Frage kämen das überlasse ich mal euch) Auswerten von NT -Bannern und Anwendungen: °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° Die bewährteste Methode zum Auswerten von Banner- und Anwendungsinformationen ist "telnet". Dazu muss man "telnet" öffnen und eine Verbindung zu einem bestimmten offenen Port am Zielsystem herstellen, dann muss man manchmal die Eingabetaste ein paar mal betätigen, und dann sollte man eine Meldung erhalten, die ungefähr so aussieht: telnet www.dummy.org 80 (<- In diesem Beispiel wurde Port 80 gewählt) HTTP/1.0 400 Bad Request Server: Netscape-Commerce/1.12 Your Browser sent a non-HTTP compliant message Diese Methode funktioniert mit vielen gängigen Anwendungen, die auf bestimmten Port Addressen liegen, versuchen sollte man http (80), ftp (21) SMTP (25), wobei ftp auf NT Maschinen besonders interessant ist. Für eine genauere Information benutzt man am besten wieder das "Schweizer Taschenmesser des TCP/IP" , auch netcat genannt. Erhältlich ist es unter www.l0pht.com/~weld/netcat/index.html Mit netcat kann man wirklich eine ganze Menge anstellen, wie zum beispiel eine Verbindung zu einem TCP/IP Port herstellen (na toll werden einige sagen, aber wartet ab..), dazu muss man folgendes angeben: c:\>nc -v www.dummy.org 80 www.dummy.org [192.168.202.33] 80 (7) open Wenn man jetzt eine Eingabe macht sollte eine Reaktion von der Gegenseite kommen, etwas in der Art: HTTP/1.1 400 Bad Request Server: Microsoft IIS/4.0 Date: Sat. 03 Mar 2000 04.23 GMT Content-Type: text/html Content-Length: 87