Logging 衍生的資訊安全風險
這篇文章主要說明 Log 會帶來的資訊安全風險與防範。
Log原本主要用在紀錄系統或是程式執行過程中發生的錯誤或是異常,
Log記錄這些系統的資訊以便未來開發或是系統人員可以根據這些log 加以除錯。
但是,對於駭客來說 Log 也被用來了解系統行為的一個管道之一。
我們會討論三個實際個案,最後說明Log所要注意的資訊安全設計與建議。
Log主要目的
不管是系統或是程式Log的主要目的不外乎是紀錄系統活動事件。Log的資訊內容包含:
- 發生什麼事情?
- 何時、何地、誰、做了什麼使事情?
- 除了系統本身的 log之外,還有應用程式 Log
- 資訊安全相關的事件記錄工未來稽核使用。(例如:登入失敗、成功、修改帳號等)
這些Log都是希望未來可以幫助我們事後的稽核、程式的錯誤排除等使用。
常見的 Security Event log 包含:
- 系統管理者權限相關功能的使用,例如修改系統檔案、安裝程式、新增使用者、修改權限等
- 登入成功、失敗
- 重新設定密碼
- 密碼修改
真實案例
駭客會利用這些 Log 進行什麼攻擊呢? 讓我們來看三個真實的案例
案例一:帳號密碼
這個例子,Log原始的呈現帳號密碼資訊。因此,只要有人或是駭客拿到 Log檔案,就可以容易的資料資料庫的帳號密碼。
Exception :Error: DatabaseUnavailableUnclassified
Gentle.Common.GentleException: The database backend (provider SQLServer) could not be reached.
Check the connection string: Password=MediaPortal;Persist Security Info=True;User ID=sa;Initial Catalog=MpTvDb;Data Source=htpc\SQLEXPRESS;Connection Timeout=300; —> System.Data.SqlClient.SqlException: Cannot open database “MpTvDb” requested by the login. The login failed.Login failed for user ‘sa’.
案例二:登入失敗的帳號密碼
這個例子,雖然log沒有記錄登入成功的帳號密碼,但是記錄失敗的登入。
從失敗的登入紀錄的嘗試,也可以很容易的猜到正確的帳號密碼為何。
grep “incorrect password” /tmp/access.log
Mon Feb 1 15:11:2011: Login as test@example.com failed — incorrect password (pass)
Mon Feb 1 15:11:2011: Login as test@example.com failed — incorrect password (Pass)
案例三:真實案例CVE-2006-4624
這個例子是一個知名的案例,當時還有 CVE的 ID發布,
駭客可以透過 Log,巧妙的製造一些錯誤訊息,誘導使用者點擊惡意網站。
主要原理就是透過特殊的換行符號,“%0D%0A” 或是 “%0A%0A”
讓我們看這個簡單的範例
範例程式
[pastacode lang=”java” message=”” highlight=”” provider=”manual”]
String val = request.getParameter("val");
try {
int value = Integer.parseInt(val);
}
catch (NumberFormatException) {
log.info("Failed to parse val = " + val);
}
[/pastacode]
當駭客透過下列字串輸入:
“twenty-one%0a%0aINFO:+http://malicious.com/“
系統Log檔案呈現:
INFO: Failed to parse val=twenty-one
INFO: http://malicious.com/
系統管理者就會好奇怎麼會有這樣的 URL: “INFO: http://malicious.com/”
於是好奇的追查就會間接點擊該網址。
其他國際知名案例CWE
- CWE-532: Information Leak Through Log Files https://cwe.mitre.org/data/definitions/532.html
- CWE-117: Improper Output Neutralization for Logs https://cwe.mitre.org/data/definitions/117.html
- CWE-779: Logging of Excessive Data https://cwe.mitre.org/data/definitions/779.html
- CWE-93: Improper Neutralization of CRLF Sequences (‘CRLF Injection’) https://cwe.mitre.org/data/definitions/93.html
Logging安全設計注意事項
對於隱私性資訊的 logging 應該要盡量避免或是用加密處理,例如:
- 密碼
- 信用卡資訊
- 交易秘密
- 個人身分證資訊
- 醫療資訊
例如:這段程式記錄了使用者名稱與信用卡號碼
[pastacode lang=”java” message=”” highlight=”” provider=”manual”]
logger.info("Username: " + usernme + ", CCN: " + ccn);
[/pastacode]
Logging應該要考慮下列因素:
- 避免紀錄敏感性或是隱私性資訊
- 注意 Log的撰改
- 避免記錄”過多”的資訊
- 注意潛在 Log的假造