Skip to content

Latest commit

 

History

History
170 lines (114 loc) · 9.26 KB

README.md

File metadata and controls

170 lines (114 loc) · 9.26 KB

Discord Static Badge Static Badge GitHub Issues or Pull Requests by label License

TagCheck Service

This is a post-processing service that compares all TAGs generated by other services to a signature set using the YARA signatures.

Service Details

Signature source

By default, the tagcheck service runs a small set of signatures located at https://assemblyline-support.s3.amazonaws.com/tagcheck.rules. Those rules are mainly geared toward dynamic analysis results analysis.

Signature format

Tagcheck also uses the CCCS signature format but with the added external this allows signature writters to reference AL tags inside their signature. Here is an example:

rule UPX_Packer_PE_Section {

    meta:
        version = "1.0"
        description = "Identifies UPX packer by PE section names"
        source = "CCCS"
        author = "assemblyline_devs@CCCS"
        status = "RELEASED"
        sharing = "TLP:WHITE"
        category = "TECHNIQUE"
        technique = "packer:UPX"
        mitre_att = "T1045"

    condition:
        al_file_pe_sections_name matches /UPX[0-9]/
}

In this rule we are checking if the file.pe.sections.name tags include a value of UPX0 to UPX9. In this service, any previously generated Assemblyline tag can be inspected by using the following format:

al_(tag_name) where '.' in the tag_name are replaced by '_'

# i.e. if you want to match on network.ip tags you would use al_network_ip

Limitation

The way that externals are implemented in YARA, we cannot give a list of values for a tag type field. Therefor, if there are multiple values for one tag type, they will be concatenated using pipes.

For exemple, if a result has the following network.static.ip tags: 127.0.0.1, 127.0.0.11. This will be represented in Yara externals as: "127.0.0.1 | 127.0.1.1". This means that you cannot use exact matches inside your signature and you cannot use startswith and endswith regexes (^$) because you don't know how many tags of a different type have been generated.

That said you could use word delimiter boundaries to find an exact match. So if you wanted to match to localhost IP in the previous exemple you could use the following:

al_network_static_ip matches /\b127\.0\.0\.1\b/

Image variants and tags

Assemblyline services are built from the Assemblyline service base image, which is based on Debian 11 with Python 3.11.

Assemblyline services use the following tag definitions:

Tag Type Description Example Tag
latest The most recent build (can be unstable). latest
build_type The type of build used. dev is the latest unstable build. stable is the latest stable build. stable or dev
series Complete build details, including version and build type: version.buildType. 4.5.stable, 4.5.1.dev3

Running this service

This is an Assemblyline service. It is designed to run as part of the Assemblyline framework.

If you would like to test this service locally, you can run the Docker image directly from the a shell:

docker run \
    --name Tagcheck \
    --env SERVICE_API_HOST=http://`ip addr show docker0 | grep "inet " | awk '{print $2}' | cut -f1 -d"/"`:5003 \
    --network=host \
    cccs/assemblyline-service-tagcheck

To add this service to your Assemblyline deployment, follow this guide.

Documentation

General Assemblyline documentation can be found at: https://cybercentrecanada.github.io/assemblyline4_docs/

Service Tagcheck

Il s'agit d'un service de post-traitement qui compare tous les TAG générés par d'autres services à un jeu de signatures utilisant les signatures YARA.

Détails du service

Source de la signature

Par défaut, le service tagcheck exécute un petit ensemble de signatures situé à l'adresse https://assemblyline-support.s3.amazonaws.com/tagcheck.rules. Ces règles sont principalement axées sur l'analyse dynamique des résultats.

Format de la signature

Tagcheck utilise également le format de signature CCCS, mais avec l'ajout d'un élément externe qui permet aux auteurs de signatures de faire référence aux balises AL à l'intérieur de leur signature. Voici un exemple :

rule UPX_Packer_PE_Section {

    meta:
        version = "1.0"
        description = "Identifies UPX packer by PE section names"
        source = "CCCS"
        author = "assemblyline_devs@CCCS"
        status = "RELEASED"
        sharing = "TLP:WHITE"
        category = "TECHNIQUE"
        technique = "packer:UPX"
        mitre_att = "T1045"

    condition:
        al_file_pe_sections_name matches /UPX[0-9]/
}

Dans cette règle, nous vérifions si les balises file.pe.sections.name comprennent une valeur comprise entre UPX0 et UPX9. Dans ce service, toute balise Assemblyline générée précédemment peut être inspectée en utilisant le format suivant :

al_(nom_de_la_balise) où les '.' du nom de la balise sont remplacés par des '_'

# Par exemple, si vous voulez faire correspondre les balises network.ip, vous devez utiliser al_network_ip.

Limitation

La manière dont les éléments externes sont implémentés dans YARA ne permettent pas de donner une liste de valeurs pour un champ de type de balise. Par conséquent, s'il y a plusieurs valeurs pour un type de balise, elles seront concaténées à l'aide de pipes.

Par exemple, si un résultat a les balises network.static.ip suivantes : 127.0.0.1, 127.0.0.11. Ceci sera représenté dans les externes de Yara comme : " 127.0.0.1 | 127.0.1.1 ". Cela signifie que vous ne pouvez pas utiliser de correspondances exactes dans votre signature et que vous ne pouvez pas utiliser les expressions régulières startswith et endswith (^$) parce que vous ne savez pas combien de balises d'un type différent ont été générées.

Cela dit, vous pouvez utiliser les délimiteurs de mots pour trouver une correspondance exacte. Ainsi, si vous vouliez faire correspondre l'IP de localhost dans l'exemple précédent, vous pourriez utiliser ce qui suit :

al_network_static_ip correspond à /\b127\.0\.0\.1\b/

Variantes et étiquettes d'image

Les services d'Assemblyline sont construits à partir de l'image de base Assemblyline service, qui est basée sur Debian 11 avec Python 3.11.

Les services d'Assemblyline utilisent les définitions d'étiquettes suivantes:

Type d'étiquette Description Exemple d'étiquette
dernière version La version la plus récente (peut être instable). latest
build_type Type de construction utilisé. dev est la dernière version instable. stable est la dernière version stable. stable ou dev
série Détails de construction complets, comprenant la version et le type de build: version.buildType. 4.5.stable, 4.5.1.dev3

Exécution de ce service

Ce service est spécialement optimisé pour fonctionner dans le cadre d'un déploiement d'Assemblyline.

Si vous souhaitez tester ce service localement, vous pouvez exécuter l'image Docker directement à partir d'un terminal:

docker run \
    --name Tagcheck \
    --env SERVICE_API_HOST=http://`ip addr show docker0 | grep "inet " | awk '{print $2}' | cut -f1 -d"/"`:5003 \
    --network=host \
    cccs/assemblyline-service-tagcheck

Pour ajouter ce service à votre déploiement d'Assemblyline, suivez ceci guide.

Documentation

La documentation générale sur Assemblyline peut être consultée à l'adresse suivante: https://cybercentrecanada.github.io/assemblyline4_docs/