SMB

SMB

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

  • Fonctionnement 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 :

https://doc.ubuntu-fr.org/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 utilisé 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 de la machine courante via la commande net view.

On peut référence une machine via son nom de domaine ou bien son nom Netbios :

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 à un share :



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 un dollar $ :
    • 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 :

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 : https://github.com/CiscoCXSecurity/enum4linux/blob/master/enum4linux.pl
  • 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 :
LIste non-exhaustive des modules CME

Aujourd’hui le projet n’est plus tenu à jour et s’est vu remplacer par un fork nommé NetExec :

https://github.com/Pennyw0rth/NetExec

Exemple

Voici un exemple d’utilisation de smbmap :

Ici on utilise les options suivantes :

  • -H : précise le serveur cible (Host), ici 10.129.212.135
  • -u : utilisation de la null session

Après avoir remarqué la présence d’un share nommé data, on se connecte à ce dernier puis on utilise les commandes suivantes :

  • recurse ON : On active la récursivité pour les opérations sur les fichiers.
  • prompt OFF : On désactive les demandes de confirmation avant l’exécution de commande.
  • mget * : On télécharge les fichiers du répertoire courant et ceux des sous dossiers étant donné le recurse ON.

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-147) est une vulnérabilité permettant de devenir Administrateur de domaine qui exploite le protocole Netlogon. La vulnérabilité exploite une 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-044) 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 et permet une exécution de code à distance (RCE). L’exploit sera utilisé massivement 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

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.

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 : SigmaHQ

Smbexec

Rappel : 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 : https://attack.mitre.org/software/S0029). L’outil n’est pas installé par défaut mais peut être installé 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. C’est alors qu’intervient SmbExec qui 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’eventID 5145 avec l’event mask 0x3.

Sources