sagacity/classes/checklist.inc
Ryan Prather 55f086e8af
bug(software): Bug fix with software detection
Ubuntu.png - Add new Ubuntu checklist icon
Database_Baseline.zip - Update software detection tables
checklist.inc - Fix software icon detection for IE and SLES, and added detection for Ubuntu
software.inc - Fix bug adding extra spaces to software strings
parse_stig.php - Formatting and add save for when icon is updated
parse_stig_viewer.php - Add scan note when CKL file is missing or has empty <HOST_NAME> tag

Fix #87
2019-01-17 12:20:18 -05:00

628 lines
22 KiB
PHP

<?php
/**
* File: checklist.inc
* Author: Ryan Prather
* Purpose: Represents a checklist that links a PDI and software package
* Created: Sep 12, 2013
*
* Portions Copyright 2017-2019: CyberPerspectives, LLC, 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:
* - Sep 12, 2013 - File created
* - Mar 3, 2017 - Added method to find icon based on checklist name and cleaned up print_Option method
* - Mar 4, 2017 - Fixed type with Windows icon image (used .jpg instead of .png)
* - May 13, 2017 - Added WindowsFirewall.jpg image for checklist
* - May 19, 2017 - Fixed typo for WindowsFirewall
* - Aug 23, 2017 - JO, Expanded checklist icons
* - Nov 6, 2018 - Deleted duplicate BIND 9 checklist icon entry
*/
/**
* Represents a checklist that links a PDI and software package
*
* @author Ryan Prather
*
*/
class checklist
{
/**
* The ID of the checklist
*
* @var integer
*/
public $id = 0;
/**
* The checklist ID
*
* @var string
*/
public $checklist_id = '';
/**
* Array of software that this checklist is applicable on
*
* @var array
*/
public $sw = null;
/**
* The name of the checklist
*
* @var string
*/
public $name = '';
/**
* The checklist description
*
* @var string
*/
public $description = '';
/**
* The date of release
*
* @var DateTime
*/
public $date;
/**
* The file name that contains the checklist
*
* @var string
*/
public $file_name = '';
/**
* The checklist version
*
* @var integer
*/
public $ver = 0;
/**
* The checklist release
*
* @var string
*/
public $release = 0;
/**
* The checklist type (benchmark, manual)
*
* @var string
*/
public $type = '';
/**
* The file name of the icon to display
*
* @var string
*/
public $icon = '';
/**
* Classification of the checklist
*
* @var string
*/
public $classification = '';
/**
* Constructor
*
* @param integer $int_ID
* @param string $str_Checklist_ID
* @param string $str_Name
* @param string $str_Description
* @param DateTime $dt_Date
* @param string $str_File_Name
* @param integer $int_Ver
* @param string $str_Release
* @param string $str_Type
* @param string $str_Icon
*/
public function __construct($int_ID, $str_Checklist_ID, $str_Name, $str_Description, $dt_Date, $str_File_Name, $int_Ver, $str_Release, $str_Type, $str_Icon)
{
$this->id = $int_ID;
$this->checklist_id = $str_Checklist_ID;
$this->name = str_ireplace("STIG STIG", "STIG", str_ireplace("Secure Technical Implementation Guide", "STIG", $str_Name));
$this->description = $str_Description;
if (is_string($dt_Date)) {
$this->date = new DateTime($dt_Date);
}
else {
$this->date = $dt_Date;
}
$this->file_name = $str_File_Name;
$this->ver = $int_Ver;
$this->release = $str_Release;
$this->type = $str_Type;
if (!$str_Icon) {
$this->find_Icon();
}
else {
$this->icon = $str_Icon;
}
$this->sw = array();
}
/**
* Getter function for the ID
*
* @return integer
*/
public function get_ID()
{
return $this->id;
}
/**
* Getter function for the checklist ID
*
* @return string
*/
public function get_Checklist_ID()
{
return $this->checklist_id;
}
/**
* Getter function for the software ID
*
* @return integer
*/
public function get_SW()
{
return $this->sw;
}
/**
* Function to add a software object to the applicable software array
*
* @param software $sw_in
*/
public function add_SW($sw_in)
{
if (is_a($sw_in, "software")) {
$this->sw[$sw_in->get_ID()] = $sw_in;
}
elseif (is_array($sw_in)) {
$this->sw = array_merge($this->sw, $sw_in);
}
}
/**
* Getter function for the checklist name
*
* @return string
*/
public function get_Name()
{
return $this->name;
}
/**
* Gettr function for the checklist description
*
* @return string
*/
public function get_Description()
{
return $this->description;
}
/**
* Getter function for the release date
*
* @return DateTime
*/
public function get_Date()
{
return $this->date;
}
/**
* Getter function for the file name
*
* @return string
*/
public function get_File_Name()
{
return $this->file_name;
}
/**
* Getter function for the checklist version
*
* @return integer
*/
public function get_Version()
{
return $this->ver;
}
/**
* Getter function for the checklist release
*
* @return string
*/
public function get_Release()
{
return $this->release;
}
/**
* Getter function for the checklist type
*
* @return string
*/
public function get_type()
{
return $this->type;
}
/**
* Getter function for the checklist icon
*
* @return string
*/
public function get_Icon()
{
return $this->icon;
}
/**
* Getter function for the checklist classification
*
* @return string
*/
public function get_Classification()
{
return $this->classification;
}
/**
* Setter function for the checklist classification
*
* @param string $class_in
*/
public function set_Classification($class_in)
{
$this->classification = $class_in;
}
/**
* Function to determine the Checklist icon based on the name
*/
public function find_Icon()
{
if (!empty($this->name)) {
switch ($this->name) {
case (preg_match("/AIX/i", $this->name) ? true : false):
$this->icon = 'AIX.png';
break;
case (preg_match("/Application Security|Application Layer Gateway/i", $this->name) ? true : false):
$this->icon = 'Application Development.gif';
break;
case (preg_match("/Application Server/i", $this->name) ? true : false):
$this->icon = 'Application Server.jpg';
break;
case (preg_match("/Active Directory/i", $this->name) ? true : false):
$this->icon = 'Active Directory.png';
break;
case (preg_match("/Acrobat Reader|Adobe Acrobat/i", $this->name) ? true : false):
$this->icon = 'Adobe Reader.png';
break;
case (preg_match("/Coldfusion/i", $this->name) ? true : false):
$this->icon = 'Adobe Coldfusion.png';
break;
case (preg_match("/Apache/i", $this->name) ? true : false):
$this->icon = 'Apache Web.jpg';
break;
case (preg_match("/Apple OS X|Apple iOS/i", $this->name) ? true : false):
$this->icon = 'Apple.jpg';
break;
case (preg_match("/Blackberry|BB10|BBDS10/i", $this->name) ? true : false):
$this->icon = 'Blackberry.jpg';
break;
case (preg_match("/DNS/i", $this->name) ? true : false):
$this->icon = 'DNS.jpg';
break;
case (preg_match("/ESXi/i", $this->name) ? true : false):
$this->icon = 'VMware (ESXi).jpg';
break;
case (preg_match("/VMWare/i", $this->name) ? true : false);
$this->icon = 'VMware.jpg';
break;
case (preg_match("/Exchange/i", $this->name) ? true : false):
$this->icon = 'Microsoft Exchange.gif';
break;
case (preg_match("/Google Chrome/i", $this->name) ? true : false):
$this->icon = 'Google Chrome.jpg';
break;
case (preg_match("/HP\-UX/i", $this->name) ? true : false):
$this->icon = 'HPUX.jpg';
break;
case (preg_match("/IIS/i", $this->name) ? true : false):
$this->icon = 'Microsoft IIS.png';
break;
case (preg_match("/Intrusion Detection/i", $this->name) ? true : false):
$this->icon = 'Intrusion Detection System.jpg';
break;
case (preg_match("/Keyboard Video/i", $this->name) ? true : false):
$this->icon = 'KVM.jpg';
break;
case (preg_match("/Android/i", $this->name) ? true : false):
$this->icon = 'Android.gif';
break;
case (preg_match("/MS SQL|Microsoft SQL Server/i", $this->name) ? true : false):
$this->icon = 'MSSQL.png';
break;
case (preg_match("/Oracle Database/i", $this->name) ? true : false):
$this->icon = 'Oracle Database.png';
break;
case (preg_match("/Database|Postgres/i", $this->name) ? true : false):
$this->icon = 'Database.png';
break;
case (preg_match("/Java Runtime|JRE/i", $this->name) ? true : false):
$this->icon = 'Sun Java.jpg';
break;
case (preg_match("/Windows Firewall/i", $this->name) ? true : false):
$this->icon = 'WindowsFirewall.jpg';
break;
case (preg_match("/Windows Server \d{4}|Windows \d{4}/i", $this->name) ? true : false):
$this->icon = "WindowsServer.png";
break;
case (preg_match("/Windows ([\d]+|Vista|XP)/i", $this->name) ? true : false):
$this->icon = "Windows.png";
break;
case (preg_match("/Windows Defender/i", $this->name) ? true : false):
$this->icon = "Windows Defender.png";
break;
case (preg_match("/Web Server|Oracle HTTP|Oracle WebLogic/i", $this->name) ? true : false):
$this->icon = 'Web Server.png';
break;
case (preg_match("/Mcafee/i", $this->name) ? true : false):
$this->icon = 'Mcafee.jpg';
break;
case (preg_match("/Microsoft (Access|Excel|PowerPoint|Groove|InfoPath|Lync|Office System|OneNote|Outlook|Project|Publisher|Visio|Word) ([\d]+)/i", $this->name) ? true : false):
$this->icon = "Office.png";
break;
case (preg_match("/SharePoint/i", $this->name) ? true : false):
$this->icon = 'Microsoft Sharepoint.png';
break;
case (preg_match("/Dot Net|DotNet/i", $this->name) ? true : false):
$this->icon = 'Microsoft .NET.png';
break;
case (preg_match("/Internet Explorer|Microsoft IE/i", $this->name) ? true : false):
$this->icon = 'Internet Explorer.png';
break;
case (preg_match("/Windows Phone/i", $this->name) ? true : false):
$this->icon = 'Windows Phone.jpg';
break;
case (preg_match("/Mozilla Firefox/i", $this->name) ? true : false):
$this->icon = 'Firefox.png';
break;
case (preg_match("/Network Printers/i", $this->name) ? true : false):
$this->icon = 'Printer Scanner Fax.jpg';
break;
case (preg_match("/Firewall[^C]+Cisco/i", $this->name) ? true : false):
case (preg_match("/Firewall/i", $this->name) ? true : false):
$this->icon = 'Firewall.jpg';
break;
case (preg_match("/VPN/i", $this->name) ? true : false):
$this->icon = 'VPN.jpg';
break;
case (preg_match("/Switch([^C]+)Cisco/i", $this->name) ? true : false):
$this->icon = 'Cisco Switch.jpg';
break;
case (preg_match("/Switch/i", $this->name) ? true : false):
$this->icon = 'Network Switch.png';
break;
case (preg_match("/Router[^C]+Cisco/i", $this->name) ? true : false):
$this->icon = 'Cisco Router.jpg';
break;
case (preg_match("/Router/i", $this->name) ? true : false):
$this->icon = 'Network Router.png';
break;
case (preg_match("/WLAN|WMAN/i", $this->name) ? true : false):
$this->icon = 'Network Device.jpg';
break;
case (preg_match("/Network/i", $this->name) ? true : false):
$this->icon = 'Network Device.jpg';
break;
case (preg_match("/Skype/i", $this->name) ? true : false):
$this->icon = 'Skype.png';
break;
case (preg_match("/OneDrive/i", $this->name) ? true : false):
$this->icon = 'OneDrive.png';
break;
case (preg_match("/Red ?Hat/i", $this->name) ? true : false):
$this->icon = 'RedHat Linux.jpg';
break;
case (preg_match("/SUSE Linux|SLES/i", $this->name) ? true : false):
$this->icon = 'SUSE Linux.png';
break;
case (preg_match("/Solaris/i", $this->name) ? true : false):
$this->icon = 'Solaris Unix.png';
break;
case (preg_match("/Storage Area/i", $this->name) ? true : false):
$this->icon = 'Storage Area Network.gif';
break;
case (preg_match("/Ubuntu/i", $this->name) ? true : false):
$this->icon = 'Ubuntu.png';
break;
case (preg_match("/z\/OS/i", $this->name) ? true : false):
$this->icon = 'ZOS.jpg';
break;
// Added by Jeff Odegard, 23 Aug 17
case (preg_match("/Email Services Policy/i", $this->name) ? true : false):
$this->icon = 'exchange.png';
break;
case (preg_match("/L3/i", $this->name) ? true : false):
$this->icon = 'L3.png';
break;
case (preg_match("/Symantec/i", $this->name) ? true : false):
$this->icon = 'Symantec.jpg';
break;
case (preg_match("/Tanium/i", $this->name) ? true : false):
$this->icon = 'Tanium.jpeg';
break;
case (preg_match("/Voice Video Services/i", $this->name) ? true : false):
$this->icon = 'voip.jpg';
break;
case (preg_match("/Video Services|VTC/i", $this->name) ? true : false):
$this->icon = 'video-conferencing.png';
break;
case (preg_match("/Voice Video/i", $this->name) ? true : false):
$this->icon = 'voice-video.png';
break;
case (preg_match("/Sun Ray/i", $this->name) ? true : false):
$this->icon = 'sunray.jpg';
break;
case (preg_match("/VOIP/i", $this->name) ? true : false):
$this->icon = 'voip.jpg';
break;
case (preg_match("/SteelHead/i", $this->name) ? true : false):
$this->icon = 'SteelHead.png';
break;
case (preg_match("/SmartPhone/i", $this->name) ? true : false):
$this->icon = 'mobile.jpg';
break;
case (preg_match("/MAC OSX/i", $this->name) ? true : false):
$this->icon = 'mac-os-x.png';
break;
case (preg_match("/Good/i", $this->name) ? true : false):
$this->icon = 'good.png';
break;
case (preg_match("/Oracle Linux/i", $this->name) ? true : false):
$this->icon = 'oracle-linux.png';
break;
case (preg_match("/Juniper/i", $this->name) ? true : false):
$this->icon = 'juniper-networks.png';
break;
case (preg_match("/Jboss/i", $this->name) ? true : false):
$this->icon = 'jboss.png';
break;
case (preg_match("/Google/i", $this->name) ? true : false):
$this->icon = 'Google-Search-Appliance.jpg';
break;
case (preg_match("/Wireless/i", $this->name) ? true : false):
$this->icon = 'wireless.png';
break;
case (preg_match("/F5 BIG/i", $this->name) ? true : false):
$this->icon = 'f5-big-ip.jpg';
break;
case (preg_match("/Test and Development Zone/i", $this->name) ? true : false):
$this->icon = 'Enclave.jpg';
break;
case (preg_match("/Arista/i", $this->name) ? true : false):
$this->icon = 'Arista.png';
break;
case (preg_match("/CA API/i", $this->name) ? true : false):
$this->icon = 'CA TEchnologies.jpg';
break;
case (preg_match("/Cisco IOS/i", $this->name) ? true : false):
$this->icon = 'Cisco IOS.jpg';
break;
case (preg_match("/BIND 9/i", $this->name) ? true : false):
$this->icon = 'BIND DNS.jpg';
break;
case (preg_match("/MobileIron/i", $this->name) ? true : false):
$this->icon = 'mobileiron.png';
break;
case (preg_match("/Mobile Policy/i", $this->name) ? true : false):
$this->icon = 'mobile.jpg';
break;
case (preg_match("/Mobile Device/i", $this->name) ? true : false):
$this->icon = 'mobile-device.jpg';
break;
case (preg_match("/Remote Access/i", $this->name) ? true : false):
$this->icon = 'remote-access.gif';
break;
case (preg_match("/Remote Endpoint/i", $this->name) ? true : false):
$this->icon = 'Remote-Endpoint.jpg';
break;
case (preg_match("/Xenapp/i", $this->name) ? true : false):
$this->icon = 'xenapp.jpg';
break;
case (preg_match("/Removable Storage/i", $this->name) ? true : false):
$this->icon = 'storage.jpg';
break;
case (preg_match("/Traditional Security/i", $this->name) ? true : false):
$this->icon = 'security.jpg';
break;
case (preg_match("/IBM/i", $this->name) ? true : false):
$this->icon = 'IBM.jpg';
break;
case (preg_match("/Operating System/i", $this->name) ? true : false):
$this->icon = 'operating_system.png';
break;
case (preg_match("/HPE 3PAR/i", $this->name) ? true : false):
$this->icon = 'HP-3par-logo.jpg';
break;
case (preg_match("/MDM /i", $this->name) ? true : false):
$this->icon = 'mobile-device-management.png';
break;
case (preg_match("/Mainframe /i", $this->name) ? true : false):
$this->icon = 'mainframe.png';
break;
case (preg_match("/HBSS/i", $this->name) ? true : false):
$this->icon = 'HBSS.jpg';
break;
case (preg_match("/Akamai/i", $this->name) ? true : false):
$this->icon = 'Akamai.png';
break;
case (preg_match("/ArcGIS/i", $this->name) ? true : false):
$this->icon = 'ArcGIS.png';
break;
case (preg_match("/Bromium/i", $this->name) ? true : false):
$this->icon = 'Bromium.png';
break;
case (preg_match("/Forescout/i", $this->name) ? true : false):
$this->icon = 'Forescout.jpg';
break;
case (preg_match("/DB Networks|DBN\-6300/i", $this->name) ? true : false):
$this->icon = 'DB Networks.png';
break;
case (preg_match("/Windows PAW/i", $this->name) ? true : false):
$this->icon = 'Windows PAW.jpg';
break;
case (preg_match("/SecNet/i", $this->name) ? true : false):
$this->icon = 'Harris SecNet.jpg';
break;
case (preg_match("/Desktop App/i", $this->name) ? true : false):
$this->icon = 'Desktop Application.jpg';
break;
default:
$this->icon = 'Orphan.png';
}
}
}
/**
* Function to print out an option element
*
* @return string
*/
public function print_Option()
{
$type = strtolower($this->type) == 'iavm' ? strtoupper($this->type) : ucfirst($this->type);
return "<option value='{$this->id}' " .
"title='{$this->name} V{$this->ver}R{$this->release} ({$this->type})'>" .
"{$this->name} V{$this->ver}R{$this->release} ({$type})</option>";
}
}