2018杭州云栖大会Workshop:基于日志的安全分析实战

2018-09-19 04:18:14 1884

基于日志的安全分析实战

背景

越来越多的企业开始重视构建基于日志的安全分析与防护系统。我们会讲述如何使用日志服务从0到1收集海量日志,并从中实时筛选、甄别出可疑操作并快速分析,进一步构建安全大盘与可视化。并通过实战方式,演练覆盖几个典型安全分析场景。

image

目标

  1. 了解日志服务对于安全日志分析的场景的支持。
  2. 通过演练,了解如何使用日志服务进行典型安全场景的威胁识别与分析,包括:

    • 场景一:主机被暴力破解与异常登录识别
    • 场景二:数据库被SQL攻击与拖库识别
    • 场景三:Web服务被CC攻击的行为分析
  3. 了解如何构建安全大盘与可视化。

议程

  1. 现场产品介绍(5~8分钟)
  2. 准备工作(2分钟)
  3. 实战练习与问答(~20分钟)

准备工作

  1. 您需要一台能够上网的笔记本
  2. 现场会发送【测试账号】给各位

    • 注意:每一个独立的测试账号,都已经预先准备好了环境数据和部分参考配置,以便大家更高效的完成实战。
  3. 打开浏览器(推荐Chrome),跳转到日志服务控制台,根据提示,输入账号信息登录即可。
  4. 跳转到预先准备好的项目yq201809-阿里云ID

  5. 跳转到预先准备好的日志库yq-demo的查询页面即可:

步骤

场景一:主机被暴力破解与异常登录识别

1. 查看登录日志

在查询界面输入如下,即可看到主机登录的日志:

__topic__ : winlogin

日志的结构如下:

__topic__:  winlogin         // 日志主题:登录日志为winlogin
client_ip:  197.210.226.56   // 登录客户端IP
result:  success             // 登录结果:success / fail
target:  host4.test.com      // 被登录的机器
target_type:  server         // 机器类型 server(服务器), normal
type:  ssh                   // 登录方式:ssh, rdp
user:  admin                 // 登录账户

2. 识别暴力破解

任务:通过SQL关联分析,识别暴力破解
逻辑:特定服务器被连续失败登录后有一个成功登录
关键步骤:
2.1. 输入【查询分析语句】如下(双击全选后复制):

__topic__: winlogin and target_type: server  | select date_format(max_by(__time__, __time__), '%m-%d %H:%i:%s') as "最近时间",  target as "服务器", 4 as "破解次数", count(1) as "事件次数" FROM  (select __time__, target, result, lag(result, 1, '未知') over ( PARTITION  by target order by __time__) as pre1, lag(result, 2, '未知') over ( PARTITION  by target order by __time__) as pre2 , lag(result, 3, '未知') over ( PARTITION  by target order by __time__) as pre3 , lag(result, 4, '未知') over ( PARTITION  by target order by __time__) as pre4 from log) where result='success' and pre1='fail' and pre1='fail' and pre2='fail' and pre3='fail' and pre4='fail' group by target

这里的SQL大致分为3个部分:
2.1.1 过滤:选择目标是服务器类型的登录日志:

__topic__: winlogin and target_type: server

2.1.2 通过窗口函数lag,给每条日志增加上下文信息:前面几次登录的成功与否:

__topic__: winlogin and target_type: server  | select __time__, target, result, lag(result, 1, '未知') over ( PARTITION  by target order by __time__) as pre1, lag(result, 2, '未知') over ( PARTITION  by target order by __time__) as pre2 , lag(result, 3, '未知') over ( PARTITION  by target order by __time__) as pre3 , lag(result, 4, '未知') over ( PARTITION  by target order by __time__) as pre4 from log

2.1.3 通过子查询和分组,找出所有当前登录成功,但前面几次是失败的登录日志,并使用窗口函数max_by等,记录最近和最远时间:

__topic__: winlogin and target_type: server  | select date_format(max_by(__time__, __time__), '%m-%d %H:%i:%s') as "最近时间",  target as "服务器", 4 as "破解次数", count(1) as "事件次数" FROM  (select __time__, target, result, lag(result, 1, '未知') over ( PARTITION  by target order by __time__) as pre1, lag(result, 2, '未知') over ( PARTITION  by target order by __time__) as pre2 , lag(result, 3, '未知') over ( PARTITION  by target order by __time__) as pre3 , lag(result, 4, '未知') over ( PARTITION  by target order by __time__) as pre4 from log) where result='success' and pre1='fail' and pre1='fail' and pre2='fail' and pre3='fail' and pre4='fail' group by target

2.2. 【时间选择】选择1小时,可以看到暴力破解的事件列表:
image
2.3. 将表格【添加到仪表盘】:选择现有仪表盘我的安全大盘,并命名为【暴力破解事件】。

参考:可以参考预先配置好的【快速查询】:暴力破解
image

3. 识别异常登录并配置IP下钻

任务:通过SQL地理函数与安全函数分析登录地址,识别异常登录。并配置下钻进一步查看登录的IP信息。
逻辑:平时服务器都是从中国区或者美国(VPN)登入,出现了从其他国外登入的IP,且改IP为感染IP。
关键步骤:
3.1. 输入【查询分析语句】如下(双击全选后复制):

__topic__: winlogin and result: success and target_type: server | select date_format(min_by(__time__, __time__), '%m-%d %H:%i:%s') as "最早时间", date_format(max_by(__time__, __time__), '%m-%d %H:%i:%s') as "最近时间", target as "服务器", count(1) as "登录次数", arbitrary(client_ip) as "可疑客户端(样例)" , '查看IP信息' as "操作" where ip_to_country(client_ip) <> '中国' and security_check_ip(client_ip) = 1 group by target order by "登录次数" DESC

3.2. 【时间选择】选择1小时,可以看到异常登录的事件列表
3.3. 配置下钻:点击列表【操作】旁边的【+】,打开【下钻】,选择【自定义http链接】,配置为www.ip138.com/ips138.asp?ip=${可疑客户端(样例)}&action=2,如下:
image

3.4. 将表格【添加到仪表盘】:选择现有仪表盘我的安全大盘,并命名为【异常登录事件】。
参考:可以参考预先配置好的【快速查询】:异常登录
image

4. 完善登录安全大屏

任务:通过地图图表构建登录仪表盘,将潜在风险加入仪表盘,并完善大盘布局。
关键步骤:
4.1. 输入【查询分析语句】如下(双击全选后复制):

__topic__: winlogin and result: success | select ip_to_country(client_ip) as country, count(1) as "成功登录次数" group by  country

4.2. 【时间选择】选择1小时,可以看到基于来源国家的登录事件分布,选择【图表类型】中的【地图】下的【世界地图】:
image

4.3. 将表格【添加到仪表盘】:选择现有仪表盘我的安全大盘,并命名为【登录事件分布】。
4.4 在视图中进入【我的安全大盘】,并点击按钮【编辑】对布局进行调整:
image

参考:可以参考预先配置好的【仪表盘】:场景一:....
image

场景二:数据库被SQL攻击与拖库识别

1. 查看登录日志

在查询界面输入如下,即可看到mysql的SQL执行日志:

__topic__ : mysql

日志的结构如下:

__topic__:  mysql      // 日志主题:SQL执行日志为mysql
sql:  SELECT * FROM accounts WHERE id >= 20000 
         and id < 30000 limit 10000   // 执行的SQL
target:  db1.abc.com   // 数据库服务器
db_name:  crm_system   // 数据库
table_name:  accounts  // 表格
sql_type:  select      // SQL类型: select, update, delete等
user:  op_user1        // 执行SQL的用户
client_ip:  1.2.3.4    // 连接执行的客户端IP
affected_rows:  10000  // 影响的函数,例如返回的行数
response_time:  1210   // 执行的响应时间(毫秒)

2. 识别SQL攻击

任务:通过SQL解析,识别SQL攻击
逻辑:黑客通过获取了数据库账户(或者通过SQL注入),执行了一系列的SQL语句,将病毒写入服务器磁盘。(例如dumpfile into
关键步骤:
2.1. 输入【查询分析语句】如下(双击全选后复制):

__topic__: mysql | select date_format(__time__, '%m-%d %H:%i:%s') as "时间", '文件写入' as "攻击类型", client_ip as "客户端", concat(db_name, table_name) as "数据库", target as "服务器", sql as "攻击SQL"  where regexp_like(sql, '(?i).+into\s+dumpfile\b.+')

2.2. 【时间选择】选择1小时,可以看到SQL攻击的事件列表:
image

2.3. 将表格【添加到仪表盘】:选择现有仪表盘我的安全大盘,并命名为【SQL攻击事件】。

参考:可以参考预先配置好的【快速查询】:SQL攻击

3. 识别拖库

任务:通过SQL统计,识别SQL拖库
逻辑:黑客通过获取了数据库账户,执行了一系列的SELECT的SQL语句,将重要表格(例如账户、订单信息)拖出。
关键步骤:
3.1. 输入【查询分析语句】如下(双击全选后复制):

__topic__: mysql and sql_type: select | SELECT date_format(min_by(__time__, __time__), '%m-%d %H:%i:%s') as "拖库开始时间", max_by(__time__, __time__)-min_by(__time__, __time__) as "拖库耗时(秒)", db_name as "数据库", table_name as "表格",  sum(affected_rows) as "拖库行数",arbitrary(sql) as "拖库SQL(样例)",  arbitrary(client_ip) as "客户端(样例)" group by db_name, table_name HAVING  "拖库行数" > 200

3.2. 【时间选择】选择1小时,可以看到数据库拖库的事件列表:
image
3.3. 将表格【添加到仪表盘】:选择现有仪表盘我的安全大盘,并命名为【数据库拖库事件】。

参考:可以参考预先配置好的【快速查询】:数据库拖库

4. 构建数据库安全大屏

任务:结合前面的规则,调整【我的安全大盘】的布局
参考:可以参考预先配置好的【仪表盘】:场景二:....

场景三:Web服务被CC攻击的行为分析

1. 查看登录日志

在查询界面输入如下,即可看到DDoS高防的访问与攻击日志:

__topic__ : ddos_access_log

参考DDoS高防访问日志格式.

2. 识别CC攻击规则

任务:查看CC攻击目标站点与特点
逻辑:CC攻击的日志通过cc_blocks > 0可以获得
参考:可以参考预先准备好的场景三:... DDoS的运营中心访问中心仪表盘.

3. 查看DDoS安全大盘

查看现有仪表盘,修改并调整DDoS安全大盘:
image
预览:
1535613882645_07009efb_7aba_49f3_af1a_1f719015285a_jpeg
1535613893076_5a047a99_a22b_4202_9d27_d0769ecc3ff4_jpeg

进一步参考

  • 扫码加入官方钉钉群 (11775223):
    image

安全 服务器 mysql 函数 日志 日志服务 云栖大会 数据库 workshop CC攻击 暴力破解 安全分析 拖库 SQL攻击

作者

成喆
TA的文章

相关文章