Nessus - un scanner de vulnérabilité
Nessus - vulnérabilité
Pour effectuer ses attaques, le serveur Nessus utilise des plugins. En réalité, ces plugins sont des scripts NASL que l'utilisateur active ou désactive selon la configuration qu'il transmet au serveur.Gestion des vulnérabilités
Les développeurs de Nessus s'appuient sur 3 principaux sites pour récupérer des informations sur les failles de sécurité :
- CVE,
- Security Focus,
- National Vulnerability Database.
Security Focus
Security Focus est un bugtraquer et une base de données de vulnérabilités en ligne. Security Focus a été racheté par Symantec en 2002.
CVE
Le site CVE (Common Vilnerabilities and Exposures) est un site web qui regroupe et standardise la description des différentes failles de sécurité connues.
Comme son nom l'indique, il permet de faire le lien entre les vulnérabilités et les risques que l'on court si une faille de sécurité est exploitée. Les informations du site sont identifiables par un ID CVE et sont donc accessibles directement à partir de l'URL (par la méthode GET). Les rapports générés par Nessus comportent des liens vers le site de CVE et utilisent les descriptions de ce site pour les intégrer directement dans ses rapports de scan.
National Vulnerability Database
National Vulnerability Database est le site principal de référence de Nessus. Ce site est un repository gouvernemental Américain pour le management des vulnérabilités. Grâce au protocole SCAP, le site peut être mis à jour automatiquement et Nessus peut exploiter les données générées.
Interpréteur NASL
Qu'est-ce qu'est NASL?
NASL est un acronyme de Nessus Attack Scipting Language. Le binaire NASL est un interpréteur maison, installé par défaut avec le serveur Nessus pour des scripts orientés sécurité. L'utilisateur qui gère le serveur Nessus peut donc écrire lui-même ses scripts de vulnérabilités NASL, les tester avec l'interpréteur et les partager. Pour que le serveur Nessus prenne en compte les scripts NASL qu'on a écrit, il faut les placer dans le répertoire où sont enregistrés les 32.000 plugins (dans /var/nessus/plugins/ par défaut) et activer l'option dans la section PLUGINS_PREF du fichier de configuration du client (donc dans ~/.nessusrc) : Global variable settings[checkbox]:Enable experimental scripts = yes
D'un point de vue théorique, la technologie NASL a été conçue avec les particularités suivantes :
- l'analyse lexicale est réalisée en langage C car flex ne peut pas générer du code C réentrant,
- l'analyse syntaxique est effectuée en bison,
- NASL intègre un mécanisme de Garbage Collector poor.
C'est en utilisant cet interpréteur et les scripts NASL que Nessus va pouvoir tester les failles de sécurité sur les machines visées
Fonctionnement
D'un point de vue utilisateur, l'interpréteur NASL n'est utilisé uniquement que pour la phase de debug des scripts. Pour tester son script sur une machine, l'utilisateur doit écrire la commande suivante : nasl –t « @IP de la machine visée » « le script contenant la vulnérabilité à tester ».
Structure de script NASL
Un script NASL se décompose en deux zones :
- une zone de description,
- une zone d'attaque.
# # (C) Tenable Network Security, Inc. # include("compat.inc"); # Début de la zone de description if(description) { script_id(15628); script_cve_id("CVE-2004-1626", "CVE-2004-1627"); script_bugtraq_id(11508); script_xref(name:"OSVDB", value:"11030"); script_xref(name:"OSVDB", value:"12347"); script_xref(name:"Secunia", value:"12941"); script_version("$Revision: 1.8 $"); script_name(english:"Ability FTP Server Multiple Command Remote Buffer Overflows"); script_summary(english:"Gets the version of the remote Ability FTP server"); script_set_attribute(attribute:"synopsis", value: "The remote FTP server is vulnerable to multiple remote buffer overflow attacks. "); script_set_attribute(attribute:"description", value: "The remote host is running Ability FTP Server. It is reported that the remote version of this software is prone to a remote buffer overflow attack via the 'STOR' and 'APPE' commands. An attacker, exploiting this flaw, would only need to be able to craft and send a query to the FTP server on its service port (usually 21)."); script_set_attribute(attribute:"see_also", value: "http://archives.neohapsis.com/archives/bugtraq/2004-10/0244.html"); script_set_attribute(attribute:"see_also", value: "http://lists.virus.org/dw-0day-0412/msg00004.html"); script_set_attribute(attribute:"solution", value: "Upgrade to Ability FTP Server version 2.35 or newer."); script_set_attribute(attribute:"cvss_vector", value:"CVSS2#AV:N/AC:L/Au:N/C:C/I:C/A:C"); script_set_attribute(attribute:"plugin_publication_date", value:"2004/11/04"); script_set_attribute(attribute:"vuln_publication_date", value: "2004/10/22"); script_end_attributes(); script_category(ACT_GATHER_INFO); script_copyright(english:"This script is Copyright (C) 2004-2010 Tenable Network Security, Inc."); script_family(english:"FTP"); script_dependencie("ftpserver_detect_type_nd_version.nasl"); script_require_ports("Services/ftp", 21); exit(0); } # Fin de la zone de description # Début de la zone d'attaque include("ftp_func.inc"); port = get_kb_item("Services/ftp"); if ( ! port ) port = 21; if ( ! get_port_state(port) ) exit(0); banner = get_ftp_banner(port:port); if ( ! banner ) exit(0); if ( egrep(pattern:"^220 Welcome to Code-Crafters - Ability Server ([0-1]\..*|2\.([0-2]|3[0-4]))[^0-9]", string:banner) ) security_hole(port); # Fin de la zone d'attaque
Zone de description
La zone de description permet de générer la description de la faille de sécurité testée avec le script. C'est cette même description qui sera utilisée pour installer un correctif. Elle comprend entre autres :
- le nom de la faille de sécurité
- un résumé de la faille de sécurité
- des CVE_ID
- des bugtraqID
- des dépendances
- ...
Zone d'attaque
La zone d'attaque permet d'écrire du code pour tester une vulnérabilité.
Pour présenter cette partie attaque, nous allons nous appuyer sur un script NASL existant : ability_ftp_overflow.nasl. Ce script teste les serveurs FTP et vérifie si c'est le logiciel Ability FTP Server qui gère le service FTP. Car, dans le cas où c'est un serveur Ability, on sait grâce aux sites de références qu'il existe une faille de sécurité critique. Un utilisateur distant peut exécuter les commandes APPE et STOR pour effectuer un buffer overflow et donc rendre inaccessible le serveur.
Pour tester cette faille de sécurité critique, NASL possède plusieurs librairies spécialisées. Dans notre cas, il existe une librairie ftp_func.inc qui permet d'inclure toutes les fonctionnalités dans du code NASL.
Nous allons maintenant dérouler rapidement la zone d'attaque pour bien expliquer la manière dont fonctionnent les scripts NASL. Dans l'exemple ci-dessus, le script fait d'abord un appel à la fonction get_kb_item (après l'inclusion de ftp_function.inc). get_kb_item est une knowledge base fonction. Les knowledge base fonctions permettent la communication inter-plugin. Dans notre exemple, cette fonction permet de connaître le port du service passé en paramètre (un service réseau n'est pas forcément à l'écoute sur son port par défaut). Si la fonction get_kb_item ne connaît pas le port du service passé en paramètre, alors le programme prend le port par défaut et teste si ce port est ouvert.
Le script NASL tente ensuite de récupérer la bannière de bienvenue du service FTP. Enfin, il essaie de parser cette bannière pour "matcher" un bienvenue de Ability Server. Dans le cas où la bannière a "matché", la faille de sécurité est déclenchée.