L’objectif de ce cours est de présenter le protocole SMB autour des axes suivants :

  • Fonctionnement et origine du protocole
  • Intérêt d’un point de vue cybersécurité
  • Attaques connues
  • Détection

Présentation du protocole

Dans les années 80 IBM invente le protocole SMB, l’objectif étant le partage de ressources au travers du réseau, par exemple :

  • Imprimantes
  • Répertoires
  • Routeurs

Le protocole est la par la suite popularisé par Microsoft, cette première implémentation s’appuie sur la couche Netbios (le port utilisé est alors 139). Par la suite le protocole sera porté sur TCP/IP (port 445). Aujourd’hui il est avant tout utilisé dans les environnements Windows et l’Active Directory. Toutefois, il existe une implémentation Linux nommée Samba.

SMB et Cybersécurité

SMB est un protocole particulièrement intéressant d’un point de vue cybersécurité :

  • Il arrive fréquemment que des failles soient découvertes dans SMB, l’exemple le plus marquant étant probablement ms17-010, aussi nommé Eternal Blue. Une faille utilisée par le ransomware Wannacry.
  • Les shares peuvent être utilisés pour exfiltrer des données.
  • SMB peut faire office de relai ou pivot lors d’une exploitation.
  • Les shares peuvent contenir des informations sensibles / utiles pour les attaquants, par exemple :
    • Des mots de passe
    • Des clés SSH
    • Des documents confidentiels

Utilisation de base de SMB

Dans une machine Windows il est possible de lister les shares d’une via la commande net view :

C:\> net view \\dc01.contoso.local /all
Shared resources at \\dc01.contoso.local

Share name  Type  Used as  Comment

-------------------------------------------------------------------------------
ADMIN$      Disk           Remote Admin
C$          Disk           Default share
IPC$        IPC            Remote IPC
NETLOGON    Disk           Logon server share
SYSVOL      Disk           Logon server share
The command completed successfully.

Source : Attacking Active Directory: 0 to 0.9

Il est possible de monter un share via la commande net use ou bien on peut accéder directement à ce dernier :

C:\> dir \\dc01\sysvol
 Volume in drive \\dc01\sysvol has no label.
 Volume Serial Number is 609D-528B

 Directory of \\dc01\sysvol

28/11/2020  11:02    <DIR>          .
28/11/2020  11:02    <DIR>          ..
28/11/2020  11:02    <JUNCTION>     contoso.local [C:\Windows\SYSVOL\domain]
               0 File(s)              0 bytes
               3 Dir(s)  20,050,214,912 bytes free

Source : Attacking Active Directory: 0 to 0.9

Shares par défaut

Par défaut un serveur SMB possédera un ensemble de shares, parmi eux on peut citer :

Les shares administratifs dont le nom fini par le symbole $ :

  • ADMIN$ : Notamment utilisé par psexec pour l’exécution de commandes.
  • PRINT$ : Utilisé par les imprimantes.
  • IPC$ : Inter-process communication, détaillé dans la section suivante.

Il existe d’autres shares présents par défaut :

  • SYSVOL : Utilisé pour fournir les GPO dans le domaine, peut contenir des mots de passe (voir Infosecwriteups.
  • NETLOGON : Contient les scripts à exécuter lorsqu’un utilisateur se connecte. C’est également un canal pour l’authentification des utilisateurs.

Attaques et outils fréquemment utilisés

De nombreux outils permettent d’utiliser SMB et de l’énumérer, voici quelques exemples :

  • smbclient : Utilitaire en ligne de commande permettant d’accéder à des partages SMB.
  • enum4linux : Outil permettant l’énumération SMB dans un environnement Windows ou Samba, se basant notamment sur smbclient. Je vous invite à regarder son code source pour en comprendre le fonctionnement : GitHub Cisco.
  • crackmapexec : Aussi appelé par son sigle CME est un outil versatile qui permet de lancer de nombreuses attaques dans un environnement Windows. Une partie étant dédiée à SMB, CME permet via son système modulaire de réaliser une énumération complète. Aujourd’hui le projet n’est plus tenu à jour et s’est vu remplacer par un fork nommé NetExec.

Vulnérabilités connues

Au travers des différentes versions, SMB a connu plusieurs vulnérabilité. Cette section a pour but de présenter deux exemples.

Zerologon

Zerologon (CVE-2020-1472) est une vulnérabilité permettant de devenir Administrateur du domaine en exploitant le protocole Netlogon. Plus précisément, l’attaque vise l’implémentation de l’algorithme AES de la part de Microsoft dans laquelle une erreur est présente.

Cette room Tryhackme explique clairement le fonctionnement de la vulnérabilité : https://tryhackme.com/r/room/zer0logon

EternalBlue

EternalBlue (CVE-2017-0144) est un exploit développé par la NSA. Ce dernier se voit révélé par un groupe nommé The Shadow Brokers. Son fonctionnement exploite en réalité SMBv1, souvent resté activé dans les environnements Windows. L’attaque permet une exécution de code à distance (RCE).

La faille a été massivement utilisée par le ransomware Wannacry.

Je vous invite à consulter le repository suivant pour comprendre son fonctionnement : https://github.com/worawit/MS17-010

Et à exploiter la vulnérabilité via la room Tryhackme suivante :,https://tryhackme.com/r/room/blue

Exfiltration de données et contenu des shares

Les shares peuvent être utilisés par les attaquants pour exfiltrer des données; faire office de relais ou encore pivoter lors d’une exploitation.

Les shares peuvent contenir des informations sensibles / utiles pour les attaquants, par exemple :

  • Des mots de passe
  • Des clés SSH
  • Des documents confidentiels

Détection d’attaques SMB

D’un point de vue détection, différentes actions sont possible vis à vis de SMB, cette section présente quelques exemples.

Smbexec

Dans un environnement Windows, lorsque l’on souhaite administrer une machine à distance en ligne de commande, l’outil ssh n’est pas disponible (avant Windows Server 2019 / Windows 10 build 1809).

C’est pourquoi Microsoft a développé PSExec via sa branche Sysinternals qui fournit différents outils, notamment pour les administrateurs réseau. PSExec permet donc de contrôler une machine à distance, il s’agit d’un outil de choix pour les attaquants (voir : MITRE). L’outil n’est pas installé par défaut mais peut être utilisé de façon légitime ou bien par des attaquants lors d’une compromission.

Il peut être facile de détecter une installation de PSExec de la part d’attaquant étant donné que ces derniers doivent déposer le binaire.

Smbexec quant à lui, utilise un share SMB pour relayer les commandes. Pour cela deux options sont possibles :

  • Utilisation d’un share existant.
  • Création d’un serveur SMB temporaire sur la machine de l’attaquant.

Cette solution a donc pour avantage de n’installer aucun binaire sur la machine de la victime. Cependant l’opération génère un certain nombre de logs qui permettent la détection, notamment l’événement 5145 avec l’event mask 0x3.

SMB Create Remote File Admin Share

Cette règle a pour but de détecter l’utilisation du share C$, qui permet d’inspecter l’ensemble des fichiers de la machine (cela requiert les droits administrateurs). Lorsqu’un compte non machine effectue cette opération il peut s’agir d’un indicateur d’intrusion :

title: SMB Create Remote File Admin Share
id: b210394c-ba12-4f89-9117-44a2464b9511
status: test
description: Look for non-system accounts SMB accessing a file with write (0x2) access mask via administrative share (i.e C$).
references:
    - https://github.com/OTRF/ThreatHunter-Playbook/blob/f7a58156dbfc9b019f17f638b8c62d22e557d350/playbooks/WIN-201012004336.yaml
    - https://securitydatasets.com/notebooks/atomic/windows/lateral_movement/SDWIN-200806015757.html?highlight=create%20file
author: Jose Rodriguez (@Cyb3rPandaH), OTR (Open Threat Research)
date: 2020/08/06
modified: 2021/11/27
tags:
    - attack.lateral_movement
    - attack.t1021.002
logsource:
    product: windows
    service: security
detection:
    selection:
        EventID: 5145
        ShareName|endswith: 'C$'
        AccessMask: '0x2'
    filter:
        SubjectUserName|endswith: '$'
    condition: selection and not filter
falsepositives:
    - Unknown
level: high

Source : SIGMA HQ

Sources