Providers/Modules/Plugins/Antimalware/plugin/collectdefenderinfo.rb (75 lines of code) (raw):
require "rexml/document"
require "cgi"
require 'digest'
require 'json'
require 'date'
require 'time'
require 'logger'
require_relative 'antimalwarecommon'
class Defender
def self.detect()
begin
if !File.file?('/usr/bin/mdatp')
return false
end
return true
rescue => e
return false
end
end
def self.getprotectionstatus()
ret = {}
defenderName = "Defender Endpoint Protection for Linux"
defenderVersion = "NA"
engineVersion = "NA"
realtimeprotection = "NA"
signatureVersion = "NA"
protectionStatusDetails = ""
protectionStatusDetailsString = ""
error = ""
($ProtectionStatusRank, $ProtectionStatus) = AntimalwareCommon::UnknownProtectionCode
($ThreatStatusRank, $ThreatStatus) = AntimalwareCommon::UnknownThreatCode
begin
json_data = `/usr/bin/mdatp health --output json 2>&1`
if !$?.success? || json_data.nil? || json_data.empty?
error += "fail to run mdatp health cmd; "
else
defenderhealth = JSON.parse(json_data)
signatureStatus = defenderhealth["definitionsStatus"]["$type"]
if signatureStatus != "upToDate"
($ProtectionStatusRank, $ProtectionStatus) = AntimalwareCommon::SignaturesOutOfDateProtectionCode
protectionStatusDetailsString += "Signatures out of date; "
end
signatureVersion = defenderhealth["definitionsVersion"]
defenderVersion = defenderhealth["appVersion"]
realtimeprotection = defenderhealth["realTimeProtectionEnabled"]["value"]
if (realtimeprotection == "NA" || !realtimeprotection)
($ProtectionStatusRank, $ProtectionStatus) = AntimalwareCommon::NoRealTimeProtectionProtectionCode
protectionStatusDetailsString += "Real-time protection disabled; "
end
if protectionStatusDetailsString.empty?
($ProtectionStatusRank, $ProtectionStatus) = AntimalwareCommon::RealTimeProtectionCode
protectionStatusDetailsString += "MDATP is running healthy."
end
protectionStatusDetails = protectionStatusDetailsString
end
rescue => e
error += "Getting exception when trying to find MDATP health info: " + e.message + " " + e.backtrace.inspect
ret["Error"] = error
end
ret["ProtectionStatusRank"] = $ProtectionStatusRank
ret["ProtectionStatus"] = $ProtectionStatus
ret["ProtectionStatusDetails"] = protectionStatusDetails
ret["DetectionId"] = SecureRandom.uuid
ret["Threat"] = ""
ret["ThreatStatusRank"] = $ThreatStatusRank
ret["ThreatStatus"] = $ThreatStatus
ret["ThreatStatusDetails"] = "Threat Status is currently not supported in MDATP"
ret["Signature"] = (signatureVersion.nil? || signatureVersion.empty? || signatureVersion == "NA")? "Signature version not found" : signatureVersion
ret["ScanDate"] = ""
ret["DateCollected"] = DateTime.now.strftime("%m/%d/%Y %H:%M")
ret["Tool"] = defenderName
ret["AMProductVersion"] = (defenderVersion.nil? || defenderVersion.empty? || defenderVersion == "NA")? "MDATP version not found" : defenderVersion
return ret
end
end