Qualysapi fix (#146)

* moved qualysapi to branch master-update

* fixing bug of qualys scan without vulnerabilities: vulnWhispererQualysVuln[1361] ERROR Could not process scan/1549159480.84792: 'severity'

* change to fixed qualysapi branch

* fix bug and changed to qualysapi fork master branch

* updated submodule to master branch
This commit is contained in:
Quim Montal
2019-02-06 17:00:43 +01:00
committed by GitHub
parent 14b71a25b8
commit 0ea144bf87
4 changed files with 33 additions and 27 deletions

2
deps/qualysapi vendored

View File

@ -2,8 +2,8 @@ pandas==0.20.3
setuptools==40.4.3 setuptools==40.4.3
pytz==2017.2 pytz==2017.2
Requests==2.18.3 Requests==2.18.3
#qualysapi==5.0.4
lxml==4.1.1 lxml==4.1.1
future-fstrings
bs4 bs4
jira jira
bottle bottle

View File

@ -108,12 +108,15 @@ class qualysVulnScan:
def process_data(self, scan_id=None): def process_data(self, scan_id=None):
"""Downloads a file from Qualys and normalizes it""" """Downloads a file from Qualys and normalizes it"""
self.logger.info('Downloading scan ID: {}'.format(scan_id)) self.logger.info('Downloading scan ID: {}'.format(scan_id))
scan_report = self.qw.get_scan_details(scan_id=scan_id) scan_report = self.qw.get_scan_details(scan_id=scan_id)
keep_columns = ['category', 'cve_id', 'cvss3_base', 'cvss3_temporal', 'cvss_base', 'cvss_temporal', 'dns', 'exploitability', 'fqdn', 'impact', 'ip', 'ip_status', 'netbios', 'os', 'pci_vuln', 'port', 'protocol', 'qid', 'results', 'severity', 'solution', 'ssl', 'threat', 'title', 'type', 'vendor_reference'] if not scan_report.empty:
scan_report = scan_report.filter(keep_columns) keep_columns = ['category', 'cve_id', 'cvss3_base', 'cvss3_temporal', 'cvss_base', 'cvss_temporal', 'dns', 'exploitability', 'fqdn', 'impact', 'ip', 'ip_status', 'netbios', 'os', 'pci_vuln', 'port', 'protocol', 'qid', 'results', 'severity', 'solution', 'ssl', 'threat', 'title', 'type', 'vendor_reference']
scan_report['severity'] = scan_report['severity'].astype(int).astype(str) scan_report = scan_report.filter(keep_columns)
scan_report['qid'] = scan_report['qid'].astype(int).astype(str) scan_report['severity'] = scan_report['severity'].astype(int).astype(str)
scan_report['qid'] = scan_report['qid'].astype(int).astype(str)
else:
self.logger.warn('Scan ID {} has no vulnerabilities, skipping.'.format(scan_id))
return scan_report
return scan_report return scan_report

View File

@ -839,29 +839,32 @@ class vulnWhispererQualysVuln(vulnWhispererBase):
else: else:
self.logger.info('Processing report ID: {}'.format(report_id)) self.logger.info('Processing report ID: {}'.format(report_id))
vuln_ready = self.qualys_scan.process_data(scan_id=report_id) vuln_ready = self.qualys_scan.process_data(scan_id=report_id)
vuln_ready['scan_name'] = scan_name if not vuln_ready.empty:
vuln_ready['scan_reference'] = report_id vuln_ready['scan_name'] = scan_name
vuln_ready.rename(columns=self.COLUMN_MAPPING, inplace=True) vuln_ready['scan_reference'] = report_id
vuln_ready.rename(columns=self.COLUMN_MAPPING, inplace=True)
record_meta = ( record_meta = (
scan_name, scan_name,
scan_reference, scan_reference,
launched_date, launched_date,
report_name, report_name,
time.time(), time.time(),
vuln_ready.shape[0], vuln_ready.shape[0],
self.CONFIG_SECTION, self.CONFIG_SECTION,
report_id, report_id,
1, 1,
) )
self.record_insert(record_meta) self.record_insert(record_meta)
if output_format == 'json': if output_format == 'json':
with open(relative_path_name, 'w') as f: with open(relative_path_name, 'w') as f:
f.write(vuln_ready.to_json(orient='records', lines=True)) f.write(vuln_ready.to_json(orient='records', lines=True))
f.write('\n') f.write('\n')
self.logger.info('Report written to {}'.format(report_name)) self.logger.info('Report written to {}'.format(report_name))
else:
return False
except Exception as e: except Exception as e:
self.logger.error('Could not process {}: {}'.format(report_id, str(e))) self.logger.error('Could not process {}: {}'.format(report_id, str(e)))