2.1.2. Moteur Codebreaker

2.1.2.1. Présentation

Le moteur Codebreaker permet la détection de Shellcodes et de Powershells.
Cela est possible grâce aux fonctionnalités suivantes :
  • 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

Note

Codebreaker détecte les shellcodes destinés à des plate-formes Windows ou Linux en 32 et 64bits.


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

Les événements générés par Codebreaker sont des alertes Shellcode ou Powershell.
Celles-ci sont affichées dans l'interface principale du GCenter ainsi que dans Kibana.
Dans l'interface principale, il est possible de télécharger le fichier source.
  • dans l'interface principale nommée WEB UI du GCenter dans l'écran `Alerts` (l'interface principale nommée WEB UI est décrite dans la Présentation de l'interface graphique WEB UI).
    Pour visualiser les alertes; il faut sélectionner le filtre SHELLCODE et ainsi visualiser la liste des alertes : voir la présentation de l'Ecran `Alerts` de la web UI.
    En cliquant sur une alerte, les informations détaillées de cette alerte sont affichées :
  • Dans l'interface Kibana UI : pour cela
    Pour visualiser les alertes; il faut sélectionner le filtre SHELLCODE et ainsi visualiser la liste des alertes : voir la présentation de l'Ecran `Alerts` de la web UI.
    En cliquant sur une alerte, il faut sélectionner sur la commande `Go hunting` puis sélectionner la flèche à gauche de l'alerte.
    L'interface affiché est l'interface nommée Kibana UI (décrite dans la Présentation de l'interface graphique Kibana).
    Les informations détaillées de cette alerte sont visualisables en format tableau ou jason .
    Les informations détaillées de cette alerte sont affichées :

2.1.2.2.1. Codebreaker Shellcode

2.1.2.2.1.1. Exemple d'alerte Codebreaker Shellcode dans la webui

../../_images/ALERTE-05.PNG

Les compteurs sont détaillées dans la Structure des données des logs Codebreaker Shellcode.


2.1.2.2.1.2. Exemple de log Codebreaker Shellcode

{
 "_index": "codebreaker-2023.10.11-000164",
 "_type": "_doc",
 "_id": "kAP9HosBeBoubSygpAwN",
 "_version": 1,
 "_score": 1,
 "_source": {
   "encodings": [
     {
       "options": "EBX, 3, Mixed",
       "count": 1,
       "name": "Alpha"
     }
   ],
   "gcap": "gcap-xxxxxxxxx.domain.local",
   "state": "Exploit",
   "uuid": "e3f51d11-661d-4164-9ce6-3aade7d3cfd6",
   "timestamp_analyzed": "2023-10-11T13:47:00.895Z",
   "dest_port": "37644",
   "type": "codebreaker",
   "timestamp_detected": "2023-10-11T13:45:47.655Z",
   "dest_ip": "X.X.X.X",
   "src_port": "4242",
   "event_type": "shellcode",
   "MD5": "933b3f084048ca6...",
   "severity": 1,
   "@version": "1",
   "calls": {
     "0": {
       "ret": "0",
       "args": "{'filename': 'THIS IS SP... SHELLCODE !', 'argv': ['THIS IS SP... SHELLCODE !'], 'envp': []}",
       "call": "sys_execve"
     },
     "stop": "End of shellcode (Exit)"
   },
   "flow_id": "2046395805270250",
   "gcenter": "gcenter-xxx.domain.local",
   "SHA256": "5017d890b00903bba30a692e673b6ba740642bad846d4f9a6ac63f3a1551a502",
   "file_id": "10-11-2023T13:46:56_b2b0c75...9c_gcap-xxxxxxxxx.domain.local",
   "src_ip": "X.X.X.X",
   "sub_type": "Linux_x86_32",
   "@timestamp": "2023-10-11T13:47:00.895Z"
 },
 "fields": {
   "calls.0.ret": [
     "0"
   ],
   "calls.stop": [
     "End of shellcode (Exit)"
   ],
   "type": [
     "codebreaker"
   ],
   "uuid": [
     "e3f51d11-661d-4164-9ce6-3aade7d3cfd6"
   ],
   "calls.0.args": [
     "{'filename': 'THIS IS SP... SHELLCODE !', 'argv': ['THIS IS SP... SHELLCODE !'], 'envp': []}"
   ],
   "calls.0.call": [
     "sys_execve"
   ],
   "src_ip": [
     "X.X.X.X"
   ],
   "event_type": [
     "shellcode"
   ],
   "sub_type": [
     "Linux_x86_32"
   ],
   "flow_id": [
     2046395805270250
   ],
   "@version": [
     "1"
   ],
   "state": [
     "Exploit"
   ],
   "dest_port": [
     37644
   ],
   "severity": [
     1https://10.2.19.128/ui/home/main
   ],
   "gcenter": [
     "gcenter-xxx.domain.local"
   ],
   "timestamp_detected": [
     "2023-10-11T13:45:47.655Z"
   ],
   "SHA256": [
     "5017d890b00903bba30a692e673b6ba740642bad846d4f9a6ac63f3a1551a502"
   ],
   "src_port": [
     4242
   ],
   "@timestamp": [
     "2023-10-11T13:47:00.895Z"
   ],
   "dest_ip": [
     "X.X.X.X"
   ],
   "file_id": [
     "10-11-2023T13:46:56_b2b0c75...9c_gcap-xxxxxxxxx.domain.local"
   ],
   "encodings.count": [
     1
   ],
   "gcap": [
     "gcap-xxxxxxxxx.domain.local"
   ],
   "timestamp_analyzed": [
     "2023-10-11T13:47:00.895Z"
   ],
   "encodings.options": [
     "EBX, 3, Mixed"
   ],
   "encodings.name": [
     "Alpha"
   ],
   "MD5": [
     "933b3f084048ca6..."
   ]
 }
}

2.1.2.2.1.3. Structure des données des logs Codebreaker Shellcode

Les logs sont composés de différentes parties :

  • la partie entête

  • la partie source définie par "_source"

  • la partie champs définie par "_fields"


La partie entête des logs Codebreaker Shellcode

La partie entête contient :

{
 "_index": "codebreaker-2023.10.11-000164",
 "_type": "_doc",
 "_id": "kAP9HosBeBoubSygpAwN",
 "_version": 1,
 "_score": 1,
Tableau partie entête

Champ

Requis

Description

Valeurs ou exemple

_index

Oui

Index interne

codebreaker-2023.10.11-000164

_type

Oui

type par défault

_doc

_id

Oui

identifiant interne

kAP9HosBeBoubSygpAwN

_version

Oui

version interne

1

_score

Oui

pertinence de la réponse par rapport à la requête

1


La partie source des logs Codebreaker Shellcode

La partie source définie par "_source" contient :

"_source": {
  "encodings": [
    {
      "options": "EBX, 3, Mixed",
      "count": 1,
      "name": "Alpha"
    }
  ],
  "gcap": "gcap-xxxxxxxxx.domain.local",
  "state": "Exploit",
  "uuid": "e3f51d11-661d-4164-9ce6-3aade7d3cfd6",
  "timestamp_analyzed": "2023-10-11T13:47:00.895Z",
  "dest_port": "37644",
  "type": "codebreaker",
  "timestamp_detected": "2023-10-11T13:45:47.655Z",
  "dest_ip": "X.X.X.X",
  "src_port": "4242",
  "event_type": "shellcode",
  "MD5": "933b3f084048ca6...",
  "severity": 1,
  "@version": "1",
  "calls": {
    "0": {
      "ret": "0",
      "args": "{'filename': 'THIS IS SP... SHELLCODE !', 'argv': ['THIS IS SP... SHELLCODE !'], 'envp': []}",
      "call": "sys_execve"
    },
    "stop": "End of shellcode (Exit)"
  },
  "flow_id": "2046395805270250",
  "gcenter": "gcenter-xxx.domain.local",
  "SHA256": "5017d890b00903bba30a692e673b6ba740642bad846d4f9a6ac63f3a1551a502",
  "file_id": "10-11-2023T13:46:56_b2b0c75...9c_gcap-xxxxxxxxx.domain.local",
  "src_ip": "X.X.X.X",
  "sub_type": "Linux_x86_32",
  "@timestamp": "2023-10-11T13:47:00.895Z"
},
Tableau partie source

Champ

Requis

Description

Valeurs ou exemple

@timestamp

Oui

Timestamp analyzed

2023-10-11T13:47:00.895Z

@version

oui

version du document

1

calls

Oui

Catégorie calls voir le Tableau récapitulatif des compteurs de la catégorie "calls"

dest_ip

Oui

Adresse IP de destination

x.x.x.x

Description (dans webui)

oui

Champ description sur la menace. Uniquement present dans la web ui

Les adversaires peuvent abuser des interprètes de commande et de script pour exécuter des commandes, des scripts ou des binaires...

dest_port

Non

Port de destination

37644

encodings

oui

Catégorie encodings voir le Tableau récapitulatif des compteurs de la catégorie "Encodings"

1

event_type (Alert type dans webui)

Oui

Type d’exploit

shellcode

file_id

Oui

Catégorie fileinfo: Identifiant du fichier

0-11-2023T13:46:56_b2b0c75...9c_gcap-xxxxxxxxx.domain.local

flow_id

Oui

Identifiant unique du flux. Permet de retrouver le fileinfo associé

2046395805270250

gcap

Oui

Nom du gcap associé à l’alerte

gcap-xxx.domain.local

gcenter

Oui

Nom du GCenter associé à l’alerte.

gcenter-xxx.domain.local

Hostname (webui)

oui

Nom de l’hôte de l’émetteur de la menace

En cas absence du hostname, c'est son IP qui est affiché

MD5

Oui

Hash MD5 du fichier analysé

933b3f084048ca6...

MITRE ASSOCIATIONS

oui

Catégorie MITRE de la menace

Execution

Name dans webui

Oui

somme des informations des champs state + sub_type + MD5 + SHA256

Execution : Command and Scripting Interpreter
Persistence : Hijack Execution Flow
Privilege Escalation : Hijack Execution Flow
Defense Evasion : Hijack Execution Flow

severity

Oui

Code du résultat de l’analyse.

Compris entre 0 et 3.
0=clean, 1=infected, 2=suspicious, 3=Other

SHA256

Oui

Hash SHA256 du fichier analysé

5017d890b00903bb...

src_ip

Oui

Adresse IP source

X.X.X.X

src_port

Oui

Port source

4242

state

Oui

Résultat de l’analyse par codebreaker (Exploit, Suspicious)

Exploit

sub_type

Oui

Le sous-type du fichier (Windows_x86_32, Linux_x86_32)
Le système d’exploitation lié à l’exécutable si c’est un shellcode.

Linux_x86_32

timestamp analyzed

Oui

Date et heure de la dernière analyse du fichier

2023-10-11T13:47:00.895Z

timestamp detected

Oui

Date et heure de la première capture du fichier

2023-10-11T13:45:47.655Z

type

Oui

Type d’événement

codebreaker

uuid ou id

Oui

Identifiant unique de l’alerte

e3f51d11-661d-4164-9ce6-3aade7d3cfd6

Tableau récapitulatif des compteurs de la catégorie "calls"

Champ

Requis

Description

Valeurs ou exemple

return

Oui

Code de retour de l’appel système utilisé

0

args

Oui

Arguments de l’appel système utilisé

{'filename': 'THIS IS SP... SHELLCODE !', 'argv': ['THIS IS SP... SHELLCODE !'], 'envp': []}

call

Oui

Nom de l’appel système utilisé

sys_execve

stop

Oui

Marque la fin des appels systèmes du shellcode (End of shellcode, End of shellcode (Exit))

End of shellcode (Exit)

index

oui

Index interne

0

Tableau récapitulatif des compteurs de la catégorie "Encodings"

Champ

Requis

Description

Valeurs ou exemple

encodings.count

oui

Nombre d’encodages successif

1

encodings.name

oui

Nom de l’encodage

1

encodings.options

oui

Options d’encodage

EBX, 3, Mixed


La partie champs des logs Codebreaker Shellcode

La partie champs définie par "fields" contient les même compteurs que dans la partie source: se référer à la section partie source


2.1.2.2.2. Codebreaker Powershell

2.1.2.2.2.1. Exemple d'alerte Codebreaker Powershell dans la webui

../../_images/ALERTE-06.PNG

Les compteurs sont détaillées dans la partie Structure des données des logs Codebreaker Powershell.


2.1.2.2.2.2. Exemple de log Codebreaker Powershell

{
 "_index": "codebreaker-2023.10.11-000164",
 "_type": "_doc",
 "_id": "EAP8HosBeBoubSygnQy_",
 "_version": 1,
 "_score": 1,
 "_source": {
   "gcap": "gcap-xxxxxxxxx.domain.local",
   "event_type": "powershell",
   "state": "Exploit",
   "severity": 1,
   "MD5": "01c0d252b17e794fd7007fd46ec469c0",
   "@version": "1",
   "flow_id": "2061844798658535",
   "scores": {
     "proba_obfuscated": 1,
     "analysis_detailed": {
       "FmtStr": 198,
       "StrReplace": 0,
       "StartBitsTransfer": 0,
       "GetContent": 0,
       "CharInt": 16,
       "InvokeExpression": 0,
       "WebClientInvokation": 0,
       "StreamWriter": 0,
       "AddContent": 0,
       "StrJoin": 0,
       "StreamReader": 0,
       "SystemIOFile": 0,
       "InvokeWebRequest": 0,
       "InvokeRestMethod": 0,
       "Base64": 0,
       "StrCat": 28,
       "SetContent": 0
     },
     "analysis": 242
   },
   "dest_port": "57244",
   "SHA256": "dc6b2982353692543ad03c7e87e667d916564e5eccfef97acce877aa4d5fd3fc",
   "uuid": "9a1333a3-e864-478e-88ae-f9823623dfec",
   "file_id": "10-11-2023T13:45:46...32_gcap-xxxxxxxxx.domain.local",
   "type": "codebreaker",
   "src_ip": "X.X.X.X",
   "timestamp_analyzed": "2023-10-11T13:45:53.836Z",
   "timestamp_detected": "2023-10-11T13:44:46.022Z",
   "gcenter": "gcenter-xxx.domain.local",
   "dest_ip": "X.X.X.X",
   "sub_type": "powershell",
   "src_port": "4242",
   "@timestamp": "2023-10-11T13:45:53.836Z"
 },
 "fields": {
   "scores.analysis_detailed.SystemIOFile": [
     0
   ],
   "scores.analysis_detailed.Base64": [
     0
   ],
   "scores.analysis_detailed.StreamWriter": [
     0
   ],
   "type": [
     "codebreaker"
   ],
   "uuid": [
     "9a1333a3-e864-478e-88ae-f9823623dfec"
   ],
   "scores.analysis_detailed.WebClientInvokation": [
     0
   ],
   "src_ip": [
     "X.X.X.X"
   ],
   "scores.analysis_detailed.StrReplace": [
     0
   ],
   "event_type": [
     "powershell"
   ],
   "scores.analysis_detailed.InvokeRestMethod": [
     0
   ],
   "sub_type": [
     "powershell"
   ],
   "flow_id": [
     2061844798658535
   ],
   "@version": [
     "1"
   ],
   "state": [
     "Exploit"
   ],
   "dest_port": [
     57244
   ],
   "scores.analysis_detailed.InvokeWebRequest": [
     0
   ],
   "severity": [
     1
   ],
   "scores.analysis_detailed.FmtStr": [
     198
   ],
   "scores.analysis_detailed.StreamReader": [
     0
   ],
   "gcenter": [
     "gcenter-xxx.domain.local"
   ],
   "scores.analysis_detailed.SetContent": [
     0
   ],
   "scores.proba_obfuscated": [
     1
   ],
   "timestamp_detected": [
     "2023-10-11T13:44:46.022Z"
   ],
   "scores.analysis_detailed.GetContent": [
     0
   ],
   "SHA256": [
     "dc6b2982353692543ad03c7e87e667d916564e5eccfef97acce877aa4d5fd3fc"
   ],
   "src_port": [
     4242
   ],
   "scores.analysis_detailed.StrCat": [
     28
   ],
   "@timestamp": [
     "2023-10-11T13:45:53.836Z"
   ],
   "scores.analysis_detailed.AddContent": [
     0
   ],
   "dest_ip": [
     "X.X.X.X"
   ],
   "file_id": [
     "10-11-2023T13:45:46...32_gcap-xxxxxxxxx.domain.local"
   ],
   "scores.analysis_detailed.StrJoin": [
     0
   ],
   "scores.analysis_detailed.InvokeExpression": [
     0
   ],
   "gcap": [
     "gcap-xxxxxxxxx.domain.local"
   ],
   "timestamp_analyzed": [
     "2023-10-11T13:45:53.836Z"
   ],
   "scores.analysis": [
     242
   ],
   "scores.analysis_detailed.StartBitsTransfer": [
     0
   ],
   "scores.analysis_detailed.CharInt": [
     16
   ],
   "MD5": [
     "01c0d252b17e794fd7007fd46ec469c0"
   ]
 }
}

2.1.2.2.2.3. Structure des données des logs Codebreaker Powershell

Les logs sont composés de différentes parties :

  • la partie entête

  • la partie source définie par "_source"

  • la partie champs définie par "_fields"


La partie entête des logs Codebreaker Powershell

La partie entête contient :

{
 "_index": "codebreaker-2023.10.11-000164",
 "_type": "_doc",
 "_id": "EAP8HosBeBoubSygnQy",
 "_version": 1,
 "_score": 1,
Tableau partie entête

Champ

Requis

Description

Valeurs ou exemple

_index

Oui

Index interne

codebreaker-2023.10.11-000164

_type

Oui

type par défault

_doc

_id

Oui

identifiant interne

EAP8HosBeBoubSygnQy

_version

Oui

version interne

1

_score

Oui

pertinence de la réponse par rapport à la requête

1


La partie source des logs Codebreaker Powershell

La partie source définie par "_source" contient :

 "_source": {
  "gcap": "gcap-xxxxxxxxx.domain.local",
  "event_type": "powershell",
  "state": "Exploit",
  "severity": 1,
  "MD5": "01c0d252b17e794fd7007fd46ec469c0",
  "@version": "1",
  "flow_id": "2061844798658535",
  "scores": {
    "proba_obfuscated": 1,
    "analysis_detailed": {
      "FmtStr": 198,
      "StrReplace": 0,
      "StartBitsTransfer": 0,
      "GetContent": 0,
      "CharInt": 16,
      "InvokeExpression": 0,
      "WebClientInvokation": 0,
      "StreamWriter": 0,
      "AddContent": 0,
      "StrJoin": 0,
      "StreamReader": 0,
      "SystemIOFile": 0,
      "InvokeWebRequest": 0,
      "InvokeRestMethod": 0,
      "Base64": 0,
      "StrCat": 28,
      "SetContent": 0
    },
    "analysis": 242
  },
  "dest_port": "57244",
  "SHA256": "dc6b2982353692543ad03c7e87e667d916564e5eccfef97acce877aa4d5fd3fc",
  "uuid": "9a1333a3-e864-478e-88ae-f9823623dfec",
  "file_id": "10-11-2023T13:45:46...32_gcap-xxxxxxxxx.domain.local",
  "type": "codebreaker",
  "src_ip": "X.X.X.X",
  "timestamp_analyzed": "2023-10-11T13:45:53.836Z",
  "timestamp_detected": "2023-10-11T13:44:46.022Z",
  "gcenter": "gcenter-xxx.domain.local",
  "dest_ip": "X.X.X.X",
  "sub_type": "powershell",
  "src_port": "4242",
  "@timestamp": "2023-10-11T13:45:53.836Z"
},
Tableau partie source des logs Codebreaker Powershell

Champ

Requis

Description

Valeurs ou exemple

gcap

Oui

Nom du gcap associé à l’alerte

gcap-xxx.domain.local

event_type

Oui

Type d’exploit

powershell

state

Oui

Résultat de l’analyse par codebreaker (Exploit, Suspicious)

Exploit

severity

Oui

Code du résultat de l’analyse

Compris entre 0 et 3
0=clean, 1=infected, 2=suspicious, 3=Other

MD5

Oui

Hash MD5 du fichier analysé

01c0d252b17e794fd7007fd46ec469c0

@version

oui

version du document

1

flow_id

Oui

Identifiant unique du flux. Permet de retrouver le fileinfo associé

2061844798658535

scores

Oui

voir le Tableau récapitulatif des compteurs de catégorie "scores"

dest_port

Oui

Port de destination

57244

SHA256

Oui

Hash SHA256 du fichier analysé

dc6b2982353692543ad03c7e87e667...

uuid

Oui

Identifiant unique de l’alerte

9a1333a3-e864-478e-88ae-f9823623dfec

file_id

Oui

Catégorie fileinfo: Identifiant du fichier

10-11-2023T13:45:46...32_gcap-xxxxxxxxx.domain.local

type

Oui

Type d’événement

codebreaker

src_ip

Oui

Adresse IP source

X.X.X.X

timestamp analyzed

Oui

Date et heure de la dernière analyse du fichier

2023-10-11T13:45:53.836Z

timestamp detected

Oui

Date et heure de la première capture du fichier

2023-10-11T13:44:46.022Z

gcenter

Oui

Nom du GCenter associé à l’alerte.

gcenter-xxx.domain.local

dest_ip

Oui

Adresse IP de destination

x.x.x.x

sub_type

Oui

Le sous-type du fichier

powershell

src_port

Oui

Port source

4242

@timestamp

Oui

Timestamp analyzed

2023-10-11T13:45:53.836Z

Tableau récapitulatif des compteurs de catégorie "scores"

Champ

Requis

Description

Valeurs ou exemple

proba_obfuscated

Oui

Probabilité que le powershell soit offusqué. Valeur entre 0 et 1

1

analysis_detailed

Oui

analyse détaillée. Elle comprends les compteurs suivants:

FmtStr

Oui

Catégorie scores/analysis_detailed
Score représenté par un entier d’un/des patterns fmtstr détectés

198

StrReplace

Oui

Catégorie scores/analysis_detailed
Score représenté par un entier d’un/des patterns strreplace détectés

0

StartBitsTransfer

Oui

Catégorie scores/analysis_detailed
Commande Start-BitsTransfer

0

GetContent

Oui

Catégorie scores/analysis_detailed
Applet Get-Content pour lire les données du fichier

0

CharInt

Oui

Catégorie scores/analysis_detailed
Score représenté par un entier d’un/des patterns charint détectés

16

InvokeExpression

Oui

Catégorie scores/analysis_detailed
Applet InvokeExpression

0

WebClientInvokation

Oui

Catégorie scores/analysis_detailed
Score représenté par un entier d’un/des patterns webclientinvokation détectés

0

StreamWriter

Oui

Catégorie scores/analysis_detailed
Écrire un fichier qui répertorie les répertoires

0

AddContent

Oui

Catégorie scores/analysis_detailed
Ajoute du contenu à un fichier / dossier

0

StrJoin

Oui

Catégorie scores/analysis_detailed
Score représenté par un entier d’un/des patterns strjoin détectés

0

StreamReader

Oui

Catégorie scores/analysis_detailed
Objet pour lire et afficher chaque nom de répertoire

0

SystemIOFile

Oui

Catégorie scores/analysis_detailed
Manipulation d’un fichier (création, ouverture, copie…)

0

InvokeWebRequest

Oui

Catégorie scores/analysis_detailed
L'applet Invoke-WebRequest envoie des requêtes HTTP et HTTPS à une page Web

0

Base64

Oui

Catégorie scores/analysis_detailed
Score représenté par un entier d’un/des patterns base64 détectés

0

StrCat

Oui

Catégorie scores/analysis_detailed
Fonction qui concatène des chaînes

28

SetContent

Oui

Catégorie scores/analysis_detailed
Applet SetContent écrit du nouveau contenu ou remplace le contenu existant dans un fichier

0

analysis

Oui

Catégorie scores

242


La partie champs des logs Codebreaker Powershell

La partie champs définie par "fields" contient les même compteurs que dans la partie source: se référer à la section partie source


2.1.2.3. Visualisation de l'état de Codebreaker

La visualisation de l'état courant du moteur est donnée dans l'Ecran `Health checks` de la web UI.


2.1.2.4. Mise à jour de Codebreaker

Le moteur est mis à jour à chaque nouvelle version du GCenter.

2.1.2.5. Configuration de Codebreaker

Le moteur n'est pas configurable.
La détection des shellcodes et des powershells n'est pas activée par défaut et est définie dans les profils envoyés au GCap (Ecran `Config - Gcaps profiles` de la web UI).