iT邦幫忙

2024 iThome 鐵人賽

DAY 4
0
Security

你的程式真的安全嗎?從資安的角度做 code review系列 第 16

C - missing function level access control (存取控制:遺漏功能層級存取控制)

  • 分享至 

  • xImage
  •  

下方程式碼片段全部都是擷取自 Secure Code Warrior 線上安全程式培訓平台,因為練習互動時的題目多半不會只有單一個檔案,可能涉及多個檔案、資料夾及多處地方修改,因此我的文章主要是針對最主要的區塊做修改及說明,若有不好理解的地方非常抱歉也還請見諒,也可以實際上去 Secure Code Warrior 玩玩看,搭配著互動,會更有感的學習哦~

C - missing function level access control (存取控制:遺漏功能層級存取控制)

  • 形成原因:第一種情況,攻擊者透過可預測的識別符號和標準命名慣例猜測或枚舉隱藏的網頁或連結;第二種情況,伺服器上的存取控制列表配置錯誤,導致與客戶端在伺服器上呼叫UI不允許的功能
  • 後果:高權限帳戶被接管,進而做出操控資料的行為
  • 實例:
    1. 強制瀏覽URL: 攻擊者透過猜測URL拜訪未經授權的頁面
      在原本的url後面加入/admin_statuspage拜訪管理者頁面
      http://site.com/app/admin_statuspage
    2. 存取未經授權的功能:網頁使用流行的框架,攻擊者送出一個網頁伺服器請求
      POST/action/createUser HTTP/1.1... name=attacker&pw=3GYT!6&role=admin
      由於 createUser 函式並沒有做限制所以攻擊者可以成功創建一個新的使帳戶
  • 解決方法:
    • 使用基於角色控制(RBAC)管理權限
    • 預設拒絕存取
    • 應使用由常規框架提供,或是容易使用的外部模組,來授權集中式例行程序(翻譯翻得很爛:Authorization should be applied using centralized routines either provided by the framework or easy to use external modules.)
    • 在伺服器上實施存取控制,而非用戶端

第1題

錯誤區塊

load();
//程式碼片段擷取自 Secure Code Warrior 線上安全程式培訓平台
save();
//程式碼片段擷取自 Secure Code Warrior 線上安全程式培訓平台

解釋:
除了資料庫上的永久讀/寫操作可能導致拒絕服務(DoS)問題外,它還可能導致錯誤的資料(如密碼)被插入資料庫中。雖然它在解析函式中重置,但惡意程式可能會覆蓋密碼,使程式崩潰,阻止密碼安全重置。

主要修正方法

把錯誤區塊移到上方函式內:

database(const std::string &database_name) : _file(std::fopen(database_name.c_str(), "rwb"))
{
    load();
    _password = get("password");
}
~database()
{
    set("password", _password);
    save();
    std::fclose(_file);
};
//程式碼片段擷取自 Secure Code Warrior 線上安全程式培訓平台

解釋:
在啟動和正確退出時讀取資料庫是確保不會出現不一致或訪問錯誤的正確方法。

第2題

錯誤區塊

AllResearch();
messg = "SHOW ALL RESEARCH";
//程式碼片段擷取自 Secure Code Warrior 線上安全程式培訓平台

解釋:
在研究人員選單中呼叫AllResearch功能,允許研究人員檢視其他研究人員的研究。 Research 選單是只有所有者或超級使用者才能存取的資訊。

主要修正方法

把錯誤代碼改成

ResearchByUser();
messg = "SEARCH RESR BY USR";
//程式碼片段擷取自 Secure Code Warrior 線上安全程式培訓平台

解釋:
只有管理員才能看到實驗室完成的所有研究。其他研究人員一定不能看到其他研究人員所做的工作,因為在一些實驗室,研究被視為機密資訊。


上一篇
C - insufficiant validation (業務邏輯:驗證不足)
下一篇
C - insecure direct object reference(存取控制:不安全的直接物件引用)
系列文
你的程式真的安全嗎?從資安的角度做 code review25
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言