美文网首页
suricata 输出 - eve

suricata 输出 - eve

作者: lx_jian | 来源:发表于2019-07-05 12:25 被阅读0次

    1.EVE

    1.1 Eve JSON输出

    EVE输出工具通过JSON输出警报,元数据,文件信息和协议特定记录。

    最常用的方法是通过'EVE',这是一种将所有这些日志都放在一个文件中。

    每个警报,http日志等都会进入这个文件:'eve.json'。然后可以通过第三方工具(如Logstash(ELK)或jq)处理此文件。

    1.1.1 输出类型

    EVE可以输出多种方法,regular是一个普通的文件。其他选项有syslog,unix_dgram,unix_stream和redis.

    输出类型:

    图1

    1.1.2 Alerts

    警报是规则匹配的事件记录。可以使用元数据修改它们,例如为应用程序层记录(HTTP,DNS等)生成警报,以及规则的元素。

    元数据:

    图2

    1.1.3 DNS

    DNS记录记录每个查询/回答记录一个日志记录。

    YAML:

    图3

    为了减少输出的详细程度,可以通过custom提供要记录的记录类型来过滤输出。

    1.1.4 TLS

    每个会话记录一条记录的TLS记录。

    YAML:

    图4

    默认是记录证书主题和颁发者。如果extended启用,则日志会变得更加详细.

    过使用custom它可以选择要记录的TLS字段。

    1.1.5 文件名中的日期修饰符

    可以在eve-log文件名中使用日期修饰符.

    outputs:

            -eve-log:

                    filename:eve-%s.json

    上面的示例为文件名添加了纪元时间。应支持C库中的所有日期修饰符。有关strftime所有支持的修饰符,请参见手册页。

    1.1.6 Rotate 日志文件

    Eve-log可以配置为根据时间循环。

    outputs:

            -eve-log:

                filename:eve-%Y-%m-%d-%H:%M.json

                rotate-interval:minute

    上面的示例每分钟创建一个新的日志文件,其中文件名包含时间戳。其他支持的rotate-interval值是hour和day。

    除此之外,还可以将其指定rotate-interval为相对值。一个例子是每X秒循环一次日志文件。

    outputs:

            -eve-log:

                    filename:eve-%Y-%m-%d-%H:%M:%S.json

                    rotate-interval:30s

    上面的示例每30秒轮询一次eve-log。这可以替换 30m为每30分钟一次,30h每30小时一次,30d 每30天一次,或30w每30周循环一次。

    1.1.7 多个记录器实例

    可以有多个“EVE”实例,例如:

    图5

    因此,alert和drop进入'eve-ips.json',而http,dns和tls进入'eve-nsm.json'。

    除此之外,每个日志都可以完全单独处理:

    图6

    对于大多数输出​​类型,您可以添加多个(除了drop仅支持单个记录器实例)

    图7

    1.1.8 文件权限

    可以为每个记录器单独设置日志文件权限。filemode可用于控制日志文件的权限,例如:

    outputs:

        -eve-log:

            enabled:yes

            filename:eve.json

            filemode:600

    上面的示例将文件权限设置eve.json为600,这意味着它只能由文件所有者读取和写入.

    1.1.9 json标志

    可以指定几个标志来控制EVE中的JSON输出:

    图8

    默认情况下会启用所有这些标志,并且可以根据EVE实例进行修改。

    1.1.10 Community  Flow ID

    Suricata经常与Bro/Zeek等其他工具结合使用。在eve-log部分中启用community-id选项会为每个输出添加一个新community_id字段。

    示例:

    图9

    1.1.10.1 选项

    可以为每个EVE记录器实例启用输出

    该community-id选项是布尔值。如果设置true为启用它。该community-id-seed选项指定无符号16位值,该值用于为community-id 输出计算的散列值。必须在输出此记录的所有工具上将其设置为相同的值。

    YAML:

    图10

    1.2 EVE Json格式

    如:

    图11

    1.2.1 共同部分

    所有JSON日志类型都共享一个共同的结构:

    {"timestamp":"2009-11-24T21:27:09.534255","event_type":"TYPE",...tuple...,"TYPE":{...typespecificcontent...}}

    1.2.1.1 事件类型

    公共部分有一个字段“event_type”来指示日志类型。

    1.2.1.2 PCAP字段

    如果Suricata正在处理pcap文件,则会添加以下字段:

    "pcap_cnt":123

    pcap_cnt包含pcap中的包号,这可用于在Wireshark中查找数据包。

    "pcap_filename":"/path/to/file.pcap"。

    pcap_filename 包含生成事件的pcap的文件名和位置。

    注意:pcap字段仅在“真实”数据包上可用,并且从内部“伪”数据包(例如流超时数据包)中省略

    1.2.2 事件类型:alert

    1.2.2.1 动作字段

    可能的值: “allowed” and “blocked”即:“允许”和“阻止”

    如:"action":"allowed"

    操作设置为“allowed”,除非规则使用“drop”操作且Suricata处于IPS模式,或者规则使用“reject”操作。

    它还可以在alert.source中包含有关攻击源和目标的信息,并在签名中使用alert.target字段中的target关键字。

    图12

    1.2.3 事件类型:HTTP

    1.2.3.1 字段

    (1)“hostname”:此HTTP事件所属的主机名

    (2)“url”:访问的主机名的URL

     (3)“http_user_agent”:使用的软件的用户代理

     (4)“http_content_type”:返回的数据类型(例如:application / x-gzip)

     (5)“cookie”

    除了这些字段之外,如果在suricata.yaml文件中启用了extended (扩展)日志记录,则还包括以下字段(可以):

    (1)“length”:HTTP正文的内容大小

    (2)“status”:HTTP状态代码

    (3)“protocol”:HTTP的协议/版本(例如:HTTP / 1.1)

    (4)“http_method”:HTTP方法(例如:GET,POST,HEAD)

    (5)“http_refer”:此操作的引用

    除了扩展日志记录字段之外,还可以选择在suricata.yaml文件中启用的50多个其他自定义日志记录HTTP字段中启用/添加。可以按如下方式启用其他字段:

    图13

    使用扩展日志记录的好处是查看此操作是否为POST,或者可能是下载的可执行文件实际返回了任何字节。

    1.2.3.2 示例

    具有非扩展日志记录的事件:

    "http":{

            "hostname":"www.digip.org",

            "url":"\/jansson\/releases\/jansson-2.6.tar.gz",

            "http_user_agent":"<User-Agent>",

            "http_content_type":"application\/x-gzip"

    }

    如果主机名显示端口号,例如有一个标题“Host:www.test.org:1337”

    "http":{

            "http_port":1337,

            "hostname":"www.test.org",

            "url":"\/this\/is\/test.tar.gz",

            "http_user_agent":"<User-Agent>",

            "http_content_type":"application\/x-gzip"

    }

    扩展日志记录事件:

    "http":{

            "hostname":"direkte.vg.no",

            "url":".....",

            "http_user_agent":"<User-Agent>",

            "http_content_type":"application\/json",

            "http_refer":"http:\/\/www.vg.no\/",

            "http_method":"GET",    

            "protocol":"HTTP\/1.1",

            "status":"200",

            "length":310

    }

    1.2.4 事件类型

    引入了新版本的dns日志记录,以改进记录dns应答的方式。

    使用该新版本,dns应答记录在一个事件中,而不是每个应答的事件中。

    可以使用以下格式自定义如何记录dns应答

    (1)“detailed”:为每个应答记录“rrname”,“rrtype”,“rdata”和“ttl”字段

    (2)“grouped”:记录的应答按其类型汇总(A,AAAA,NS,...)

    仍然可以使用旧的DNS日志记录格式,您可以在dns配置部分中使用“version”选项对其进行控制。

    1.2.4.1 字段

    在不同类型的DNS事件中看到的字段大纲:

    “type”:表示DNS消息类型,可以是“answer”或“query”。

    “id”:标识符字段

    “version”:表示正在使用的DNS日志记录版本

    “flags”:以十六进制表示DNS应答标志(例如:8180,请注意0x不输出)

    “qr”:表示DNS应答标志,查询/响应标志(例如:如果设置则为真)

    “aa”:表示DNS答案标志,权威答案标志(例如:如果设置则为真)

    “tc”:表示DNS应答标志,截断标志(例如:如果设置则为真)

    “rd”:表示DNS应答标志,Recursion Desired标志(例如:如果设置则为true)

    “ra”:表示DNS应答标志,递归可用标志(例如:如果设置则为真)

    “rcode”:(例如:NOERROR)

    “rrname”:资源记录名称(例如:域名)

    “rrtype”:资源记录类型(例如:A,AAAA,NS,PTR)

    “rdata”:资源数据(例如域名解析为的IP)

    “ttl”:此资源记录的生存时间

    还可以控制从suricata.yaml文件中启用的其他自定义字段显式记录哪些RR类型。如果未指定自定义字段,则会记录所有RR类型。可以使用自定义字段指定50个以上的值,可以按如下方式使用:

    图14

    1.2.4.2  示例

    IPv4地址“twitter.com”的DNS查询示例(资源记录类型“A”):

    "dns":{

            "type":"query",

            "id":16000,

            "rrname":"twitter.com",

            "rrtype":"A"

       }

    具有“detailed”格式的DNS答案示例:

    "dns{

            "version":2,

            "type":"answer",

            "id":45444,

            "flags":"8180",

            "qr":true,

            "rd":true,

            "ra":true,

            "rcode":"NOERROR",

            "answers":[

                    {

                        "rrname":"www.suricata-ids.org",

                        "rrtype":"CNAME",

                        "ttl":3324,

                        "rdata":"suricata-ids.org"

                    },

                    {

                        "rrname":"suricata-ids.org",

                        "rrtype":"A",

                        "ttl":10,

                        "rdata":"192.0.78.24"

                    },

                    {

                        "rrname":"suricata-ids.org",

                        "rrtype":"A",

                        "ttl":10,

                        "rdata":"192.0.78.25"

                    }

                ]

    }

    具有“grouped”格式的DNS答案示例:

    "dns":{

            "version":2,

            "type":"answer",

            "id":18523,

            "flags":"8180",

            "qr":true,

            "rd":true,

            "ra":true,

            "rcode":"NOERROR",

            "grouped":{

                    "A":["192.0.78.24","192.0.78.25"],

                    "CNAME":["suricata-ids.org"]

                   }

    }

    具有IPv4(资源记录类型'A')的旧DNS答案示例返回:

    "dns":{

            "type":"answer",

            "id":16000,

            "flags":"8180",

            "qr":true,

            "rd":true,

            "ra":true,

            "rcode":"NOERROR",

            "rrname":"twitter.com",    

            "rrtype":"A",

            "ttl":8,

            "rdata":"199.16.156.6"

    }

    1.2.5 事件类型:TLS

    1.2.5.1 字段

    (1)“subject”:来自TLS证书的主题字段

    (2)“issuer”:来自TLS证书的颁发者字段

    (3)“session_resumed”:如果通过会话ID恢复TLS会话,则此字段的值为“true”。如果出现此字段,则不显示“subject”和“issuer”,因为未看到TLS证书。

    如果启用了扩展日志记录,则还包括以下字段:

    “serial”:TLS证书的序列号

    “fingerprint”:TLS证书的(SHA1)指纹

    “sni”:客户端发送的服务器名称指示(SNI)扩展

    “version”:使用的SSL / TLS版本

    “not_before”:TLS证书中的NotBefore字段

    “not_after”:TLS证书中的NotAfter字段

    “ja3”:JA3指纹由JA3散列和JA3字符串组成

    必须在Suricata配置文件中启用JA3(将'app-layer.protocols.tls.ja3-fingerprints'设置为'yes')。

    除此之外,自定义日志记录还允许以下字段:

    “certificate”:TLS证书base64编码

    “chain”:整个TLS证书链base64编码

    1.2.5.2 示例

    常规TLS日志记录的示例:

    "tls":{

            "subject":"C=US, ST=California, L=Mountain View, O=Google Inc, CN=*.google.com",

            "issuerdn":"C=US, O=Google Inc, CN=Google Internet Authority G2"

    }

    恢复会话的常规TLS日志记录示例:

    "tls":{

        "session_resumed":true

    }

    扩展TLS日志记录的示例:

    "tls":{

            "subject":"C=US, ST=California, L=Mountain View, O=Google Inc, CN=*.google.com",

            "issuerdn":"C=US, O=Google Inc, CN=Google Internet Authority G2",

            "serial":"0C:00:99:B7:D7:54:C9:F6:77:26:31:7E:BA:EA:7C:1C",

            "fingerprint":"8f:51:12:06:a0:cc:4e:cd:e8:a3:8b:38:f8:87:59:e5:af:95:ca:cd",

            "sni":"calendar.google.com",

            "version":"TLS 1.2",

            "notbefore":"2017-01-04T10:48:43",

            "notafter":"2017-03-29T10:18:00"

    }

    使用TLS自定义日志记录(subject,sni,certificate)进行证书日志记录的示例:

    "tls":{

            "subject":"C=US, ST=California, L=Mountain View, O=Google Inc, CN=*.googleapis.com

            "sni":"www.googleapis.com",

            "certificate":"MIIE3TCCA8WgAwIBAgIIQPsvobRZN0gwDQYJKoZIhvcNAQELBQAwSTELMA [...]"

    }

    1.2.6 事件类型:TFTP

    1.2.6.1 字段

    “packet”:操作码,可以“读”或“写”或“错误”

    “file”:使用tftp协议传输的文件名

    “mode”:模式字段,可以是“八位字节”或“邮件”或“netascii”(或大小写的任意组合)

    1.2.6.2 示例

    "tftp":{"packet":"write","file":"rfc1350.txt","mode":"octet"}

    1.2.7 事件类型:SMB

    1.2.7.1 SMB字段

    “id”(整数):内部事务id

    “dialect”(字符串):协商的方案方言,如果缺少则为“未知”

    “command”(字符串):命令名称。例如SMB2_COMMAND_CREATE或SMB1_COMMAND_WRITE_ANDX

    “status”(字符串):状态字符串。可以是NT_STATUS或DOS_ERR等其他变种

    “status_code”(字符串):状态代码为十六进制字符串

    “session_id”(整数):SMB2 + session_id。SMB1用户ID。

    “tree_id”(整数):树ID

    “filename”(字符串):CREATE和其他命令的文件名。

    “disposition”(字符串):请求处置。例如FILE_OPEN,FILE_CREATE和FILE_OVERWRITE。

    “access”(字符串):指示文件的打开方式。“正常”或“关闭时删除”(字段可能会发生变化)

    “created”,“已访问”,“已修改”,“已更改”(整数):自unix时代以来的秒数时间戳

    “size”(整数):请求文件的大小

    “fuid”(字符串):SMB2 +文件GUID。SMB1 FID为十六进制。

    “share”(字符串):共享名称。

    “share_type”(字符串):FILE,PIPE,PRINT或unknown。

    “client_dialects”(字符串数组):客户端说话的SMB方言列表。

    “client_guid”(字符串):客户端GUID

    “server_guid”(字符串):服务器GUID

    “request.native_os”(字符串):SMB1本机OS字符串

    “request.native_lm”(字符串):SMB1本机Lan Manager字符串

    “response.native_os”(字符串):SMB1本机操作系统字符串

    “response.native_lm”(字符串):SMB1本机Lan Manager字符串

    1.2.7.1.2 SMB日志记录的示例

    管道打开:

    "smb":{"id":1,"dialect":"unknown","command":"SMB2_COMMAND_CREATE","status":"STATUS_SUCCESS","status_code":"0x0","session_id":4398046511201,"tree_id":1,"filename":"atsvc","disposition":"FILE_OPEN","access":"normal","created":0,"accessed":0,"modified":0,"changed":0,"size":0,"fuid":"0000004d-0000-0000-0005-0000ffffffff"}

    文件/管道关闭:

    "smb":{"id":15,"dialect":"2.10","command":"SMB2_COMMAND_CLOSE","status":"STATUS_SUCCESS","status_code":"0x0","session_id":4398046511121,"tree_id":1,}

    树连接(共享打开):

    "smb":{"id":3,"dialect":"2.10","command":"SMB2_COMMAND_TREE_CONNECT","status":"STATUS_SUCCESS","status_code":"0x0","session_id":4398046511121,"tree_id":1,"share":"\\\\admin-pc\\c$","share_type":"FILE"}

    从SMB1到SMB2方言2.10的方言协商:

    "smb":{"id":1,"dialect":"2.??","command":"SMB1_COMMAND_NEGOTIATE_PROTOCOL","status":"STATUS_SUCCESS","status_code":"0x0","session_id":0,"tree_id":0,"client_dialects":["PC NETWORK PROGRAM 1.0","LANMAN1.0","Windows for Workgroups 3.1a","LM1.2X002","LANMAN2.1","NT LM 0.12","SMB 2.002","SMB 2.???"],"server_guid":"aec6e793-2b11-4019-2d95-55453a0ad2f1"}"smb":{"id":2,"dialect":"2.10","command":"SMB2_COMMAND_NEGOTIATE_PROTOCOL","status":"STATUS_SUCCESS","status_code":"0x0","session_id":0,"tree_id":0,"client_dialects":["2.02","2.10"],"client_guid":"601985d2-aad9-11e7-8494-00088bb57f27","server_guid":"aec6e793-2b11-4019-2d95-55453a0ad2f1"}

    SMB1部分SMB1_COMMAND_SESSION_SETUP_ANDX:

    "request":{"native_os":"Unix","native_lm":"Samba 3.9.0-SVN-build-11572"},"response":{"native_os":"Windows (TM) Code Name \"Longhorn\" Ultimate 5231","native_lm":"Windows (TM) Code Name \"Longhorn\" Ultimate 6.0"}

    1.2.7.1.3 DCERPC字段

    “request”(字符串):command。例如,请求,绑定。

    “response”(字符串):回复。例如RESPONSE,BINDACK或FAULT。

    “opnum”(整数):opnum

    “call_id”(整数):调用id

    “frag_cnt”(整数):存根数据的片段数

    “stub_data_size”:总存根数据大小

    “interfaces”(array):接口列表

    “interfaces.uuid”(字符串):UUID的字符串表示形式

    “interfaces.version”(字符串):接口版本

    “interfaces.ack_result”(整数):ack结果

    “interfaces.ack_reason”(整数):确认原因

    1.2.7.1.4 示例

     DCERPC REQUEST/RESPONSE:

    "smb":{"id":4,"dialect":"unknown","command":"SMB2_COMMAND_IOCTL","status":"STATUS_SUCCESS","status_code":"0x0","session_id":4398046511201,"tree_id":0,"dcerpc":{"request":"REQUEST","response":"RESPONSE","opnum":0,"req":{"frag_cnt":1,"stub_data_size":136},"res":{"frag_cnt":1,"stub_data_size":8},"call_id":2}}

    DCERPC BIND/BINDACK:

    "smb":{"id":53,"dialect":"2.10","command":"SMB2_COMMAND_WRITE","status":"STATUS_SUCCESS","status_code":"0x0","session_id":35184439197745,"tree_id":1,"dcerpc":{"request":"BIND","response":"BINDACK","interfaces":[{"uuid":"12345778-1234-abcd-ef00-0123456789ac","version":"1.0","ack_result":2,"ack_reason":0},{"uuid":"12345778-1234-abcd-ef00-0123456789ac","version":"1.0","ack_result":0,"ack_reason":0},{"uuid":"12345778-1234-abcd-ef00-0123456789ac","version":"1.0","ack_result":3,"ack_reason":0}],"call_id":2}

    1.2.7.1.5 NTLMSSP 字段

    “domain”(字符串):Windows域。

    “user”(字符串):用户。

    “host”(字符串):主机。

    1.2.7.1.6 示例

    "ntlmssp":{"domain":"VNET3","user":"administrator","host":"BLU"}

    更完整的例子:

    "smb":{"id":3,"dialect":"NT LM 0.12","command":"SMB1_COMMAND_SESSION_SETUP_ANDX","status":"STATUS_SUCCESS","status_code":"0x0","session_id":2048,"tree_id":0,"ntlmssp":{"domain":"VNET3","user":"administrator","host":"BLU"},"request":{"native_os":"Unix","native_lm":"Samba 3.9.0-SVN-build-11572"},"response":{"native_os":"Windows (TM) Code Name \"Longhorn\" Ultimate 5231","native_lm":"Windows (TM) Code Name \"Longhorn\" Ultimate 6.0"}}

    1.2.7.1.7 Kerberos 字段

    “kerberos.realm”(字符串):Kerberos领域。

    “kerberos.snames(字符串数组):snames。

    1.2.7.1.8 示例

    "smb":{"dialect":"2.10","command":"SMB2_COMMAND_SESSION_SETUP","status":"STATUS_SUCCESS","status_code":"0x0","session_id":35184439197745,"tree_id":0,"kerberos":{"realm":"CONTOSO.LOCAL","snames":["cifs","DC1.contoso.local"]}}

    1.3 Eve JSON ‘jq’ 示例

    jq工具对于快速解析和过滤JSON文件非常有用。此页面包含有关如何与Suricata的Eve.json一起使用的各种示例。

    1.3.1 Colorize output

    tail-feve.json|jq-c'.'

    1.3.2 DNS NXDOMAIN

    tail-feve.json|jq-c'select(.dns.rcode=="NXDOMAIN")'

    1.3.3 Unique HTTP User Agents

    cateve.json|jq-s'[.[]|.http.http_user_agent]|group_by(.)|map({key:.[0],value:(.|length)})|from_entries'

    1.3.4 Data use for a host

    tail-n500000eve.json|jq-s'map(select(.event_type=="netflow" and .dest_ip=="192.168.1.3").netflow.bytes)|add'|numfmt--to=iec1.3G

    1.3.5. Monitor part of the stats

    tail -f eve.json | jq -c 'select(.event_type=="stats")|.stats.decoder'

    1.3.6. Inspect Alert Data

    cateve.json|jq-r-c'select(.event_type=="alert")|.payload'|base64--decode

    1.3.7. Top 10 Destination Ports

    cateve.json|jq-c'select(.event_type=="flow")|[.proto, .dest_port]'|sort|uniq-c|sort-nr|head-n10

    相关文章

      网友评论

          本文标题:suricata 输出 - eve

          本文链接:https://www.haomeiwen.com/subject/cyavnqtx.html