数据安全实践之数据安全日志审计平台

2021-02-19
155

前言

此前写过一篇文章关于数据资产管理的一些实践方法,对于对数据安全来说其实也是对资产的识别,监控,保护,运营的循环过程。我们要清楚保护对象是什么,他有什么风险或者问题,然后如何保护,再持续提升。对于数据的监控其实是一个比较复杂的事情,数据的形式,载体,使用场景千变万化,所以很难通过一种方式解决所有数据场景,数据安全日志审计也只是其中的一种方式。

对其日志进行的分析其实是一种很常见的应用场景,对应用安全来说,WAF,IDS等产生告警日志是安全人员每天必看的日志。所有许多安全团队会将所有安全产品的日志汇聚到一个平台,从而诞生了安全日志平台。我们借鉴了这个思路,将数据安全的日志汇聚并加以分析就能够让安全人员关注数据方面每天的威胁或者风险。

安全日志审计系统架构示意图

日志采集,分析处理,告警存储,以及告警展示,规则管理等全自研架构图如下:

1610961920_60055400539a893cada85.jpg!small

部分功能可以利用公司已有基础服务,如es+kibana,kafca,统一日志平台等,也可以利用开源系统实现部分功能。数据安全日志审计主要任务是通过对敏感数据接口日志的访问情况进行分析,发现数据泄露等安全事件,或识别潜在数据安全风险,并留存证据。基本的要求如下:

  • 能自动配置规则

  • 能根据规则匹配敏感字段

  • 看到告警

  • 能够溯源

  • 设置白黑名单

  • 访问量统计

安全日志采集与接入

1.业务接口日志→公司基础服务日志平台→安全日志分析平台

1610962144_600554e081d5bbd4bc5cf.jpg!small?1610962145432

2.业务接口日志→服务器本地某目录→通过syslog同步到安全日志平台

1610962159_600554efef596781d9edb.jpg!small?1610962161158

3.日志格式示例见附录

日志审计平台功能

1.敏感数据定义

重要关注数据,如:身&&份证,手机号,银&&行卡等。

匹配规则:使用正则,关键字匹配。

业务数据需根据业务需求进行指纹提取。

详细介绍请参考:《数据安全实践之数据资产管理》

2.通用日志审计规则

仅举例一些通用规则,安全规则应随公司业务场景,泄露情况进行调整,也就是需要投入大量运营工作,不断场景化,细化的过程。

(1)频次纬度:最常见的情况就是频次过大,较大频次是泄露批量数据的一种常见现象,适用于捕捉到对突发的非计划的安全事件

  • 【1分钟】单个账号访问接口频次大于【100】条日志

  • 【1分钟】单IP访问单个接口大于【10】个账号

(2)时间纬度:非工作时间,或非业务时间的大量访问,针对员工或者第三方常用策略

  • 【非工作时间(1:00-7:00)】单IP访问单个接口大于【50】条日志

  • 【非工作时间(1:00-7:00)】单账号访问单个接口大于【50】条日志

(3)数据量纬度:往往会发现一些对数据控制不严的接口

  • 单个账号对某一数据接口累计获取去重后敏感数据大于【1000】条

(4)时间窗口:基于统计和平均值的告警,发现突发的异常行为的常用规则

  • 统计单账号/IP【每月】平均访问量,该账号/IP访问量超过平均访问次数/获取数据数量【2倍】

  • 统计单个系统【每月】单账号/IP平均访问量,单个账号/ip访问该系统超过平均访问次数/获取数据数量【2倍】

3.告警信息查看

(1)告警事件信息与检索

基本包含的要素,可自行发挥:时间,账号,userIP,规则名称,访问系统,url,访问类型,匹配多少条日志,详情

检索信息:时间段,账号,IP,规则名称,访问系统,url,访问类型检索

基本实现:可以通过搭建ES+kibana,简单实现,也可以自行开发前端和检索。

(2)事件与日志

首先,日志审计平台里有两种数据需要明确,事件和日志。

  • 事件:是当告警规则匹配到相关日志,或一组日志处罚了告警规则,平台产生一条记录为事件

  • 日志:为从系统采集来的原始日志,一般为json格式。告警日志是被告警规则匹配到的日志组,和一个事件关联

事件和日志产生过程:

  • 日志采集后会自动存储到一个es索引内,该索引为全量日志索引

  • 告警条件匹配到告警后,会产生一条事件,该事件存储一个es索引/mysql数据库中,作为事件存储

  • 同时将告警追踪匹配到的日志存入一个es索引中,为告警日志索引,并在每个日志中插入事件ID

4.日志画像和决策分析

画像和决策分析,应用于机器学习算法,可以对每个系统和账号进行风险评估。也可以根据专家经验与业务方一同判断和决策系统风险。

(1)系统画像

每个系统的访问情况,可以确定系统的活跃程度,账号数据能够帮助评估系统权限是否过大。

  • 系统列表:系统名称,urL,月均访问次数,月均访问数据量,账号数

  • 访问某个系统的账号列表:账号名,姓名,部门,当月访问次数,当月访问数据量

(2)账号画像

每个账号的访问情况,过于活跃的账号,通常其风险会比较大,我们还应关注权限过大的账号。

  • 账号列表:部门,账号名,姓名,项目组,当月访问总次数,当月访问总数据量

  • 账号访问系统列表:系统名称,URL,业务线,当月访问此时,当月访问数据量

(3)统计数字

  • 系统/URL数量,按业务线

  • 账号/URL数量,按部门

  • 告警top部门,账号

  • 访问量top部门,账号

5.日志采集自检测

该功能主要验证日志采集过程是否出现错误,由于日志格式和内容都是安全部和业务共同定义的,所以在日志中会有一些错误,这个有助于安全推进业务方完善日志质量。

  • 新增url接入检测,加入系统列表清单:系统名,业务线,url,加入时间,日访问量,

  • 日志告警丢失,某个url连续【10】日没有日志告警:URL上线,下线手动添加/清除功能

  • 异常日志告警:异常日志打标后,存储异常日志库,分析异常原因,安全告警应排除这类日志,会产生误报。

日志平台的应用场景

1.数据泄露事件溯源

通过某个泄露样本,查找相似的告警事件。初筛后,通过数据传输链进行事件还原。

  • 结构化数据溯源:初筛数据结构相似度70%以上,根据内容,行数等信息抽样,匹配度60%的事件。

  • 文件类数据溯源:日常事件涉及文件建立指纹库,初筛文件指纹相似70%,通过文件反查可能涉及的事件。

通过疑似人员账号,查看访问系统接口,数据查看,导出的时间,频次,下载文件后的后续行为。

2.员工数据泄露事件取证与事件还原

系统接口的安全日志告警与DLP告警关联:

  • 时间维度:在同一个时间段内,有前后关联的事件

  • 人员维度:相同账号,相同IP,同部门,同岗位账号等

  • 事件维度:相似的异常行为,或者有一定逻辑关联的事件

  • 数据维度:数据血缘关联行,需要了解业务工作流程,数据加工时文件的关系和流转过程。

与DLP结合内容详见下一章节。

3.大数据场景下数据导出行为监控

(1)数据线上化中的应用:

大数据在线分析虚拟环境,许多大数据管控机制,仅允许原始敏感数据在线上进行分析,导出数据结果。但是往往在线分析引擎固化了分析环境和一些分析逻辑,不能满足所有数据分析需求。所以使用虚拟化环境提供用户可以定制化的在线分析环境就诞生了,用户可以自由操作该环境,最终完成数分工作,并导出结果。安全日志分析平台提供了数据操作和导出时的审计工作。

(2)沙盒环境中的应用:

沙盒环境会控制安全域(沙盒),个人域(开放空间)之间的数据交换,数据交换过程往往会有较为严格的申请审批流程,需要通过日志审计来保证流程和安全策略的有效性。

(3)从大数据平台数据导出:

大数据平台一般会开放数据查询和导出功能,对查询和导出功能的日志审计,可以保证该功能不被滥用,造成数据泄露风险。

4.第三方数据共享审计

第三方共享数据,防止第三方滥用,泄露数据:

  • 一号多用:同账号不同IP的访问

  • 爬虫:有规律爬去,或者数据量远超正常业务需要

  • 账号被盗:数据访问量突增,非业务时间的大量访问

日志审计不能解决所有数据共享问题,需要配合其他技术和管理手段:

  • 签署数据安全和保密协议,建议和法务一起制定,明确违规行为,罚则等

  • 限制访问权限,强认证机制,数据最小化原则。

  • 利用数据染色技术,监控所有第三方是否泄露数据

  • 此外还有多方安全计算等不直接提供原始数据的方案根治问题。

日志平台的扩展

1.公司文件监控——与DLP结合应用

(1)DLP基本功能实现

  • USB拷贝:条件:终端操作方式=USB拷贝

  • 网盘上传:条件:如应用程序=baidunetdisk.exe

  • IM发送:条件:应用程序=wechat.exe

  • 邮件外发:条件:应用程序=foxmail.exe,应用程序包含ie,chrome,firefox,域名包含mail,目标IP为外网地址

  • 上传网站:条件:应用程序包含ie,chrome,firefox;目标IP公网地址

  • 列表:时间,部门,姓名,文件名称,数据类型,域名,目标IP,详情

  • 代码到git:条件:文件类型,java,python。。。,目标域名:git,应用程序:TortoiseGit

(2)DLP功能扩展:

总所周知,DLP需要非常强的运营能力,创建规则比较复杂,尤其在应用场景比较繁多的企业,准确率和告警人工排查工作都比较困难。利用安全日志审计平台可以直接对接DLP告警日志,并对日志进行二次规则匹配,使人工成本降低,大大提升告警效率。

DLP告警日志接口对接,可根据日志接口类型进行定制开发。

日志审计平台结合后,告警场景可以根据需监控的场景进行精细化管理,举例如下:

  • USB拷贝:可将1次拷贝事件合并为1条告警事件,并统计文件数量,文件类型。对接工单系统,降低数据备份,更换电脑等场景的风险值。

  • 离职监控:人事系统对接后,自动化筛选离职人员告警,提升风险值。(ps:也可以对接DLP规则引擎,自动更新离职人员监控名单)

2.安全攻防能力扩展

安全日志平台可以接受不同类型的日志,也可以实现不能的安全策略从而发现更多的风险和异常,严格意义上这个可能脱离了数据安全的范畴,使其逐步演进为一个安全基础监控平台和安全大数据平台。具体内容不再详述,这里仅提供一个思路:

(1)识别入侵事件

与DNSlog,威胁情报,网络流量的结合,识别如:

  • 恶意挖矿

  • 盲打平台

  • 病毒木马

  • 特定账号监控

(2)识别安全漏洞

HTTP接口日志里自身含有比较全的请求header和body的内容,并且能很方便的溯源用户及IP信息,对发现安全漏洞和利用者能够起到辅助作用:

  • SQL注入

  • XSS

  • 命令执行

  • 特定场景越权

  • 登录爆破和撞库

总结

数据只有流传和应用才能产生价值,如果为了安全而限制了数据的使用,那么数据也就丧失了其本来的价值,所以数据注定是千变万化的,也是无处不在的。在数据安全日志审计中,解决获取什么日志也是首先要解决的问题。笔者始终认为与其面面俱到不如优先做最重要事,所以整个数据安全日志审计的设计也是基于这个方面出发,重点对应用接口日志进行收集,在企业实际应用中也可以根据实际情况先外再内的方式依次进行。

平台后续可以再逐步扩展,并与其它安全能力结合产生更多的价值,如结合DLP对文件的监控。

附录:日志格式定义示例

序号

名称

字段

类型

举例

解释

1

业务地域

local

字符串

(bj | sh |sz)

业务所在区,适用于业务随地区,分公司有明显差异

2

系统名称

systemName

字符串

Seclogaudit

应用唯一标识,随企业资产管理标识而定

3

模块,方法

module(select|export)

字符串

select

这个接口是查询或是导出接口(选项:查询|导出|。。。)

4

数据库名称

dbName

字符串数组

["database1","database2"]

标记该埋点接口所查询的库是哪个,有助于关联数据库

5

系统IP

serverIp

字符串数组

["192.168.1.1","192.168.1.2"]

标记是当前系统IP

6

系统域名

domain

字符串

"anquan.XXX.com

服务的域名,如果域名上的业务是按路径来区分需要加上路径。

7

浏览器信息

userAgent

字符串

"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8;en-us)AppleWebKit/534.50 (KHTML, like Gecko) "

标记请求来源的的UserAgent

8

浏览器信息

queryRefer

字符串

"http://www.XXX.com"

标记请求来源的refer,也就是这个请求是从哪里过来的

9

内外网信息

isPublic

int类型

0( 0| 1|2 )

该接口是否对外,如公司内部的后台接口,供应商接口等

10

请求User

userName

字符串

"zhang.XX"

标记发起这次请求的ERP或者UserName,就是账号名

11

请求的URI

queryUrl

字符串

http://anquan.XXX.com/member/detail

埋点的接口URI

12

请求的GET/POST参数

getParams

字符串

{“post”}{       "memberId ":"12345 ",
"memberName ":"张三"}

原始的GET、POST请求参数

原始接口返回的内容就可以,但需要格式化成json格式,否则在ES上没法做索引哦

13

请求来源IP

userIp

字符串

"172.16.1.1"

埋点请求这个接口的来源ip

14

记录发起请求的时间戳

queryTime

long类型

1567477398313

请求发起的时间,毫秒为单位

15

接口返回内容

response

字符串数组

原始接口返回的内容就可以

{
"username ":"李四 ",
"age":"30",
"mobile ":"123123123 "
}

原始接口返回的内容就可以,但需要格式化成json格式,否则在ES上没法做索引哦

 

转载时必须以链接形式注明原始出处及本声明