Cybersecurity
Corso Cybersecurity Specialist
Corso Blue Team
Corso Ethical Hacking
Corso Incident Responder
Corso Secure Coding
Sistemi & Cloud
Corso Sistemista e Networking
Corso Microsoft 365 Administration
Corso Windows Server Administration
Corso AZ-104 Azure Administrator
Corso Active Directory
Data, AI & Programmazione
Corso Programmazione C#
Corso ASP.NET
Corso React
Corso Machine Learning
Corso Power BI PL-300
Digital Skills & Trends
Corso Microsoft 365 per utenti
Corso Security Awareness
Corso NIS2
Corso AI per aziende
Corso Microsoft 365 Copilot
Modalità & extra
Calendario
Catalogo Pdf
Percorsi Microsoft
Corsi finanziati
Open Badge digitali
Tutti i corsi di Cybersecurity
Tutti i corsi di Sistemi & Cloud
Tutti i corsi di Data & Programmazione
Tutti i corsi di Digital Skills & Trends

Cybersecurity
Consulenza Cybersecurity
Penetration Test
Assessment AD
SOC As a Service
Data Protection DPaaS
Microsoft & Cloud
Soluzioni Modern Workplace
Migrazione Microsoft 365
Microsoft 365 Security Assessment
Consulenza Cloud
Cloud Backup & Recovery
Infrastruttura & Sistemi
Network Security
Firewall aziendali
DNS Security
Endpoint Management (UEM)
Secure Access Service Edge (SASE)
Manifatturiero & Industria 4.0
Servizi, Logistica & GDO
Sanità & Pharma
Pubblica Amministrazione
Studi Professionali

Progettiamo la tua soluzione su misura →

La nostra identità
Certificazioni & Partner
Portfolio clienti
ISO 9001

Nexsys Srl è certificata
ISO 9001:2015

Microsoft Solutions Partner

Siamo Microsoft Solution Partner per il Modern Work

APPROFONDIMENTI E NEWS

SMBleedingGhost: unione di SMBleed (CVE-2020-1206) e SMBGhost

Smb è un bug presente su Windows da diverso tempo e può permettere ad hacker e malintenzionati per rubare password o credenziali ai siti o ai servizi remoti presenti sulla rete.
Il nome del bug si riferisce ovviamente all'omonimo protocollo di rete Server Message Block incluso in tutte le versioni di Windows. Attraverso il bug Smb è possibile effettuare attacchi di tipo man-in-the-middle intercettando il traffico cifrato verso un server remoto e reindirizzandolo verso un server SMB di proprietà dell'hacker e forzando Windows a fornire le credenziali di accesso.
Il generico bug Smb si suddivide poi in due sotto-vulnerabilità:

  • SMBGhost in cui la falla può essere sfruttata da remoto inviando pacchetti opportunamente creati ad una porta SMB connessa ad Internet
  • SMBleed di più recente scoperta. Grazie a lacune nella gestione dei messaggi SMB v3 compressi nei servizi di sistema, un malintenzionato senza autorizzazione potrebbe riuscire a recuperare porzioni di memoria di sistema tramite l'invio di messaggi SMB v3 riuscendo ad ottenere chiavi di cifratura, dati di accesso o configurazioni

SMB: come si verifica il bug

A livello di funzionalità. il bug è simile a quanto succede per SMBGhost per la funzione Srv2DecomporessDara nel driver del server SMB srv2.sys. Ecco qui di seguito la versione semplificata della funzione:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
typedef struct _COMPRESSION_TRANSFORM_HEADER
{
    ULONG ProtocolId;
    ULONG OriginalCompressedSegmentSize;
    USHORT CompressionAlgorithm;
    USHORT Flags;
    ULONG Offset;
} COMPRESSION_TRANSFORM_HEADER, *PCOMPRESSION_TRANSFORM_HEADER;
typedef struct _ALLOCATION_HEADER
{
    // ...
    PVOID UserBuffer;
    // ...
} ALLOCATION_HEADER, *PALLOCATION_HEADER;
NTSTATUS Srv2DecompressData(PCOMPRESSION_TRANSFORM_HEADER Header, SIZE_T TotalSize)
{
    PALLOCATION_HEADER Alloc = SrvNetAllocateBuffer(
        (ULONG)(Header->OriginalCompressedSegmentSize + Header->Offset),
        NULL);
    If (!Alloc) {
        return STATUS_INSUFFICIENT_RESOURCES;
    }
    ULONG FinalCompressedSize = 0;
    NTSTATUS Status = SmbCompressionDecompress(
        Header->CompressionAlgorithm,
        (PUCHAR)Header + sizeof(COMPRESSION_TRANSFORM_HEADER) + Header->Offset,
        (ULONG)(TotalSize - sizeof(COMPRESSION_TRANSFORM_HEADER) - Header->Offset),
        (PUCHAR)Alloc->UserBuffer + Header->Offset,
        Header->OriginalCompressedSegmentSize,
        &FinalCompressedSize);
    if (Status < 0 || FinalCompressedSize != Header->OriginalCompressedSegmentSize) {
        SrvNetFreeBuffer(Alloc);
        return STATUS_BAD_DATA;
    }
    if (Header->Offset > 0) {
        memcpy(
            Alloc->UserBuffer,
            (PUCHAR)Header + sizeof(COMPRESSION_TRANSFORM_HEADER),
            Header->Offset);
    }
    Srv2ReplaceReceiveBuffer(some_session_handle, Alloc);
    return STATUS_SUCCESS;
}

Quindi che operazioni compie la funzione Srv2DecompressData?
La funzione riceve il messaggio compresso inviato dal client, alloca la quantità necessaria di memoria e decomprime i dati. Se dunque l'offset non è zero prima dei dati compressi vengono copiati i dati posizionati come all'inizio del buffer allocato.

smbleed e smbghost

SMBGhost è nato a causa del non controllo di overflow dei numeri interi. Microsoft lo ha risolto ma nonostante questo rimane un bug che crea difficoltà.

OriginalCompressedSegmentSize

Nell'immagine precedente SMBGhost è stato utilizzato impostando il campo OriginalCompressedSegmentSize con un numero grandissimo causando overflow di numeri interi. Cosa succederebbe se lo impostassimo poco più grande dei dati decompressi che inviamo? Per esempio se la dimensione dei nostri dati compressi è y, a seguito della decompressione e impostiamo OriginalCompressedSegmentSize su y + 0x1000 otterremo questo:

originalcompressedsegmentsize

Funzionamento del bug

Ora utilizziamo un messaggio SMB per verificare la vulnerabilità. Il messagggio è strutturato con campo come la quantità in byte da scrivere e i flag seguiti da un buffer di lunghezza variabile. Va bene per utilizzare il bug dato che possiamo creare un messaggio in modo da specificare l'intestazione ma comunque il buffer a lunghezza variabile contiene dati non inizializzati.

1
2
3
4
5
6
// HACK: fake size
if (((Smb2SinglePacket)packet).Header.Command == Smb2Command.WRITE)
{
    ((Smb2WriteRequestPacket)packet).PayLoad.Length += 0x1000;
    compressedPacket.Header.OriginalCompressedSegmentSize += 0x1000;
}

Il bug si applica a tutti i messaggi e può essere sfruttato senza autenticazione. Inoltre la memoria trapelata proviene da allocazioni precedenti nel pool NonPagedPoolNx e dato che controlliamo la dimensione di allocazione, potremo essere in grado di controllare i dati trapelati in una certa misura.

smb

Versioni di Windows interessate

Ecco quali sono le versioni di Windows vulnerabili

Windows 10 versione 2004

AggiornamentoSMBGhostSMBleed
KB4557957Non vulnerabileNon vulnerabile
Prima di KB4557957Non vulnerabileVulnerabile

Versione di Windows 10 1909

AggiornamentoSMBGhostSMBleed
KB4560960Non vulnerabileNon vulnerabile
KB4551762Non vulnerabileVulnerabile
Prima di KB4551762VulnerabileVulnerabile

Versione di Windows 10 1903

AggiornamentoSMBGhostSMBleed
KB4560960Non vulnerabileNon vulnerabile
KB4551762Non vulnerabileVulnerabile
KB4512941VulnerabileVulnerabile

SMB: possibili soluzioni

Per risolvere i bug SMBleed e SMBGhost consigliamo di eseguire le seguenti operazioni:

  1. Aggiornare Windows dovrebbe risolvere completamente il problema
  2. Il blocco della porta 445 interromperà i movimenti laterali utilizzando queste vulnerabilità
  3. Applicazione dell'isolamento dell'host
  4. Disabilitazione della compressione SMB 3.1.1 (non è una soluzione consigliata)

SMB fa parte di alcuni bug di Windows per la quale spesso si consiglia di rivolgersi ad esperti informatici per risolvere il problema. Nexsys offre un servizio di assistenza sistemistica, ancheda remoto, che potrà aiutare voi e la vostra azienda quando vi troverete di fronte a vulnerabilità informatiche che mettono a repentaglio la sicurezza informatica dei vostri sistemi. Il nostro servizio di sicurezza informatica  vi permetterà di scovare vulnerabilità e tornare operativi al 100%.

Preferisci compilare il modulo? Scrivi i tuoi dati qui sotto

Il servizio telefonico è attivo dal lunedì al venerdì dalle 8:00 alle 18:00 al numero 0452456669. Puoi anche compilare il modulo sottostante: