111 專技高考高等考試 資訊技師 系統分析與資訊安全 考古題詳解
第 一 題30 分
軟體開發流程(Software development process)對於建置一個資訊系統的成功非常重要,包含需求分析、架構設計、細部設計、程式撰寫、測試與維護。
(一) 請比較計畫驅動(Plan-driven)和敏捷流程(Agile processes)的特性與應用的不同點,請就溝通、文件與程式、客戶與合約、需求變更、開發階段與週期等面向說明。(15 分)
(二) 國際房屋仲介公司將建置系統以管理其待售房屋(House)和客戶(Customer)資訊,進行需求擷取後整理以下需求,請完成以下初步類別圖中的(I)、(II)、(III)、(IV)和所有類別的關聯。(15 分)
-
有兩種客戶,包含賣房客戶(Seller)和買房客戶(Buyer)。
-
一個銷售人員(Sales)負責許多客戶,客戶和待售房屋資料由負責的銷售人員登錄。
-
新的買房客戶資料登錄時: (1) 登錄客戶姓名(Name)、年齡(Age)、電話(Tel)。 (2) 登錄客戶對買房的條件(Criteria)資料,包含地點(Location)、類型(Type)、坪數大小(Size)、屋齡(Age)、價格(Price)。 (3) 系統將符合標準的待售房屋加入候選房屋列表(Candidate list)。
-
新的待售房屋資料登錄時: (1) 登錄房屋的條件資料,包含地點(Location)、類型(Type)、坪數大小(Size)、屋齡(Age)、價格(Price)。 (2) 列出該待售房屋符合客戶買房條件的客戶名單。 (3) 向負責這些客戶的銷售人員發送電子郵件。
-
每位銷售人員: (1) 查詢所有待售房屋的條件資料。 (2) 查詢所負責客戶的資料。 (3) 買房客戶參觀待售房屋後,若客戶喜歡,系統將其加入喜愛房屋列表(Favorite list)。 (4) 房屋售出後,將其資料設定為已售出,系統自動將此房屋從客戶候選房屋列表與喜愛列表刪除。
-
客戶: (1) 查詢所有待售房屋的條件資料。
初步類別圖中可見的類別、列表與關聯標示如下:
- Sales
- Customer
- Buyer
- Seller
- Favorite list
- Candidate list
- House
- (I)
- (II)
- (III)
- (IV)
登入後即可作答並保存紀錄。
核心觀念
本題考兩個觀念:軟體流程的選用,以及依需求建立 UML 類別圖。
計畫驅動流程(Plan-driven)著重事前規劃、文件與階段性管控;敏捷流程(Agile processes)著重短週期交付、持續溝通與因應需求變動。類別圖則要辨認類別、屬性、繼承與關聯,並用多重度表達每一端可以連結的物件數量。
解題方法
比較兩種流程時,依題目指定的五個面向逐項對照。繪製類別圖時,先將共同的客戶資料放入父類別,再由買房客戶與賣房客戶繼承;接著依「由誰登錄」、「一對多或多對多」及「清單包含哪些房屋」建立關聯。
(一)計畫驅動與敏捷流程
| 面向 | 計畫驅動流程 | 敏捷流程 |
|---|---|---|
| 溝通 | 依正式程序、會議與文件傳遞資訊,團隊間溝通較有規範。 | 強調開發團隊與客戶持續直接溝通,藉頻繁回饋調整工作。 |
| 文件與程式 | 事前規劃並產出較完整的需求、設計與測試文件;程式依核定規格開發。 | 文件以支援開發和溝通所需為主,重視可運作的軟體及持續整合。 |
| 客戶與合約 | 客戶多在需求定義與驗收等階段參與;合約常依事先約定的範圍、時程與交付項目管理。 | 客戶或其代表持續參與,依每次交付結果提供回饋;合作與調整優先於固定規格。 |
| 需求變更 | 變更通常須經正式評估與核准,且可能影響預算、時程與後續計畫。 | 透過待辦清單與迭代規劃吸收變更,能較快調整優先順序。 |
| 開發階段與週期 | 常依需求分析、設計、實作、測試、部署等階段依序推進;每階段可能歷時較長。 | 以短週期迭代進行規劃、開發、測試與交付,逐步增加功能。 |
計畫驅動適合需求穩定、法規或文件要求高、須預先掌握成本與時程的專案。敏捷流程適合需求常變、須快速交付並依使用者回饋調整的專案。流程選擇應配合專案風險、需求穩定度與客戶參與程度。
(二)類別圖
空格填寫
- (I):
«abstract»,表示Customer為抽象父類別。 - (II):
Name、Age、Tel。 - (III):買房條件
Criteria,包含Location、Type、Size、屋齡及Price;也可將這些欄位直接列為Buyer的屬性。 - (IV):
Location、Type、Size、Age、Price,並應有房屋是否售出的狀態,例如SoldStatus。
Customer 的 Age 是客戶年齡;House 的 Age 是屋齡,兩者語意不同。
類別與關聯
第 二 題20 分
軟體品質保證(Software quality assurance, SQA)是監控軟體開發流程以確保軟體符合品質標準(如 ISO/IEC 9126、ISO 25010)的方法。軟體品質則包含許多特性,例如效能(Performance efficiency)、相容性(Compatibility)、可使用性(Usability)、可靠性(Reliability)、安全(Security)、可維護性(Maintainability)和可移植性(Portability)等。
(一) 關於軟體品質保證與軟體品質控制(Software Quality Control),請比較其任務特性的不同,包含著重點、工具性、面對缺陷(Defect)的處理方式等。(10 分)
(二) 請說明可維護性可分為哪些子特性,並以銀行存提款系統為例,說明如何測量可維護性。(10 分)
登入後即可作答並保存紀錄。
核心觀念
本題的核心在於軟體工程(Software Engineering)中的品質管理體系與軟體產品品質模型,主要涵蓋以下標準與理論架構:
- SQA(Software Quality Assurance)與 SQC(Software Quality Control)的層次區隔: 依據 IEEE 730 與 CMMI(Capability Maturity Model Integration)之定義,品質管理包含「流程面」的品質保證與「產出物/產品面」的品質控制。兩者常被混淆,考點在於釐清「預防(Prevention)」與「檢驗(Detection)」的任務定位。
- 軟體品質模型標準(ISO/IEC 25010 / SQuaRE 系列): ISO/IEC 25010 取代早期的 ISO/IEC 9126,將「可維護性(Maintainability)」細分為五大子特性:模組化(Modularity)、可再用性(Reusability)、可分析性(Analysability)、可修改性(Modifiability)與可測試性(Testability)。
- 軟體度量(Software Metrics)的實務應用: 可維護性屬於軟體內部/外部屬性,必須透過具體的定量指標(如圈複雜度、平均修復時間 MTTR、測試覆蓋率等)與領域情境(如高度要求交易一致性與法規變動的銀行系統)進行結合衡量。
解題方法
- 子題 (一) 切入點:
- 採「對比矩陣法(Comparison Matrix)」結構化呈現。國家考試評分委員偏好表格化對照,能迅速檢驗考生是否精確掌握命題核心。
- 緊扣題目要求的維度:著重點(Focus)、工具性(Tooling)、面對缺陷的處理方式(Defect Handling),並補足「生命週期階段」與「人員角色」以展現深度。
- 子題 (二) 切入點:
- 標準依據:開門見山點出依據 ISO/IEC 25010 定義之五大子特性,避免使用模糊口語或過時的 ISO/IEC 9126 舊分類(雖舊標準亦有參考價值,但 ISO 25010 是現行閱卷標準)。
- 實例情境化:將「銀行存提款系統」的業務特性(如:跨行轉帳手續費變更、帳務交易異常追蹤、高併發交易防死鎖等)融入度量指標,說明「量化指標公式/定義」與「收集量測方式」,切忌僅寫抽象觀念。
選項分析
本題為專技高考之申論題(非選擇題),無選項分析。考生於應試時應嚴格依據題號 (一)、(二) 條列作答,版面力求工整、重點加粗或標號清晰,以利閱卷委員依評分規準給分。
解題技巧
- 口訣記憶 SQA vs. SQC:
- SQA = Process-oriented / Proactive(重流程、預防勝於治療)。
- SQC = Product-oriented / Reactive(重產出、抓蟲除錯驗收)。
- ISO 25010 可維護性五大子特性速記:
- 「模(Modularity)、再(Reusability)、分(Analysability)、修(Modifiability)、測(Testability)」 記憶口訣:「模範再修測」。
- 情境測量題答題陷阱:
- 切忌只列公式不提情境。題目明確要求「以銀行存提款系統為例」,若只回答抽象的「平均修復時間」而未提及「扣帳失敗、存簿利息計算規則修改」等業務場景,分數通常僅能拿到基本分。務必將指標對應至該系統的核心模組與業務邏輯。
【答案】
(一) 軟體品質保證(SQA)與軟體品質控制(SQC)之任務特性比較
軟體品質保證(SQA)與軟體品質控制(SQC)同屬軟體品質管理系統,但分屬「流程導向」與「產出物導向」的不同層級。其核心任務特性比較如下表:
| 比較維度 | 軟體品質保證(SQA) | 軟體品質控制(SQC) |
|---|---|---|
| 著重點(Focus) | 流程導向(Process-oriented):聚焦於定義、改進與監督軟體開發流程,確保組織遵循標準(如 CMMI、ISO 9001)。本質為事前預防(Defect Prevention)。 | 產品導向(Product-oriented):聚焦於檢驗特定交付物(原始碼、架構設計書、執行檔)是否符合規格需求。本質為事後偵測(Defect Detection)。 |
| 工具性(Tooling) | 採用流程稽核與度量工具:<br>1. 流程管理與合規工具(如 Jira Process Compliance、Confluence 流程標準庫)。<br>2. 品質稽核檢核表(Audit Checklists)。<br>3. 流程度量分析儀表板(如 CMMI 評鑑系統)。 | 採用靜態與動態檢驗工具:<br>1. 動態測試工具(如 JUnit、Selenium、Postman)。<br>2. 靜態程式碼分析工具(如 SonarQube、Fortify)。<br>3. 缺陷追蹤與除錯工具(如 Bugzilla、Jira Issue Tracker)。 |
第 三 題25 分
IEC 62443 是針對「工業通信網路—網路和系統的 IT 安全性」(Industrial communication networks—IT security for networks and systems)的國際標準。在 Part 4-1 安全產品發展生命週期需求中,特別強調「基於安全的設計」(Secure by design)之最佳實務,並且實施安全實作(Secure implementation)。
(一) 請說明何謂「基於安全的設計」。(5 分)
(二) 請說明縱深防禦(Defense in depth design),並以網路銀行轉帳子系統為例,說明如何實踐面對 SQL Injection 和 Cross-site Scripting 安全問題。(10 分)
(三) 實作安全程式非常重要,請指出以下 C 函式的問題,以及如何修正。(10 分)
struct node { int value; struct node *next; };
void free_list(struct node *head) { for (struct node *p = head; p != NULL; p = p->next) free(p); }
登入後即可作答並保存紀錄。
核心觀念
本題出自民國 111 年專技高考資訊技師《系統分析與資訊安全》科目,核心聚焦於軟體安全開發生命週期(SSDLC)、架構層級安全設計原則,以及程式碼層級安全實作(Secure Coding),分述如下:
- IEC 62443-4-1 與 Secure by Design(設計即安全): IEC 62443 為工業自動化與控制系統(IACS)之國際資安標準,其中 Part 4-1 規範產品開發生命週期需求。其核心要求在於將資安控制措施前移至架構規劃與系統設計階段,而非於開發完成後才以修補(Patching)方式因應。
- 縱深防禦(Defense in Depth)與常見 Web 弱點防禦: 縱深防禦強調單一防線失效時,其他層級仍能提供保護。本題針對 OWASP Top 10 最具代表性的兩大注入與腳本攻擊:
- SQL Injection (SQLi):惡意 SQL 語句破壞後端資料庫查詢語意。
- Cross-Site Scripting (XSS):惡意腳本植入前端並於受害者瀏覽器執行。
- C 語言動態記憶體管理缺陷(Use After Free, CWE-416):
指標變數在釋放(
free)後若被繼續解參照(Dereference),即構成「釋放後使用」(Use-After-Free)。此行為在 C 語言標準中屬於未定義行為(Undefined Behavior),可導致程式崩潰(Segmentation Fault)或受攻擊者利用造成任意程式碼執行。
解題方法
- 子題 (一) 切入點:
- 明確給出 Secure by Design 的標準定義。
- 列舉關鍵支柱:威脅塑模(Threat Modeling)、最小攻擊面(Attack Surface Reduction)、預設安全(Secure by Default)與縱深防禦。
- 子題 (二) 切入點:
- 觀念定義:定義縱深防禦的多層防護概念(網路層、主機層、應用層、資料層)。
- 情境實踐:以「網路銀行轉帳子系統」為情境,必須覆蓋敏感交易特性(高可用性、不可否認性、資金安全)。
- SQLi 防護切入:區分「應用程式層(參數化查詢、輸入白名單)」、「中介/網路層(WAF 檢驗)」、「資料庫層(最小權限原則、獨立 DB 帳號)」。
- XSS 防護切入:區分「客戶端/瀏覽器層(CSP、Cookie HttpOnly/SameSite)」、「應用程式層(情境感知輸出編碼、輸入過濾)」、「傳輸與邊界層(WAF)」。
- 子題 (三) 切入點:
- 問題剖析:分析
for (struct node *p = head; p != NULL; p = p->next)之迴圈步進條件。在執行迴圈體內之free(p)後,記憶體已被歸還系統,後續在步進陳述式執行p = p->next時,存取了已釋放記憶體的成員next,造成 Use-After-Free(CWE-416)。 - 重構方案:在釋放當前節點前,引入暫存指標(如
next或temp)保存下一個節點之記憶體位址,確保走訪與釋放順序正確。
評析與陷阱
- 子題 (一) 陷阱:避免僅以口語回答「在設計時注意安全」。須明確強調「在系統生命週期初期融入安全機制」、「威脅塑模」與「成本效益」(初期修復漏洞之成本遠低於發布後修補)。
- 子題 (二) 陷阱:許多考生將縱深防禦簡化為「只要寫好 Prepared Statement 就好」,這屬於單點防禦(Single Point of Failure),不符合縱深防禦的要旨。作答必須同時展現「邊界防禦(WAF)」、「核心邏輯(輸入驗證/輸出編碼/參數化)」及「後端最小權限/隔離機制」。
- 子題 (三) 陷阱:部分考生誤以為錯誤在於沒有回傳值或沒有將指標設為
NULL。核心錯誤在於迴圈步進(Update Expression)對已釋放指標解參照。修正程式碼時,必須確保釋放節點與記錄後繼節點的順序不顛倒。
解題技巧
- 架構化作答模式:申論題採「定義 原則 實例應用」三段式排版,條列分明,使閱卷委員能快速勾稽評分要點。
- 對應 CWE 編號加分:在程式安全子題中,主動標註 CWE-416(Use After Free)與 Undefined Behavior 等專有名詞,能顯著提升回答專業度。
- 程式碼重構風格:以標準、可讀性高的
while迴圈或引進安全暫存指標的for迴圈修正,並附上精確的註解。
【答案】
(一) 「基於安全的設計」(Secure by design)之意涵
「基於安全的設計」(Secure by Design)是一種軟體與系統工程哲學,強調在系統架構規劃與設計初期(而非實作或測試之後),即主動將安全性納入核心考量,使安全成為系統固有的架構屬性。其核心要點如下:
- 主動性與生命週期左移(Shift-Left Security): 依據 IEC 62443-4-1 標準,安全需求必須於概念與設計階段確定,透過威脅塑模(Threat Modeling)識別潛在攻擊路徑,從源頭消除結構性設計缺陷,大幅降低後期修補成本與系統風險。
- 核心架構原則實踐:
- 預設安全(Secure by Default):系統出廠或初始部署時即具備最高安全層級配置(如關閉不必要之連接埠、強制高強度密碼原則)。
- 最小特權(Principle of Least Privilege):各元件僅配置維持功能所需之最低權限。
- 縮減攻擊面(Attack Surface Reduction):停用非必要功能與服務,降低可被攻擊的介面。
- 失效安全(Fail-Safe Defaults):系統遇例外或崩潰時,狀態應偏向拒絕存取(Deny by default),防止保護機制繞過。
第 四 題25 分
資訊系統的安全性非常重要,要落實安全的軟體生命週期,須從安全需求規格、安全設計階段著手整體資訊系統安全,並以安全程式設計原則與最佳實務撰寫程式。程式安全分類可協助開發者辨識安全問題,了解程式碼錯誤可能引發的安全問題,提升軟體安全。程式安全分類可以有:「輸入驗證及表示(Input Validation and Representation)」、「應用程式介面誤用(API Abuse)」、「安全特性(Security Features)」、「時間與狀態(Time and State)」、「錯誤處理(Error Handling)」、「程式碼品質(Code Quality)」、「封裝(Encapsulation)」等。
(一) 「時間與狀態」的安全問題,是在多核心 CPU 或分散式系統中,兩個事件發生在幾乎同一時間;程式設計多執行緒(Threads)、多程序(Process)等造成執行期之時間與狀態及訊息間產生非預期的交互作用。請說明這些狀況可能導致的安全問題有哪些。(5 分)
(二) 「輸入驗證及表示」是程式處理使用者或外部輸入的安全性問題,請說明此問題可能導致的攻擊有哪些。(10 分)
(三) 「錯誤處理」不適當是十分常見的程式安全缺陷問題,請舉出兩種「錯誤處理」不適當的類別或狀況。(10 分)
登入後即可作答並保存紀錄。
核心觀念
本題的核心架構源自軟體安全領域經典的「軟體安全錯誤七大王國」(Seven Pernicious Kingdoms)分類法(由 Tsipenyuk、Chess 與 McGraw 於 2005 年提出,並廣泛被 Fortify、MITRE CWE 及各國資安檢測標準所採用)。在安全軟體開發生命週期(SSDLC)的實務中,本題主要考核以下三大弱點領域的機轉與危害:
- 時間與狀態(Time and State,CWE-361 相關):涉及程式執行期間的並行性(Concurrency)與原子性(Atomicity)。當多執行緒、多程序或分散式節點在未適當同步的狀況下共用資源時,時間差與狀態轉換可能被惡意利用,破壞資料完整性或繞過安全檢查。
- 輸入驗證及表示(Input Validation and Representation,CWE-19 相關):軟體系統未嚴格落實邊界防護,直接信任或未正確規範化(Canonicalization)外部不受信任的輸入資料,使惡意構造的資料被解譯為指令或超出緩衝區限制。
- 錯誤處理(Error Handling,CWE-388 相關):系統遭遇非預期狀況時,未貫徹「安全失敗」(Fail-Safe / Fail-Secure)原則,可能導致內部敏感資訊洩漏,或使系統進入未受控、易遭繞過防禦的異常狀態。
解題方法
本題為標準的 25 分申論題,配分比重為 (一) 5 分、(二) 10 分、(三) 10 分。作答時應切入本質並依序展開:
- 第 (一) 小題(5 分):題目已指明多核心、多執行緒與分散式系統的執行期交互作用。切入點應鎖定「並行性漏洞」,提出最經典的「檢查到使用時間差」(TOCTOU)與「競爭條件」(Race Condition),並點出其引發之完整性破壞或阻斷服務危害。
- 第 (二) 小題(10 分):此小題佔 10 分,不可僅列出單一攻擊。應分門別類列出代表性的常見攻擊型態(包含注入式攻擊、跨網站腳本、路徑穿透、緩衝區溢位等),每項均簡要說明「輸入驗證缺陷如何被武器化」。
- 第 (三) 小題(10 分):要求舉出「兩種」類別或狀況。必須採取「類別名稱+具體情境+安全後果」的三段式論述,對比「資訊洩漏型(過多暴露)」與「流程控制型(忽略例外/Fail-Open)」兩種極端且常見的錯誤處理失誤。
選項分析
本題為非選擇題(申論題),無選項可供比對。各子題評分維度與答題關鍵如下:
- 第 (一) 小題:評分重點在於能否精準指出「TOCTOU」及「Race Condition」,若僅籠統回答「系統變慢」或「程式當機」將無法獲得專業分數。
- 第 (二) 小題:評分重點在於廣度與深度。需涵蓋 Web 應用層(如 SQLi、XSS)與底層系統記憶體層(如 Buffer Overflow),展現對輸入驗證範疇的全面理解。
- 第 (三) 小題:評分重點在於兩種狀況必須具備明確對比性與獨立性,不可將同一種情境(如「顯示資料庫錯誤」與「顯示程式碼行號」)拆成兩類,應清楚劃分為「洩漏內部資訊」與「忽視例外導致不安全狀態」。
解題技巧
- 專業術語精準化:回答「時間與狀態」時,務必寫出「TOCTOU(Time-of-Check to Time-of-Use)」與「原子性(Atomicity)缺失」;回答「錯誤處理」時,務必帶入「Fail-Safe Defaults(安全預設/失效安全)」資安設計準則。
- 答題結構化:每項攻擊或弱點皆以「弱點成因 攻擊手法 造成的衝擊(CIA 三要素)」架構呈現,能讓閱卷委員一眼掌握重點。
- 避免常見陷阱:
- 誤將「輸入驗證」狹義侷限在 Web 的 SQL Injection,漏掉系統底層的「緩衝區溢位(Buffer Overflow)」或「路徑遍歷(Path Traversal)」。
- 誤將「錯誤處理」當作單純的「功能性 Bug」,忽略了「詳細錯誤訊息暴露系統指紋(Information Disclosure)」正是駭客進行偵察與漏洞利用的跳板。
【答案】
(一)「時間與狀態」可能導致之安全問題
在多核心、多執行緒或分散式架構下,若缺乏適當的同步與互斥鎖控制,將破壞交易的「原子性(Atomicity)」與「隔離性(Isolation)」,引發以下安全問題:
- 檢查時間與使用時間差距漏洞(Time-of-Check to Time-of-Use, TOCTOU):
- 原理:程式在「檢查資源狀態(如存取權限、檔案是否存在)」與「實際使用該資源」之間存在微小的時間窗(Time Window)。
- 危害:攻擊者可利用符號連結(Symlink)或非同步呼叫,在檢查完畢後的瞬間替換目標檔案,使高權限程式誤對惡意檔案進行讀寫,達成越權存取或權限提升。