Merge branch 'master' of github.com:austin-taylor/VulnWhisperer
This commit is contained in:
147
logstash/2000_qualys_web_scans.conf
Normal file
147
logstash/2000_qualys_web_scans.conf
Normal file
@ -0,0 +1,147 @@
|
|||||||
|
# Author: Austin Taylor and Justin Henderson
|
||||||
|
# Email: austin@hasecuritysolutions.com
|
||||||
|
# Last Update: 12/30/2017
|
||||||
|
# Version 0.3
|
||||||
|
# Description: Take in qualys web scan reports from vulnWhisperer and pumps into logstash
|
||||||
|
|
||||||
|
input {
|
||||||
|
file {
|
||||||
|
path => "/opt/VulnWhisperer/scans/**/*.json"
|
||||||
|
type => json
|
||||||
|
codec => json
|
||||||
|
start_position => "beginning"
|
||||||
|
tags => [ "qualys_web", "qualys" ]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
filter {
|
||||||
|
if "qualys_web" in [tags] {
|
||||||
|
mutate {
|
||||||
|
replace => [ "message", "%{message}" ]
|
||||||
|
#gsub => [
|
||||||
|
# "message", "\|\|\|", " ",
|
||||||
|
# "message", "\t\t", " ",
|
||||||
|
# "message", " ", " ",
|
||||||
|
# "message", " ", " ",
|
||||||
|
# "message", " ", " ",
|
||||||
|
# "message", "nan", " ",
|
||||||
|
# "message",'\n',''
|
||||||
|
#]
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
grok {
|
||||||
|
match => { "path" => "qualys_web_%{INT:app_id}_%{INT:last_updated}.json$" }
|
||||||
|
tag_on_failure => []
|
||||||
|
}
|
||||||
|
|
||||||
|
mutate {
|
||||||
|
add_field => { "asset" => "%{web_application_name}" }
|
||||||
|
add_field => { "risk_score" => "%{cvss}" }
|
||||||
|
}
|
||||||
|
|
||||||
|
if [risk] == "1" {
|
||||||
|
mutate { add_field => { "risk_number" => 0 }}
|
||||||
|
mutate { replace => { "risk" => "info" }}
|
||||||
|
}
|
||||||
|
if [risk] == "2" {
|
||||||
|
mutate { add_field => { "risk_number" => 1 }}
|
||||||
|
mutate { replace => { "risk" => "low" }}
|
||||||
|
}
|
||||||
|
if [risk] == "3" {
|
||||||
|
mutate { add_field => { "risk_number" => 2 }}
|
||||||
|
mutate { replace => { "risk" => "medium" }}
|
||||||
|
}
|
||||||
|
if [risk] == "4" {
|
||||||
|
mutate { add_field => { "risk_number" => 3 }}
|
||||||
|
mutate { replace => { "risk" => "high" }}
|
||||||
|
}
|
||||||
|
if [risk] == "5" {
|
||||||
|
mutate { add_field => { "risk_number" => 4 }}
|
||||||
|
mutate { replace => { "risk" => "critical" }}
|
||||||
|
}
|
||||||
|
|
||||||
|
mutate {
|
||||||
|
remove_field => "message"
|
||||||
|
}
|
||||||
|
|
||||||
|
if [first_time_detected] {
|
||||||
|
date {
|
||||||
|
match => [ "first_time_detected", "dd MMM yyyy HH:mma 'GMT'ZZ", "dd MMM yyyy HH:mma 'GMT'" ]
|
||||||
|
target => "first_time_detected"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if [first_time_tested] {
|
||||||
|
date {
|
||||||
|
match => [ "first_time_tested", "dd MMM yyyy HH:mma 'GMT'ZZ", "dd MMM yyyy HH:mma 'GMT'" ]
|
||||||
|
target => "first_time_tested"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if [last_time_detected] {
|
||||||
|
date {
|
||||||
|
match => [ "last_time_detected", "dd MMM yyyy HH:mma 'GMT'ZZ", "dd MMM yyyy HH:mma 'GMT'" ]
|
||||||
|
target => "last_time_detected"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if [last_time_tested] {
|
||||||
|
date {
|
||||||
|
match => [ "last_time_tested", "dd MMM yyyy HH:mma 'GMT'ZZ", "dd MMM yyyy HH:mma 'GMT'" ]
|
||||||
|
target => "last_time_tested"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
date {
|
||||||
|
match => [ "last_updated", "UNIX" ]
|
||||||
|
target => "@timestamp"
|
||||||
|
remove_field => "last_updated"
|
||||||
|
}
|
||||||
|
mutate {
|
||||||
|
convert => { "plugin_id" => "integer"}
|
||||||
|
convert => { "id" => "integer"}
|
||||||
|
convert => { "risk_number" => "integer"}
|
||||||
|
convert => { "risk_score" => "float"}
|
||||||
|
convert => { "total_times_detected" => "integer"}
|
||||||
|
convert => { "cvss_temporal" => "float"}
|
||||||
|
convert => { "cvss" => "float"}
|
||||||
|
}
|
||||||
|
if [risk_score] == 0 {
|
||||||
|
mutate {
|
||||||
|
add_field => { "risk_score_name" => "info" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if [risk_score] > 0 and [risk_score] < 3 {
|
||||||
|
mutate {
|
||||||
|
add_field => { "risk_score_name" => "low" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if [risk_score] >= 3 and [risk_score] < 6 {
|
||||||
|
mutate {
|
||||||
|
add_field => { "risk_score_name" => "medium" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if [risk_score] >=6 and [risk_score] < 9 {
|
||||||
|
mutate {
|
||||||
|
add_field => { "risk_score_name" => "high" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if [risk_score] >= 9 {
|
||||||
|
mutate {
|
||||||
|
add_field => { "risk_score_name" => "critical" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if [asset] =~ "\.yourdomain\.(com|net)$" {
|
||||||
|
mutate {
|
||||||
|
add_tag => [ "critical_asset" ]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
output {
|
||||||
|
if "qualys" in [tags] {
|
||||||
|
stdout { codec => rubydebug }
|
||||||
|
elasticsearch {
|
||||||
|
hosts => [ "localhost:9200" ]
|
||||||
|
index => "logstash-vulnwhisperer-%{+YYYY.MM}"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
2
setup.py
2
setup.py
@ -4,7 +4,7 @@ from setuptools import setup, find_packages
|
|||||||
|
|
||||||
setup(
|
setup(
|
||||||
name='VulnWhisperer',
|
name='VulnWhisperer',
|
||||||
version='1.0.1',
|
version='1.2.0',
|
||||||
packages=find_packages(),
|
packages=find_packages(),
|
||||||
url='https://github.com/austin-taylor/vulnwhisperer',
|
url='https://github.com/austin-taylor/vulnwhisperer',
|
||||||
license="""MIT License
|
license="""MIT License
|
||||||
|
@ -589,7 +589,6 @@ class vulnWhispererQualys(vulnWhispererBase):
|
|||||||
for app in self.scans_to_process.iterrows():
|
for app in self.scans_to_process.iterrows():
|
||||||
counter += 1
|
counter += 1
|
||||||
r = app[1]
|
r = app[1]
|
||||||
|
|
||||||
print('Processing %s/%s' % (counter, len(self.scans_to_process)))
|
print('Processing %s/%s' % (counter, len(self.scans_to_process)))
|
||||||
self.whisper_reports(report_id=r['id'],
|
self.whisper_reports(report_id=r['id'],
|
||||||
launched_date=r['launchedDate'],
|
launched_date=r['launchedDate'],
|
||||||
|
Reference in New Issue
Block a user