Microsoft Windows AMSI Security Modeling Rule

Modeling Rule

Microsoft Windows AMSI

Details

IDMicrosoft_Windows_AMSI_ModelingRule
From Version8.3.0

Rules (XIF)

[MODEL: dataset = microsoft_amsi_raw]
alter
	get_originalsize = to_integer(json_extract_scalar(event_data ,"$.originalsize")),
	get_contentsize = to_integer(json_extract_scalar(event_data ,"$.contentsize")),
	get_scanResult = json_extract_scalar(event_data ,"$.scanResult")
| alter
	xdm.event.id = to_string(event_id),
	xdm.observer.type = provider_name,
	xdm.session_context_id = to_string(record_id),
	xdm.source.host.os = os_subtype,
	xdm.source.process.command_line = replex(process_cmd, "^\"|\"$", ""),
	xdm.source.process.executable.md5 = process_md5,
	xdm.source.process.executable.path = process_path,
	xdm.source.process.executable.sha256 = process_sha256,
	xdm.source.process.name = process_name,
	xdm.source.process.pid = to_integer(process_pid),
	xdm.source.process.thread_id = to_integer(process_thread_id),
	xdm.source.user.identifier = json_extract_scalar(event_data ,"$.SubjectUserSid"),
	xdm.event.log_level = if(log_level ~= "info", XDM_CONST.LOG_LEVEL_INFORMATIONAL, log_level ~= "err", XDM_CONST.LOG_LEVEL_ERROR, log_level ~= "warn", XDM_CONST.LOG_LEVEL_WARNING, log_level="crit", XDM_CONST.LOG_LEVEL_CRITICAL, to_string(coalesce(opcode,log_level))),
	xdm.source.application.name = json_extract_scalar(event_data ,"$.appname"),
	xdm.event.description = message,
	xdm.alert.description = json_extract_scalar(event_data ,"$.content"),
	xdm.target.resource.name = json_extract_scalar(event_data ,"$.contentname"),
	xdm.source.sent_bytes = coalesce(get_originalsize, get_contentsize),
	xdm.target.module.sha256 = json_extract_scalar(event_data ,"$.hash"),
	xdm.source.user.username = json_extract_scalar(event_data ,"$.SubjectUserName"),
	xdm.event.outcome = if( get_scanResult = "0", XDM_CONST.OUTCOME_SUCCESS, get_scanResult = "1", XDM_CONST.OUTCOME_UNKNOWN, get_scanResult = "0x8000", XDM_CONST.OUTCOME_PARTIAL, get_scanResult = "0x4000", XDM_CONST.OUTCOME_FAILED, get_scanResult !~= "0x40{3}", XDM_CONST.OUTCOME_FAILED, null),
	xdm.event.outcome_reason = if( get_scanResult = "0", "AMSI_RESULT_CLEAN", get_scanResult = "1", "AMSI_RESULT_NOT_DETECTED",  get_scanResult = "0x8000", "AMSI_RESULT_DETECTED", get_scanResult = "0x4000", "AMSI_RESULT_BLOCKED_BY_ADMIN_BEGIN", get_scanResult !~= "0x40{3}", "AMSI_RESULT_BLOCKED_BY_ADMIN_END", null);

Schema

microsoft_amsi_raw

Field Type Array?
event_data string
event_id string
log_level string
message string
opcode string
os_subtype string
process_cmd string
process_md5 string
process_name string
process_path string
process_pid string
process_sha256 string
process_thread_id string
provider_name string
record_id string
time_created datetime
Raw JSON
{
    "microsoft_amsi_raw": {
        "event_data": {
            "type": "string",
            "is_array": false
        },
        "event_id": {
            "type": "string",
            "is_array": false
        },
        "provider_name": {
            "type": "string",
            "is_array": false
        },
        "record_id": {
            "type": "string",
            "is_array": false
        },
        "os_subtype": {
            "type": "string",
            "is_array": false
        },
        "process_cmd": {
            "type": "string",
            "is_array": false
        },
        "process_md5": {
            "type": "string",
            "is_array": false
        },
        "process_path": {
            "type": "string",
            "is_array": false
        },
        "process_sha256": {
            "type": "string",
            "is_array": false
        },
        "process_name": {
            "type": "string",
            "is_array": false
        },
        "process_pid": {
            "type": "string",
            "is_array": false
        },
        "process_thread_id": {
            "type": "string",
            "is_array": false
        },
        "message": {
            "type": "string",
            "is_array": false
        },
        "log_level": {
            "type": "string",
            "is_array": false
        },
        "opcode": {
            "type": "string",
            "is_array": false
        },
        "time_created": {
            "type": "datetime",
            "is_array": false
        }
    }
}