1 cn2的guardduty和cloudtrail导入到lLA中
1.1 日志导入
global azure有成熟的连接器可以用,但是china azure没有,只能通过下面未经过Azure官方认证的方式
guardduty: https://github.com/Azure/Azure-Sentinel/tree/master/DataConnectors/AWS-S3-AzureFunction
cloudtrail: https://github.com/Azure/Azure-Sentinel/tree/master/DataConnectors/AWS-CloudTrail-AzureFunction
1.2 规则告警
1.2.1 guardduty规则
(1)guardduty中发现中等级别的事件进行incident告警
High severity findings range between 8.9 - 7.0,
Medium 6.9 - 4.0,
Low 3.9 - 1.0.
这里将中等以上的guardduty进行incident告警:KQL如下
(2)检测暴力破解尝试
筛选出严重级别大于等于6的未授权访问事件,用于检测SSH暴力破解尝试
(3) 检测恶意IP地址
筛选出严重级别大于等于7的事件,并显示探测未保护端口的恶意IP地址和端口号。
(4)TI map IP entity to AWSCloudTrail
攻击者经常试图通过删除或停止可能显示其活动的日志集合来隐藏他们的步骤。
12.2CloudTrail规则
检测未授权的API操作(例如创建、更新和删除等操作)并返回访问被拒绝的错误
检测IAM权限变更
检测多次尝试登录失败的日志事件
2 azure的过滤器使用(transformation)
默认的MMA agent不支持
只有新的AMA Agent 创建DCR规则才支持
数据收集转换 - Azure Monitor | Azure Doc
使用 Azure Monitor 代理收集文本日志 - Azure Monitor | Azure Docs
3 Azure waf的数据导入自定义ES
https://www.elastic.co/guide/en/logstash/current/plugins-inputs-azure_event_hubs.html
Azure 事件中心功能概述 - Azure Event Hubs | Microsoft Learn
Azure Event Hubs 调研 - 知乎 (zhihu.com)
azure event hubs捕获数据:
Azure EventHubs快速入门和使用心得 - 博客猿马甲哥 - 博客园 (cnblogs.com)
https://www.liaosearch.com/archives/267.html
如何查看event hubs的数据有没有完全被logstash消费,event hubs没有提供直接的指标,但是可以在 event hub namespaces 中的metrics中查看 Sum Incoming Bytes. and Sum Outgoing Bytes,基本保持一致,则没有大量丢包情况。
设置ES索引的生命周期:
https://www.cnblogs.com/gezp/p/13427534.html
(1)Azure waf配置
进入到azure waf的配置页面Application gateway(不是WAF 策略页面)–》 Diagnostic settings 选择将ApplicationGatewayAccessLog转入到event hub
(2)logstash获取
进入到Event hubs的命名空间中-》Shared access policies
复制密钥,注意最后的EntityPath为event hub的名称
Endpoint=sb://logstash.servicebus.windows.net/;SharedAccessKeyName=activity-log-read-only;SharedAccessKey=mmxxxxeg=;EntityPath=insights-operational-logs
还需要对应的Storage account–> Access keys获取密钥:
logstash配置文件如下:
input {
azure_event_hubs {
event_hub_connections => ["Exxxxxt"]
threads => 8
decorate_events => true
consumer_group => "$Default"
storage_connection => "Defauxxxxn"
}
}
filter {
json {
source => "message"
target => "data"
}
if [data][records] {
split {
field => "[data][records]"
}
}
}
output {
elasticsearch {
hosts => ["es01:9200"]
ssl => true
ssl_certificate_verification => true
user => "elxxxic"
password => "xxxx"
cacert => '/usr/share/logstash/config/certs/ca/ca.crt'
index => "accesslog-%{+YYYY.MM.dd}"
}
stdout { codec => json_lines }
#stdout { codec => rubydebug }
}