diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..d82721d
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,24 @@
+group: travis_latest
+language: python
+cache: pip
+python:
+ - 2.7
+
+# - 3.6
+#matrix:
+# allow_failures:
+# - python: 3.6 - Commenting out testing for Python 3.6 until ready
+
+install:
+ - pip install -r requirements.txt
+ - pip install flake8 # pytest # add another testing frameworks later
+before_script:
+ # stop the build if there are Python syntax errors or undefined names
+ - flake8 . --count --exclude=deps/qualysapi --select=E901,E999,F821,F822,F823 --show-source --statistics
+ # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
+ - flake8 . --count --exit-zero --exclude=deps/qualysapi --max-complexity=10 --max-line-length=127 --statistics
+script:
+ - true # pytest --capture=sys # add other tests here
+notifications:
+ on_success: change
+ on_failure: change # `always` will be the setting once code changes slow down
diff --git a/CNAME b/CNAME
new file mode 100644
index 0000000..b5b3a32
--- /dev/null
+++ b/CNAME
@@ -0,0 +1 @@
+www.vulnwhisperer.com
\ No newline at end of file
diff --git a/README.md b/README.md
index a2c6cfc..dc315c9 100644
--- a/README.md
+++ b/README.md
@@ -2,28 +2,37 @@
Create actionable data from your vulnerability scans
-
+
-VulnWhisperer is a vulnerability report aggregator. VulnWhisperer will pull all the reports
+VulnWhisperer is a vulnerability data and report aggregator. VulnWhisperer will pull all the reports
and create a file with a unique filename which is then fed into logstash. Logstash extracts data from the filename and tags all of the information inside the report (see logstash_vulnwhisp.conf file). Data is then shipped to elasticsearch to be indexed.
+[](https://travis-ci.org/austin-taylor/VulnWhisperer)
+[](http://choosealicense.com/licenses/mit/)
+
Requirements
-------------
####
-* ElasticStack
+* ElasticStack 5.x
* Python 2.7
* Vulnerability Scanner
* Optional: Message broker such as Kafka or RabbitMQ
Currently Supports
--------------
-####
-* Elasticsearch 2.x
-* Python 2.7
-* Nessus
-* Qualys - Web Application Scanner
+-----------------
+
+### Vulnerability Frameworks
+
+- [X] Nessus V6
+- [X] Qualys Web Applications
+- [ ] Qualys Vulnerability Management (_in progress_)
+- [ ] OpenVAS
+- [ ] Nexpose
+- [ ] Insight VM
+- [ ] NMAP
+- [ ] More to come
Setup
@@ -55,6 +64,10 @@ There are a few configuration steps to setting up VulnWhisperer:
* Import ElasticSearch Templates
* Import Kibana Dashboards
+example.ini file
+
+
+
Run
-----
To run, fill out the configuration file with your vulnerability scanner settings. Then you can execute from the command line.
@@ -65,6 +78,7 @@ or
vuln_whisperer -c configs/example.ini -s qualys
```
+
Next you'll need to import the visualizations into Kibana and setup your logstash config. A more thorough README is underway with setup instructions.
_For windows, you may need to type the full path of the binary in vulnWhisperer located in the bin directory._
@@ -73,6 +87,7 @@ Credit
------
Big thank you to Justin Henderson for his contributions to vulnWhisperer!
+
AS SEEN ON TV
-------------
-
\ No newline at end of file
+
diff --git a/_config.yml b/_config.yml
new file mode 100644
index 0000000..b849713
--- /dev/null
+++ b/_config.yml
@@ -0,0 +1 @@
+theme: jekyll-theme-leap-day
\ No newline at end of file
diff --git a/docs/source/config_example.png b/docs/source/config_example.png
new file mode 100644
index 0000000..faa7e65
Binary files /dev/null and b/docs/source/config_example.png differ
diff --git a/docs/source/running_vuln_whisperer.png b/docs/source/running_vuln_whisperer.png
new file mode 100644
index 0000000..4118a21
Binary files /dev/null and b/docs/source/running_vuln_whisperer.png differ
diff --git a/docs/source/vulnWhispererWebApplications.png b/docs/source/vulnWhispererWebApplications.png
new file mode 100644
index 0000000..acedea8
Binary files /dev/null and b/docs/source/vulnWhispererWebApplications.png differ
diff --git a/kibana/vuln_whisp_kibana/1000_vulnWhispererBaseVisuals.json b/kibana/vuln_whisp_kibana/1000_vulnWhispererBaseVisuals.json
index 485894a..6ea9304 100755
--- a/kibana/vuln_whisp_kibana/1000_vulnWhispererBaseVisuals.json
+++ b/kibana/vuln_whisp_kibana/1000_vulnWhispererBaseVisuals.json
@@ -144,7 +144,7 @@
"_type": "visualization",
"_source": {
"title": "VulnWhisperer - ScanName",
- "visState": "{\"title\":\"VulnWhisperer - ScanName\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMeticsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"plugin_name.keyword\",\"size\":20,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"Scan Name\"}}],\"listeners\":{}}",
+ "visState": "{\"title\":\"VulnWhisperer - ScanName\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMeticsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"scan_name.keyword\",\"size\":20,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"Scan Name\"}}],\"listeners\":{}}",
"uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}",
"description": "",
"version": 1,
diff --git a/vulnwhisp/frameworks/qualys.py b/vulnwhisp/frameworks/qualys.py
index 1285f33..d818d71 100644
--- a/vulnwhisp/frameworks/qualys.py
+++ b/vulnwhisp/frameworks/qualys.py
@@ -25,7 +25,6 @@ class qualysWhisperAPI(object):
DELETE_REPORT = '/delete/was/report/{report_id}'
GET_WEBAPP_DETAILS = '/get/was/webapp/{was_id}'
QPS_REST_3 = '/qps/rest/3.0'
-
REPORT_DETAILS = '/get/was/report/{report_id}'
REPORT_STATUS = '/status/was/report/{report_id}'
REPORT_CREATE = '/create/was/report'
diff --git a/vulnwhisp/vulnwhisp.py b/vulnwhisp/vulnwhisp.py
index 5cccf74..885e0bb 100755
--- a/vulnwhisp/vulnwhisp.py
+++ b/vulnwhisp/vulnwhisp.py
@@ -531,7 +531,8 @@ class vulnWhispererQualys(vulnWhispererBase):
vuln_ready = self.qualys_scan.process_data(path=self.write_path, file_id=str(generated_report_id))
- vuln_ready.to_csv(relative_path_name, index=False, header=True) # add when timestamp occured
+ vuln_ready['scan_name'] = scan_name
+ vuln_ready['scan_reference'] = scan_reference
vuln_ready.rename(columns=self.COLUMN_MAPPING, inplace=True)
record_meta = (