NetBIOS
Aus HackerWiki
Contents |
Was ist NETBIOS?
2006 by bitmuncher(at)bitmuncher(dot)de
NetBIOS (Network Basic Input/Output System) wurde ursprünglich von IBM und Sytek als ein Application Programming Interface (API) für Client-Software entwickelt, um auf LAN-Ressourcen zuzugreifen. Seit seiner Entwicklung ist NetBIOS die Basis vieler weiterer Netzwerk-Applikationen geworden. In striktesten Sinne ist NetBIOS eine Interface-Spezifikation um auf Netzwerk-Service zuzugreifen.
NetBIOS, ein Softwarelayer, entwickelt um ein Netzwerk-Betriebssystem mit spezifischer Hardware zu verbinden, ist DER Netzwerk-Controller für IBM's LAN. NetBIOS wurde erweitert um es Programmen, die geschrieben wurden das NetBIOS-Interface zu benutzen, zu erlauben auf IBM Token-Ring-Architekturen zu operieren. Seitdem ist NetBIOS zu einem Industrie-Standard geworden, der in allen NetBIOS-kompatiblen LANS genutzt wird.
NetBIOS erlaubt es Applilkationen sich mit dem Netzwerk zu "unterhalten". Dadurch können Programme unabhängig von der darunter liegenden Hardware arbeiten. Ausserdem wird dem Netzwerk-Programmierer die Entwicklung von Routinen fü die Netzwerk-Fehlerbehandlung und die Low-Level-Adressierung erspart. Die Benutzung des NetBIOS-Interface übernimmt eine Menge Arbeit für ihn.
NetBIOS standardisiert das Interface zwischen Applikationen und den LAN-Operationsmöglichkeiten. Damit kann angegeben werden, zu welchen Schichten des OSI-Modells die Applikation schreiben kann. Dadurch wird die Applikation transportabel zu anderen Netzwerken. In einer NetBIOS-LAN-Umgebung sind Computer dem System über einen Namen bekannt.
Jeder Computer im Netzwerk hat einen permanenten Namen, der in verschiedenartigen unterschiedlichen Wegen programmiert wurde. Auf diese Namen werde ich weiter unten noch genauer eingehen.
PCs in einem NetBIOS-LAN kommunizieren entweder durch Einrichten einer Session oder durch Benutzung von NetBIOS-Datagrammen oder Broadcast-Methoden. Sessions erlauben das Senden grösserer Nachrichten durch Setzen und Handhaben von Fehler-Ermittlungen und -Korrekturen. Diese Kommunikation findet auf einer Eins-zu-Eins-Basis statt. Datagramm- und Broadcast-Methoden ermöglichen es einem Computer mit mehreren anderen Computern gleichzeitig zu kommunizieren, wodurch aber die Nachrichten-Grösse beschränkt wird. Bei der Broadcast- und Datagramm-Methode gibt es keine Fehler-Ermittlung und -Behandlung. Die Datagramm-Methode erlaubt die Kommunikation ohne eine Session aufzubauen.
Jegliche Kommunikation in diesen Umgebungen werden dem NetBIOS durch ein Format, das Network Control Block (NCB) genannt wird, repräsentiert. Für die Allozierung dieser Blöcke im Speicher ist das User-Programm verantwortlich. Diese NCBs werden in Felder unterteilt, die beispielsweise für das Input und Output reserviert sind.
NetBIOS ist ein sehr allgemeines Protokoll, das in heutigen Umgebungen benutzt wird. NetBIOS wird von Ethernet, TokenRing und IBMs PC-Netzwerken unterstützt. Ursprünglich wurde NetBIOS nur entwickelt,
um ein Interface zwischen einer Applikation und dem Netzwerk-Adapter zur Verfügung zu stellen. Seitdem hat es aber einiges an Funktionalität zugelegt.
In NetBIOS wird verbindungsorientierte (TCP) und verbindungslose (UDP) Kommunikation unterstützt. Es unterstützt Broadcast und Multitasking und 3 verschiedene Services: Naming, Session und Datagram.
NetBIOS-Namen
NetBIOS-Namen werden benutzt, um Ressourcen in einem Netzwerk zu identifizieren. Applikationen benutzen diese Namen um eine Session zu starten und zu beenden. Man kann einen einzelnen Rechner mit mehreren Applikationen konfigurieren, wobei jede von ihnen einen eigenen NetBIOS-Namen hat. Jeder PC, der eine Applikation unterstützt hat auch einen NetBIOS-Stationsnamen, der entweder durch einen User definiert oder durch interne Mittel festgelegt wird.
Ein NetBIOS-Name kann aus bis zu 16 alphanumerischen Zeichen bestehen. Der Name muss innerhalb des Netzwerks einzigartig sein. Bevor ein PC, der NetBIOS benutzt, vollständig in einem Netzwerk funktioniert, muss er seinen NetBIOS-Namen registrieren.
Wenn ein Client aktiv wird, gibt er seinen Namen bekannt. Ein Client wird erst dann im Netzwerk registriert, wenn sein Name mit keinem anderen Namen im Netzwerk übereinstimmt. Bei der Registrierung werden folgende Schritte ausgeführt:
- Beim Starten, gibt der Client sich selbst einen Namen und stellt sicher, dass jeder andere Client im Netzwerk diese Information erhält.
- Wenn ein Client bereits diesen Namen benutzt, gibt er seinen Namen bekannt um anzuzeigen, dass der Name bereits benutzt wird. Der Client, der versucht hat, den bereits verwendeten Namen zu benutzen, stoppt alle Versuche, seinen Namen zu registrieren.
- Wenn kein anderer Client im Netzwerk diesen Namen benutzt, schliesst er seine Registrierung ab.
Es gibt 2 Arten von Namen in einer NetBIOS-Umgebung: Eindeutig und Gruppe. Ein eindeutiger Name muss im ganzen Netzwerk einzigartig sein. Ein Gruppen-Name muss nicht einzigartig sein und alle Prozesse, die einen angegebenen Gruppen-Namen haben, gehören zu dieser Gruppe. Jeder NetBIOS-Knoten enthält eine Tabelle aller Namen, die gerade in diesem Knoten benutzt werden.
Die NetBIOS-Namens-Konventionen erlauben bis zu 16 Zeichen in NetBIOS-Namen. Microsoft limitiert die Anzahl der Zeichen allerdings auf 15 und benutzt das letzte Zeichen als NetBIOS-Suffix. Das NetBIOS-Suffix wird durch die Microsoft-NetBIOS-Software benutzt, um die installierte Funktionalität oder die registrierten Devices oder Service zu identifizieren.
Hier ist eine Liste der NetBIOS-Suffixe, die von Microsoft in Windows-NT benutzt wurden. Leider sind mir nicht bekannt, ob in WindowsXP die gleichen benutzt werden. Die Suffixe stehen hier im Hexadezimalformat.
| Name | Nummer | Typ | Benutzung |
|---|---|---|---|
| <computername> | 00 | U | Workstation-Service |
| <computername> | 01 | U | Messenger-Service |
| <\\_MSGBROWSE_> | 01 | G | Master-Browser |
| <computername> | 03 | U | Messenger-Service |
| <computername> | 06 | U | RAS-Server-Service |
| <computername> | 1F | U | NetDDE-Service |
| <computername> | 20 | U | File-Server-Service |
| <computername> | 21 | U | RAS-Client-Service |
| <computername> | 22 | U | Exchange-Interchange |
| <computername> | 23 | U | Exchange-Store |
| <computername> | 24 | U | Exchange-Directory |
| <computername> | 30 | U | Modem-Sharing-Server-Service |
| <computername> | 31 | U | Modem-Sharing-Client-Service |
| <computername> | 43 | U | SMS-Client-Remote-Control |
| <computername> | 44 | U | SMS-Admin-Remote-Control-Tool |
| <computername> | 45 | U | SMS-Client-Remote-Chat |
| <computername> | 46 | U | SMS-Client-Remote-Transfer |
| <computername> | 4C | U | DEC-Pathworks-TCPIP-Service |
| <computername> | 52 | U | DEC-Pathworks-TCPIP-Service |
| <computername> | 87 | U | Exchange-MTA |
| <computername> | 6A | U | Exchange-IMC |
| <computername> | BE | U | Netzwerk-Monitor-Agent |
| <computername> | BF | U | Netzwerk-Monitor-Applikationen |
| <username> | 03 | U | Messenger-Service |
| <domain> | 00 | G | Domain-Name |
| <domain> | 1B | U | Domain-Master-Browser |
| <domain> | 1C | G | Domain-Controllers |
| <domain> | 1D | U | Master-Browser |
| <domain> | 1E | G | Browser-Service-Elections |
| <INet~Services> | 1C | G | Internet-Information-Server |
| <IS~Computer_name> | 00 | U | Internet-Information-Server |
| <computername> | [2B] | U | Lotus Notes Server |
| IRISMULTICAST | [2F] | G | Lotus Notes |
| IRISNAMESERVER | [33] | G | Lotus Notes |
| Forte _$ND800ZA | [20] | U | DCA-Irmalan-Gateway-Service |
U = Unique; G = Group; M = Multihomed; I = Internet Group; D = Domain Name
Um auf einem NT-Server herauszufinden, welche NetBIOS-Namen und -Services benutzt werden, benutze die folgenden NBTSTAT-Befehle:
nbtstat -A [IP-Adresse] bzw.
nbtstat -a [Hostname]
NetBIOS-Sessions
Der NetBIOS-Session-Service stellt einem User-Prozess einen verbindungsorientierten, zuverlässigen, Voll-Duplex-fähigen Nachrichten-Service zur Verfügung. NetBIOS benötigt dabei einen Prozess als Client und einen Prozess als Server. Der NetBIOS-Session-Aufbau benötigt eine vorher bestimmte Cooperation zwischen beiden Stationen. Eine Applikation muss einen Listen-Befehl und die andere Applikation währenddessen einen Call-Befehl ausgeben. Der Listen-Befehl referenziert einen Namen in seiner NetBIOS-Namenstabelle (oder im WINS-Server) und auch der Remote-Name der Applikation muss benutzt werden, um den Session-Partner zu identifizieren. Wenn der Empfänger nicht bereits "lauscht", schlägt der Aufruf fehl. Wenn der Aufruf erfolgreich war, wird jede Applikation über den Session-Aufbau mit der Session-ID informiert. Am Ende der Session kann die Applikation einen Hang-Up-Befehl ausgeben. Für den Session-Service gibt es keine richtige Datenflusskontrolle, da davon ausgegangen wird, dass ein LAN schnell genug ist, den benötigten Traffic zu übertragen.
NetBIOS-Datagramme
Datagramme können an einen bestimmten Namen, an alle Mitglieder einer Gruppe oder (via Broadcast) an das ganze LAN verschickt werden. Wie bei anderen Datagramm-Services auch, sind NetBIOS-Datagramme verbindungslos und unzuverlässig.
Beim Send_Datagram-Befehl muss der Aufrufer den Namen des Ziels angeben. Wenn das Ziel ein Gruppenname ist, erhält jedes Mitglied der Gruppe das Datagramm. Der Aufrufer des Receive_Datagram-Befehls muss den lokalen Namen, für den die Datagramme empfangen werden sollen angeben. Der Receive_Datagram-Befehl gibt zusätzlich zu den aktuellen Datagrammdaten auch den Namen des Senders zurück. Wenn NetBIOS ein Datagramm erhält und keine Receive_Datagram-Befehle aktiv sind, wird das Datagramm verworfen.
Der Send_Broadcast_Datagram-Befehl sendet die Nachricht an alle NetBIOS-Systeme im lokalen Netzwerk. Wenn ein Broadcast-Datagramm von einem NetBIOS-Knoten empfangen wird, erhält jeder Prozess, der einen Receive_Broadcast-Datagram-Befehl ausführt, das Datagramm. Wenn kein Prozess im empfangenden Knoten diesen Befehl ausführt, wird das Datagramm verworfen.
NetBIOS ermöglicht es einer Applikation eine Session mit einem anderen Device aufzubauen und sorgt dafür, dass die Network-Redirector- und Transaction-Protokolle eine Anfrage zu und von einem bestimmten Rechner durchlassen. NetBIOS manipuliert dabei nicht die Daten. Die NetBIOS-Spezifikation definiert nur ein Interface zu dem Netzwerkprotokoll, das benutzt wird um diesen Service zu erreichen, nicht das Protokoll selbst. Dazu wurde es ursprünglich mit einem Netzwerk-Protokoll namens NetBEUI (network extended user interface) zusammengebracht. Die Assoziation vom Interface und dem Protokoll hat schon einige Male für Verwirrung gesorgt, aber beide sind verschieden.
Netzwerkprotokolle stellen mindestens eine Methode zum Ermitteln und Verbinden zu einem bestimmten Service zur Verfügung. Dies wird normalerweise durch Konvertierung eines Knoten- oder Service-Namen in eine Netzwerk-Adresse (Namensauflösung) gemacht. Bevor Verbindungen mit TCP/IP aufgebaut werden können, müssen NetBIOS-Service-Namen in IP-Adressen aufgelöst werden. Die meisten NetBIOS-Implementationen für TCP/IP vervollständigen die Namensauflösung durch Benutzung von Broadcast oder LMHOSTS-Dateien. In Microsoft-Umgebungen werden auch NetBIOS-Name-Server benutzt, die als WINS bekannt sind.
NetBEUI erklärt
NetBEUI ist eine erweiterte Version des NetBIOS-Protokolls, das von Netzwerk-Betriebssystemen benutzt wird. Es formalisiert den Transport-Frame, der in NetBIOS nie standardisiert wurde und fügt verschiedene Funktionen hinzu. Der Transport-Layer-Treiber wird häufig vom Microsoft LAN-Manager benutzt. NetBEUI implementiert das OSI-LLC-2-Potokoll. NetBEUI ist das original PC-Netzwerk-Protokoll und -Interface das von IBM für den LanManager-Server erstellt wurde. Dieses Protokoll wurde später von Microsoft für ihre Netzwerk-Produkte übernommen. Es spezifiziert den Weg, der von "Higher-Level-Software" benutzt wird um Nachrichten über das NetBIOS-Frame-Protokoll zu versenden und zu empfangen. Dieses Protokoll läuft über dem Standard-802.2-Data-Link-Protokoll-Layer.
NetBIOS-Bereiche
Eine NetBIOS-Bereich-ID stellt einen erweiterten Namens-Service für das NetBIOS-über-TCP/IP-Modul (bekannt als NBT) zur Verfügung. Der primäre Zweck von NetBIOS-Bereich-IDs ist das Isolieren von NetBIOS-Traffic in einem einzelnen Netzwerk, der nur zu dem Knoten mit der gleichen NetBIOS-Bereich-ID gehört. Die NetBIOS-Bereich-ID ist ein Zeichen-String, der an den NetBIOS-Namen angehängt wird. Die NetBIOS-Bereich-ID muss für zwei Hosts übereinstimmen, wenn diese miteinander kommunizieren möchten. Sie erlaubt es auch, dass zwei Rechner den gleichen NetBIOS-Namen benutzen, wenn ihre Bereichs-ID unterschiedlich ist.
Vorwort zu SMBs
Oft werde ich gefragt, was NetBIOS ist und was SMBs sind. Ich hoffe, dass ich die Frage zu NetBIOS hier bereits ausreichend beantwortet habe. Der folgende Abschnitt wurde von mir geschrieben, um es den Leuten einfacher zu machen, SMBs zu verstehen.
Was sind SMBs
Server Message Blocks sind eine Art von "Nachrichten-Protokoll" das LAN-Manager-Clienten und -Server (wie auch NT) benutzen, um miteinander zu kommunizieren. SMBs sind ein "Higher-Level-Protocol", das über NetBEUI, NetBIOS über IPX und NetBIOS über TCP/IP (oder NBT) transportiert werden kann.
SMBs werden von Windows 3.xx, Win95, WinNT und OS/2 benutzt. Wenn es um die Sicherheit geht, bleibt dazu nur zu sagen, dass SMBs vor allem benutzt werden, um das Sharing von Ordnern, der Registrierung und anderen System-Servicen zu ermöglichen, was sie zu einem ziemlichen Sicherheitsrisiko werden lässt.
Das SMB-Protokoll wurde ursprünglich von IBM entwickelt und dann gemeinschaftlich von Microsoft und IBM weiter ausgebaut. Netzwerk-Anfragen, die SMBs zum Senden benutzen, werden als Netzwerk-Kontroll-Block-Daten-Strukturen (NCB-Daten-Strukturen) verschlüsselt. Die NCB-Daten-Strukturen werden zur Übertragung über das Netzwerk ins SMB-Format verschlüsselt. SMB wird in vielen Netzwerk-Software-Produkten von Microsoft und IBM benutzt:
- MS-Net
- IBM PC Network
- IBM LAN Server
- MS LAN Manager
- LAN Manager für UNIX
- DEC Pathworks
- MS Windows für Workgroups (Arbeitsgruppen)
- Ungermann-Bass Net/1
- NT-Netzwerke durch Support für LAN Manager
SMB-Nachrichten können in vier Kategorien unterteilt werden:
| Session Control | Wird benutzt, um eine Redirector-Verbindung mit einer Remote-Ressource (z.B. einem Ordner oder einem Drucker) aufzubauen oder abzubrechen. |
|---|---|
| File | Wird benutzt um auf eine Dateisystem-Ressource zuzugreifen oder eine solche zu manipulieren. |
| Printer | Wird vom Redirector benutzt um Daten an einen Remote-Drucker oder eine Warteschleife zu senden und um den Status eines Remote-Druckers abzufragen. |
| Message | Wird von Applikationen und System-Komponenten benutzt um Unicast- oder Broadcast-Nachrichten zu versenden. |
Der Redirector
Der Redirector ist die Komponente, die es einem Client ermöglicht, auf eine Ressource auf einem Remote-Computer zuzugreifen, als sei sie auf dem lokalen Rechner vorhanden. Dabei kommuniziert der Redirector mit anderen Computern, indem er einen Protokoll-Stack benutzt.
Die Hauptaufgabe des Redirectors ist es, Remote-Anfragen so zu formatieren, dass sie von einer Remote-Station (z.B. einem Dateiserver) verstanden werden können und sie auf ihren Weg durch das Netzwerk zu schicken.
Der Redirector benutzt die SMB-Struktur als "Standard-Fahrzeug" um die Anfragen zu versenden. SMBs sind auch das "Fahrzeug" das von der Station benutzt wird, um Anfragen zu beantworten.
Jeder SMB besteht aus einen Header der Befehlscode enthält (dieser enthält die Aufgabe, von der der Redirector will, dass diese von der Remote-Station ausgeführt wird) und verschiedenen Umgebungs- und Parameter-Feldern (diese geben an, wie der Befehl übertragen werden soll).
Zusätzlich zum Header enthält das letzte Feld im SMB bis zu 64kB Daten, die an die Remote-Station gesendet werden sollen.
Dies soll nun also als Einführung in NetBIOS vorerst ausreichen. Weiterführende Informationen sind problemlos im Netz zu finden.

