随着软件供应链攻击的越来越多,相信大家已经对这种攻击方式有所了解了,修改软件下载源头的软件代码,植入恶意,诱导下载使用是这种攻击的主要特征。Xshell 就是典型的供应链攻击,不过 Xshell 是其官网网站的程序包被放入修改后的恶意 dll 导致,因为是官方下载源所以范围更广。但扩展看,其实各下载网站、网盘、甚至 im 群工具共享等一切提供下载或更新的互联网上的存储位置,都可以作为供应链劫持的原始受害者和攻击方。Xcode 就是利用用户讨厌苹果官网下载 Xcode 缓慢的情绪,诱导大家从百度网盘中下载修改版的 Xcode,最终导致逐步扩散开来。
如果全民软件qq、微信出现软件供应链攻击。。。后果,不敢想!
那怎么避免自己的内网终端成为软件供应链攻击的受害者呢?分析软件供应链攻击者的思路,他的目的是诱导下载运行,通过内置的窃密代码窃取并外传回敏感数据,当然也有搞僵尸的。站在这个目的的基础上,我们来思考下。其实解决方向很简单,但是实现细节需要我们进一步抉择。
一、从根源出发,只用自己的
建立自研软件库,全部工具软件,甚至娱乐软件均自行实现,可见这种方法成本高的可怕,估计只有少数大鳄企业可以,如google。
分析员工的软件使用习惯,从360的全民应用的软件分类中总结下:
1、可用浏览器替代的:
1)各类视频播放器,音频播放器
2)游戏类、手游电脑版。ps:上班玩什么游戏!
3)其他,如:下载工具、图形图像、阅读翻译、网络应用(云盘等)、主题壁纸、教育学习
2、可用浏览器云服务替代的:
1)办公软件,office系列、wps系列等,可用浏览器访问的云办公替代,如google的云办公、微软的office系列
2)输入法,qq拼音输入法、google输入法、搜狗输入法等,可用云输入法代替,例如谷歌云输入法
3、没必要在公司使用,建议禁止的
1)系统工具,一般都是些优化系统类的,员工使用必要性不大;
2)手机数码,一般为手机管理等软件,且手机会自动给电脑安装软件,所以不建议员工在公司使用;
3)股票网银,这类软件比较特殊,自行开发涉及到隐私,可禁止员工在公司使用或用浏览器代替;
4、必须自我开发的:
1)浏览器程序,这个肯定是必须的;
2)刻录工具可提供专门的it服务,压缩必须自我开发实现;
3)编程开发,如vs、ecslipes等,可用开源的审计后修改使用,当然也可以自己开发
5、 需要审计供应商的:
1)行业软件,这类就是大型的专业软件了,可根据工作需要自行开发,或以担保方式购买
综上,浏览器程序、办公软件、输入法类、压缩、编程开发类等是必须自研开发的,显而易见google都实现了,如果你够牛,你也可以参考,虽然成本巨大,但是彻底摆脱了软件供应链攻击。
二、建立安全软件库,进行安全审计、及时更新
建立自己的安全软件库,软件库中的软件均经过安全人员审计,并及时推动更新,保证软件更新性。
这是常规的思路,也就是把从互联网下载的软件审查一遍,确定安全性后放入公司内部的软件库。因为绝大部分都是闭源软件,所以基本思路如下:
1、杀毒软件检测作为第一层
1)多杀软检测环境搭建。一般仅包括卡巴斯基、赛门铁克、微软等几大主流厂商,小厂经常跟风报毒、过度依赖启发式等问题,误报大,不建议作为衡量标准
2)多引擎,如virustotal,这里需要上传全部需要检测的文件,毕竟 md5 检测存在很多不存在md5的情况,写批量上传的脚本工具,请参考 https://www.virustotal.com/en/documentation/public-api/,当然也可以用virustotal 提供的工具 VirusTotal Windows Uploader ,右键全选多个文件后进行手工上传,如:
上传后浏览器会自动打开对应数量的结果页面,且会以sha256标识
b、主机hips监控第二层
建议使用Malware Defender,可到http://labs.360.cn/下载,通过设置监控规则,可记录每个程序的文件、注册表、网络等全部行为,如下
然后分析确认是否存在黑ioc。
c、专家分析作为第三层
这个取决于分析能力,一般利用虚拟机运行软件,然后分析主机日志、网络日志、进程、服务、启动项等等ioc。方法与安全监控没有本质却别,只是日志更多。
d、大数据分析作为最后一层—第四层
当前热的一塌糊涂。提取数据、定义特征,使用聚类等分析方法确定正常软件和非正常软件。但据了解安全监测应用大数据分析还不是很成熟,但也算是一个方案吧。
但虽然我们做了这么多,但是这里有几个问题无法避免
a、审查无法排除100%的问题,这涉及到安全人员的技术水平和业内攻击的手段更新情况,尤其是0day的漏洞根本是无法检测出。所以无法做到较高的安全性。
b、软件更新频繁,需要大量人力复杂,运营成本高。
c、 存储环境也需很完备,尤其是批量拉取更新等,机器性能重要
三、开放下载
开放下载的同时要建立网络封闭的软件运行环境,禁止任何未授权的软件外联行为,解决黑客窃取敏感数据的关键点。
这个思路比较独特,黑客供应链攻击的目的是控制终端,无论是窃取敏感数据还是控制机器都需要软件外联,那其实除了更新我们不需要让软件做任何外联行为,甚至我可以不让它自动更新,仅允许去官网主动下载。
那么问题的难点就演变成,区分进程和网络行为的对应关系。这个可以开发程序实现,如果懒得写代码也可以用一些工具(如cports等)记录日志获得,也可用主机防火墙日志,这个方法还是挺多,大家任意发挥即可。联网控制具体做法如下:
1、分析软件外联,不区分是否恶意
想分析出每个外联请求的原因是难度系数极高的事情,加密网络协议、加密内容、混淆内容、私有协议包装等让分析人员无法判定外联发出的请求包内容,无法判定外联目的,如下:没人能肯定软件为什么外联,也许官方说我在上报状态,我在更新,我在传输报错数据,那你就真的可以相信吗?google的chrome浏览器最近不是爆出因为bug上传个人下载文件元数据的事情嘛。
这里可以像作者一样用工具监控程序外联进行分析,当然也可以通过网络层日志+主机日志等分析程序外联共性等。
2、控制外联ip,屏蔽一切外联
可以用windows防火墙,也可以用一些第三方的防火墙,笔者直接用火绒屏蔽了联网。当然这个屏蔽不是很全面,例如我用powershell的wget操作就没有拦截,火绒的内置策略我没深入研究。还是建议用专业的防火墙,似乎毛豆个人防火墙不错,只是配置似乎很复杂。
此外,实现公司级别网络策略控制还需要考虑很多
1)统一控制是必要的
让员工自行屏蔽外联是不可能的,比较靠谱的办法是域策略、出口防火墙等,在此不再细说,相信大家这方面都了解很多了。
2)软件模块更新或组件下载
例如eclipse这类工具,需要下载很多模块,一般都是要联网下载的,用户手工触发或自动更新。这里很难排除下载的模块是否被更改,但下载地址可配置(区分配置地址和分析出真实下载地址,建立员工申请开通流程)。
我们仅开通此部分下载源的外联,其他不开放。下载后的模块和宿主程序作为一体对待,禁止其他外联(内网通信不禁止,解决联调、联合开发等问题)。
3)用户主动外联
如github同步等问题,如不允许外联则会造成无法同步等问题。好在地址是可分析后提前开通的。
虽然做了这么多,但是这里有几个问题无法避免或者说需要进一步优化
a、放开互联网下载,那么浏览器下载、迅雷下载、bit下载等工具的外联是完全放开的,如果这些工具被利用,如供应链攻击、注入、漏洞等,这里就需要结合上面提到的软件审计定义标准软件,还要使用Emet等工具防止注入和漏洞利用。当然0day的问题没法完全避免,但因为阻止了其他程序外联,那么黑客想成功的条件就变成:当前版本下载工具的0day+利用当前下载工具作恶,但其实一般都是0day后下载大马,独立运作,如果不独立运作,作恶大马因为体量大,注入到当前版本下载工具无法利用0day漏洞注入,常规注入也会被Emet发现。这个安全风险就大大降低了。
b、这种方式容易造成员工抵触,例如很多工具无法使用,如网银、游戏等工具,这就需要对外联地址进行大范围分析,不过外联地址都很固定,分析量不会巨大,但因为软件版本更新、新增热门游戏等问题,我们需要多关注软件连通性中断的问题,实时监控,联动响应分析开通,最大限度降低员工抵触。
综上,对抗软件供应链攻击还是很复杂的,每一种方法都有其优缺点,从根本解决成本太大,正所谓没有绝对的安全,只有不断的对抗!
最后,虽然讲了很多方面,但因为个人的能力有限,无法全面覆盖,欢迎各位大牛私信探讨,谢谢!!!
*本文作者:ChuanFile,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。
来源:freebuf.com 2018-04-23 10:00:03 by: ChuanFile
请登录后发表评论
注册