王智敏,汉瑞洁
(中国铁路兰州局集团有限公司 信息技术所,兰州 730000)
随着信息技术和计算机网络技术的快速发展,互联网技术的应用已经突破企业内部应用领域边界,互联网与企业内网交互应用场景日趋丰富,互联网正在深刻地影响着各行各业[1-2]。铁路行业中互联网建设与应用已经具有一定规模,形成了铁路12306互联网售票系统、95306货运综合服务平台等关键公众服务平台,互联网建设与应用也正朝着统一化、标准化方向发展[3]。
网络安全传输平台(简称:安全平台)是铁路计算机网络纵深防御体系中网络边界防护的基础设施[4],承担互联网与铁路内网(简称:内网)、移动设备与地面网络之间安全、可靠、实时的信息传输任务。平台主要由数字证书认证服务、铁路外网(简称:外网)反向代理服务、 内网正向代理服务组成,铁路互联网应用系统均通过安全平台进行内/外网信息交互。随着网络安全威胁的范围和内容不断扩大和变化,安全平台的短板逐渐显露,如:外网暴露点增多,存在性能和安全隐患;既有软件开发包不能满足复杂的应用项目需求等。
为了补齐安全平台的短板,降低外网暴露点,有必要设计开发以身份认证或代理ID认证为核心、既安全又能满足各种需求的网络安全传输平台通用代理服务,依托安全平台提供的数据实现安全共享和交换,采用以身份认证为核心的安全控制体系,实现铁路内/外网之间信息安全跨域传输,达到安全、实用的防护效果[5]。
安全平台具备Web应用代理功能,理论上支持应用软件的所有功能,但是由于安全平台自身设计的原因,开放映射端口与应用系统一一对应[6],即一个应用系统只能通过一个映射端口进行内外信息交互。这种情况下,要求应用系统必须同源,不能跨域访问。
目前,在铁路网络安全防护体系中,外网的应用系统安全防护相对薄弱,面对日益严峻的网络渗透和攻击形势[7],仅仅依靠应用系统自身的安全防护及屏蔽映射端口保障网络安全是不够的,特别是面对安全级别高的移动互联网应用系统,安全平台接口软件开发工具包(SDK,Software Development Kit)无法满足数据交互的安全要求[8]。
因此在安全平台边界增加应用代理服务层,便于将网络渗透与攻击挡在代理服务层外侧;设计开发具有通用性的代理功能、Web应用防火墙功能的代理服务,保障互联网与铁路专网之间的数据安全传输,既弥补安全平台的应用代理功能,也将加强安全平台边界网络安全防护能力。
网络安全传输平台通用代理服务(简称:代理服务)支持HTTP/HTTPS、TCP协议。代理服务内部使用HTTP协议通信,对外提供HTTPS协议访问和Socket加密传输两种方式。浏览器访问、非原生开发移动App访问采用HTTPS方式;移动互联网实时信息传输采用Socket加密传输方式。具体的代理服务架构,如图1所示。
图1 代理服务架构
代理服务由外网安全防护服务、外网安全代理服务、内网安全代理服务3部分组成。安全平台外网边界设计外网安全防护服务和外网安全代理服务,安全平台内网边界设计内网安全代理服务。
外网安全防护服务提供身份认证、安全防护、路由、日志记录、协议转换,其中,身份认证实现用户ID登记和确认功能,是安全防护的基础;安全防护模块实现行为检测、请求头/体检测、访问控制等预防Web渗透和入侵的功能;路由完成对不同的统一资源定位符(URL,Uniform Resource Locator)请求根据路由表指定到对应端口的功能;协议转换实现Socket协议与HTTP协议的转换功能。
外网安全代理服务提供证书认证代理、应用反向代理、高速缓存、安全审计、监测服务。外网安全代理服务监听多个端口,对应不同代理活动,互不影响。
内网代理服务提供内网代理、同源映射、运维管理功能,同源映射机制实现跨域访问功能,安全平台内外映射一个URL,便于运维管理和安全监控。通过ID和路由表的对应关系,实现安全平台映射多路复用,完成多个应用活动的代理任务。
外网安全防护服务设计的核心功能是对访问用户的身份确认、Socket加密传输、用户请求频率控制、请求URL和内容检查。用户的请求只有通过外网安全防护服务才能到达外网安全代理服务。
3.1.1 HTTPS协议访问方式
HTTPS协议访问方式下,分为用户模式和传输模式。
(1)用户模式下,用户使用浏览器访问HTTPS代理服务登录界面,提交代理账号、密码及验证码信息,账号和密码用于代理服务的路由映射。 安全套接字层协议(SSL,Secure Sockets Layer)利用数据加密技术实现证书认证和加密传输。账号和密码由路由服务验证,之后代理到对应端口上。
(2)传输模式下,使用HTTPS代理服务时,服务器端验证方法和路由方法同用户模式一致,与用户模式不同的是客户端请求时需要通过程序代码加载证书、账号和密码。例如,在移动设备上使用HTTPS方式向铁路专网传输数据,程序要先获取数字证书以及应用账号和密码信息,按约定要求,在HTTP请求头部,写入账号、密码信息和数据压缩方式,并且将数据写入HTTP请求体中,代码实现加载-数字证书,完成客户端对服务端证书的验证过程。
3.1.2 Socket加密传输方式
Socket传输方式本身不支持SSL,本代理服务参照SSL的工作原理,通过增加代理ID、密码非对称加密传输和双重认证的处理,自主研发了适应于Socket的数据加密传输流程,如图2所示。
图2 Socket加密传输流程
访问行为和内容检测主要包含访问控制、行为检测、代码校验、内容检查等功能。在用户身份认证基础上,开发用户请求URL白名单实现访问控制;开发用户请求频率动态对比算法实现行为检测;开发入侵代码字典库实现代码校验和内容检查。行为检测和访问控制流程,如图3所示。
图3 行为检测和访问控制流程
(1)ID的组成:浏览器请求方式下为Cookie +URL,其他请求为IP+URL。(2)行为检测策略:通过设置周期与请求次数作为限制参数,限制端到端的请求频率。(3)请求头校验策略:限制请求头长度,按照请求头的格式约定,校验请求头中的各个字段值。(4)请求体校验策略:核对响应体和请求体长度。(5)访问控制策略:通过日志审计,设置黑名单,从而限制端到端的访问。网络渗透和攻击应对策略设计,如表1所示。
表1 网络渗透和攻击应对策略设计
本代理服务通过Golang语言自主开发HTTPS容器,不使用第三方Web容器,能有效地规避容器漏洞带来的风险,有效地提升请求响应控制自由度。
外网安全平台代理服务实现外网应用请求反向代理穿过安全平台的功能,采用端口隔离设计的方式,代理的各业务之间形成逻辑隔离,支持高并发。为了降低安全平台访问频率,设计高速缓存机制,对同一URL的请求,判断上次获取的令牌时间戳是否过期,如果未过期,则使用缓存令牌,否则重新发起令牌申请。行为记录和检测、请求体检测也采用缓存机制,对缓存过期数据,设计独立线程/协程进行管理,缓存机制提高代理服务性能。外网安全代理服务包含安全审计服务,对请求通过、请求拒绝、请求响应等日志进行分析统计,生成审计报告文件,为维护访问控制策略提供依据。
内网安全平台代理服务实现内网应用请求正向代理穿过安全平台的功能,以及完成反向代理URL路由功能,该服务设计同源映射机制,解决应用系统存在跨域访问情况无法通过安全平台的问题。对于Socket请求响应,进行HTTP协议转换,完成由内到外的Socket应答。
(1)监测外网服务器的运行状态。监测服务器CPU使用率、内存占用等情况,使用监听器,当监测到CPU占用率、内存占用等数据发生变化时,自动更新CPU使用率与内存占用等情况。
(2)管理外网服务进程。实现远程启动和关闭服务进程。通过前端页面输入对应的操作指令,实现远程启动/关闭服务进程。
(3)安全防护日志审计。统计分析行为检测、安全检测等各类日志,前端设置了日志查询界面,便于查询管理日志。
(4)管理代理账户。实现ID、代理ID、密码、功能等参数的维护,包括添加、删除、修改代理ID的用户ID、用户、代理密码、服务ID、服务名称等参数。运行维护(简称:运维)监测与管理服务部署在内网,系统维护人员不需要切换至铁路外网,就能够对外网安全防护服务、外网和内网安全代理服务进行监控和运维管理。
代理服务在系统应用过程中需要解决自身安全性、可靠性和高并发的问题。代理服务软件采用Golang语言开发,Golang语言的优秀特性是保证代理服务具备高并发、高可靠性能的关键。自主开发HTTPS代理框架,并对代理框架性能和行为检测进行算法优化,有效解决自身安全问题。
代理服务的Web容器使用Golang语言的NET/HTTP标准库设计开发,不依赖于第三方Web组件。容器对每一个请求开启独立的协程(Goroutine)完成任务。使用管道技术完成Goroutine之间的通信,以及Goroutine的并发处理。为了提高吞吐量,设计网络延时或异常错误响应超时处理机制。在Goroutine中,对响应任务使用上下文控制(Context)技术,增加并行记时任务,如果发生响应超时或异常错误,则代理任务中断。由于使用Goroutine和超时处理技术,Web处理具备了标准容器处理任务的能力,相当于具备了Tomcat的任务处理能力。在安全方面,相比标准容器,自主研发的Web容器漏洞风险非常低。
代理服务是有状态的,需要设计缓存策略。身份认证状态和令牌采用旁路缓存策略。代理服务使用通信方式共享一个缓存,解决缓存数据共享问题,考虑到需求特性、应用部署和安全因素,自主设计开发缓存服务,缓存服务使用Socket协议,缓存服务包含通信、控制模块。通信模块采用Goroutine-和信道(Channel)技术,采用Socket加密传输方式。控制模块由单独Goroutine完成,其主要作用是清除过期的缓存数据。由于使用旁路缓存技术,代理服务完全支持负载均衡,具备高并发、低延迟等特性。
行为检测是对请求者访问频率的检测,是预防暴力破解的有效手段。行为检测技术难点是对请求者身份的确认。HTTPS接入方式下,首次请求身份认证成功后,代理服务会以Cookie键值和返回值方式向客户端返回信息,如果请求者支持Cookie功能,则服务端以Cookie+URL作为行为主键;如果请求者不支持Cookie功能,则按照接入要求在请求URL上增加ID信息,代理服务判断请求Cookie不存在时,会读取URL上的信息ID。行为主键确认后读取缓存中身份认证的状态,状态信息包括访问周期开始时间、访问次数。计算访问频率之后,如果超出设定参数时,视为暴力请求,反之视为正常请求,同步刷新缓存。
为了应对特定场合请求高峰极端情况,保证业务服务稳定运行,采用队列缓存技术处理高峰请求,完成消峰任务。通过延迟执行请求,控制并发访问量。
(1)定义全局缓存队列,队列长度参数化设置;初始化队列,确保其不被阻塞。
(2)执行请求前,执行读队列,如果队列深度为空则阻塞。
(3)完成响应后,执行写队列操作。假设业务服务并发响应能力小于5 000请求数/s,响应时间为5 ms,如果请求并发量大于5 000请求数/s,则将延迟5 ms执行请求任务。考虑负载均衡部署要求,高并发访问控制设计为独立的服务,部署在代理服务和安全平台之间。
代理服务应用场景分为由内到外的正向代理(内网请求外网的数据)和由外到内的反向代理(外网请求内网的数据)2种场景。
(1)正向代理,即内网通过代理服务请求外网
的数据,例如人事招聘的项目中需要认证学历信息时,可以通过代理服务的正向代理,在内网安全地请求到招聘人员的学历信息。
(2)反向代理,即外网通过代理服务请求内网数据,例如某些企业内部微信小程序中需要用到内网的职工信息等数据时,可通过代理服务在外网安全地请求到职工信息。
从软件开发的角度来看,代理服务在各个软件的整个生命周期中起到至关重要的作用,在开发、测试、部署、维护等各个阶段,只要涉及到内外网数据交互的情况都需要代理服务。
本文设计开发了符合铁路网络安全防护体系技术标准的网络安全传输平台通用代理服务,该代理服务能够满足在铁路运输生产和经营管理业务中扩展互联网业务交互的需求,以及互联网应用系统通过安全平台接口传输数据的需求,解决了安全平台边界防护薄弱问题,降低了互联网应用系统开发成本,提高了开发效率。目前,该代理服务已经应用到多个互联网应用项目中,并且取得了良好的应用效果。