Dans un premier temps, nous devons trouver un moyen d’exporter du MISP vers squid. Un moyen de le faire serait de pouvoir exporter du MISP en .conf squid afin que squid puisse traiter les règles MISP. Inopinément l’API MISP ne permet pas d’exporter des .conf squid. Pour contourner ce problème, nous allons donc passer par l’antivirus de squid. En effet, ClamAV, l’antivirus de squid permet de bloquer en fonction de règles YARA. L’API de MISP permet d’exporter des règles YARA, ce qui va donc nous permettre d’exporter les règles MISP en règles compréhensibles par squid. Dans un premier temps, nous allons voir comment faire en sorte que des règles YARA soient reconnus par ClamAV.
Pour cela, nous allons créer une règle YARA à la main et allons essayer de la faire interpreter par ClamAV pour voir si cela fonctionne.
Nous devons placer la règle YARA dans un dossier et indiquer à ClamAV que les règles YARA seront présentes ici. Nous pouvons trouver dans quel dossier ClamAV récupère les règles YARA par défaut. Ce chemin est dans le fichier “/usr/local/etc/freshclam.conf”. Nous voyons que le chemin d’accès pour la variable DatabaseDirectory est “/var/db/clamav”. Toutes les règles YARA présentent ici seront en conséquence interprétés.

Nous allons donc ajouter une règle pour tester que ClamAV prenne bien en compte les règles qui seront mise dans ce dossier.

Voici le script que nous allons utiliser :
rule bonjour
{
strings:
$a = "bonjour"
conditions:
$a
}
Ce simple script va vérifier la présence du mot clé “bonjour” dans un fichier, permettant de bloquer un potentiel virus ou même une page web contenant le mot clé.
Afin de tester notre règle nous allons créer un fichier de tests.

Celui-ci contient le mot clé “bonjour”.

Nous crééons aussi un fichier ne contenant pas le mot clé pour tester le bon fonctionnement de notre règle qui ne devras donc pas bloquer ce fichier.

Le mot clé n’est pas présent dans le fichier.

Nous lancons la commande clamscan (1) qui va donc en théorie chercher les règles YARA présentent dans le chemin d’accès et analyser les fichiers à la racine sur les bases de ces règles.
Nous pouvons voir que fichier “ContainsKeyword.txt” qui contient notre mot clé est bien repéré par ClamAV (2).
Il en va de même pour le fichier “.viminfo” qui contient en cash les fichiers que nous avons modifié avec vim, donc bonjour.yara, ce qui fait apparaître le mot clé dans ce fichier (3).
Enfin, notre fichier témoin, ne contenant pas le mot clé, lui, n’est pas repéré par ClamAV (4).

Pour exporter du MISP en YARA, nous utilisons l’endpoint event/restSearch de l’API MISP.
Nous l’appelons via une reqete POST envoyé avec CURL dans un script shell.
Pour la documentation de ce script, voir la partie documentation.
Le script, grâce à sa requête POST, va récupérer le contenu des feeds APT41 sous forme de règle YARA et les mettre directement dans un fichier .yara (/var/db/clamav/misp.yara).
Nous pouvons tester le bon fonctionnement du script.
Nous pouvons voir qu’avant son execution, le répertoire /var/db/clamav ne contient aucun fichier .yara

Nous lancons le script pour voir si un fichier contenant des règles YARA est ajouté.

En effet, nous voyons qu’un fichier apt41.yara est apparu.

Nous pouvons voir que le fichier yara exporté est le suivant :
// ===================================== GENERATED ====================================
rule MISP_EVENT_aef6c1fa_cd3a_419a_a0f7_77afe4bc301f_PART1 : generated
{
meta:
MISP_EVENT_INFO = "APT41 feed"
MISP_EVENT_UUID = "aef6c1fa-cd3a-419a-a0f7-77afe4bc301f"
MISP_ORIGIN = "Automatically generated from non-Yara attribute(s)"
strings:
$ = "znetdevil@msn.com" ascii wide
$ = "zeplinlegal@gmail.com" ascii wide
$ = "zeplincopyright@gmail.com" ascii wide
$ = "zeplin.law@gmail.com" ascii wide
$ = "ysummer56@gmail.com" ascii wide
$ = "wrennieeller564c@gmail.com" ascii wide
$ = "wljsdd@gmail.com" ascii wide
$ = "willardstone92@gmail.com" ascii wide
$ = "violetteclaveau54c@gmail.com" ascii wide
$ = "vaniadower5641c@gmail.com" ascii wide
$ = "us.webgame@gmail.com" ascii wide
$ = "unameid@gmail.com" ascii wide
$ = "ualmansife523f@gmail.com" ascii wide
$ = "tw.slax@gmail.com" ascii wide
$ = "tony.john90@outlook.com" ascii wide
$ = "thplldeepak@gmail.com" ascii wide
$ = "terrenceruddell59@gmail.com" ascii wide
$ = "petter.mark@mail.com" ascii wide
$ = "petervc1983@gmail.com" ascii wide
$ = "peterlovell29@gmail.com" ascii wide
$ = "paulmckee518@gmail.com" ascii wide
$ = "parameters4512@outlook.com" ascii wide
$ = "nuyuchen1983@hotmail.com" ascii wide
$ = "nslookup168@gmail.com" ascii wide
$ = "nohavesky@hotmail.com" ascii wide
$ = "nodarie89@yahoo.com" ascii wide
$ = "niying322@gmail.com" ascii wide
$ = "nesakjsfdkl8754@gmail.com" ascii wide
$ = "nanettehoagland676@gmail.com" ascii wide
$ = "myjobs.kr.hr@gmail.com" ascii wide
$ = "mstsc@live.com" ascii wide
$ = "ms.alienware@gmail.com" ascii wide
$ = "CVE-2020-10189" ascii wide
$ = "CVE-2019-16278" ascii wide
$ = "CVE-2019-1653" ascii wide
$ = "CVE-2019-1652" ascii wide
$ = "CVE-2019-11510" ascii wide
$ = "CVE-2019-16920" ascii wide
$ = "CVE-2019-19781" ascii wide
condition:
any of them
}
rule MISP_EVENT_b6519ffc_f67a_4f3c_9607_7bb9a0dfb49c_PART1 : generated
{
meta:
MISP_EVENT_INFO = "APT41 feed"
MISP_EVENT_UUID = "b6519ffc-f67a-4f3c-9607-7bb9a0dfb49c"
MISP_ORIGIN = "Automatically generated from non-Yara attribute(s)"
strings:
$ = "znetdevil@msn.com" ascii wide
$ = "zeplinlegal@gmail.com" ascii wide
$ = "zeplincopyright@gmail.com" ascii wide
$ = "zeplin.law@gmail.com" ascii wide
$ = "ysummer56@gmail.com" ascii wide
$ = "wrennieeller564c@gmail.com" ascii wide
$ = "wljsdd@gmail.com" ascii wide
$ = "willardstone92@gmail.com" ascii wide
$ = "violetteclaveau54c@gmail.com" ascii wide
$ = "vaniadower5641c@gmail.com" ascii wide
$ = "us.webgame@gmail.com" ascii wide
$ = "unameid@gmail.com" ascii wide
$ = "ualmansife523f@gmail.com" ascii wide
$ = "tw.slax@gmail.com" ascii wide
$ = "tony.john90@outlook.com" ascii wide
$ = "thplldeepak@gmail.com" ascii wide
$ = "terrenceruddell59@gmail.com" ascii wide
$ = "takeown2009@outlook.com" ascii wide
$ = "symanteclabs@outlook.com" ascii wide
$ = "sworgan88@gmail.com" ascii wide
$ = "susanne.sawer@gmail.com" ascii wide
$ = "summery679@gmail.com" ascii wide
$ = "stevenwhipple48@gmail.com" ascii wide
$ = "sotadoanfybs@hotmail.com" ascii wide
$ = "skydrivewinsborn@hotmail.com" ascii wide
$ = "skydrive1951@hotmail.com" ascii wide
$ = "shavonyasbjqoj@gmail.com" ascii wide
$ = "ryandaws@outlook.com" ascii wide
$ = "robertblanchard511@gmail.com" ascii wide
$ = "robertaponte331@gmail.com" ascii wide
$ = "richardreed647@gmail.com" ascii wide
$ = "pdbana.dynamic-dns.net" ascii wide
$ = "hee_chow_ming@yahoo.com.hk" ascii wide
$ = "CVE-2020-10189" ascii wide
$ = "CVE-2019-16278" ascii wide
$ = "CVE-2019-1653" ascii wide
$ = "CVE-2019-1652" ascii wide
$ = "CVE-2019-11510" ascii wide
$ = "CVE-2019-16920" ascii wide
$ = "CVE-2019-19781" ascii wide
condition:
any of them
}
// ===================================== AS-IS ====================================
Nous pouvons lancer un clamscan pour voir si nos règles YARA importé de MISP sont bien prises en compte.

Aucun de nos fichiers n’est reconnu comme malveillant par nos règles issues de MISP.