225 lines
		
	
	
		
			7.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			225 lines
		
	
	
		
			7.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
 | 
						||
# Vuls: VULnerability Scanner
 | 
						||
 | 
						||
[](http://goo.gl/forms/xm5KFo35tu)
 | 
						||
 | 
						||
Scanneur de vulnérabilité Linux, sans agent, écrit en golang
 | 
						||
 | 
						||
Nous avons une équipe Slack. [Rejoignez notre Slack Team](http://goo.gl/forms/xm5KFo35tu)  
 | 
						||
 | 
						||
[README en English](https://github.com/future-architect/vuls/blob/master/README.md)  
 | 
						||
[README en Japonais](https://github.com/future-architect/vuls/blob/master/README.ja.md)  
 | 
						||
 | 
						||
[](https://asciinema.org/a/3y9zrf950agiko7klg8abvyck)
 | 
						||
 | 
						||

 | 
						||
 | 
						||
 | 
						||
 | 
						||
----
 | 
						||
 | 
						||
# Résumé
 | 
						||
 | 
						||
Effectuer des recherches de vulnérabilités et des mises à jour quotidiennes peut etre un fardeau pour un administrateur système.
 | 
						||
Afin d'éviter des interruptions systèmes dans un environnement de production, il est fréquent pour un administrateur système de choisir de ne pas utiliser la fonction de mise à jour automatique proposée par le gestionnaire de paquets et d'effecter ces mises à jour manuellement.
 | 
						||
Ce qui implique les problèmes suivants :
 | 
						||
- L'administrateur système devra surveiller constamment toutes les nouvelles vulnérabilités dans NVD (National Vulnerability Database) etc.
 | 
						||
- Il pourrait être impossible pour un administrateur système de surveiller tous les logiciels installés sur un serveur.
 | 
						||
- Il est coûteux d'effectuer une analyse pour déterminer quels sont les serveurs affectés par de nouvelles vulnérabilités. La possibilité de négliger un serveur ou deux est bien présente.
 | 
						||
 | 
						||
Vuls est un outil crée pour palier aux problèmes listés ci-dessus. Voici ses caractéristiques.
 | 
						||
- Informer les utilisateurs des vulnérabilités système.
 | 
						||
- Informer les utilisateurs des systèmes concernés. 
 | 
						||
- La détection de vulnérabilités est effectuée automatiquement pour éviter toute négligence.
 | 
						||
- Les rapports sont générés régulièrement via CRON pour mieux gérer ces vulnérabilités.
 | 
						||
 | 
						||

 | 
						||
 | 
						||
----
 | 
						||
 | 
						||
# Caractéristiques principales
 | 
						||
 | 
						||
- Recherche de vulnérabilités sur des serveurs Linux
 | 
						||
    - Supporte Ubuntu, Debian, CentOS, Amazon Linux, RHEL
 | 
						||
    - Cloud, auto-hébergement, Docker
 | 
						||
- Scan d'intergiciels non inclus dans le gestionnaire de paquets de l'OS
 | 
						||
    - Scan d'intergiciels, de libraries de language de programmation et framework pour des vulnérabilités
 | 
						||
    - Supporte les logiciels inscrits au CPE
 | 
						||
- Architecture sans agent
 | 
						||
    - L'utilisateur doit seulement mettre en place VULS sur une seule machine qui se connectera aux autres via SSH
 | 
						||
- Génération automatique des fichiers de configuration
 | 
						||
    - Auto detection de serveurs via CIDR et génération de configuration
 | 
						||
- Email et notification Slack possibles (supporte le Japonais) 
 | 
						||
- Les résultats d'un scan sont accessibles dans un shell via TUI Viewer terminal.
 | 
						||
 | 
						||
----
 | 
						||
 | 
						||
# Ce que Vuls ne fait pas
 | 
						||
 | 
						||
- Vuls ne met pas à jour les programmes affectés par les vulnérabilités découvertes.
 | 
						||
 | 
						||
----
 | 
						||
 | 
						||
# Hello Vuls 
 | 
						||
 | 
						||
Ce tutoriel décrit la recherche de vulnérabilités sur une machine locale avec Vuls.
 | 
						||
Voici les étapes à suivre. 
 | 
						||
 | 
						||
1. Démrarrage d'Amazon Linux
 | 
						||
1. Autoriser les connexions SSH depuis localhost
 | 
						||
1. Installation des prérequis
 | 
						||
1. Déploiement de go-cve-dictionary
 | 
						||
1. Deploiement de Vuls
 | 
						||
1. Configuration
 | 
						||
1. Préparation
 | 
						||
1. Scan
 | 
						||
1. TUI(Terminal-Based User Interface)
 | 
						||
 | 
						||
## Step1. Démrarrage d'Amazon Linux
 | 
						||
 | 
						||
- Nous utilisons dans cette exemple une vieille AMI (amzn-ami-hvm-2015.09.1.x86_64-gp2 - ami-383c1956)
 | 
						||
- Taille de l'instance : t2.medium
 | 
						||
    - La première fois, t2.medium et plus sont requis pour la récupération des CVE depuis NVD (2.3GB de mémoire utilisé)
 | 
						||
    - Une fois la récupération initiale des données NVD terminée vous pouvez passer sur une instance t2.nano.
 | 
						||
- Ajoutez la configuration suivante au cloud-init, afin d'éviter une mise à jour automatique lors du premier démarrage.
 | 
						||
 | 
						||
    - [Q: How do I disable the automatic installation of critical and important security updates on initial launch?](https://aws.amazon.com/amazon-linux-ami/faqs/?nc1=h_ls)
 | 
						||
    ```
 | 
						||
    #cloud-config
 | 
						||
    repo_upgrade: none
 | 
						||
    ```
 | 
						||
 | 
						||
## Step2. Paramètres SSH
 | 
						||
 | 
						||
Il est obligatoire que le serveur puisse se connecter à son propre serveur SSH
 | 
						||
 | 
						||
Générez une paire de clés SSH et ajoutez la clé publique dans le fichier authorized_keys
 | 
						||
```bash
 | 
						||
$ ssh-keygen -t rsa
 | 
						||
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
 | 
						||
$ chmod 600 ~/.ssh/authorized_keys
 | 
						||
```
 | 
						||
 | 
						||
## Step3. Installation des prérequis
 | 
						||
 | 
						||
Vuls requiert l'installation des paquets suivants : 
 | 
						||
 | 
						||
- sqlite
 | 
						||
- git
 | 
						||
- gcc
 | 
						||
- go v1.6
 | 
						||
    - https://golang.org/doc/install
 | 
						||
 | 
						||
```bash
 | 
						||
$ ssh ec2-user@52.100.100.100  -i ~/.ssh/private.pem
 | 
						||
$ sudo yum -y install sqlite git gcc
 | 
						||
$ wget https://storage.googleapis.com/golang/go1.6.linux-amd64.tar.gz
 | 
						||
$ sudo tar -C /usr/local -xzf go1.6.linux-amd64.tar.gz
 | 
						||
$ mkdir $HOME/go
 | 
						||
```
 | 
						||
Ajoutez les lignes suivantes dans /etc/profile.d/goenv.sh
 | 
						||
 | 
						||
```bash
 | 
						||
export GOROOT=/usr/local/go
 | 
						||
export GOPATH=$HOME/go
 | 
						||
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
 | 
						||
```
 | 
						||
 | 
						||
Ajoutons ces nouvelles variables d’environnement au shell
 | 
						||
```bash
 | 
						||
$ source /etc/profile.d/goenv.sh
 | 
						||
```
 | 
						||
 | 
						||
## Step4. Déploiement de [go-cve-dictionary](https://github.com/kotakanbe/go-cve-dictionary)
 | 
						||
 | 
						||
go get
 | 
						||
 | 
						||
```bash
 | 
						||
$ sudo mkdir /var/log/vuls
 | 
						||
$ sudo chown ec2-user /var/log/vuls
 | 
						||
$ sudo chmod 700 /var/log/vuls
 | 
						||
$ go get github.com/kotakanbe/go-cve-dictionary
 | 
						||
```
 | 
						||
 | 
						||
Démarrez go-cve-dictionary en mode serveur.
 | 
						||
Lors de son premier démarrage go-cve-dictionary récupère la liste des vulnérabilités depuis NVD
 | 
						||
Cette opération prend environ 10 minutes (sur AWS).  
 | 
						||
 | 
						||
## Step5. Déploiement de Vuls
 | 
						||
 | 
						||
Ouvrez un second terminal, connectez vous à l'instance ec2 via SSH
 | 
						||
 | 
						||
go get
 | 
						||
```
 | 
						||
$ go get github.com/future-architect/vuls
 | 
						||
```
 | 
						||
 | 
						||
## Step6. Configuration
 | 
						||
 | 
						||
Créez un fichier de configuration (TOML format).
 | 
						||
 | 
						||
```
 | 
						||
$ cat config.toml
 | 
						||
[servers]
 | 
						||
 | 
						||
[servers.172-31-4-82]
 | 
						||
host         = "172.31.4.82"
 | 
						||
port        = "22"
 | 
						||
user        = "ec2-user"
 | 
						||
keyPath     = "/home/ec2-user/.ssh/id_rsa"
 | 
						||
```
 | 
						||
 | 
						||
## Step7. Configuration des serveurs cibles vuls  
 | 
						||
 | 
						||
```
 | 
						||
$ vuls prepare
 | 
						||
```
 | 
						||
 | 
						||
## Step8. Scan
 | 
						||
 | 
						||
```
 | 
						||
$ vuls scan -cve-dictionary-dbpath=$PWD/cve.sqlite3
 | 
						||
INFO[0000] Begin scanning (config: /home/ec2-user/config.toml)
 | 
						||
 | 
						||
... snip ...
 | 
						||
 | 
						||
172-31-4-82 (amazon 2015.09)
 | 
						||
============================
 | 
						||
CVE-2016-0494   10.0    Unspecified vulnerability in the Java SE and Java SE Embedded components in Oracle
 | 
						||
                        Java SE 6u105, 7u91, and 8u66 and Java SE Embedded 8u65 allows remote attackers to
 | 
						||
                        affect confidentiality, integrity, and availability via unknown vectors related to
 | 
						||
                        2D.
 | 
						||
... snip ...
 | 
						||
 | 
						||
CVE-2016-0494
 | 
						||
-------------
 | 
						||
Score           10.0 (High)
 | 
						||
Vector          (AV:N/AC:L/Au:N/C:C/I:C/A:C)
 | 
						||
Summary         Unspecified vulnerability in the Java SE and Java SE Embedded components in Oracle Java SE 6u105,
 | 
						||
                7u91, and 8u66 and Java SE Embedded 8u65 allows remote attackers to affect confidentiality,
 | 
						||
                integrity, and availability via unknown vectors related to 2D.
 | 
						||
NVD             https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2016-0494
 | 
						||
MITRE           https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-0494
 | 
						||
CVE Details     http://www.cvedetails.com/cve/CVE-2016-0494
 | 
						||
CVSS Claculator https://nvd.nist.gov/cvss/v2-calculator?name=CVE-2016-0494&vector=(AV:N/AC:L/Au:N/C:C/I:C/A:C)
 | 
						||
RHEL-CVE        https://access.redhat.com/security/cve/CVE-2016-0494
 | 
						||
ALAS-2016-643   https://alas.aws.amazon.com/ALAS-2016-643.html
 | 
						||
Package/CPE     java-1.7.0-openjdk-1.7.0.91-2.6.2.2.63.amzn1 -> java-1.7.0-openjdk-1:1.7.0.95-2.6.4.0.65.amzn1
 | 
						||
 | 
						||
```
 | 
						||
 | 
						||
## Step9. TUI
 | 
						||
 | 
						||
Les résultats de Vuls peuvent etre affichés dans un Shell via TUI (Terminal-Based User Interface).
 | 
						||
 | 
						||
```
 | 
						||
$ vuls tui
 | 
						||
```
 | 
						||
 | 
						||

 | 
						||
 | 
						||
 | 
						||
----
 | 
						||
 | 
						||
For more information see [README in English](https://github.com/future-architect/vuls/blob/master/README.md)  
 |