建立日誌審計與入侵檢測的防護之道

建立日誌審計與入侵檢測的防護之道

 

應用程式日誌應該不限於程式除錯使用. 日誌也被運用在其它記錄審計, 舉例如下:

  • 應用程式監控
  • 商業分析
  • 活動日誌稽核與合規監控
  • 系統入侵檢測System intrusion detection
  • 分析與鑑定Forensics

分析日誌與安全事件有助於威脅攻擊與防護: 讓我們可以確定相關的安全測試與攻擊的防護是否有效果.

為了要讓關連分析更加容易, 建議可以用通用的日誌格式讓不同系統間的日誌分析更容易. 例如可以使用SLF4J的Logback或是Apache Log4j2的日誌框架等.

程序監控, 交易日誌審計等通常會因為不同的目的而被收集, 這也表示這些日誌會被另外儲存. 這些事件的類型與詳細的內容也會有所不同. 舉例來說, PCI DSS審計日誌會包含歷史時間順序的活動日誌以提供獨立的審計單位可以按照時間軸針對交易的屬性進行稽核.

對於日誌記錄的詳細程度過多與過少都不好. 要確保日誌有時間並且可以辨認來源IP與user ID, 但是必須注意不能夠記錄個人隱私或是個人機密的資訊. 透過日誌的使用目的來判斷應該要記錄的詳細程度. 同時日誌的寫入應該要透過編碼方式進行, 防止日誌被偽造Log Injection aka log forging.

OWASP AppSensor Project提供如何網站應用系統建置入侵檢測與自動防禦的指南:透過加入檢測規則並且定義回覆採取行動來防護網站的攻擊.舉例來說,如果服務伺服器端偵測到非法的資料輸入, 或是一個不能夠編輯的資料欄位但是卻被送到後端伺服器時, 表示該後端伺服器遭受到攻擊. 這時候不要只是用日誌記錄下來, 進一步可以發送告警, 或是採取其它行動保護整個系統, 例如該攻擊的連線或是將該帳號鎖住無法使用等.

在手機應用程式, 程式開發應該利用日誌來進行除錯, 這樣常會導致許多敏感性資訊外洩的問題. 這些手機日誌可以透過Xcode IDE (iOS) 或是 Logcat (Android) 或是其它第三方工具來對手機上的日誌進行分析與讀取. 因此,對於手機來說,最好的方式就是將日誌的功能取消.

良好的安全日誌設計包含下列要素1. 日誌可以設定層級,例如i.e.Information, Warning, Error, fatal or Security Breach (highest value) 2. 可以對任何的字元編碼避免日誌注入的攻擊3. 不要紀錄敏感性資訊. 舉例來說,密碼, session ID或是密碼的 Hash值, 信用卡, 社會保險碼等4. 保護日誌的完整性. 駭客可能會修改日誌. 因此,日誌檔案存取的權限與日誌修改的稽核都應該納入考量. 5. 日誌檔案大小的成長:駭客可以透過送出大量的請求導致磁碟空間不足或是造成之前的日誌被覆蓋.

取消Android手機程式的日誌

取消Android手機程式日誌最簡單的方是就是使用Android ProGuard,這個工具會將相關的日致函數移除. 可以透過proguard-project.txt配置定義:

-assumenosideeffects class android.util.Log

{

public static boolean isLoggable(java.lang.String, int);

public static int v(…);

public static int i(…);

public static int w(…);

public static int d(…);

public static int e(…);

}

取消iOS手機程式的日誌

同樣的技巧也可以套用在iOS手機應用程式, 利用preprocessor的定義方式移除日誌相關程式碼:

#ifndef DEBUG

#define NSLog(…)

#endif

安全防護

參考資料

工具

Leave a Reply

Your email address will not be published. Required fields are marked *