专栏名称: 高效运维
高效运维公众号由萧田国及朋友们维护,经常发布各种广为传播的优秀原创技术文章,关注运维转型,陪伴您的运维职业生涯,一起愉快滴发展。
目录
相关文章推荐
51好读  ›  专栏  ›  高效运维

10年反黑风云:Linux下的安全攻防实录

高效运维  · 公众号  · 运维  · 2017-05-12 07:14

正文


文末有彩蛋

作者简介:


韩方

欢聚时代(YY直播)  安全中心总监

公司T4技术专家,10年以上安全领域的攻防研究和设计开发工作,对于平台安全、应用安全、业务安全等安全领域有非常深入的研究,申请过多项安全领域相关技术专利,并发表过多篇安全领域学术文章。

曾先后主导设计和开发云防 DDOS 系统、分布式 Web 入侵防御系统、Linux 入侵防御系统、移动安全加固系统、外挂对抗系统、机器人识别挑战云服务等安全领域对抗和防御系统;熟悉互联网安全技术体系,主导公司安全技术体系建设。

前言

在实际工作中,最难防的就是接近应用层的攻击。比如针对直播私有协议的机器人,冲击你的频道服务、登陆服务、支付服务等等,量大了也会变成 DDoS攻击。

越接近应用层,防御和对抗难度越大、挑战越大,误伤越大。这需要结合大数据、机器学习、业务流量模型等知识来进行综合应对,很复杂。偏底层则相对简单,有比较成熟的技术方案,越往应用层越复杂,自然人和机器人的攻击行为和正常行为就越难区分。

以上是给 DDoS 做一个补充。我们很难做的就是业务层的 DDoS,比如私有协议、YY 协议,还有我们的音频、视频协议。如果真有大量的冲击,比如你只能支撑两千万的 PCU,如果超过两千万,你怎么防御?所以需要柔性可活的思路。

本文是来自于我在欢聚时代实际工作中的实践,将分成以下3部分来讲解:

1、Linux 下的安全形势
2、Linux 下的攻击手段
3、Linux 的防御对抗

1、Linux下的安全形势

每个互联网公司或者每个公司后台用的服务器都不太一样,在YY这种主营业务是纯互联网的公司,Linux 服务器占比很高,全网几万台服务器,Windows 只有几百台,剩下都是 Linux,越是互联网公司用 Linux 的比例越高。

Linux 的安全形势为什么这么复杂?

我早年毕业的时候在华为网络安全部,当时 Linux 还不是主流,那时使用的是其他系统,比如 Hp-Unix,Aix 等,当时的使用率并没有这么普遍。随着互联网业务和开源技术的飞速发展,Linux 越来越普及了, 为什么?

有一个重要原因就是Linux上面的开源应用非常多,包括技术框架,业务选型的技术框架等等, 现在基于 Linux 的应用越来越多,导致 Linux 操作系统在整个服务器领域的应用越来越广。

当然,这么多的应用在 Linux 操作系统上使用,带来的安全问题也越来越多,下面列出的是给安全人员带来巨大挑战的漏洞们:

  • Struts2 远程代码执行漏洞通告(CVE-2017-5638)

  • Linux 内核提权漏洞(Dirty Cow) (CVE-2016-5195)

  • ElasticSearch 远程执行代码安全漏洞(CVE-2014-3120)

  • Bash 远程执行命令漏洞(Bash破壳) (CVE-2014-6271)

  • Nginx 远程执行代码安全漏洞(CVE-2014-0088)

  • MongoDB 匿名登录漏洞

  • 心脏流血漏洞

1.1 漏洞危害

著名的 Struts2 ,我印象中这几年闹了几拨,每拨都有几百人升级业务、修复补丁,几乎都要求24小时内修复。我们曾经有一个很重要的业务修复 Struts2 的时候,业务不兼容,版本不能上线,最后老大们决定暂停业务,直到修复为止,这说明这些漏洞给整个平台带来影响很大。

Dirty cow 漏洞 也很出名,在这边很多服务器也会中招,是在2016年非常出名的提权漏洞, 还有 elastic search的漏洞等等很多这样的漏洞。

2016年比较火的 DDoS 勒索,这个业务天天 DDoS 打你,那个业务,天天 DDoS 打你,直到给“保护费”为止,有的业务一天给500,有的业务甚至一天给2000......

看来黑产也是“讲理”的

MongoDB 的勒索也是很火的,几乎每种事件都可以造成勒索,这就是 Linux 下的安全形势。

很多搞安全的人接触比较多,比较熟悉的漏洞是心脏流血,还有这个著名的 Dirty cow 提权,本质是 Linux 的内存的写权限管理 bug,导致不具有写权限的进程写入权限。

2016年年底出名的事件,我们国家浙江一个厂商躺枪了。这种案例很多,僵尸物联网“肉鸡”把半个美国都打瘫痪了。

1.2 Linux下的安全挑战

业务版本快速迭代、业务开放、网络边界复杂、开源组件多元化、技术架构复杂、标准化和规范化缺乏等等,这些都是挑战。

前面介绍了 Linux 的开源组件用得比较多,同时在 Server 端用得比较广。这边总结了为什么 Linux 下的安全挑战比较多,可能和传统制造业有些区别。

对于互联网公司来说业务版本迭代很快,要有很好的安全防御的理解。比如认证机制要设计好,鉴权机制要完善,其实设计完善是不容易的。往往老板的指标是一周上线,想设计好并没有那么多的时间。业务迭代版本过于频繁也给安全带来很大的挑战。

互联网业务本来就很开放,像以前在华为有明显的网络边界,内部都是内网,网络边界很明显。互联网业务本来就是对外,所以这就造成了业务整个边界外延,整个都是开放的。机房几十上百个,整个网络都是对外开放状态。

网络边界的复杂,互联网讲求分布式部署、高可用,一般5个点、10个点、20个点。分布式部署带来网络边界过于复杂,交叉认证。

开源组件多元化,开源组件很多,五花八门,例如 缓存中间件,这个哥们儿用这个架构,另一个用那个架构,一个公司有十几个架构。如果在你公司没有达到一定高度的时候,标准化、规范化没有很完善的情况下,就更加复杂,挑战更大。

同样业务端也很复杂, 很多还有 Windows 端、移动端、Web端,各种各样的业务。今天这个功能上线,明天那个功能下线,所以技术架构是一点点积累,想做很标准的技术架构也不容易。

由于前面的版本迭代、网络边界等,带来标准化、规范化都是滞后的,像 BAT 可能做得好一点,但多数公司的标准化、规范化还是不太健全。

1.3 实际生产问题

上图展示的都是 Linux 安全挑战真实的案例,都是实实在在的工作中遇到的安全问题。

对于普通运维团队或者安全团队可能都比较常见的,像服务器资源被占用,但是不知道是哪个进程占用;发现某个进程占用资源,但是却杀不死,或者杀死一会儿又启动,因为它有守护或者自动拉起。还有密钥泄露,这个很常见。

有些人把密钥放在邮箱或者服务器什么地方存着,如果他的办公机被入侵,他的邮箱被撞破,他的密钥就泄露了。密钥泄露不是最惨的,而是密钥的密码和他的邮箱密码或者是跟他什么 CSDN 的密码用同一个,这个更惨。

大家说这是小概率事件,但是一千人,千分之一的概率发生就入侵了。还有业务被挂马,这是 Web 业务中很常见的;还有 Redis 缓存突然失效,导致 MySQL 扛不住,整个业务直接瘫痪,而且扩容不了,我只是说有这种可能性。

如果你的业务使用 Redis 缓存,而且 Redis 是默认匿名,如果真的有人做 APT 研究你们,把你的 Redis 都干掉了,业务就瘫痪了,大公司可能很长时间都恢复不起来。

操作系统 OOM,很多人说服务器怎么又 OOM?前两天才刚重装,为什么又 OOM?因为有一个木马不断提权,一提权就崩,所以肯定有 OOM,这也是实际过程中的一个案例。

2、Linux下的攻击手段

2.1 攻击方式

做防御首先要了解进攻的方式。这是一个真实的案例,了解攻防的人可以看到,这是典型的 Linux 匿名,Redis 默认匿名登陆,不需要用户名、密码。

Redis 还有几个奇怪的功能我可以分享一下:Linux 有一个功能可以通过一个端口写到本地文件,如果我要写一个文件,而这个文件是木马,那就自动拉起了。如果写入自己签名的公钥,用自己的私钥解公钥, 自己解自己的,所以直接替换公钥,就是通过 Redis。

有人问,你怎么记录下来这些呢?其实很多攻击者都会去清除掉日志,我们需要想些办法让他不能清除,保证审计可追溯,否则入侵之后就追溯不出到底是什么原因。

所以黑客用 Dirty cow 提权,黑客上来就把自己的操作清除掉了,不让你看见。你知道他要清除,你就想办法不让他侵掉,不然追查不到。

其实他入侵你的服务器不是最终目的,最终的目的是扩大战果,最简单的方式是监听和收集相关的通信,再做一些扫描之类。如果这些机器有关于运维体系的脚本、域名,可能都危险了。

2.2 渗透方式

以前给外面做分享,都觉得你说的攻击方式发生概率不是很高。不说真实案例,大家就觉得真实概率不是很高;有了真实案例,大家觉得小概率事件还是会发生。

Linux 下面渗透的方式有这么几个步骤:

  • 首先扫描,他知道你IP是否存活,前端是否有防火墙;

  • 扫描之后尝试渗透,看有哪些端口的权限是什么;

  • 接下来看通过开源的应用或者渗透方式怎么入侵,有哪些东西可以利用;

  • 入侵之后,普通账号怎么提权到 root,最后怎么扩大战果。


这是 Linux 常用的渗透,扫描之类的,大家可以试一下。

2.2.1 SSH暴力破解

在很多公司规范里面,SSH 不允许对外开放,要开放给跳板机,这都是有目的的。换个端口,很多默认扫描是指定的 2 2 ,这样可以减少被发现的概率。

如果 SSH 登陆只认跳板机也可以防止被撞库。大家想一想你们自己的密码,和在公司用的密码,服务器的密码和私钥密码和互联网的密码有多少是相同的?比如12306、京东等都有可能相同,人家一旦泄露了,密码就泄露。所以这个撞库的概率不能避免,因此要应对暴力破解。

2.2.2 查看历史命令(histroy)

黑客侵袭你的服务器之后,histroy 给他提供很多线索,所以你的帐号退出之后 histroy 要清掉。

2.2.3 Redis入侵实战


上图演示了怎么通过 Redis 写入反弹 shell,黑客常用这种案例。Redis 默认就是匿名,他信任可信客户端。所以这种机制导致你在使用上要整合很多认证机制和访问控制,否则会非常危险。另外这个功能都是可以关闭的,servers 可以不要写的,相当于安全极限。

Redis 匿名,如果公司没有统一的规范和标准,一般作为开发人员来说,直接 Redis 是匿名最简单、最高效,所以Redis匿名漏洞在互联网环境中非常多。PoC工具也非常多,基本直接沦陷。

2.2.4 提权演示

这是 Linux 的声卡内核提权的漏洞,我介绍两个提权,这是其中一个,从普通用户提权到 root。这是我录的视频,可以看一下。


真实案例的提权和这个一样,没有太多区别。既然打开这个视频,再给大家看看 Dirty cow 的提权,这是2016年最火的提权漏洞,80%的 Linux 会沦陷。







请到「今天看啥」查看全文


推荐文章
晚安少年  ·  宁愿吵架,也不要把日子过冷了
8 年前
实验与分析  ·  实验室有毒试剂一览表
7 年前
热门视频集汇  ·  这个视频建议男女都看看!
7 年前