1. Présentation

Le moteur d'analyse CODEBREAKER permet :

  • La détection des techniques d’exploitation offusquées, discrètes et sophistiquées.

  • Le désencodage de payloads encodés.

  • La détection de Shellcodes polymorphes.

Codebreaker couvre les shellcodes destinés à des plateformes Windows ou Linux en 32 et 64bits.

2. Détection

Menu : OPERATORS > Inspectra > Codebreaker

Depuis la section 'OPERATORS - Inspectra - Codebreaker', l'opérateur accède à un tableau recensant les shellcodes encodés ou non, polymorphes, et les powershells au travers du moteur de détection CODEBREAKER.

Au-dessus de ce tableau, l'opérateur peut cliquer dans le champ 'From - To' pour définir la plage de temps (au format jj/mm/aaaa HH:MM) des données qui s'affichent.

Number of results max: est le nombre maximum de résultats affichés dans le tableau.

Les colonnes du tableau sont déplaçables et des recherches dynamiques peuvent être faites sur chacune d'entre elles:

L'opérateur peut choisir la visibilité des colonnes dans le tableau en cliquant sur le bouton Column visibility.

Il est également possible d'effectuer une exportation rapide en CSV des données en fonction de la date de décision sélectionnée:

Une analyse interactive de l'élément est possible grâce à un clic droit de la souris. Avec 'Download' il est possible de télécharger le Shellcode/PowerShell et l'enregistrer sur le poste dans un fichier protégé par un mot de passe au format .zip. Ce mot de passe est modifiable ici.

L'opérateur peut également utiliser la fonction 'Generate CFG' pour obtenir une version graphique et simplifiée des instructions du Shellcode détecté.

Ci-dessous, un exemple d'une génération CFG d'un shellcode simple détecté par le moteur d'analyse CODEBREAKER:

Enfin, comme le reste des informations analysées par la solution TRACKWATCH, les données générées par Codebreaker sont disponibles dans le dashboard Kibana qui lui est dédié.

3. Événements générés

3.1. Codebreaker Shellcode

3.1.1. Exemple de log Codebreaker Shellcode

json
{
    "flow_id": "1288526885940394",
    "@version": "1",
    "timestamp_detected": "2021-07-01T09:30:57.781Z",
    "SHA256": "1199e5d7281671962afaac9e6f36470f4f217b827ddbefa34026f509c025f76b",
    "src_port": "27114",
    "file_id": "07-01-2021T09:30:57_0431273753_gcap-int-ppo-164.domain.local",
    "type": "codebreaker",
    "@timestamp": "2021-07-01T09:31:03.666Z",
    "event_type": "shellcode",
    "calls": {
      "0": {
        "call": "kernel32_LoadLibraryA",
        "args": "{'lpFileName': 'ws2_32'}",
        "ret": 1880096768
      },
      "1": {
        "call": "ws2_32_WSAStartup",
        "args": "{'wVersionRequested': 400}",
        "ret": 0
      },
      "2": {
        "call": "ws2_32_WSASocketA",
        "args": "{'af': 'AF_INET', 'type': 'SOCK_STREAM', 'protocol': 'IPPROTO_IP', 'g': 0, 'dwFlags': 0}",
        "ret": 20
      },
      "3": {
        "call": "ws2_32_connect",
        "args": "{'s': 'Socket_1 (20)', 'name': '10.30.58.183:4444', 'namelen': 16}",
        "ret": 0
      },
      "4": {
        "call": "ws2_32_recv",
        "args": "{'s': 'Socket_1-connected (20)', 'buf': '0x1237e5c', 'len': 4, 'flags': None}",
        "ret": 4
      },
      "5": {
        "call": "kernel32_VirtualAlloc",
        "args": "{'lpAddress': 'Null', 'dwSize': '0xff', 'flAllocationType': 'MEM_COMMIT', 'flProtect': 'PAGE_EXECUTE_READWRITE'}",
        "ret": 536870912
      },
      "6": {
        "call": "ws2_32_recv",
        "args": "{'s': 'Socket_1-connected (20)', 'buf': '0x20000000', 'len': 255, 'flags': None}",
        "ret": 255
      },
      "stop": "End of shellcode"
    },
    "uuid": "1cfaba49-4f4b-4a25-b32a-1eb2ed8a8366",
    "MD5": "aa9d9b771c61b9e2773f7b6b6d541d18",
    "sub_type": "Windows_x86_32",
    "severity": 1,
    "dest_ip": "31.28.224.101",
    "timestamp_analyzed": "2021-07-01T09:31:03.666Z",
    "encodings": [
      {
        "count": 33,
        "name": "Shikata_ga_nai"
      }
    ],
    "src_ip": "41.203.128.216",
    "gcap": "gcap-int-ppo-164.domain.local",
    "state": "Exploit",
    "GCenter": "gcenter-int-ppo-237.domain.local",
    "dest_port": "82"
  }

3.1.2. Tableau récapitulatif des champs Codebreaker Shellcode

Champs Requis Description Valeurs
MD5 Oui Hash MD5 du fichier analysé. -
SHA256 Oui Hash SHA256 du fichier analysé. -
calls.X.args Oui Arguments de l’appel système utilisé. -
calls.X.call Oui Nom de l’appel système utilisé. -
calls.X.ret Oui Code de retour de l’appel système utilisé. -
calls.stop Oui Marque la fin des appels systèmes du shellcode. End of shellcode, End of shellcode (Exit)
dest_ip Oui Adresse IP de destination. -
dest_port Oui Port de destination. -
encodings.count Oui Nombre d’encodage successif. -
encodings.name Oui Nom de l’encodage utilisé. -
event_type Oui Type d’exploit. shellcode
file_id Oui Identifiant du fichier. -
flow_id Oui Identifiant du flux. -
gcap Oui Nom du gcap associé à l’alerte. -
gcenter Oui Nom du GCenter associé à l’alerte. -
severity Oui Niveau de sévérité. -
src_ip Oui Adresse IP source. -
src_port Oui Port source. -
state Oui Résultat de l’analyse par codebreaker. Exploit, Suspicious
sub_type Oui Le sous-type du fichier. Le système d’exploitation lié à l’éxécutable si c’est un shellcode. Windows_x86_32, Linux_x86_32
timestamp_analyzed Oui Date et heure de la dernière analyse du fichier. -
timestamp_detected Oui Date et heure de la première capture du fichier. -
type Oui Type d’évènement. codebreaker

3.2. Codebreaker Powershell

3.2.1. Modifications des évènements Codebreaker Powershell

3.2.2. Exemple de log Codebreaker Powershell

json
{
    "flow_id": "2248143006711922",
    "@version": "1",
    "timestamp_detected": "2021-07-06T17:39:29.442Z",
    "MD5": "c2eae0da7d9e27a10ae889cef2d21d0d",
    "SHA256": "04fa65e0e344dfff0396ca9fe3e36ce55f1c2777c698874458b97289383e5de5",
    "uuid": "340fb354-0439-495b-acad-104cb8bf2a31",
    "sub_type": "powershell",
    "severity": 1,
    "src_port": "55796",
    "dest_ip": "10.127.0.222",
    "type": "codebreaker",
    "file_id": "07-06-2021T17:39:29_7620562351_gcap-int-ppo-164.domain.local",
    "@timestamp": "2021-07-06T17:39:32.888Z",
    "timestamp_analyzed": "2021-07-06T17:39:32.888Z",
    "src_ip": "10.127.0.111",
    "gcap": "gcap-int-ppo-164.domain.local",
    "event_type": "powershell",
    "state": "Exploit",
    "scores": {
      "proba_obfuscated": 1,
      "analysis": 134,
      "analysis_detailed": {
        "WebClientInvokation": 0,
        "StrReplace": 10,
        "Base64": 0,
        "CharInt": 16,
        "StrCat": 12,
        "FmtStr": 96,
        "StrJoin": 0
      }
    },
    "dest_port": "4242",
    "gcenter": "gcenter-int-ppo-237.domain.local"
  }

3.2.3. Tableau récapitulatif des champs Codebreaker Powershell

Champs Requis Description Valeurs
MD5 Oui Hash MD5 du fichier analysé. -
SHA256 Oui Hash SHA256 du fichier analysé. -
dest_ip Oui Adresse IP de destination. -
dest_port Oui Port de destination. -
event_type Oui Type d’exploit. powershell
file_id Oui Identifiant du fichier. -
flow_id Oui Identifiant du flux. -
gcap Oui Nom du gcap associé à l’alerte. -
gcenter Oui Nom du GCenter associé à l’alerte. -
scores.analysis Oui Somme des scores des champs scores.analysis_detailed.*. -
scores.analysis_detailed.Base64 Oui Score représenté par un entier d’un/des patterns base64 détectés. -
scores.analysis_detailed.CharInt Oui Score représenté par un entier d’un/des patterns charint détectés. -
scores.analysis_detailed.FmtStr Oui Score représenté par un entier d’un/des patterns fmtstr détectés. -
scores.analysis_detailed.StrJoin Oui Score représenté par un entier d’un/des patterns strjoin détectés. -
scores.analysis_detailed.StrReplace Oui Score représenté par un entier d’un/des patterns strreplace détectés. -
scores.analysis_detailed.WebClientInvokation Oui Score représenté par un entier d’un/des patterns webclientinvokation détectés. -
scores.proba_obfuscated Oui Probabilité que le powershell soit offusqué entre 0 et 1. -
severity Oui Niveau de sévérité. -
src_ip Oui Adresse IP source. -
src_port Oui Port source. -
state Oui Résultat de l’analyse par codebreaker. Exploit, Suspicious
sub_type Oui Le sous-type du fichier. powershell
timestamp_analyzed Oui Date et heure de la dernière analyse du fichier. -
timestamp_detected Oui Date et heure de la première capture du fichier. -
type Oui Type d’évènement. codebreaker

4. GScan

4.1. Shellcode Scanning

Menu : Operators > GScan > Shellcode Scanning

GScan shellcode permet de soumettre manuellement des fichiers afin qu'ils soient analysés par le moteur de détection codebreaker.

Cette information est présente dans les 'Details'.

La fonctionnalité Deep Scan permet d'améliorer la détection de pattern ou de méthode d'obfuscation inconnue.

Il est possible de configurer le temps d'analyse et d'activer/désactiver la fonctionnalité.

4.2. Powershell Scanning

Menu : Operators > GScan > Powershell Scanning

Cette interface laisse la possibilité de scanner des fichiers contenant des scripts POWERSHELL et détecter de potentielles menaces pouvant servir de porte d'entrée pour installer des logiciels malveillants sur Windows.

En ce qui concerne les powershells malveillants, la détection se base sur un modèle de Machine Learning supervisé, et sur le fait que ces scripts utilisent généralement des techniques d'obfuscation ou qui s'y apparentent (base64, concaténation, conversion de type, etc…).

Quelques informations en plus sont accessibles depuis l'onglet 'Details'.

Le résultat peut-être à l'état : Clean ou Malicious en fonction du score d'obfuscation.

4.3. Historique

Menu :

  • Operators > GScan > Malware Scanning

  • Operators > GScan > Shellcode Scanning

  • Operators > GScan > Powershell Scanning

Pour tous les scans MALCORE, CODEBREAKER ou POWERSHELL, un historique des fichiers scannés par moteur d'analyse est disponible.

La liste des fichiers qui ont été scannés est visible sur l'interface.

Les informations détaillées sont accessibles via 'Details'.