---
# System prepended metadata

title: CISSP筆記(Domain5~Domain8)

---


🐫 溫馨提醒 🐫

>[color=blue] **親愛的朋友**，如果您正在準備 CISSP 的路上，希望這篇筆記能幫上一些忙。
>這筆記主要是拜讀[Erwin教練的筆記](https://hackmd.io/cUkFeDdITfuVE-eabQ9jOA?view)、Benson教練筆記加上2023年**Wuson課程經驗**、OSG/OPT與**網路資料**整理，無任何營利用途。


  > [color=orange] **備註 :** 我的 CISSP 相關的領域知識與最後衝刺，是受恩師 [Burce 吳文智老師](https://wentzwu.com/about/)啟蒙與指導。
  > Burce老師[網站](https://wentzwu.com/cissp/)有非常多的原創 CISSP 學習資源，也是本篇筆記中多處引用的，請大家務必前往挖寶。
  > 筆記內容如有錯誤/疑問，請以OSG課本或Wuson Bruce老師為主，也可以發信告知owem777@gmail.com，謝謝 
  
## Domain 5: Identify and Access Management (IAM,I+3A)
### 📝存取控制
- 老師教材 : [Identity and Access Management](https://wentzwu.com/2019/06/27/identity-and-access-management/)
:::warning
### 口訣: I+3A
   - **Identify Management** 出示⾝份
   - **Authentication** 檢查⾝份
   - **Authorization** 授權
   - **Accounting** 紀錄行為

:::
:::info
**Access control** : 主體(subject)對客體(object)的存取行為，必須受到3A管制。   **存取=使用**
**Account** : 代表實體的技術手段，帶有屬性。也就是Identity
**Credential**= Identity+Authenticator
**Authenticator** : 信物，證明身份的一種東西，例如: 密碼、private key、生物特徵等等
**Authentication Factor** : 信物存放的形式
- something you know，例如: 密碼記在腦袋
- something you have，例如: private key存在裝置，保管
- something you are，例如: 生物特徵 (NIST認為最不安全、秘密性不足、永久不變)

:::


- 以使用者角度來解釋 **I+AAA**
![身分識別](https://i0.wp.com/wentzwu.com/wp-content/uploads/2019/06/identityandaccessmanagement.jpg?ssl=1)


-  **身分驗證三步驟** 流程
    - **Identification** (==**1.出示身分**==)(告訴人家我是誰)
      - 使用者輸入**帳號**/**密碼**，按下送出
      **帳號**: 代表實體的技術，每個帳號都有多個屬性，密碼是其中一個
    - **Authentication** (==**2.檢查身分**、 **3.通知結果**==)
      - 收到帳號密碼到⽬錄、帳號資料庫(Ex. AD Active Directory)比對，==**驗證是確認提供⾝份是否為真實的過程**==
        >[color=orange] 相關協定:
        >- **DAP (Directory Access Protocol)⽬錄存取協定**: ==X.500==、讀&寫 (X.500)、帳號資料庫 (X.500)
        > 
        >  - **LDAP**: Lightweight Directory Access Protocol (X.500瘦身版本)
        >    - 讀與寫協定 (LDAP 的存取協定)
        >    - 目錄的結構 走 X.500 (帳號資料庫)
        >    - 可以對資料庫做新刪修查詢(CRUD) : Creat/Read&Retrieve/Update/Detele
        >    
        > 常見攻擊:駭客使用 Mimikatz 工具表示有人試圖擷取使用者**密碼雜湊值**，以用於針對 Microsoft Active Directory 帳戶的雜湊傳遞攻擊。
      - 完成身分驗證會拿到 Token，Token 內會有 Assertion 斷言
      - ==**通知結果**== 的內容
        > [color=green] 具體使用 **Token** 
        > ServerSide 驗證後回覆 **AccessToken** 給 Client (授權的基礎)
        > 後續 Client 出示 **Token** 去存取資源

        > [color=gray]Token 通常放什麼?  **斷言 "Assertion"**
        >  - ID, User name, Token有效期限, 其他屬性 (依需求) 
        >  - 技術上常存在 **cookie** 中來傳遞
        >  - 因為 Server 檢查過 (斬釘截鐵/背書/鐵口直斷) 稱放了斷言(Assertion, SAML)或叫 宣稱(Claim),包含一些user自己輸入的資料，如userID 
        
        >[color=orange] 將 Token **描述**的格式統一，讓大家都看得懂
        >==**SAML**== , Security Assertion Markup Language - 以**XML基礎**
            >- 包含三種類型的語句 : ⾝份驗證、屬性和授權，⽤於在各⽅之間交換⾝份驗證和授權數據，特別是在==IDaaS（⾝份提供者）和服務提供者之間==。
            >- SAML 解決的最重要的⼀個⽤例是 Web 瀏覽器單點登錄 (SSO)
            >- ==**SAML +X ACML**更適合企業對企業或供應鏈集成==。
            >- ==**SAML沒有安全模式**==，需要時依靠TLS 和數字簽名來確保安全 (TLS 提供消息**機密性和完整性**，可以防⽌竊聽。)

        > ```
        > 範例: <ID>Jack</ID>
        > ```
        >==**OIDC**== , Open ID Connect - **JSON 基礎**
            >- ==OpenID Connect 是 OAuth 2.0 協議之上的⼀個簡單⾝份層==
            >- **OIDC 和 OAuth 2.0** 的組合最適合**互聯網和社交媒體**
            >- OpenID Connect 指定了⼀個 ==RESTful HTTP  API，使⽤ JSON 作為數據格式。==
            >- OpenID Connect 允許⼀系列客⼾端（包括基於 Web、移動和 JavaScript 的客⼾端）請求和接收有關經過⾝份驗證的會話和最終⽤⼾的信息
            >- OpenID 提供身份驗證，但不包含設定檔資訊。
            >- OpenID Connect (OIDC) 使用 JavaScript 物件表示法 (JSON) Web 令牌 (JWT)，為基於 Internet 的單一登入 (SSO) 提供驗證和設定檔資訊。
        >```
        > 範例: { ID : 'Jack'}
        >```
- **什麼時候應該使用 OIDC 與 SAML**？
    - 想要**實施成熟的標準，已經存在很長時間的東西**，然後選擇 ==SAML==。它功能豐富，十多年來一直是**企業網絡的主要組成部分。**
    - 想要==快速建立身份平台，選擇 OIDC==解決方案要簡單得多。
    - ==以 API 為中心的架構==，有很多移動和單頁應用程序，使用 **OIDC**，能保證更高效和可互操作的體驗。
    - ==OIDC 基於 OAuth 2.0在安全性上==，它包含了許多記錄在案的威脅模型和安全注意事項。加密 JSON 也比 XML 容易得多，這再次減少了實施錯誤的機會。
 - 使⽤ **OAuth(授權協議)** 的偽⾝份驗證
      OAuth 是訪問授權的開放標準，通常⽤作互聯網⽤⼾授予網站或應⽤程序訪問其在其他網站上的信息但==不提供密碼的⼀種⽅式。亞⾺遜、⾕歌、Facebook、微軟和 Twitter 等公司==使⽤此機制來允許⽤⼾與第三⽅應⽤程序或網站共享有關其帳⼾的信息。==**OAuth是⼀種授權協議，⽽不是⾝份驗證協議**==。單獨使⽤ OAuth 作為⾝份驗證⽅法可以稱為偽⾝份驗證

### 📝**Identity Management ⾝份管理(IdM)** -訪問控制類型

  - **集中式訪問控制：**
    1. ==**⼩型團隊或個⼈可以管理。**==
    1. ==**管理開銷較低**==，因為所有更改都在⼀個位置進⾏，並且單個更改會影響整個系統。
    1. ==**集中訪問控制**== 可能會產⽣單點故障。
    1. 集中式⾝份管理解決⽅案的另⼀個好處是它們可以擴展以⽀持更多⽤⼾。
  例如，Microsoft Active Directory 域可以僅從⼀個域控制器開始。隨著公司的發展，管理員可以添加額外的域控制器來處理額外的流量。
  - **分散的訪問控制：**
    1. 通常需要 ==**多個團隊或多個⼈**==。
    1. ==**管理開銷較⾼**==，因為必須在多個位置實施更改。
    1. 隨著訪問控制點據數量的增加，==**保持整個系統的⼀致性變得更加困難**==。
    1. 對任何單獨的訪問控制點所做的更改都需要 ==**每個訪問重複作一次**==。
:::info
其他Authentication(驗證身份): **目錄/SSO/MFA/Kerberos (三頭狗)**
:::
### 📝**SSO (Single Sign-On) 單⼀登入**
**使⽤者登入⼀次就可以跨系統使⽤資源**，強調使⽤者觀點，是⼀個軟體特⾊⽽不是⼀個技術
  - ==**Federated Identity** (聯合⾝分)== 到別人家用 ：使⽤者在 ==**每個系統都有⾃⼰的帳號，透過聯盟的關係**==，使⽤盟主的帳號即可跨系統登入，Ex. On-premise、IDaaS 、Momo 、FB (用google 帳號登入)
  - **Integrated Identity** (整合⾝分) 自己家用 ：⼀個使⽤者只有⼀個帳號，可以跨內部系統 Ex. 微軟 AD (Active Directory)
  - **Scripted Access** (腳本存取) ：老系統，可寫程式幫忙登入，讓使⽤者感覺只登入⼀次，Ex. Logon Script、Shell Script 

![](https://hackmd.io/_uploads/B1H9hNkT3.png)

### 📝**多因子驗證**
**Multi-Factor Authentication**
- 驗證身份(Server 確認你宣稱的如你所說)，達到條件 NIST 提三標準 (三個因子)
	> [color=blue]**Something you know(腦袋中的)**
  > PIN, Password, Secret Key and Private Key

	> [color=blue]**Something You have(持有的)**
  > Smart Card ex:自然人憑證, OTP
  
  > [color=blue]**Something You are(身上有的生物特性)**-生物特徵 
  > a. Physiological:臉部辨識、手(包含指紋、手指靜脈、掌紋)、眼睛(虹膜、**視網膜-較安全**)
  >b. Behavioral：聲音、簽名、打字的動態行為特徵
  >c. Biological：DNA、血糖
- ==**NIST不認為生物特徵安全**==，秘密性不足，永久不變，生物特徵因子最好結合其他因子

### 📝**生物辨識錯誤率**
- 生物辨識規格中重要的數值
  > ![](https://i.imgur.com/FxftV9d.gif)
  > ![](https://hackmd.io/_uploads/r1PmCnV63.png)

  - Threshold 門檻值 : 唯一可以調整的 (依據實際場域與嚴謹程度調整)
  - **FRR 誤殺比率** (Type 1 Error)
  - **FAR 錯放比率** (Type 2 Error)
  - **EER 相同錯誤率** Crossover Error Rate (CER)
  - 敏感度提高CER上升、FAR下降、FRR上升; 敏感度下降 CER下降、FAR上升、FRR下降
  - **影響生物辨識設備使用的三種因素 :**
    - enrollment time : 註冊花費時間，約2分鐘以下。 
    - throughput rate : 辨識率，生物辨識系統回應時間，通常 6-10秒。
    - acceptance : 接受度，是否與隱私有關。
- 補充故障名詞
    - **MTTF (Mean time to failure)平均故障時間**：
     是設備在特定操作環境下的 **預期典型功能壽命**。
    - **MTTR (Mean time to repair)平均修復時間**：
     是對設備執⾏ **修復所需的平均時間長度。衡量一個產品可靠性的指標**=
    - **MTBF (Mean time between failures)平均故障間隔時間**：
     是對第⼀次和任何後續故障之間的時間的估計。



### 📝**Kerberos (三頭狗)**
- **Kerberos三個主要元素**：==Client、Server、KDC (Kerberos Distribution Center)密鑰分配中⼼==
     - **AS (Authentication Server)⾝份驗證服務**
     - **TGT (Ticket-Granting-Ticket) 票據授權票據**：又稱**Golden ticket**，⾝份驗證後才可以取得，概念想成電影兌換卷
     - **TGS (Ticket Granting Server) 售票中⼼**：要⽤該Server，要到售票中⼼，拿著TGT來買那個Server的“Server’s Ticket”= Application Server Ticket。
     - **ST (Service Ticket)**=Ticket-Granting Service (TGS) Tickets，又稱**Silver ticket**。可以想成電影票

 - 運作⽅式：
    - **Client透過User ID、Password與AS進⾏身分驗證後取得TGT**
    (The KDC uses the user’s password to generate a hash and then uses that hash to encrypt a symmetric key. It transmits both the encrypted symmetric key and an encrypted time-stamped TGT to the client.)
    - **Client提供TGT給TGS驗票，取得Application Server Ticket**
    - **Client提供Application Server Ticket給Application Server確認後，提供服務**

![](https://hackmd.io/_uploads/ByrPKT4an.png)

- Authentication(驗證身份)的 **Protocols**
     - Remote Network
        - **PPP** (Point to Point Protocol)
             - PAP：密碼驗證協議（明碼Clear Text），信物直送
             - CHAP：挑戰與回應協議（MD5）
             - EAP 系列擴展認證協議：框架，讓廠商自行擴展身分驗證的協議
         - **VPN** 
             - 建虛擬網路線 Tunnel
             - 提供安全服務 (如基於 IPSec) (Tunnel 要不要加密)
          可-選擇是否加密
  - Local Network
    - **NAC (Network Access Control)** 
   ==**802.1X**== (IEEE制定關於使用者接入網路的認證標準，為**想要連接到LAN或WLAN的裝置提供了一種認證機制 RADIUS**
       - 常用於端點裝置
       - The network access server is the client within a RADIUS architecture. (OSG)
       - The RADIUS server is the authentication server, and it provides authentication, authorization, and accounting (AAA) services. (OSG)
       - 目標是偵測/阻止惡意裝置、防止或減少零時差攻擊、確認更新和安全性設定的合規性、在整個網路中實施安全性策略以及使用身分來執行存取控制
   >By default, RADIUS uses ==UDP== and only encrypts passwords. RADIUS supports TCP and TLS, but this is not a default setting.
  - Intranet 
      - NTLM
      - Kerberos
  - Extranet
      - SAML (with XACML)
  - Internet
      - OpenID Connect(with OAuth2)
      - HTTP:Basic and Digest

### 📝**TCS**
**TCS＝TCB+非安全元件**
-    TCB (Trusted Computing Base) 信任運算基礎
     - 電腦系統的採購規範
     - ⼀套電腦系統內安全元件的總成(最低要求)
-    **Security Perimeter (安全邊界)**-邊界內僅包含所有安全元件
-    **安全元件**:
     - Security Kernel (安全核⼼)
     - TR (Trusted Recovery) 信任復原
     - ==**TPM(可信任平台)**==
![](https://hackmd.io/_uploads/rkc93pVp2.png)
-    **TPM (可信平臺模塊)**
     - 可信平台模塊 (TPM) 是一種微芯片，旨在提供基本的安全相關功能，==**主要涉及加密密鑰**==。
     - TPM 安裝在計算機的主板上，它通過使用硬件總線與系統的其餘部分進行通信
     - TPM是主機板和規範實施的通⽤名稱。==**TPM可⽤於實現廣泛的基於密碼學的安全保護機制。**== 
     TPM晶片通常⽤於存儲和處理硬體⽀持或作業系統實現的本地儲存設備加密系統的加密⾦鑰。
     TPM是硬體安全模塊（HSM）的⼀個⽰例。
     HSM是⼀種密碼處理器，⽤於管理和存儲數位加密⾦鑰、加速加密操作、⽀持更快的數位簽章和改進⾝份驗證。HSM可以是主機板、外設
          >  [color=blue]Remote attestation (遠端證明)：從系統配置中創建⼀個哈希值來確認配置的完整性
==**Binding (綁定)**：加密數據的技術==
==**Sealing (密封)**：加密數據的技術==
RNG (隨機數⽣成器)：功能⽤於⽀持加密操作。



   存取資源如何知道是否有權限
### 📝 **Authorization 授權**
- 授權是 ==(服務或資源提供者)== 根據提供的token和訪問控制矩陣，確定是否可以將訪問請求授予主體的過程。
    **Ex. 以File Sever 為例**
     - 檢查權限方式
       - 方式一、查詢本地 **權限表**
         > - **權限表 Access Control Matrix** P.383 
         > (觀念與 TBC Security Kernel AAA 呼應) 
       - 方式二、集中式架構 : 連結至**授權伺服器**
         ![](https://hackmd.io/_uploads/H1WsrXP0h.png)

         - Policy Enforcement Point：**PEP** (管制點) [File Server]
         - **Policy Decesion Point：**PDP**(決策點) [驗證伺服器] (含權限表)**
         - PAP (Policy Administration Point)：管理授權的介⾯ (使⽤單位設定Policy)
         - PIP (Policy Information Point)：管理屬性及相關的值的元件

     - **權限表** 統一**授權協定**儲存與表達格式的問題 
       >[color=red] 將 **權限表** 的格式統一
       >==**XACML**== , eXtensible Access Control Markup Language - **XML基礎**
       > - PEP、PDP 概念設計，**應用場域 : 如 供應鏈嚴謹**
       > - XACML 主要是**基於屬性的訪問控制系統(ABAC)**，也稱為基於策略的訪問控制 (PBAC) 系統，其中與⽤⼾或操作或資源相關聯的屬性 (數據位) 被輸入到決定是否給定⽤⼾可以以特定⽅式訪問給定資源
       > - 基於⾓⾊的訪問控制(RBAC) 也可以在 XACML 實現，作為 ABAC 的專⾨化。
       >==**OAuth2**== - **JSON基礎**
       
     - **授權的判定概念與對應實作**
![](https://hackmd.io/_uploads/r186dC7-a.png)
       - ==**DAC: Discretionary Access Control**== 隨意型自我授權
        - 建立在**state machine狀態機**模型的基礎上
         - ⼀種授權政策，數據所有者 ==**根據所知需求(need to know)和最⼩權限(least privileges)**== 原則做出授權決定。(Owner)
         - ==**⾃我宣告 Identity-Based(基於⾝分)**== 早期僅對照ID帳號為基礎．==**從資源的⾓度設定權限**==。(Custodian)
         - 安全管理員或數據保管⼈根據    
         **主體Capability Table ==(能⼒表)==** 和**對象Access Control List ==(訪問控制列表)==** 的⾝份，對存儲在稱為 **Access Control Matrix ==(訪問控制矩陣，權限表)==** 的數據結構中的系統實施授權決策。
         - 例如: Windows 系統的文件、資料夾權限
         -![](https://hackmd.io/_uploads/rk6PYC7-6.png)
       - ==**MAC: Mandatory Access Control**==  強制存取控制
          - 建立在**state machine狀態機**模型的基礎上
          -    DAC 會受到舞弊、人為錯誤風險，因此有了**強制型MAC**
          - 人員一開始就做**身家調查**核定機密等級，比對人員**機密等級** 標籤
          - 通過**基於lattice (格)理論**匹配**主客體標籤**來控制信息流來彌補DAC的弱點
          - 橘皮書BLP model強調的是機密性，用制度來補足DAC
          - 例如: 軍方人員等級與可存取專案、Biba
          - 支援三種環境：分層(各種分類標籤依照從低安全性到高安全性的有序結構分配)、隔離(忽略級別，而只允許存取任何級別的各個隔間)和混合
       - ==**RBAC**==: Role-based AC  用**角色**來控管
          - 允許您按**角色**、群組授予訪問權限
          - 例如: Windows OS 帳戶權限，WordPress 站台
       - ==**ABAC**==: Atribute-based Access Control 以屬性為基礎(客製化) 
           - 根據**用戶特徵、裝置特徵、操作類型**等來確定訪問權限。
              - **(Criteria-based)** 不同屬性需求，如主/客體屬性、裝置屬性(Ex.需ASUS筆電)、環境屬性(Ex.晚上不能⽤)
              - **(Score-based)** 把屬性轉換成分數，在分數看是否授權
              - 實作用 XACML
              - 例如 : SD-WAN 軟體定義網路
        - ==**Rule-base**== 
          - 等同防火牆，便於集中管理
        - ==**History-base**== 
          - 看過往連線的紀錄
        - ==**Risk-based**== 
          - 根據環境和情況決定存取權限。可以要求用戶在存取基於雲端的資源時隨時使用多重身份驗證(OSG)
### 📝存取控制模型 (OSG)
**Model**|**完整名稱**|==**關鍵特徵**==|**實現方式與解決**|==**例子**==
-----|-----|-----|-----|-----
DAC|Discretionary Access Control|每個 Object 都有一個所有者,所有者可以授予或拒絕其他任何 Subject 的訪問 |使用客體ACL|Windows 系統的文件、資料夾權限
RBAC|Role Based Access Control|使用 Role 或 Group|可消除特權潛變 Privilege Creep，強制執行 Least Privilige|Windows OS 帳戶權限，WordPress 站台
ABAC|Attribute Based Access Control|可包含多個屬性的規則,比RBAC更靈活|屬性可以是用戶、裝置的任何特徵|SD-WAN 軟體定義網路
MAC|Mandatory Access Control|使用應用於 Subject 與 Object 的 Labels,又稱 Latice-based Model,且為 Implicit Deny|依賴 Classfication Labeles (也需 Need To Know)|軍方人員等級與可存取專案
Rule-based AC|Rule-based Access Control|Restriction(限制) 、 Filter(過濾器)| |防火牆

- **補充:**
    -    有人登錄到您的計算機系統。那個人能做什麼？如果您使用 ==RBAC 技術，該問題的答案取決於該人的角色。==
    -    RBAC 語言中的角色通常是指具有某些特徵的一組人，==例如：部門／地點／資歷水平／工作職責==  
    -    在授予任何使用者存取資訊的權限之前，需要確認-安全許可Clearance與需求須知 need to know
- Accounting 全程都要記錄行為
     ==針對主體的活動⽣成記錄或⽇誌的過程==，以便可以強制執⾏問責制。
     - Accounting (紀錄⾏為)：==通常為Log紀錄==
     - Auditing (稽核)：==Audit Trail (稽核軌跡)==
   - Accountability (當責)：追究==責任==

### 📝**安全模型BBCC**
下列為較常見的 Security Model(學術理論)
:::info
BBCC 記憶點:
1. BLP -》LP跟雞有關，所以是**雞**密性；禁南下，不能往下寫
2. BIba -》8BQ 要吃丸子，所以是**丸**整性
3. 用心(星)寫簡單讀，其他三個不，用禁南下反推(畫四宮格)
4. Clark -》clock 時鐘都有1-12點很「完整」
5. 中國牆-》中國有太多「機密」，不公開
:::
- ==**BLP Bell-Lapadula Model**== 
  - 目的 : 確保系統**機密性**，(不能往上讀 ，不能往下寫)
  - 橘皮書的核心理論
  - 禁南下政策 (No Read UP , No Write Down)
  - **管制資料流動**
    - Simple 簡單屬性 (管制讀取上一層) 
    - Star 星號屬性 (管制寫入下一層)
![](https://hackmd.io/_uploads/Hy5AcmP02.png)

- ==**Biba Model**== 
  - 目的 : 確保 ==**完整性** (資料不被汙染)==
  - 禁北上政策 (No write up,no read down)
    - Simple 簡單屬性 (管制讀取下一層) 
    - Star 星號屬性 (管制寫入上一層)
![](https://hackmd.io/_uploads/ryvls7PR2.png)

- ==**BrewerNash Model**(**Chinese Wall**)== 中國長城 防火牆
  - 目的 : 確保系統**機密性**
  - 設定 ==**利益衝突**群組==，根據**歷史讀取紀錄**，動態**阻絕**
  - Chinese Wall，一旦顧問訪問了諮詢客戶 Acme Cola 的數據，他們就無法再存取屬於 Acme Cola 任何競爭對手的數據，以在屬於不同客戶端的資料之間建立「中國牆」。
- ==**Clark-Willson Model**==  : 完整性  (透過交易達到完整性)
  - 確保**完整性**
  - 模型的存取控制關係包含三個部分**主體、客體和程式（或介面）**。
  - 以**交易**為基礎，一個工作單元 會有好幾個存取動作
  - **職責分離，SOD**，寫入與職責是分開的
      - 這種模型使用了下列元素：
        - 用戶活動個體。
        - 轉換過程(Transformation Procedure，**TP**) 可編程的抽像操作，如讀、寫和更改。
        - 約束數據項(Constrained Data Item，**CDI**) 只能由TP操縱。
        - 非約束數據項(Unconstrained Data Item，**UDI**) 用戶可以通過簡單的讀寫操作進行操縱。
        - 完整性驗證過程(Integrity Verification Procedure，**IVP**) 檢查CDI與外部現實的一致性。
- ==**Graham-Denning  Model**==  : 可以操縱存取控制矩陣並透過授權強制執行機密性。


:::danger
**授權原則**
- Need to Know (職務相關)
- Least Privilege (砍站要夠)
- **Security Policy** 安全政策
  - Policy
    - Standards
      - Procedures
        - Guidelines
:::

### 📝Defense in Depth 縱深防禦 (OSG)
- 組織使用縱深防禦來實施訪問控制
- 透過 ==**多個層級**的**訪問控制**來提供**分層安全性**==
  - Physical
  - Logical / Technical
  - Administrative
- **人員**是**關鍵組成**部分,需要適當的 ==**意識、培訓**和**教育**==，**遵守**和**支持**組織**安全策略**中定義的安全元素。

### 📝Access Control Types(OSG)
- (ISC)2 以時間序列來看
  - **事前**
    - 指示類 Directive  (行政管理類) : 管理意圖表現 
    - 嚇阻類 Deterren (告知你後果，不要這樣做) : 打消動機
    - 預防措施 Preventive (Ex. 門禁管制) : 提高門檻
  - **事中** 
    - 偵測措施 Detective (一直測密碼)
    - 矯正措施 Corrective (保全來看)
  - **事後** 
    - 復原措施 Recovery (已被破壞)
    - 補償措施 Compensating (現行的不好用)
                
- 按期實現方式分類
  - **Administrative** 行政管理類
    - 安全策略、程序
    - 人員招募、背景調查
    - 意識訓練
    - 分類、標記 
  - **Logical/Tecnical** 邏輯/技術類
    - 身分驗證 (密碼、SmartCard)
    - 受限接口
    - ACL
    - 防火牆
    - IDS
  -  **Physical Control** 實體類
        - fence 圍欄
        - motion detection 動作檢測
        - alarms 警報器
        - Cameras 攝影機

### 📝**Credential Management System  帳號密碼管理程式**
- 紀錄常用帳號密碼,輔助登入
- 帳號密碼管理程式

### 📝**身分驗證因子(OSG)**

- Authentication Factors
  - **Type 1** Some thing you **know**
    - 腦中知道的 (如密碼、PIN)
    - Password 密碼
      - 長度,至少8字元
      - 複雜度,特殊符號
      - 歷史,避免一段時間內重複
    - Password Phrases 密碼短語
      - user 自己挑選有意義的句子 Ex. `ThisIsMyPasswordWhat?`
    - Cognitive Passwords 認知密碼
      - 根據一系列問題設定回答
      - 注意可能從網路上取得相關答案.
      - 最好方式是自己建問題,使工作變得困難
  - **Type 2** Some thing you **have**
    - 手邊擁有的
    - SmartCard
    - TokenDevice
      - Synchronous Dynamic Password , 基於時間
      - Asynchrous Dynamic Password Token, 基於演算法與遞增計數器
    - Two-Step Authentication
      - TOTP (Time-Based One-Time Password) 以時間為基礎
      - HOTP (HMAC-Based One-Time Password) 以HMAC為基礎

  - **Type 3** Some thing you **are**
    - 身體上的 ( Biometric Characteristics 生物特徵)
    - Fingerprints
    - Face Scans
    - Retina Scans 視網膜掃描
      - 掃描眼睛後部的血管模式,準確度最高的生物辨識 (能分辨雙胞胎)
      - 隱私支持者反對 , 因為會透漏醫療健康狀況(高血壓、懷孕)
      - 早期有空氣、新技術用紅外線
    - Iris Scans 虹膜
      - 瞳孔周圍彩色區,準確度第二高
      - 但可以使用高解析度圖像破解
      - 眼鏡與隱形眼鏡會干擾
    - Plam Scans 手掌掃描
      - 針對 Vein Patterns 靜脈
    - Hand Geometry 手部幾何圖形
      - 較少使用
    - Heart/Pulse Patterns 心臟/脈搏
    - Voice Pattern Recognition 聲紋比對
      - 較少單獨使用作身分驗證
    - Signature Dynamics
      - 判斷簽名的順序力道
    - Keystroke Patterns
      - 判斷敲鍵的力道與速度



### 📝訪問控制模型 (OSG)
Privilege(特權) = Permission(權限) + Right(權利)

- **授權機制**
    - **Implicit Deny** 隱式拒絕
    - **Access Control List** 關注 Object
    - **Access Control Matrix** 訪問控制矩陣
    - **Capability** 能力表 (與 ACL 不同處,能力表主要關注 Subject,如用戶、組、角色)
    - **Constrained Interface** 約束接口 (限制用戶可執行或查看 Application、Menu 的內容)
    - **Content-Dependent Control** 依賴內容的控制 (Data Base 的 View，限制 user 可察看的範圍)
    - **Context-Dependent Control** 依賴上下文的控制  (授予訪問權限前須有特定的活動,Ex.購物車與結帳流程)

- **授權的Principle**
  - **Need to Know** 知其所需
  - **Least Privilege** 最小特權
  - **Speparation of Duties and Responsibilities** 職責分離與責任分離


### 📝風險要素 (OSG)

- Identifying Assets (資產)
  - Asset Valuation 資產實際價值,但不僅是購買的價格,包含了收入與損失
  - intangible aspects (無形資產), Goodwill (商譽)
- Identifying Threads (威脅)
  - Advanced Persistent Threats,APT 進階持續性威脅 
  - Thread Modeling 方法
     - Focused on **Assets** , 使用資產評估結果，嘗試識別對有價值資產的威脅。
     - Focused on **Attackers**,根據攻擊者的目標，識別潛在攻擊者與找出所代表的威脅
     - Focused on **Software**,組織會有自己開發的軟體,從軟體的角度識別威脅     
- Identifying Vulnerabilities (漏洞)
  - 識別完資產與威脅後,將執行漏洞分析
  - 漏洞分析是一個持續過程
    - 定期掃描找出漏洞
    - 評估已知漏洞威脅、進行滲透測試利用漏洞  

### 📝常見的 Access Control 攻擊 (OSG)
  - **Access aggregation Attacks** 訪問聚合攻擊
    - 蒐集許多 nonsenstive information (非敏感的資訊)
    - Reconnaissance attacks(偵查攻擊) 透過多種工具蒐集IP、服務、Port 等也是，可以進行推理攻擊。
  - **Password Attacks** 密碼攻擊
    - 密碼是最脆弱的驗證。強密碼有助於防止攻擊(取決於環境)
    - 密碼應經過 HASH 如 (SHA-3) 處理,一般 先取 HASH 加密後傳送，後端解密後儲存、或比對其HASH值
    - HASH 演算法選定很重要 MD5很弱容易發生碰種已被破解
    - 更改默認密碼
    - 強化人員意識訓練
   - **Dictionary Attacks**字典攻擊
    - 使用預期的密碼列表來測試
   - **Brute-Force Attacks** 暴力攻擊
    - 嘗試所有可能的字母、數字、符號組合
    - 密碼越長、符號越多；應付暴力攻擊的能力就越強
   - **Birthday Attack**生日攻擊
    - 攻擊的重點在於尋找 Collisions (碰撞)
    - 防禦方式
      - 透過加 Salt 方式使碰撞降低
      - 選擇較好的HASH演算法,如 SHA-3
   - **Rainbow Table Attacks**彩虹表攻擊
      - 彩虹表透過預先計算的 Hash值來比對縮短時間
      - 防禦方式
        - 加 Salt (鹽值) 
          - Bcrypt
          - PBKDF2
        - 加 Pepper (胡椒)
          - 存在別處的大常數 (配置值or Code 中的 IV 值)
   - **Sniffer Attacks**
      - 透過分析**封包**
      - 防禦方式
        - 加密通過網路發送的所有敏感數據
        - 無法加密時使用一次式密碼
        - 對 Router 和 Switch 做物理控制
        - 監控網路,如 IDS 可偵測網路中的 Sniffer,並發出警報
   - **Spoofing Attack**
      - **Email Spoofing**
        - 偽冒發件者
        - 回覆到惡意的收件者
      - **Phone Number Spoofing**
        - VoIP 替換電話號碼

   - **Social Engineering Attack**
      - 假冒、自稱...取得
   - **Phising** 網路釣魚
      - 欺騙用戶打開附件與連結
      - 假的很類似的網頁
      - 偷渡式下載 Drive-By Download,用戶不知情下安裝 
   - **Spear Phishing** 魚叉式網路釣魚
      - 針對特定用戶群體
   - **Whaling** 網路釣鯨
      - 對高階管理人員,如 CEO
   - **Vishing** 語音網路釣魚
      - 使用電話系統或VoIP釣魚變種,傳送語音呼叫。冒充銀行機構,誘使用戶驗證信用卡相關資訊
   - **Smartcard Attacks** 
      - 可能遭 **Side-Chanel Attack** 側通道 分析讀卡機貨卡片資訊
    
### 📝保護方法摘要 (OSG)
- 控制對系統的物理訪問
- 控制對文檔的電子訪問
- 建立強密碼策略
  - 更長的密碼
  - 管理員應比用戶更頻繁的更換密碼
- Hash and salt passwords
  - bcrypt 、PBKDF2
- Password 遮罩
- 部署 Multifactor Authentication
- 使用 Account Lockout Control 
- 使用 last Logon Notification
- 教育使用者
  - 密碼管理
  - 了解與防範社交工程


```
- OASIS 組織制定 
 - SPML
 - SAML
 - XACML

```

## Domain 6: Security Assessment and Testing
:::warning
**口訣 :**
安全評鑑和測試：**查驗、訪談、測試**
安全評鑑就是**稽核**

該領域將教您**應用技術和工具來識別系統漏洞、弱點以及安全流程和策略**。
:::
-    **主要重點:**
        - 透過　==**查驗(examination)、訪談(interviewing)及測試(testing)**==　等⽅法。 
        - 確保安全控制措施的==有效性(effectiveness)及符合性(compliance)==。
        - **產出安全評鑑報告的過程**，我們稱之為安全評鑑。
        - **第三方評鑑**或報告最具公信力。
        - 安全評鑑報告==提供給組織管理階層參考==。
- 安全評鑑若為**獨立單位**做的，稱為稽核
  - **一方** : 自己公司的稽核委員會或稽核體系 ，單位==內部自己做==
  - **二方** : 客戶根據合約保留稽核條款，==外部的合作廠商==
  - **三方** : 為獨立公正的機構，通常為「沒有利益衝突」的獨立方，==外部 : 公正第三方==
  P.S 通常為甲乙方外的單位 (如BSI、SGS)

- 稽核分內外部
    - 內部為第一方
    - 第二方、第三方是外部
### 📝Security Control Testing (安全控制测試)
:::info
- 漏洞掃描：漏洞描述/漏洞評估/SCAP
- 滲透測試：測試流程
- 測試類型：各種箱的測試
- 安全管理過程：SOAR/威脅/社交工程
:::
- **Vulnerability Scans 弱點掃描**
    - 偵測及發現目標網路內被掃描的主機或網路上所存在的==已知弱點與漏洞==
    - 識別和檢測防火牆、路由器、網絡伺服器、應用伺服器等中的錯誤配置，==所產生的漏洞==
    - 利用找到的弱點與漏洞來進行入侵攻擊。
    - 常用工具:
        >Network Discovery Scanning (網絡發現掃描)：Nmap (掃IP & Port)
Web Vulnerability Scanning (網絡漏洞掃描)：Nessus  (系統或網絡是否存在已知漏)
Web Application Vulnerability Scanning (Web應⽤漏洞掃描)：Nikto(掃 Web)
Database Vulnerability Scanning (數據庫漏洞掃描)：sqlmap (掃網站檢查數據庫漏洞)

- **Network Discovery Scanning** (網絡發現掃描)：Nmap (掃IP & Port)
    - 用nmap對Server IP掃描，==找有開放網絡端⼝系統(service port)，常見的狀態是Open、Closed、Filtered==確認service port的開通情況
- **Web Vulnerability Scanning** (網絡漏洞掃描)：Nessus (系統或網絡是否存在已知漏)
    - 不只檢測service port，⽽==是探測⽬標系統或網絡是否存在已知漏洞。⼯具包含數千個已知漏洞的數據庫==，執⾏測試來確定系統包含這些漏洞。檢測結果常有 ==誤報(False positive report)、漏報( False negative report)== 需要透過人工確認掃描結果
- **Web Application Vulnerability Scanning** (Web應⽤漏洞掃描)： 
    - 透過工具直接檢查web service(網站或API)，常用的弱點庫是owasp top 10 or WASC 威脅分類常聽到的風險是XSS、SQL injection...等等
- **Database Vulnerability Scanning** (數據庫漏洞掃描)： sqlmap
    -  是一個開源的滲透測試工具，可自動化檢測和利用SQL 注入漏洞，並接管資料庫服務器。

- **NIST提供 弱點的修補可以透過SCAP來作⾃動化的⼤量部署**
    - **SCAP (Security Content Automation Protocol) 安全內容⾃動化協議**
        - **CVE**：
            會==具體指出特定廠商==的特定產品有什麼弱點
            通常是在==系統上線後，實施弱點掃描及修補管理會⽤到==
        - **CWE：**
            則是==通⽤弱點==，不會指出特定廠商或產品表
            CWE因為跟廠商及產品無關，所以通常在==設計審查==時會⽤到，以改善設計的安全性
        - **CVSS**：==通用漏洞評分系統==
        - **OVAL** (Open Vulnerability and Assessment Language) 開放漏洞和評估語⾔：
        - **CPE** (Common Platform Enumeration) 通⽤平台枚舉：軟件/硬件體的⾝份枚舉
        - **CCE** (Common Configuration Enumeration) 通⽤配置枚舉：軟件可配置控件的枚舉
        - **XCCDF** (Extensible Configuration Checklist Description Format)
![](https://hackmd.io/_uploads/rkOriSv62.png)
- **NVD (National Vulnerability Database) 國家漏洞資料庫** ：是由 NIST 維護的數據庫
    - 美國政府使⽤NIST SCAP (Security Content Automation Protocol ) 安全內容⾃動化協議, 基於標準的漏洞管理數據的存儲庫。
    - 此數據可重現漏洞管理，安全性測試和合規性的⾃動化。
### 📝**Penetration Test 滲透測試服務 (PT)**
- 以==駭客思維==嘗試入侵該企業的網站、資訊系統、設備等軟硬體，
    - 找出各種潛在漏洞，驗證企業的資料與設備是否可被竊取或破壞，評估資訊系統與硬體安全性是否有待加強。
    - 滲透測試是企業委託駭客對系統進行入侵攻擊，並在攻擊後 回報潛在漏洞給開發人員做修補。 
**==特性 : 以毒攻毒，針對目標網站。==**
    - 用於 **==風險識別或⽤於安全評鑑中確認安全控制措施的有效性==**(常用工具Metasploit)
- 滲透測試服務流程
    >前置作業：==**取的客戶同意書**，以受眾(Audience)== 的角度規劃稽核報告格式
    - **Information Gathering** (信息收集)- 情蒐
    - **Scanning and Reconnaissance** (掃描和偵察)- ex：Ping IP/ Scan Port
    - **Fingerprinting and Enumeration** (指紋識別和枚舉)-對應服務，找出潛在的攻擊向量
    - **Vulnerability Assessment** (漏洞評估)－找出漏洞套入風險評估理論
    - **Exploit Rsearch and Verifcation**(利⽤研究和驗證)－紀錄結果
    - **Reporting** (報告)－提出改進系統的安全建議，提交給管理層，==緩解措施建議沒有實體緩解的方法==

- ==**Testing (測試)類型**==
    - **White/Black/Gray Box (⽩/⿊/灰箱)**：測試者對待測標的內部結構與處理邏輯的了解程度 : ⽩(知道)>灰(部分知道)>⿊(不知道)
    - **Static/Dynamic (靜/動態)**：放置於硬碟進行測試，如原始碼/病毒掃描；已被載入記憶體中進行測，如壓測測試 & 網站檢測
    - **Manual / Automatic (⼿動和⾃動)**:  通常自動是用工具找漏洞，如弱掃 ; 手動則是有人為介入，例如:用人為分析弱掃結果，並進一步利用漏洞，實現攻擊
    - **Active / Passive Testing(主動 vs 被動測試)**: 與測試標的有互動，例如: Ping 有回應 ；沒直接互動 Sniffing 竊聽
    - **Software Testing Techniques（軟體測試技術）**

- **找到漏洞後的道德揭露原則**
    - 有責任向供應商報告該漏洞
    - **首先向供應商**報告該漏洞，在問題公開之前修正漏洞
    - 報告漏洞的人應該為供應商==提供合理的時間修復該漏洞==，如果未修復則可公開
- ==**各種防護系統**==
    -    **RASP: Runtime Application Self-Protection**(==執行時期==應用程式自我防護)
            1. RASP 是一種在伺服器上執行的防護工具
            2. 每次應用程式執行時就會啟動。
            3. 簡單來說，==RASP 是專為即時偵測惡意行為而設計==
    -   **IPS：Intrusion Prevention System**(入侵預防系統)
        1. **入侵防護(IPS)系統則化被動為主動**，
        2. 當發現網路異常封包或行為時，系統除**發送警訊**通報給網管人員，
        3. **採取必要的處置措施，==例如阻斷來源IP。==**
    -  **IDS：Intrusion-detection system**(入侵偵測)
        1. 入侵偵測(IDS)系統主要功能在負責監聽網路封包
        2. 依據**預先設定的安全策略(Security Policy)**，對網路與系統的運行狀況進行監測，
        3. 當發現異常，自動發出警訊通報給網管人員，**記錄各種攻擊企圖、攻擊行為或者攻擊結果**
### 📝安全管理過程
:::info
- **實施安全管理流程**：Log Reviews/SEIM/SOAR/威脅搜尋
- S**ocial Engineering (社交工程**)：人是在組織中最不安全的變數
:::
- **Log reviews(⽇誌審查)**
    - 存儲⽇誌數據和進⾏⾃動化和⼿動⽇誌審查。安全信息和事件管理（SIEM）包在這些過程中發揮著重要作⽤，⾃動化⽇誌審查的⼤部分⽇常⼯作
    - 是記錄系統、帳號、服務的活動行為，通常稱一個行為或動作皆稱為一個事件被儲存在活動日誌中
    - 確認的重點為該事件發生的時間點，哪個帳號，哪項服務，做了那些行為是否符合授權，通常用於分析網路異常或是駭客攻擊行為
     >重新啟動 Windows 電腦會產生資訊(information)日誌條目。Windows 定義了五種類型的事件： 錯誤，表示有嚴重問題；警告，可能表明未來的問題；訊息，描述成功操作；成功審核，記錄成功的安全存取；和失敗審核(Failure audit)，記錄失敗的安全存取嘗試。
- **SEIM**: 安全信息和事件管理
- **SOAR** (Security Orchestration, Automation and Response)：
    - SOAR 為⼀組技術，可幫助資安團隊透過 ==『標準化』⼯作流程及『⾃動化』==，提⾼資安團隊⼯作效率，對威脅⾏為進⾏鑑定、調查及補救。
    - NIST事件回應框架包含四個步驟，準備、檢測與分析、根除與恢復、事後改善，
    - 可運⽤⾃動化⼯具輔助執⾏，以稱為劇本（Playbook）的預定義流程來作事件回應執⾏步驟，以降低資安專家⼯作上的負擔，提⾼整體維運效率。
- **威脅搜尋Threat Hunting：**
    - 也稱為==網絡威脅搜尋==，是一種主動式的防禦策略與技術
    - 利用一些資訊蒐集、威脅情報，來去掌握可能存在的攻擊者與攻擊行為，並且進一步去阻止或是預防這些風險的發生。
    - 並且這些可能的攻擊行為，通常是傳統的防禦設備無法偵測與阻擋的。
    - 網絡威脅搜尋是==⼀項積極的網絡防禦活動==

## Domain 7: Security Operations 
### 📝DR: Disaster Recovery 災難復原
:::info
-    災難恢復是**組織業務流程的關鍵組成**部分。
-    災難恢復計劃通常由**高階主管導制定**。
-    ==災難恢復計劃通常會在基礎設施或數據丟失已經或可能發生時啟動==，並由危機管理或類似結構的團隊授權啟動。
:::
-    災難恢復計劃（DRP）-NIST 800的分類
        - Event (事件)：中性(Neutral)的⼀件事
        - Incident (事故)：負⾯(Negative)的事件
        - Emergency (緊急狀況)：會影響到⼈⾝安全(Human life)
        - Crisis (危機)：跟公司的聲譽、商譽(Reputation)有關，意指公關危機
        - Disruption (中斷)：產品及服務無法交付
        - Disaster (災難)：須滿⾜兩個條件
            - Disruption (中斷)
            - Relocation (要搬家的程度)
![](https://hackmd.io/_uploads/B1Fs3LYRn.png)
-    NIST BCM(Business Continuity Management) 營運持續管理相關計畫書
-    **T1 ：組織使命願景，與人員安全**
        - ==Organization (Strategic planning) 策略規劃==
        - ==Crisis Communication Plan (CCP) 危機溝通計畫==
        - ==Occupant Emergency Plan (OEP) ⼈員緊急計畫==
-    **T2 ： 產品服務 持續交付**
        - Business Processes (Continuity planning) 持續性計畫
        - Continuity of Operations Plan (COOP) 維運持續計畫
        - Business Continuity Plan (BCP) 業務持續計畫
-    **T3 ： C.I.A  資訊安全 (機密性.完整性.可使用性)**
        - ==Information Systems (Contingency Planning) 應變計畫==
        - ==Disaster Recovery Plan (DRP) 災難復原計畫==
        - ==Information System Contingency Plan (ISCP) 資訊系統應急計畫==
        - ==Critical Infrastructure Protection (CIP) Plan 關鍵基礎設施保護計畫==
        - ==Cyber Incident Response Plan (CIRP) 資安事故回應計畫==
-  ==**執行恢復策略-復原站點(Recovery Site)**==
    - 備援站點(Mirrored Site)：不間斷同步
    - 熱站點(Hot Site): 有場地、硬體、軟體、資料(Real-Time)，馬上可以運作
    - 溫站點(Warm Site): 有場地、硬體、軟體、資料(Real-Time有差)，只差在資料要補齊
    - 冷站點(Cold Site): 只有場地，解決臨時找場地的問題，所需還原時間最長
    - 行動站點(Mobile Site): 機房就在卡車內
    - 互惠站點(Reciprocal Site):互相Cover，但實際效果不好
-  **執行恢復策略-數據庫備份的技術**
    - **電子鍊接(Electronic Vaulting)**：
        - 數據庫備份通過批量傳輸方式移轉到遠處的場域（ex：熱站點、DR Site、雲端)
        - 本地系統所產生的資料，一次性地傳輸，備份在異地系統
        - 有數據丟失的可能性，要定期演練測試
    - **遠程日誌處理(Remote Journal)**：
        - 更頻繁的傳輸，可能１個小時或更短
        - 比「電子式分批複製」頻率更頻繁些，通常是自動、週期式地進行備份。
        - 遠程日誌處理設置傳輸數據庫事務的副本
    - **遠程鏡像(Remote Mirror)**：
        - 最先進的數據庫備方案，成本最高
        - 遠端鏡像複製可即時同步執行，也可以非同步執行
-  **執行恢復策略-Common Backup Strategies (常⾒的備份策略**
    - **Full Backup (完整備份)**：完整備份，復原時也最簡單。備份時間最長，還原時間最快
    - **Differential Backup (差異備份)**：
      ==基期為完整備份==，每次備份與基期的差異。復原完整備份後再加⼀次差異備份。
    - **Incremental Backup (增量備份)**：
      ==基期為前⼀次備份==，每次備份與基期的差異。復原完整備份後再加多次差異備份。備份時間最少，還原時間最慢
    - ==備份時間越長，還原時間越快==      
![](https://hackmd.io/_uploads/rJc4VPKAh.png)

- **DRP(災難恢復)重要關鍵**
>- **MTD (最⼤可容忍停機時間)是主導DRP** (災難恢復計劃)
>- **RTO (恢復時間⽬標)和RPO(恢復點⽬標)** 的業務需求⽬標。
>- RTO 和 RPO 驅動 DRP。恢復站點的選擇是DRP的⼀部分，應該由 RTO 驅動。
- ==**DRP(災難恢復)測試5種方法**==
    - Checklist：檢查表，⾃⼰檢查。( **最簡單也是最重要，成員意識自己的職責**)
    - **Walkthrough**：結構化演練，**(主持人/⾓⾊扮演/模擬災難情境)**，ex：軍棋演練/討論敵軍可能的入侵情境
    - **Tabletop**：==把大家找進會議室==，集體演練討論
    - **Simulation**：模擬演練，直接演⼀演(==會中斷非關鍵業務活動==)，ex：火災逃⽣演練、響應活動要被測試執行
    - **Parallel**：平⾏演練  (人員會實際進行部署，但**不會中斷主要設施的營運**)
       在不影響正式環境下⼀組⼈到異地，但沒有切換正式環境。
    -  ==**Full interruption**：正式切換到異地(風險大)==

### 📝IR: Incident Response事件響應
:::warning
事件響應(Incident Response) IR
-    隨著==網絡威脅變得更加頻繁==、智能和普遍，組織訂定解決方案來主動應對這些威脅。
-    由高層領導制定，==但更多地受到信息安全、取證和網絡安全的影響==
-    確定對==內部系統的攻擊的源頭和目標對於在確定事件後，將採取的正確行動方案至關重要==
-    事件就是**可能對受保護信息、資產或業務流程的安全性或機密性產生不利影響的任何情況、事件或異常情況。**
:::
:::info
事故管理(Incident management) IcM
-    又稱**事件管理、突發事件處理和意外事件管理**
-    指一個組織機構為了覺察、分析並糾正危險因素以防患於未然，而採取的種種行動的總稱。
-    在組織當中，通常由**事件回應小組或者事件管理小組**對相關問題採取行動。
-    小組是事先就決定好的，亦或是在事件發生的過程由所屬組織指派，以此將事態恢復至從前的水平。
:::
- 事件響應(Incident Response) IR七步驟
0. **Preparation (準備)**：計劃書、組IR團隊
1. **Detection (檢測)**：Identification (鑑別)、分類、處理、==確認是否為假警報？==
1. **Response (響應)**：確認事件後，IR團隊要進來(依計畫中所寫的IR 團隊)。
1. **Mitigation (緩解)**：Containment (遏制)==、止血、隔離事件、控制影響。==
1. **Reporting (報告)**：內部通報長官，不是所有都要通報，所以往後放。
1. **Recovery (恢復)**：恢復到可運作狀態。
1. **Remediation (補救)**：根因分析、Eradication (根除)，恢復全功能狀態、採取防⽌再次發⽣的步驟。
1. **Lessons Learned (經驗教訓)**：記錄及學習。
以上過程需要==收集證據與紀錄，收集的人要是合格的(qualify)，要有證據保管鍊Chain of custody==
### 📝Monitoring Techniques 監測技術
- **IR -執行記錄和監控活動**
    - 安全資訊與事件管理 (SIEM)
    - 連續監控：抽樣／剪切級
    - 出口監控：DLP/隱寫術/水印
    - 日誌管理 (Log management)
    - 威脅情報（例如，威脅提要、威脅捕獲）
    - UBA (User Behavior Analytics) ⽤⼾⾏為分析
    - UEBA (User and Entity Behavior Analytics) 使⽤者和實體⾏為分析(包含硬體)
    - **安全資訊和事件管理 (SIEM)**
        - **記錄管理**：SIEM 系統會將大量資料集中在一個地方，並整理和判斷資料是否有威脅、攻擊或入侵的跡象。
        - **事件關聯性**：系統會排序資料以識別其關係和模式，來快速偵測和回應潛在的威脅。
        - **事件監控和回應**：SIEM 技術會跨組織網路監控安全性事件，並提供與事件相關的所有活動警示與稽核
    - **SOAR (Security Orchestration, Automation and Response)：資安協調、⾃動化與回應**
        - 補強==資安事件管理平台（SIEM）的不⾜之處==，
        - 攻擊者早就已經採⽤⾃動化⼯具發動滲透活動，企業端的防守可幫助資安團隊透過『標準化』⼯作流程及『⾃動化』，提⾼資安團隊⼯作效率，
        - 可運⽤ ==⾃動化⼯具輔助執⾏，以稱為劇本（Playbook）== 的預定義流程工作事件回應執⾏步驟
    - **出口監控：DLP/隱寫術/水印**
        - ==防止機密資料從內部流出==。
        - 使用者將電腦攜出內部的離線狀態下，仍然不能將硬碟裡的機密資料傳送出去
        - 基於**網路的DLP**：監控所有對外傳輸的數據
        - 基於**端點的DLP**：監控保存在系統上的文件，可以掃描發送給外部設備(EX：印表機)
    - **ＷaterMark (浮⽔印)**
        - ⽤於對數據/資料進⾏標記，證明所有權，以及協助==DRM (數字版權管理)系統識別應受保護的數據==。
        - ⽔印與加密無關。⽔印是可⾒的，⽽不是隱藏的。
       - 浮⽔印改變數字對象，==將洩漏追溯到最初獲得⽂檔副本的⼈==
    -**Steganography (隱寫術)**
       - 通常用一些傳統的方法進行加密，然後用某種方法修改一個「偽裝文字」（covertext），使其包含被加密過的訊息，形成所謂的「隱秘文字」（stegotext）。
   - **日誌管理 (Log management)**
       - ==Security Logs (安全⽇誌)==：
          - 安全⽇誌能夠**記錄對⼀些資源的訪問**，如⽂件、⽂件夾、打印機等。
          - 例如，當⽤⼾訪問、修改或刪除⽂件時， 安全⽇誌能夠記錄下來。
         - 許多系統能夠⾃動記錄對關鍵系統⽂件的訪問，但需要管理員在登錄訪問之前啟⽤對其他資源的審計。
       - ==**System Logs (系統⽇誌)：**==
         - 系統⽇誌記錄類似於系統或服務器的==開啟或關閉等事件。==
         - 如果攻擊者能夠關閉系統並使⽤CD或USB 閃存驅動器將其重啟，他們就可以從系統中竊取數據⽽不留下任何訪問記錄。
      - ==**Application Logs (應⽤程序⽇誌)：**==
         - 記錄 ==**特定應⽤程序的信息**== 。
         - 應⽤程序開發⼈員能夠選擇要在應⽤程序⽇誌中做出記錄的程序。
         - 例如，開發⼈員可以設置在任何⼈訪問特定的數據對象(如表或視圖)時，⽇誌做出記錄。
     - **Firewall Logs (防火牆⽇誌)：**
         - 記錄與到達防火牆的流量相關的任何事件，包括防火牆允許的量和阻⽌的流量。
         - 主要的數據包信息，如源和⽬的IP地址或端⼝，但不記錄數據包的實際內容。
     - **Proxy Logs (代理服務器⽇誌)：**
        - 代理服務器為⽤⼾提⾼了互聯網訪問性能，並可以控制⽤⼾訪問的網站的範圍。
        - 代理⽇誌有記錄詳細信息的功能，如特定⽤⼾訪問了哪些網站，以及他們瀏覽網站花費了多長時間。
        - ==當⽤⼾試圖訪問⼰知的禁⽌訪問的網站時，代理⽇誌也能夠做出記錄。==
     - **Change Logs (變更⽇誌)：**
        - 為整體變更管理的⼀部分，其能夠記錄變更請求、批准和系統實際變更。
        - 為災難恢復計劃的⼀部分，變更⽇誌仍⼤有益處。例如，發⽣故障之後，災難管理員或技術⼈員可以**使⽤變更⽇誌將系統還原，其中包括所有應⽤的變更。**
   - **威脅情報（Threat intelligence）**
        - 其資訊來源是傳送至 SIEM 的連續威脅資料串流。 然後，安全分析師會分析它們是否有潛在廣域威脅及攻擊，並計劃補救動作
        - 是指收集有關潛在威脅的資料。它包括使用各種來源及時獲取有關當前威脅的資訊。
   - **UBA and UEBA：**
        - UBA (User Behavior Analytics) ⽤⼾⾏為分析
        - ==UEBA (User and Entity BehaviorAnalytics) 使⽤者和實體⾏為分析==: 是為了某些特定⽬標或⽬的來分析使⽤者、主體、訪問者、客⼾等⾏為的概念。
        - U**E**BA 中的**E**是將分析擴展到包括發⽣的實體活動，這些活動不⼀定與⽤⼾的特定操作直接相關或綁定，==但仍可能與漏洞、偵察、入侵、破壞或漏洞利⽤發⽣相關。==
        - ==從 UBA/UEBA 監控中收集的資訊可⽤於改進⼈員安全政策、程式、培訓和相關的安全監督計畫。==
   - **monitoring：**
       - Real user monitoring (RUM): 一種被動監控技術，它記錄使用者與應用程式或系統的交互，以確保效能和正確的應用程式行為。RUM 通常用作使用實際使用者介面的預先部署流程的一部分
       - Synthetic monitoring: 使用模擬或記錄的交易來監視回應時間、功能或其他效能監視器的效能變化
       -  Passive monitoring: 使用跨連接埠或其他方法複製流量並即時監控。
   - **coverage tests：**
       - 語句覆蓋率(Statement coverage)測試驗證測試期間每行程式碼都已執行。
       - 分支覆蓋率(Branch coverage) 驗證每個if語句是否在所有if和else條件下執行。
       - 條件覆蓋(Condition coverage)驗證程式碼中的每個邏輯測試是否在所有輸入集下執行。
       - 函數覆蓋率(Function coverage)驗證程式碼中的每個函數都被呼叫並傳回結果。
- 補充:
   -  **高級長期威脅（Advanced persistent threat，縮寫：APT）**，又稱高級持續性威脅、先進持續性威脅等
     常常是國家級的駭客作為
   - **端點偵測與回應 (Endpoint Detection and Response, EDR)**
       - 即時的監控可以更快偵測威脅，不讓威脅有機會擴散至使用者端點之外。
       - 端點偵測及回應的效益包括：加快調查速度、迅速發掘漏洞、更快手動或自動回應任何惡意活動

- **驗證email來源安全**
    - **SPF (Sender Policy Framework) 寄件者政策框架：驗證IP 來源**
        - SPF 用來規範在選定的郵件==發送服務器位址IP==，可以用來發送寄件人的網域郵件。
        - 這樣機制可以避免垃圾信濫發業者，偽裝網域發送假冒郵件。
        - SPF 的設定裡面，列出明確許可的郵件發信機網域名稱，郵件收信服務器透過檢查發信人網域的 SPF，**就知道這封電子郵件是否來自被允許的發信機位址。**
    - **DKIM (DomainKeys Identified Mail)，網域驗證郵件，用來防止郵件內容遭到竄改**
        - ==DKIM 是一種電腦數位簽章==，採用公鑰與私鑰這種加密驗證法進行。
        - 在發送郵件時由發信服務器對郵件以私鑰進行簽章，而在郵件接收服務器上，會透過 DNS 到發信者的網域查詢 DKIM 紀錄，擷取上面記載的公鑰資料，然後對這封郵件做簽章解碼，如果公鑰與私鑰能配對成功，代表郵件確實為原始發信機所發出。
    - **DMARC 是用來輔助 SPF 與 DKIM 的不足：驗證寄件端domain**
        - DMARC，Domain-based Message Authentication, Reporting and Conformance
        - 是一套以SPF及DKIM為==基礎的電子郵件認證機制==，可以檢測及**抵禦止偽冒身份攻擊**、對付網路釣魚或垃圾電郵。
        - 「假冒」是一種偽造電子郵件「寄件者」地址的攻擊行為，假冒的郵件就是冒用某個機構或網域寄送的郵件。
### 📝Investigation Types 調查類型
 - **Types of Evidence (證據類型)**
![](https://hackmd.io/_uploads/HJYhzOtCh.png)
OPT-專家意見證據允許個人根據證據事實和個人知識提出意見。只有當法庭接受證人為特定領域的專家時，才可以提供專家意見證據。
1. 直接證據是指證人就其直接觀察作證。真正的證據包括作為證據帶到法庭的有形物品。
2. 文件證據包括在法庭上用作證據的書面記錄。
 - **Investigation Types (調查類型)**
![](https://hackmd.io/_uploads/Hk3y7Ot0n.png)

 - **E-Discovery**
1. Information Governance 信息治理：確保有資訊系統有妥善的資料處理流程
1. Identification 識別：當有需求被要求提供時,能指出信息發現的位置
1. Preservation 保存：確保發現的信息不能被更改或刪除
1. Collection 收集：用於E-Discovery的過程
1. ==Processing 處理==：過濾收集訊息,進行初步修剪Cut through,減少資訊量的檢查
1. ==Review 檢視==：剩下的訊息檢查那些是移除敏感需要保護的資訊
1. ==Analysis 分析==：針對留下的內容與文檔再深層的檢測
1. Production 產生：需提交信息產出的標準化格式
1. Presentation 呈現：向證人與法院和其他當事者演示信息
 - **NIST**
     - NIST SP 800-53A 的標題是“評估聯邦資訊系統和組織中的安全和隱私控制：建立有效的評估計劃”，涵蓋評估和測量控制的方法。
     - NIST 800-12 是對電腦安全的介紹，
     - NIST 800-34 涵蓋了應急計劃，
     - NIST 800-86 是「將取證技術整合到事件回應中的指南」。
     - NIST SP 800-137，組織應使用以下因素來確定評估和監控頻率：安全控制波動性、系統分類/影響等級、提供關鍵功能的安全控製或特定評估對象、已識別弱點的安全控制、組織風險承受能力、威脅資訊、漏洞資訊、風險評估結果、監控策略審查的輸出以及報告要求。
### 📝Change Management 變更管理&補丁管理
:::info
- **原則：**
    - 以利害關係人Sign-off成為**基準(Base line)**
    - ==要變更，就要先提出申請==
    - ==CAB(Change Advisory Board)變更諮詢委員會==，**主要工作是評估及決策是否進行變更**
    - ==防止安全妥協是變更管理的主要目標==，變更管理的總體目標確實是防止不必要的安全性降低
    - 主要目的是允許管理層審查所有變更。
:::
- **Change Management 流程：**
    * Request for Change (變更請求)
    * Review and Evaluation (審查和評估)
    * Approve/Reject Decision (批准/拒絕決定)
    * Updates to Change Log (更改日誌的更新)
    * Implementation of Approved Change (已批准變更的實施)
    * Monitoring and Communication (監控與溝通)
- **實施和支援補丁和漏洞管理:** ==增加新設備時首先檢查或更新韌體 (Firmware)==
- **補丁流程**：
    1. 評估：評估補丁必要性
    1. **測試：測試補丁是否會引發其他問題**
    1. 核准：變更管理流程
    1. 佈署：經過測試及審批後，進行自動化部署
    1. 驗證：定期測試與稽核
### 📝人身安全 脅迫 (Duress)
-    ==脅迫 Duress、暗語 = Duress==    
他們可能採取行動傷害個人。表示脅迫的微妙手段，例如進入電子鎖上的特殊密碼或與同事一起使用密碼詞或短語，可以允許在不增加個人面臨的危險的情況下檢測脅迫。
脅迫密碼詞或短語不應被局外人立即識別。這句話可能聽起來很普通，但不是一個人可能會說的
與同事的正常對話，例如，“順便說一句，我的姑姑西爾維亞打招呼！”它可能適當地定期輪換這些代碼，並包括培訓使用
- 針對特別脆弱的員工（例如高級管理人員或前往高風險地區的員工）的脅迫守則和程序。

## Domain 8: Software Development Security

:::warning
口訣 :　時時都安全，處處都安全
軟件開發安全，從生命週期角度來看，時時都安全
生命週期內設計階段，做架構設計，處處都安全

七大階段，幫助記憶:"**P**lease **A**sk **D**a**D**dy **T**o **D**elivery **M**ail"
:::
:::info
**重要名詞解釋**
- **設計** : ⼀個書⾯紙上談兵的解決⽅案
- **軟體** : 用一堆程式碼指令叫CPU處理資料
- **分析** : 了解客戶需要什麼
:::

### 📝Planning Phase (規劃階段)
- **寫計劃書** ：需寫採購管理計畫與變更管理計畫
-  組建 IPT (Integrated Product Team)整合產品團團隊：組團隊，找人做事
- **決定開發方法**: 議定開發模式/ 呈現階段交付成果
    - 第一代預測式Predictive : 瀑布 
    - 第二代反覆式Iterative : 螺旋
    - 第三代敏捷式Agile : Scrum, Kanban, XP.Extreme Programming
      - OPT補充: 快速應用程式開發（Rapid Application Development: RAD）專注於快速開發和快速調整以適應不斷變化的需求的能力。RAD 使用四個階段：需求規劃、使用者設計、建置、切換。
- **規劃階段**：
    - 概念定義階段
    - 所有利益相關方(開發人員，客戶）協商聲明
    - 本階段只是定義(用途和軟體系統)大概的需求方向(高級的用途聲明) 
-  **成立IPT (Integrated Product Team)整合產品團隊**
    - 一開始就把相關關係人找來開會，避免開發過程爭議太多
    - **DevOps (Development + Operations)**：
        - 讓程式開發⼈員(Development)、測試⼈員(Quality Assurance, QA)、IT維運⼈員 (IT Operations)共同合作，透過CI/CD促成。
         - CI (Continuous Integration) 持續整合   
         - CD (Continuous Deployment + Continuous       Delivery) 持續部署+持續交付　
    - **DevSecOps**：
    有持續部署中融入安全議題，需要有==資安⼈員加入==。
-  **第一代預測式(Predictive Approaches)-瀑布式 (Waterfall)：專案完成後才有產出**
    1. 迭代瀑布模型使⽤七階段⽅法進⾏軟件開發，並包括⼀個反饋循環，允許開發返回
    1. 發現錯誤可==退回到前⼀階段==．以糾正在後續階段發現的缺陷
    1. 瀑布模型允許開發過程在任何給定時間僅返回到緊接之前的開發階段
    1. 計畫驅動型 （Plan Driven)：計畫式 、弄好細節按表操課、嚴謹
    1. 適合有明確的範疇、時間、成本、專案、掌握度⾼
    1. 較難因應變化，時間最長
-  **第二代反覆式(Iterative Approaches)-螺旋式 (Sprial) ：將一年的專案分成數次，每次都跑SDLC**
    1. ⽣命週期 反覆/迭代 Iteration，==保持原型==
    2.  將一年的專案分成數次,每次都跑SDLC，每⼀次做完客⼾都會看到⼀些產出
    3. ==每⼀期做完客⼾會看到⼀些產出，但還不能上線==
    4. 強調風險管理，為了降低風險
-  **第三代敏捷式(Agile Approaches)-敏捷 (Agile)/Scrum：重點放在客戶的需求上**
    1. 重點放在客戶的需求上，週期最短
    2. 可能一個月就需要有可以用的軟體，可以直接上線
    3. 反覆+價值漸增就是敏捷 (Iteration + Increment)
    4. ==每⼀次的反覆交出來的東⻄要能上線、要能⽤==
    5. ⼀旦能⽤就有產⽣價值 --> Increment
    6. 強調產出、強調風險管理
    7. 符合4大價值與12大原則就能稱符合敏捷方法(軟件開發的敏捷方法包含四個原則。它重視個人和交互而不是流程和工具，重視工作軟件而不是全面的文檔，重視客戶協作而不是合同談判，重視響應變化而不是遵循計劃。)
- XP.Extreme Programming重點: Test-driven development, Pair Programming, Continous integration
### 📝Analysis Phase (分析階段)
:::info
透過蒐集利害關係人的Requirements Engineering (需求⼯程)進⾏需求分析，==分析決定軟體成敗==。
**Need**是指腦袋想的東⻄，**Requirements**將其寫出來，⽂件化
::: 
- **Elicitation (引出)**：蒐集/引出需求
    - 利害關係人的==想法或想要的，變成專案需求==
- **Analysis (分析)**：需求明確化
    - 拆解需求深入了解，找出差異點與相同點
    - ==正面表列==：需要具體數量，避免用感覺、應該、好像...等不明確字眼
- **Specification (規格)**：需求規格⽂件化
==將需求文件化==，寫下來，其是標準且精確地描述
- **Validation (驗證)**：確認正確性 (內驗Verification外確 Validation)
雙方簽名確認，確認==雙方認知是一致的==
- **需求呈現方式(⽂件化)**
    - URS (User Requirements Specification) **⽤⼾需求規範**：規格書：Ex. Excel清單
    - Use Case (**使⽤案例**)：資安需考量Misuse case 誤⽤案例、Abuse Case 濫⽤案例，來描述不正常⾏為
        - Use case text (⽂)
        - Use case Diagram (圖)
    - User Story (**使⽤者故事**)：需求表達句型存在文本(便利貼)，SA蒐集使用者的需求, ex: 身為一個會員我需要登入


### 📝Design Phase (設計階段)

:::info
**設計** : ⼀個書⾯紙上談兵的解決⽅案
**規格** : 設計方案的精準描述
::: 
- 架構設計、細部設計、設計審查(安全性審查，威脅建模)。==**針對客⼾的需求，提解決⽅案 (解決⽅案要精準 -> 規格化)**==，只有有效的設計才能解決問題。換句話說，**它應該是正確的（內部Verified ）並由利害關係⼈確認（外部Validated）。**
    - **架構設計**：三層式架構（Layer）、SOA (Service-Oriented Architecture) 服務導向架構
    - **細部設計**： 例如登入功能，會拆分更細給不同單位的RD去研發
    - **設計審查**：特別重視安全性審查=威脅塑模(Threat Modeling)
    
**三層式架構（Layer）**
- 軟體三層式架構反映 ==**軟體的本質是資料處理**==，處理後呈現出來或儲存起來。
    - **Layer**：程式架構邏輯觀點，Web / AP / DB。
    - **Tier**：實體分層，三個程式放在三台主機。
==**架構是主要元素及其關係**==，架構設計就是架構的書⾯解決⽅案。
        - **Presentation Layer (表⽰層)** ：使⽤者介⾯，畫⾯處理、輸入輸出，既GUI/CLI/API
       -  **Business Logic Layer (業務邏輯層)**  ：程式處理，運算邏輯、AP、應⽤程式
       - **Data Access Layer (數據訪問層)** ：資料儲存。(重點是資料庫）
             1. Relation Database (關連式資料庫)
             2. 非關連式資料庫
 ### 📝DataBase
- RDMBS (Relational Database Management System) 關聯式資料庫管理系統
意即資料庫是由==多個資料表(Table)所組成==，並且可以將資料表關聯起來，去連結多個資料表之間的關
係。諸如 MySQL, PostgreSQL, MS SQL,…都是關聯式資料庫。

- 以下列出幾個**關聯式資料庫的特點：**
    - 由**資料表(Table)** 組成
    - **Schema 必須先定義好**，並且只接受同樣格式資料的插入與修改。
    - 使⽤ **SQL (Structured Querying Language)** 來管理及查詢資料

- **關聯模式的五⼤鍵 (Key)：**
    - Super key (超鍵)：符合唯⼀性的關聯鍵。
    - Candidate Key (候選鍵)：==符合唯⼀性以及最⼩性的關聯鍵==。
    - **Primary Key (主鍵)：從候選鍵中，挑選出其中⼀個關聯鍵，也就是最具識別意義的關聯鍵，符合唯⼀性。**
    - Alternate Key (次要鍵)：沒有被選為主鍵的其他候選鍵。
    - ==Foreign Key (外鍵/外部鍵)：關聯中被⽤來參考到其他表格主鍵的關聯鍵，就是外鍵。兩個表之間建立關係==
![](https://hackmd.io/_uploads/SyyiRMip2.png)
- **數據庫語⾔ SQL 中的==安全問題==**
    - **Inference (推理)：**
    ==從已知信息中推導出新信息==。推理問題是指派⽣信息可能被分類到⽤⼾不了解的級別。推理問題是⽤⼾從他們獲得的合法信息中推斷出未經授權的信息。
     - **Contamination (污染)：**
    當高密級別的資料與低密級別的資料混合。   
    - **Aggregation (聚合)**：
        - 利用SQL提供的許多函數，可以組成來自一個或多個表的紀錄，以產生有用的訊息，這個過程就稱聚合。
        - 問題: 在==處理敏感信息時，組裝或組合不同數據單元的結果==。在⼀個敏感度級別聚合數據可能會導致總數據被指定為更⾼的敏感度級別。由小聚合到大
    - **Polyinstantiation (多實例化)：**
    多實例化允許⼀個關係，包含具有相同主鍵的多⾏；多個實例通過它們的安全級別來區分。根據建立的安全級別，⼀個記錄包含敏感信息，⽽另⼀個不包含，也就是說，⽤⼾將根據公司政策之前規定的他/她的保密級別看到記錄的信息。
    - **Granularity (粒度)：**
    可以限制對對象的訪問的程度。粒度可以應⽤於允許對對象執⾏的操作，也可以應⽤於允許對對象執⾏這些操作的⽤⼾。
    -	 如何防範防範聚合與推論的存取控制方法:
        -	 **Cell Suppression**：資料隱藏
        -	**Partitioning**：資料庫分割，如 ERP 會拆分物料、財務或是人資模組各自的資料庫
        -	**Noise & Perturbation** ：加入垃圾資料進去干擾正確內容
        -	**Database View**：不同群組/角色應該切分資料面向
        -	**Polyinstantiation**(多實例)：有真有假的資料混合，避免猜測攻擊，如OSG上所述，核子潛艇的安全等級在平時可能是機密Secret，所以從補給資料庫可以知道該潛艇目前所在位置，以方便計算或得知已入港補給，假設今天發生戰爭，該潛艇進行Top Secret任務，但又不想被只有Secret等級的人發現它的位置或是找不到該潛艇資料(有心人士推斷已出航)，所以會在Secret的資料內留下一筆假資料，在Top Secret資料內留下真正的座標位置

- **數據庫語⾔==4個必須的特徵ACID==：**
    - **Atomicity (原⼦性、不可分割性)：**　==要嘛都有，要嘛都沒有==
    在⼀筆交易中可能會包含多筆SQL指令(ex.本次交易需更新2筆資料的狀態才算完成)。如果執⾏到其中⼀個步驟時失敗，則視為整個交易失敗，所有資料全部回到交易執⾏前的狀態。
    - **Consistency (⼀致性)：**　==必須在與數據庫所有規則一致的環境下操作==
    代表當資料從狀態A(餘額:3000元)改變成狀態B(餘額:1500元)時，不同的使⽤者在同⼀時間得到的狀態皆會相同(餘額:1500元)，交易的⼀部分寫入資料庫的資料，==必須遵守數據庫所有明定規則以及約束==，包括限制條件、級聯、觸發。
    - **Isolation (隔離性、獨立性)：**
    ==同時間執⾏的交易不會互相⼲==。(ex. ⼆個不同交易在同時間修改同⼀筆紀錄，其中⼀個交易要等待另⼀個交易執⾏完成才執⾏，確保不會同步進⾏)，獨立性是達成並⾏控制的重要關鍵，可以確保每⼀個交易都是獨立的。
    - **Durability (持久性)：**
    ==交易⼀旦執⾏成功，對數據的更改就是永久性的==，即使遇到系統故障。如Mysql服務意外發⽣重啟或關閉的情況下也有機制能在之後復原資料。
- **非關聯式資料庫(NOSQL)**
    - **NOSQL(Non-SQL，⼜稱為 Not only SQL)** 稱為非關聯式資料庫，跟關聯式資料庫不⼀樣，不需要定義 schema、沒有關聯的關係。諸如 MongoDB, Redis, … 都是非關聯式資料庫的⼀種。
    - 以下為非關聯式資料庫的幾個特點：
        - 資料庫由 Collection 組成
        - Collection 中每筆資料為⼀份 Document，Document 的資料格式不需⼀致
        - 以 CAP theorem 為概念設計
        - ==常⽤於分散式雲端系統==
        
==**雲虛擬化技術確實是許多 NoSQL 解決方案的重要推動者**==。這些系統中的大多數都是分佈式數據庫系統，因此擁有可以更輕鬆地部署和管理支持集群的大量主機的技術是巨大的。在沒有云虛擬化技術的情況下設置和維護這些系統將更具挑戰性。

 **SOA (Service-Oriented Architecture) 服務導向架構**
:::info
==第一代 SOA 架構(Web Services) 、 第二代 SOA架構 (Microservice)==

==將 NoSQL 添加到面向SOA(服務的體系結構)中，使用關係引擎為結構化數據類型提供系統穩定性和一致性==

::: 
- **SOA服務即程式**，也可說是 ==**程式導向架構**==，服務的對象是其他程式。
    - 不特指⼀種技術，⽽是⼀種分散式運算的軟體設計⽅法。
    - 軟體的部分組件（呼叫者），可以透過網路上的通⽤協定呼叫另⼀個應⽤軟體元件執⾏、運作，讓呼叫者獲得服務。
    - 服務的對象是其他的程式（==**服務：透過API提供功能的程式，稱呼服務**==）。
* **SOA的基本原則**：開發，維護和使⽤
    * SOA原則上採⽤開放標準、與軟體資源進⾏互動並採⽤表⽰的標準⽅式。因此應能跨越廠商、產品與技術⾯向服務的架構 (SOA) 可以通過 Web 服務或微服務來實現。
    * Web 服務⽅法導致 SOA，⽽微服務架構是 SOA 的擴展⼀項服務應視為⼀個獨立的功能單元，可以遠端存取並獨立執⾏與更新，例如在線查詢信⽤卡帳單。
     * 開⼀個服務給其他程式調⽤**RESTful API：新增(POST)、刪除(Delete)、修改(Update)、查詢(GET)**
    * 微服務託管在⼀個或多個容器中，這些容器在 Google Kubernetes (K8S)、Docker Swarm 或 Apache Mesos的編排下協作。


:::danger
**設計審查：安全性審查**
安全性的設計審查＝ 看圖找問題，把問題解決掉＝威脅塑模（Threat Modeling)
:::
- **Diagram Application Architecture (圖應⽤架構)**：把圖拿出來，Ex:架構圖、流程圖、網路拓樸
- **Identify Threats (識別威脅)：** 看圖找威脅, 分類列表，==用OWASP 10/ STRIDE(威脅分類)識別風險==
- **Identify , Prioritize & Implement Controls(識別、優先排序和實施控制)**：風險分析、風險評估、風險處理；Threat Analysis用==DREAD 評分系統，處理問題==
   (識別,優先排序和實施控制)：**處理問題**
- **Document & Validate (記錄和驗證)**：==V&V/殘留風險==，用DFD 資料流程圖，記錄與驗證
 
**STRIDE (威脅分類)** 由微軟開發
目的： ==**Risk Identification (識別風險)，對應CIA，參考 OWASP Top 10**==
![](https://hackmd.io/_uploads/Hke4oBGwTn.png)
>[color=green]風險目前最普及 Threat Modeling 手法，也是 Microsoft SDL  預設 STRIDE Risk Modeling 工具。

- 它可細分成以下 6 個威脅類別：
    1. **仿冒Spoofing**－冒充身份的威脅；
    2. **篡改Tampering**－篡改數據的威脅；
    3. **否認Repudiation**－不承認做過的威脅；導致用戶無法拒絕的操作發生的威脅
    4. **資訊洩漏Information Disclosure**－資訊外洩威脅；
    5. **阻斷服務攻擊Denial of Service**－入侵者干擾裝置或網絡令用戶短暫甚至無了期不能連線，以至不能提供服務的威脅；
    6. **提權Elevation of Privileges**－因程式錯誤、設計缺陷、系統設定而令 OS 不尋常開放權限的威脅。


**DREAD Risk Analyst (分析)**
>[color=green]風險評鑑模型Risk Assessment Model : 用於風險分析計算機安全威脅的系統㇐部份，使用五個類別提供風險評估安全威脅的輔助記憶
- 目的：==**評分系統，對應CIA**==
- DREAD 特點是可以在**確定潛在威脅後，訂立應對先後次序**。
    1. ==**傷害性Damage :**== 若遭受攻擊的情況有多糟糕? 破壞力評估
    2. ==**重現性Reproducibility**== : 如何重現這攻擊情境? 攻擊是否容易複製
    3. ==**可利用性Exploitability**== : 發起這攻擊需要哪些條件? 衡量攻擊的籌備工作與成本、難度
    4. ==**受影響用戶Affected Users**== : 若攻擊有多少人被影響?
    5. ==**可發現性Discoverability**== : 若發現這威脅的難易度為何?
![](https://hackmd.io/_uploads/S1Sr8Gwa3.png)

**P.A.S.T.A. 模擬攻擊與威脅分析過程**
>[color=green]PASTA（Attack Simulation and Threat Analysis Process）是**模擬攻擊與威脅分析過程**，由 7 個程序組成，並以==風險為中心的威脅建模方法==

- 目的：**確保技術安全要求與業務目標保持一致**。
    1. Define Objectives（定義目標）
    1. Define Technical Scope（定義技術範圍）
    1. Application decomposition（應用程序分解）
    1. Threat Analysis（威脅分析）
    1. Vulnerability and Weakness Analysis（漏洞和弱點分析）
    1. Attack Modeling（攻擊模型）
    1. Risk and Impact Analysis（風險與影響分析）




### 📝Development (發展階段)
:::info
重點:軟體環境、開發⼯具、程式語⾔
:::
- **Software Environment (軟體環境)**
     1. Software Environment (軟體環境)
     1. Development (開發)：
    1. Testing (測試)：
    1. Staging ：過渡環境，幾乎和正式環境⼀樣
    1. Production：正式環境
    1. Runtime (運⾏)：技術⾓度，程式運⾏的狀況，除開發外都涵蓋，如.NET/ JVM 
      - **Production (正式環境)要注意：**
        - Separation of Due (職責分離)
        - Configuration (組態)
        - Patch Management (補丁管理)
- **Development Tools (開發⼯具)**
    - IDE (Integrated Development Environment) 整合開發環境：
    >[color=green]==開發⼯具，被整合好的開發環境==，是⼀種輔助程式開發⼈員開發軟體的應⽤軟體，在==開發⼯具內部就可以輔助編寫原始碼⽂字==、並編譯打包成為可⽤的程式，有些甚⾄可以設計圖形介⾯

    - SDK (Software Development Kit)軟體開發⼯具套件：
    >[color=green] 是⼀個可==安裝包中的軟件開發⼯具集合==，指⼀些被軟體⼯程師⽤於為特定的軟體套件、軟體框架、硬體平台及作業系統等建立應⽤軟體的==開發⼯具之集合==。

    - Code Repository (代碼庫、版本庫)
    >[color=green]存放Code Module與Unit test，其中後者若有==TDD==會更好(先寫Unit test 再寫Program)
    > **Git為主流的Code Repository**，用途為版本控制，無論新增、刪除、修改、目錄或檔案及權限上的變化，每一次變化都是一個版本，透過Git追蹤並整合版本並衍生出分散式與集合式Git Server，透過監控Hash的變化判斷Git進行檔案快照保存的時間
    > 1. 若是在 GitHub 上有更動 Repository，想要同步更新至本機，可以用 **pull**。
    > 2. 上傳完 Repository 後，若本機端有更新、做新的 commit ，可以打開 CLI ，利用 **push** 指令將變更同步至 GitHub。


    - OSS (Open Source Software) 開源軟件：
    >[color=green]是⼀種計算機軟件，其中源代碼根據許可發布，其中版權所有者授予⽤⼾使⽤、研究、更改和分發軟件的權利給任何⼈，⽤於任何⽬的。

- **V-Model模型**
>也叫快速應用開發，是軟體開發過程中的一個重要模型，由於其模型構圖形似字母V，所以又稱軟體測試的V模型
-    **測試理念**
        - 貫穿 SDLC的持續測試，瀑布模型的擴展。
        - 它有助於在開發過程的早期階段確定測試規劃和設計的需求。
        - **V模型左臂**- 這是傳統的==瀑布模型==。
        - **V模型右臂**- 對應於==每個開發階段所需的測試==方法。
        - 開發和測試同等重要，同時進行，迫使管理層對所需資源的承諾、關注和規劃。
        - V模型的主要目的是在==交付之前== ==滿足業務需求並提供信心==
![](https://hackmd.io/_uploads/S1UhOXi62.png)
![](https://hackmd.io/_uploads/r19ZFQspn.jpg)

- **商用現貨（COTS）**
    - **COTS ( ex：Microsoft是一家 COTS 軟件提供商**)
        -  商用現成或商用現貨（COTS）產品是將已有的軟體或硬體包裝，然後進行調整，以滿足採購方的需求，而不是為採購方特別定製的解決方案。相關術語Mil-COTS指的是美國軍方使用的COTS產品
        - 儘管 COTS 產品可以開箱即用，但實際上必須配置 COTS 產品以==滿足業務需求並集成到現有的組織系統中==
        - 有資格作為 COTS，包括==安裝服務、培訓服務和雲服務==。 購買 COTS 是定制軟件或一次性開發（政府資助的開發或其他）的替代方案。
        - COTS 在減少軟件開發的時間和==成本方面極其有效==
- **OOP（Object-Oriented Programming）物件導向程式設計**
    - OOP是種具有物件(Object)概念的程式設計方法。
    - OOP包含資料、屬性、程式碼與方法。物件(Object)指的是類別(Class)的範例(Instance)。
    - **OOP將物件作為程式基本單元，==將程式和資料封裝於物件中==，以提高軟體的重用性、靈活性和擴充功能性**

- **OOP有三個特⾊：封裝、繼承、多形**
    - **Encapsulation (封裝)：**
        - 資料隱藏，==把相關的東⻄裝在⼀起==，不給⼈碰
        - 相關，同類的東⻄擺在⼀起
            - 繼承：繼承功能給別⼈⽤ （高聚合：High Cohesion）
            - 多形：繼承功能後，拿來改（低耦合：Low Coupling）
![](https://hackmd.io/_uploads/H1Yfh7j6h.png)

### 📝Testing (測試階段)
:::info
測是的重點：**測試分類、測試技術、測試覆蓋率**
測試的定義：==預期的結果與產⽣實際結果比對==
測試的標的：軟體的本質/⾝
:::
- **Testing (測試)類型**
    - **White/Black/Gray Box (⽩/⿊/灰箱)**：測試者對待測標的內部結構與處理邏輯的了解程度 : ⽩(知道)>灰(部分知道)>⿊(不知道)
    - **Static/Dynamic (靜/動態)**：放置於硬碟進行測試，如原始碼/病毒掃描；已被載入記憶體中進行測，如壓測測試 & 網站檢測
    - **Manual / Automatic (⼿動和⾃動)**:  通常自動是用工具找漏洞，如弱掃 ; 手動則是有人為介入，例如:用人為分析弱掃結果，並進一步利用漏洞，實現攻擊
    - **Active / Passive Testing(主動 vs 被動測試)**: 與測試標的有互動，例如: Ping 有回應 ；沒直接互動 Sniffing 竊聽
    - **Software Testing Techniques（軟體測試技術）**

- **Software Testing Techniques（軟體測試技術）**
    - **Unit Testing (單元測試)**：開發⼈員寫的，用來驗證程式功能
    >[color=green]1. ==**⽤程式去測試程式**==，其中應⽤程序的最⼩可測試部分稱為單元，被單獨和獨立地檢查以確保正確運⾏
    >2. 先寫單元測試，再寫程式 ==**(TDD:Test Driven Development)**==

    - **Code Review (原始碼審查)**：同事/主管/系統/==專家看==
    >[color=green] ==**代碼審查是軟件評估程序的基礎**==。
    >在代碼審查期間，也稱為“peer review”同⾏審查，開發⼈員在其他⽽不是編寫代碼的⼈審查它是否存在缺陷。
    >1. Pair Programming (結對編程)：==**同事看**==、即時的
    >1. 提交審查：==**主管看**==
    >1. 軟體自動掃描 Code Review：==**掃描系統看**==
    >1. Fagan Review (費根檢驗)：==**專家看**==
    >遵循 ==**嚴格的審查**== 和測試流程分為六個步驟：==**1. 規劃2. 概述3. 準備4. 檢查 5.返⼯6. 跟進**==。 (類似：PDCA的概念)
  - **Integration Testing (整合測試)**：組裝測試(==回歸測試==/接口測試/模糊測試/案例測試)，通常用在Git Server
    >[color=green]目的： ==**實踐表明，有時模塊雖然可以單獨工作，但是並不能保證組裝起來也可以同時工作。**==
    - **Regression Test (回歸測試)：==(一直測，測到把軟體修到好)==**
    >[color=green] ==程式碼完成後或有作修改時進⾏，⼀直測試到通過為⽌==
    > Ex. ⼯程師提交程式碼 CI Unit test 沒過系統⾃動通知改到測過為⽌。
    - Fuzzy Testing (模糊測試)：(用亂數去測，檢測是否有缺陷)
     >[color=green]  動態測試，測試程式　==**⽤亂數產⽣測試資料**==，以強調其限制並找到以前未發現的缺陷。例如：Mutation (Dumb) Fuzzing：笨蛋型 (Dump) ⼈⼯寫好邏輯
        - Generational (Intelligent) Fuzzing：聰明型 (Smart) ⾃動分析⾴⾯欄位與資料型態動態產⽣
    - Interface Testing （API & UI) 接⼝測試： 第二階段測UI 介面，測API 介接
     >[color=green]  ==使⽤者介⾯ 輸入資料 UI (⼈餵資料==
     > 應⽤程式介⾯ API (另⼀隻程式餵資料)
     > 確保軟體模組正確滿足介面規範，從而**正確**交換資料。
    - Use Case Testing (案例測試)：==**以實際案例模擬進行測試，正常案例**==
     >[color=green] 用案例測試用於==驗證所需的功能是否有效==
- System Testing (系統測試)：==**找出系統承載的極限，安全漏洞**==
     >[color=green] Stress Testing (壓⼒測試)：找出系統極限(容忍程度)，天花板，其他相關-效能測試：看回應時間是否符合要求
     >[color=green] Security Testing (安全測試)：弱點掃描, 滲透測試
- Misuse Case Testing (誤⽤案例測試)：==**採取攻擊者觀點測試**，惡意的測試類型又稱 Abuse test==
- UAT (User Acceptance Testing) ⽤⼾驗收測試：==**用戶接受度測試**==
     >[color=green]  ==**用戶接受度測試， (Alpha/ Beta )Testing接受度測試 (最後階段的驗收測試, 是否被植入⽊⾺，安裝是否成功)**==
        - Alpha Testing：強調測試由內部團隊進⾏
        - Beta Testing：由使⽤者或客⼾執⾏。在Beta測試後發現⼀些錯誤或問題，它們將被修復並重新測試
- Installation Testing (安裝測試)：交付檔案時做最後的把關裝裝看 (DVD、安裝檔避免檔案損毀)
- Synthetic Transaction (綜合交易)：==**使⽤客⼾端腳本來模擬客⼾的⾏為**==
     >[color=green]  ⼀種監控機制，通過使⽤ ==**客⼾端腳本來模擬客⼾的⾏為。**==
   > 這些腳本可以在安裝在不同位置的代理上運⾏，以測試應⽤程序的性能或可⽤性。
    > 測試程式定期去跑⼀下。 Ex. 下單流程確認可以下單⼈⼯⾃⼰下單確認系統能成功下單測試資料
    > ==不能使⽤正式資料，**要匿名化 Anonymization、或擬匿名化（假名）Pseudonymization**==

- Test Coverage Analysis (測試覆蓋率分析)：==**測試數量/測試總量**==
     >[color=green]  ⽤⼾的信⼼每個條件語法測試過最好
    > 要確認分⺟，可能是功能可能是⾏數
    > 須注意測試案例可能不夠
    > 公式：測試覆蓋率＝已測試案例/全部案例
    > **Coverage (覆蓋)**：覆蓋屬性決了評估的**Scope (範圍)或Breadth(廣度)**
    >**Depth (深度)**：屬性解決了評估的**嚴謹性和詳細程度**

### 📝Delivery (交付)
- **CI/CD**
    - CI, 連續整合、連續測試
    - CD, D可以是Delivery 交付也可以是 Development部屬
    - 部署(deployment)指的是整個系統上線，需要經過驗收測試再經客戶或主管核準
    - 交付(delivery) 元件測試完成，可以提供給系統使用
        - 實際運作的是系統，軟體是整個系統的其中一個重要元件，不會自已上線， 所以對軟體開發生命週期而言，最後是交付而不是部署
- 有系統授權上線的問題
### 📝Maintenance (維護階段)
:::danger
重點：==職責分離、修補管理、惡意軟體==
上線之後的正式環境運作是 IT Operation 維運，AP要職責分離，==強調只有維護==
:::

- **Patch Management (補丁管理)（變更管理）**
    - Evaluate (評估補丁)：==確定補丁是否適⽤==於他們的系統。
    - Test (測試補丁)：確定該補丁==不會帶來其他副作⽤==。
    - Approve (批准補丁)：確定補丁的安全性後，就會批准補丁的部署。
    - Deploy (部署補丁)：經過==測試和批准==，管理員部署補丁。
    - Verify (確認補丁)：在部署補丁後，管理員==定期測試和審計系統==，以確保系統補丁仍然有效
 > 確認是否適用 > 不會有副作用 >  批准後才能執行  > 持續監控
    - 透過工具直接檢查web service(網站或API)，常用的弱點庫是owasp top 10 or WASC 威脅分類常聽到的風險是XSS、SQL injection...等等
- **Database Vulnerability Scanning** (數據庫漏洞掃描)： sqlmap
    -  是一個開源的滲透測試工具，可自動化檢測和利用SQL 注入漏洞，並接管資料庫服務器。

- **弱點的修補可以透過SCAP來作⾃動化的⼤量部署**
    - **SCAP (Security Content Automation Protocol) 安全內容⾃動化協議**
        - CVE：
            會==具體指出特定廠商==的特定產品有什麼弱點
            通常是在==系統上線後，實施弱點掃描及修補管理會⽤到==
        - CWE：
            則是==通⽤弱點==，不會指出特定廠商或產品表
            CWE因為跟廠商及產品無關，所以通常在==設計審查==時會⽤到，以改善設計的安全性
        - CVSS：漏洞評分系統
![](https://hackmd.io/_uploads/rkOriSv62.png)
- **商業現貨 vs. 開源軟體**
    - 先確認==是否適用組織? 是否符合安全控制措施? 是否符合組織成本效益?==
    - 哪個比較安全？還是不能比？思考優缺點與相關安全控制措施
        - COTS (Commercial-off-the-shelf)
            - ⼀包包裝好了給你買（License）
            - 商業現貨(COTS）
            - 原始碼託管（Source）
            - 監控供應商
        - Open Source
            -開源系統 (MIT,Apache)-> 隨時注意更新版、ＶＡ、原始碼掃描    

- **商業現貨 vs. 開源軟體**
    - 先確認==是否適用組織? 是否符合安全控制措施? 是否符合組織成本效益?==
    - 哪個比較安全？還是不能比？思考優缺點與相關安全控制措施
        - COTS (Commercial-off-the-shelf)
            - ⼀包包裝好了給你買（License）
            - 商業現貨(COTS）
            - 原始碼託管（Source）
            - 監控供應商
        - Open Source
            -　開源系統 (MIT,Apache)-> 隨時注意更新版、ＶＡ、原始碼掃描
### 📝惡意程式
- **Malicious Software (惡意軟體)**：Malware是Malicious Software縮寫，總歸三⼤類
![](https://hackmd.io/_uploads/r1nvDVrWT.png)

- **Viruses (病毒)：==(不會複製，但會刪除檔案)==**
   - PGs (Passive Programs) 被動程序。病毒是撰寫⽤來進入您的電腦並==破壞/修改您的檔案/資料的程式，病毒不會⾃我複制==，但它可以由操作系統（例如編譯病毒）或應⽤程序（例如宏病毒）加載和執⾏。 
    - ==電腦病毒比電腦蠕蟲更加危險，因為病毒會變更或刪除您的檔案==，
    - 蠕蟲僅會⾃我複製，不會變更您的檔案/資料。
    - 幾乎所有的==病毒都附加在可執⾏的檔案上==，這表⽰病毒可能存在於您的電腦上，但是實際上，只要您不執⾏或開啟該惡意程式，病毒就無法感染您的電腦。 
    - 請務必注意，病毒的傳播離不開⼈為操作，比如執⾏已感染的程式，這樣病毒才會傳播下去。
        - Multipartite (多⽅)：File and MBR (Master Boot Record) 主開機記錄
        - Stealth (隱⾝)：Operating System
        - Polymorphic (多態)：Self-modification (⾃我修改)
        - Encrypted (加密)：

- **隱蔽**
   - ==**病毒會藉由攔截防毒軟體對作業系統的呼叫來欺騙防毒軟體。**== 當防毒軟體要求作業系統讀取檔案時，病毒可以攔截並處理此項要求，而非交給作業系統執行該要求。病毒可以返回一個未感染的檔案給防毒軟體，使得防毒軟體認為該檔案是乾淨未被感染的。

- **自修改**
    - 大部份防毒軟體透過所謂的病毒特徵碼來偵知一個檔案是否有被感染。特定病毒，或是同屬於一個家族的病毒會具有特定可辨識的特徵。如果防毒軟體偵測到檔案具有病毒特徵碼，它便會通知使用者該檔案已被感染。使用者可以刪除或是修復被感染的檔案。某些病毒會利用一些技巧使得透過病毒特徵碼進行偵測較為困難。這些病毒會在每一次感染時修改其自身的代碼。
- **多態**：==多態病毒在每次感染系統時都會修改自己的代碼==
    - 多態是第一個對防毒軟體造成嚴重威脅的技術。就像一般被加密的病毒，==一個多態病毒以一個加密的自身拷貝感染檔案，並由其解密模組加以解碼==。但是其加密模組在每一次的感染中也會有所修改。因此，一個仔細設計的多態病毒在每一次感染中沒有一個部份是相同的。這使得使用病毒特徵碼進行偵測變得困難。防毒軟體必須在一模擬器上對該病毒加以解密進而偵知該病毒，或是利用加密病毒其統計模板上的分析。要使得多態代碼成為可能，病毒必須在其加密處有一個多態引擎（又稱突變引擎）。

- **TOC/TOU (time-of-check-to-time-of-useTime of use)攻擊**：
    -  檢查時間到使⽤時間 (TOC/TOU) 攻擊利⽤了系統驗證授權與軟件使⽤該授權執⾏操作之間的時間差異。這是競爭條件攻擊的⼀個例⼦。


