技術交流

紀錄應用系統存取軌跡 滿足資安稽核調閱需求

鄭銘輝 鄭銘輝

資通電腦的應用系統開發平台中,可彈性紀錄應用系統的存取軌跡,協助企業完整保留稽核紀錄,讓開發人員專注於應用系統功能而不用分心於基本架構的設計與開發。

資料存取紀錄是資安保護的基礎防線

不論從個人資料保護法的角度或從資訊安全的要求,保護資料避免不當的存取或外洩,一直是重要課題。再嚴謹的資料防護措施,都可能存在著安全漏洞,因此資料存取紀錄可以說是資安保護的基礎。

資料安全的保護可以分成多個層面,從伺服器硬體、應用系統伺服器、應用系統,一直到資料庫,每一個階層都有相對應的安全措施。系統的安全就是由這些層次所組成,當進行越多層的安全保護,資料也更安全,但所需要的資源與花費就會更多,系統效能也會受到影響,因此對於不同的系統需要進行安全評級,針對不同等級,進行不同的安全防護措施。

不論何種安全等級,資料存取紀錄都是最基本的要求,一方面可做為系統或資料使用量的統計,以評估系統的實用性(系統是否有人使用),另一方面也可監測系統或資料有無被不當使用,例如:系統雖然允許在非上班時間查詢,但是否有特定人員常常在非上班時間查詢非業務直接相關的資料,這些如果無法事先訂定使用規則,就需要靠事後紀錄(LOG)的分析,作為事後追查或防堵漏洞的依據。

應用系統也能有統一的 LOG 記錄標準

一般硬體、應用系統伺服器、甚至資料庫,都有標準的紀錄可供設定,只要啟動設定開關就可直接紀錄。但應用系統因為資料內容的多樣性,沒有可以透過簡單設定達成的標準作法,傳統的作法都是要靠開發人員在程式中自行撰寫程式碼紀錄,這種方式常常因為設計考量不周全或開發人員的疏失,造成疏漏或記錄資訊不完全,事後要再重新調整往往大費功夫,甚至要每支程式逐一調整。

所幸隨著技術演進,介面格式統一,我們可以設計一套統一的 LOG 記錄標準,利用 JSON 做為紀錄格式,同時以 AOP 攔截需要紀錄的程式介面,再配合一些彈性設定,讓整個應用系統的設定更為標準化。

利用 AOP 與 JSON 標準化應用系統稽核紀錄

AOP(Aspect-Oriented Programming)有人翻譯作「面向導向程式設計」或「面向切面程式設計」,單從字義並不容易了解,簡單的說就是攔截系統介面的輸出入,因此不論是對資料庫的存取(透過 ORM)或應用系統的介面(透過 Web service 或 RESTful API)都可以攔截到輸出入的資料。

JSON(JavaScript Object Notation;JavaScript 物件表示法)是一種輕量級的資料交換語言,它以名稱與值所組成的資料物件,因此可以知道每個資料欄位及其名稱,即使不同的介面具有不同欄位格式,透過名稱的規範也可以知道欄位的內容。

基於上面兩種技術,我們可以規範應用系統透過 web Service 或 RESTful API 存取後端系統,或透過 ORM 介面存取資料庫時,可利用一個設定檔決定該 API 是否要記錄,也可以設定紀錄的內容包含輸出或輸入或是兩者皆紀錄。如此一來,不重要的內容(如代碼存取的 API)就不會被紀錄,不僅可增加系統彈性、減少不必要的資料量,也可動態決定是否要做紀錄。

資料輸出後,以 JSON 的格式寫入到資料庫中,紀錄的主要欄位包含人(使用者)、事(功能代號、名稱/輸出或輸入)、時(存取時間)、地(使用者的 IP)、物(資料內容)等稽核紀錄必要要件。

配合應用系統的作業功能查詢,可以知道特定使用者在特定期間執行那些應用系統功能,也可進一步追蹤其交易內容資料。如果紀錄的資料內容可歸類出特定資料類型,例如:個資,則可透過資料萃取程式,由 JSON 的記錄內容將特定名稱欄位轉入固定格式的資料表中,例如規劃一組個資的資料表,將原本 JSON 的內容抽離出姓名/身分證號/生日/性別/電話/Email/地址…等資料欄位,則可再提供一個固定資料欄位的查詢程式。

透過彈性的應用系統紀錄設計,可以讓稽核紀錄保存更完整,並增加應用系統的安全。