initial commit of SVN release repo
This commit is contained in:
119
exec/parse_iavm_cve.php
Normal file
119
exec/parse_iavm_cve.php
Normal file
@ -0,0 +1,119 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* File: parse_iavm_cve.php
|
||||
* Author: Ryan Prather
|
||||
* Purpose: Script to parse iavm_to_cve(u).xml file received from DISA
|
||||
* Created: Jul 9, 2014
|
||||
*
|
||||
* Portions Copyright 2016: Cyber Perspectives, All rights reserved
|
||||
* Released under the Apache v2.0 License
|
||||
*
|
||||
* Portions Copyright (c) 2012-2015, Salient Federal Solutions
|
||||
* Portions Copyright (c) 2008-2011, Science Applications International Corporation (SAIC)
|
||||
* Released under Modified BSD License
|
||||
*
|
||||
* See license.txt for details
|
||||
*
|
||||
* Change Log:
|
||||
* - Jul 9, 2014 - File created
|
||||
* - Sep 1, 2016 - Copyright Updated and converted to constants
|
||||
*/
|
||||
$cmd = getopt("f:", array('debug::', 'help::'));
|
||||
|
||||
if (!isset($cmd['f']) || isset($cmd['help'])) {
|
||||
usage();
|
||||
exit;
|
||||
}
|
||||
|
||||
include_once 'config.inc';
|
||||
include_once "database.inc";
|
||||
include_once 'helper.inc';
|
||||
|
||||
chdir(DOC_ROOT . "/tmp");
|
||||
|
||||
set_time_limit(0);
|
||||
|
||||
$sys = new db();
|
||||
|
||||
$db = new mysqli(DB_SERVER, 'web', db::decrypt_pwd(), 'sagacity');
|
||||
if ($db->connect_errno) {
|
||||
die($db->connect_error);
|
||||
}
|
||||
|
||||
$doc = new DOMDocument();
|
||||
$doc->load($cmd['f']);
|
||||
|
||||
$items = getValue($doc, 'IAVM', null, true);
|
||||
|
||||
foreach ($items as $node) {
|
||||
$pdi_id = 0;
|
||||
|
||||
$vms = getValue($doc, 'S/@VMSKey', $node);
|
||||
$vms = preg_replace("/V0{1,6}/", "V-", $vms);
|
||||
$iavm_id = getValue($doc, 'S/@IAVM', $node);
|
||||
$title = getValue($doc, 'S/@Title', $node);
|
||||
$cat = substr_count(getValue($doc, 'S/@Severity', $node), 'I', 7);
|
||||
$rel_date = getValue($doc, 'S/@ReleaseDate', $node);
|
||||
$rel_dt = new DateTime($rel_date);
|
||||
|
||||
$cves = getValue($doc, 'CVEs/CVENumber', $node, true);
|
||||
|
||||
$stig = $sys->get_Stig($iavm_id);
|
||||
$iavm = $sys->get_IAVM($iavm_id);
|
||||
|
||||
print $iavm_id . PHP_EOL;
|
||||
|
||||
if (is_array($stig) && count($stig) && isset($stig[0]) && is_a($stig[0], 'stig')) {
|
||||
$stig = $stig[0];
|
||||
$pdi_id = $stig->get_PDI_ID();
|
||||
}
|
||||
else {
|
||||
if ($iavm) {
|
||||
$stig = new stig($iavm->get_PDI_ID(), $iavm_id, $title);
|
||||
$sys->add_Stig($stig);
|
||||
}
|
||||
else {
|
||||
$pdi = new pdi(null, $cat, $rel_dt->format("Y-m-d"));
|
||||
$pdi->set_Short_Title($title);
|
||||
$pdi->set_Group_Title($title);
|
||||
$pdi_id = $sys->save_PDI($pdi);
|
||||
|
||||
$stig = new stig($pdi_id, $iavm_id, $title);
|
||||
$sys->add_Stig($stig);
|
||||
}
|
||||
}
|
||||
|
||||
if ($iavm) {
|
||||
if ($cves->length) {
|
||||
foreach ($cves as $cve_node) {
|
||||
if (substr($cve_node->textContent, 0, 3) == 'CAN') {
|
||||
$cve = 'CVE' . substr($cve_node->textContent, 3);
|
||||
}
|
||||
else {
|
||||
$cve = $cve_node->textContent;
|
||||
}
|
||||
|
||||
if (!in_array($cve, $iavm->get_CVE())) {
|
||||
$iavm->add_CVE($cve);
|
||||
}
|
||||
}
|
||||
|
||||
$sys->save_IAVM($iavm);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function usage() {
|
||||
print <<<EOO
|
||||
Purpose: To import the cve-to-iavm(u).xml file retrieved from http://iasecontent.disa.mil/stigs/xml/iavm-to-cve%28u%29.xml
|
||||
|
||||
Usage: php parse_iavm_cve.php -f={file} [--debug] [--help]
|
||||
|
||||
-f={file} The file to import
|
||||
|
||||
--debug Debugging output
|
||||
--help This screen
|
||||
|
||||
EOO;
|
||||
}
|
Reference in New Issue
Block a user