CaRT (Compressed and RC4 Transport)
The CaRT file format is used to store/transfer malware and its associated metadata. It neuters the malware so it cannot be executed and encrypts it so anti-virus software cannot flag the CaRT file as malware.
Advantages
- FAST: CaRT is just as fast as zipping a file
- STREAMING: CaRT uses zlib and RC4 which allow it to encode files in streaming
- METADATA: CaRT can store the file metadata in the same file as the file itself, the metadata can be read without reading the full file
- HASH CALCULATION: CaRT calculates the hashes of the file while it is encoding it and store that information in the footer
- SIZE: CaRT files are usually smaller than the original files because it uses compression. (Except in the case when huge amounts of metadata are stored in the CaRT)
Using CaRT with STIX v2
Now that STIX v2 uses JSON as encoding, you can now bundle your STIX report directly in the CaRT format.
When CaRT encodes files, it adds metadata from *.cartmeta
file with the same prefix of your file.
Therefore, if you save your STIX report to a .cartmeta
file, the resulting CaRT file will have the
full STIX report embedded within it.
Example:
$ ls
file.exe - File I want to encode
file.exe.cartmeta - Stix report of file.exe
$ cart file.exe
$ ls
file.exe - File I want to encode
file.exe.cartmeta - Stix report of file.exe
file.exe.cart - CaRT file containing both the file.exe and its STIX report
Format Overview
Mandatory Header (38 bytes)
CaRT has a mandatory header that looks like this
4s h Q 16s Q
CART<VERSION><RESERVED><ARC4KEY><OPT_HEADER_LEN>
Where VERSION is 1 and RESERVED is 0. In most cases the RC4 key used to decrypt the file is stored in the mandatory header and is always the same thing (first 8 digit of pi twice). However, CaRT provides an option to override the key which then stores null bytes in the mandatory header. You'll then need to know the key to unCaRT the file...
Optional Header (OPT_HEADER_LEN bytes)
CaRT's optional header is an OPT_HEADER_LEN bytes RC4 blob of a JSON serialized header
RC4(<JSON_SERIALIZED_OPTIONAL_HEADER>)
Data block (N Bytes)
CaRT's data block is a zlib then RC4 block
RC4(ZLIB(block encoded stream))
Optional Footer (OPTIONAL_FOOTER_LEN bytes)
Like the optional header, CaRT's optional footer is aN OPT_FOOTER_LEN bytes RC4 blob of a JSON serialized footer
RC4(<JSON_SERIALIZED_OPTIONAL_FOOTER>)
Mandatory Footer (32 Bytes)
CaRT ends its file with a mandatory footer which allow the format to read the footer and return the hashes without reading the whole file
4s QQ Q
TRAC<RESERVED><OPT_FOOTER_LEN>
Command line interface
By installing the pip package, you get access to the CaRT library and also access to the CaRT CLI.
The CaRT CLI has the following priority for its options:
- There are defaults values for all the options inside the CLI
- Default values are overridden by options in
~/.cart/cart.cfg
- Values in the configuration file are overridden by CLI options
These are the options available in the CaRT CLI:
Usage: cart [options] file1 file2 ... fileN
Options:
--version show program's version number and exit
-h, --help show this help message and exit
-f, --force Replace output file if it already exists
-i, --ignore Ignore RC4 key from conf file
-j JSONMETA, --jsonmeta=JSONMETA
Provide header metadata as JSON blob
-k KEY, --key=KEY Use private RC4 key (base64 encoded). Same key must be
provided to unCaRT.
-m, --meta Keep metadata around when extracting CaRTs
-n FILENAME, --name=FILENAME
Use this value as metadata filename
-o OUTFILE, --outfile=OUTFILE
Set output file
-s, --showmeta Only show the file metadata
The CaRT configuration file looks like this:
[global]
# rc4_key is a base64 representation of your key
rc4_key: AvUzYXNkZg==
# keep_meta is an equivalent to -m in the CLI
keep_meta: True
# force is an equivalent to -f in the CLI
force: True
# default_header is a key/value pair of data to be added to the CaRT in the optional header
[default_header]
poc: Your Name
poc_email: your.name@your.org
CaRT (Compressed and RC4 Transport)
Le format de fichier CaRT permet de stocker et de transfĂ©rer les maliciels et les mĂ©tadonnĂ©es connexes. Il neutralise les maliciels de maniĂšre Ă ce quâils puissent ĂȘtre exĂ©cutĂ©s et chiffrĂ©s pour que le logiciel antivirus ne signale pas le fichier CaRT comme Ă©tant un maliciel.
Avantages
- RAPIDE : Il est aussi rapide dâutiliser CaRT que de compresser un fichier.
- DIFFUSION EN CONTINU : CaRT utilise zlib et RC4, ce qui permet de coder les fichiers en cours de diffusion.
- MĂTADONNĂES : CaRT peut stocker les mĂ©tadonnĂ©es dâun fichier dans le mĂȘme fichier que le fichier lui-mĂȘme; les mĂ©tadonnĂ©es peuvent ĂȘtre lues sans qu'il soit nĂ©cessaire de lire le fichier en entier.
- CALCULS DE HACHAGE : CaRT calcule les condensĂ©s numĂ©riques du fichier parallĂšlement au codage du fichier, puis stocke lâinformation dans le pied de page.
- TAILLE : La taille des fichiers CaRT est gĂ©nĂ©ralement infĂ©rieure Ă celle des fichiers dâorigine, puisquâils sont compressĂ©s (Ă moins quâune grande quantitĂ© de mĂ©tadonnĂ©es aient Ă©tĂ© stockĂ©es dans le CaRT).
Utilisation de CaRT avec STIX v2
Maintenant que la version 2 de STIX utilise JSON aux fins de codage, vous pouvez grouper vos rapports STIX directement
dans le format CaRT. Lorsque CaRT code les fichiers, il ajoute les métadonnées depuis le fichier *.cartmeta
avec le mĂȘme
préfixe que celui utilisé par votre fichier. Par conséquent, si vous enregistrez votre rapport STIX dans un fichier
.cartmeta
, le rapport complet sera intégré dans le fichier CaRT résultant.
Par exemple :
$ ls
file.exe - Fichier Ă coder
file.exe.cartmeta - Rapport STIX du fichier file.exe
$ cart file.exe
$ ls
file.exe - Fichier Ă coder
file.exe.cartmeta - Rapport STIX du fichier file.exe
file.exe.cart - Fichier CaRT contenant Ă la fois le fichier file.exe et son rapport STIX
Aperçu du format
En-tĂȘte obligatoire (38 octets)
CaRT comporte un en-tĂȘte obligatoire qui ressemble Ă ce qui suit :
4s h Q 16s Q
CART<VERSION><RESERVED><ARC4KEY><OPT_HEADER_LEN>
Dans cet en-tĂȘte, la valeur de VERSION est 1 et celle de RESERVED est 0. Dans la plupart des cas, la clĂ© RC3 utilisĂ©e pour dĂ©chiffrer le fichier y est stockĂ©e et elle est toujours la mĂȘme (deux fois les 8 premiers chiffres de la valeur pi). CaRT propose toutefois une façon de remplacer la clĂ©, laquelle consiste Ă stocker des octets nuls dans lâen-tĂȘte obligatoire. Vous devrez alors connaĂźtre la clĂ© pour dĂ©coder le fichier CaRT.
En-tĂȘte facultatif (OPT_HEADER_LEN octets)
Lâen-tĂȘte facultatif de CaRT est un objet blob RC4 de OPT_HEADER_LEN octets tirĂ© de lâen-tĂȘte sĂ©rialisĂ© json
RC4(<JSON_SERIALIZED_OPTIONAL_HEADER>)
Bloc de données (N octets)
Le bloc de donnĂ©es de CaRT est dâabord une bibliothĂšque logicielle de compression de donnĂ©es (zlib), puis un bloc RC4
RC4(ZLIB(block encoded stream))
Pied de page facultatif (OPTIONAL_FOOTER_LEN octets)
Comme câest le cas dans lâen-tĂȘte facultatif, le pied de page facultatif de CaRT est un objet blob RC4 de OPT_FOOTER_LEN octets tirĂ© de lâen-tĂȘte sĂ©rialisĂ© json
RC4(<JSON_SERIALIZED_OPTIONAL_FOOTER>)
Pied de page obligatoire (32 octets)
Le ficher CaRT se termine par un pied de page obligatoire qui permet au format de lire le pied de page et de renvoyer les condensés numériques sans avoir à lire le fichier en entier :
4s QQ Q
TRAC<RESERVED><OPT_FOOTER_LEN>
Interface de ligne de commande
En installant le gestionnaire de paquets pip, vous pouvez accéder à la bibliothÚque de CaRT et au CLI de CaRT.
Le CLI de CaRT accorde les priorités suivantes à ses options :
- Des valeurs par défaut sont définies pour toutes les options à partir du CLI
- Les valeurs par défaut sont remplacées par des options dans
~/.cart/cart.cfg
- Les valeurs dans le fichier de configuration sont remplacées par les options du CLI
Des options sont disponibles dans le CLI de CaRT :
Usage : cart [options] fichier1 fichier2 ... fichierN
Options :
--version afficher le numéro de version du programme et quitter
-h, --help afficher ce message dâaide et quitter
-f, --force remplacer le fichier de sortie sâil existe dĂ©jĂ
-i, --ignore Ignorer la clé RC4 dans le fichier conf
-j JSONMETA, --jsonmeta=JSONMETA
Fournir les mĂ©tadonnĂ©es de lâen-tĂȘte sous forme dâobjet blob json
-k KEY, --key=KEY Utiliser la clĂ© RC4 privĂ©e (codĂ© en Base64). La mĂȘme clĂ© doit ĂȘtre saisie pour dĂ©compresser le fichier CaRT.
-m, --meta Conserver les mĂ©tadonnĂ©es lors de lâextraction des fichiers CaRT
-n FILENAME, --name=FILENAME
Utiliser cette valeur comme nom de fichier des métadonnées
-o OUTFILE, --outfile=OUTFILE
DĂ©finir le fichier de sortie
-s, --showmeta Afficher uniquement les métadonnées du fichier
Le fichier de configuration du CaRT ressemble Ă ce qui suit :
[global]
# rc4_key est une représentation en Base64 de votre clé
rc4_key: AvUzYXNkZg==
# keep_meta est un Ă©quivalent de -m dans le CLI
keep_meta: True
# force est un Ă©quivalent de -f dans le CLI
force: True
# default_header est une paire de donnĂ©es clĂ©/valeur Ă ajouter Ă lâen-tĂȘte facultatif du fichier CaRT
[default_header]
poc: Votre nom
poc_email: votre.nom@votre.org