Sophos – Datenbank exportieren und in MySQL einlesen

beitrag sophos datenbank exportieren 11

Irgendwann kommt die Zeit in der man erkennt, dass man der Internetcommunity erworbenes Wissen beisteuern sollte. Deshalb möchte ich euch meinen Weg zeigen wie man die Sophos Datenbank exportieren und zum Beispiel in Mysql einlesen kann. Generell ist es nicht notwendig die Daten in eine MySQL Datenbank zu exportieren, wenn man sich mit dem MS SQL-Server auskennt. Doch wenn die eigene Anwendung mit den Daten aus dem SOPHOS System gefüttert werden will, wäre es über MySQL eine Möglichkeit.

Inhalt:

Folgend findet ihr ein paar Powershellzeilen um die SOPHOS Datenbank in eine CSV zu exportieren. Die CSV könnt ihr dann recht simpel weiterverarbeiten. Ich persönlich importiere die täglich in meine MySQL Datenbank um die Daten dort aktuell zu halten und meine benötigten Reports tagaktuell zu generieren.

Zum Ablauf, das Script generiert den SQL-Befehl und speichert den in einer Datei ab, die im darauffolgenden Schritt an die sqlcmd.exe übergeben wird.

Die erstellten CSV-Dateien werden dann per 7Zip komprimiert und anschließend an einen Server per SMB kopiert.

start-process -FilePath ‘C:\Program Files\7-Zip\7z.exe’ -ArgumentList a -mx=9 -mmt=off c:\temp\SOPHOS_DB_export.7z c:\temp\SOPHOS_*.csv -NoNewWindow -Wait 

USB-Geräte-Ausnahmen aus der SOPHOS-Datenbank auslesen und in CSV exportieren

Um die eingetragene USB-Geräte-ausnahmen auszulesen, muss die Microsoft SQL Datenbank der „dbo.ExemptedDevices“ der SOPHOS Instanz angezapft werden. In meinem Fall hieß die Datenbank „SOPHOS550“. Der Instanzname kann aber variieren, je nach dem mit welcher Versionsnummer ihr den Sophos Server damals installiert habt bzw. er nun geupdated wurde!

$sql_commands="use SOPHOS550
SELECT ID,DeviceTypeID,Comment,DeviceDescription,DeviceModel,DeviceInstance,DefaultExemptionLevel FROM dbo.ExemptedDevices ORDER BY ID DESC 
go"

out-file -filepath $sql_commandfile -inputobject $sql_commands

#fetch sql data, create csv_file
start-process -FilePath sqlcmd.exe -ArgumentList "-E -S .\sophos -i temp_sql_cmd.sql -s`";`" -w 700 -W -o $resultfile_csv1" -NoNewWindow -Wait 

Viren- und Spyware Meldungen aus der SOPHOS-Datenbank auslesen und in CSV exportieren

Auch die Meldungen zu aktuellen Viren und Spywaremeldungen können direkt aus der Datenbank ausgelesen werden. Dazu einfach die Tabelle „dbo.Threats“ anzapfen und über einen JOIN mit dbo.ComputersandDeletedComputers verknüpfen um die dazugehörigen Computernamen zu erhalten.

$sql_commands="use SOPHOS550 
Select ComputerID, Name, DomainName, Description, IPAddressText, ThreatType, ThreatName, FullFilePath, FirstDetectedAt, ActionSubmittedAt, CleanUpable, Outstanding,Status,Managed,Connected, SAVonAccess, LastScanDateTime, LastLoggedOnUser,LastScanName 
FROM dbo.Threats inner join dbo.ComputersandDeletedComputers on Threats.ComputerID = ComputersandDeletedComputers.ID 
go"

out-file -filepath $sql_commandfile -inputobject $sql_commands

#fetch sql data, create csv_file
start-process -FilePath sqlcmd.exe -ArgumentList "-E -S .\sophos -i temp_sql_cmd.sql -s`";`" -w 700 -W -o $resultfile_csv2" -NoNewWindow -Wait

SOPHOS Audit-Daten exportieren

Wer in seinem SOPHOS Server „AUDIT“ aktiviert hat um die Aktivitäten der SOPHOS-Administratoren und deren Konfiguration in der Sophos Enterprise Console zu überwachen, kann auch hier die Datenbank bequem exportieren.

$sql_commands="use SOPHOS550 
SELECT [EventId],[Timestamp],[Action],[TargetType]
      ,[TargetSubType],[TargetName]
      ,[ParameterType],[ParameterValue],[Result],[UserName]
      ,[HostName],[HostIPAddress],[ActionId],[TargetTypeId]
      ,[TargetSubTypeId],[ParameterTypeId],[SubEstateId],[ResultId],[UserSid]
  FROM [SophosSecurity].[Reports].[vAuditEventsAll]
go"

out-file -filepath $sql_commandfile -inputobject $sql_commands

#fetch sql data, create csv_file
start-process -FilePath sqlcmd.exe -ArgumentList "-E -S .\sophos -i temp_sql_cmd.sql -s`"!`" -w 700 -W -o $resultfile_csv3" -NoNewWindow -Wait

SOPHOS Client/Computer/Agent Daten in CSV exportieren

Noch viel nützlicher finde ich den Export der Sophos Agentdaten. Dazu muss die MS SQL-Tabelle „[dbo].[ComputersAndDeletedComputers]“ der Sophos Instanz abgefragt werden.

$sql_commands="use SOPHOS550 
SELECT  [ID],[Name],[DomainName],[Description]
,[Managed],[Connected],[SAVOnAccess],[PackageID]
,[LastScanDateTime],[InstallPending],[InstallInProgress]
,[IPAddress],[IPAddressText],[ServicePack],[QuarantineCount],[PrimaryCIDLoc]
,[LastLoggedOnUser],[InstallFailureReason],[LastScanName],[InstallTime]
,[LastMessageTime],[Deleted],[DNSName],[AppControlOnAccess],[HipsRuleVersion],[HipsConfigVersion],[PolicyManagementType]
,[DataControlIsActive],[DeviceControlIsActive],[TamperProtectionIsActive],[InsertedAt],[IdentityTag]
FROM [dbo].[ComputersAndDeletedComputers]
go"

out-file -filepath $sql_commandfile -inputobject $sql_commands

#fetch sql data, create csv_file
start-process -FilePath sqlcmd.exe -ArgumentList "-E -S .\sophos -i temp_sql_cmd.sql -s`";`" -w 700 -W -o $resultfile_csv4" -NoNewWindow -Wait 

Wer die Daten auch in eine MySQL oder MARIA Datenbank imoprtieren möchte, kann sich gerne dem folgenden SQL-Zeilen zum Anlegen der benötigten Tabellen bedienen.

das komplette Powershell-Script zum Auslesen der SOPHOS Datenbank

# PS-Script to export SOPHOS exempted usb-devices
#
# Requirements:
# - powershell 2.0
# - installed 7-Zip / $7zip_proc="C:\Program Files\7-Zip\7z.exe"

####
#### Configuration
####

$location_name=$env:USERDOMAIN
$scriptname="SOPHOS_exempted_USB-Devices"
$transfer_path="\\my_fileserver.local\sophos"
$debug=0

$sql_SophosDB="SOPHOS550"
$sql_commandfile="temp_sql_cmd.sql"
$sql_commands="empty"


$7zip_proc="C:\Program Files\7-Zip\7z.exe"
$curDate = Get-Date -format "yyyy-dd-MM_HHmm"
$7z_transferfile="c:\temp\"+$scriptname+"_"+$env:COMPUTERNAME+"_"+$curDate+".7z"

$resultfile_csv1="c:\temp\SOPHOS_devc_exemptionlist-"+$location_name+".csv"
$resultfile_csv2="c:\temp\SOPHOS_alerts-"+$location_name+".csv"
$resultfile_csv3="c:\temp\SOPHOS_audit-"+$location_name+".csv"
$resultfile_csv4="c:\temp\SOPHOS_clients-"+$location_name+".csv"

####
#### export exempted devices
####
$sql_commands="use "+$sql_SophosDB+"
SELECT ID,DeviceTypeID,Comment,DeviceDescription,DeviceModel,DeviceInstance,DefaultExemptionLevel FROM dbo.ExemptedDevices ORDER BY ID DESC
go"
out-file -filepath $sql_commandfile -inputobject $sql_commands

#fetch sql data, create csv_file
start-process -FilePath sqlcmd.exe -ArgumentList "-E -S .\sophos -i temp_sql_cmd.sql -s`";`" -w 700 -W -o $resultfile_csv1" -NoNewWindow -Wait



####
#### export Virus and Spyware alerts
####
$sql_commands="use "+$sql_SophosDB+"
Select ComputerID, Name, DomainName, Description, IPAddressText, ThreatType, ThreatName, FullFilePath, FirstDetectedAt, ActionSubmittedAt, CleanUpable, Outstanding,Status,Managed,Connected, SAVonAccess, LastScanDateTime, LastLoggedOnUser,LastScanName 
FROM dbo.Threats inner join dbo.ComputersandDeletedComputers on Threats.ComputerID = ComputersandDeletedComputers.ID 
go"
out-file -filepath $sql_commandfile -inputobject $sql_commands

#fetch sql data, create csv_file
start-process -FilePath sqlcmd.exe -ArgumentList "-E -S .\sophos -i temp_sql_cmd.sql -s`";`" -w 700 -W -o $resultfile_csv2" -NoNewWindow -Wait



####
#### export audit data
####
$sql_commands="use "+$sql_SophosDB+"
SELECT [EventId],[Timestamp],[Action],[TargetType]
      ,[TargetSubType],[TargetName]
      ,[ParameterType],[ParameterValue],[Result],[UserName]
      ,[HostName],[HostIPAddress],[ActionId],[TargetTypeId]
      ,[TargetSubTypeId],[ParameterTypeId],[SubEstateId],[ResultId],[UserSid]
  FROM [SophosSecurity].[Reports].[vAuditEventsAll]
go"
out-file -filepath $sql_commandfile -inputobject $sql_commands

#fetch sql data, create csv_file
start-process -FilePath sqlcmd.exe -ArgumentList "-E -S .\sophos -i temp_sql_cmd.sql -s`"!`" -w 700 -W -o $resultfile_csv3" -NoNewWindow -Wait

####
#### export clients data
####
$sql_commands="use "+$sql_SophosDB+"
SELECT  [ID],[Name],[DomainName],[Description]
,[Managed],[Connected],[SAVOnAccess],[PackageID]
,[LastScanDateTime],[InstallPending],[InstallInProgress]
,[IPAddress],[IPAddressText],[ServicePack],[QuarantineCount],[PrimaryCIDLoc]
,[LastLoggedOnUser],[InstallFailureReason],[LastScanName],[InstallTime]
,[LastMessageTime],[Deleted],[DNSName],[AppControlOnAccess],[HipsRuleVersion],[HipsConfigVersion],[PolicyManagementType]
,[DataControlIsActive],[DeviceControlIsActive],[TamperProtectionIsActive],[InsertedAt],[IdentityTag]
FROM [dbo].[ComputersAndDeletedComputers]
go"
out-file -filepath $sql_commandfile -inputobject $sql_commands

#fetch sql data, create csv_file
start-process -FilePath sqlcmd.exe -ArgumentList "-E -S .\sophos -i temp_sql_cmd.sql -s`";`" -w 700 -W -o $resultfile_csv4" -NoNewWindow -Wait

### configure 7Zip
    if(Test-Path $7zip_proc){ 
        

        $7zip_arg="a -mx=9 -mmt=off "+$7z_transferfile+" c:\temp\SOPHOS_*.csv"
        $7zip_error_file=$auditfile_path+"\7zip_error.txt"
        $7zip_output_file=$auditfile_path+"\7zip_output.txt"

        write-host "- 7zip: create archive "$7z_transferfile"..."
        write-host "- 7zip: "$7zip_proc" "$7zip_arg
        start-process -FilePath $7zip_proc -ArgumentList $7zip_arg -RedirectStandardError $7zip_error_file -RedirectStandardOutput $7zip_output_file -NoNewWindow -Wait

    }else{
        write-host "- ERROR: 7zip was not found"
    }


    ### transfer data to reporting-server
    if(Test-Path $7z_transferfile){
        write-host "- copy "$7z_transferfile" to "$transfer_path
        copy-Item -Path $7z_transferfile -Destination $transfer_path

    }else{
        write-host "- ERROR: "$7z_transferfile" not copied!"

    }

#cleanup
if($debug -eq 0){
    if ((Test-Path $resultfile_csv1) ) {Remove-Item($resultfile_csv1)}
    if ((Test-Path $resultfile_csv2) ) {Remove-Item($resultfile_csv2)}
    if ((Test-Path $resultfile_csv3) ) {Remove-Item($resultfile_csv3)}
    if ((Test-Path $resultfile_csv4) ) {Remove-Item($resultfile_csv4)}
    if ((Test-Path $7z_transferfile) ) {Remove-Item($7z_transferfile)}    
    if ((Test-Path $sql_commandfile) ) {Remove-Item($sql_commandfile)}
}

Datenbank-Dump für MySQL und Maria DB

Folgend eine Dumpfile falls ihr die Sophos-Daten in eure eigene Datenbank einlesen und auswerten wollt, was durchaus Sinn macht.

-- phpMyAdmin SQL Dump
-- version 4.6.5.2

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

-- --------------------------------------------------------

--
-- Table structure for table `sophos_alerts`
--

CREATE TABLE `sophos_alerts` (
  `ID` int(10) NOT NULL,
  `fs_location_id` int(5) NOT NULL,
  `ComputerID` int(10) NOT NULL,
  `ComputerName` varchar(50) NOT NULL,
  `DomainName` varchar(30) NOT NULL,
  `ComputerDescription` text NOT NULL,
  `IPAddress` varchar(16) NOT NULL,
  `ThreatType` int(2) NOT NULL,
  `ThreatName` varchar(50) NOT NULL,
  `FullFilePath` text NOT NULL,
  `FirstDetectedAt` datetime DEFAULT '0000-00-00 00:00:00',
  `ActionSubmittedAt` datetime DEFAULT '0000-00-00 00:00:00',
  `CleanUpable` int(1) NOT NULL,
  `Outstanding` int(1) NOT NULL,
  `Status` int(3) NOT NULL,
  `Managed` int(1) NOT NULL,
  `Connected` int(1) NOT NULL,
  `SAVonAccess` int(11) NOT NULL,
  `LastScanDateTime` datetime DEFAULT '0000-00-00 00:00:00',
  `LastLoggedOnUser` varchar(50) NOT NULL,
  `LastScanName` varchar(50) NOT NULL,
  `CreateDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `ModifiedDate` datetime DEFAULT '0000-00-00 00:00:00'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Dumping data for table `sophos_alerts`
--

INSERT INTO `sophos_alerts` (`ID`, `fs_location_id`, `ComputerID`, `ComputerName`, `DomainName`, `ComputerDescription`, `IPAddress`, `ThreatType`, `ThreatName`, `FullFilePath`, `FirstDetectedAt`, `ActionSubmittedAt`, `CleanUpable`, `Outstanding`, `Status`, `Managed`, `Connected`, `SAVonAccess`, `LastScanDateTime`, `LastLoggedOnUser`, `LastScanName`, `CreateDate`, `ModifiedDate`) VALUES
(1, 1, 4105, 'fileserver', 'Standort1', '', '192.168.16.80', 1, 'Mal/Generic-S', '//./GLOBALROOT/Device/HarddiskVolumeShadowCopy261/shares/Hausmeister/09 SOFTWARE f?r PC/Installations-CD Akkumaster C5/interface/examples/logger/logger.exe', '2016-10-25 00:43:23', '1900-01-01 00:00:00', 0, 1, 200, 1, 1, 1, '2016-09-07 16:37:31', 'administrator', 'Scan my computer\r', '2017-01-24 11:04:46', '0000-00-00 00:00:00');


ALTER TABLE `sophos_alerts` ADD PRIMARY KEY (`ID`);

--
-- AUTO_INCREMENT for table `sophos_alerts`
--
ALTER TABLE `sophos_alerts`
  MODIFY `ID` int(10) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1874;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;


--
-- Table structure for table `sophos_exemptions`
--

CREATE TABLE `sophos_exemptions` (
  `ID` int(50) NOT NULL,
  `s_ID` int(10) DEFAULT NULL,
  `s_Comment` text,
  `s_DeviceDescription` text,
  `s_DeviceModel` varchar(200) DEFAULT NULL,
  `s_DeviceInstance` varchar(200) DEFAULT NULL,
  `s_DefaultExemptionLevel` int(2) DEFAULT NULL,
  `fs_location_id` int(5) DEFAULT NULL,
  `CreateDate` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `LastFoundDate` datetime DEFAULT '0000-00-00 00:00:00',
  `approvalstate` int(1) DEFAULT '0' COMMENT '0=unkown, 1=appr, 2=not_appr.',
  `approvalstate_userid` int(10) DEFAULT NULL,
  `approvalstate_date` datetime DEFAULT NULL,
  `approvalstate_comment` text,
  `approval_document` varchar(200) DEFAULT NULL,
  `request_userid` int(5) NOT NULL DEFAULT '0',
  `request_date` datetime DEFAULT NULL,
  `request_comment` text,
  `request_id` int(50) NOT NULL DEFAULT '0',
  `request_assigned` int(1) NOT NULL DEFAULT '0'
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;

--
-- Dumping data for table `sophos_exemptions`
--

INSERT INTO `sophos_exemptions` (`ID`, `s_ID`, `s_Comment`, `s_DeviceDescription`, `s_DeviceModel`, `s_DeviceInstance`, `s_DefaultExemptionLevel`, `fs_location_id`, `CreateDate`, `LastFoundDate`, `approvalstate`, `approvalstate_userid`, `approvalstate_date`, `approvalstate_comment`, `approval_document`, `request_userid`, `request_date`, `request_comment`, `request_id`, `request_assigned`) VALUES
(1, 1, '', 'WD My Passport 0821 USB Device', 'USBSTORDiskWD______My_Passport_08201012', '', NULL, 4, '2017-01-23 10:06:08', '2019-03-05 09:56:02', 0, NULL, NULL, NULL, NULL, 0, '0000-00-00 00:00:00', '', 0, 0);



ALTER TABLE `sophos_exemptions`  ADD PRIMARY KEY (`ID`);
ALTER TABLE `sophos_exemptions` ADD FULLTEXT KEY `FULLTEXT` (`s_Comment`,`s_DeviceDescription`,`approvalstate_comment`,`request_comment`);
ALTER TABLE `sophos_exemptions` ADD FULLTEXT KEY `FULLTEXT2` (`request_comment`,`approvalstate_comment`);

--
-- AUTO_INCREMENT for table `sophos_exemptions`
--
ALTER TABLE `sophos_exemptions` MODIFY `ID` int(50) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1;

weitere Beiträge zum Thema SOPHOS Endpoint Security