引言:【弹性计算技术公开课——ECS安全季】第二节课程由阿里云弹性计算技术专家陈怀可带来,本文内容整理自他的课程,供各位阅览。
一、安全事件案例回顾与操作系统安全概念介绍
在介绍操作系统安全概念前,我们先来看一下国际上曾经发生过的几个真实的安全事件。
第一个安全事件:国外某政务官员,他是一非常喜欢发推特的人,可能不知道的是,他在就任期间,他的推特账号曾经被人盗用过。像这类知名的公众人物,他们的一言一行都会对社会产生重大的影响,可想而知,他们的账号被盗用的影响会有多大。整个安全事件的过程比较简单,简单梳理一下。
在2012年LinkedIn网站被攻击,2016年,相关的数据库被泄露出去,泄露的数据库中有包含这位官员的账号和密码,通过这个账号密码,攻击者攻击了他的推特账号。
这就是典型的撞库攻击,因为在大多数人的行为习惯中,习惯性的会在所有的产品中长期使用一个或几个固定的密码。而不会特意去修改。这位官员同大多数人一样,使用同一套密码,最终导致了他的推特账号被入侵。回过头看整个安全事件,导致这一起事件的根本原因在于长期使用一套固定的密码,而且没有进行修改。
再来看另外一个安全案例,去年九月,斯里兰卡国家政务云被黑,同时丢失了四个月的重要数据。
详细看一下这个事件的前后因果,斯里兰卡国家政务云中使用一款软件叫做Microsoft exchange 2013版本,这款软件其实已经过期不再被维护,并且软件中存在着致命的安全漏洞,因为财政方面的问题,没有得到及时升级维护,攻击者通过这软件漏洞发起了勒索软件攻击,最终导致近四个月数据的永久丢失。可以清晰的知道,导致这一起安全事件的根本原因在于使用了停服的软件,软件没有得到及时的升级更新安全补丁。
回顾刚刚的两个安全案例,在案例1中,用户用于登录系统的账密泄露了以后,攻击者利用泄露的账密攻击系统,导致系统被入侵,如果访问操作系统常用的账密泄露了,攻击者能够很轻易的登录到操作系统,部署勒索键,导起关键数据信息等等危害。
案例2中,系统未及时更新安全补丁,导致攻击者利用漏洞进行入侵并部署勒索软件,攻击者经常使用操作系统内未及时修复的安全漏洞实施入侵攻击。那么该如何保护我们的操作系统呢?
我们来将操作系统的安全分为三个部分,第一部分是访问操作系统的安全性,它定义了谁能够来访问操作系统,用怎样的方式来访问。第二部分操作系统内部的安全性,包括安全补丁以及技术的安全能力等等。第三部分是涉及到法律法规的一些要求,比如审计、合规要求等等,提升操作系统安全性的办法,我们根据上述的操作系统安全性的三个组成部分,分别是提升访问操作系统的安全性、安全加固操作系统以及操作系统安全进阶这个三部分。
二、快速提升访问操作系统安全性
接下来针对如何提升操作系统安全性,分三部分详细展开。
在提升访问操作系统安全性上,快速提升访问ECS实例操作系统的安全性。内容主要分三个部分,使用密钥对登录实例、使用会话管理免密登录实例以及避免端口0.0.0.0/0的授权。
如何使用密钥对登录实例,可能这里会有部分的同学存在疑问,什叫做密钥对?密钥对实现的原理是什么?使用密钥对登陆实力有什么样的优势?
阿里云的密钥对默认采用的是RSA 2048位的加密算法生成了包括公钥和私钥,使用公钥和私钥认证的方式进行登录,是一种安全便捷的登录方式。由用户生成一组密钥对将公钥推送到目标服务器中的公钥默认存储路径下,阿里云默认公钥存储路径是 ~/.ssh/authorized_keys文件。它的登录实现原理如右图所示,用户发起登录请求,服务器端生成一串随机数,使用公钥进行加密,返回用户端加密的信息,用户端使用私钥本地进行解密,并发送服务器端解密后的信息,服务器端对比解密后的信息,对比验证信息有效才允许用户登录。
这种方式相对于传统的账密的登录方式的优点,它的优点主要有两个,一是相对于常规的用户口令容易被爆破的风险,密钥对杜绝了暴力破解的危险,另外一个是密钥对登录方式更加简便,一次配置,后续再也不需要输入密码。但是也要求需要保护好私钥不被丢失泄露,因为拥有您的私钥的任何人可以解密的登录信息。需要注意的是,阿里云不会存储私钥文件,也就是在创建密钥对时仅有一次下载密钥对的机会。
常用密钥对登录ECS实例的方法,主要有四种,第一种是使用ECS提供的Workbench,在Workbench中导入私钥连接ECS实例,若您的私钥在本地是加密的,如图所示的Workbench还可以支持传入私钥口令的方式解密访问。
第二种是使用第三方的密钥对工具,使用第三方密钥对登录工具时,需要遵循该工具的使用规则,比如PuTTYgen需要转化私钥文件的格式。第三种是需要支持密钥对的控制台命令的环境,需要SSH命令的方式进行连接实例。第四种同样是需要支持密钥对控制台命令环境,如右图所示的需要配置config文件的ECS别名以及一些比如端口号,登录账号,以及私钥地址、还有公网信息等等这信息,这种方式适合多台实例登录的场景,这里需要注意的是以上四种常规的密钥对登录方法,后面三种都是需要用户开启公网的IP才能够进行访问的。
对需要使用密钥对的用户,如何更好更安全的使用密钥对,我们有两方面的建议,第一是保护好本地私钥,第二是可以优化密钥对的服务配置。如何保护好本地私钥?常规方案会推荐用户使用密码的方式进行保护私钥。需要保证持有正确的密码的人才能够访问到私钥。在使用私钥时,每次都是需要输入密码。
一是控制台Workbench也是支持输入口令密码的方式访问到您的私钥。另外,尽可能的不使用默认的密钥对的存储位置,将私钥保存在自定义的目录中。在保存私钥的目录中设置正确的访问权限,只允许特定的用户能够访问。在保存私钥的系统上,还需要及时的安装最新的补丁和安全更新,以保护系统不受知名漏洞的影响。同时,为了防止私钥的丢失和误操作删除,还可以定期备份私钥。
在使用密钥对服务配置时,我们建议可以修改连接端口为非标准端口,密钥对的默认连接端口为22端口,很多黑客工具会针对22端口进行扫描攻击,修改端口为非标端口可以提高安全攻击的门槛,非标端口一般为1024~65535。使用密钥对登录.建议使用非root的账号登录,根据权限最小原则,对登录ECS实例的用户应该做到权限控制,避免受益过大的权限。建议您在新购实例时选择使用ecs-user的普通账号,并且在密钥对服务中配置禁止root的账号身份的登录。
另外,在启用密钥对登录ECS实例的时候,建议及时关闭ECS是实例,通过密码方式的登录,以进一步提高安全性。
ECS生产密钥对默认采用的是RSA 2048的加密方式。如果需要修改加密算法,可以使用自定义的密钥对导入的方式,在您的本地环境使用密钥对生成器生成以再导入到ECS中。目前支持的加密算法涵盖了大部分主流的密钥对算法,如右图所示的,比如RSA、DSA、DSS等等。
需要注意的是,在您的本地环境密钥对生成之后,需要导入ECS是公对,请注意检查,避免导入私钥。要使用密钥对登录ECS实例目前也存在一些限制,比如当前仅支持Linux实例,不支持Windows实例,使用密钥对登录时,通常还需要开启操作系统的22端口,并允许指定端口在本地客户端公网IP进行访问连接。
除了使用密钥对登录ECS是实例外,还可以使用会话管理免密登录实例,使用会话管理登录时具有更高的安全性。接下来我将详细介绍会话管理。
会话管理是由云助手提供的功能,相比于密钥对、VNC等方式,可以更便捷的远程连接ECS实例,且兼具安全性。从一开始的安全升级案例中,使用常规账密的登录对密码的复杂度要求比较高,并且需要定期进行修改,防止密码泄露后的风险,很难进行管理。或许大家可能会想到使用密钥对登录一些实例不就解决问题了?
答案是肯定的。不过使用密钥对登录实例的时候也会存在一些因素限制,比如常用的密钥对登录实例,通常需要开放公网IP,并且开放22端口。一旦公网IP开放之后,允许更多的人访问的ECS也就增加了对应的攻击面。
另外,无论是使用密钥对还是使用账密登录,都不能做到记录和审计,很难发现攻击者的入侵行为。
相比于传统账密的登录方式,云助手登录它有几个优点,第一它是不需要分配公网IP的就可以直接访问,避免了ECS实例暴露到公网环境,第二也不需要设置管理密码,直接免密登录,避免了账密泄露的风险。它还可以通过管理授权,可以比较灵活的分配和回收权限。另外它可以记录、审计,通过订阅对应的审计日志进行定期的安全分析,能够及时发现一些非易侵内的访问行为。
会话管理登录实例是如何做到这些,会话管理建立链接的原理。
如图所示,首先,会话管理客户端发起会话,云助手服务端通过RAM访问控制权限进行健全,健全通过后会生成用于发起链接的Web Socket URL以及10分钟内有效的token,返回给会话管理客户端。会话管理客户端通过web socket URL以及token与云助手的服务端建立了web socket的链接,云助手的服务端控制ECS实例内部的云助手agent建立web socket连接。云助手的agent和云助手的服务端建立了Web Socket 的链接。
在建立Web Socket 链接后,可以在会话管理客户端输入命令,该命令以流式传输的方式输入到ECS并执行,最终在会话管理客户端显示执行的结果。
会话管理的安全性主要在于会话管理客户端与云助手服务端的agent间的通信是使用Web Socket协议建立的。
Web Socket的连接使用了SSO加密的方式保障数据的安全,使用会话管理能够远程连接指令,不需要密码,也没有泄露密码的风险,能够通过RAM权限安全策略进行管理,云助手与云助手服务器端通过Web Socket连接,不需要通过SSH VNC等方式登录实例,所以也就不需要打开入防线端口,进一步提高了ECS安全性。
常用的会话管理链接方式主要有四种,最常用的是直接使用会话管理连接实例,另外也支持了使用会话管理端口转发连接实例。例如ECS实例中部署了不对外开放的web服务,可以通过端口转发指的方式直接连接外部服务,还有一些客户希望在使用会话管理的基础上再次进行鉴权ECS也支持使用会话管理,以密钥对以及临时密钥对方式进行连接实例。
如表格所示的,各自都存在一些优势以及不足,优点是使用会话管理都不需要用户开启公网IP、会话管理、端口转发以及直连和临时密钥对都不需要再管理密钥以及密码。端口转发以及直连也不需要开放端口,不足的地方是其中使用会话管理密钥对以及临时密钥对连接实例的时候,都是需要开放22端口的,使用会话管理密钥对连接实例的场景,同时用户还需要自己保存对应的私钥。
使用会话管理还可以很灵活的管理权限,通过权限的RAM权限策略配置,可以允许子账号连接所有的实例,也可以允许子账号连接指定的一个或者多个实例,或者使用绑定的实例标签进行筛选,只允许子账号访问到指定标签的实例,也可以限制通过指定的IP进行连接实例。
如图所展示的RAM权限配置的案例,配置也比较方便简单,对于大规模的企业产品,强烈建议使用标签的方式进行批量管理权限,便于权限的回收以及收予。会话管理也存在一些权限的限制,比如需要一些授权StartTerminalSession的方式,以及DescribeUserBusinessBehavior等等权限。会话管理的使用还存在一些限制,必须要授予一些权限,比如StartTerminalSession以及DescribeUserBusinessBehavior等等权限。
除了使用密钥对登录实例以及使用会话管理免密登录实例外,还需要避免端口0.0.0授权对象的访问。
众所周知,Linux操作系统使用了SSH终端连接,默认使用22端口,Windows操作系统使用的是RPD远程桌面,默认使用的是3389端口。通常场景下,未限制端口访问允许任意来源的访问可能导致黑客或者攻击者在未经过您的授权的情况下,通过这些端口登录到操作系统中。
如何限制这些访问?阿里云免费为您提供了实例级别的虚拟化防火墙,也就是安全组,它可以设置单台或者多台ECS实例网络访问控制,它是重要的安全隔离手段,但是它也需要经过一些简单的配置。如右图所示的,在创建ECS实例时将使用默认的安全组,默认安全组将放行22 3389 80 443等端口,开放给0.0.0.0,默认允许所有IP都可以访问。默认安全组的配置并不安全,需要经过一些简单的配置。
安全组的配置应该遵循以下几个基本原则,安全组应该作为白名单使用,而不是黑名单。安全组出入规则时应该遵循最小权限原则,避免受予过大的权限。不需要公网访问的资源不应该提供公网IP,公网IP将暴露增加您的ECS实例的攻击面,先拒绝所有的端口对外开放。
若您需要开放端口,应尽量避免0.0.0.0的授权,并需要开放的端口授权指定的IP或者IP段访问。如右图所示的案例,安全组配置了仅允许来源IP为192.168.1.100网段通过TCP协议访问到22端口,经过安全配置之后,192.168.1.100端口可以进行访问,但是192.168.0.100端口所有的请求将会被拒绝。
我们强烈建议您按照上述的原则,仅开放必要的端口提供给有限的IP进行访问,修改您的默认安全组规则配置。上面讲了快速提升访问ECS是操作系统安全的三方案,包括使用密钥对登录,使用会话管理登录实例,避免了端口所有IP的对象访问授权。作为操作系统的另外一重要的部分,操作系统内部安全也是至关重要的。
带你读《从基础到应用云上安全航行指南》——九大提升ECS实例操作系统安全性的技巧(2):https://developer.aliyun.com/article/1441588