Logging 衍生的資訊安全風險

Logging 衍生的資訊安全風險

log icon

這篇文章主要說明 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”

讓我們看這個簡單的範例

範例程式

String val = request.getParameter("val");
try {

int value = Integer.parseInt(val);
}
catch (NumberFormatException) {
log.info("Failed to parse val = " + val);
}

當駭客透過下列字串輸入:

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

 

Logging安全設計注意事項

對於隱私性資訊的 logging 應該要盡量避免或是用加密處理,例如:

  • 密碼
  • 信用卡資訊
  • 交易秘密
  • 個人身分證資訊
  • 醫療資訊

例如:這段程式記錄了使用者名稱與信用卡號碼

logger.info("Username: " + usernme + ", CCN: " + ccn);

Logging應該要考慮下列因素:

  • 避免紀錄敏感性或是隱私性資訊
  • 注意 Log的撰改
  • 避免記錄”過多”的資訊
  • 注意潛在 Log的假造

 

 

Leave a Reply

Your email address will not be published.