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.
输出类型:
图11.1.2 Alerts
警报是规则匹配的事件记录。可以使用元数据修改它们,例如为应用程序层记录(HTTP,DNS等)生成警报,以及规则的元素。
元数据:
图21.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仅支持单个记录器实例)
图71.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字段。
示例:
图91.1.10.1 选项
可以为每个EVE记录器实例启用输出
该community-id选项是布尔值。如果设置true为启用它。该community-id-seed选项指定无符号16位值,该值用于为community-id 输出计算的散列值。必须在输出此记录的所有工具上将其设置为相同的值。
YAML:
图101.2 EVE Json格式
如:
图111.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关键字。
图121.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个以上的值,可以按如下方式使用:
图141.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
网友评论