在2015年11月20号下午SDCC 2015安全论坛,我跟大家分享了《运维安全那些事》这个议题,之所以选择这个议题是因为目前大部分中小型企业对运维安全都不够重视。中小型企业一般是开发人员写代码,开发人员自己上线。然而每个开发人员都有自己的风格,没有一套标准的上线流程,这也导致了安全问题频发。
运维安全作为企业安全保障的基石,特别是互联网企业,它不同于Web安全、移动安全、或者业务安全,因为运维安全位于最底层,或涉及到服务器、网络设备。基础应用等,一旦出现安全问题,会直接威胁到服务器的安全。而在企业日常运营中,运维安全事件的出现通常预示着这个企业的安全规范、流程有问题,这种情况下就会不止一台机器有同样的漏洞,会是一大片,甚至波及整个公司的核心业务。
运维安全其中最核心的一个问题就是弱口令,那么到底什么是弱口令?(如图1)以上这些大家认为哪些是弱口令呢?在我看来,这些都是弱口令。
图1 :弱口令
大家可能有些不理解,像第三个已经满足数字特殊字符和字母的组合了,甚至第五个第六个都满足大小写字母数字和特殊字符的组合了,为什么还被定义为弱口令?原因很简单,这些都是英文键盘的常见组合,而且在科技比较发达的今天,这些组合早已被列为弱口令的行列。真正的强口令是指8位数以上无规律的大小写字母和数字的组合。
图2 关键词搜索(Port:6379 country:China)可以搜到19073条记录
图3 尝试本地生成一个密钥文件
说完弱口令,最近有两个漏洞闹得比较火,一个是Java反序列化漏洞,这个由于没有实践具体细节就不在这里讲了,可以参照(http://blog.chaitin.com/2015-11-11_java_unserialize_rce/)。另一个就是redis配置不当可以导致机器被入侵。我们从闹得沸沸扬扬的redis事件说起,这个事件起源于2015年11月初,网上的一篇分析文章称,只要redis是用root启动的并且未授权的话,就可以通过set方式直接写入一个authorized_keys到系统的/root/.ssh/目录下实现免密码登陆他人的Linux服务器。从而达到入侵成功的效果。
图4 将生成的密钥写入一个文件
图5 往互联网上存在redis漏洞的机器写入一个crackit的key
图6 切换目录,并将刚刚写入的key重命名为authorized_keys
图7 然后尝试通过登陆这台机器
通过这个例子,大家要思考几个问题:
1. redis服务为什么要使用root用户启动?
2. 服务器没有使用证书认证?
3. redis服务没有授权
4. redis端口为何暴露在公网,且没有ACL或白名单?
这里再说个例子,大家都知道互联网端口有1-65535这么多端口,有些人喜欢耍小聪明,自以为把端口改成别的就会减少受到攻击的概率,我之前的案例里面有个人把原本是21端口的ftp改成85,把原本是22的ssh端口改成了87,开始也挺迷惑的,后来探测了banner就知道85实际上是ftp服务,87端口是ssh服务,而恰巧ssh服务有弱口令用户,然后就没有然后了。其他的服务原理也同上。
自2011年至今,互联网已经超过10亿条数据泄露,其中包括腾讯、天涯、Sony、7k7k、Adobe、小米、人人网、新网、万网、17173等众多知名平台,而据我统计,不公开的泄露大概是这个数据的4倍之多。这些泄露的数据被一些技术人员做成了商业化盈利的平台:社工库。大家可以从Google上搜索一下社工库,大概有4-5页结果(可能因为法律法规的原因,百度不会收录这些平台),需要自行翻墙去Google搜索。这些社工库大概有两种盈利模式,第一种是我有这些数据,你如果匿名查询的话,查询结果是打码的。当你购买我的VIP账号以后,这些数据就变成了明文,一般一个VIP账号卖到68-128RMB不等。另一种就是我有这些数据,你如果想把关于你泄露的数据从我这里抹掉,你需要付费,按条计算。
这些已经泄露的数据有时候又是APT(Advanced Persistent Threat)攻击的帮手,我不建议大家用公司的邮箱或者别的企业凭证去注册一些自己的社交平台,这样一旦这些社交平台出现安全问题,将会暴漏你公司的邮箱、ID等一些关键信息。特别是像公司的VPN、邮箱、OA这些系统,建议在部署的时候都使用双因素认证或者手机短信二次验证。这样能大大提高这些内部系统的安全性。
WooYun漏洞报告平台是一个位于厂商和安全研究者之间的安全问题反馈平台,在对安全问题进行反馈处理跟进的同时,为互联网安全研究者提供一个公益、学习、交流和研究的平台。这次分享的内容包括我个人从WooYun平台上近期白帽子提的比较经典的6与运维安全相关的漏洞:
【一次成功的漫游京东内部网络的过程(由一个开发人员失误导致)】
1. 首先研发人员将公司的代码发布到第三方代码托管平台,例如GitHub。
2. 其次代码的某些配置里面有发邮件的功能,并且调用了公司的邮箱。
3. 公司的邮箱与VPN的认证是互通的,且VPN没有双因素验证。
4. 恶意用户通过这个账号登陆了企业的VPN,从而达到漫游内网的过程。
【我是如何拿到高德7个vcenter和漫游内网的】
1. 首先研发人员将公司的代码发布到第三方代码托管平台,例如GitHub。
2. 其次代码的某些配置里面有发邮件的功能,并且调用了公司的邮箱。
3. 邮箱没有对通讯录遍历功能进行限制,导致遍历通讯录
4. 对所有的用户进行一次弱口令的洗劫(参考图一的弱口令),是用Burpsuite破解(简称:BP)
5. 得到一个运维或者运维组员工的邮箱,在邮件里面找到了明文密码.txt
【百度某站漏洞导致敏感信息泄露Getshell(涉及至少66W+的用户数据含密码可内网)】
1. 上线前没有进行安全检查,.git目录外泄
2. 检出源代码,得到UC_KEY
3. 利用UC_KEY得到webshell
4. 通过webshell内网
【搜狐的zabbix,可导致内网渗透】
1. zabbix默认口令(admin/zabbix)
2. 执行正常命令测试命令执行模块
3. 执行恶意命令使服务器反连到你的机器
4. 得到zabbix权限的shell
5. 提权的提权,内网的内网
【558同城某业务多个站点存在弱口令导致Getshell(内网小漫游)】
1. Tomcat业务manager模块存在并开启
2. 配置了tomcat-users.xml,并且存在弱口令
3. 上传war包得到webshell
4. 提权的提权,内网的内网
【神器而已之奇虎360某站GETSHELL内网漫游到webscan了】
1. 网站备份文件放在WEB根目录下,并且能被用户下载
2. 网站代码存在漏洞
3. Shell之后漫游内网
我们目前全部的架构基本上来自于开源平台,抓包程序是基于libnids使用c/c++在Linux下开发的一款轻量级抓包程序,可以直接将抓包的结果写入到Redis里面,经过处理再将结果输出到ES集群里。这是日志收集的工作流程。IDS(Intrusion Detection Systems)是我们基于开源引擎suricata二次开发的一套IDS系统,里面加入了网卡驱动模块PF_RING,可以降低网卡抓包的丢包率。目前在做的就是旁路阻断恶意流量。
总结
最后总结一下我对安全的理解,引用WooYun平台著名白帽子“猪猪侠”的名言:安全是一个整体,保证安全不在于地方有多强大,而是要找到自己薄弱的地方。不要片面对待安全,即认为不出安全事故就是天下太平,一定要有危机意识。
作者简介
宗悦,万达信息科技有限公司信息安全工程师,五年信息安全工作经验。现负责企业入侵检测/系统,日志分析系统,安全行为分析系统的搭建与日常维护。曾担任网信金融网络安全工程师,当当网安全工程师。
本文选自程序员电子版2015年11月B刊,该期更多文章请查看这里。2000年创刊至今所有文章目录请查看程序员封面秀。欢迎 订阅程序员电子版 (含iPad版、Android版、PDF版)。