🇫🇷 404 CTF 2022 – Hackllebarde ransomware 1/4

Alerte, nous sommes attaqués ! Un ransomware vient de frapper l’infrastructure de notre centre de commandement ! Hors de question de payer la rançon. Comme vous êtes notre meilleur élément, nous vous chargeons de la gestion de cette crise. Nous pourrions faire une simple réinstallation avec nos sauvegardes, mais nous souhaitons récupérer avant tout le plus d’informations. Avant de nous intéresser à l’origine de ce malware, nous devons trouver si des informations confidentielles ont été exfiltrées afin de prendre les mesures appropriées. Nous avons pu enregistrer un trafic réseau suspect, mais impossible de savoir ce qu’il contient. Jetez-y un oeil !

Ouverture du fichier

En ouvrant le fichier dans wireshark on constate que l’on est face à une communication TCP non conventionelle.

Capture wireshark 404ctf

En extrayant le flux de données durant cette communication je n’ai pas réussi à extraire une information cohérente.

Et si ?

Je me suis demandé pour quelle raison des ségments TCP sont détectés comme corrompus par wireshark. En effet pour chaque segment, le checksum n’est pas vérifié, cela signifie qu’une partie du segment a été modifié après sa création.

En explorant les champs du segment TCP, la valeur du registre de flags a attiré mon attention :

Capture wireshark 404ctf

Après vérification, leurs valeurs ne sont vraiment pas cohérentes. Je me dis donc que la donnée est peut être échangée par ce biais. Mais vérifions cela.

Extraction du flux de données

Pour vérifier mon hypothèse, j’ai décidé d’afficher la valeur du registre FLAGS des premiers segments TCP. J’essaye à la main d’extraire chaque octet. J’obtiens cette valeur hexadécimale pour les 10 premiers segments :

255044462d312e370a25

Ce qui donne comme valeur ASCII :

%PDF-1.7 %

Bingo ! On est donc face à un flux de données correspondant à un fichier PDF.

Est-ce le moment pour un petit script python ?

Capture the flag

# script pour extraire la données sous format hexadécimale

from scapy.all import *

pcap = rdpcap('ransomware_filtered.pcapng')
data = ""
for packet in pcap:
    _tcp = packet[TCP]
    _hex_tcp = raw(_tcp).hex()
    tcp_flags = _hex_tcp[26:28]

    data += tcp_flags

print(data)

Après extraction on obtient donc un fichier pdf avec le flag

PDF avec le flag