29

安全建设之平台搭建

 5 years ago
source link: https://www.freebuf.com/articles/es/193143.html?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

*文章原创作者:野火,本文属于FreeBuf原创奖励计划,未经许可禁止转载

一、信息搜集类

基础信息

基础信息搜集包括ip,域名,端口,框架,组件信息。Ip、域名甲方可通过运维同事获取,其他获取方式仁者见仁智者见智。端口,需要我们根据获取的域名、ip进行端口扫描,这里推荐masscan、nmap,写调度脚本入库处理,记录并对比是一个持久的工作,并对端口做服务探测,有时会有不一样的收获。框架、组件信息,也许很多架构师、程序员都无法理清,这就需要我们去主动搜集。比较直接的办法是收集php.ini、pom.xml,收集相关的组件信息查看组件是否存在漏洞,比如imagemagick、fastjson等等。

敏感目录、文件

敏感目录、文件的收集,防止目录出现非项目文件,比如sql、rar、test等。曾经遇到一个test页面,直接甩出admin表所有数据。建议根据自家公司的特点,完善字典,可以借用姐姐的神器(BBScan),定期监控,会有收获。此外,还有搜索引擎大法,对大型公司有奇效,因为大型公司迭代会有下架不及时、历史老页面无人维护的现象,存在漏洞可能性会更高。通过特定语法,可以让你眼前一亮,通过爬取入库,可掌握对外暴露信息,提前发现问题,走在hacker前面。

Github监控

Github监控,现在市面上有许多github监控脚本,各有各的长处,个人觉得要知其然知其所以然,坚持亲自动手。因为在探索的过程中,可以了解到更多的姿势点。比如防爬策略、绕过方法等。Github监控已经成为各大公司必备神器,因为很多人提交github信息泄露类都会被反馈,“内部已知晓,感谢反馈”的提示。但还是会有漏网的,这就需要优化自己的策略,让爬取更精准,更全面。比如精准查找、ua变化、失败重试策略等等,尽最大的努力把误差降到最小。一样的功能,你能做到更好,就能在赛跑中胜出!

威胁情报

威胁情报,现在有很多羊毛论坛、QQ群。比如之前出现过外卖红包机器人自动抢最大红包、某咖啡被薅千万等等,很多人会把薅羊毛的方法发送到论坛或羊毛群里。如果业务方能提前发现风险,并做及时响应,可及时止损,减小损失,比如某住之前的用户信息泄露。上个直观的历史图举个例子:

jQ3MZ3q.jpg!web网盘监控

网盘方便存储、分享资料。个别员工把工作相关内容如员工资料、公司资料传上网盘,这就带来了信息泄露的风险。网盘监控自动化实现会遇到各种问题,历史的可以通过各个网盘分享站爬取,比如pansoso,panduoduo。但很难做到实时,目前没有相关接口可查,更多的在于教育宣导、限制。

二、扫描工具

漏洞扫描,是每个企业必需的部分。我将扫描任务分为四类:主动扫描、被动扫描(代理扫描)、插件扫描、端口扫描。

主动扫描

主动扫描,可以自主开发扫描器加以商用扫描器辅助的形势。可以编写动态爬虫,抓取url去重后放入扫描队列,但目前很少有爬虫能做到全覆盖。借助市面优秀的扫描器比如awvs、appscan、arachni等,可以根据个人喜好,嵌入主动扫描。这里我主要介绍下awvs,老版本有命令行接口,可以调度爬虫、扫描,可以定制xml文件配置不同的扫描策略,扫描结果相对比较全面。我们可以通过对比扫描,优化自主开发的工具。曾在14年写了一个调度脚本,多线程调用扫描器,并把结果读取入库统计,在一个人的安全部可以极大的简化工作。当年稚嫩的调度架构如下:

Yryy6bQ.jpg!web

个人觉得扫描器的核心是爬虫,爬虫像一个向导,在一个好的向导的指引下,可以少走很多弯路,更快到达目的地!所以,要做好扫描器,首先要写好一个好的爬虫。目前有很多动态爬虫组件,比如phantomjs(封存归档暂停开发)、Chrome Headless等等。这里用phantomjs实现了一版。分为调度、执行、探测模块。

执行模块负责:

1.javascript动态解析,触发click等操作;
2.hook所有的网络请求;
3.静态页面链接分析,如href、frame等等;
4.自动分析表单幷提交。

执行模块获取数据后反馈给调度,调度根据去重算法、爬虫深度判断是否继续发送到执行模块。探测模块其实就是用字典去探测是否存在特定目录、文件,执行结束后发送给调度深入挖掘。测试了爬取 http://demo.aisec.cn/demo/ ,结果只能说还算可以,还有很大的改进空间。

uEfeIrV.jpg!web

被动扫描

曾经遇到过这样的情况,每天大量检测任务,纯手工又慢又累,而且容易遗漏。像XSS,xxe等常规漏洞,可以把检测方法脚本化,是知识的积累的积累过程。把重复的工作做简单,把简单的事情做好是必须具备的能力。做测试的同学可能有比较深刻感触。因此,被动扫描是刚需。设计原理大同小异,选用mitmproxy作为代理,截取流量,去重后发送到后端任务队列。分享下扫描器设计思路,希望能给需要的朋友带来灵感。扫描器采用纯python实现,前端flask展现、mitmproxy代理、redis消息队列、celery任务队列、mongodb存储。大致架构如下:

zU7vQ36.jpg!web

Web界面:

aEbu2yq.jpg!web

Celery队列调用特定的检测函数(xxe、端口扫描等等),实现检测。此处有一个tips,在使用流量时,有部分字段是不能带入扫描的,否则检测可能失效,比如content-length。此处只举一个例子,检测方法仁者见仁智者见智。但不管主动、被动、端口、插件扫描调度方法是一样的。

BZ7FvqZ.jpg!webYFvQruU.jpg!web

A3AFVzy.jpg!web

具体实现如上图,SQL注入调用了sqlmapapi,其他检测都是根据特定漏洞定制。比如平行越权,首先根据基准页面的反馈,查找相关的敏感字段(手机号、订单号、身份证号等等),然后根据id左右偏移,看返回。越权类很难做到通用,但可以发现70%以上的问题。曾经见到过比较鸡贼的订单号,订单号为订单号1001111202+用户id后2位,组合订单号即为100111120288。显然这种订单号遍历难度就比较大。

插件扫描

0day的泛滥,特定漏洞检测已经成为常规需求,快速定位发现问题,插件扫描应运而生。世面上有不少优秀的插件,如bugscan、xunfeng,目前收集的插件大概2k个左右。曾经有个哥们让我帮忙把插件改成符合他的调用模式,其实摸清插件的运行规则,返回数据套路,写一个集成调用函数,完美运行!

NbEZZji.jpg!web

端口扫描

端口扫描的目的是为了防止端口异常开放。如22,3306,6379异常开放,可能导致破解、未授权等风险。定期的扫描,可以让业务方及时发现问题,规避风险。

fi6raum.jpg!web

三、知识分享

漏洞多数是因为疏忽、无知导致,安全教育和培训是必不可少的。持久的知识输出,可以加强员工的安全意识,减少人为因素导致的安全问题。赏罚公告、知识分享、小课堂、漏洞预警,让员工意识到安全和自己并不遥远。

最近看到一个《12宫》的电影,讲述的嫌犯高调调戏警察,案件拖了近10年仍未破案。最后一位漫画家把所有资料串联、分析,著作成书,最后协助警方锁定嫌疑人。这个电影看完感触很深:细心实作。每天有各种大牛分享自己的成果,我们能把需要的东西提取出来,增加到自己的体系中,这样成长会很快。站在巨人肩膀上,会看的更远!欢迎各路大神沟通交流。

*文章原创作者:野火,本文属于FreeBuf原创奖励计划,未经许可禁止转载


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK