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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 2018年9月杭州云栖大会Workshop - 基于日志的高级分析实战:介绍背景、场景和步骤等

基于日志的安全分析实战

背景

越来越多的企业开始重视构建基于日志的安全分析与防护系统。我们会讲述如何使用日志服务从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
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
23天前
|
人工智能 Linux 云栖大会
看过来!2024 云栖大会操作系统技术 Workshop 怎么玩?
报名倒计时2天啦,欢迎大家来“操作系统技术Workshop”打卡。专家讲解原理、现场实战演练,AI、C++ 20专场任选。
看过来!2024 云栖大会操作系统技术 Workshop 怎么玩?
|
2月前
|
SQL 运维 监控
Nest.js 实战 (十):使用 winston 打印和收集日志记录
这篇文章介绍了在Nest服务中如何使用Winston记录日志。文章首先强调了日志记录在后台服务中的重要性,接着提到Nest默认的内部日志记录器,并指出可以通过@nestjs/common包中的Logger类来全面控制日志系统的行为。文章还提到,为了在生产环境中实现更高级的日志功能,可以使用如Winston之类的Node.js日志包。接下来,文章介绍了如何在Nest服务中使用Winston记录日志,包括安装相关依赖、创建winston配置文件以及实现简单的日志记录示例。最后,文章指出更高级的自定义日志功能需要读者自己去探索。
Nest.js 实战 (十):使用 winston 打印和收集日志记录
|
16天前
|
缓存 监控 算法
分析慢日志文件来优化 PHP 脚本的性能
分析慢日志文件来优化 PHP 脚本的性能
08-06-06>pe_xscan 精简log分析代码 速度提升一倍
08-06-06>pe_xscan 精简log分析代码 速度提升一倍
|
2月前
|
存储 分布式计算 大数据
【Flume的大数据之旅】探索Flume如何成为大数据分析的得力助手,从日志收集到实时处理一网打尽!
【8月更文挑战第24天】Apache Flume是一款高效可靠的数据收集系统,专为Hadoop环境设计。它能在数据产生端与分析/存储端间搭建桥梁,适用于日志收集、数据集成、实时处理及数据备份等多种场景。通过监控不同来源的日志文件并将数据标准化后传输至Hadoop等平台,Flume支持了性能监控、数据分析等多种需求。此外,它还能与Apache Storm或Flink等实时处理框架集成,实现数据的即时分析。下面展示了一个简单的Flume配置示例,说明如何将日志数据导入HDFS进行存储。总之,Flume凭借其灵活性和强大的集成能力,在大数据处理流程中占据了重要地位。
37 3
|
2月前
|
应用服务中间件 Linux nginx
在Linux中,如何统计ip访问情况?分析 nginx 访问日志?如何找出访问页面数量在前十位的ip?
在Linux中,如何统计ip访问情况?分析 nginx 访问日志?如何找出访问页面数量在前十位的ip?
|
1月前
|
SQL 安全 数据库
基于SQL Server事务日志的数据库恢复技术及实战代码详解
基于事务日志的数据库恢复技术是SQL Server中一个非常强大的功能,它能够帮助数据库管理员在数据丢失或损坏的情况下,有效地恢复数据。通过定期备份数据库和事务日志,并在需要时按照正确的步骤恢复,可以最大限度地减少数据丢失的风险。需要注意的是,恢复数据是一个需要谨慎操作的过程,建议在执行恢复操作之前,详细了解相关的操作步骤和注意事项,以确保数据的安全和完整。
59 0
|
2月前
|
数据库 Java 监控
Struts 2 日志管理化身神秘魔法师,洞察应用运行乾坤,演绎奇幻篇章!
【8月更文挑战第31天】在软件开发中,了解应用运行状况至关重要。日志管理作为 Struts 2 应用的关键组件,记录着每个动作和决策,如同监控摄像头,帮助我们迅速定位问题、分析性能和使用情况,为优化提供依据。Struts 2 支持多种日志框架(如 Log4j、Logback),便于配置日志级别、格式和输出位置。通过在 Action 类中添加日志记录,我们能在开发过程中获取详细信息,及时发现并解决问题。合理配置日志不仅有助于调试,还能分析用户行为,提升应用性能和稳定性。
38 0
|
2月前
|
SQL 安全 测试技术
【数据守护者必备】SQL数据备份与恢复策略全解析:从全量到日志备份,手把手教你确保企业信息万无一失的实战技巧!
【8月更文挑战第31天】数据库是企业核心业务数据的基石,为防止硬件故障、软件错误或人为失误导致的数据丢失,制定可靠的备份与恢复策略至关重要。本文通过一个在线购物平台的案例,详细介绍了使用 SQL Server 进行全量备份、差异备份及事务日志备份的方法,并演示了如何利用 SQL Server Agent 实现自动化备份任务。此外,还提供了数据恢复的具体步骤和测试建议,确保数据安全与业务连续性。
50 0
|
2月前
|
存储 消息中间件 监控
Java日志详解:日志级别,优先级、配置文件、常见日志管理系统ELK、日志收集分析
Java日志详解:日志级别,优先级、配置文件、常见日志管理系统、日志收集分析。日志级别从小到大的关系(优先级从低到高): ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF 低级别的会输出高级别的信息,高级别的不会输出低级别的信息

热门文章

最新文章

下一篇
无影云桌面