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 compteurs 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'.