王智敏,漢瑞潔
(中國鐵路蘭州局集團有限公司 信息技術所,蘭州 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)反向代理,即外網通過代理服務請求內網數據,例如某些企業內部微信小程序中需要用到內網的職工信息等數據時,可通過代理服務在外網安全地請求到職工信息。
從軟件開發的角度來看,代理服務在各個軟件的整個生命周期中起到至關重要的作用,在開發、測試、部署、維護等各個階段,只要涉及到內外網數據交互的情況都需要代理服務。
本文設計開發了符合鐵路網絡安全防護體系技術標準的網絡安全傳輸平臺通用代理服務,該代理服務能夠滿足在鐵路運輸生產和經營管理業務中擴展互聯網業務交互的需求,以及互聯網應用系統通過安全平臺接口傳輸數據的需求,解決了安全平臺邊界防護薄弱問題,降低了互聯網應用系統開發成本,提高了開發效率。目前,該代理服務已經應用到多個互聯網應用項目中,并且取得了良好的應用效果。