# NetBIOS su TCP

NetBIOS su TCP/IP (NBT, o a volte NetBT) è un protocollo di rete che permette alle applicazioni che si basano su chiamate API al NetBIOS di poter essere utilizzate su reti TCP/IP.
Il NetBIOS è stato sviluppato negli anni 1980, per gestire le comunicazioni su reti molto piccole (di circa una dozzina di computer). Alcune applicazioni utilizzano ancora il NetBIOS, e non sono ben scalabili nelle reti di oggi, con centinaia di computer, specialmente quando sono utilizzati pacchetti di rete NBF. Quando opportunamente configurato, l'NBT permette alle applicazioni di essere attive su vaste reti TCP/IP (all'interno dell'intera Internet) senza dover apportare modifiche al software, benché sia soggetto verosimilmente a problemi di sicurezza.
L'NBT è definito dai documenti standard RFC 1001 e 1002.

## Servizi

Il NetBIOS fornisce tre diversi servizi:
* Servizio dei Nomi (Name service) per la registrazione e la risoluzione dei nomi delle risorse (porte: 137/udp e 137/tcp)
* Servizio di distribuzione dei Datagrammi per la comunicazione senza connessione (connectionless) (porta: 138/udp)
* Servizio di sessione per la comunicazione orientata alla comunicazione (connection-oriented) (porta: 139/tcp)
Il NBT implementa tutti i seguenti servizi.

### Servizio dei Nomi

Nel NetBIOS, ogni partecipante deve registrarsi sulla rete utilizzando un nome unico di massimo 15 caratteri. Nelle vecchie reti ereditate (legacy networks), quando una nuova applicazione voleva registrare un suo nome, doveva trasmettere un messaggio in broadcast che diceva "C'è qualcuno attualmente che sta utilizzando quel nome?" ed attendere una eventuale risposta. Se non riceveva alcuna risposta di ritorno allora era sicura che quel nome non era in uso. Comunque, il tempo di attesa era di alcuni secondi, rendendo la registrazione del nome un processo molto lungo, l'unico modo per sapere se un nome era registrato era quello di non ricevere alcuna risposta.
L'NBT può implementare un repositori centrale, o "Servizio dei Nomi (Name Service), che memorizza tutte le registrazioni dei nomi. Un'applicazione che vuole registrare un nome dovrebbe quindi contattare il server dei nomi (che ha un indirizzo di rete conosciuto) e chiedere se il nome è già registrato, inviando un pacchetto "Name Query". Questo metodo è molto veloce, poiché il server dei nomi risponde immediatamente in modo negativo se il nome non è già presente nel database, il che significa che è disponibile. Il servizio dei nomi, secondo le specifiche RFCs 1001 e 1002, è chiamato NetBIOS Naming Service o NBNS. Microsoft WINS è un'implementazione del NBNS. Va ricordato che a causa del costante sviluppo nel modo in cui il servizio dei nomi gestisce i conflitti, i nomi di gruppo ("Group Names") variano da produttore a produttore e possono essere differenti in base alla versione, ad esempio per l'introduzione di un service pack.
I formati di pacchetto del Name Service sono identici al DNS. Le differenze sostanziali sono nell'aggiunta della query NetBIOS "Node Status", e i pacchetti di registrazione dinamica e segnalazione di conflitto. Questi sono incapsulati nel UDP. In seguito l'implementazione ha incluso una parte opzionale del nome, detta Scope, rendendo il nome NetBIOS gerarchico come il DNS, ma è usato raramente.
Inoltre, per iniziare una sessione o per inviare un datagramma ad un particolare host anziché diffondere il datagramma in broadcast, NBT dovrà determinare l'Indirizzo IP dell'host per un dato nome NetBIOS; questo si ottiene diffondendo in broadcast un pacchetto "Name Query", e/o inviandolo ad un server dei Nomi NetBIOS. La risposta sarà l'Indirizzo IP dell'host risulta registrato sul server con quel nome.
È interessante notare che il NBNS è uno dei primi servizi distribuiti e dinamici e propriamente peer-to-peer per la registrazione dei nomi. Il protocollo NBNS è stato criticato a seguito di una errata preconfigurazione dello stesso da parte di Microsoft nei primi sistemi operativi: così il protocollo si è guadagnato la cattiva fama di essere troppo presente (chiacchierone,'chatty') creando con molto traffico nelle reti dovuto alla continua registrazione dinamica dei nomi in diversi protocolli contemporaneamente (IPX/SPX, NBF and TCP/IP), invece il problema era imputabile al fatto che gli utenti lasciavano in una configurazione sbagliata (predefinita da Microsoft) le proprie macchine collegate in rete, creando così dei problemi alle proprie reti. I principi implementati nel NBNS sono stati reimplementati più volte, anche in sistemi come ZeroConf and MobileIP.

### Servizio di distribuzione Datagrammi

La modalità Datagramma è non orientata alla connessione ("connectionless"); i datagrammi NetBIOS sono inviati in UDP. Un datagramma viene inviato con pacchetto "Direct Unique" o "Direct Group" se è stato inviato ad un particolare nome NetBIOS, oppure con pacchetto "Broadcast" se è stato inviato a tutti i nomi NetBIOS della rete.

### Servizio di Sessione

La modalità di Sessione consente a due computer di stabilire una connessione per una "conversazione", permette di gestire messaggi più grandi, e fornisce una gestione degli errori per garantire l'integrità dei messaggi.
Le sessioni vengono stabilite con lo scambio di pacchetti. Il computer che inizia la sessione tenta di creare una connessione TCP sulla porta 139 del computer con il quale intende stabilire la sessione. Se la connessione viene creata con successo, il computer che ha iniziato la sessione invia sulla connessione un pacchetto "Session Request" con i nomi NetBIOS dell'applicazione che sta iniziando la sessione ed il nome NetBIOS del computer con il quale deve essere stabilita la sessione. Il computer con il quale la sessione deve essere stabilita risponderà con un "Positive Session Response", che indica può essere stabilita la sessione, altrimenti con un "Negative Session Response" che indica che la sessione non può essere stabilita (oppure poiché il computer non si aspettava sessioni a quel nome, o poiché non c'erano risorse disponibili per stabilire una sessione con quel nome).
Stabilita una sessione i dati sono trasmessi in pacchetti "Session Message". Il TCP gestisce il controllo di flusso e ritrasmissione di tutti i pacchetti di servizio di sessione, e la divisione del flusso dei dati sul quale sono trasmessi i pacchetti in datagrammi IP abbastanza piccoli da adattarsi alla grandezza dei pacchetti del Link-Layer.
Le sessioni vengono chiuse con la chiusura della connessione TCP

## Vulnerabilità nella Sicurezza

I server Web sono tipicamente, ma non esclusivamente, il primo punto d'impatto dei vettori d'attacco tramite internet. Le porte di rete (LAN) Local area network, progettualmente, danno informazione e spesso diventano conseguentemente obbiettivo della maggior parte degli attacchi su reti Client-Server.
Molti servizi che sono vulnerabili a questi tipi di attacco, possono essere disabilitati senza problemi, in funzione dell'impatto organizzativo sui workflow. Questo è maggiormente vero nel caso di servizi di rete incentrati per natura in reti Intranet.
Tra i protocolli di rete sono che si dimostrano particolarmente vulnerabili nel fornire questi servizi ci sono: il protocollo Server Message Block (SMB) ed il NetBIOS over TCP/IP. Entrambi i servizi possono rivelare quantità di informazioni dettagliate e vitali in termini di sicurezza al riguardo delle reti esposte. Quando non confinati, i protocolli NetBIOS over TCP/IP and SMB forniscono vettori ricorrenti per attacchi malevoli sulla rete. Specificamente, il NetBIOS fornisce ai malintenzionati i mezzi per mappare la rete e spostarsi liberamente nella intranet compromessa. Per quanto riguarda i server Web pubblici, nessun di questi servizi NBT e SMB, sono necessari al corretto funzionamento di un server web pubblico e la disabilitazione di entrambi in questi scenari può migliorare di molto il livello di sicurezza di una rete.

## Diminuzione dell'importanza nelle reti Client-Server post-NT

In relazione alle reti di tipo client-server su sistemi successivi a MS-Windows 2000/NT, il NetBIOS sta effettivamente diventando un protocollo obsoleto. Il NetBIOS era inoltre sviluppato per reti LAN non instradabili. Nella maggioranza delle reti create dopo l'anno 2000 con sistemi Windows 2000 o successivi, il NetBIOS effettivamente offre una retro-compatibilità con dispositivi di rete che hanno una compatibilità precedente al DNS. Il ruolo centrale del NetBIOS nelle reti Client-Server (ed anche in quelle reti in cui sono collegate tra loro periferiche hardware che precedono l'introduzione della compatibilità DNS) è quello di fornire la risoluzione dei nomi per i computer e per le periferiche di rete. Inoltre, permette all'hardware di rete di poter essere acceduto e condiviso, e rende possibile la mappatura e la navigazione delle cartelle di rete, delle condivisioni e delle stampanti condivise, dei fax, ecc. Nella sua capacità primaria, agisce come un protocollo dello strato sessione spostato sopra il TCP/IP per fornire la risoluzione dei nomi ai computer ed alle cartelle condivise. In finale, le reti Client-Server basate su Windows 2000, e successive, non hanno bisogno di questi mezzi poco sicuri per la risoluzione dei nomi e l'indirizzamento o l'accesso alle cartelle condivise in rete.

## Risoluzione dei problemi relativi al NetBIOS
### Nbtstat

il comando Nbtstat è stato creato per fornire un aiuto alla risoluzione di problemi relativi alla risoluzione dei nomi NetBIOS. Quando una rete funziona normalmente, il NetBIOS over TCP/IP (NetBT) risolve i nomi NetBIOS in indirizzi IP. Questo viene ottenuto attraverso diverse opzioni per la risoluzione dei nomi NetBIOS, inclusa la cache locale di ricerca, la richiesta al server WINS, i pacchetti broadcast, la ricerca nel file LMHOSTS, la ricerca nel file Hosts, e la richiesta al server DNS.
Il comando nbtstat rimuove e corregge gli inserimenti precaricati utilizzando un numero di opzioni switch case-sensitive (con caratteri Maiuscolo-minuscolo). Il comando nbtstat -a < name > esegue un comando di richiesta di stato all'interfaccia NetBIOS del computer con il nome specificato nel campo < name>. Il comando di stato dell'interfaccia riporta la tabella locale dei nomi NetBIOS per quel computer, oltre all'indirizzo di rete fisica (MAC address) della scheda di rete (interfaccia). il comando nbtstat -A < IP address > esegue la stessa funzione utilizzando un indirizzo IP di destinazione anziché un nome da risolvere in indirizzo IP.
Nbtstat è uno strumento diagnostico per il NetBIOS over TCP/IP. È incluso in molte versioni di sistemi operativi Microsoft Windows. Il suo scopo primario è quello di fornire informazioni che aiutino a risolvere i problemi nella risoluzione dei nomi NetBIOS.
Path: C:\Windows\System32\nbtstat.exe Ambienti operativi: 32-bit Processore di comandi, cmd-Shell : C:\Windows\System32\cmd.exe, e non C:\Windows\SysWOW64\cmd.exe
Ci sono molti comandi simili ad Nbtstat e che permettono molte opzioni come: ricerca nella cache locale, richiesta WINS Server, richiesta broadcast, ricerca in file LMHOSTS, e ricerca in file Hosts. Non è utilizzato per richieste al server DNS.

#### Sintassi

I parametri comuni sono: nbtstat -c: Elenca la memoria cache di NBT dei nomi remoti [computer] e dei relativi indirizzi IP. nbtstat -n: Elenca i nomi NetBIOS locali. nbtstat -r: Elenca i nomi risolti mediante broadcast e WINS. nbtstat -R: Cancella il contenuto della tabella dei nomi cache remota e la ricarica. nbtstat -RR: Invia pacchetti di rilascio di nomi a WINS e quindi avvia l'aggiornamento nbtstat -s: Elenca la tabella delle sessioni che converte gli indirizzi IP di destinazione in nomi computer NETBIOS. nbtstat -S: Elenca la tabella delle sessioni con gli indirizzi IP di destinazione.