王智敏,漢瑞潔
(中國鐵路蘭州局集團有限公司 信息技術所,蘭州 730000)
隨著信息技術和計算機網(wǎng)絡技術的快速發(fā)展,互聯(lián)網(wǎng)技術的應用已經(jīng)突破企業(yè)內(nèi)部應用領域邊界,互聯(lián)網(wǎng)與企業(yè)內(nèi)網(wǎng)交互應用場景日趨豐富,互聯(lián)網(wǎng)正在深刻地影響著各行各業(yè)[1-2]。鐵路行業(yè)中互聯(lián)網(wǎng)建設與應用已經(jīng)具有一定規(guī)模,形成了鐵路12306互聯(lián)網(wǎng)售票系統(tǒng)、95306貨運綜合服務平臺等關鍵公眾服務平臺,互聯(lián)網(wǎng)建設與應用也正朝著統(tǒng)一化、標準化方向發(fā)展[3]。
網(wǎng)絡安全傳輸平臺(簡稱:安全平臺)是鐵路計算機網(wǎng)絡縱深防御體系中網(wǎng)絡邊界防護的基礎設施[4],承擔互聯(lián)網(wǎng)與鐵路內(nèi)網(wǎng)(簡稱:內(nèi)網(wǎng))、移動設備與地面網(wǎng)絡之間安全、可靠、實時的信息傳輸任務。平臺主要由數(shù)字證書認證服務、鐵路外網(wǎng)(簡稱:外網(wǎng))反向代理服務、 內(nèi)網(wǎng)正向代理服務組成,鐵路互聯(lián)網(wǎng)應用系統(tǒng)均通過安全平臺進行內(nèi)/外網(wǎng)信息交互。隨著網(wǎng)絡安全威脅的范圍和內(nèi)容不斷擴大和變化,安全平臺的短板逐漸顯露,如:外網(wǎng)暴露點增多,存在性能和安全隱患;既有軟件開發(fā)包不能滿足復雜的應用項目需求等。
為了補齊安全平臺的短板,降低外網(wǎng)暴露點,有必要設計開發(fā)以身份認證或代理ID認證為核心、既安全又能滿足各種需求的網(wǎng)絡安全傳輸平臺通用代理服務,依托安全平臺提供的數(shù)據(jù)實現(xiàn)安全共享和交換,采用以身份認證為核心的安全控制體系,實現(xiàn)鐵路內(nèi)/外網(wǎng)之間信息安全跨域傳輸,達到安全、實用的防護效果[5]。
安全平臺具備Web應用代理功能,理論上支持應用軟件的所有功能,但是由于安全平臺自身設計的原因,開放映射端口與應用系統(tǒng)一一對應[6],即一個應用系統(tǒng)只能通過一個映射端口進行內(nèi)外信息交互。這種情況下,要求應用系統(tǒng)必須同源,不能跨域訪問。
目前,在鐵路網(wǎng)絡安全防護體系中,外網(wǎng)的應用系統(tǒng)安全防護相對薄弱,面對日益嚴峻的網(wǎng)絡滲透和攻擊形勢[7],僅僅依靠應用系統(tǒng)自身的安全防護及屏蔽映射端口保障網(wǎng)絡安全是不夠的,特別是面對安全級別高的移動互聯(lián)網(wǎng)應用系統(tǒng),安全平臺接口軟件開發(fā)工具包(SDK,Software Development Kit)無法滿足數(shù)據(jù)交互的安全要求[8]。
因此在安全平臺邊界增加應用代理服務層,便于將網(wǎng)絡滲透與攻擊擋在代理服務層外側(cè);設計開發(fā)具有通用性的代理功能、Web應用防火墻功能的代理服務,保障互聯(lián)網(wǎng)與鐵路專網(wǎng)之間的數(shù)據(jù)安全傳輸,既彌補安全平臺的應用代理功能,也將加強安全平臺邊界網(wǎng)絡安全防護能力。
網(wǎng)絡安全傳輸平臺通用代理服務(簡稱:代理服務)支持HTTP/HTTPS、TCP協(xié)議。代理服務內(nèi)部使用HTTP協(xié)議通信,對外提供HTTPS協(xié)議訪問和Socket加密傳輸兩種方式。瀏覽器訪問、非原生開發(fā)移動App訪問采用HTTPS方式;移動互聯(lián)網(wǎng)實時信息傳輸采用Socket加密傳輸方式。具體的代理服務架構,如圖1所示。
圖1 代理服務架構
代理服務由外網(wǎng)安全防護服務、外網(wǎng)安全代理服務、內(nèi)網(wǎng)安全代理服務3部分組成。安全平臺外網(wǎng)邊界設計外網(wǎng)安全防護服務和外網(wǎng)安全代理服務,安全平臺內(nèi)網(wǎng)邊界設計內(nèi)網(wǎng)安全代理服務。
外網(wǎng)安全防護服務提供身份認證、安全防護、路由、日志記錄、協(xié)議轉(zhuǎn)換,其中,身份認證實現(xiàn)用戶ID登記和確認功能,是安全防護的基礎;安全防護模塊實現(xiàn)行為檢測、請求頭/體檢測、訪問控制等預防Web滲透和入侵的功能;路由完成對不同的統(tǒng)一資源定位符(URL,Uniform Resource Locator)請求根據(jù)路由表指定到對應端口的功能;協(xié)議轉(zhuǎn)換實現(xiàn)Socket協(xié)議與HTTP協(xié)議的轉(zhuǎn)換功能。
外網(wǎng)安全代理服務提供證書認證代理、應用反向代理、高速緩存、安全審計、監(jiān)測服務。外網(wǎng)安全代理服務監(jiān)聽多個端口,對應不同代理活動,互不影響。
內(nèi)網(wǎng)代理服務提供內(nèi)網(wǎng)代理、同源映射、運維管理功能,同源映射機制實現(xiàn)跨域訪問功能,安全平臺內(nèi)外映射一個URL,便于運維管理和安全監(jiān)控。通過ID和路由表的對應關系,實現(xiàn)安全平臺映射多路復用,完成多個應用活動的代理任務。
外網(wǎng)安全防護服務設計的核心功能是對訪問用戶的身份確認、Socket加密傳輸、用戶請求頻率控制、請求URL和內(nèi)容檢查。用戶的請求只有通過外網(wǎng)安全防護服務才能到達外網(wǎng)安全代理服務。
3.1.1 HTTPS協(xié)議訪問方式
HTTPS協(xié)議訪問方式下,分為用戶模式和傳輸模式。
(1)用戶模式下,用戶使用瀏覽器訪問HTTPS代理服務登錄界面,提交代理賬號、密碼及驗證碼信息,賬號和密碼用于代理服務的路由映射。 安全套接字層協(xié)議(SSL,Secure Sockets Layer)利用數(shù)據(jù)加密技術實現(xiàn)證書認證和加密傳輸。賬號和密碼由路由服務驗證,之后代理到對應端口上。
(2)傳輸模式下,使用HTTPS代理服務時,服務器端驗證方法和路由方法同用戶模式一致,與用戶模式不同的是客戶端請求時需要通過程序代碼加載證書、賬號和密碼。例如,在移動設備上使用HTTPS方式向鐵路專網(wǎng)傳輸數(shù)據(jù),程序要先獲取數(shù)字證書以及應用賬號和密碼信息,按約定要求,在HTTP請求頭部,寫入賬號、密碼信息和數(shù)據(jù)壓縮方式,并且將數(shù)據(jù)寫入HTTP請求體中,代碼實現(xiàn)加載-數(shù)字證書,完成客戶端對服務端證書的驗證過程。
3.1.2 Socket加密傳輸方式
Socket傳輸方式本身不支持SSL,本代理服務參照SSL的工作原理,通過增加代理ID、密碼非對稱加密傳輸和雙重認證的處理,自主研發(fā)了適應于Socket的數(shù)據(jù)加密傳輸流程,如圖2所示。
圖2 Socket加密傳輸流程
訪問行為和內(nèi)容檢測主要包含訪問控制、行為檢測、代碼校驗、內(nèi)容檢查等功能。在用戶身份認證基礎上,開發(fā)用戶請求URL白名單實現(xiàn)訪問控制;開發(fā)用戶請求頻率動態(tài)對比算法實現(xiàn)行為檢測;開發(fā)入侵代碼字典庫實現(xiàn)代碼校驗和內(nèi)容檢查。行為檢測和訪問控制流程,如圖3所示。
圖3 行為檢測和訪問控制流程
(1)ID的組成:瀏覽器請求方式下為Cookie +URL,其他請求為IP+URL。(2)行為檢測策略:通過設置周期與請求次數(shù)作為限制參數(shù),限制端到端的請求頻率。(3)請求頭校驗策略:限制請求頭長度,按照請求頭的格式約定,校驗請求頭中的各個字段值。(4)請求體校驗策略:核對響應體和請求體長度。(5)訪問控制策略:通過日志審計,設置黑名單,從而限制端到端的訪問。網(wǎng)絡滲透和攻擊應對策略設計,如表1所示。
表1 網(wǎng)絡滲透和攻擊應對策略設計
本代理服務通過Golang語言自主開發(fā)HTTPS容器,不使用第三方Web容器,能有效地規(guī)避容器漏洞帶來的風險,有效地提升請求響應控制自由度。
外網(wǎng)安全平臺代理服務實現(xiàn)外網(wǎng)應用請求反向代理穿過安全平臺的功能,采用端口隔離設計的方式,代理的各業(yè)務之間形成邏輯隔離,支持高并發(fā)。為了降低安全平臺訪問頻率,設計高速緩存機制,對同一URL的請求,判斷上次獲取的令牌時間戳是否過期,如果未過期,則使用緩存令牌,否則重新發(fā)起令牌申請。行為記錄和檢測、請求體檢測也采用緩存機制,對緩存過期數(shù)據(jù),設計獨立線程/協(xié)程進行管理,緩存機制提高代理服務性能。外網(wǎng)安全代理服務包含安全審計服務,對請求通過、請求拒絕、請求響應等日志進行分析統(tǒng)計,生成審計報告文件,為維護訪問控制策略提供依據(jù)。
內(nèi)網(wǎng)安全平臺代理服務實現(xiàn)內(nèi)網(wǎng)應用請求正向代理穿過安全平臺的功能,以及完成反向代理URL路由功能,該服務設計同源映射機制,解決應用系統(tǒng)存在跨域訪問情況無法通過安全平臺的問題。對于Socket請求響應,進行HTTP協(xié)議轉(zhuǎn)換,完成由內(nèi)到外的Socket應答。
(1)監(jiān)測外網(wǎng)服務器的運行狀態(tài)。監(jiān)測服務器CPU使用率、內(nèi)存占用等情況,使用監(jiān)聽器,當監(jiān)測到CPU占用率、內(nèi)存占用等數(shù)據(jù)發(fā)生變化時,自動更新CPU使用率與內(nèi)存占用等情況。
(2)管理外網(wǎng)服務進程。實現(xiàn)遠程啟動和關閉服務進程。通過前端頁面輸入對應的操作指令,實現(xiàn)遠程啟動/關閉服務進程。
(3)安全防護日志審計。統(tǒng)計分析行為檢測、安全檢測等各類日志,前端設置了日志查詢界面,便于查詢管理日志。
(4)管理代理賬戶。實現(xiàn)ID、代理ID、密碼、功能等參數(shù)的維護,包括添加、刪除、修改代理ID的用戶ID、用戶、代理密碼、服務ID、服務名稱等參數(shù)。運行維護(簡稱:運維)監(jiān)測與管理服務部署在內(nèi)網(wǎng),系統(tǒng)維護人員不需要切換至鐵路外網(wǎng),就能夠?qū)ν饩W(wǎng)安全防護服務、外網(wǎng)和內(nèi)網(wǎng)安全代理服務進行監(jiān)控和運維管理。
代理服務在系統(tǒng)應用過程中需要解決自身安全性、可靠性和高并發(fā)的問題。代理服務軟件采用Golang語言開發(fā),Golang語言的優(yōu)秀特性是保證代理服務具備高并發(fā)、高可靠性能的關鍵。自主開發(fā)HTTPS代理框架,并對代理框架性能和行為檢測進行算法優(yōu)化,有效解決自身安全問題。
代理服務的Web容器使用Golang語言的NET/HTTP標準庫設計開發(fā),不依賴于第三方Web組件。容器對每一個請求開啟獨立的協(xié)程(Goroutine)完成任務。使用管道技術完成Goroutine之間的通信,以及Goroutine的并發(fā)處理。為了提高吞吐量,設計網(wǎng)絡延時或異常錯誤響應超時處理機制。在Goroutine中,對響應任務使用上下文控制(Context)技術,增加并行記時任務,如果發(fā)生響應超時或異常錯誤,則代理任務中斷。由于使用Goroutine和超時處理技術,Web處理具備了標準容器處理任務的能力,相當于具備了Tomcat的任務處理能力。在安全方面,相比標準容器,自主研發(fā)的Web容器漏洞風險非常低。
代理服務是有狀態(tài)的,需要設計緩存策略。身份認證狀態(tài)和令牌采用旁路緩存策略。代理服務使用通信方式共享一個緩存,解決緩存數(shù)據(jù)共享問題,考慮到需求特性、應用部署和安全因素,自主設計開發(fā)緩存服務,緩存服務使用Socket協(xié)議,緩存服務包含通信、控制模塊。通信模塊采用Goroutine-和信道(Channel)技術,采用Socket加密傳輸方式。控制模塊由單獨Goroutine完成,其主要作用是清除過期的緩存數(shù)據(jù)。由于使用旁路緩存技術,代理服務完全支持負載均衡,具備高并發(fā)、低延遲等特性。
行為檢測是對請求者訪問頻率的檢測,是預防暴力破解的有效手段。行為檢測技術難點是對請求者身份的確認。HTTPS接入方式下,首次請求身份認證成功后,代理服務會以Cookie鍵值和返回值方式向客戶端返回信息,如果請求者支持Cookie功能,則服務端以Cookie+URL作為行為主鍵;如果請求者不支持Cookie功能,則按照接入要求在請求URL上增加ID信息,代理服務判斷請求Cookie不存在時,會讀取URL上的信息ID。行為主鍵確認后讀取緩存中身份認證的狀態(tài),狀態(tài)信息包括訪問周期開始時間、訪問次數(shù)。計算訪問頻率之后,如果超出設定參數(shù)時,視為暴力請求,反之視為正常請求,同步刷新緩存。
為了應對特定場合請求高峰極端情況,保證業(yè)務服務穩(wěn)定運行,采用隊列緩存技術處理高峰請求,完成消峰任務。通過延遲執(zhí)行請求,控制并發(fā)訪問量。
(1)定義全局緩存隊列,隊列長度參數(shù)化設置;初始化隊列,確保其不被阻塞。
(2)執(zhí)行請求前,執(zhí)行讀隊列,如果隊列深度為空則阻塞。
(3)完成響應后,執(zhí)行寫隊列操作。假設業(yè)務服務并發(fā)響應能力小于5 000請求數(shù)/s,響應時間為5 ms,如果請求并發(fā)量大于5 000請求數(shù)/s,則將延遲5 ms執(zhí)行請求任務。考慮負載均衡部署要求,高并發(fā)訪問控制設計為獨立的服務,部署在代理服務和安全平臺之間。
代理服務應用場景分為由內(nèi)到外的正向代理(內(nèi)網(wǎng)請求外網(wǎng)的數(shù)據(jù))和由外到內(nèi)的反向代理(外網(wǎng)請求內(nèi)網(wǎng)的數(shù)據(jù))2種場景。
(1)正向代理,即內(nèi)網(wǎng)通過代理服務請求外網(wǎng)
的數(shù)據(jù),例如人事招聘的項目中需要認證學歷信息時,可以通過代理服務的正向代理,在內(nèi)網(wǎng)安全地請求到招聘人員的學歷信息。
(2)反向代理,即外網(wǎng)通過代理服務請求內(nèi)網(wǎng)數(shù)據(jù),例如某些企業(yè)內(nèi)部微信小程序中需要用到內(nèi)網(wǎng)的職工信息等數(shù)據(jù)時,可通過代理服務在外網(wǎng)安全地請求到職工信息。
從軟件開發(fā)的角度來看,代理服務在各個軟件的整個生命周期中起到至關重要的作用,在開發(fā)、測試、部署、維護等各個階段,只要涉及到內(nèi)外網(wǎng)數(shù)據(jù)交互的情況都需要代理服務。
本文設計開發(fā)了符合鐵路網(wǎng)絡安全防護體系技術標準的網(wǎng)絡安全傳輸平臺通用代理服務,該代理服務能夠滿足在鐵路運輸生產(chǎn)和經(jīng)營管理業(yè)務中擴展互聯(lián)網(wǎng)業(yè)務交互的需求,以及互聯(lián)網(wǎng)應用系統(tǒng)通過安全平臺接口傳輸數(shù)據(jù)的需求,解決了安全平臺邊界防護薄弱問題,降低了互聯(lián)網(wǎng)應用系統(tǒng)開發(fā)成本,提高了開發(fā)效率。目前,該代理服務已經(jīng)應用到多個互聯(lián)網(wǎng)應用項目中,并且取得了良好的應用效果。