本文作者:sol0king,首发自爱奇艺安全应急响应中心,安全内参转载。

堡垒机是集帐号管理、授权管理、认证管理和综合审计于一体的IT基础设施。它为企业提供统一框架,整合网络设备、主机系统、应用系统,具备强大的安全审计功能和防御功能。

爱奇艺堡垒机分为Web端和Client端两部分。Client端包括登录模块、管理模块和审计模块;Web端包括作业平台、服务器管理模块、发布模块等。爱奇艺堡垒机当前服务于数千用户、数万服务器,数十万授权列表。

爱奇艺堡垒机架构图

堡垒机简易流程图

01 单点登录

1.1登录入口

爱奇艺堡垒机支持SSH/SFTP/RDP/VNC等协议:SSH协议基于sshd实现;SFTP协议依赖Paramiko实现;RDP/VNC远程桌面协议依赖开源软件Guacamole实现,用户通过web访问。

1.2账号管理

账号创建管理员根据部门或者项目申请堡垒机;用户登录堡垒机Web端上传公钥,即完成堡垒机账号创建,随后可使用终端登录堡垒机Client端。

账号销毁人员离职或异动,堡垒机会定时清除该员工账号以及授权列表

1.3用户组管理

爱奇艺堡垒机支持类似Linux下用户组的概念。管理员创建一个用户组,为其授权若干服务器后;当管理员再向这个组中添加用户时,该用户自动拥有了组用户对应的授权。

1.4登录方式

为提升用户登录体验,我们支持了3种登录方式:

  1. Tab补全,输入备注或IP登录

  2. 输入序号后登录

  3. 传入环境变量登

1.5KeyLess方案

爱奇艺堡垒机实现了KeyLess方案:在该方案中,堡垒机登录服务器时使用的私钥,将不会落到磁盘,而是通过Redis和MySQL数据库将已加密的服务器私钥加载到内存中,使用后立即销毁,减小私钥泄漏的风险,增强每一次访问的可审计性。

在降低私钥泄漏风险的同时,还需要保证服务的高可用。堡垒机所在机房必须配备2个Redis和MySQL的只读实例,降低堡垒机Client端依赖单点数据库的风险。即使机房之间专线故障,用户也可使用备用域名访问堡垒机服务;当某一个只读实例宕机后,也不影响堡垒机服务稳定。

在极端情形下,若同机房的两个只读实例同时宕机,堡垒机在读取MySQL超时两秒后,会尝试转移连接其他机房的数据库;当读取Redis中服务器列表失败后,会自动降级为用户手动输入服务器IP和用户名。

1.6二次认证

主动:堡垒机管理员可在服务器授权时,设置需要二次认证的间隔时间,分为四个级别:

  1. 每次登录服务器时输入MOTP

  2. 每4小时输入一次MOTP

  3. 每8小时输入一次MOTP

  4. 每12小时输入一次MOTP

被动:堡垒机通过关联分析用户行为,发现异常登录和操作时,Client端主动要求用户输入MOTP,进行二次身份验证。

02 访问/授权控制

2.1服务器管理

主动:用户可通过堡垒机Web端添加Owner为自己的服务器到所属部门堡垒机

被动:堡垒机Web端对接了爱奇艺服务器管理平台,用户申请的服务器被创建后,将通过接口自动添加到指定的堡垒机

2.2服务器授权

主动:管理员将服务器分组、用户分组,按照服务器组-用户,服务器-用户,服务器-用户组,服务器组-用户组的方式授权

被动:用户通过“运维申请”功能,申请服务器或者服务器组,管理员审批通过即获得服务器权限

2.3登录列表同步

登录列表同步是堡垒机的核心模块:如果同步功能有问题,用户登录列表会不一致,需要登录的服务器可能不在列表中,非常影响用户体验,让用户觉得堡垒机不够稳定。为了保证登录列表一致性,堡垒机client端采用了三种同步方式:

  1. Docker启动时全量同步,耗时大约5分钟(数十万条授权)

  2. 新增同步,通过Web接口获取最近15s新增授权

  3. 为了避免用户新增和删除授权后,引起登录列表差异,每两小时执行一次差异同步(通过缓存用户列表数和用户redis中列表数比较,如果存在差异,通过Web接口获取最新的该用户的登录列表,并更新缓存)

2.4SSH-Agent

堡垒机支持SSH-Agent功能,授权时可选择是否开启该功能。SSH-Agent可以将堡垒机上的私钥加载到内存传递到用户登录的服务器,极大的方便用户批量操作服务器。SSH-Agent也会带来一些麻烦,例如通过git pull抓取代码的时候

03 文件传输

SFTP文件传输:堡垒机Client端使用Paramiko实现SFTP服务,支持各种常见SFTP客户端,上传数据可审计。同时,用户还可以使用IDE工具SFTP连接到服务器,直接在服务器上进行开发和调试。由于堡垒机带宽和Paramiko性能等问题,SFTP传输速度5-8M/s。

通过重构paramiko.ServerInterface.check_auth_publickey(),可以在

return paramiko.AUTH_SUCCESSFUL 之前自定义认证方式

大文件传输:

堡垒机还集成了“爱奇艺文件快传服务”,添加审计模块,中转用户传输的文件,平均速度可达50M/S。

04 基线规则

堡垒机支持安全基线规则集,堡垒机管理员可以定制基线规则,并应用到所属的堡垒机中,Client端通过同步程序,同步基线规则,用户操作服务器时触发规则,会执行设定动作。

安全规则包含多个条件组成,支持and, or, not, 左括号(, 右括号)操作符,例如: (条件0 or 条件1) and (not 条件2);条件可以是多个维度(当前用户名,目录,输入命令,端口等)的正则匹配

05 审计

5.1会话审计

用户登录堡垒机Client端会创建一条Session Log,Session Log关联事件日志,方便关联审计

5.2事件审计

用户每次操作都会记录一条日志,记录用户命令输入和输出,当前操作堡垒机,当前主机名,当前用户名等信息

5.3远程堡垒机日志审计

VNC和RDP协议通过web访问记录录屏日志,堡垒机将文本日志转码为mp4文件,视频进度可拖拽

5.4公钥审计

堡垒机联动HIDS,通过HIDS搜集服务器公钥与堡垒机报备公钥对比,发现异常公钥并邮件报警

5.5日志存储

堡垒机日志存储两份:一份按照时间段分表存储数据库,用于堡垒机Web端事件审计查询;一份存储到Hadoop,方便内审通过关联分析发现违规操作。另外,堡垒机日志已接入爱奇艺区块链系统,确保日志完整、无法被篡改。

06 堡垒机作业平台

6.1Web端批量操作

  • 用户设置运维脚本,脚本分为私有和公有,私有自己可见,公有所有人可见

  • 脚本安全性评估

  • 选择需要执行脚本的服务器,否周期执行

  • 执行结果写入数据库,审计

  • 管理员限制账号执行运维脚本

6.2用户定制命令 - 执行脚本(类似alias)

在基线规则的基础上,增加执行动作脚本。用户输入命令触发设定条件,执行指定脚本文件。例如:定制一条输入命令为 fileupload ansible规则,动作是执行ansible脚本,当用户输入fileupload ansible这个命令时堡垒机client 端会自动执行ansible脚本

07 总结

堡垒机作为办公网到IDC的第一道屏障,服务器运维入口,在保证4A的同时,也要尽量保证用户体验。

  1. 用户体验:爱奇艺堡垒机支持多种登录方式,支持大文件快速传输,支持IDE通过SFTP连接服务器开发

  2. 运维管理:堡垒机拥有一套完善的认证,授权系统;相比于商业堡垒机更轻量级,可定制化,支持更多的服务器运维操作

  3. 安全合规:堡垒机支持主被动式二次认证;支持基线规则检查,可异常弹窗和阻断用户操作;采用机器学习识别异常登录,账号共用;以及合规检查的日志查询系统

  4. 创新探索:堡垒机支持KeyLess方案;集成作业平台,可定时,批量执行运维脚本

关注“爱奇艺安全应急响应中心”公众号

声明:本文来自爱奇艺安全应急响应中心,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。