文章内容

2017/2/28 11:10:53,作 者: 黄兵

关于阿里云经典网络的问题

我本来想推动更成熟更为安全的VPC解决方案的,但发现阿里云官方的这个言论相当的误导用户,似乎还是想让用户信任阿里云的经典网络。既然这样,我觉得我非常有必要写下这一篇文章来更为详细地说明一下这个事。

2013年的阿里云

2013年,我在阿里商家业务部做聚石塔,聚石塔的底层是阿里云。当时,聚石塔的安全问题很严重,有很多商家和买家的业务数据外泄,所以,成立了一个专门负责安全的小组。阿里安全部门也专门派人来强力支持。

当时有一个很大的安全问题是——阿里云的内网多个租户居然是通的。我团队的一个花名叫焦义的同学做了一个这样的测试——用自己的钱在阿里云上开了一台机器,然后随便访问聚石塔里的用户的机器,当时做这个测试的时候,阿里安全部门的Suddy、商家业务部的安全负责人沧竹,都在旁边。

这个事情,由我和玄难提给了当时负责聚石塔阿里云的产品经理许玉勤,经过了长达几个月的沟通,最终阿里云没有解决这个事,所以,只能由聚石塔来解决。于是我们就给聚石塔的租户设置安全组,因为底层支持的太不好,所以设置的很死,而用户又需要在自己的集群中相互通信,所以,当时的解决方案是,需要用户申请,我们才开了3000-3100的端口范围。(当时这个项目我在聚石塔做了好几个月,扯皮无数,所以我记忆非常深)

注:当时的阿里云是不让用户编辑安全组的,内网是全互通的。如果我没有记错,到了我快要离开阿里的时候(2015年)才让用户可以编辑安全组的。

(上面的事主要是回复——阿里云的内网是不是一直都是默认不通的这个问题)

经典网络的安全问题

关于经典网络的问题太多了,一方面是内网IP不够用,另一方面是配置复杂,最重要的是——经典网络是有非常严重的安全问题!

就算你用安全组来隔离,经典网络都存在非常严重的安全问题!

就算你用安全组来隔离,经典网络都存在非常严重的安全问题!

就算你用安全组来隔离,经典网络都存在非常严重的安全问题!

原因如下:

1)这种网络结构从设计上不可避免的把多个租户放在同一个内网网段!所以,物理层面上来说就是通的!我相信这点阿里云不会否认吧。

2)动用安全组来隔离用户是一种相当复杂的事,复杂的东西就容易出错!因为,网络隔离的手段只有配置安全组。所谓安全组就是iptables的配置!而且是在每台宿组机上配置,大家可以想一下,一台机器可以配置多少这样的规则?这是有限制的!而且是在管理上的很复杂的,不但对用户来说很复杂,我相信对阿里云的开发和运维来说也非常复杂!

所以,这种通过安全来隔离多租户是一件很容易出错的事,当租户的数量越来越多的时候,或是当一个租户的机器数量越来越多的时候,配置出错这事的概率就越来越大!

所以,正确解决的这事的问题是——VPC、VPC、VPC!这对阿里云和用户都好!这是个双赢的解决方案!

我不是做安全的,我是做软件的,我相信VPC比安全组更安全这个事,安全的同学也不反对吧。

注:我都离开阿里了,还在为阿里提建议找Bug,作为阿里云,你们应该感谢我才对!

经典网络还有什么风险

那么,阿里云的内网通还是不通呢?如果你有阿里云的机器,而且你在经典网络下,你自己可以测试。用 `nmap` 命令扫呗!

你看,我个人在阿里云上的 VM 在 10.25.0.0/16 这个网段。我随便扫一下,一堆机器都扫出来了:

$ nmap -v -sT 10.25.6.0/24 --open

你还可以扫个更大的网段(专扫redis):

$ nmap -v -sT 10.25.0.0/16 -p 6379 --open

关于我扫到的redis一堆,然后用 redis-cli 可以登上,不过大多数都需要password,那些不需要的我就不贴出来了。要穷举一下密码的事我也就不干了。(另外,还发现有租在阿里云上建SVN,嗯,没有验证,代码没拉了,因为代码库太大了)

好!那么问题来了,我们姑且认为阿里云在经典网络下的各个租户都是隔离开的,那么为什么会有那么多的用户能被扫出来?可以 ping 通,可以 telnet,甚至可以 login !

最关键的问题是——这为黑客搭了一个高速公路啊(说高铁都不为过)

理由如下:

1) 我本来在公网上扫端口,我分不清哪些IP地址是服务器的,现在好了,上阿里云内网里扫一下,100%都是服务器,效率提高很多啊。

2)另外,经典网络的IP还都是连续的,这太TMD的爽了!

3)我再打个 route 命令看一下路由表,原来还有好多别的内网网段哦。

4)最爽的是,在内网发起攻击,带宽好快啊,而且可能还没安全监控哦……

5)要是运气好,说不定我还能搞定阿里云的控制系统……

其它还想说的

0)给围观群众的话

  • 我上面的东西全部都是事实,诚实是做人最基本的素质!但是无奈别人未必信我,所以,我留了一些人名在上面,对我也是一个佐证。

  • 另外,我可能会说错,我可能会说出不中听的话,但我保证我一定说我心里的话,因为我觉得我心口如一是对方最大的尊重,那怕我心里的话不中听。

  • 最后,对于这个事,我强烈建议不要因为官方说安全组默认隔离是没问题的你就松懈了,那些黑客要的就是你的松懈!

1)给安全领域同学的话:

  • 不好意思,我又跨界了。如果我说的有什么不对的,欢迎来打我的脸,死死的打,因为,最终受益的会是用户!所以,怎么做对社会都是有益的!

  • 另外,我虽然没有做过安全,但是我个人以为一个安全人员的“安全观”应该是——在面对任何的安全问题是都应该是非常严谨、小心求证、做最坏打算,且不会说出100%没问题的话的。因为,我做软件也是这样的。

2)给阿里云的话

  • 我已离开阿里,现在还是阿里的用户,也是阿里云的用户,我希望阿里云对用户能秉承“用户第一”和“诚信”的价值观,要更多的听取用户给你们提的建议或意见,一起来推动用户使用VPC,这是个双赢的结果啊,不是吗?

我打五笔,行文也快,所以,文中一定会有让你费解的错别字,见谅!

(全文完)

以下为耗子哥的科普一下公有云的网络》文章~

@一乐 同学发了一篇微博(http://weibo.com/1819367693/EwZFypkK6)说了一下因为一个安全问题的疏忽中招的事。

大意是redis有一个可以提权访问服务器安全漏洞,但是因为一乐家的redis服务器没有暴露给公网,所以一开始也就没有特别在意,不料最后还是被攻破了,原因虽然是这个服务器没有暴露在公网,但是因为阿里云的内网各个租户是可以互相访问的,所以,也相当于暴露给了别人……


在讨论这个事的过程中,看到似乎大家对公有云的网络并不是很明白,所以,写下这篇文,希望大家都注意起来,以免出现公有云上的安全问题。


安全组


阿里云的内网默认是经典网络,也就是说,不同的租户是互通的,如果你只想让你自己的机器访问的话,那么你要给你每一台机器都配上互相可以访问的安全组。安全组是AWS的Security Group的中文翻译,说白了就是防火墙,你可以简单理解为你Windows机器上的防火墙——其中标明了网络出站和入站的规则。


这种经典网络就好像一个公司内的办公网络一下,所有员工的电脑都可以互相ping通和访问的(这就是为会什么有些病毒可以在公司内网里泛滥)。如果你不想让别的员工访问你的电脑,你就需要设置你Windows机器上的防火墙设置。


但是,一台个人机器还好设置,如果你是企业用户,你的机器多了,那么,安全组这种设置可能就会是一个恶梦。原因如下:


  • 安全组是白名单,所以当你有新的机器加入或是变更了,你需要手动的配置一下,另外,安全组的条数是有限制的,所以,维护起来其实非常啰嗦的。

  • 你可能会说,不用把安全组配置在IP上吧,配置在网段上就可以了。当然可以,不过,这样一来,就会涉及IP地址段的分配管理。也就是说,系统管员需要把某个IP段分给我,并确保不能让别人来用,否则,我的安全组就等白设置了。

  • 在公有云上,这种为每个公司分配一个专用的IP段的方式根本不靠谱。一方面,这样做会导致 IP段会不够,另一方面更为主要是因为,这会涉及非常复杂的IP段管理,对于云平台的主机迁移、跨交换机、跨机房等等都非常不利。


所以,在这样的经典网络下,对于你的机器的安全组的管理,完全是没法管的,因为是静态的,而且随着机器数据越来越多,管理起来还是非常复杂的,所以配置错误这种事么,基本上是高概率的。


VPC


真正解决内网多租户互相隔离的方案应该是VPC,VPC这个词应该也是AWS发明出来的,全称叫Virtual Private Cloud。这个方案让用户自己定义自己的内网网络,你可以定成:172.13.x.x,你也可以定义成192.168.x.x,随便你定。就算是不同的租户定义成了相同的私有网络也没有问题。定义完后,就可以让你的虚拟机加入你定义的VPC网络。


VPC这个东西不是什么新的概念,一般来说有几种实现:


  • 1)一种是在交换机上配VLAN,但是因为VLAN ID 是12bits,所以受限于4096个VLAN,对于私有云也许够用了,但对于公有云来说,完全不够用。所以,公有云上不能采用这种方式。

  • 2)第二种方式使用虚拟路由器的方式,这种方式的VPC基本上都是通过hack底层的虚拟化系统完成的,也就是说,在Hypervisor层虚拟交换机中实现了一个类似路由器的东西——通过一个用户自定义的虚拟IP和实际IP的关系做packet forwarding或是overlay的机制等。这种方式的确是可以支持很多网段了,但是有两个问题:A) 路由的节点维护相当的复杂,只要集群规模一大,这种方式基本上来说,无论从复杂度还是从性能上都hold不住了。B) 就算你hold这种复杂度,你的虚拟路由器也无法超过2000个的规模。

  • 3)AWS的VPC充分认识到了上述的两种方式的弊端。因为有上述的那样的局限,就意味着可能你的机器资源还有,但是VPC已达到全局限制了,导致你再也无法开新的机器了。在https://www.youtube.com/watch?v=Zd5hsL-JNY4上,AWS讲述VPC的总体的设计。有一个中心式的Mapping Service,在二层和三层上告诉源机器目标机器的MAC和IP,然后直接通信。然后在各个宿主机上有一个Mapping Service的Cache来从中心的Mapping Service更新相关的变更。


上述的实现细节无论怎么样,在这里我只想表达的是——VPC才是对多租户网络隔离的最佳方式(至少目前是这样的),而安全组则不是。VPC就像可以让企业自由定义自己的内网,就像在私有云里玩的那样。


在VPC上,安全组包括网络ACL就可以成为一个非常不错的补充了。VPC这个基础设施还可以让你配置自己的路由表什么的。总之,这是一个基础设施,在上面可以非常方便的扩展很多东西,比如用户可以用VPN接入、虚拟网卡等等(这个网络方案的扩展性是很强的)


我认为,VPC这个事应该是默认为用户开启的,是在VPC上配置安全组,而不是提供VPC和安全组两套相互独立网络方案。然而,阿里云不是这样的,而且,今天的阿里云的VPC还有很多问题。(原因不说了,原因有很多,本文不是八卦文,所以这里就不展开了),希望阿里云多参考一下AWS。


AWS上是默认是分配一个Default的VPC的(172.31.x.x),AWS的VPC是免费的,不过VPN是收费的。


其它


虽然公有云可以帮助企业降低运维成本,但不可否认,企业上公有云是有一定的风险的,如果我记忆准确的话,我记得我在Amazon里看到的一个曾经的一个说法:如果不做 VPC 和 IAM 这两个东西,企业将无法上云,AWS 也就不用做了。IAM也是一个和安全相关的东西,大家也要小心配置IAM,不然有可能也会出现安全问题,对于IAM这个东西阿里云也有一个对应的,不过还有很多课要补。

转载自:微博@左耳朵耗子,博客:http://coolshell.cn

分享到:

发表评论

评论列表