Upgrade to Pro — share decks privately, control downloads, hide ads and more …

開發安全分享簡報

Avatar for Kika Kika
February 02, 2025

 開發安全分享簡報

Kika 本人的第一份分享簡報
歡迎查閱XD

原創內容,若要使用請說明出處感謝 o.o

Avatar for Kika

Kika

February 02, 2025
Tweet

Other Decks in Technology

Transcript

  1. Who am I? ▪ 有參加過 IT 邦幫忙 鐵人賽 Security 組

    *2 的無名小卒 ▪ DevSecOps Taiwan 社群志工 ▪ kikasecures.com 部落格作者(裝 B 部落格)
  2. 渣男 / 渣女式的全方位清理 ▪ 了解做成捉姦武器的原料會不會被動手腳 ▪ 不要相信渣男/渣女說出來的話 – 左耳進、右耳出,自動過濾 ▪

    處理有可能讓我們捉姦失敗的 case,好好紀錄一切的錯誤 ▪ 反覆測試捉姦武器 ▪ 甜言蜜語防護罩 ▪ 不要被發現我們要展開報復行動 – 演練被發現的方式 ▪ 不要被抓到把柄,讓他們 PUA 你
  3. 了解做成武器的原料會不會被動手腳 原料 程式語言 其他套件 原罪 可用的函式 JavaScript 原型鏈污染 eval Node.js

    文件相關 別人做的原料 要知道怎麼做初步檢查 執行命令相關 初步篩選使用的套件
  4. JavaScript 有什麼問題? 原型鏈污染 ▪ 何謂原型鏈? 在 JavaScript 中,所有的物件都有一個隱藏屬性 [[Prototype]](也叫 __proto__)

    ,這個屬性指向另一個物件,稱為「原型」。 如果你試圖存取一個物件中不存在的屬性,JavaScript 會沿著這個「原型鏈」往上 尋找,直到找到該屬性或到達 null(原型鏈的終點)。
  5. 原型鏈 Obj_1 isAdmin? Parent_ Obj isAdmin? Grandpa_ Obj isAdmin: false

    isAdmin? false Obj_1. __proto__ -> Parent_Obj Obj_1. __proto__.__proto__ -> Grandpa_Obj Obj_1. __proto__.__proto__.__proto__ -> Object.prototype
  6. 原型鏈污染 Obj_1 isAdmin? Parent_ Obj isAdmin? Grandpa _ Obj isAdmin?

    Obj_1. __proto__ -> Parent_Obj Obj_1. __proto__.__proto__ -> Grandpa_Obj Obj_1. __proto__.__proto__.__proto__ -> Object.prototype Object.prototype isAdmin: true isAdmin?
  7. JavaScript 有什麼問題? 原型鏈污染的可能危害 ▪ DoS 拒絕服務 竄改通用方法如:toString(),把字串變成整數,導致非預期行為,甚至是崩潰。 ▪ RCE 遠端代碼執行

    如果程式碼包含 eval(object_a.attr),而攻擊者污染了 Object.prototype.attr,他們 可能利用這一點來執行惡意程式碼。 ▪ Property Injection 屬性注入 剛剛的 isAdmin..
  8. Node.js 的原生函式? fs、child_process ▪ 使用任何跟檔案、路徑、命令相關的函式時,都需要注意清理或是 使用參數化。 ▪ fs: – fs.readFile()、

    fs.readFileSync() 、fs.writeFile() 與 fs.writeFileSync() 等。 ▪ child_process: – exec()、execFile()、spawn() 等。
  9. 錯誤處理的注意事項 ▪ 只記錄錯誤到伺服器端的 Log 文件。 ▪ 返回通用訊息給 Client 端(Stack 錯誤

    就不需要,因為太詳細了)。 ▪ 使用 4xx 和 5xx 狀態碼區分用戶端錯誤與伺服器端錯誤,並避免在 Response 中暴露實作細節。
  10. Log 紀錄 ▪ 權限問題 – 僅允許授權的用戶或服務存取 Log 文件。 – 最小權限原則。

    – 定期清理與存檔 Log 文件。 – 使用安全的 Log 工具(Ex. Log4j、Winston),避免直接拼接 Log 字串。 開發人員 log Read only
  11. 反覆測試捉姦武器 ▪ Unit test (記得進行極值測試) – 可能可以檢測出潛在問題,如:溢出問題、數據溢界或處理異常輸入時的安 全缺陷。 ▪ Eslint、SonarQube

    等等 – Eslint: 幫助開發人員識別和修復代碼中的潛在錯誤(如未處理的異常、未遵 循安全標準的代碼結構)。 – SonarQube: 檢測程式碼中的漏洞、錯誤以及技術債務等。
  12. 不要讓你的網站隨便可以執行別人的 JavaScript (雖然還是有可能被繞過) ▪ CSP 設定 – 可以在伺服器端 header 加上

    Content-Security-Policy: default-src 'self'; – 或是在 Client 端的 HTML meta 標籤加上設定: – 如果是老舊系統過渡期可以改用 report:
  13. 一起珍惜 Git 紀錄,好嗎? ▪ 不要把什麼東西都上傳 – API Key、密碼等其他敏感資料 – .gitignore

    要寫好,首次 push 以前記得檢查紀錄 ▪ 不要保有所有的 Legacy code (舊的不需要用的函式就移除) – 因為舊有的函式有可能有潛在的漏洞 or 被拿來利用