# Cissp Domain 8 Software Development Security 軟體開發安全
軟體開發不只 Programer 有影響,整個生態都有影響
不同層的網路協定有弱點,不同層的軟體也有弱點
軟體安全的環境
* 元素 elements (程式使用的元件庫library 人員 人員執行的活動 程式要處理的資訊 系統跟系統的介接 ):使用者/攻擊者/
## Threat Surfaces: Local and the Web 投影片有圖 P11
也有一個新名詞 Attack Service Management
使用程式的流程
1. 使用者 開了 ftp app,app準備開始使用雲端服務
2. 要求端點連上internet
3. server 的程式使用的環境
4. Data本身讀取與傳輸
---
## Executable Content and Mobule code P12
Mobile code 遠端不在你的電腦,送進來執行的
例如 ```沒在用了 Javaaplets ActiveX_Controls``` , scripts or binaries
這些 code 有些可能是惡意的
老師某天覺得電腦很慢,工作管理員顯示 chrome吃很兇
利用 chrome 自己也有工作管理員,查到被安裝了 **coinhive** 前端的挖礦程式

---
## Sandboxes 沙箱(瀏覽器的) P13
限制 mobile code 只能在瀏覽器內,要跳到 host 會被禁止
Oracle 有 applet,有數位簽章就是 privileged(signed) 因為是可信任的,權限比較大,沒有數位簽章的某些是不能做,讓 sandbox 有一些限制,舉例
* Access client resources
* Connect to or retireve resources from any third-party server..
* 只有oracle 有 不是全部 sandbox
---
## Vulnerabilities Aceross the Cycle Od Software Build and Use P14
安全的敵人是複雜,coding 過程可能產生複雜情況,導致測試不完整 疏漏,或是人員 coding 寫錯,包含:
* 規劃設計時沒考量到可能的情形
* 有規則但開發人員漏掉
* 測試 建置時漏掉這些安全規範
---
## Finding Vulnerabilities:De;ays Drive Costs to Fix P15
軟體開發發顯得弱點及風險,越早發現成本越低
> 簡單說早期發現早期治療
參考圖片 https://www.pcb.its.dot.gov/standardstraining/mod48/sup/m48sup.htm

---
## The Good News: P16
* Legal and market forces demand greater security in systems
法令法規要求醫療或隱私等等需求
軟體處理PII > GDPR需事先考慮隱私
處理醫療資訊HIPAA>modial records
* classic errors can be unlearned, prevented, found and fixed. 典型錯誤透過以前的經驗學習避免錯誤再度發生
* 一定要學軟體開發才能確保嗎? 不一定 , 每個角色在軟體開發,每個SDLC裡面的角色與職責R&R(Role & Responsibility) 必須明確注意
* Each Stage(SDLC stage) is an opportunity to reduce threat surface
* Good( or better) pratices exist: 可參考的框架
* DevSecOps, OWASP
---
## 軟體架構威脅建模 P17
威脅建模是什麼? 風險評鑑+風險處理,只是他是從威脅攻擊面切入,為了避免威脅攻擊成功,設計時要把安全規格放進去軟體需求,避免上線後被威脅攻擊
框架舉例:微軟提的 STRIDE
要養成心態,去思考 **被破壞的資產是什麼** or **被破壞的是哪一項防禦**
---
## Goal Data-Centric Prroction P18
NIST(800-154)以保護資料為中心,這份還是 Draft(草稿)
* Protect data form for,network, system and software threats
1. 資料盤點
2. 分析威脅
3. 找出控制措施
4. 評估控制措施有效性
* Malformed input attacks can force abnormal software behaivor 攻擊者把攻擊 pattern 夾帶在輸入資料內,如果程式沒有對輸入防護,就可能對軟體造成影響
* 攻擊可以是任意輸入的資料介面 來源 任意格式
* 任何的輸入都有可能是指:UI input、config、環境變數等等,都是不可信的外界來的
輸入框是 input

例如常見的 sql injection ```' or 1=1--```

網址是 input

user agent 也是 input

---
## Software Development Lifecycle(SDLC) Phases(Waterfall) P19
1. Initiation/Requirements 需求分析 What to do 軟體要做什麼
* 會產生需求規格書 敏捷開發產出:敏捷會利用某些平台去進行記錄
1. Functional Design 設計階段
* 如何去設計他?
* 描述UI/演算法如何設計
* 產出:設計規格 敏捷開發產出:設計如何開發他
2. Detailed Design
3. Development開發階段
* 產出:程式碼
*
4. Testing 測試階段
* 測試程式碼內容有無問題
* 測試設計規格是否有出現
* 確認需求是否有被實現
* 產出:測試計畫(STP),STD(EX:撰寫Test Case),測試報告(STR)
8. Production
* 進行
10. Maintenance
```mermaid
flowchart LR
1.需求分析_產生需求書 --> 2.設計_產生規格--> 3.開發_產生code
subgraph CI 持續整合Continuous_Integration
3.開發_產生code--> 4.測試_產生測試計畫
end
4.測試_產生測試計畫 --> 5.產品
subgraph CD 持續部署Continuous_Delivery
5.產品 --> 6.維護
end
6.維護 -->1.需求分析_產生需求書
```
Waterfall 開發法
優點:適合規模大 需求明確
缺點:速度慢沒有彈性
---
## 補充 有圖 P20
```mermaid
flowchart TD
SDLC-->Sequential-->Waterfall
SDLC-->Iterative_and_Incremental
Iterative_and_Incremental-->Agile
Agile-->ExtremeProgramming
Agile-->Scrum
Agile-->Lean
Agile-->Kanban
Iterative_and_Incremental-->Other
SDLC-->Others
```
* Sequential/Waterfall 大型專案(2-3年)每個階段都要明確的里程碑,速度慢比較沒彈性
* 需求分析3個月
* 無法應付現行開發環境
* Iterative &Incremental 小步快跑 Iterative是迭代,開發完1~2功能就當一個階段(快速試錯,快速修正)
* Agile敏捷
* 敏捷除開發外也可當作專案管理方法
* 不是一種特定方法論,是一種思維
* 敏捷是一種思維,透過快速試錯,快速修正達成迭代
* 最終目的:達到客戶需求讓客戶滿意價值
* 敏捷宣言
* 個人與互動 重於 流程與工具
* 可用的軟體 重於 詳盡的文件
* 與客戶合作 重於 合約協商
* 回應變化 重於 遵循計劃
me Programming 極限開發法
* 特色是 pair programming 一個撰寫Code 一個進行Code Review
* Scrum 知名度較高
* Sprint 2-4週
* 昨天做什麼?今天做什麼?有沒有碰到一些挑戰
---
## 敏捷宣言 agile manifesto
前面黑字是比較重要 後面比較沒那麼重要(注意 沒那麼重要 不是 不要做)
* 英文版 https://agilemanifesto.org/

* 中文版 https://agilemanifesto.org/iso/zhcht/manifesto.html

敏捷好記口訣 變通快 好更好
---
## Scrum 流程圖
1個 sprint 2~4週
ProductBacklog= 所有需求清單
SprintBacklog由 programmer 認領誰做那些需求
DailyScrum 站立會議meeting
```mermaid
flowchart LR
ProductOwner --> ProductBacklog
ProductBacklog --> SprintBacklog
subgraph 1個sprint
SprintBacklog--> DailyScrum
DailyScrum --> DailyScrum
DailyScrum --> SprintReview
SprintReview --> SprintRetrospective
SprintRetrospective --> SprintBacklog
end
```


---
## Lean 精實開發
概念是製造業來的 (toyota產線來的),目的是 避免浪費
人力不多,要避免沒有增加客戶價值的活動 ,ex
* 一直開會沒產出
* 任務太多一直做切換
## kanban 看板
概念也是製造業來的 (toyota產線來的)
透明化溝通 clear communitcation
trello可以模擬看板
## 站立meeting 一小段範例
北美工程師在家工作的一天|我自己的真實版
HackBear 泰瑞
https://www.youtube.com/watch?v=cULgfb_v4GE

---
## Continuous Integration and COntinuius Delivery CI/CD 持續整合 持續交付 P22
CI Integration 整合:
* 開發
* Build
* 測試
CD delivery 交付:
* build後有一個人把關,按下去才能佈署 vs build佈署到主機這段全部自動化
* pipeline (開發/測試/部署)像產線依樣自動化
CI:出現比較早CD:出現比較晚
## CI/CD 101 影片
https://www.youtube.com/watch?v=z_oLA56gE7o
有一個 server 監控程式變更狀態

線上測試 通過passed 沒通過failed自動通知開發人員

CD階段 hold看有沒有人把關

---
## DevOps 框架 P23
CAMS 模型四個原則 (John 和 Damon Edwards 提出)
CI(DEV)/CD(OPS)
* Culture文化:各角色間的合作,包含開發人員、機房佈人員
* Automation自動化:透過CI/CD
* Measurement 測量:改善流程,設計指標KPI(EX:Deployment 週更新日更新?)
* Shareing 共享:資訊共享,知識共享,快速回饋
圖片參考來源
https://www.synopsys.com/glossary/what-is-cicd.html

## DevSecOps P24
其實就是把安全擺進去 DevOps
SAST DAST 就是原始碼分析
S是 static 靜態分析 白箱
D是 Dynamic 動態分析 黑箱
參考圖片:https://www.netsolutions.com/insights/what-is-devsecops/

5的 Software Signing Package 階段 有無數位簽章
devsecops 和 原始圖片的關鍵字
gartner devsecops toolchain
https://www.gartner.com/en/documents/3975263
---
## 選擇軟體專案生命週期模型 P25
沒有好或不好 只有適合或不適合
---
## Secure SDLC Development Lifecycle P27
1. 資安需求左移 Shift Left, shift to the left
2. 每一個階段都要整合安全活動
> 考試可能會考第二點
## Requirements Analysis P28
Traditionally
* Functional requirements (Use Case、UserStory)
* Nonfunctional requirements - ex:performance,例如按下去後3秒要有回應
> 這會有什麼資安風險? 例如登入錯誤寫:帳號錯誤(代表沒這個帳號) 密碼錯誤(代表有這個帳號只是密碼錯了)
* Identity Security requirements 參考 misuse case誤用案例
---
## Design : Threat Moding
為什麼前面一開始就做過威脅建模 這裡又要一次?
這邊是針對系統架構或是資料流去檢視的,如果發現有,就要寫進去設計需求內
* Identity potential software threats and mitigate them
* STRIDE as an example of a popular threat modeling approach
## OWASP Threat Dragon
https://www.threatdragon.com/#/
一隻可愛小恐龍,可以線上編輯威脅建模

## 微軟的 microsoft threat modeling tool GA 威脅模型化工具
只支援 Azure 自己的 STRIDE
https://learn.microsoft.com/zh-tw/azure/security/develop/threat-modeling-tool-releases
---
## Who Writes your source code 投影片還有一兩項沒寫到 P32
越上面信任度越高
* Major hardware and systems vendors
* Applications software vendors and platform providers
* Third-party developers (custmize, tailor, orphan support)
* in house programmer
* ...
* mobile code
Citizen Programmers 業餘開發者 開發時較無資安知識
---
## Coding :Procedural vs. Object-Oriented Concepts P33
Procedural programming 結構化 structural
* cobal (subprogram)
* fortran (functions)
Object-oriented programming (OOP) 物件導向
* packages data/attribute with the operations (稱為methods)
* 封裝的東西叫 classes/subcasses:class run 起來就變成 object 物件
both support
* 共同優點:相同code可以重用不用重新開發
---
## OOP特徵 P34
1. 封裝 Encapsulation:有 Data hiding資料隱藏的特性, 程式沒開public給你用的話,其他人不能用
2. 繼承 Inheritance :繼承上層的類別
3. 多形 Polymorphism:
## Inheritance P35
ex animal 這個 class 有talk function
貓繼承 animal這個 class,就有talk,但是實做方法可以自訂
因此可以自訂成 貓.talk(喵喵)
## 多型 Polymorphism P36
Polymorphism:進場的動物,用自己的方法叫
Polymorphism(多型性)和RTTI(Run-Time Type Information
Complier的時候還沒決定怎麼執行,等 runtime 的時候再決定
```python=
def talk(self):
print ("Animals talk")
# method
class dog(animal):
def talk(self):
print(”(子)汪汪")
# inheritance/child
class cat(animal):
def talk(self):
print("(子)喵~")
# inheritance/child
class bird(animal):
def talk(self):
print("(子)啾啾")
# inheritance/child
def
polyfunc(obj) :
print("我是"+obj.getname)
obj-talk()
# polymorphism/RTTI
0bj_cat = cat("小貓")
00〕
dog - dog("小狗")
0bj_bird = bird("小鳥")
#obj_animal = animal ("*)
#print ("Name="+obj_cat..
_name () )
# data hiding (Error, Denied)
#print ("Name="+obj_dog- get
-_ name()) # encapsulation and inheritance
#polyfunc(obj_bird)
# polymorphism
```
---
## CommonExploitable software source code P38
需要給 progammer 訂規範,才能有好的 coding practices
用到不安全的第三方code
流程管理不好
攻擊方式
buffer overflow...後面都有
## Common software vulnerabilities
* Malformed input attacks 輸入驗證
* buffer overflow 溢位
* convert tunnel 走特殊管道繞過驗證
* Trapdoor or backdoor (不是木馬), 是開發人員留下來的捷徑,例如按 ctrl+F1 可以繞過登入畫面,上線忘了拿掉就可能被拿來攻擊
* memory or other object reuse 垃圾回收 garbage reuse
## Buffer Overflow (緩衝區溢位) P40
塞入過多字串推擠程式,導致有機會執行任意程式碼
解決方法:長度檢查
```
char mybuffer[5]
printf(argv[0])
strcpy(mybuffer,argv[1])
```
即時防護技術
* ASLR 資料亂數塞入記憶體,增加攻擊被實現的難度 (但還是有機會被 try error 找出來)
* DEP 限制 data segement 不能執行
windows 搜尋 exploit 惡意探索保護,可以看到 ASLR 和 DEP

---
## Stack-based Buffer Overflow(基於堆疊的緩衝區溢位)
call function 的時候會出現 stack
載入資料時,攻擊者用溢位的輸入,在堆疊覆蓋掉原本的 return address,使其跳轉到攻擊者控制的代碼
> Chat GPT補充:攻擊者利用函數調用時在堆疊上分配的緩衝區,向其中注入超出緩衝區大小的數據。這可能導致修改函數返回地址,使其跳轉到攻擊者控制的代碼。
---
## Covert Channel 隱匿通道、管道 P41
本來是不允傳遞 但被利用來傳送
* Storage 儲存空間型:例如 linux/tmp 手機的SDcard 都是共用的儲存空間,如果有要求寫入權限,就有可能造成被偷夾帶東西走或是偷看
* Timing 因為回應 讀取等時間不同,可以察覺出特殊現象,例如都是密碼錯誤,但真的有帳號的登入後等5秒才錯誤,不存在的帳號等1後就回錯誤,就可以猜到帳號清單
---
## Race Condition 賽局衝突 P43
兩個程式同時試圖修改一個資源,在沒有衝突控制的情況下,最後可能兩個都執行成功,但只記錄後執行的結果。
https://zh.wikipedia.org/zh-tw/%E7%AB%B6%E7%88%AD%E5%8D%B1%E5%AE%B3
* 同個時間存取多個資源
* same resource
* 解法:鎖定 Use lock
參考投影片圖片
---
## TOCTOU Attack P44
TOCTOU (Time-of-Check to Time-of-Use)
也是 Race Condition 的一種
* 攻擊是一種基於時間差的攻擊,通常發生在操作系統或應用程式對檔案或資源進行檢查和使用之間的時間間隔。攻擊者利用這個時間窗口,可能在檢查後但使用前修改或替換檔案或資源,導致安全性問題。TOCTOU攻擊的常見場景包括檔案系統、資料庫、設備IO等。
---
## Source code Analysis tools P45
* 使用自動化工具
* SAST(Static Application Security Testing)靜態應用程式安全測試,例如 Fortify、CheckmarX、SonarQube
* SAST 是一種軟體安全測試方法,主要在應用程式的開發階段或事前(pre-production)階段進行。這種測試方法的目標是檢查應用程式的原始碼、位於開發環境中的程式碼或二進位碼,以尋找可能存在的安全漏洞和程式碼缺陷。
* 可以搭配 IDE plugin在開發階段檢查
* 使用人工稱為 peer code review
上述不是二擇一,而是可以全都使用
* Support all SDLC phases, all methodologies.
* Weakness 自動化工具的漏洞
* 商業邏輯錯誤檢查不出來
* 誤判 沒事當有事 原碼檢測誤報率通常較少
* 漏報(False Negatives):有事當沒事 工具可能因為無法正確辨識某些程式碼模式或漏掉特定類型的漏洞,而導致未能發現潛在的安全問題。
* 設定檔的問題查不到
* OCX,DLL,.SOC等等 二進位的無法解開分析
---
## Secure Coding Guidelines and Standards
每個開發人員有自已的習慣,所以要給一個共通標準,但 guideline 不好寫,可以參考後面的卡內基美隆大學提供的軟體開發 guideline。
公司寫不出來,也可以寫要參考哪一些原則讓開發者去看指引
FailedSecurity:
* Coding
* Prefence
* Familiarity
* Haste 快速
* Ignorning best practices
* Reusing first thing found
* Ad hoc approach
successful security
* framework, patterns,and templates for proven functions,優先用framework
* Enforcement for data typing,range check 關注在資料輸入、資料範圍檢查 (input validation)
* 使用可信任的 libraies
* 控制整個流程 SSDLC
## Carnegie Mellon University 卡內基美隆大學提供的軟體開發 guideline
這邊會寫得非常詳細與完整,程式語言、可能產生的攻擊、錯誤程式碼範例、正確程式碼範例
參考來源 https://wiki.sei.cmu.edu/confluence/display/perl/IDS33-PL.+Sanitize+untrusted+data+passed+across+a+trust+boundary

---
## Libraries and toolsets P47
Libraries
* Standard Libraries OS API
* Third-party add-on libraries
* Open-Source libraries
* 缺點:套件的開發人員自己做的快捷功能(例如快速顯示錯誤訊息 跳過某些檢查),可能變成我們code的風險
toolsets: can enhanceproductivity and security
* Configuration productivity and security
* 軟體組態管理:引進BOM概念
* SBOM 有兩種主流格式 cycloneDX、SPDX
* 可以找 owasp dependency-check ,看 sbom 的東西
> 資通安全弱點通報系統(Vulnerability Analysis and Notice System, 簡稱VANS)結合資訊資產管理與弱點管理,掌握整體風險情勢,並協助機關落實資通安全管理法之資產盤點。
> [資通安全弱點通報機制(VANS)
](https://www.nics.nat.gov.tw/Vans.htm?lang=zh)
* Comilier 有很多參數可以增加安全,例如偵測到 buffer overflow 就禁止直行
* IDEs 的檢測工具,可以程式寫法好不好(品質性和安全性等兩種)
* IDE 代表集成開發環境(Integrated Development Environment)
---
## Deploy More Securely Using Operationg System and Hardware Support(利用作業系統和硬體支援進行更安全的部署)P48
表示在部署(安裝和運行)應用程式或系統時,藉助作業系統和硬體提供的安全性功能和支援來增強整體安全性。
盡量用系統本身有的安全能力,避免自己開發,不要發明輪子
開發人員 不要自己繞過作業系統的安全功能
案例:某開發人員要設計使用者和實體行為分析(UEBA)的功能,開發人員想說讓使用者使用簡便,就刻意繞過UAC功能可以不用按**同意**功能,可能會有疑慮
---
## 密碼學 solution P53
Shadow IT ,例如SaaS也是 ShadowIT,也需要遵守公司的加密規範
不要自己建立新的密碼學演算法,因為沒被驗證過可能不安全
---
## What is Software Quality Assureance 怎麼確保軟體品質 P53
* 確保軟體的需求都有達成
* 沒有錯誤
* 沒有可以被攻擊的漏洞
確保有按照 Process 執行 (就是SSDLC)
---
## 測試階段
與資安相關:
* 原始程式碼分析
* 黑箱測試 DAST Acunetix、OWASP ZAP、滲透測試
* 白箱測試 SAST Source code analyze
與資安無關測試:
* regression 回歸測試 針對整體功能使用性測試
* smoke testing冒煙測試:重要功能進行測試 (水管工在管子灌煙 看有沒有漏煙)
* 效能測試:運作反應 品質類
* 負載測試:測試系統在正常或預期最大負載下的表現。這通常涉及模擬多用戶同時訪問系統的情境。
* 壓力測試 負載爆掉後 還能不能保持在安全狀態
開發階段測試:
* unit testing 單元測試,唯一一個在開發階段做的測試
使用者一起參與的測試
* user assert testing(縮寫 UAT),交付前的最後一個測試,這個做完通過就驗收了
---
## 部署階段
安全的 runtime 環境
* Production secure configuration 環境要有安全組態
Operation & Maintain 安全監控
* 沒版更也要做弱點掃描
---
## Formal Approaches for software Assurance
紀錄 稽核 檢查 按規範執行 認可設計的決策
認證和授權 Certification and accreditation (C&A): failing out
Risk management frameworks
SEI SW-CMM 逐漸被 成熟度分析CMMI(apability Maturity Model Integration ) 取代CMMI 提供了更全面、整合的能力模型。
> CMMI 以前考試有考過
Key process area
OWASP 提出的 Software Assurance Maturity Model 軟體安全品質模型 縮寫成 [OWASP SAMM](https://owaspsamm.org/model/)
* 分成五大面向,每個面向三個活動,進行自評,確保軟體開發的品質成熟度

* OWASP SAMM自評表
[
](https://sammy.codific.com/fill/strategy-and-metrics)
---
## 軟體品質成熟度 Software Capability Maturity Model Integration (CMMI) (CMMI)
CMM模型不只在CMMI,其他很多領域都有參考這個
CMMI level 1 不用驗證,因為 1 就是現況,不管多麼亂七八糟就是 level 1
跟資安沒關係,但跟軟體品質有關係
1. 初始級(Initial Level):
* 特徵: 組織的過程是未穩定的,通常是不可預測的。專案的成功高度依賴於個別的才華和努力。
* 焦點: 在此層次,組織可能剛開始進行軟體開發,並尚未建立穩固的流程。
2. 可管理級(Managed Level):
* 特徵: 組織建立了基本的專案管理流程,以確保專案能夠按時、按預算和按照要求完成。
* 焦點: 強調專案管理的流程,包括計劃、監視和控制,以確保專案目標的實現。
3. 定義級(Defined Level):
* 特徵: 組織定義了一個統一的軟體開發過程,並在整個組織內進行了標準化。
* 焦點: 強調統一的標準流程,以確保組織的軟體開發過程是可預測的和標準化的。
4. 量測級(Quantitatively Managed Level):
* 特徵: 組織開始對軟體開發過程進行量測和分析,以持續改進。
* 焦點: 強調定量的流程管理,並使用數據來指導和優化軟體開發過程。
5. 最佳實踐級(Optimizing Level):
* 特徵: 組織致力於持續的過程改進,以確保其軟體開發過程處於最佳狀態。
* 焦點: 強調組織的學習和持續改進,以應對不斷變化的需求和環境。
> Level 4,5 進行量化管理及持續改善
---
## SoftwareAssurance Throughout the Life Cycle P57
軟體開發會貫穿整個生命週期
---
## Software Assurance Security Assessment(軟體的安全性進行評估)P58
借風險評鑑的流程,來看軟體開發
1. strategic planning
2. security needs
3. risk assessment
4. Systems process quality
5. 待補
6. 待補
## Security for Third-Party Software P59
Most software is not developed inhouse 大多數軟體開發不是自家生產的
商業套裝軟體 Commerical off the shelf COTS套裝軟體(EX:Microsoft 365)
Contract委外開發:開規格給廠商
## Software Assurance During Acquisition P60
採購流程
```mermaid
flowchart TD
Planning-->Contraction
Contraction -->Monitoring,Acceptance,Deployment
Monitoring,Acceptance,Deployment-->Ongoin_gUse_and_Support
```
* Plaing
* RFP
* 服務建議書
* Contracting
* 評商/POC,資安資格 (資安認證 資安證照 曾發生資安事故)
* Monitoring,Acceptance,and Deployment
* 簽約,將前述內容寫進合約,驗收
* Ongoing Use and Support
* MA後續保固及維護
Orphaned Software and System Security Assessment(孤兒軟體和系統安全評估)P61
怎麼會有孤兒狀態? 例如EOS (原廠倒了或不維護了)
1. transition plan 找替代方案
2. Security assessment can still be worthwhile 風險迴避
3. consider "virtual patch" 考慮VirtualPatch擋威脅,例如 WAF
---
## Mergers and Acquisitions : Special Issues(併購:特殊問題)
* 進行風險評鑑
---
## 執行環境安全 runtime security P69
container 本身也是一個程式,有時候開發方便都給 container 最高管理者權限,需要適度考量他的權限 **最小權限原則**
Audit logging 操作紀錄要被記錄下來,事後稽核才能用
保護程式與資源的使用 (ram 或 disk 使用量)
---
## Control and Separation of Enviroments P70
PG TEST Operation 環境要做隔離
---
## Secure Software and Systems Needs for Configuration Management P71
用自動化工具產生 SBOM,依照相依程式去找有無某些上層元件有漏洞
---
## Web Application Environment(網頁 or webapi 應用程式環境) 73
* Most attacks are conducted at the application level 大多數攻擊出現在web應用程式層
* Websites web apps depend on mobile code of many forms. 嫌端
obfustcation 擾碼、混淆
前端混淆器範例
[](https://utf-8.jp/public/aaencode.html)
* Vulnerabilities
* Techical reconnaissance
* error msg
* Threats
## Web應用程式保護 P75
* Strategies 部署前的策略
強化應用程式
強化作業系統
* Controls 例如 使用第三方ckeditor工具,結果開發人員不小心把範例程式放到 production 正式環境,雖然主程式有保護,但範例程式沒做保護,攻擊者就利用範例程式繞過原有的防護,把惡意程式碼放上去
控制措施
* DO:
* 加密 https
* 看有無 patch
* 重要 Log 要保存
* 避免原始錯誤訊息曝光在網頁畫面
* Do Not:
* Cache secure pages 不要快取敏感頁面
---
## Representational State Transfer (REST) Security P76
* 這個架構當初是用來搭配分散式的多媒體,
* 設計概念是被 www 的概念啟發的
* http 協定都有支援
* REST/REstful API
共6原則 client-server、Statless (下略)
REST(Representational State Transfer)是一種軟體架構風格,它基於以下六個原則:
1. **狀態無狀態(Stateless):**
- 通信必須是無狀態的。每一個請求從客戶端到伺服器端都必須包含足夠的資訊,以便伺服器能夠理解和處理該請求。這意味著伺服器不會在請求之間保留任何客戶端的狀態。
2. **伺服器-客戶端架構(Client-Server Architecture):**
- 伺服器和客戶端是獨立的組件,它們分別負責不同的任務。伺服器負責資源的提供和管理,而客戶端則負責使用者介面和使用者體驗。
3. **快取(Cacheability):**
- 必須能夠在伺服器和客戶端之間進行快取,以提高效能。伺服器的回應中應包含指示快取行為的資訊,而客戶端則應能夠遵循這些指示。
4. **統一介面(Uniform Interface):**
- 統一介面是REST的核心原則之一,它包含了一組統一的操作約束,使得伺服器的資源能夠被客戶端一致地操作。這包括資源的識別、表現層的統一、自描述消息和超媒體作為應用程式狀態的引擎(HATEOAS)。
5. **層次化系統(Layered System):**
- 系統應該被分為多個層次,每個層次都有特定的功能。這有助於提高系統的擴展性,並支持不同層次的獨立演進。
6. **按需程式碼(Code-On-Demand,可選):**
- 這是一個可選的原則,表示伺服器可以向客戶端提供執行程式碼的能力。這使得客戶端能夠在需要時下載和執行特定功能的程式碼,擴展其功能。
---
## API 規格參考,標準格式是 swagger
* 台北旅遊網 https://www.travel.taipei/open-api

API架構
1. API Gateway
2. 微服務架構
3. 後端架構
* Container 1 F1
* Container 1 F2
* Container 2 F3
* Container 2 F4
---
## Application Programming Interface(APIs) P77
* Authentication
* Authorizations : OAuth(domain5)
* Encryption加密
* Preventing unauthorized data entry / modification 防止未經授權的修改
* Rate limiting 防止呼叫過多次
1. **身份驗證(Authentication):**
- 要求使用者或應用程式提供有效的身份驗證憑據,確認其身份。常見的身份驗證機制包括 API 金鑰、OAuth、JWT 等。
2. **授權(Authorization):**
- 確保使用者或應用程式只能訪問其被授權的資源和功能。實施細粒度的授權控制,根據使用者的角色和權限進行設定。
3. **使用 HTTPS(Secure Communications):**
- 透過加密的通信協定(如 HTTPS)傳輸數據,以防止數據在傳輸過程中被竊取或竄改。
4. **避免敏感信息在URL中明文傳輸:**
- 避免將敏感信息(如密碼或憑據)放在 URL 中,以免被截取或記錄在伺服器日誌中。
5. **限制HTTP方法:**
- 根據 RESTful 慣例,限制支援的 HTTP 方法,確保只有合法的操作能夠被執行。
6. **防止 CSRF(Cross-Site Request Forgery):**
- 實施防禦 CSRF 攻擊的措施,確保只有合法且授權的請求能夠被處理。
7. **監控和日誌:**
- 實施監控和日誌系統,能夠記錄和檢測異常行為,提供對潛在威脅的早期警告。
8. **速率限制:**
- 實施速率限制機制,防止濫用和惡意使用,確保正常的服務資源不被過度耗用。
9. **資料驗證:**
- 對於從客戶端接收的輸入進行嚴格的資料驗證,防止注入攻擊和其他安全漏洞。
10. **定期安全審查:**
- 定期進行安全性審查,檢查 API 的安全性設計和實現,並進行必要的修補和更新。
---
## Open Web Application Security Project (OWASP) P79
強烈推薦至少要看 OWASP top 10 的 injection
各種 OWASP 出的東西
* OWASP top 10
* OWASP Mobile Top10
* OWASP API Security Top 10
* Web Security Testing Guide
* Offensive Web Testing Framrwork
* Mobile Security Testing GUide
* Cheat Sheet Series
* Securiry Knowledge Framrwork (3)
* 教育訓練平台
* Zed Attack Proxy
* AMASS
* amass 是 owasp 的一個專案,它專門用於網路情報收集,它的主要可以收集的相關資訊如下 :APIs、Certificates、DNS、Routing、Scraping、Web Archives、WHOIS
## Database Management System DBMS資料庫管理系統架構 P82
DatabaseEngineDB引擎:
* MSSQL Oracle PostgressDB Mysql
使用方式
* 直接對DB下指令
* 透過應用程式(API)去存取DB
---
## DB 主要觀念 P83
Structured Query Language(SQL)
* 一個DBMS可以有很多個DB
* 一個DB很多Table
* 一個Table有很多colummn和row
* 描述 Table結構 叫做 schema
Table的資料排起來長這樣
```
row1col1 row1col2 row1col3
row2col1 row2col2 row2col3
row3col1 row3col2 row3col3
```
> 行跟列中翻英需特別注意
schema 就是 | 姓名 | 電話 | 年 |
| 姓名 | 電話 | 年 |
| -------- | -------- | -------- |
| 丁一 | 2934 | 1968 |
Markup Languages and Databases
* HTML for display,不適合結構化資料呈現
* XML :適合結構化呈現,跟DB感情比較好,容易匯入匯出
---
## 操作DB的指令 P84
DML: CRUD 四種操作 Create(insert),Read(select),Update,Delete
DDL(Only DBA):我去建立schema
DCL(Only DBA):管理權限用的
* 給予權限GRANT, 禁止權限DENY, 移除REVOKE
Queries
* Uesr-entered,stored(view) or via application interfaces(APIs)
* stored procedure
---
## 連結DB的方法 投影片有圖片 P85
```mermaid
flowchart TD
Application --- ADO --- OLE_DB
Application --- OLE_DB --- SQLDATA
```
---
## Database Models P86
* Transaction persistence 資料寫進去就永遠有效
* Fault tolerance and recovery 提供容錯功能
* Sharing by multiple users 多個使用者共同使用
* 資訊安全控制措施
常見資料庫類型:
* ~~Hierarchical 沒在用了~~
* ~~network 沒在用了~~
* relational(RDBMS)關聯式資料庫,例如MSSQL OracleDB MySQL(雖然現在也有讓關聯式同時使用NoSQL的機制,但不是主要功能)
* object-oriented
* NoSQL:相比RDBMS效能較好,可作為大數據使用,適合作水平擴充
* 有 BigTable key-value 等流派
* NoSQL不是沒有SQL,他只是Data Base形式不一樣,也是會有 SQL injection 的風險
* graph 圖資料庫 也是一種 NoSQL DB 物件與物件之間的關聯 Neo4j
---
## ACID RDBMS Transaction Properties P88
符合這四個要求,就算發生錯誤也能確保這資料庫是正常的
* Automicity : All-or-none 一組指令操作只有 全部成功 或 全部失敗 沒有做一半的
* Consistency: intergrity constraints
* Isolation: lock 鎖定,用來解決 race condition的功能
* Durability: transaction persistence
---
## Integrity Constraints
* Entity integrity
* PK
* Unique, non-null
* Referential
* FK
* Valid refence to a primaty key
---
## DB applications: OLTP and Data Warehouse P90
* Online Transaction Processing (OLTP)
* 重視兩個安全議題
* Atomicity (透過Transanction)
* 避免 concurrency problems 衝突 (ACID的I)
* Data Warehouse(資料倉儲)
Designed to help you analyze data (OLAP)
> 是一種數據處理技術,用於快速而動態地分析多維度數據。主要用於支援商業智能(BI)和決策支援系統,使用戶能夠以直觀的方式探索和分析大量數據。
Control manage **metadata** change use
metadata 包含:資料來源 格式 單位 欄位定義,OLAP分析時需要參考metadata
metadata 可以產出 insight 中文翻譯 洞見/洞察 (BI),可以作為決策支援
---
## Threats to Database and Data Warehouse Architectures資料庫的威脅 P91
* SQL injection
* Bypass attack繞過
* Intereption of data 資料被攔截造成外洩 C
* Data Contamination 資料防護不足被汙染 I
* 未授權的存取
* View沒有做好控制
* Alternative, but not quite equivalent,query paths. 兩個可以存取到一樣資料的function,但路徑不一樣導致防護不同,攻擊者就會挑好打的路進去
* Aggregation 聚集 and inference 推論
* TOCTOU
* 解決方式 lock
* day lock:X正在用A,Y在等A,解決方式:Time Out
* Deadlocking 死結造成 time out
* Physical or direct logical access to the server 實體存取
* Web-based attacks web類的攻擊
---
## DBMS 防禦機制
講OS等級
* System Level OS
* Within DBMS機制
* USE IAM
* Data base維持資料一制性
* ACID機制
* Record(or object level)
* locks
* Atomicity COnsistency,Isolation,Durability
---
## XSS範例

http://altoro.testfire.net/search.jsp?query=%3Ch1%3E%26%2323383%3B%26%2324456%3B%26%2322823%3B%3C%2Fh1%3E
搜尋框輸入以下字串,可以讓 logo 改成連去 google
```
<script>document.querySelector("#HyperLink1").href="https://www.google.com"</script>
```
http://altoro.testfire.net/search.jsp?query=%3Cscript%3Edocument.querySelector%28%22%23HyperLink1%22%29.href%3D%22https%3A%2F%2Fwww.google.com%22%3C%2Fscript%3E
---
## Malicious software (malware 惡意程式) P93
* Viruses:會傳播會感染,需要使用者介入(EX:使用這要去點他)
* Worms蠕蟲:具有網路感知,自己到處找漏洞自己打
* TBD這三個是木馬程式有關聯性,可以遠端控制
* Torjans: 可遠端控制 (RemotAccessTrojans RAT),連去
* Botnets: 殭屍網路,2007年的 mirai botnet事件,60萬台物聯網被控制去打遊戲伺服器造成 DDoS
* Distributed Denial of Service 阻斷式服務 DDOS
*
* Ransomware 勒索軟體
* Spyware and Adware 間諜軟體 廣告軟體
* Hoaxes 網路謠言,
* fakenews(假新聞)
* misinfo(不實訊息)
* disinfo(帶風向惡意訊息,認知作戰)
* Pranks 惡作劇
* Logic Bombs 內部人員做的,例如非自願離職故意埋定時刪除資料的惡意炸彈
* Logic bombs(邏輯炸彈)
* Social enginerring
* rootkit 隱匿行蹤,目的是躲避偵測