防代码泄漏的监控系统架构与实践

2019-05-01 176422人围观 ,发现 32 个不明物体 企业安全

*本文作者:糖果L5Q,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。

0×01 概要

代码资源是组织的核心资源,对于敏感的代码是不希望流传到外部的,但由于各种原因还是有资源泄露出去, 对于泄露的原因先不论,因为相对比较难避免,但我们可以通过一定的技术手段对关键的数据进行审计监控,把资源泄露缩小到一定的范围内,现在普遍流行的方式是对Github进行监控,在Github查找敏感词,比较常见。本文在此之外提出了一种对内监控的方案,以SVN监控为例。从相关人员从内部系统下载时就行一定成度的监控审计,对下载者的下载量和行为进行分析,这个出发点建立一个监控系统。

0×02 关键资源与角色

整个数据泄露的过程是一个把关键资源从内部仓库下载到本地,再上传到Github的过程。对开发者本地的监听是比较不合适的,但我们可以对外部Github仓库监听,Github本身也提供相对方便的监听接口。我们这次重点不讲gihub的监控, 讲内部仓库监控分析, 自动化的产生下载量分析报告和特定行为提示的系统构建思路。

三种资源仓库:

1.内部仓库:组织内部的代码管理系统,外部人员不可见,比如SVN。

2.开发者仓库:开发者本地仓库。

3.Github外部仓库:Github对外公有仓库。

0×03 敏感资源角色关系模式

从代码资源生产到消费一般会有三种角色:

1.代码提交者: 代码工程相关上传人员,代码生产者。

2.开发下载者:开发者本身:

3.代码读者(消费者):本地仓库的消费者就是相关开发人员,外部Gihub仓库的消费读者就是Github用户。

我们的系统是,增加一个第4种人:安全管理监控人员。通过接入二种监控系统来分析当前资源是否泄露:1.内部仓库下载行为分析系统。2. Github敏感词监控系统。

0×04 重要监控着眼点

内部仓库监控和外部仓库监听的核心关注重点是什么。

1.内部仓库监控重点:关键代码资源被下载时要关注,异常下载量过大要关注,特别用户的下载要关注。内部监控系统的成果物:下载量统计更表,重点资源被下载报警提示。

2.外部仓库监控重点:外部仓库因为我们没有明确的用户列表,现阶段是通过对关键资源有关联的关键字进行监控, 这种系统很多公司都在用,文章最后我们给出代码方案。

0×05 构建内部仓库审计分析系统的生产实践

对于内部了仓库系统进行审计的一个关键是,如何收集相关的数据,其次是如何分析数据,分析行为。一般企业代码管理仓库可能有自己的特定要求,对于主流的代码管理工具来说,最常的工具就是SVN和Git。我们以SVN为例,我们选择对SVN的日志进行集中并进行分析,来实现对资源和用户的审计。

构建内部监控系统分两步走:

1.系统日志收集: 收集SVN系统日志,传统的SVN日志都在服务器本地,需要把文本日志集中。一般重要生产服务器是不希望部署太多的不相关服务,系统本身的工具如Rsyslog、Rsync不会对系统的稳定性有损害。如果不在乎数据同步的周期时间快慢,可以使用Rsync进行日志数据同步。

2.日志数据接口化:对自动监控程序来说,好的交互方式不是去直接读文本,如果可以通过调用REST API, 监控业务可以集中做监控策略而不是,把大量的时间去做数据处理。所以像ELK、SPLUNK、Graylog这种数据服务的存在就可以减监控开发本身的工作量。

对于一般的公司来说,可以选择适合自己的方式,选择对应的方案进行处理。这里我们抽象出了一个相对通用的处理流程给大家,但不一定能普通适用所有场景。

我们将日志数据接口化构建分成5个步骤:

1.SVN文本日志-> 2.rsync到一台大容量文本服务器->3.文本服务器部署nxlog发送到syslog服务器->4.syslog服务器进行数据接收并通过本地服务将文本数据存入ES–>5.建立一个数据网关对外提供REST API服务提供数据查询。

3 监听策略实施:当我们有了日志查询的REST API,再对数据进行监控就是相关容易了, 我们通过ES本身的功能,进行数据的检索和统计。使用Python和GO或是其它语言工具都可以,每个公司的业务不一样,自己定制比较好。

0×06 监听任务分发处理

为什么用RPC做监听分析处理:

日志是用户行为分析的最好的素材,上面系统的构建后,我们可以通过REST API相对容易的得到日志数据,下面我们就可以集中精力,实现我们的监控策略。我们通过按一定的时间周期自动拉取分析的日志数据。crontab与监听的调度问题,Cron在这里只是我们按时间切分执行任务的一个触发者,我们在真正的分析处理和Cron之间加了一层任务调度层Wrapper应用,Cron只是执行到Wrapper层,具体调度任务的内容可随时调整 ,与时间周期无关的更新都不用修改Cron,然后再次解耦,用RPC把监听与Cron机分开,通过Wrapper层进行通信, 这样具体监听分析处理和Cron调度放到不同机器上。如果监听审计的需求变更,只需要改Wrapper调层配置好新执行层就可以免于整体工程的集中变更。

分析成果物:

我们设计的这个系统的成果物是: 单位周期X内用户SVN下载量的统计,特定资源下载提示报警,高权限用户下载行为提示。可以通过邮件、钉钉、企业微信等形式通知管理员。随着安全策略的增加,报告成果物也会越来越多。

0×07 总结

自动化的审计手段只能在一定程度上监控审计泄露问题,但不能从根本杜绝问题的发生。本文只是对我们生产实践系统的一次思路分享,有不足的地方希望大家给出您宝贵的意见,帮助我们改进。

本文提供了内部监控和外部监控二种方案:

1.Github外部监控:给大家推荐一个方案:https://github.com/freebuf-friends/x-patrol

2. 内部监控:要搭建自己的日志系统,就推荐文章,以大家的工程能力搭建系统和实现监控都不难。ELK、SPLUNK、Graylog根据场景选择,这种系统是平台系统,构建完成了可多次重用,不只可能分析SVN行为审计,可以分析各种数据行为。

相关文章

请戳:

一般型网站日志接入大数据日志系统的实现:https://www.freebuf.com/column/166112.html

老树新芽:Windump与大数据工具结合做流量统计分析:https://www.freebuf.com/articles/network/144767.html

*本文作者:糖果L5Q,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。

发表评论

已有 32 条评论

  • softbug  (7级) i am here!  2019-04-30 回复 1楼

    有什么用,别人建设了那么久的开发机制,随便上传到github就能搞定

  • freebuf01  (2级)  2019-04-30 回复 3楼

    以下只表达个人看法,另外个人也不是开发,表达不对处,多担待
    通过监控下载次数和下载用户,感觉作用不大,下载次数:一次也是存在泄露的可能,下载用户:开发人员只能上传各自负责开发的代码,而无权限下载整个项目的代码,只有几个人有权限下载整个项目代码(如代码管理人员、交付人员、代码部署人员)。代码管理以项目为单位,加以权限控制,会不会更好。个人平时代码监控中,发现的绝大多数源码泄露事件,都是某个开发者自己负责开发的代码,泄露途径也通常是从自己电脑泄露出去,很少碰到先从内部仓库下载到本地,再上传到外部这种泄露途径(像B站这次泄露,应该是这个途径,会不会是权限没控制好,或者那人本身就有权限,只是想跑路了,就不得而知)。个人感觉:一个是加强安全意识的宣贯,一个是权限的控制,如果碰到那种头铁的、要跑路的,那就不好说了。

    • 糖果L5Q  (5级) candylab.net 公众号:糖果的实验室  2019-04-30 回复

      @ freebuf01  这位开发朋友说到了重点,下载次数只是一个趋势,关注top10,是对下载量异常阀值的监控, 对于监控非常明显的异常下载监控, 比如一般人不可能一天下载上百万次请求,除非这个下载者有内部有特殊需求,如代码审计相关的大下载量。权限管理一般的代码管理系统都有配置, 代码管理的权限管理也是由人来控制的,是人控制的都可能出现疏忽。自动化系统,会对用户ID加特殊的自动化监控处理(指定用户列表), 由机器程序代替人来执行工作量比较大的重复性工作, 比如,统计谁、什么时间、下载了什么。这种需求是要管理人员和代码管理工具手动交互统计后产生结果, 而我们如果从代码管理系统的日志直接下手,能过大数据工具对日志进行自动化统计, 然后生成可视化统计, 这种大量重复的,谁?什么时间?下载了什么?的统计问题,就可以自动化完成,对管理员减轻审计时间成本。

    • 糖果L5Q  (5级) candylab.net 公众号:糖果的实验室  2019-04-30 回复

      @ freebuf01  尽量把关键权限,控制在少数人手里,对于外泄的控制的确也是一个思路。

  • 一剑飘雪  (1级)  2019-04-30 回复 4楼

    :smile: 非常不错的一揽子解决方案!另外,联系GitHub官方要求删除是不是也要写写,有个联动机制更好?应该牵头告诉公司怎么搞。虽然它跟系统无关。毕竟出现代码泄漏后,第一时间通知GitHub方,移除未授权开源代码是首要的事情,尽可能的减少暴露时间的第一要务啊!

  • 糖果L5Q  (5级) candylab.net 公众号:糖果的实验室  2019-04-30 回复 6楼

    关于更深入的讨论,大家可以关注Q群: 781666521 freebuf朋友们

  • 2222@163.com  2019-05-02 回复 7楼

    掩耳盗铃, 文科都不如, 幼儿园毕业了没?, ,非要假装自己懂行,表现自己. 哎… 这种有P用, 只能骗骗外部人员, Hook后,发现代码有读取,全部记录,但别人东西都拿走了,你最多知道泄漏了, 这又不是密码什么的,知道外人知道了,改个密码就可以了, 泄漏了就泄漏了, 一般只有高级别的才有全局代码读取能力,普通小开,只能看到自己的代码的
    所以,真要泄漏,只能是漏洞之类, 甚至是远程溢出级别的, 这类,除非系统低层hook掉, 不然不可能还有能力帮你监管文件泄漏事件

    老开发,根本不用svn,github这种垃圾东西, 太慢, 太占资源, 严重影响开发效率
    直接定期目录备份,或弄个软件,写个代码, 按天,定期备份目录到nas即可, 自己电脑,绝对不会有外行人访问,
    如果多个开发配合, 先会讨论好工作分配, 然后各自写各自的模块(.dll,so,jsp,php….),各自无权看对方代码
    只能调用对方提供的接口(给你dll,.so,或是 给你web接口),整体代码是否有后门,或是有变态级漏洞, 由项目带头人(或小组)负责检查
    一般开发组,都是老人, 还需要手把手教的人,无权进入项目组的, 所以项目可能非常大,但人数不会很多,所以管理起来不难, 真要项目超大,比如几百人(我是没遇到过这样的,通常人非常多, 要么是微软级, 要么就是这公司技术都是烂菜牙,比如xxx四十大盗,还有什么为,对外包装的像是技术公司,实际技术非常差的,外行管内行的假技术公司
    想想linux内核吧, 代码这么多, 但是真正负责的,只有几个人,其它的只是提交一下他的模块,一个新算法,一个驱动之类,比较外的代码, 内部核心层, 永远是几个人在维护
    尽可能选择老手,人少,工作质量能保证,沟通管理也方便

    • 糖果L5Q  (5级) candylab.net 公众号:糖果的实验室  2019-05-03 回复

      @ 2222@163.com,“ 老开发,根本不用svn,github这种垃圾东西, 太慢, 太占资源, 严重影响开发效率”

    • 糖果L5Q  (5级) candylab.net 公众号:糖果的实验室  2019-05-03 回复

      @ 2222@163.com 幸苦,写这么多评论。git本来是linus为linux内核团队开发的,因为用商业版的使用协议问题,git一部分是为了历史版本管理,一部分原因是为了协作,git做本地分支管理适用于开发者,Linus和linux内核团队自己本身就用git,他们因为商业版不能用了自己写一个自己用,linux作者linus最具有里程碑的软件一个是linux,另一个就是git。

      历史上微软做过的版本管理软件是vss的确不太适合用于大项目。ibm的版本管理软件clearcase这个是商业软件,用于各有历史的项目管理也很强大,cvs在国内没有svn的普及率高,超大的万人月项目,上百开发人员做几面,我做过敢说,用的也是svn和git,因为要做每日构件和回归测试,以前练Hudson,后来有Jenkins还有其他商业产品都需要配合相应的版本管理软件。目录管理这种方式我们也做过,场景是在ibm大型机和as400这种小型机做备份,对一些端末机或是服务器用户空间做备份。

    • 糖果L5Q  (5级) candylab.net 公众号:糖果的实验室  2019-05-03 回复

      @ 2222@163.com linux的.a .so windows的dll场景是不一样,静态库还是动态库,那都是库,说白了就是共通函数,一般的大项目都是cpp的项目是to b的,还有java商业项目,那都是模块实现,不属于架构,属于coding。这个系统监控的目的是发现,谁?在什么时间?下载了什么内容?的监控,是这个系统的主要功能,并提供实时统计,可视化统计。供参考。有错别字,担待一下!

    • 糖果L5Q  (5级) candylab.net 公众号:糖果的实验室  2019-05-03 回复

      @ 2222@163.com 一个项目编译2个小时左右,只能从稳定的分支自动下载代码,也不能从你本地nas目录里下啊,有高raid服务器和版本管理软件挺好,真的,不骗你朋友!

      • 2222@163.com  2019-05-03 回复

        @ 糖果L5Q  麻烦你确认一理老外的工作方式和中国的不同!!!! 老外生活很安逸,条件很好,
        所以他可以超高配置,甚至一个集群给你服务,而且实际他的代码量非常少的,
        你去看看VS.xxx版, 从2005开始就越来越不像话了, 或者说从.net开始,
        IDE多么的慢,难道他们不知道吗!! 因为他们的硬件配置相当高,
        而每个人的工作量非常少,所以他们才可以, 另外是现在国外主要是骗子阿三控制局面了,
        代码不是搬砖头,熟悉几天搬的很顺手了, 代码需要从小到大的积累的,最好小时候玩游戏
        或是其它什么的一直到长大到30多, 可能经历了20年,30年, 他的水平,才能像样,设计的东西,
        才ok,,所以最近几年,国外软件行越来越差,ibm,微软这些公司,现在已经不是软件公司了,
        他们现在是炒股公司, 最开始IBM推出云概念,也有很大成份是骗股市的,(原本是网格计算,
        但技术和计算本质原因,太难做到有意义),云里只有数据采集这个还有点用, 其它全部是不
        安全的,骗概念的,你的数据放远程谁的服务器里都不知道,什么时候被删了都不知道,这能安全?),
        国内云不云的,更是骗,

      • 2222@163.com  2019-05-06 回复

        @ 糖果L5Q  对不起. 100万行,算法,界面,数据库用户层, 服务端等所有的, i7 机械硬盘下 保证1分种内编译完成, 是真编译,不是java那种zip骗子, 2小时你什么代码, 编译个linux内核机械盘,不加 -j参数也就半小时,
        所有代码所有算法,全部自己写, 除非调用系统自带api或是开发工具默认带的库外, 其它所有代码全部自己写, 偶尔一个函数可能写起来累,怕出错, 又有人写的执行效率不错,拷他一个,其它所有自己写, 80后!!! 第一门语言是basic,学校上课是foxbase+ 然后是c, 然后没然后了, 那是高中, 大学老师教的是office,
        我们计算机老师,拨个U盘, 热插拨的理解是, 关掉系统,不拨掉电源, 插U盘,….. 大学计算期末试卷,我们利用windows RPC漏洞,拷出来, 全班包括从不去上课的,也都95分以上, 没办法, 每人统一扣掉30分, 让分数显的其它科那样低低的,又不暴露他白丁属性,, 最早玩的游戏是RA95,古墓1,PAL95, 吞食天地, 小时候看的动画片
        一休哥, 恐龙特急克塞号 ( 当然小时候就知道这片子无比恶心,会永久性伤害智商的, 这片子看了2-3集就反胃的不看了) 目前自由职业, 一直给公司当抢手, 国内99%的上市公司都是假的,都是空壳, 空壳还好的, 很多根本是买了别人的产品,说成是自己生产的. 一般公司养人累,特别是专业性的很强的,或是很偏门棘手的,如算法什么的, 公司付出1/100的费用,就可以解决,时间快,效率高,从技术到销售,包装,售后等所有能省钱,质量,风险等一条龙给他们解决掉, 而这1/100,对个人来说, 打工可能要打上半辈子的

  • 2222@163.com  2019-05-03 回复 8楼

    @ 糖果L5Q  微软的Win8,Win10就更不用说了, 烂到家了,Google除了搜索(当然我也天天用)
    其它没有一个成功的,安卓是买别人的,他们拿来后,骗了linux外,性能低下,现在一个普通程序,
    没有4G的内存都跑着都卡的, 相反apple原生程序512都顺的, apple家,从头到尾,是商业公司,
    不是技术公司,他们除了把pascal改版再改版成objc外(不知道当年Next是不是乔开的,从乔的商
    业管理看,不像是开发老手),没什么是自己的,其它全是为了配合营销,改外壳而以, 很多是根子
    上就是有问题的,以前一直是他们自己的人弄没有阿三坏事,所以没表现出来, 反之,国内呢,
    活干的越重的,钱越少, 很多做汇编的,做C的,工资5000都没到的大有人在, 什么都不会,可能
    在X华,X康之类的公司刷个rom,可能工资就好几万,还像四十个大盗之类的骗子白丁老板开的
    公司,因为股份份到钱, 搞的很多外行人以为IT业工资很高, 一般工作的代码量非常重, 一个
    人负责几百万行代码负责一个项目,很多,从低层算法到APP全部一人包,还要安装,维护,售后
    等…这类人,一般在小公司,或是设备类, 卖产品给ZF项目的居多, 你说的架构什么架构,
    代码目录结构,模块分布,用什么系统,模块函数命名,未来预留升级接口,等等叫架构?
    大家嘴管严点,不去乱说而以
    这算哪门子防盗意义? 把文件分开,这机子上保存核心,那机子上保存组件,,谁登录谁记录,
    或是拷文件有记录, 这算哪门子安全管理,不同的人,必然只能看到自己的代码,别人的代码
    是无权访问的,代码是他自己提交到服务器的,用的着到服务器上拷吗,自己电脑上就有.
    至于你说的架构不架构,本身用这词,就显的多么的白菜性,多么的笼统没穷料性,
    如果真技术,不会把这类词挂嘴上,架构构只是项目开工前,开发讨论一个方向,
    后面不会再出现架构这一词,

  • 梅西  2019-05-06 回复 9楼

    支持楼主!

    很多看官把监控系统的收益==防止代码泄露,因为监控系统的收益!=防止代码泄露,所以否定了它的价值。太不客观了。
    监控系统或者提供相似功能的系统不少互联网公司都有,包括楼上提及的DLP。
    不过,我觉得需要更进一步的是监控模型。理想情况下,应该是告警信息都需要落实,意味着需要找相关人确认,调查方和被调查方都需要耗费时间。如果是误报的话,相关于内耗。大量的误报将会淹没真实的告警信息,最终这个产品价值不一定获得认可

  • yoursshun  (2级)  2019-05-06 回复 10楼

    信息泄露的途径太多了,所以注定安全绝对不是一个“一揽子工程”,一定是各种安全举措叠加起来构建相对安全的一种防御体系,常见的举措包括办公终端权限管控、git权限管控、员工网络权限管控、终端网络邮件DLP等等,楼主的这种思路也是对常见举措的补充,支持!

取消
Loading...

特别推荐

推荐关注

填写个人信息

姓名
电话
邮箱
公司
行业
职位
css.php