iPAS 資訊安全工程師 考試重點

IS213 程式與開發安全
主題分類
1
常見程式安全弱點
2
安全開發生命週期與測試
3
記憶體安全與漏洞
4
特定語言安全
5
程式碼安全實務
#1
★★★★★
SQL 資料隱碼攻擊 (SQL Injection)
核心概念
SQL Injection 是一種攻擊手法,攻擊者將惡意的 SQL 語句插入應用程式的輸入欄位,讓後端資料庫執行非預期的指令。
原因:程式未能驗證過濾使用者輸入。
影響:竊取/篡改資料、繞過驗證、取得控制權。
防禦參數化查詢 (Parameterized Query) / 預處理陳述 (Prepared Statement)、輸入驗證最小權限原則、避免直接拼接 SQL 語句。
' or '1'='1 是常見的攻擊字串,用於繞過驗證。使用 預處理陳述 是有效的防禦方式。(資料來源:110初級-技術概論 Q19, 109初級-技術概論 Q2, Q23, Q25, 109初級-技術概論(11月) Q19, Q20, Q23, Q27, 113初級-技術概論 Q4, Q5, Q19)
#2
★★★★★
跨站指令碼攻擊 (XSS - Cross-Site Scripting)
核心概念
XSS 攻擊是指攻擊者將惡意腳本 (通常是 JavaScript) 注入到受信任的網站中,當其他使用者瀏覽時,腳本在其瀏覽器中執行
影響:竊取 Cookie/Session、釣魚、執行任意操作。
防禦輸出編碼 (Output Encoding,如 HTML 編碼)、輸入驗證 (使用白名單過濾)、內容安全策略 (CSP - Content Security Policy)。(資料來源:111初級-技術概論 Q2, 109初級-技術概論 Q23, Q40, 109初級-技術概論(11月) Q19, Q24, Q30, 110初級-技術概論(11月) Q27, 113初級-技術概論 Q2, Q21, Q24, Q26)
#3
★★★★
跨站請求偽造 (CSRF / XSRF - Cross-Site Request Forgery)
核心概念
CSRF 攻擊誘騙已驗證的使用者在不知情的情況下,向他們已登入的網站發送惡意的請求。攻擊者利用使用者瀏覽器中儲存的身份驗證資訊(如 Cookie)來執行非預期操作。
影響:更改使用者設定、轉帳、發布貼文等。
防禦
  • 同步權杖模式 (Synchronizer Token Pattern):在表單中加入一個隨機且不可預測的 CSRF Token,伺服器驗證此 Token。
  • 檢查 HTTP Referer 標頭:驗證請求是否來自合法來源(但可能被繞過)。
  • 使用 SameSite Cookie 屬性。
  • 要求使用者重新驗證(如輸入密碼)執行敏感操作。
  • 使用驗證碼 (CAPTCHA - Completely Automated Public Turing test to tell Computers and Humans Apart) 也是一種有效的防禦方式。
(資料來源:110初級-技術概論 Q25, 109初級-技術概論(11月) Q23, Q25, 111初級-技術概論 Q2, 113初級-技術概論 Q2, Q21, Q26)
#4
★★★★
軟體開發生命週期 (SDLC - System Development Life Cycle) 與安全測試
核心概念
SDLC 的不同階段整合安全活動,稱為安全軟體開發生命週期 (SSDLC - Secure Software Development Life Cycle)。
越早發現並修正安全問題,成本越低。因此,在設計需求階段就發現問題的成本最低,而在測試維護 (產品) 階段修正成本最高。
常見安全測試類型:
  • 靜態應用程式安全測試 (SAST - Static Application Security Testing):不執行程式碼,直接分析原始碼二進制碼,找出潛在漏洞。屬於白箱測試
  • 動態應用程式安全測試 (DAST - Dynamic Application Security Testing):在程式執行時,模擬攻擊者行為,測試應用程式的安全性。屬於黑箱測試
  • 模糊測試 (Fuzz Testing):向應用程式提供大量無效、非預期或隨機的輸入,觀察是否會崩潰或出現異常行為,以發現漏洞。
  • 滲透測試 (Penetration Testing):模擬真實駭客攻擊,全面評估系統安全性。屬於黑箱測試
  • 程式碼審查 (Code Review):人工或工具輔助檢查原始碼,尋找安全漏洞和不良寫法。
白箱測試需要了解內部結構,黑箱測試則否。原碼掃描屬於白箱測試(資料來源:109初級-技術概論 Q24, Q28, Q30, 109初級-技術概論(11月) Q24, 110初級-技術概論 Q27, Q29, 112初級-技術概論 Q26, Q27, Q28)
#5
★★★
緩衝區溢位 (Buffer Overflow) 與記憶體安全
核心概念
緩衝區溢位發生在程式向固定大小的緩衝區寫入超過其容量的資料,導致覆蓋相鄰記憶體。這是 C/C++ 等語言常見的漏洞。
影響:可能導致程式崩潰、執行任意程式碼、權限提升。
防禦機制
  • 資料執行保護 (DEP - Data Execution Prevention):阻止在標記為數據的記憶體區域執行程式碼。
  • 位址空間佈局隨機化 (ASLR - Address Space Layout Randomization):隨機化記憶體佈局,使攻擊者難以預測溢位目標地址。
(資料來源:110初級-技術概論 Q25, 109初級-技術概論(11月) Q20, 113初級-技術概論 Q21)
#6
★★
PHP 命令執行風險
核心概念
PHP 提供多個函數可以用來執行作業系統命令,若使用不當,可能導致命令注入 (Command Injection) 漏洞。
  • system():執行外部程式並顯示輸出。
  • passthru():執行外部程式並將原始輸出直接傳遞給瀏覽器。
  • shell_exec() 或反引號 ``:執行命令並返回完整輸出作為字串。
  • exec():執行外部程式,不輸出結果,但可取得返回狀態。
  • popen():打開一個指向進程的管道。
eval() 函數用於執行 PHP 程式碼字串,而非作業系統命令,但若處理不當也可能導致程式碼注入風險。
在這些函數中,eval() 不是直接用來執行作業系統指令的。(資料來源:109初級-技術概論 Q20)
#7
★★★★
輸入驗證 (Input Validation)
核心概念
輸入驗證是檢查和清理所有來自不可信來源(如使用者輸入、外部 API 回應)的資料,以確保其符合預期的格式、類型、長度和範圍,並移除或編碼潛在的惡意字元。
這是防禦多種應用程式攻擊(如 SQL Injection, XSS, 命令注入)的關鍵步驟
最佳實踐:
  • 伺服器端驗證:客戶端驗證(如 JavaScript)可以提升使用者體驗,但容易被繞過,必須在伺服器端進行嚴格的驗證
  • 白名單:僅允許已知的、安全的字元或格式通過,比黑名單(僅拒絕已知的惡意字元)更安全。
  • 驗證所有輸入:對所有外部輸入都應進行驗證。
(資料來源:110初級-技術概論 Q19)
#8
★★★
命令注入 (Command Injection / Cmd Injection)
核心概念
命令注入攻擊發生在應用程式將使用者提供的輸入(未經驗證或清理)直接傳遞給作業系統命令執行時。攻擊者可以透過注入特殊字元(如 ;, |, &)來附加額外的惡意命令
例如,如果一個網頁允許使用者輸入檔名來刪除檔案,其後端命令可能是 `rm user_input.txt`。攻擊者若輸入 `bob.txt; ls`,則實際執行的命令可能變成 `rm bob.txt; ls`,在刪除檔案後額外執行了 `ls` 命令。
SQL Injection 類似,根本原因在於未對使用者輸入進行充分處理(資料來源:109初級-技術概論 Q21, Q22, 113初級-技術概論 Q2, Q20)
#9
★★
不安全的反序列化 (Insecure Deserialization)
核心概念
序列化是將物件狀態轉換為可儲存或傳輸(如位元組流、JSON, XML)的過程;反序列化則是將這些資料還原回物件。
不安全的反序列化發生在應用程式反序列化來自不可信來源的資料時,如果未能正確驗證資料,攻擊者可能構造惡意的序列化資料,在反序列化過程中觸發非預期的程式碼執行,導致遠端程式碼執行 (RCE)、權限提升、DoS 等。
此漏洞常出現在需要處理複雜資料結構的應用程式中。(資料來源:109初級-技術概論 Q23, 109初級-技術概論(11月) Q19)
沒有找到符合條件的重點。