NCNU-OpenSource
      • Sharing URL Link copied
      • /edit
      • View mode
        • Edit mode
        • View mode
        • Book mode
        • Slide mode
        Edit mode View mode Book mode Slide mode
      • Customize slides
      • Note Permission
      • Read
        • Owners
        • Signed-in users
        • Everyone
        Owners Signed-in users Everyone
      • Write
        • Owners
        • Signed-in users
        • Everyone
        Owners Signed-in users Everyone
      • Engagement control Commenting, Suggest edit, Emoji Reply
    • Invite by email
      Invitee

      This note has no invitees

    • Publish Note

      Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

      Your note will be visible on your profile and discoverable by anyone.
      Your note is now live.
      This note is visible on your profile and discoverable online.
      Everyone on the web can find and read all notes of this public team.
      See published notes
      Unpublish note
      Please check the box to agree to the Community Guidelines.
      View profile
    • Commenting
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
      • Everyone
    • Suggest edit
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
    • Emoji Reply
    • Enable
    • Versions and GitHub Sync
    • Note settings
    • Note Insights New
    • Engagement control
    • Transfer ownership
    • Delete this note
    • Insert from template
    • Import from
      • Dropbox
      • Google Drive
      • Gist
      • Clipboard
    • Export to
      • Dropbox
      • Google Drive
      • Gist
    • Download
      • Markdown
      • HTML
      • Raw HTML
Menu Note settings Note Insights Versions and GitHub Sync Sharing URL Help
Menu
Options
Engagement control Transfer ownership Delete this note
Import from
Dropbox Google Drive Gist Clipboard
Export to
Dropbox Google Drive Gist
Download
Markdown HTML Raw HTML
Back
Sharing URL Link copied
/edit
View mode
  • Edit mode
  • View mode
  • Book mode
  • Slide mode
Edit mode View mode Book mode Slide mode
Customize slides
Note Permission
Read
Owners
  • Owners
  • Signed-in users
  • Everyone
Owners Signed-in users Everyone
Write
Owners
  • Owners
  • Signed-in users
  • Everyone
Owners Signed-in users Everyone
Engagement control Commenting, Suggest edit, Emoji Reply
  • Invite by email
    Invitee

    This note has no invitees

  • Publish Note

    Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

    Your note will be visible on your profile and discoverable by anyone.
    Your note is now live.
    This note is visible on your profile and discoverable online.
    Everyone on the web can find and read all notes of this public team.
    See published notes
    Unpublish note
    Please check the box to agree to the Community Guidelines.
    View profile
    Engagement control
    Commenting
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    • Everyone
    Suggest edit
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    Emoji Reply
    Enable
    Import from Dropbox Google Drive Gist Clipboard
       Owned this note    Owned this note      
    Published Linked with GitHub
    • Any changes
      Be notified of any changes
    • Mention me
      Be notified of mention me
    • Unsubscribe
    ###### tags: `lsa` `ncnu` # Week 12 (2023/05/11) - Book mode: https://hackmd.io/@ncnu-opensource/book [TOC] --- ## 雲端 ### 補充 ![](https://hackmd.io/_uploads/BkL9B4qVh.png) - Kubernetes Dashboard - 介紹 - 簡單容易上手 - dashboard 會持續和使用者持續連線,如果叢集中有任何改動會立即刷新頁面 > 可以自行設定刷新時間 - 幫助叢集管理員快速觀察各個資源目前狀態以及各種錯誤 > ex:Deployment, Service, Pod ## 資訊安全 : 資訊安全基礎 ### 資安是什麼 ? - [iRent 個資外洩](https://www.bnext.com.tw/article/73974/hota-irent-customer-data-exposed-response-security-information?) - 原因:內紀錄應用程式的 log 機器暫存資料庫,因為未適當阻擋外部連線,導致資料庫可能遭入侵 - [15 萬元買下台灣人民的個資](https://news.ltn.com.tw/news/society/breakingnews/4221524) - 史上首次全台各資公開販售 #### 資安的目的 - 保障資訊不未經授權的人使用 - 資安即國安 - 資訊安全是國家安全的一個重要組成部分 - 國家的許多關鍵基礎設施和資源都依賴於資訊技術 - 資訊系統受到攻擊 :point_right: 國家機密文件遭到盜取、敏感資訊外洩可能會危及國家安全 #### 資安保護的對象 - 資料 (Data) - 儲存在儲存媒體上的資訊 - 通訊 (Communication) - 傳遞訊息的過程 - 實體 (Physical) - 設的實體環境 - 人員 (Personnel) - 社交工程,依照人性的弱點進行詐欺或是取得未經授權的訪問 - ex: 假冒身分、偽造文件、詐騙電話、釣魚網站 #### 影響資安的因素 - 天然災害 - 水災、火災、地震等不可避免的自然災害 - ex: 放置設備的機房發生火災時,若沒有定期做系統、檔案備份 - 軟體硬體故障 - 硬體故障、軟體異常、設備異常或網路斷線 - 人為蓄意侵害 - 公司內部的員工惡意洩漏機密或敏感資訊 - 人為疏失 - 企業內部人員的疏忽 - 例如:公告未遮蔽個人資料或電腦操作員設置檔案或儲存媒體等 #### 資安的重要性 - 個人 - 網路購物時,信用卡資訊外洩 :arrow_right: 信用卡被盜刷 - 社交平台帳號盜用 :arrow_right: 身份被盜用、聊天紀錄被外洩 - 企業 - 機密資料受到外部入侵或內部人員洩漏 公司聲譽損失、被競爭對手利用 - 資訊系統服務中度 公司無法經營業務,造成重大損失 - 政府 - 政府資訊外洩 :arrow_right: 影響國家安全和公眾利益 ### 資安鐵三角 - 沒有明確的提出者 - 由美國國家標準暨技術研究院 (NIST) 在 1977 年 發行的刊物整合出資安鐵三角 (CIA) 的概念 - 資訊安全的重要性在於保護資訊的機密性完整性和可用性 :::info ### **美國國家標準科技技術研究院 NIST** - National Institute of Standards and Technology => NIST - 提供各種衡量標準、測量方法、軟體和硬體工具 ### NIST SP 800 系列 - NIST SP 800-53: 資訊系統及組織的安全及個人資料控管 - NIST SP 800-37:風險管理框架,幫助組織規劃實施、管理ˊ續,並提供完整的生命週期管理方法論 - NIST SP 800-207: ZTA ,零信任架構的設計、實施、操作 ### NIST CSF ::: #### 機密性(Confidentiality) - 資料機密性 - 機密性:任何不公開的資料無法被未經授權的人看到 - 機密性攻擊 : 機密資料未經授權的使用者看到 - 情境舉例 : 偷看助教裡的檔案,提前知道其中考的題目 :point_right:違反資料機密性,因為未經授權的人看到檔案了 - 如何提高資料的機密性 - 針對資料作家密 - 使用磁碟加密軟體,可以建立實體硬碟上的加密區域、建立加密虛擬硬碟檔案掛載使用 - 2FA、MFA - 資料分持:將資料存在不同地方,即使取得其中一部分,也無法知道完整訊息 - 金鑰分持 : 任何一個人都不知道完整的解密方式,如果其中一個人手上的金鑰被取得,也無法成功解密資料 - 資訊混淆,即使解密了,裡面的資料室被混搖過,所以一般人拿到也不知道資料室什麼,而只有特定的人知道混淆的方法是什麼 #### 完整性 - 資料完整性 - 完整性:任何機密資訊都無法被入侵者竄改、毀損、刪除 - 情境舉例: 竄改助教檔案裡的成績,把自己的分數改為100分 :point_right: 違反資料完整性,因為擅自竄改了助教的檔案 - 如何提高資料的完整性 - 雜湊函數驗證 - 使用數位簽章 - 用私鑰加密、公鑰加密 #### 可用性 - 通訊可用 ![](https://hackmd.io/_uploads/rJ90sV9E2.png) - 可用性:已經取得授權可以即時不間段的讀取或使用資料,確保資料順暢性 - 可用性攻擊: 使授權者無法正常查看資訊 - 提高資料的可用性 - 備份 321 原則 - 製作三份備份、放在兩種不同的儲存媒體上、一份做異地保存 - 適當的容錯機制 - RAID 磁碟陣列,以免單一磁碟失效而導致整個系統無法運作 #### 延伸安全性要素 - 可鑑別性 (Authenivity) - 應能辨別使用者身分是否真實、有效 - 不可否認性 - 傳送方和接收方、雙方都不能不承認了傳遞或接收 - 違反不可否認性:會產生爭議、任雙方其一否認曾經發生傳遞會接收 - 存取權限控制 (Authority/Access Control) - 存取權限控制: 依照身分給予適當的權限 - 違反存取權限控制:超越權限範圍,執行不該有的操作 ### 3A #### 認證 - 識別資訊使用者的身分,可記錄資訊被誰所存取使用 - 例如: 透過密碼或憑證方式驗證使用者身分 - 你知道的(Something you know):正確使用者知道的屎情 - 傳統帳號 - 破解機率大 - 你所擁有的 - 個人生物特徵辨別 - 指紋、虹膜、聲紋、臉部特徵 #### 授權 - 依照實際需求給予適當的權限,建議採最小權限 #### 紀錄 - 為了收集使用者與系統之間的資料 - 幫助未來進行稽核、計費、分析 :::info - 量測 - 系統或應用程式收集與紀錄使用者的操作行為、系統狀態以及其他相關資訊 - 監控 - 系統或應用程式持續的監控使用者的操作行為和系統的狀態 - 如果發現異常,可以立即通知管理者或觸發相應的事件 - 報告 - 將量測與監控的資料加以整理並呈獻給管理者,以便管理者能夠了解系統的狀態,並進行相應的管理與調整 - ex: 系統使用量報告、風險評估報告 - 紀錄檔案 - 測量、監控、報告的資料記錄下來,加上時間戳記和事件的描述,以便於未來做查詢 - 稽核 - 對系統使用狀況和行為的監視與檢察 - 可以幫助檢測潛在的風險和漏洞,發現任何可能的非法或不當行為 - 計費 - 跟蹤系統使用情況,已確定相對應的費用 - 在雲計算等服務中,暨費可以幫助提供方收取相應的費用,同時也可以幫助使用方管理成本與支出 - 分析 - 通過檢查紀錄和其他的資訊來坪故系統的使用情況 - 有助於發現問題和機會,去制定改進和最佳化的策略,從而提高系統的性能和效率 ::: ### 資安相關標準與規範 #### 國際標準 - 國際組織 - 標準化組織(ISO)制定相關的資安標準 #### 國內法律規範 - 資通安全管理法 - 有效規劃我國資通安全管力政策,並落實於公、私部門,以建構安全的資通環境,進而保障國家安全,維護社會的公共利益 #### 企業內部規範 - 以上規定不會直接適用企業內部本身,所以 ### OWASP 組織介紹 - 非營利組織 - 全球性的資安社群 - 提供一系列的開工具和資源 1. OWASP Top10 - 最常見的十大 Web 應用程式安全風險列表 - 幫助開發人員、測試人員和管理人員識別或解決應用程式的安全問題 2. OWASP Testing Guide - 測試 Web 應用程式的指南,提供全面的測量方法、技術和工具 - 幫助測試人員檢查軟體開發生命週期的各個階段、發現漏洞 3. OWASP ZAP - 開源的 Web 應用程式安全測試工具,用於管理Web 應用程式的安全姓 - 可進行漏洞掃描、漏洞測試、弱點掃描、風險評估 4. OWASP Juice Shop - 開源的Web應用程式,展示漏洞和攻擊來幫助開發人員學習Web應用程式安全性 - 可以用於教育和培訓開發人員、測試人員和管理人員 ## OWASP top 10 2021 ![](https://hackmd.io/_uploads/r16o1rqV3.png) - 綠色: 排名上升 - 橘色: 排名下降 - 黃色虛線:合併到其中一個類別 ### 1. Broken Access Control 權限控制失效 允許未經授權的使用者訪問受限的資源,導致未經授權的資料洩漏、修改或損壞 #### 什麼是 Access Control 一種安全機制,決定誰或誰麼可以訪問特定的資源、應用程式、系統中執行特定的指令,如果沒有授權就不能訪問資源,可以報帳應用城市或系統的安全性以及保密性 - 實施 Access Control - Session Management - 追蹤使用者的登入狀態,噹使用者發出新的請就,就會簡啥是否和之前的 Session id 相同,如果不同就會重新驗證 - Authentication - 指定特定的使用者可以放問的資源和執行特定的操作 #### Access Control 常見種類 - MAC - 由系統管理員明確定義資源的存取方式,使用者無法自行更改規則。嚴格條列出每一種可能的存取規則,也因相當嚴謹,因此缺乏彈性 - DAC - 由資源的擁有者自行決定如何開放授權讓其他人存取權限,使用彈性大 - Vertical - Horizontal - 根據使用者的角色和職責分配權限,確保使用者? #### 什麼是 Broken Access Control - Verical Privilege escalation 垂直提取 - 攻擊者可能透過竊取或冒用其他**使用者的身份**進行攻擊,從而繞過訪問機制進行控制 - 失敗 - 手動進入管力頁面,手動修改網址(?後面的東東) > ex: https:example/admin.php?id=me&passwd=wow - Horizontal pricilege escalation 水平提取 - 直接訪問物件,進行不當的**訪問或是操作**,繞過系統的權限控制 - 放問系統內部的文件、資料、目錄等 ![](https://hackmd.io/_uploads/BkxcGrcV3.png) - 舉例:目錄遍歷攻擊 ![](https://hackmd.io/_uploads/rJRAfrc43.png) - 解決方法 - 檢查權限 - 黑名單 / 白名單 - 間接物件引用 | | 水平提權 | 垂直提權 | |:----------:|:------------------------------:|:--------------------------------:| | 定義 | 訪問同一個帳密 | 直接訪問物件,繞過系統的權限控制 | | 攻擊目標 | 同一個權限級別內的其他帳號 | 特定物件或資源 | | 攻擊手法 | 猜測帳號密碼 | 直接修改網址或參數 | | 可能的威脅 | 導致帳號被盜用,進一步存取資料 | 導致物件未授權存取 | #### 防範方式 - 開發階段 - 除了公開資源以外? ### 2. Cryptographic Failures 加密機制失效 #### 密碼學 - 密碼學可以做啥 - 機密性:確保資料傳遞根除存的隱密性 - 完整性:保護數據避免未經過授權的竄改 - 可鑑別性:確認使用者或系統身份 - 編碼 encode - 不安全,不需要金鑰就可以解碼 - 經過一種演算法漿資料轉換程另一處資料的方式 - 編碼 != 加密 - 加密 encrypt - 雜湊 hash - 漿任意長度的明文轉換成固定長度數據(雜湊) - 通常用在數據完整性驗證和數據的比較 - 相同的書輸入會產生相同的輸出,瞳的輸入會有不同的輸出 - 結果不可逆 - 確保駭客無法偽造或是竄改網際網路傳輸的資料封包 - 發送方和接收方會在 TLS 教握過程中交換共享的密鑰,之後發送方會將每個資料封包產生一組 MAC,然後附加到封包上,接收方可以利用金鑰計算 #### 什麼是 Cryptographic Failures 因為在應用程式中會有許多敏感資訊,所以傳輸資料的國成功就需要對資料進行加密 - 一種現象 - 導致加密失敗的原因 - 敏感資料透過 HTTP、FTP、SMTP 明文傳輸.. - 攻擊情況 - 弱密碼 - 使用者跟網頁之間的通訊是經過加密的 - 加密的過程是用金鑰 - 密碼竊取/破解 - 暴力法攻擊:嘗試各種可能是密碼的排列組合,直到找到正確密碼 - 密碼字典攻擊:攻擊者事先準備好的密碼字典進行嘗試。字典包含大家常用的密碼、單字、名稱之類的。 - 混合攻擊:結合暴力與字典攻擊,再加上其他技術,如彩虹表攻擊等 - 彩虹表攻擊法 - 攻擊者會生成一張彩虹表,收集大量使用者常用的密碼字串,用各種雜湊函數計算各種可能的雜湊值,如果攻擊者入侵資料庫就可以利用雜湊執逆向查找,頹推對應的密碼 :::info ### 彩虹表 目前有破解網站提供密碼字典的 MD5 and SHA-1 ### 加鹽 將明文做一些調整、加上變化再做加密,避免加密後被破解的明文被清楚讀取 ### 經過加鹽的密碼一定安全嗎? 如果使用不安全的雜湊演算法或者鹽值不夠長或者不夠隨機。攻擊者仍然可以使用暴力破解或字典攻擊合憲性搜尋攻擊等。 ::: #### 防禦方式 - 對於使用者 - 遵守密碼最小長度、複雜程度、組成隨機性、避免重複使用、定期更換 - 多層身分驗證 - 監控和檢測:注意登入活動 - 對於開發者 - 設計和開發系統,要考慮安全性因素 - 使用最新的加密演算法,進用老舊或不安全的碼碼 - 對密碼使用雜受加鹽技術 - 定期審查錯誤日誌,檢查潛在的安全問題 ### Injection 注入攻擊 #### 什麼是 Injection 利用應用程式對輸入數據的不充分過濾和驗證,將惡意樹入數據注入到應用程式中,從而繞過正常的輸入驗證,進而獲取敏感資料、修改資料或者執行未授權的操作。 #### SQL Injection 在輸入的字串資料中,夾帶符合SQL語法的字串,讓伺服器以為是正常的SQL語法指令而執行,藉此進一步繞過身分驗證進行? - SQL injection 類型 - 攻擊者需要根據資料庫的種類跟類型調整輸入的攻擊字元 - Error based - 試圖輸入錯誤的指令,城市會返回一個錯誤訊息或頁面,有關錯誤的詳細資訊,攻擊者就可會獲得資料庫的其他資訊,例如:資料庫版本、表個名稱等 - 有了資料庫的一些資訊就可以用 injection attack - Blind based - 系統屏蔽錯誤訊,攻擊者只能用盲測找出資料庫弱點 - 常用方式 - Boolean Based - time Based - 防禦方式 - 前端 - 輸入驗證:在前端對使用者輸入驗證,去保輸入的數據符合格式和範圍 - 輸入過濾 - 輸入加密 - 後端 - 參數化輸入:避免使用動態串接 - 最小權原則:險置資料庫使用者權限,降低攻擊者的攻擊面 - 隱藏錯誤訊息:不向使用者返回有關應用程式或資料庫詳細錯誤訊息 - 驗證輸入:再次對使用者輸入進行驗整,確保輸入的內容符合預期的格式和範圍 #### command injection #### XSS - 將指令碼注入到動態網頁中,讓使用者在瀏覽網頁的過程中仔入並惡意製造的網頁程式 - 種類 - 儲存式 XSS(store) - 惡意角本會城市碼除存在伺服器中,當其他使用者存取相關網頁的時候,就會被惡意腳本攻擊。攻擊者再網站上儲存惡意腳本的方式通常是透過提,並將腳本存入網站資料庫,當其他使用者存取相關頁面,惡意腳本就會被載入並執行 - DOM 型 - XSS 防禦 - 輸入驗證(伺服器端) - 在伺服器端對使用者輸入的資料進行驗證,只接受合法的資料,避免惡意輸入被存入資料庫會顯示在網頁上 - 制定白名單允許特定資料,制定黑名單過濾惡意資料 :::success - InnerHTML - 回傳元素內的 HTML - innerText - 回傳元素內的文字,並自動移除 HTML 文字 - textContent ![](https://hackmd.io/_uploads/rJ6V3H9Nn.png) ::: ### Security Misconfiguration安全設定缺陷 #### 導致安全設定缺陷的原因 #### 防禦 - 封鎖全部再放白名單 - 詳細敘述服務所需要的 port and uses - 精簡平台,移除或不安裝任何沒有使用的功能或框架 #### XML 外部實體注入攻擊 - 攻擊者透過竄改 XML file 內容並上傳? ### 使用危險或過舊的元件 #### 什麼是危險或老舊元件 - 可能會成為駭客的入侵系統的管道 - WebServer - 資料庫 - 涵式庫/前端開發框架 - 任一系統元件 #### 攻擊情境 - Struts2 發生多起遠端任意程式碼(RCE)執行漏洞 - Apache Log4 事件 - 漏洞評分系統評估為 10(最嚴重=10) - 是啥 - 基於 JAVA 紀錄檔案的工具 - 被大量網站和開發人員紀錄回動會查找錯誤 - RCE - 高危險漏洞 - 遠端執行程式碼攻擊 - 類似 injection - 擁有控制權 - 利用服務中可以讓使用者輸入的區塊,執行惡意程式 #### 防護 - 盡量掌握第三方元件 ### Identification and Authentication Failures 認證以及驗證機制失效 #### 什麼是 Session/cookie - Http 本身無狀態的協議,使用者每次發送的請求都是獨立運作,server 針對每個請求分別處理再發送回應 => 造就 Session and cookie - 提供更多功能、提高使用者體驗 - e.g. 成功登入網站後,如果不小心關閉網站,重開後登入狀態還再 - Session id 常用 網址列、cookie 傳遞 - Cookie - Session - Session/Cookie process ![](https://hackmd.io/_uploads/HysrGUcVh.png) ### SoftWare and Data Integrity Failures 軟體以及資料晚整性失效 > 全新類別,合併 2017 年 A8-insecure Deserialization( 不安全的反序列化 ) #### 這是啥 - 架構不能保護軟體集資料的晚整性,沒有考慮到資料完整性驗證雞智慧相關安全性保護措施 - A06 危險或老舊的元件 - 元件已經有已知的弱點 - 使用不信任來源更新 - 持續性整合/部屬 (CI/CD),未經完整性驗證 - 不安全的反序列化 - 見底下的 info box #### 防護 - 三方套件信任問題 - 信任的來源取得還是庫以及第三方套件 - 確保地方套件沒有已知的弱點 - CI/CD 流程 - 使用自動化的測試來驗證程式碼的完整性 - 使用簽章確保程式碼沒有被竄改 - 加密技術保證憑證、密碼 - 針對 insecure Deserialization - 所有反序列化的物件都加入簽章,驗證資料完整性 - 強化輸入驗證機制,要求在通過身分驗證後才能進行反序列化 - 使用白名單控管所有產生的物件 :::info ### 序列化/反序列化 #### 序列化 - 把物件變成? #### 反序列化 - 儲存格式轉為物件 #### 不安全反序列化 - 伺服器實做反序列化的過程中,為進行適當的 - 攻擊方式 - 遠端執行程式碼攻擊 - 注入攻擊 ::: ### Security Logging and Monitoring Failures 資安紀錄及監控失效 #### 日誌 - 事件紀錄種類 - 身份驗證:登入成功、登入失敗、變更密碼等 - 重要的資料存取:資料庫內容異動、權限變更 - 系統功能錯誤:非預期狀態、存檔錯誤 - 應用程式以及相關系統元件啟動、中止、停頓 - 事件描述 - 人: 相關的使用者帳號 - 事: 事件描述 - 時:時間戳記 - 物: 相關物件資訊(存取資訊) - 地: 來源、目的地地址、port、主機名稱 - 物:相關物件資訊(存取資源) #### 造成 Security Logging and Monitoring Failures 原因 - 未紀錄可稽核事件 - 未產生警告或錯誤 - 未紀錄或者紀錄的不明確 - 未有適當監測原則 - 未設定適當警閥值(Alert threshold) - 增加調查難度 - 紀錄反應時間長 - 未能即時反應事件或警告 - 降低安全事件的追蹤效率 - 總結 - 雖然不會直接造成漏洞,但如果系統缺乏適當的資安紀錄和監控機,系統管理者將難以發現入侵或異常行為,攻擊者就有更多的時間在系統內搜尋敏感諮詢和擴大攻擊範圍,對日後的調查和追蹤也會產生困難 #### 注意事項 - 統一格式儲存 - 容易被分析和處理,提高事件偵測的效率 - 日誌備份/異地被廢 - 從備份中恢復資料和日誌紀錄,進行分析和追蹤事件 - 避免從本地設備故障造成丟失日誌紀錄 - 確保日誌的完整性 - 不會被竄改 - 可留存日誌 - 監控系統能夠偵測可疑活動 - 警告機制運作正常 ### Server-Side Request Forgery(SSRF) 伺服器端請求偽造 #### 是什麼 ? - 取得遠端資源十位對使用者輸入進行驗證會限制,導致攻擊者可以透過造假的請求,引導伺服器存取非預期的資源 - 如果發出的請求事合法的,就可以突破防火牆、VPN、ACL的保護 - 因為雲端服務和雲端的複雜性,偽造賜福端請求的嚴重性將會越來越嚴重 #### 情境舉例 1 - 貼網址到 LINE - 進入內部網路,對服務進行操作或拿取資料 - 嘗試猜測內部有什麼服務,通常會有預設的網址 ![](https://hackmd.io/_uploads/BJRLD89N3.png) - 假設裡面有 Amazon EC2 ,可能可以去針對特別的 IP,往雲端上攻擊 ![](https://hackmd.io/_uploads/SkG_PI543.png) - 因為沒有對使用者的輸入進行驗整,所以可以引入 Server 本地端、外部來源的檔案 - file:// - 引入 Server 本地端檔案 - Ldap:// - 存取本地目錄 - dict:// - 讀取其他 server 的檔案 - sftp:// - 讀取其他 server 上的檔案 - gopher:// - 讀取其他server 上的檔案 #### 常見繞過手法 - IP 變形 (使用不同進制、插入無意義的字串) - 127.1 - 127.0x0.0x00.1 - 2130706433(127.0.0.1)。0177.0000.0000.0001 - 10.121913 - [::] - [0000::1] - 重新導向 - 修改 location 重新導向到想要訪問的目標 - 網域解析 - 攻擊者控制的 IP 解析程合法的網域名稱 - 伺服器以為這是一個合法的網域名稱而發送請求 - ex: `127.0.0.1.nip.io` 訪問 `127.0.0.1` - DNS rebinding - 利用第一次dns 解析 到 「檢測是否合法,合法後進行訪問」中間的時間差重新綁定心的 DNS - 第一次查詢:1.2.3.4 - 第二次查詢:127.0.0.1 #### 防禦方式 - 網路層 - 切割網路: 將遠端功能切割成不同的子網路,降低SSRF的影響,限制不同往段之間的流量 - 預設拒絕 (deny by default): 在防火牆政策或是ACL 的規則中,拒絕全部的外部流量,只開放必要的流量 - 內部 API 還是要有憑證保護: 不能只有依賴內網的防火牆 - 應用層 - 避免目錄便利(Path Traversal) 漏洞,過濾、驗證使用者端輸入,確保請求不是指向惡意目標 - 設置白名單 - 確保 URL 一致性,避免攻擊者透過些改 IP URL 的方式繞過防禦機制 - 關閉 HTTP 重新導向,避免攻擊者將請求導向道意料之外的 URL

    Import from clipboard

    Paste your markdown or webpage here...

    Advanced permission required

    Your current role can only read. Ask the system administrator to acquire write and comment permission.

    This team is disabled

    Sorry, this team is disabled. You can't edit this note.

    This note is locked

    Sorry, only owner can edit this note.

    Reach the limit

    Sorry, you've reached the max length this note can be.
    Please reduce the content or divide it to more notes, thank you!

    Import from Gist

    Import from Snippet

    or

    Export to Snippet

    Are you sure?

    Do you really want to delete this note?
    All users will lose their connection.

    Create a note from template

    Create a note from template

    Oops...
    This template has been removed or transferred.
    Upgrade
    All
    • All
    • Team
    No template.

    Create a template

    Upgrade

    Delete template

    Do you really want to delete this template?
    Turn this template into a regular note and keep its content, versions, and comments.

    This page need refresh

    You have an incompatible client version.
    Refresh to update.
    New version available!
    See releases notes here
    Refresh to enjoy new features.
    Your user state has changed.
    Refresh to load new user state.

    Sign in

    Forgot password

    or

    By clicking below, you agree to our terms of service.

    Sign in via Facebook Sign in via Twitter Sign in via GitHub Sign in via Dropbox Sign in with Wallet
    Wallet ( )
    Connect another wallet

    New to HackMD? Sign up

    Help

    • English
    • 中文
    • Français
    • Deutsch
    • 日本語
    • Español
    • Català
    • Ελληνικά
    • Português
    • italiano
    • Türkçe
    • Русский
    • Nederlands
    • hrvatski jezik
    • język polski
    • Українська
    • हिन्दी
    • svenska
    • Esperanto
    • dansk

    Documents

    Help & Tutorial

    How to use Book mode

    Slide Example

    API Docs

    Edit in VSCode

    Install browser extension

    Contacts

    Feedback

    Discord

    Send us email

    Resources

    Releases

    Pricing

    Blog

    Policy

    Terms

    Privacy

    Cheatsheet

    Syntax Example Reference
    # Header Header 基本排版
    - Unordered List
    • Unordered List
    1. Ordered List
    1. Ordered List
    - [ ] Todo List
    • Todo List
    > Blockquote
    Blockquote
    **Bold font** Bold font
    *Italics font* Italics font
    ~~Strikethrough~~ Strikethrough
    19^th^ 19th
    H~2~O H2O
    ++Inserted text++ Inserted text
    ==Marked text== Marked text
    [link text](https:// "title") Link
    ![image alt](https:// "title") Image
    `Code` Code 在筆記中貼入程式碼
    ```javascript
    var i = 0;
    ```
    var i = 0;
    :smile: :smile: Emoji list
    {%youtube youtube_id %} Externals
    $L^aT_eX$ LaTeX
    :::info
    This is a alert area.
    :::

    This is a alert area.

    Versions and GitHub Sync
    Get Full History Access

    • Edit version name
    • Delete

    revision author avatar     named on  

    More Less

    Note content is identical to the latest version.
    Compare
      Choose a version
      No search result
      Version not found
    Sign in to link this note to GitHub
    Learn more
    This note is not linked with GitHub
     

    Feedback

    Submission failed, please try again

    Thanks for your support.

    On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?

    Please give us some advice and help us improve HackMD.

     

    Thanks for your feedback

    Remove version name

    Do you want to remove this version name and description?

    Transfer ownership

    Transfer to
      Warning: is a public team. If you transfer note to this team, everyone on the web can find and read this note.

        Link with GitHub

        Please authorize HackMD on GitHub
        • Please sign in to GitHub and install the HackMD app on your GitHub repo.
        • HackMD links with GitHub through a GitHub App. You can choose which repo to install our App.
        Learn more  Sign in to GitHub

        Push the note to GitHub Push to GitHub Pull a file from GitHub

          Authorize again
         

        Choose which file to push to

        Select repo
        Refresh Authorize more repos
        Select branch
        Select file
        Select branch
        Choose version(s) to push
        • Save a new version and push
        • Choose from existing versions
        Include title and tags
        Available push count

        Pull from GitHub

         
        File from GitHub
        File from HackMD

        GitHub Link Settings

        File linked

        Linked by
        File path
        Last synced branch
        Available push count

        Danger Zone

        Unlink
        You will no longer receive notification when GitHub file changes after unlink.

        Syncing

        Push failed

        Push successfully