Total Pageviews

Thursday 2 March 2017

经典网络的安全问题



关于经典网络的问题太多了,一方面是内网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,这是个双赢的结果啊,不是吗?
(全文完)

科普一下公有云的网络
@一乐 同学发了一篇微博说了一下因为一个安全问题的疏忽中招的事。​

大意是redis有一个可以提权访问服务器安全漏洞,但是因为一乐家的redis服务器没有暴露给公网,所以一开始也就没有特别在意,不料还是被攻破了,原因虽然是这个服务器没有暴露在公网,但是因为阿里云的内网各个租户是可以互相访问的,所以,也相当于暴露给了别人……
我简单地回复了一下这个事,就说让我想到了以前和阿里云解决多租户内网必需隔离的事(是什么事我也没细说,只是简单的感叹一下)。结果引发了些敏感的人的质疑和口水。那些口水对我来说无意义,不过,这个期间看到似乎大家对公有云的网络并不是很明白,所以,写下这篇文,希望大家都注意起来,以免出现公有云上的安全问题。
安全组
阿里云的内网是经典网络,也就是说,不同的租户是互通的,如果你只想让你自己的机器访问的话,那么你要给你每一台机器都配上互相可以访问的安全组。安全组是AWS的Security Group的中文翻译,说白了就是防火墙,你可以简单理解为你Windows机器上的防火墙——其中标明了网络出站和入站的规则。
这种经典网络就好像一个公司内的办公网络一下,所有员工的电脑都可以互相ping通和访问的(这就是为会什么有些病毒可以在公司内网里泛滥)。如果你不想让别的员工访问你的电脑,你就需要设置你Windows机器上的防火墙设置。
但是,一台个人机器还好设置,如果你是企业用户,你的机器多了,那么,安全组这种设置可能就会是一个恶梦。原因如下:
1)当你有新的机器加入或是变更了,你需要让所有的机器都知道这台机器。比如你有100台机器,新增的这一台你就需要让那100台都知道。或是,你这100台中有一台的IP变了,你需要让另外99台的安全组都知道。
2)你可能会说,不用把安全组配置在IP上吧,配置在网段上就可以了。当然可以,不过,这样一来,就会涉及IP地址段的分配管理。也就是说,系统管员需要把某个IP段分给我,并确保不能让别人来用,否则,我的安全组就等白设置了。
3)在公有云上,这种为每个公司分配一个专用的IP段的方式根本不靠谱。一方面,这样做会导致 IP段会够,另一方面更为主要是因为,这会涉及非常复杂的IP段管理,对于云平台的主机迁移、跨交换机、跨机房等等都非常不利。
所以,在这样的经典网络下,对于你的机器的安全组的管理,完全是没法管的,因为是静态的,而还是非常复杂的,所以配置错误这种事么,基本上是高概率的。
VPC
真正解决内网多租户互相隔离的方案应该是VPC,VPC这个词应该也是AWS发明出来的,全称叫Virtual Private Cloud。这个方案让用户自己定义自己的内网网络,你可以定成:172.13.x.x,你也可以定义成192.168.x.x,随便你定。就算是不同的租户定义成了相同的私有网络也没有问题。定义完后,就可以让你的虚拟机加入你定义的VPC网络。
一般来说,VPC是通过hack底层的虚拟化系统完成的,也就是说,在Hypervisor层虚拟交换机中实现了一个类似路由器的东西——通过一个用户自定义的虚拟IP和实际IP的关系做packet forwarding或是overlay的机制等。Anyway,实现细节不重要。
重要的是VPC才是对多租户网络隔离的最佳方式(至少目前是这样的)。VPC就像可以让企业自由定义自己的内网,就像在私有云里玩的那样。
在VPC上,安全组包括网络ACL就可以成为一个非常不错的补充了。VPC这个基础设施还可以让你配置自己的路由表什么的。总之,这是一个基础设施,在上面可以非常方便的扩展很多东西,比如用户可以用VPN接入等等(这个网络方案的扩展性是很强的)
我认为,VPC这个事应该是默认为用户开启的,是在VPC上配置安全组,而不是提供VPC和安全组两套可以相互独立网络方案。然而,阿里云不是这样的。(原因不说,省得又是一堆口水)
AWS上是默认是分配一个default的VPC的,AWS的VPC是免费的,不过VPN是收费的。
(我建议阿里云参考一下AWS,但有个似乎像是阿里云的小同学评论里回复我说——AWS懂网络么?……)
其它
虽然公有云可以帮助企业降低运维成本,但不可否认,企业上公有云是有一定的风险的,如果我记忆准确的话,我记得我在Amazon里看到的曾经的一个说法:如果不做 VPC 和 IAM 这两个东西,企业将无法上云,AWS 也就不用做了。具体原因不在这里展开了。

No comments:

Post a Comment