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

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 被拿來利用