Merge pull request #116 from future-architect/readme-japanese
Improve Readme.ja
This commit is contained in:
		
							
								
								
									
										434
									
								
								README.fr.md
									
									
									
									
									
								
							
							
						
						
									
										434
									
								
								README.fr.md
									
									
									
									
									
								
							@@ -7,6 +7,7 @@ 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)
 | 
			
		||||
@@ -144,22 +145,6 @@ 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).  
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
$ go-cve-dictionary server
 | 
			
		||||
... Fetching ...
 | 
			
		||||
$ ls -alh cve.sqlite3
 | 
			
		||||
-rw-r--r-- 1 ec2-user ec2-user 7.0M Mar 24 13:20 cve.sqlite3
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Une fois les informations de vulnérabilités collectées redémarrez le mode serveur.
 | 
			
		||||
```bash
 | 
			
		||||
$ go-cve-dictionary server
 | 
			
		||||
[Mar 24 15:21:55]  INFO Opening DB. datafile: /home/ec2-user/cve.sqlite3
 | 
			
		||||
[Mar 24 15:21:55]  INFO Migrating DB
 | 
			
		||||
[Mar 24 15:21:56]  INFO Starting HTTP Sever...
 | 
			
		||||
[Mar 24 15:21:56]  INFO Listening on 127.0.0.1:1323
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Step5. Déploiement de Vuls
 | 
			
		||||
 | 
			
		||||
Ouvrez un second terminal, connectez vous à l'instance ec2 via SSH
 | 
			
		||||
@@ -193,7 +178,7 @@ $ vuls prepare
 | 
			
		||||
## Step8. Scan
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
$ vuls scan
 | 
			
		||||
$ vuls scan -cve-dictionary-dbpath=$PWD/cve.sqlite3
 | 
			
		||||
INFO[0000] Begin scanning (config: /home/ec2-user/config.toml)
 | 
			
		||||
 | 
			
		||||
... snip ...
 | 
			
		||||
@@ -236,417 +221,4 @@ $ vuls tui
 | 
			
		||||
 | 
			
		||||
----
 | 
			
		||||
 | 
			
		||||
# Architecture
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
## go-cve-dictinary  
 | 
			
		||||
- Collecte les informations de vulnérabilités depuis NVD, JVN(Japonais), et les envoie dans SQLite.
 | 
			
		||||
 | 
			
		||||
## Vuls
 | 
			
		||||
- Scan de vulnérabilités sur serveurs et création d'une liste contenant les CVE ID
 | 
			
		||||
- Pour des informations plus détaillés sur une CVE, envoie une requete HTTP à go-cve-dictinary 
 | 
			
		||||
- Rapport à Slack et par Email
 | 
			
		||||
- L'administrateur système peut voir les résultats du dernier rapport dans le terminal
 | 
			
		||||
 | 
			
		||||
----
 | 
			
		||||
 | 
			
		||||
# Exemples d'utilisation
 | 
			
		||||
 | 
			
		||||
## Scan de tous les serverus
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
## Scan d'un seul serveur
 | 
			
		||||
 | 
			
		||||
web/app server in the same configuration under the load balancer
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
----
 | 
			
		||||
 | 
			
		||||
# OS supportés 
 | 
			
		||||
 | 
			
		||||
| Distribution|            Release |
 | 
			
		||||
|:------------|-------------------:|
 | 
			
		||||
| Ubuntu      |          12, 14, 16|
 | 
			
		||||
| Debian      |                7, 8|
 | 
			
		||||
| RHEL        |          4, 5, 6, 7|
 | 
			
		||||
| CentOS      |             5, 6, 7|
 | 
			
		||||
| Amazon Linux|                All |
 | 
			
		||||
 | 
			
		||||
----
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Usage: Détection Automatique de Serveurs 
 | 
			
		||||
 | 
			
		||||
La sous-commande Discovery permet de détecter les serveurs actifs dans un range d'IP CIDR, les résultas sont directement affichés dans le terminal en respectant le format du fichier de configuration (TOML format).
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
$ vuls discover -help
 | 
			
		||||
discover:
 | 
			
		||||
        discover 192.168.0.0/24
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Exemple
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
$ vuls discover 172.31.4.0/24
 | 
			
		||||
# Create config.toml using below and then ./vuls --config=/path/to/config.toml
 | 
			
		||||
 | 
			
		||||
[slack]
 | 
			
		||||
hookURL      = "https://hooks.slack.com/services/abc123/defghijklmnopqrstuvwxyz"
 | 
			
		||||
channel      = "#channel-name"
 | 
			
		||||
#channel      = "${servername}"
 | 
			
		||||
iconEmoji    = ":ghost:"
 | 
			
		||||
authUser     = "username"
 | 
			
		||||
notifyUsers  = ["@username"]
 | 
			
		||||
 | 
			
		||||
[mail]
 | 
			
		||||
smtpAddr      = "smtp.gmail.com"
 | 
			
		||||
smtpPort      = 465
 | 
			
		||||
user          = "username"
 | 
			
		||||
password      = "password"
 | 
			
		||||
from          = "from@address.com"
 | 
			
		||||
to            = ["to@address.com"]
 | 
			
		||||
cc            = ["cc@address.com"]
 | 
			
		||||
subjectPrefix = "[vuls]"
 | 
			
		||||
 | 
			
		||||
[default]
 | 
			
		||||
#port        = "22"
 | 
			
		||||
#user        = "username"
 | 
			
		||||
#password    = "password"
 | 
			
		||||
#keyPath     = "/home/username/.ssh/id_rsa"
 | 
			
		||||
#keyPassword = "password"
 | 
			
		||||
 | 
			
		||||
[servers]
 | 
			
		||||
 | 
			
		||||
[servers.172-31-4-82]
 | 
			
		||||
host         = "172.31.4.82"
 | 
			
		||||
#port        = "22"
 | 
			
		||||
#user        = "root"
 | 
			
		||||
#password    = "password"
 | 
			
		||||
#keyPath     = "/home/username/.ssh/id_rsa"
 | 
			
		||||
#keyPassword = "password"
 | 
			
		||||
#cpeNames = [
 | 
			
		||||
#  "cpe:/a:rubyonrails:ruby_on_rails:4.2.1",
 | 
			
		||||
#]
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Vous pouvez customiser votre configuration en utilisant ce modèle.
 | 
			
		||||
 | 
			
		||||
----
 | 
			
		||||
 | 
			
		||||
# Configuration
 | 
			
		||||
 | 
			
		||||
- Slack section
 | 
			
		||||
    ```
 | 
			
		||||
    [slack]
 | 
			
		||||
    hookURL      = "https://hooks.slack.com/services/abc123/defghijklmnopqrstuvwxyz"
 | 
			
		||||
    channel      = "#channel-name"
 | 
			
		||||
    #channel      = "${servername}"
 | 
			
		||||
    iconEmoji    = ":ghost:"
 | 
			
		||||
    authUser     = "username"
 | 
			
		||||
    notifyUsers  = ["@username"]
 | 
			
		||||
    ```
 | 
			
		||||
 | 
			
		||||
    - hookURL : Incomming webhook's URL  
 | 
			
		||||
    - channel : channel name.  
 | 
			
		||||
    If you set ${servername} to channel, the report will be sent to each channel.  
 | 
			
		||||
    In the following example, the report will be sent to the #server1 and #server2.  
 | 
			
		||||
    Be sure to create these channels before scanning.
 | 
			
		||||
      ```
 | 
			
		||||
      [slack]
 | 
			
		||||
      channel      = "${servername}"
 | 
			
		||||
      ...snip...
 | 
			
		||||
 | 
			
		||||
      [servers]
 | 
			
		||||
 | 
			
		||||
      [servers.server1]
 | 
			
		||||
      host         = "172.31.4.82"
 | 
			
		||||
      ...snip...
 | 
			
		||||
 | 
			
		||||
      [servers.server2]
 | 
			
		||||
      host         = "172.31.4.83"
 | 
			
		||||
      ...snip...
 | 
			
		||||
      ```
 | 
			
		||||
 | 
			
		||||
    - iconEmoji: emoji
 | 
			
		||||
    - authUser: username of the slack team
 | 
			
		||||
    - notifyUsers: a list of Slack usernames to send Slack notifications.
 | 
			
		||||
      If you set ["@foo", "@bar"] to notifyUsers, @foo @bar will be included in text.  
 | 
			
		||||
      So @foo, @bar can receive mobile push notifications on their smartphone.  
 | 
			
		||||
 | 
			
		||||
- Mail section
 | 
			
		||||
    ```
 | 
			
		||||
    [mail]
 | 
			
		||||
    smtpAddr      = "smtp.gmail.com"
 | 
			
		||||
    smtpPort      = 465
 | 
			
		||||
    user          = "username"
 | 
			
		||||
    password      = "password"
 | 
			
		||||
    from          = "from@address.com"
 | 
			
		||||
    to            = ["to@address.com"]
 | 
			
		||||
    cc            = ["cc@address.com"]
 | 
			
		||||
    subjectPrefix = "[vuls]"
 | 
			
		||||
    ```
 | 
			
		||||
 | 
			
		||||
- Default section
 | 
			
		||||
    ```
 | 
			
		||||
    [default]
 | 
			
		||||
    #port        = "22"
 | 
			
		||||
    #user        = "username"
 | 
			
		||||
    #password    = "password"
 | 
			
		||||
    #keyPath     = "/home/username/.ssh/id_rsa"
 | 
			
		||||
    #keyPassword = "password"
 | 
			
		||||
    ```
 | 
			
		||||
    Items of the default section will be used if not specified.
 | 
			
		||||
 | 
			
		||||
- servers section
 | 
			
		||||
    ```
 | 
			
		||||
    [servers]
 | 
			
		||||
 | 
			
		||||
    [servers.172-31-4-82]
 | 
			
		||||
    host         = "172.31.4.82"
 | 
			
		||||
    #port        = "22"
 | 
			
		||||
    #user        = "root"
 | 
			
		||||
    #password    = "password"
 | 
			
		||||
    #keyPath     = "/home/username/.ssh/id_rsa"
 | 
			
		||||
    #keyPassword = "password"
 | 
			
		||||
    #cpeNames = [
 | 
			
		||||
    #  "cpe:/a:rubyonrails:ruby_on_rails:4.2.1",
 | 
			
		||||
    #]
 | 
			
		||||
    ```
 | 
			
		||||
    Vous pouvez remplacer les valeurs par défaut indiquées en modifiant la section default
 | 
			
		||||
    Vuls supporte plusieurs méthodes d'authentification SSH :
 | 
			
		||||
    - SSH agent
 | 
			
		||||
    - SSH authentication par clés (avec mot de passe ou sans mot de passe)
 | 
			
		||||
    - Authentification par mot de passe
 | 
			
		||||
 | 
			
		||||
----
 | 
			
		||||
 | 
			
		||||
# Utilisation : Prepare
 | 
			
		||||
 | 
			
		||||
La sous-commande prepare installe tous les paquets nécessaires sur chaque serveur.
 | 
			
		||||
 | 
			
		||||
| Distribution|            Release | Requirements |
 | 
			
		||||
|:------------|-------------------:|:-------------|
 | 
			
		||||
| Ubuntu      |          12, 14, 16| -            |
 | 
			
		||||
| Debian      |                7, 8| apptitude    |
 | 
			
		||||
| CentOS      |                   5| yum-plugin-security, yum-changelog |
 | 
			
		||||
| CentOS      |                6, 7| yum-plugin-security, yum-plugin-changelog |
 | 
			
		||||
| Amazon      |                All | -            |
 | 
			
		||||
| RHEL        |         4, 5, 6, 7 | -            |
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
$ vuls prepare -help
 | 
			
		||||
prepare:
 | 
			
		||||
        prepare [-config=/path/to/config.toml] [-debug]
 | 
			
		||||
 | 
			
		||||
  -config string
 | 
			
		||||
        /path/to/toml (default "$PWD/config.toml")
 | 
			
		||||
  -debug
 | 
			
		||||
        debug mode
 | 
			
		||||
  -use-unattended-upgrades
 | 
			
		||||
        [Deprecated] For Ubuntu, install unattended-upgrades
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
----
 | 
			
		||||
 | 
			
		||||
# Utilisation : Scan
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
$ vuls scan -help
 | 
			
		||||
scan:
 | 
			
		||||
        scan
 | 
			
		||||
                [-lang=en|ja]
 | 
			
		||||
                [-config=/path/to/config.toml]
 | 
			
		||||
                [-dbpath=/path/to/vuls.sqlite3]
 | 
			
		||||
                [-cve-dictionary-url=http://127.0.0.1:1323]
 | 
			
		||||
                [-cvss-over=7]
 | 
			
		||||
                [-report-slack]
 | 
			
		||||
                [-report-mail]
 | 
			
		||||
                [-http-proxy=http://192.168.0.1:8080]
 | 
			
		||||
                [-debug]
 | 
			
		||||
                [-debug-sql]
 | 
			
		||||
  -config string
 | 
			
		||||
        /path/to/toml (default "$PWD/config.toml")
 | 
			
		||||
  -cve-dictionary-url string
 | 
			
		||||
        http://CVE.Dictionary (default "http://127.0.0.1:1323")
 | 
			
		||||
  -cvss-over float
 | 
			
		||||
        -cvss-over=6.5 means reporting CVSS Score 6.5 and over (default: 0 (means report all))
 | 
			
		||||
  -dbpath string
 | 
			
		||||
        /path/to/sqlite3 (default "$PWD/vuls.sqlite3")
 | 
			
		||||
  -debug
 | 
			
		||||
        debug mode
 | 
			
		||||
  -debug-sql
 | 
			
		||||
        SQL debug mode
 | 
			
		||||
  -http-proxy string
 | 
			
		||||
        http://proxy-url:port (default: empty)
 | 
			
		||||
  -lang string
 | 
			
		||||
        [en|ja] (default "en")
 | 
			
		||||
  -report-mail
 | 
			
		||||
        Email report
 | 
			
		||||
  -report-slack
 | 
			
		||||
        Slack report
 | 
			
		||||
  -use-unattended-upgrades
 | 
			
		||||
        [Deprecated] For Ubuntu. Scan by unattended-upgrades or not (use apt-get upgrade --dry-run by default)
 | 
			
		||||
  -use-yum-plugin-security
 | 
			
		||||
        [Deprecated] For CentOS 5. Scan by yum-plugin-security or not (use yum check-update by default)
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## exemple
 | 
			
		||||
 | 
			
		||||
Lancez go-cve-dictionary en mode serveur avant de lancer un scan
 | 
			
		||||
```
 | 
			
		||||
$ go-cve-dictionary server
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Scan tous les serveurs identifiés dans le fichier de configuration
 | 
			
		||||
```
 | 
			
		||||
$ vuls scan --report-slack --report-mail --cvss-over=7
 | 
			
		||||
```
 | 
			
		||||
Via cette simple commande Vuls va : ..
 | 
			
		||||
- Scanner tous les serveurs identifiés dans le fichier de configuration
 | 
			
		||||
- Envoyer les résultas du scan à slack et par email
 | 
			
		||||
- Ne rapporter que les CVE dont la note CVSS est au dessus de 7
 | 
			
		||||
- Afficher les résultats du scan dans le terminal
 | 
			
		||||
 | 
			
		||||
### Scan de serveurs spécifiques
 | 
			
		||||
```
 | 
			
		||||
$ vuls scan server1 server2
 | 
			
		||||
```
 | 
			
		||||
Via cette simple commande Vuls va : ..
 | 
			
		||||
- Scanner seulement 2 serveurs. (server1, server2)
 | 
			
		||||
- Afficher les résultats du scan dans le terminal
 | 
			
		||||
 | 
			
		||||
----
 | 
			
		||||
 | 
			
		||||
# Utilisation : Recherche de vulnérabilités sur des paquets non compris dans l'OS
 | 
			
		||||
 | 
			
		||||
Il est possible de détecter des vulnérabilités sur des programmes que vous avez compilés, des lors que les libraries et frameworks ont été enregistré dans [CPE](https://nvd.nist.gov/cpe.cfm).
 | 
			
		||||
 | 
			
		||||
-  Comment rechercher dans CPE via le nom du programme
 | 
			
		||||
    - [NVD: Search Common Platform Enumerations (CPE)](https://web.nvd.nist.gov/view/cpe/search)  
 | 
			
		||||
    **Check CPE Naming Format: 2.2**
 | 
			
		||||
 | 
			
		||||
- Configuration  
 | 
			
		||||
Pour détecter des vulnérabilités sur Ruby on Rails v4.2.1, cpeNames doit etre déclaré dans la section servers.
 | 
			
		||||
    ```
 | 
			
		||||
    [servers]
 | 
			
		||||
 | 
			
		||||
    [servers.172-31-4-82]
 | 
			
		||||
    host         = "172.31.4.82"
 | 
			
		||||
    user        = "ec2-user"
 | 
			
		||||
    keyPath     = "/home/username/.ssh/id_rsa"
 | 
			
		||||
    cpeNames = [
 | 
			
		||||
      "cpe:/a:rubyonrails:ruby_on_rails:4.2.1",
 | 
			
		||||
    ]
 | 
			
		||||
    ```
 | 
			
		||||
 | 
			
		||||
# Utilisation : Mise à jour des données NVD.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
$ go-cve-dictionary fetchnvd -h
 | 
			
		||||
fetchnvd:
 | 
			
		||||
        fetchnvd
 | 
			
		||||
                [-last2y]
 | 
			
		||||
                [-dbpath=/path/to/cve.sqlite3]
 | 
			
		||||
                [-debug]
 | 
			
		||||
                [-debug-sql]
 | 
			
		||||
 | 
			
		||||
  -dbpath string
 | 
			
		||||
        /path/to/sqlite3 (default "$PWD/cve.sqlite3")
 | 
			
		||||
  -debug
 | 
			
		||||
        debug mode
 | 
			
		||||
  -debug-sql
 | 
			
		||||
        SQL debug mode
 | 
			
		||||
  -last2y
 | 
			
		||||
        Refresh NVD data in the last two years.
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
- Récupérer toutes les données jusqu'à aujourd'hui
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
$ go-cve-dictionary fetchnvd -entire
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
- Reçupérer les données des 2 denières années
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
$ go-cve-dictionary fetchnvd -last2y
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
----
 | 
			
		||||
 | 
			
		||||
# Misc
 | 
			
		||||
 | 
			
		||||
- HTTP Proxy Support  
 | 
			
		||||
If your system is behind HTTP proxy, you have to specify --http-proxy option.
 | 
			
		||||
 | 
			
		||||
- How to Daemonize go-cve-dictionary  
 | 
			
		||||
Use Systemd, Upstart or supervisord, daemontools...
 | 
			
		||||
 | 
			
		||||
- How to Enable Automatic-Update of Vunerability Data.  
 | 
			
		||||
Use job scheduler like Cron (with -last2y option).
 | 
			
		||||
 | 
			
		||||
- How to cross compile
 | 
			
		||||
    ```bash
 | 
			
		||||
    $ cd /path/to/your/local-git-reporsitory/vuls
 | 
			
		||||
    $ GOOS=linux GOARCH=amd64 go build -o vuls.amd64
 | 
			
		||||
    ```
 | 
			
		||||
 | 
			
		||||
- Logging  
 | 
			
		||||
Log wrote to under /var/log/vuls/
 | 
			
		||||
 | 
			
		||||
- Debug  
 | 
			
		||||
Run with --debug, --sql-debug option.
 | 
			
		||||
 | 
			
		||||
- Ajusting Open File Limit  
 | 
			
		||||
[Riak docs](http://docs.basho.com/riak/latest/ops/tuning/open-files-limit/) is awesome.
 | 
			
		||||
 | 
			
		||||
- Does Vuls accept ssh connections with fish-shell or old zsh as the login shell?  
 | 
			
		||||
No, Vuls needs a user on the server for bash login. see also [#8](/../../issues/8)
 | 
			
		||||
 | 
			
		||||
- Windows  
 | 
			
		||||
Use Microsoft Baseline Security Analyzer. [MBSA](https://technet.microsoft.com/en-us/security/cc184924.aspx)
 | 
			
		||||
 | 
			
		||||
----
 | 
			
		||||
 | 
			
		||||
# Data Source
 | 
			
		||||
 | 
			
		||||
- [NVD](https://nvd.nist.gov/)
 | 
			
		||||
- [JVN(Japanese)](http://jvndb.jvn.jp/apis/myjvn/)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Authors
 | 
			
		||||
 | 
			
		||||
kotakanbe ([@kotakanbe](https://twitter.com/kotakanbe)) created vuls and [these fine people](https://github.com/future-architect/vuls/graphs/contributors) have contributed.
 | 
			
		||||
 | 
			
		||||
----
 | 
			
		||||
 | 
			
		||||
# Contribute
 | 
			
		||||
 | 
			
		||||
1. Fork it
 | 
			
		||||
2. Create your feature branch (`git checkout -b my-new-feature`)
 | 
			
		||||
3. Commit your changes (`git commit -am 'Add some feature'`)
 | 
			
		||||
4. Push to the branch (`git push origin my-new-feature`)
 | 
			
		||||
5. Create new Pull Request
 | 
			
		||||
 | 
			
		||||
----
 | 
			
		||||
 | 
			
		||||
# Change Log
 | 
			
		||||
 | 
			
		||||
Please see [CHANGELOG](https://github.com/future-architect/vuls/blob/master/CHANGELOG.md).
 | 
			
		||||
 | 
			
		||||
----
 | 
			
		||||
 | 
			
		||||
# Licence
 | 
			
		||||
 | 
			
		||||
Please see [LICENSE](https://github.com/future-architect/vuls/blob/master/LICENSE).
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
[](https://bitdeli.com/free "Bitdeli Badge")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
For more information see [README in English](https://github.com/future-architect/vuls/blob/master/README.md)  
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										879
									
								
								README.ja.md
									
									
									
									
									
								
							
							
						
						
									
										879
									
								
								README.ja.md
									
									
									
									
									
								
							@@ -3,7 +3,7 @@
 | 
			
		||||
 | 
			
		||||
[](http://goo.gl/forms/xm5KFo35tu)
 | 
			
		||||
 | 
			
		||||
Vulnerability scanner for Linux, agentless, written in golang.
 | 
			
		||||
Vulnerability scanner for Linux/FreeBSD, agentless, written in golang.
 | 
			
		||||
 | 
			
		||||
[README in English](https://github.com/future-architect/vuls/blob/master/README.md)  
 | 
			
		||||
Slackチームは[こちらから](http://goo.gl/forms/xm5KFo35tu)参加できます。(日本語でオッケーです)
 | 
			
		||||
@@ -12,7 +12,6 @@ Slackチームは[こちらから](http://goo.gl/forms/xm5KFo35tu)参加でき
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
----
 | 
			
		||||
 | 
			
		||||
# Abstract
 | 
			
		||||
@@ -52,7 +51,743 @@ Vulsは上に挙げた手動運用での課題を解決するツールであり
 | 
			
		||||
 | 
			
		||||
----
 | 
			
		||||
 | 
			
		||||
詳細は[README in English](https://github.com/future-architect/vuls/blob/master/README.md) を参照
 | 
			
		||||
# What Vuls Doesn't Do
 | 
			
		||||
 | 
			
		||||
- Vulsはソフトウェアアップデートは行わない
 | 
			
		||||
 | 
			
		||||
----
 | 
			
		||||
 | 
			
		||||
# Hello Vuls 
 | 
			
		||||
 | 
			
		||||
本チュートリアルでは、Amazon EC2にVulsをセットアップし、自分に存在する脆弱性をスキャンする方法を説明する。
 | 
			
		||||
手順は以下の通り
 | 
			
		||||
 | 
			
		||||
1. Amazon Linuxを新規作成
 | 
			
		||||
1. 自分自身にSSH接続できるように設定
 | 
			
		||||
1. 必要なソフトウェアをインストール
 | 
			
		||||
1. go-cve-dictionaryをデプロイ
 | 
			
		||||
1. Vulsをデプロイ
 | 
			
		||||
1. 設定
 | 
			
		||||
1. Prepare
 | 
			
		||||
1. Scan
 | 
			
		||||
1. TUI(Terminal-Based User Interface)で結果を参照する
 | 
			
		||||
 | 
			
		||||
## Step1. Launch Amazon Linux
 | 
			
		||||
 | 
			
		||||
- 今回は説明のために、脆弱性を含む古いAMIを使う (amzn-ami-hvm-2015.09.1.x86_64-gp2 - ami-383c1956)
 | 
			
		||||
- EC2作成時に自動アップデートされるとVulsスキャン結果が0件になってしまうので、cloud-initに以下を指定してEC2を作成する。
 | 
			
		||||
 | 
			
		||||
    ```
 | 
			
		||||
    #cloud-config
 | 
			
		||||
    repo_upgrade: none
 | 
			
		||||
    ```
 | 
			
		||||
 | 
			
		||||
    - [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)
 | 
			
		||||
 | 
			
		||||
## Step2. SSH setting
 | 
			
		||||
 | 
			
		||||
ローカルホストにSSH接続できるようにする。
 | 
			
		||||
 | 
			
		||||
SSHキーペアを作成し、公開鍵をauthorized_keysに追加する。
 | 
			
		||||
```bash
 | 
			
		||||
$ ssh-keygen -t rsa
 | 
			
		||||
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
 | 
			
		||||
$ chmod 600 ~/.ssh/authorized_keys
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Step3. Install requirements
 | 
			
		||||
 | 
			
		||||
Vulsセットアップに必要な以下のソフトウェアをインストールする。
 | 
			
		||||
 | 
			
		||||
- SQLite3
 | 
			
		||||
- git v2
 | 
			
		||||
- 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
 | 
			
		||||
```
 | 
			
		||||
/etc/profile.d/goenv.sh を作成し、下記を追加する。 
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
export GOROOT=/usr/local/go
 | 
			
		||||
export GOPATH=$HOME/go
 | 
			
		||||
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
カレントシェルに上記環境変数をセットする。
 | 
			
		||||
```bash
 | 
			
		||||
$ source /etc/profile.d/goenv.sh
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Step4. Deploy [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
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
go getでエラーが発生した場合は、以下の点を確認する。
 | 
			
		||||
- Gitのバージョンがv2以降か?
 | 
			
		||||
- Go依存パッケージの問題でgo getに失敗する場合は [deploying with glide](https://github.com/future-architect/vuls/blob/master/README.md#deploy-with-glide) を試す。
 | 
			
		||||
 | 
			
		||||
NVDから脆弱性データベースを取得する。  
 | 
			
		||||
環境によって異なるが、AWS上では10分程度かかる。
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
$ for i in {2002..2016}; do go-cve-dictionary fetchnvd -years $i; done
 | 
			
		||||
... snip ...
 | 
			
		||||
$ ls -alh cve.sqlite3
 | 
			
		||||
-rw-r--r-- 1 ec2-user ec2-user 7.0M Mar 24 13:20 cve.sqlite3
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Step5. Deploy Vuls
 | 
			
		||||
 | 
			
		||||
新規にターミナルを起動し、先ほど作成したEC2にSSH接続する。
 | 
			
		||||
 | 
			
		||||
go get
 | 
			
		||||
```
 | 
			
		||||
$ go get github.com/future-architect/vuls
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
go getでエラーが発生した場合は、以下の点を確認する。
 | 
			
		||||
- Gitのバージョンがv2以降か?
 | 
			
		||||
- Go依存パッケージの問題でgo getに失敗する場合は [deploying with glide](https://github.com/future-architect/vuls/blob/master/README.md#deploy-with-glide) を試す。
 | 
			
		||||
 | 
			
		||||
## Step6. Config
 | 
			
		||||
 | 
			
		||||
Vulの設定ファイルを作成する(TOMLフォーマット)
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
$ 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. Setting up target servers for Vuls  
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
$ vuls prepare
 | 
			
		||||
```
 | 
			
		||||
詳細は [Usage: Prepare](https://github.com/future-architect/vuls#usage-prepare) を参照
 | 
			
		||||
 | 
			
		||||
## Step8. Start Scanning
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
$ vuls scan -cve-dictionary-dbpath=$PWD/cve.sqlite3
 | 
			
		||||
INFO[0000] Start scanning (config: /home/ec2-user/config.toml)
 | 
			
		||||
INFO[0000] Start scanning
 | 
			
		||||
INFO[0000] config: /home/ec2-user/config.toml
 | 
			
		||||
INFO[0000] cve-dictionary: /home/ec2-user/cve.sqlite3
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
... 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
 | 
			
		||||
 | 
			
		||||
Vulsにはスキャン結果の詳細を参照できるイカしたTUI(Terminal-Based User Interface)が付属している。
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
$ vuls tui
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
----
 | 
			
		||||
 | 
			
		||||
# Setup Vuls in a Docker Container
 | 
			
		||||
 | 
			
		||||
VulsをDockerコンテナ上に作成する方法  
 | 
			
		||||
see https://github.com/future-architect/vuls/tree/master/setup/docker
 | 
			
		||||
 | 
			
		||||
----
 | 
			
		||||
 | 
			
		||||
# Architecture
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
## [go-cve-dictinary](https://github.com/kotakanbe/go-cve-dictionary)  
 | 
			
		||||
- NVDとJVN(日本語)から脆弱性データベースを取得し、SQLite3に格納する。
 | 
			
		||||
 | 
			
		||||
## Vuls
 | 
			
		||||
- SSHでサーバに存在する脆弱性をスキャンし、CVE IDのリストを作成する
 | 
			
		||||
  - Dockerコンテナのスキャンする場合、VulsはまずDockerホストにSSHで接続する。その後、Dockerホスト上で `docker exec` 経由でコマンドを実効する。Dockerコンテナ内にSSHデーモンを起動する必要はない
 | 
			
		||||
- 検出されたCVEの詳細情報をgo-cve-dictionaryから取得する
 | 
			
		||||
- スキャン結果をSQLite3に格納する
 | 
			
		||||
- スキャン結果レポートを生成し、SlackやEmailなどで送信する
 | 
			
		||||
- スキャン結果の詳細情報はターミナル上で参照可能
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
----
 | 
			
		||||
 | 
			
		||||
# Use Cases
 | 
			
		||||
 | 
			
		||||
## Scan all servers
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
## Scan a single server
 | 
			
		||||
 | 
			
		||||
web/app server in the same configuration under the load balancer
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
----
 | 
			
		||||
 | 
			
		||||
# Support OS
 | 
			
		||||
 | 
			
		||||
| Distribution|            Release |
 | 
			
		||||
|:------------|-------------------:|
 | 
			
		||||
| Ubuntu      |          12, 14, 16|
 | 
			
		||||
| Debian      |                7, 8|
 | 
			
		||||
| RHEL        |          4, 5, 6, 7|
 | 
			
		||||
| CentOS      |             5, 6, 7|
 | 
			
		||||
| Amazon Linux|                 All|
 | 
			
		||||
| FreeBSD     |                  10|
 | 
			
		||||
 | 
			
		||||
----
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Usage: Automatic Server Discovery
 | 
			
		||||
 | 
			
		||||
Discoveryサブコマンドは指定されたCIDRレンジ内でpingが返ってくるサーバを発見して、ターミナル上にVulsの設定ファイルのテンプレートを出力する。
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
$ vuls discover -help
 | 
			
		||||
discover:
 | 
			
		||||
        discover 192.168.0.0/24
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Example
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
$ vuls discover 172.31.4.0/24
 | 
			
		||||
# Create config.toml using below and then ./vuls --config=/path/to/config.toml
 | 
			
		||||
 | 
			
		||||
[slack]
 | 
			
		||||
hookURL      = "https://hooks.slack.com/services/abc123/defghijklmnopqrstuvwxyz"
 | 
			
		||||
channel      = "#channel-name"
 | 
			
		||||
#channel      = "${servername}"
 | 
			
		||||
iconEmoji    = ":ghost:"
 | 
			
		||||
authUser     = "username"
 | 
			
		||||
notifyUsers  = ["@username"]
 | 
			
		||||
 | 
			
		||||
[mail]
 | 
			
		||||
smtpAddr      = "smtp.gmail.com"
 | 
			
		||||
smtpPort      = "465"
 | 
			
		||||
user          = "username"
 | 
			
		||||
password      = "password"
 | 
			
		||||
from          = "from@address.com"
 | 
			
		||||
to            = ["to@address.com"]
 | 
			
		||||
cc            = ["cc@address.com"]
 | 
			
		||||
subjectPrefix = "[vuls]"
 | 
			
		||||
 | 
			
		||||
[default]
 | 
			
		||||
#port        = "22"
 | 
			
		||||
#user        = "username"
 | 
			
		||||
#keyPath     = "/home/username/.ssh/id_rsa"
 | 
			
		||||
 | 
			
		||||
[servers]
 | 
			
		||||
 | 
			
		||||
[servers.172-31-4-82]
 | 
			
		||||
host         = "172.31.4.82"
 | 
			
		||||
#port        = "22"
 | 
			
		||||
#user        = "root"
 | 
			
		||||
#keyPath     = "/home/username/.ssh/id_rsa"
 | 
			
		||||
#cpeNames = [
 | 
			
		||||
#  "cpe:/a:rubyonrails:ruby_on_rails:4.2.1",
 | 
			
		||||
#]
 | 
			
		||||
#containers = ["${running}"]
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
このテンプレート使ってVulsの設定フィアルを作ってもよい。
 | 
			
		||||
 | 
			
		||||
----
 | 
			
		||||
 | 
			
		||||
# Configuration
 | 
			
		||||
 | 
			
		||||
- Slack section
 | 
			
		||||
    ```
 | 
			
		||||
    [slack]
 | 
			
		||||
    hookURL      = "https://hooks.slack.com/services/abc123/defghijklmnopqrstuvwxyz"
 | 
			
		||||
    channel      = "#channel-name"
 | 
			
		||||
    #channel      = "${servername}"
 | 
			
		||||
    iconEmoji    = ":ghost:"
 | 
			
		||||
    authUser     = "username"
 | 
			
		||||
    notifyUsers  = ["@username"]
 | 
			
		||||
    ```
 | 
			
		||||
 | 
			
		||||
    - hookURL : Incomming webhook's URL  
 | 
			
		||||
    - channel : channel name.  
 | 
			
		||||
    channelに`${servername}`を指定すると、結果レポートをサーバごとに別チャネルにすることが出来る。
 | 
			
		||||
    以下のサンプルでは、`#server1`チャネルと`#server2`チャネルに送信される。スキャン前にチャネルを作成する必要がある。
 | 
			
		||||
      ```
 | 
			
		||||
      [slack]
 | 
			
		||||
      channel      = "${servername}"
 | 
			
		||||
      ...snip...
 | 
			
		||||
 | 
			
		||||
      [servers]
 | 
			
		||||
 | 
			
		||||
      [servers.server1]
 | 
			
		||||
      host         = "172.31.4.82"
 | 
			
		||||
      ...snip...
 | 
			
		||||
 | 
			
		||||
      [servers.server2]
 | 
			
		||||
      host         = "172.31.4.83"
 | 
			
		||||
      ...snip...
 | 
			
		||||
      ```
 | 
			
		||||
 | 
			
		||||
    - iconEmoji: emoji
 | 
			
		||||
    - authUser: username of the slack team
 | 
			
		||||
    - notifyUsers: ここにユーザ名を指定すると、Slackで通知を受け取ることができる。たとえば `["@foo", "@bar"]`を指定すると、Slackのテキストに`@foo`と`@bar`が含まれるのでスマホなどにPush通知が可能。
 | 
			
		||||
 | 
			
		||||
- Mail section
 | 
			
		||||
    ```
 | 
			
		||||
    [mail]
 | 
			
		||||
    smtpAddr      = "smtp.gmail.com"
 | 
			
		||||
    smtpPort      = "465"
 | 
			
		||||
    user          = "username"
 | 
			
		||||
    password      = "password"
 | 
			
		||||
    from          = "from@address.com"
 | 
			
		||||
    to            = ["to@address.com"]
 | 
			
		||||
    cc            = ["cc@address.com"]
 | 
			
		||||
    subjectPrefix = "[vuls]"
 | 
			
		||||
    ```
 | 
			
		||||
 | 
			
		||||
- Default section
 | 
			
		||||
    ```
 | 
			
		||||
    [default]
 | 
			
		||||
    #port        = "22"
 | 
			
		||||
    #user        = "username"
 | 
			
		||||
    #keyPath     = "/home/username/.ssh/id_rsa"
 | 
			
		||||
    #cpeNames = [
 | 
			
		||||
    #  "cpe:/a:rubyonrails:ruby_on_rails:4.2.1",
 | 
			
		||||
    #]
 | 
			
		||||
    #containers = ["${running}"]
 | 
			
		||||
    ```
 | 
			
		||||
    下記serversセクションで値が指定されなかった場合のデフォルト値
 | 
			
		||||
 | 
			
		||||
- servers section
 | 
			
		||||
    ```
 | 
			
		||||
    [servers]
 | 
			
		||||
 | 
			
		||||
    [servers.172-31-4-82]
 | 
			
		||||
    host         = "172.31.4.82"
 | 
			
		||||
    #port        = "22"
 | 
			
		||||
    #user        = "root"
 | 
			
		||||
    #keyPath     = "/home/username/.ssh/id_rsa"
 | 
			
		||||
    #cpeNames = [
 | 
			
		||||
    #  "cpe:/a:rubyonrails:ruby_on_rails:4.2.1",
 | 
			
		||||
    #]
 | 
			
		||||
    #containers = ["${running}"]
 | 
			
		||||
    ```
 | 
			
		||||
 | 
			
		||||
    serversセクションの値は、defaultセクションの値よりも優先される。
 | 
			
		||||
    defaultセクションの値を使いたい場合は `#` でコメントアウトする。
 | 
			
		||||
 | 
			
		||||
    Vulsは各サーバにSSHで接続するが、Goのネイティブ実装と、OSコマンドの2種類のSSH接続方法をサポートしている。
 | 
			
		||||
    詳細は [-ssh-external option](https://github.com/future-architect/vuls#-ssh-external-option) を参照。
 | 
			
		||||
    
 | 
			
		||||
    また、以下のSSH認証をサポートしている。
 | 
			
		||||
    - SSH agent
 | 
			
		||||
    - SSH public key authentication (with password, empty password)
 | 
			
		||||
    - Password authentication
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
----
 | 
			
		||||
 | 
			
		||||
# Usage: Prepare
 | 
			
		||||
 | 
			
		||||
Prepareサブコマンドは、Vuls内部で利用する以下のパッケージをスキャン対象サーバにインストーする。
 | 
			
		||||
 | 
			
		||||
| Distribution|            Release | Requirements |
 | 
			
		||||
|:------------|-------------------:|:-------------|
 | 
			
		||||
| Ubuntu      |          12, 14, 16| -            |
 | 
			
		||||
| Debian      |                7, 8| aptitude     |
 | 
			
		||||
| CentOS      |                   5| yum-plugin-security, yum-changelog |
 | 
			
		||||
| CentOS      |                6, 7| yum-plugin-security, yum-plugin-changelog |
 | 
			
		||||
| Amazon      |                All | -            |
 | 
			
		||||
| RHEL        |         4, 5, 6, 7 | -            |
 | 
			
		||||
| FreeBSD     |                 10 | -            |
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
$ vuls prepare -help
 | 
			
		||||
prepare
 | 
			
		||||
                        [-config=/path/to/config.toml] [-debug]
 | 
			
		||||
                        [-ask-sudo-password]
 | 
			
		||||
                        [-ask-key-password]
 | 
			
		||||
 | 
			
		||||
  -ask-key-password
 | 
			
		||||
        Ask ssh privatekey password before scanning
 | 
			
		||||
  -ask-sudo-password
 | 
			
		||||
        Ask sudo password of target servers before scanning
 | 
			
		||||
  -config string
 | 
			
		||||
        /path/to/toml (default "$PWD/config.toml")
 | 
			
		||||
  -debug
 | 
			
		||||
        debug mode
 | 
			
		||||
  -use-unattended-upgrades
 | 
			
		||||
        [Deprecated] For Ubuntu, install unattended-upgrades
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
----
 | 
			
		||||
 | 
			
		||||
# Usage: Scan
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
$ vuls scan -help
 | 
			
		||||
scan:
 | 
			
		||||
        scan
 | 
			
		||||
                [-lang=en|ja]
 | 
			
		||||
                [-config=/path/to/config.toml]
 | 
			
		||||
                [-dbpath=/path/to/vuls.sqlite3]
 | 
			
		||||
                [--cve-dictionary-dbpath=/path/to/cve.sqlite3]
 | 
			
		||||
                [-cve-dictionary-url=http://127.0.0.1:1323]
 | 
			
		||||
                [-cvss-over=7]
 | 
			
		||||
                [-ignore-unscored-cves]
 | 
			
		||||
                [-ssh-external]
 | 
			
		||||
                [-report-json]
 | 
			
		||||
                [-report-mail]
 | 
			
		||||
                [-report-s3]
 | 
			
		||||
                [-report-slack]
 | 
			
		||||
                [-report-text]
 | 
			
		||||
                [-http-proxy=http://192.168.0.1:8080]
 | 
			
		||||
                [-ask-sudo-password]
 | 
			
		||||
                [-ask-key-password]
 | 
			
		||||
                [-debug]
 | 
			
		||||
                [-debug-sql]
 | 
			
		||||
                [-aws-profile=default]
 | 
			
		||||
                [-aws-region=us-west-2]
 | 
			
		||||
                [-aws-s3-bucket=bucket_name]
 | 
			
		||||
 | 
			
		||||
  -ask-key-password
 | 
			
		||||
        Ask ssh privatekey password before scanning
 | 
			
		||||
  -ask-sudo-password
 | 
			
		||||
        Ask sudo password of target servers before scanning
 | 
			
		||||
  -aws-profile string
 | 
			
		||||
        AWS Profile to use (default "default")
 | 
			
		||||
  -aws-region string
 | 
			
		||||
        AWS Region to use (default "us-east-1")
 | 
			
		||||
  -aws-s3-bucket string
 | 
			
		||||
        S3 bucket name
 | 
			
		||||
  -config string
 | 
			
		||||
        /path/to/toml (default "$PWD/config.toml")
 | 
			
		||||
  --cve-dictionary-dbpath string
 | 
			
		||||
        /path/to/sqlite3 (For get cve detail from cve.sqlite3)        
 | 
			
		||||
  -cve-dictionary-url string
 | 
			
		||||
        http://CVE.Dictionary (default "http://127.0.0.1:1323")
 | 
			
		||||
  -cvss-over float
 | 
			
		||||
        -cvss-over=6.5 means reporting CVSS Score 6.5 and over (default: 0 (means report all))
 | 
			
		||||
  -dbpath string
 | 
			
		||||
        /path/to/sqlite3 (default "$PWD/vuls.sqlite3")
 | 
			
		||||
  -debug
 | 
			
		||||
        debug mode
 | 
			
		||||
  -debug-sql
 | 
			
		||||
        SQL debug mode
 | 
			
		||||
  -http-proxy string
 | 
			
		||||
        http://proxy-url:port (default: empty)
 | 
			
		||||
  -ignore-unscored-cves
 | 
			
		||||
        Don't report the unscored CVEs
 | 
			
		||||
  -lang string
 | 
			
		||||
        [en|ja] (default "en")
 | 
			
		||||
  -report-json
 | 
			
		||||
        Write report to JSON files ($PWD/results/current)
 | 
			
		||||
  -report-mail
 | 
			
		||||
        Send report via Email
 | 
			
		||||
  -report-s3
 | 
			
		||||
        Write report to S3 (bucket/yyyyMMdd_HHmm)
 | 
			
		||||
  -report-slack
 | 
			
		||||
        Send report via Slack
 | 
			
		||||
  -report-text
 | 
			
		||||
        Write report to text files ($PWD/results/current)
 | 
			
		||||
  -ssh-external
 | 
			
		||||
        Use external ssh command. Default: Use the Go native implementation
 | 
			
		||||
  -use-unattended-upgrades
 | 
			
		||||
        [Deprecated] For Ubuntu. Scan by unattended-upgrades or not (use apt-get upgrade --dry-run by default)
 | 
			
		||||
  -use-yum-plugin-security
 | 
			
		||||
        [Deprecated] For CentOS 5. Scan by yum-plugin-security or not (use yum check-update by default)
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## -ssh-external option
 | 
			
		||||
 | 
			
		||||
Vulsは2種類のSSH接続方法をサポートしている。
 | 
			
		||||
 | 
			
		||||
デフォルトでは、Goのネイティブ実装 (crypto/ssh) を使ってスキャンする。 
 | 
			
		||||
これは、SSHコマンドがインストールされていない環境でも動作する(Windowsなど)  
 | 
			
		||||
 | 
			
		||||
外部SSHコマンドを使ってスキャンするためには、`-ssh-external`を指定する。
 | 
			
		||||
SSH Configが使えるので、ProxyCommandを使った多段SSHなどが可能。
 | 
			
		||||
 | 
			
		||||
## -ask-key-password option 
 | 
			
		||||
 | 
			
		||||
| SSH key password |  -ask-key-password | |
 | 
			
		||||
|:-----------------|:-------------------|:----|
 | 
			
		||||
| empty password   |                 -  | |
 | 
			
		||||
| with password    |           required | or use ssh-agent |
 | 
			
		||||
 | 
			
		||||
## -ask-sudo-password option
 | 
			
		||||
 | 
			
		||||
| sudo password on target servers | -ask-sudo-password | |
 | 
			
		||||
|:-----------------|:-------|:------|
 | 
			
		||||
| NOPASSWORD       | - | defined as NOPASSWORD in /etc/sudoers on target servers |
 | 
			
		||||
| with password    | required |  |
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## -report-json , -report-text option
 | 
			
		||||
 | 
			
		||||
結果をファイルに出力したい場合に指定する。出力先は、`$PWD/result/current/`    
 | 
			
		||||
`all.(json|txt)`には、全サーバのスキャン結果が出力される。  
 | 
			
		||||
`servername.(json|txt)`には、サーバごとのスキャン結果が出力される。
 | 
			
		||||
 | 
			
		||||
## example
 | 
			
		||||
 | 
			
		||||
### Scan all servers defined in config file
 | 
			
		||||
```
 | 
			
		||||
$ vuls scan --report-slack --report-mail --cvss-over=7 -ask-sudo-password -ask-key-password -cve-dictionary-dbpath=$PWD/cve.sqlite3
 | 
			
		||||
```
 | 
			
		||||
この例では、
 | 
			
		||||
- スキャン対象サーバのsudoパスワードを指定
 | 
			
		||||
- SSH公開鍵認証(秘密鍵パスフレーズ)を指定
 | 
			
		||||
- configに定義された全サーバをスキャン
 | 
			
		||||
- レポートをslack, emailに送信
 | 
			
		||||
- CVSSスコアが 7.0 以上の脆弱性のみレポート
 | 
			
		||||
- go-cve-dictionaryにはHTTPではなくDBに直接アクセス(go-cve-dictionaryをサーバモードで起動しない)
 | 
			
		||||
 | 
			
		||||
### Scan specific servers
 | 
			
		||||
```
 | 
			
		||||
$ vuls scan -cve-dictionary-dbpath=$PWD/cve.sqlite3 server1 server2
 | 
			
		||||
```
 | 
			
		||||
この例では、
 | 
			
		||||
- SSH公開鍵認証(秘密鍵パスフレーズなし)
 | 
			
		||||
- ノーパスワードでsudoが実行可能
 | 
			
		||||
- configで定義されているサーバの中の、server1, server2のみスキャン
 | 
			
		||||
 | 
			
		||||
### Put results in S3 bucket
 | 
			
		||||
レポートをS3バケットに格納する方法
 | 
			
		||||
 | 
			
		||||
事前にAWS関連の設定を行う
 | 
			
		||||
- S3バケットを作成 [Creating a Bucket](http://docs.aws.amazon.com/AmazonS3/latest/UG/CreatingaBucket.html)
 | 
			
		||||
- アクセスキーを作成し、S3バケットへのREAD/WRITE権限をつけておく [Managing Access Keys for IAM Users](http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html)
 | 
			
		||||
- security credentialsを設定 [Configuring the AWS Command Line Interface](http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
$ vuls scan -cve-dictionary-dbpath=$PWD/cve.sqlite3 -aws-region=ap-northeast-1 -aws-s3-bucket=vuls -aws-profile=default
 | 
			
		||||
```
 | 
			
		||||
この例では、
 | 
			
		||||
- SSH公開鍵認証(秘密鍵パスフレーズなし)
 | 
			
		||||
- ノーパスワードでsudoが実行可能
 | 
			
		||||
- configに定義された全サーバをスキャン
 | 
			
		||||
- 結果をJSON形式でS3に格納する。
 | 
			
		||||
  - バケット名 ... vuls
 | 
			
		||||
  - リージョン ... ap-northeast-1
 | 
			
		||||
  - 利用するProfile ... default
 | 
			
		||||
 | 
			
		||||
----
 | 
			
		||||
 | 
			
		||||
# Usage: Scan vulnerability of non-OS package
 | 
			
		||||
 | 
			
		||||
Vulsは、[CPE](https://nvd.nist.gov/cpe.cfm)に登録されているソフトウェアであれば、OSパッケージ以外のソフトウェアの脆弱性もスキャン可能。
 | 
			
		||||
たとえば、自分でコンパイルしたものや、言語のライブラリ、フレームワークなど。
 | 
			
		||||
 | 
			
		||||
-  CPEの検索方法
 | 
			
		||||
    - [NVD: Search Common Platform Enumerations (CPE)](https://web.nvd.nist.gov/view/cpe/search)  
 | 
			
		||||
    **Check CPE Naming Format: 2.2**
 | 
			
		||||
 | 
			
		||||
    - [go-cpe-dictionary](https://github.com/kotakanbe/go-cpe-dictionary) is a good choice for geeks.   
 | 
			
		||||
    ターミナル上でCPEをインクリメンタル検索出来るツール
 | 
			
		||||
 | 
			
		||||
- Configuration  
 | 
			
		||||
例えば、Ruby on Rails v4.2.1の脆弱性を検知したい場合は、serversセクションに以下のように定義する。
 | 
			
		||||
    ```
 | 
			
		||||
    [servers]
 | 
			
		||||
 | 
			
		||||
    [servers.172-31-4-82]
 | 
			
		||||
    host         = "172.31.4.82"
 | 
			
		||||
    user        = "ec2-user"
 | 
			
		||||
    keyPath     = "/home/username/.ssh/id_rsa"
 | 
			
		||||
    cpeNames = [
 | 
			
		||||
      "cpe:/a:rubyonrails:ruby_on_rails:4.2.1",
 | 
			
		||||
    ]
 | 
			
		||||
    ```
 | 
			
		||||
    
 | 
			
		||||
# Usage: Scan Docker containers
 | 
			
		||||
 | 
			
		||||
DockerコンテナはSSHデーモンを起動しないで運用するケースが一般的。  
 | 
			
		||||
 [Docker Blog:Why you don't need to run SSHd in your Docker containers](https://blog.docker.com/2014/06/why-you-dont-need-to-run-sshd-in-docker/)
 | 
			
		||||
 | 
			
		||||
Vulsは、DockerホストにSSHで接続し、`docker exec`でDockerコンテナにコマンドを発行して脆弱性をスキャンする。
 | 
			
		||||
詳細は、[Architecture section](https://github.com/future-architect/vuls#architecture)を参照
 | 
			
		||||
 | 
			
		||||
- 全ての起動中のDockerコンテナをスキャン  
 | 
			
		||||
  `"${running}"` をcontainersに指定する
 | 
			
		||||
    ```
 | 
			
		||||
    [servers]
 | 
			
		||||
 | 
			
		||||
    [servers.172-31-4-82]
 | 
			
		||||
    host         = "172.31.4.82"
 | 
			
		||||
    user        = "ec2-user"
 | 
			
		||||
    keyPath     = "/home/username/.ssh/id_rsa"
 | 
			
		||||
    containers = ["${running}"]
 | 
			
		||||
    ```
 | 
			
		||||
 | 
			
		||||
- あるコンテナのみスキャン
 | 
			
		||||
  コンテナID、または、コンテナ名を、containersに指定する。
 | 
			
		||||
  以下の例では、`container_name_a`と、`4aa37a8b63b9`のコンテナのみスキャンする
 | 
			
		||||
  スキャン実行前に、コンテナが起動中か確認すること。もし起動してない場合はエラーメッセージを出力してスキャンを中断する。
 | 
			
		||||
    ```
 | 
			
		||||
    [servers]
 | 
			
		||||
 | 
			
		||||
    [servers.172-31-4-82]
 | 
			
		||||
    host         = "172.31.4.82"
 | 
			
		||||
    user        = "ec2-user"
 | 
			
		||||
    keyPath     = "/home/username/.ssh/id_rsa"
 | 
			
		||||
    containers = ["container_name_a", "4aa37a8b63b9"]
 | 
			
		||||
    ```
 | 
			
		||||
 | 
			
		||||
# Usage: TUI
 | 
			
		||||
 | 
			
		||||
## Display the latest scan results
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
$ vuls tui -h
 | 
			
		||||
tui:
 | 
			
		||||
	tui [-dbpath=/path/to/vuls.sqlite3]
 | 
			
		||||
 | 
			
		||||
  -dbpath string
 | 
			
		||||
        /path/to/sqlite3 (default "$PWD/vuls.sqlite3")
 | 
			
		||||
  -debug-sql
 | 
			
		||||
    	debug SQL
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Key binding is bellow.
 | 
			
		||||
 | 
			
		||||
| key | |
 | 
			
		||||
|:-----------------|:-------|:------|
 | 
			
		||||
| TAB | move cursor among the panes |
 | 
			
		||||
| Arrow up/down | move cursor to up/down |
 | 
			
		||||
| Ctrl+j, Ctrl+k | move cursor to up/donw |
 | 
			
		||||
| Ctrl+u, Ctrl+d | page up/donw |
 | 
			
		||||
 | 
			
		||||
For details, see https://github.com/future-architect/vuls/blob/master/report/tui.go
 | 
			
		||||
 | 
			
		||||
## Display the previous scan results
 | 
			
		||||
 | 
			
		||||
- Display the list of scan results.
 | 
			
		||||
```
 | 
			
		||||
$ ./vuls history
 | 
			
		||||
2   2016-05-24 19:49 scanned 1 servers: amazon2
 | 
			
		||||
1   2016-05-24 19:48 scanned 2 servers: amazon1, romantic_goldberg
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
- Display the result of scanID 1
 | 
			
		||||
```
 | 
			
		||||
$ ./vuls tui 1
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
- Display the result of scanID 2
 | 
			
		||||
```
 | 
			
		||||
$ ./vuls tui 2
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
# Display the previous scan results using peco
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
$ ./vuls history | peco | ./vuls tui
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
[](https://asciinema.org/a/emi7y7docxr60bq080z10t7v8)
 | 
			
		||||
 | 
			
		||||
# Usage: go-cve-dictonary on different server 
 | 
			
		||||
 | 
			
		||||
Run go-cve-dictionary as server mode before scanning on 192.168.10.1
 | 
			
		||||
```
 | 
			
		||||
$ go-cve-dictionary server -bind=192.168.10.1 -port=1323
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Run Vuls with -cve-dictionary-url option.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
$ vuls scan -cve-dictionary-url=http://192.168.0.1:1323
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
# Usage: Update NVD Data
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
$ go-cve-dictionary fetchnvd -h
 | 
			
		||||
fetchnvd:
 | 
			
		||||
        fetchnvd
 | 
			
		||||
                [-last2y]
 | 
			
		||||
                [-dbpath=/path/to/cve.sqlite3]
 | 
			
		||||
                [-debug]
 | 
			
		||||
                [-debug-sql]
 | 
			
		||||
 | 
			
		||||
  -dbpath string
 | 
			
		||||
        /path/to/sqlite3 (default "$PWD/cve.sqlite3")
 | 
			
		||||
  -debug
 | 
			
		||||
        debug mode
 | 
			
		||||
  -debug-sql
 | 
			
		||||
        SQL debug mode
 | 
			
		||||
  -last2y
 | 
			
		||||
        Refresh NVD data in the last two years.
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
- Fetch data of the entire period
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
$ go-cve-dictionary fetchnvd -entire
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
- Fetch data in the last 2 years
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
$ go-cve-dictionary fetchnvd -last2y
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
----
 | 
			
		||||
 | 
			
		||||
# レポートの日本語化
 | 
			
		||||
 | 
			
		||||
@@ -107,3 +842,141 @@ $ vuls scan -lang=ja
 | 
			
		||||
Scan時にlang=jaを指定すると脆弱性レポートが日本語になる  
 | 
			
		||||
slack, emailは日本語対応済み TUIは日本語表示未対応
 | 
			
		||||
 | 
			
		||||
----
 | 
			
		||||
 | 
			
		||||
# Deploy With Glide
 | 
			
		||||
 | 
			
		||||
If an error occurred while go get, try deploying with glide.  
 | 
			
		||||
- Install [Glide](https://github.com/bumptech/glide)
 | 
			
		||||
- Deploy go-cve-dictionary
 | 
			
		||||
```
 | 
			
		||||
$ go get -d github.com/kotakanbe/go-cve-dictionary
 | 
			
		||||
$ cd $GOPATH/src/github.com/kotakanbe/go-cve-dictionary
 | 
			
		||||
$ glide install
 | 
			
		||||
$ go install
 | 
			
		||||
```
 | 
			
		||||
- Deploy vuls
 | 
			
		||||
```
 | 
			
		||||
$ go get -d github.com/future-architect/vuls
 | 
			
		||||
$ cd $GOPATH/src/github.com/future-architect/vuls
 | 
			
		||||
$ glide install
 | 
			
		||||
$ go install
 | 
			
		||||
```
 | 
			
		||||
- The binaries are created under $GOPARH/bin
 | 
			
		||||
 | 
			
		||||
----
 | 
			
		||||
 | 
			
		||||
# Update Vuls With Glide
 | 
			
		||||
 | 
			
		||||
- Update go-cve-dictionary
 | 
			
		||||
```
 | 
			
		||||
$ cd $GOPATH/src/github.com/kotakanbe/go-cve-dictionary
 | 
			
		||||
$ git pull
 | 
			
		||||
$ glide install
 | 
			
		||||
$ go install
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
- Update vuls
 | 
			
		||||
```
 | 
			
		||||
$ cd $GOPATH/src/github.com/future-architect/vuls
 | 
			
		||||
$ git pull
 | 
			
		||||
$ glide install
 | 
			
		||||
$ go install
 | 
			
		||||
```
 | 
			
		||||
- The binaries are created under $GOPARH/bin
 | 
			
		||||
- If the DB schema was changed, please specify new SQLite3 DB file.
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
# Misc
 | 
			
		||||
 | 
			
		||||
- go get時にエラーが出る  
 | 
			
		||||
Gitをv2にアップデートしてお試しを  
 | 
			
		||||
see https://groups.google.com/forum/#!topic/mgo-users/rO1-gUDFo_g
 | 
			
		||||
 | 
			
		||||
- HTTP Proxy サポート
 | 
			
		||||
プロキシ環境下では、-http-proxyオプションを指定
 | 
			
		||||
 | 
			
		||||
- go-cve-dictionaryのデーモン化  
 | 
			
		||||
Use Systemd, Upstart or supervisord, daemontools...
 | 
			
		||||
 | 
			
		||||
- NVD, JVNの脆弱性データベースの自動更新  
 | 
			
		||||
CRONなどを使えば可能
 | 
			
		||||
 | 
			
		||||
- 自動定期スキャン  
 | 
			
		||||
CRONなどを使い、自動化のためにsudoと、秘密鍵のパスワードなしでも実行可能なようにする
 | 
			
		||||
  - スキャン対象サーバの /etc/sudoers に NOPASSWORD を設定する  
 | 
			
		||||
  - 秘密鍵パスフレーズなしの公開鍵認証か、ssh-agentを使う  
 | 
			
		||||
 | 
			
		||||
- クロスコンパイル
 | 
			
		||||
    ```bash
 | 
			
		||||
    $ cd /path/to/your/local-git-reporsitory/vuls
 | 
			
		||||
    $ GOOS=linux GOARCH=amd64 go build -o vuls.amd64
 | 
			
		||||
    ```
 | 
			
		||||
 | 
			
		||||
- Logging  
 | 
			
		||||
Log is under /var/log/vuls/
 | 
			
		||||
 | 
			
		||||
- Debug  
 | 
			
		||||
Run with --debug, --sql-debug option.
 | 
			
		||||
 | 
			
		||||
- Adjusting Open File Limit  
 | 
			
		||||
[Riak docs](http://docs.basho.com/riak/latest/ops/tuning/open-files-limit/) is awesome.
 | 
			
		||||
 | 
			
		||||
- Does Vuls accept ssh connections with fish-shell or old zsh as the login shell?  
 | 
			
		||||
No, Vuls needs a user on the server for bash login. see also [#8](/../../issues/8)
 | 
			
		||||
 | 
			
		||||
- Windows  
 | 
			
		||||
Use Microsoft Baseline Security Analyzer. [MBSA](https://technet.microsoft.com/en-us/security/cc184924.aspx)
 | 
			
		||||
 | 
			
		||||
----
 | 
			
		||||
 | 
			
		||||
# Related Projects 
 | 
			
		||||
 | 
			
		||||
- [k1LoW/ssh_config_to_vuls_config](https://github.com/k1LoW/ssh_config_to_vuls_config)   
 | 
			
		||||
ssh_config to vuls config TOML format
 | 
			
		||||
 | 
			
		||||
- [usiusi360/vulsrepo](https://github.com/usiusi360/vulsrepo)  
 | 
			
		||||
VulsRepo is visualized based on the json report output in vuls.  
 | 
			
		||||
Youtube  
 | 
			
		||||
[](https://www.youtube.com/watch?v=DIBPoik4owc)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
----
 | 
			
		||||
 | 
			
		||||
# Data Source
 | 
			
		||||
 | 
			
		||||
- [NVD](https://nvd.nist.gov/)
 | 
			
		||||
- [JVN(Japanese)](http://jvndb.jvn.jp/apis/myjvn/)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Authors
 | 
			
		||||
 | 
			
		||||
kotakanbe ([@kotakanbe](https://twitter.com/kotakanbe)) created vuls and [these fine people](https://github.com/future-architect/vuls/graphs/contributors) have contributed.
 | 
			
		||||
 | 
			
		||||
----
 | 
			
		||||
 | 
			
		||||
# Contribute
 | 
			
		||||
 | 
			
		||||
1. fork a repository: github.com/future-architect/vuls to github.com/you/repo
 | 
			
		||||
2. get original code: go get github.com/future-architect/vuls
 | 
			
		||||
3. work on original code
 | 
			
		||||
4. add remote to your repo: git remote add myfork https://github.com/you/repo.git
 | 
			
		||||
5. push your changes: git push myfork
 | 
			
		||||
6. create a new Pull Request
 | 
			
		||||
 | 
			
		||||
- see [GitHub and Go: forking, pull requests, and go-getting](http://blog.campoy.cat/2014/03/github-and-go-forking-pull-requests-and.html)
 | 
			
		||||
 | 
			
		||||
----
 | 
			
		||||
 | 
			
		||||
# Change Log
 | 
			
		||||
 | 
			
		||||
Please see [CHANGELOG](https://github.com/future-architect/vuls/blob/master/CHANGELOG.md).
 | 
			
		||||
 | 
			
		||||
----
 | 
			
		||||
 | 
			
		||||
# Licence
 | 
			
		||||
 | 
			
		||||
Please see [LICENSE](https://github.com/future-architect/vuls/blob/master/LICENSE).
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										30
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								README.md
									
									
									
									
									
								
							@@ -5,7 +5,7 @@
 | 
			
		||||
[](https://github.com/future-architect/vuls/blob/master/LICENSE.txt)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Vulnerability scanner for Linux, agentless, written in golang.
 | 
			
		||||
Vulnerability scanner for Linux/FreeBSD, agentless, written in golang.
 | 
			
		||||
 | 
			
		||||
We have a slack team. [Join slack team](http://goo.gl/forms/xm5KFo35tu)  
 | 
			
		||||
 | 
			
		||||
@@ -42,8 +42,8 @@ Vuls is a tool created to solve the problems listed above. It has the following
 | 
			
		||||
 | 
			
		||||
# Main Features
 | 
			
		||||
 | 
			
		||||
- Scan for any vulnerabilities in Linux Server
 | 
			
		||||
    - Supports Ubuntu, Debian, CentOS, Amazon Linux, RHEL
 | 
			
		||||
- Scan for any vulnerabilities in Linux/FreeBSD Server
 | 
			
		||||
    - Supports Ubuntu, Debian, CentOS, Amazon Linux, RHEL, FreeBSD
 | 
			
		||||
    - Cloud, on-premise, Docker
 | 
			
		||||
- Scan middleware that are not included in OS package management
 | 
			
		||||
    - Scan middleware, programming language libraries and framework for vulnerability
 | 
			
		||||
@@ -241,7 +241,7 @@ $ vuls tui
 | 
			
		||||
 | 
			
		||||
----
 | 
			
		||||
 | 
			
		||||
# Hello Vuls in a docker container
 | 
			
		||||
# Setup Vuls in a Docker Container
 | 
			
		||||
 | 
			
		||||
see https://github.com/future-architect/vuls/tree/master/setup/docker
 | 
			
		||||
 | 
			
		||||
@@ -255,7 +255,7 @@ see https://github.com/future-architect/vuls/tree/master/setup/docker
 | 
			
		||||
- Fetch vulnerability information from NVD and JVN(Japanese), then insert into SQLite3.
 | 
			
		||||
 | 
			
		||||
## Vuls
 | 
			
		||||
- Scan vulnerabilities on the servers and create a list of the CVE ID
 | 
			
		||||
- Scan vulnerabilities on the servers via SSH and create a list of the CVE ID
 | 
			
		||||
  - To scan Docker containers, Vuls connect via ssh to the Docker host and then `docker exec` to the containers. So, no need to run sshd daemon on the containers.
 | 
			
		||||
- Fetch more detailed information of the detected CVE from go-cve-dictionary
 | 
			
		||||
- Insert scan result into SQLite3
 | 
			
		||||
@@ -288,7 +288,8 @@ web/app server in the same configuration under the load balancer
 | 
			
		||||
| Debian      |                7, 8|
 | 
			
		||||
| RHEL        |          4, 5, 6, 7|
 | 
			
		||||
| CentOS      |             5, 6, 7|
 | 
			
		||||
| Amazon Linux|                All |
 | 
			
		||||
| Amazon Linux|                 All|
 | 
			
		||||
| FreeBSD     |                  10|
 | 
			
		||||
 | 
			
		||||
----
 | 
			
		||||
 | 
			
		||||
@@ -364,8 +365,8 @@ You can customize your configuration using this template.
 | 
			
		||||
 | 
			
		||||
    - hookURL : Incomming webhook's URL  
 | 
			
		||||
    - channel : channel name.  
 | 
			
		||||
    If you set ${servername} to channel, the report will be sent to each channel.  
 | 
			
		||||
    In the following example, the report will be sent to the #server1 and #server2.  
 | 
			
		||||
    If you set `${servername}` to channel, the report will be sent to each channel.  
 | 
			
		||||
    In the following example, the report will be sent to the `#server1` and `#server2`.  
 | 
			
		||||
    Be sure to create these channels before scanning.
 | 
			
		||||
      ```
 | 
			
		||||
      [slack]
 | 
			
		||||
@@ -386,7 +387,7 @@ You can customize your configuration using this template.
 | 
			
		||||
    - iconEmoji: emoji
 | 
			
		||||
    - authUser: username of the slack team
 | 
			
		||||
    - notifyUsers: a list of Slack usernames to send Slack notifications.
 | 
			
		||||
      If you set ["@foo", "@bar"] to notifyUsers, @foo @bar will be included in text.  
 | 
			
		||||
      If you set `["@foo", "@bar"]` to notifyUsers, @foo @bar will be included in text.  
 | 
			
		||||
      So @foo, @bar can receive mobile push notifications on their smartphone.  
 | 
			
		||||
 | 
			
		||||
- Mail section
 | 
			
		||||
@@ -455,6 +456,7 @@ Prepare subcommand installs required packages on each server.
 | 
			
		||||
| CentOS      |                6, 7| yum-plugin-security, yum-plugin-changelog |
 | 
			
		||||
| Amazon      |                All | -            |
 | 
			
		||||
| RHEL        |         4, 5, 6, 7 | -            |
 | 
			
		||||
| FreeBSD     |                 10 | -            |
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
@@ -578,13 +580,13 @@ This is useful If you want to use ProxyCommand or chiper algorithm of SSH that i
 | 
			
		||||
| sudo password on target servers | -ask-sudo-password | |
 | 
			
		||||
|:-----------------|:-------|:------|
 | 
			
		||||
| NOPASSWORD       | - | defined as NOPASSWORD in /etc/sudoers on target servers |
 | 
			
		||||
| with password    | required | . |
 | 
			
		||||
| with password    | required |  |
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## -report-json , -report-text option
 | 
			
		||||
 | 
			
		||||
At the end of the scan, scan results will be available in the $PWD/result/current/ directory.  
 | 
			
		||||
all.(json|txt) includes the scan results of all servres and servername.(json|txt) includes the scan result of the server.
 | 
			
		||||
At the end of the scan, scan results will be available in the `$PWD/result/current/` directory.  
 | 
			
		||||
`all.(json|txt)` includes the scan results of all servres and `servername.(json|txt)` includes the scan result of the server.
 | 
			
		||||
 | 
			
		||||
## example
 | 
			
		||||
 | 
			
		||||
@@ -661,7 +663,7 @@ Vuls scans Docker containers via `docker exec` instead of SSH.
 | 
			
		||||
For more details, see [Architecture section](https://github.com/future-architect/vuls#architecture)
 | 
			
		||||
 | 
			
		||||
- To scan all of running containers  
 | 
			
		||||
  "${running}" needs to be set in the containers item.
 | 
			
		||||
  `"${running}"` needs to be set in the containers item.
 | 
			
		||||
    ```
 | 
			
		||||
    [servers]
 | 
			
		||||
 | 
			
		||||
@@ -674,7 +676,7 @@ For more details, see [Architecture section](https://github.com/future-architect
 | 
			
		||||
 | 
			
		||||
- To scan specific containers  
 | 
			
		||||
  The container ID or container name needs to be set in the containers item.  
 | 
			
		||||
  In the following example, only "container_name_a" and "4aa37a8b63b9" will be scanned.  
 | 
			
		||||
  In the following example, only `container_name_a` and `4aa37a8b63b9` will be scanned.  
 | 
			
		||||
  Be sure to check these containers are running state before scanning.  
 | 
			
		||||
  If specified containers are not running, Vuls gives up scanning with printing error message.
 | 
			
		||||
    ```
 | 
			
		||||
 
 | 
			
		||||
@@ -37,14 +37,14 @@
 | 
			
		||||
        <y:ProxyAutoBoundsNode>
 | 
			
		||||
          <y:Realizers active="0">
 | 
			
		||||
            <y:GroupNode>
 | 
			
		||||
              <y:Geometry height="289.5891316731771" width="137.0" x="1274.5282340049735" y="-47.136413574218864"/>
 | 
			
		||||
              <y:Geometry height="289.5891316731771" width="171.0" x="1274.5282340049735" y="-47.136413574218864"/>
 | 
			
		||||
              <y:Fill color="#F5F5F5" transparent="false"/>
 | 
			
		||||
              <y:BorderStyle color="#000000" type="dashed" width="1.0"/>
 | 
			
		||||
              <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.666015625" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="159.0390625" x="-11.01953125" y="0.0">Vulnerbility Database</y:NodeLabel>
 | 
			
		||||
              <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.666015625" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="171.0" x="0.0" y="0.0">Vulnerbility Database</y:NodeLabel>
 | 
			
		||||
              <y:Shape type="roundrectangle"/>
 | 
			
		||||
              <y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
 | 
			
		||||
              <y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
 | 
			
		||||
              <y:BorderInsets bottom="29" bottomF="28.96858723958337" left="9" leftF="9.35411262512207" right="13" rightF="12.64588737487793" top="27" topF="27.242065429687557"/>
 | 
			
		||||
              <y:BorderInsets bottom="29" bottomF="28.96858723958337" left="29" leftF="29.35411262512207" right="27" rightF="26.64588737487793" top="27" topF="27.242065429687557"/>
 | 
			
		||||
            </y:GroupNode>
 | 
			
		||||
            <y:GroupNode>
 | 
			
		||||
              <y:Geometry height="50.0" width="50.0" x="0.0" y="60.0"/>
 | 
			
		||||
@@ -63,7 +63,7 @@
 | 
			
		||||
        <node id="n1::n0">
 | 
			
		||||
          <data key="d6">
 | 
			
		||||
            <y:ShapeNode>
 | 
			
		||||
              <y:Geometry height="70.0" width="85.0" x="1298.8823466300955" y="128.4841308593749"/>
 | 
			
		||||
              <y:Geometry height="70.0" width="85.0" x="1318.8823466300955" y="128.4841308593749"/>
 | 
			
		||||
              <y:Fill color="#C0C0C0" transparent="false"/>
 | 
			
		||||
              <y:BorderStyle color="#000000" type="line" width="1.0"/>
 | 
			
		||||
              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="32.265625" modelName="custom" textColor="#000000" visible="true" width="63.279296875" x="10.8603515625" y="18.8671875">JVN
 | 
			
		||||
@@ -81,7 +81,7 @@
 | 
			
		||||
        <node id="n1::n1">
 | 
			
		||||
          <data key="d6">
 | 
			
		||||
            <y:ShapeNode>
 | 
			
		||||
              <y:Geometry height="70.0" width="85.0" x="1298.8823466300955" y="16.771667480468693"/>
 | 
			
		||||
              <y:Geometry height="70.0" width="85.0" x="1318.8823466300955" y="16.771667480468693"/>
 | 
			
		||||
              <y:Fill color="#C0C0C0" transparent="false"/>
 | 
			
		||||
              <y:BorderStyle color="#000000" type="line" width="1.0"/>
 | 
			
		||||
              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" textColor="#000000" visible="true" width="29.69921875" x="27.650390625" y="25.93359375">NVD<y:LabelModel>
 | 
			
		||||
@@ -103,14 +103,14 @@
 | 
			
		||||
        <y:ProxyAutoBoundsNode>
 | 
			
		||||
          <y:Realizers active="0">
 | 
			
		||||
            <y:GroupNode>
 | 
			
		||||
              <y:Geometry height="357.5982869466146" width="137.0" x="1274.5282340049735" y="285.984130859375"/>
 | 
			
		||||
              <y:Geometry height="336.1141560872396" width="171.61765336990447" x="1271.3823466300955" y="296.7261962890625"/>
 | 
			
		||||
              <y:Fill color="#F5F5F5" transparent="false"/>
 | 
			
		||||
              <y:BorderStyle color="#000000" type="dashed" width="1.0"/>
 | 
			
		||||
              <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.666015625" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="137.0" x="0.0" y="0.0">Linux Support</y:NodeLabel>
 | 
			
		||||
              <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.666015625" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="171.61765336990447" x="0.0" y="0.0">Distribution Support</y:NodeLabel>
 | 
			
		||||
              <y:Shape type="roundrectangle"/>
 | 
			
		||||
              <y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
 | 
			
		||||
              <y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
 | 
			
		||||
              <y:BorderInsets bottom="15" bottomF="14.801595052083258" left="5" leftF="4.85411262512207" right="8" rightF="8.14588737487793" top="11" topF="10.747945149739394"/>
 | 
			
		||||
              <y:BorderInsets bottom="12" bottomF="11.879109700520985" left="27" leftF="26.617653369904474" right="13" rightF="13.0" top="13" topF="12.569030761718636"/>
 | 
			
		||||
            </y:GroupNode>
 | 
			
		||||
            <y:GroupNode>
 | 
			
		||||
              <y:Geometry height="50.0" width="50.0" x="0.0" y="60.0"/>
 | 
			
		||||
@@ -129,10 +129,10 @@
 | 
			
		||||
        <node id="n2::n0">
 | 
			
		||||
          <data key="d6">
 | 
			
		||||
            <y:ShapeNode>
 | 
			
		||||
              <y:Geometry height="71.484130859375" width="94.0" x="1294.3823466300955" y="443.21842447916663"/>
 | 
			
		||||
              <y:Geometry height="50.0" width="100.0" x="1313.0" y="416.42173258463527"/>
 | 
			
		||||
              <y:Fill color="#C0C0C0" transparent="false"/>
 | 
			
		||||
              <y:BorderStyle color="#000000" type="line" width="1.0"/>
 | 
			
		||||
              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="32.265625" modelName="custom" textColor="#000000" visible="true" width="64.158203125" x="14.9208984375" y="19.6092529296875">apptitude
 | 
			
		||||
              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="32.265625" modelName="custom" textColor="#000000" visible="true" width="64.158203125" x="17.9208984375" y="8.8671875">apptitude
 | 
			
		||||
changelog<y:LabelModel>
 | 
			
		||||
                  <y:SmartNodeLabelModel distance="4.0"/>
 | 
			
		||||
                </y:LabelModel>
 | 
			
		||||
@@ -147,10 +147,10 @@ changelog<y:LabelModel>
 | 
			
		||||
        <node id="n2::n1">
 | 
			
		||||
          <data key="d6">
 | 
			
		||||
            <y:ShapeNode>
 | 
			
		||||
              <y:Geometry height="71.484130859375" width="94.0" x="1294.3823466300955" y="333.3980916341144"/>
 | 
			
		||||
              <y:Geometry height="50.0" width="100.0" x="1314.0" y="345.96124267578114"/>
 | 
			
		||||
              <y:Fill color="#C0C0C0" transparent="false"/>
 | 
			
		||||
              <y:BorderStyle color="#000000" type="line" width="1.0"/>
 | 
			
		||||
              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="32.265625" modelName="custom" textColor="#000000" visible="true" width="64.158203125" x="14.9208984375" y="19.6092529296875">yum
 | 
			
		||||
              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="32.265625" modelName="custom" textColor="#000000" visible="true" width="64.158203125" x="17.9208984375" y="8.8671875">yum
 | 
			
		||||
changelog<y:LabelModel>
 | 
			
		||||
                  <y:SmartNodeLabelModel distance="4.0"/>
 | 
			
		||||
                </y:LabelModel>
 | 
			
		||||
@@ -165,10 +165,10 @@ changelog<y:LabelModel>
 | 
			
		||||
        <node id="n2::n2">
 | 
			
		||||
          <data key="d6">
 | 
			
		||||
            <y:ShapeNode>
 | 
			
		||||
              <y:Geometry height="71.484130859375" width="94.0" x="1294.3823466300955" y="542.2966918945314"/>
 | 
			
		||||
              <y:Geometry height="50.0" width="100.0" x="1315.0" y="485.0"/>
 | 
			
		||||
              <y:Fill color="#C0C0C0" transparent="false"/>
 | 
			
		||||
              <y:BorderStyle color="#000000" type="line" width="1.0"/>
 | 
			
		||||
              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="32.265625" modelName="custom" textColor="#000000" visible="true" width="92.828125" x="0.5859375" y="19.6092529296875">RHSA (RedHat)
 | 
			
		||||
              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="32.265625" modelName="custom" textColor="#000000" visible="true" width="92.828125" x="3.5859375" y="8.8671875">RHSA (RedHat)
 | 
			
		||||
ALAS (Amazon)<y:LabelModel>
 | 
			
		||||
                  <y:SmartNodeLabelModel distance="4.0"/>
 | 
			
		||||
                </y:LabelModel>
 | 
			
		||||
@@ -180,6 +180,23 @@ ALAS (Amazon)<y:LabelModel>
 | 
			
		||||
            </y:ShapeNode>
 | 
			
		||||
          </data>
 | 
			
		||||
        </node>
 | 
			
		||||
        <node id="n2::n3">
 | 
			
		||||
          <data key="d6">
 | 
			
		||||
            <y:ShapeNode>
 | 
			
		||||
              <y:Geometry height="50.0" width="100.0" x="1314.3823466300955" y="555.9612426757811"/>
 | 
			
		||||
              <y:Fill color="#C0C0C0" transparent="false"/>
 | 
			
		||||
              <y:BorderStyle color="#000000" type="line" width="1.0"/>
 | 
			
		||||
              <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" textColor="#000000" visible="true" width="100.650390625" x="-0.3251953125" y="15.93359375">FreeBSD Support<y:LabelModel>
 | 
			
		||||
                  <y:SmartNodeLabelModel distance="4.0"/>
 | 
			
		||||
                </y:LabelModel>
 | 
			
		||||
                <y:ModelParameter>
 | 
			
		||||
                  <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
 | 
			
		||||
                </y:ModelParameter>
 | 
			
		||||
              </y:NodeLabel>
 | 
			
		||||
              <y:Shape type="roundrectangle"/>
 | 
			
		||||
            </y:ShapeNode>
 | 
			
		||||
          </data>
 | 
			
		||||
        </node>
 | 
			
		||||
      </graph>
 | 
			
		||||
    </node>
 | 
			
		||||
    <node id="n3">
 | 
			
		||||
@@ -453,7 +470,6 @@ ALAS (Amazon)<y:LabelModel>
 | 
			
		||||
    </node>
 | 
			
		||||
    <node id="n10" yfiles.foldertype="group">
 | 
			
		||||
      <data key="d4"/>
 | 
			
		||||
      <data key="d5"/>
 | 
			
		||||
      <data key="d6">
 | 
			
		||||
        <y:ProxyAutoBoundsNode>
 | 
			
		||||
          <y:Realizers active="0">
 | 
			
		||||
@@ -520,7 +536,6 @@ Container<y:LabelModel>
 | 
			
		||||
    </node>
 | 
			
		||||
    <node id="n11" yfiles.foldertype="group">
 | 
			
		||||
      <data key="d4"/>
 | 
			
		||||
      <data key="d5"/>
 | 
			
		||||
      <data key="d6">
 | 
			
		||||
        <y:ProxyAutoBoundsNode>
 | 
			
		||||
          <y:Realizers active="0">
 | 
			
		||||
@@ -528,7 +543,7 @@ Container<y:LabelModel>
 | 
			
		||||
              <y:Geometry height="131.666015625" width="192.109991788863" x="964.6223485469814" y="516.3727416992189"/>
 | 
			
		||||
              <y:Fill color="#F5F5F5" transparent="false"/>
 | 
			
		||||
              <y:BorderStyle color="#000000" type="dashed" width="1.0"/>
 | 
			
		||||
              <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.666015625" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="192.109991788863" x="0.0" y="0.0">Linux Servers</y:NodeLabel>
 | 
			
		||||
              <y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="21.666015625" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="192.109991788863" x="0.0" y="0.0">Linux/FreeBSD Servers</y:NodeLabel>
 | 
			
		||||
              <y:Shape type="roundrectangle"/>
 | 
			
		||||
              <y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
 | 
			
		||||
              <y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
 | 
			
		||||
@@ -609,7 +624,7 @@ Vulnerability data<y:LabelModel>
 | 
			
		||||
          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
 | 
			
		||||
          <y:LineStyle color="#000000" type="line" width="1.0"/>
 | 
			
		||||
          <y:Arrows source="none" target="standard"/>
 | 
			
		||||
          <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="34.626953125" x="8.29332590103104" y="20.93360392252606">HTTP<y:LabelModel>
 | 
			
		||||
          <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="34.626953125" x="6.7270960807795745" y="20.93360392252606">HTTP<y:LabelModel>
 | 
			
		||||
              <y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
 | 
			
		||||
            </y:LabelModel>
 | 
			
		||||
            <y:ModelParameter>
 | 
			
		||||
@@ -645,7 +660,7 @@ Vulnerability data<y:LabelModel>
 | 
			
		||||
          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
 | 
			
		||||
          <y:LineStyle color="#000000" type="line" width="1.0"/>
 | 
			
		||||
          <y:Arrows source="none" target="standard"/>
 | 
			
		||||
          <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="34.626953125" x="65.78936398029236" y="21.58855026779011">HTTP<y:LabelModel>
 | 
			
		||||
          <y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="34.626953125" x="65.80254757404236" y="21.547962712535252">HTTP<y:LabelModel>
 | 
			
		||||
              <y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
 | 
			
		||||
            </y:LabelModel>
 | 
			
		||||
            <y:ModelParameter>
 | 
			
		||||
@@ -712,7 +727,6 @@ Vulnerability data<y:LabelModel>
 | 
			
		||||
      </data>
 | 
			
		||||
    </edge>
 | 
			
		||||
    <edge id="e6" source="n4::n2" target="n11::n0">
 | 
			
		||||
      <data key="d9"/>
 | 
			
		||||
      <data key="d10">
 | 
			
		||||
        <y:PolyLineEdge>
 | 
			
		||||
          <y:Path sx="87.9098606499872" sy="24.54915453361525" tx="0.0" ty="0.0"/>
 | 
			
		||||
@@ -731,7 +745,6 @@ Vulnerability data<y:LabelModel>
 | 
			
		||||
      </data>
 | 
			
		||||
    </edge>
 | 
			
		||||
    <edge id="e7" source="n4::n2" target="n10::n0">
 | 
			
		||||
      <data key="d9"/>
 | 
			
		||||
      <data key="d10">
 | 
			
		||||
        <y:PolyLineEdge>
 | 
			
		||||
          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
 | 
			
		||||
@@ -750,7 +763,6 @@ Vulnerability data<y:LabelModel>
 | 
			
		||||
      </data>
 | 
			
		||||
    </edge>
 | 
			
		||||
    <edge id="n10::e0" source="n10::n0" target="n10::n1">
 | 
			
		||||
      <data key="d9"/>
 | 
			
		||||
      <data key="d10">
 | 
			
		||||
        <y:PolyLineEdge>
 | 
			
		||||
          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
 | 
			
		||||
@@ -769,7 +781,6 @@ Vulnerability data<y:LabelModel>
 | 
			
		||||
      </data>
 | 
			
		||||
    </edge>
 | 
			
		||||
    <edge id="e8" source="n10::n1" target="n3">
 | 
			
		||||
      <data key="d9"/>
 | 
			
		||||
      <data key="d10">
 | 
			
		||||
        <y:PolyLineEdge>
 | 
			
		||||
          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
 | 
			
		||||
@@ -780,7 +791,6 @@ Vulnerability data<y:LabelModel>
 | 
			
		||||
      </data>
 | 
			
		||||
    </edge>
 | 
			
		||||
    <edge id="e9" source="n11::n0" target="n3">
 | 
			
		||||
      <data key="d9"/>
 | 
			
		||||
      <data key="d10">
 | 
			
		||||
        <y:PolyLineEdge>
 | 
			
		||||
          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
 | 
			
		||||
@@ -791,7 +801,6 @@ Vulnerability data<y:LabelModel>
 | 
			
		||||
      </data>
 | 
			
		||||
    </edge>
 | 
			
		||||
    <edge id="n9::e0" source="n9::n2" target="n9::n0">
 | 
			
		||||
      <data key="d9"/>
 | 
			
		||||
      <data key="d10">
 | 
			
		||||
        <y:PolyLineEdge>
 | 
			
		||||
          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
 | 
			
		||||
@@ -810,7 +819,6 @@ Vulnerability data<y:LabelModel>
 | 
			
		||||
      </data>
 | 
			
		||||
    </edge>
 | 
			
		||||
    <edge id="n9::e1" source="n9::n0" target="n9::n1">
 | 
			
		||||
      <data key="d9"/>
 | 
			
		||||
      <data key="d10">
 | 
			
		||||
        <y:PolyLineEdge>
 | 
			
		||||
          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
 | 
			
		||||
@@ -829,7 +837,6 @@ Vulnerability data<y:LabelModel>
 | 
			
		||||
      </data>
 | 
			
		||||
    </edge>
 | 
			
		||||
    <edge id="e10" source="n4::n2" target="n6">
 | 
			
		||||
      <data key="d9"/>
 | 
			
		||||
      <data key="d10">
 | 
			
		||||
        <y:PolyLineEdge>
 | 
			
		||||
          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
 | 
			
		||||
@@ -849,7 +856,6 @@ Scan Result<y:LabelModel>
 | 
			
		||||
      </data>
 | 
			
		||||
    </edge>
 | 
			
		||||
    <edge id="e11" source="n6" target="n4::n1">
 | 
			
		||||
      <data key="d9"/>
 | 
			
		||||
      <data key="d10">
 | 
			
		||||
        <y:PolyLineEdge>
 | 
			
		||||
          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
 | 
			
		||||
@@ -868,7 +874,6 @@ Scan Result<y:LabelModel>
 | 
			
		||||
      </data>
 | 
			
		||||
    </edge>
 | 
			
		||||
    <edge id="e12" source="n4::n0" target="n7">
 | 
			
		||||
      <data key="d9"/>
 | 
			
		||||
      <data key="d10">
 | 
			
		||||
        <y:PolyLineEdge>
 | 
			
		||||
          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
 | 
			
		||||
@@ -879,7 +884,6 @@ Scan Result<y:LabelModel>
 | 
			
		||||
      </data>
 | 
			
		||||
    </edge>
 | 
			
		||||
    <edge id="e13" source="n7" target="n5">
 | 
			
		||||
      <data key="d9"/>
 | 
			
		||||
      <data key="d10">
 | 
			
		||||
        <y:PolyLineEdge>
 | 
			
		||||
          <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
 | 
			
		||||
 
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							| 
		 Before Width: | Height: | Size: 73 KiB After Width: | Height: | Size: 75 KiB  | 
		Reference in New Issue
	
	Block a user