我们在进行网络安全层面体系建设的时候, 需要涉及到很多安全产品。
UTM(统一威胁管理)称为集成威胁管理,是安全措施之一。我们的目标是通过整合从而实现高效运营,而不是威胁组织网络的各种风险和管理设备。它不仅仅是针对外部组织的病毒防护和各种不断演变的攻击。对于内部组织,它可能包括信息泄漏和访问有害站点的措施。
说白了就是把一些涉及到安全边界的安全产品融合到一起,都装到一个盒子里面。针对大公司核能需要一些大吞吐的平台来防护内网安全,但是针对一些小的公司, 他们可能没有这部分的预算,购买那么多那么昂贵的产品。于是乎UTM应运而生
一、UTM结构和功能
UTM结构必须有处理许多信息安全措施,因此,如果您单独实施它们,UTM结构的负担也会随着以下几点而增加。
1.所有硬件和软件成本
2.操作方法,并在实践中继续操作
3.更新到最新环境时间
4.一种新的威胁新的回应
因此,UTM的诞生是为了提高管理水平和效率,最初的UTM意味着威胁,但可以说是一种在整个防御范围内实现信息安全措施的机制。
根据通风口和设备的不同,UTM通常包含以下功能。
1.火墙
2.入侵防御系统
3.URL过滤
4.VPN
5.应用识别
6.防病毒
7.流量管理
8.数据过滤
9.文件过滤
但凡我们能想到的安全边界控制方案, 基本上UTM都可以实施。但是我们在选择这些产品的时候, 需要理性一点。如果能有这么一个完美的安全硬件, 啥都能做, 又一点都不贵,为啥没革安全厂商的命呢?
我刚才说了, 有这么多的功能, 那么性能必然会成为一个问题。看一下网络安全防御的控制手段矩阵,基于UTM的功能, 我们通常可以利用UTM实施预防性和检测性的安全控制。
二、安全建设之平台搭建
信息搜集类:
1. 基础信息
基础信息搜集包括ip,域名,端口,框架,组件信息。Ip、域名甲方可通过运维同事获取,其他获取方式仁者见仁智者见智。端口,需要我们根据获取的域名、ip进行端口扫描,这里推荐masscan、nmap,写调度脚本入库处理,记录并对比是一个持久的工作,并对端口做服务探测,有时会有不一样的收获。框架、组件信息,也许很多架构师、程序员都无法理清,这就需要我们去主动搜集。比较直接的办法是收集php.ini、pom.xml,收集相关的组件信息查看组件是否存在漏洞,比如imagemagick、fastjson等等。
2. 敏感目录、文件
敏感目录、文件的收集,防止目录出现非项目文件,比如sql、rar、test等。曾经遇到一个test页面,直接甩出admin表所有数据。建议根据自家公司的特点,完善字典,可以借用姐姐的神器(BBScan),定期监控,会有收获。此外,还有搜索引擎大法,对大型公司有奇效,因为大型公司迭代会有下架不及时、历史老页面无人维护的现象,存在漏洞可能性会更高。通过特定语法,可以让你眼前一亮,通过爬取入库,可掌握对外暴露信息,提前发现问题,走在hacker前面。
3. Github监控
Github监控,现在市面上有许多github监控脚本,各有各的长处,个人觉得要知其然知其所以然,坚持亲自动手。因为在探索的过程中,可以了解到更多的姿势点。比如防爬策略、绕过方法等。Github监控已经成为各大公司必备神器,因为很多人提交github信息泄露类都会被反馈,“内部已知晓,感谢反馈”的提示。但还是会有漏网的,这就需要优化自己的策略,让爬取更精准,更全面。比如精准查找、ua变化、失败重试策略等等,尽最大的努力把误差降到最小。一样的功能,你能做到更好,就能在赛跑中胜出!
4. 威胁情报
威胁情报,现在有很多羊毛论坛、QQ群。比如之前出现过外卖红包机器人自动抢最大红包、某咖啡被薅千万等等,很多人会把薅羊毛的方法发送到论坛或羊毛群里。如果业务方能提前发现风险,并做及时响应,可及时止损,减小损失,比如某住之前的用户信息泄露。上个直观的历史图举个例子:
5. 网盘监控
网盘方便存储、分享资料。个别员工把工作相关内容如员工资料、公司资料传上网盘,这就带来了信息泄露的风险。网盘监控自动化实现会遇到各种问题,历史的可以通过各个网盘分享站爬取,比如pansoso,panduoduo。但很难做到实时,目前没有相关接口可查,更多的在于教育宣导、限制。
扫描工具:
漏洞扫描,是每个企业必需的部分。我将扫描任务分为四类:主动扫描、被动扫描(代理扫描)、插件扫描、端口扫描。
1. 主动扫描
主动扫描,可以自主开发扫描器加以商用扫描器辅助的形势。可以编写动态爬虫,抓取url去重后放入扫描队列,但目前很少有爬虫能做到全覆盖。借助市面优秀的扫描器比如awvs、appscan、arachni等,可以根据个人喜好,嵌入主动扫描。这里我主要介绍下awvs,老版本有命令行接口,可以调度爬虫、扫描,可以定制xml文件配置不同的扫描策略,扫描结果相对比较全面。我们可以通过对比扫描,优化自主开发的工具。曾在14年写了一个调度脚本,多线程调用扫描器,并把结果读取入库统计,在一个人的安全部可以极大的简化工作。当年稚嫩的调度架构如下:
个人觉得扫描器的核心是爬虫,爬虫像一个向导,在一个好的向导的指引下,可以少走很多弯路,更快到达目的地!所以,要做好扫描器,首先要写好一个好的爬虫。目前有很多动态爬虫组件,比如phantomjs(封存归档暂停开发)、Chrome Headless等等。这里用phantomjs实现了一版。分为调度、执行、探测模块。
执行模块负责:
1.javascript动态解析,触发click等操作;
2.hook所有的网络请求;
3.静态页面链接分析,如href、frame等等;
4.自动分析表单幷提交。
执行模块获取数据后反馈给调度,调度根据去重算法、爬虫深度判断是否继续发送到执行模块。探测模块其实就是用字典去探测是否存在特定目录、文件,执行结束后发送给调度深入挖掘。测试了爬取http://demo.aisec.cn/demo/,结果只能说还算可以,还有很大的改进空间。
2. 被动扫描
曾经遇到过这样的情况,每天大量检测任务,纯手工又慢又累,而且容易遗漏。像XSS,xxe等常规漏洞,可以把检测方法脚本化,是知识的积累的积累过程。把重复的工作做简单,把简单的事情做好是必须具备的能力。做测试的同学可能有比较深刻感触。因此,被动扫描是刚需。设计原理大同小异,选用mitmproxy作为代理,截取流量,去重后发送到后端任务队列。分享下扫描器设计思路,希望能给需要的朋友带来灵感。扫描器采用纯python实现,前端flask展现、mitmproxy代理、redis消息队列、celery任务队列、mongodb存储。大致架构如下:
Web界面:
Celery队列调用特定的检测函数(xxe、端口扫描等等),实现检测。此处有一个tips,在使用流量时,有部分字段是不能带入扫描的,否则检测可能失效,比如content-length。此处只举一个例子,检测方法仁者见仁智者见智。但不管主动、被动、端口、插件扫描调度方法是一样的。
3. 插件扫描
0day的泛滥,特定漏洞检测已经成为常规需求,快速定位发现问题,插件扫描应运而生。世面上有不少优秀的插件,如bugscan、xunfeng,目前收集的插件大概2k个左右。曾经有个哥们让我帮忙把插件改成符合他的调用模式,其实摸清插件的运行规则,返回数据套路,写一个集成调用函数,完美运行!
4. 端口扫描
端口扫描的目的是为了防止端口异常开放。如22,3306,6379异常开放,可能导致破解、未授权等风险。定期的扫描,可以让业务方及时发现问题,规避风险。
漏洞多数是因为疏忽、无知导致,安全教育和培训是必不可少的。持久的知识输出,可以加强员工的安全意识,减少人为因素导致的安全问题。赏罚公告、知识分享、小课堂、漏洞预警,让员工意识到安全和自己并不遥远。