什麼是Path Manipulation攻擊?
Path Manipulation攻擊是一種安全漏洞,攻擊者可以通過操控應用程式中的文件路徑來存取或修改系統中的任意文件。 這種攻擊的目的是利用應用程式對文件路徑的處理不當,從而實現未授權的文件讀取、寫入或刪除操作。
Path Manipulation攻擊是如何發生的?
當應用程式接受用戶輸入的文件路徑並直接使用這些路徑進行文件操作(如讀取或寫入文件)時,攻擊者可以通過插入特殊字符(如“../”或“..\”)來改變路徑,使應用程式存取到未授權的文件或目錄。
如左圖,原本只是讓user使用滑鼠點選要下載的pdf檔案,但是因為程式沒有檢查要下載的檔名是否為可下載的檔名,讓駭客利用..\來操作檔案位置,進而造成攻擊者可以下載任意的檔案。
又如區塊程式碼,假設應用程式允許用戶上傳文件並將文件儲存在指定目錄下:
如果攻擊者在fileName參數中插入“../”字符(例如“../../etc/passwd”),則文件可能會被儲存在/uploads目錄以外的地方,甚至可能覆蓋系統文件。
String fileName = request.getParameter("fileName");
File file = new File("/uploads/" + fileName);
file.createNewFile();
駭客如何利用 Path Manipulation 入侵你的系統 ?
影片介紹什麼是Path Manipulation攻擊,這支影片程式是使用JAVA來做介紹。在影片中,我們將講解程式為什麼會造成Path Manipulation,以及如何識別、測試並最終修復這個關鍵的安全問題。我們使用Fortify提供的IWA(Insecure Web App)範例程式進行演示。
我們演示了徹底測試的重要性,並展示了攻擊者如何利用這些弱點來操控檔案路徑,將文件儲存在意外的位置。Path Manipulation弱點是一種嚴重的安全問題,攻擊者可以通過這些弱點存取、修改甚至刪除系統中的任意文件,從而危害系統的完整性和機密性。因此,及時發現並修復這些弱點至關重要。
Path Manipulation 可能造成的衝擊
Path Manipulation可能造成的衝擊是多方面且嚴重的。以下是一些可能的影響:
- 未授權存取
- 攻擊者可以利用Path Manipulation弱點存取系統中的任意檔案,包括敏感的設定檔、密碼檔、User data等。這可能導致資料洩露和信息泄密。
- 檔案被修改/li>
- 攻擊者可以通過弱點修改系統中的重要檔案,這可能會改變應用程式的行為,插入惡意代碼,甚至破壞系統的正常運行。
- 檔案被刪除
- 攻擊者可能刪除關鍵檔案,導致系統crash或應用程式無法執行。這可能會引起業務中斷和資料損失。
- 權限提升
- 攻擊者可以利用Path Manipulation弱點進行權限提升攻擊,獲得系統的管理權限,進而進一步控制系統,執行更多的惡意操作。
- 阻斷服務攻擊(DoS)
- 攻擊者可以通過創建大量的檔案或修改系統檔,導致資源耗盡,從而使系統或應用程式無法為合法用戶提供服務。
- 資料完整性受損
- 當攻擊者修改或刪除檔案時,可能會破壞資料的完整性,導致資料損壞或丟失,使得資料分析和業務決策時使用錯誤的資訊。
Path Manipulation 的防範或處理方式
- 輸入驗證和清理
- 嚴格檢查和驗證用戶輸入,確保檔名僅包含預期的字符(如字母和數字)。
- 使用正規化函式(Functions)或方法(Methods)來檢查檔案位置,如使用normalize()。
- 使用安全的API
- 使用更高層次的檔案處理API,這些API通常會自動處理路徑中的危險字符。
- 固定路徑
- 將所有檔案操作限制在指定的目錄範圍內,避免使用相對路徑。
- 權限管理
- 設置適當的檔案和目錄權限,確保應用程式只有必要的讀寫權限。
- 程式碼審計和安全掃描
- 定期進行代碼審計和使用安全工具(如Fortify或Coverity)來掃描並檢測潛在的弱點。
通過這些措施,可以有效地防範Path Manipulation攻擊,保護系統的安全性和完整性。
/* Youtube影片中的函式 */
public String alphaNumberString(String s)
{
String cleanString ="";
for(int i=0; i < s.length();i++) {
char c = toString().charAt(i);
if((c >= 65 && c <= 90) || // A ~ Z
(c >= 97 && c <= 122) || // a ~ z
(c >= 48 && c <= 57)){ // 0 ~ 9
cleanString += c;
}else{
break;
}
}
return cleanString;
}
上方程式碼為Youtube影片中所使用解決Path manipulation弱點的函式,若不考慮效能,這個Function可以通過Fortify的掃描,但是這並非處理這個弱點的最佳解法。函式的正確使用方法請參考影片內容。
/* 修改後效能較好的函式 */
public static boolean isAlphaNumeric(String input) {
// 如果字串為null或為空字串,則直接回false
if (input == null || input.isEmpty()) {
return false;
}
// 檢查每個字元串中的每個字元
for (char c : input.toCharArray()) {
// 檢查字元是否在A-Z, a-z, 0-9範圍内
if (!(c >= 'A' && c <= 'Z') &&
!(c >= 'a' && c <= 'z') &&
!(c >= '0' && c <= '9')) {
returnfalse;
}
}
// 如果所有字元都在允許範圍内,則返回true
return true;
}
上方程式碼應該是比較正確的解決方法,但是Fortify無法通過掃描,筆者曾經與Fortify Support Team交手過,得到的答案是: "若你覺得你的程式沒問題,請使用Filter或使用自定規則處理"。
此次的影片配合Opentext台灣公司2024年弱點解說的主題Path Manipulation,南部的某些朋友已經聽過,但在這篇文章及影片中介紹的略有出入,應該會讓各位獲得更多的知識,這次也與之前的影片不同,首次使用Fortiy提供的IWA(Insecure Web Application)程式作為主要的講解內容,希望大家可以更容易進入狀況,若有任何問題歡迎到Youtube影片留言,謝謝。