[問題諮詢] 006 後端工程師該如何學習防禦技巧,以 SSDLC 為例
飛飛 | 2023-05-25問題
如果想入門紅隊到進階大概要讀哪些材料的東西,我主要目的是防禦,而非入侵. 但是要會防禦,要知道如何入侵,我本身是後端開發工程師. 但這方面知識有點缺乏,之前有說想說可以透過考證照入門,但上課加考照費用太多了。
後端程式碼是 Java、框架是Spring Boot,防禦目標主要是個人設備,進階才是公開的網站。
回復
針對開發工程師,我通常建議閱讀 SSDLC 相關的內容,SSDLC 為安全的開發流程:
SSDLC(Secure Software Development Lifecycle)是一種安全的開發流程,旨在軟體開發生命周期的各個階段中,以安全為主導進行設計、開發、測試和部署。
開發工程師,如果透過 SSDLC,可以在自己開發的軟體、網站加入安全性的考量,也有助於降低被攻擊的風險。
SSDLC 的主要流程如下:
- 需求階段
- 設計階段
- 撰寫程式碼階段
- 測試階段
- 部署階段
每一個階段該注意的事情,我在底下分析給大家參考:
需求階段
確認軟體開發需求,"通常" PM 會告訴你需求,然後開發,但有時候隕石開發該怎麼辦?
◇ 在這裡跟大家建議,先確認整體 "資料流向" 再確認目前這些資料 "誰可以瀏覽、新增、刪除、修改",可以優先確認整體的 "權限" 問題。
為什麼這樣建議
我們在攻擊過程當中,無法被自動化弱點掃描找到的漏洞是 "程式邏輯" 相關的漏洞,最難防禦、影響最大的也是 "程式邏輯" 漏洞。
漏洞名稱包含 IDOR(權限控管相關的漏洞)、還有商業邏輯漏洞。
還需要確認什麼
你撰寫的程式,是否有【合規性的要求】:
- 如信用卡、金融卡,需要符合 PCI DSS 的標準,保護信用卡使用者的安全與保密需求。
- 金融單位合規,如《金融機構辦理電腦系統資訊安全評估辦法》
- 教育部委外辦理或補助建置維運伺服主機及應用系統網站資通安全及個人資料保護管理要點
設計需求
這個階段不外乎會繪製 UML 以及使用者等設計圖
也會透過透過威脅建模、風險評估,來設計安全架構。
威脅建模
- 哪些類型的攻擊可能對我們的系統造成危害?例如,網路攻擊、惡意軟體、內部威脅等。
- 哪些資產可能會被攻擊者盜取、損壞或破壞?例如,敏感客戶資料、財務資訊、知識產權等。
- 哪些漏洞可能被攻擊者利用來入侵系統?例如,弱密碼、未更新的軟體、網站注入漏洞等。
- 攻擊者可能會利用哪些方法來進入系統?例如,社交工程、網路釣魚、漏洞掃描等。
- 攻擊者可能會使用哪些工具或技術來發動攻擊?例如,網路滲透測試工具、惡意程式碼等。
- 攻擊者的能力和資源如何?例如,是否是有組織的犯罪團伙、國家支持的駭客、單一駭客等。
- 攻擊者的意圖是什麼?例如,竊取資訊、勒索贖金、破壞系統等。
- 什麼是最高風險的攻擊場景?例如,攻擊者成功取得了系統管理權限、大規模的數據洩露等。
撰寫程式碼階段
- 撰寫程式碼的過程
- 根據需求撰寫安全功能
- 紀錄所有第三方套件的版本
- 不任意使用來路不明的工具
- 使用 ChatGPT 也要小心敏感資料外洩
- 常見的輸入輸出內容也需要注意
- 每一個模組都需要進行測試
測試階段
- 漏洞掃描(弱點掃描)
- 滲透測試
上線階段
- 部署過程要注意測試伺服器與正式伺服器
- 測試資料庫與正式資料庫
- .git 相關安全
- 監控上線
- log 監控
- 性能監控
[資安服務] 005 滲透測試報告撰寫
飛飛 | 2023-05-11滲透測試
資安服務的一種,協助企業針對系統與網站確認是否有漏洞,並在測試之後提供一份報告。
目的
滲透測試報告的目的是總結測試過程中發現的漏洞,與提供改進建議,以幫助客戶提高網站/系統的安全性
常見大綱
- 封面和版權聲明
- 包括報告的名稱、撰寫日期、版本和撰寫者資訊。
- 客戶名稱、本次標的
- 摘要
- 簡要概述測試的目的、範圍、方法和主要發現。
- 目的和範圍
- 詳細說明本次滲透測試的目的、範圍和客戶的需求。
- 測試方法和流程
- 描述在測試過程中使用的技術、方法和工具,例如掃描工具、依據規範、檢查項目等。
- 時程表,何時開始掃描、開始檢測。
- 發現的漏洞和風險評估
- 列出測試過程中發現的所有漏洞,並根據其嚴重性、影響範圍和風險評估對其進行分類和排序。
- 每個漏洞應包括以下信息:
- 漏洞名稱和描述
- 漏洞種類
- 嚴重性評分(如 CVSS 評分系統)
- 影響的系統或元件
- 測試過程中的過程與截圖
- 潛在的風險和影響
- 修復建議和策略
- 针對每個發現的漏洞,提供具體的修復建議和策略。
- 強化的方向,如設定等。
- 結論
- 總結整個滲透測試的過程和結果,強調最重要的發現和建議。
- 附件和參考資料
- 提供相關的技術資料、截圖、日誌檔案等,以供客戶參考。
[資安工具] 003 SQLmap 介紹
飛飛 | 2023-05-02SQLmap 是什麼?
SQLmap 是一個開源的滲透測試工具,可自動化檢測和利用 SQL 注入漏洞,並接管資料庫服務器。它具有強大的檢測引擎,許多特色功能,可供最終滲透測試人員使用,以及廣泛的開關範圍,從資料庫指紋識別,到從資料庫獲取資料,再到通過帶外連接存取底層檔案系統和在作業系統上執行命令。
為什麼使用SQLmap
在許多 Web 應用程式中,SQL 注入漏洞是常見的安全問題之一,因為它們使攻擊者可以通過操作資料庫中的資料進行損壞,甚至接管整個資料庫系統。SQLmap的主要目的是自動化檢測和利用這些漏洞,從而減輕滲透測試人員的工作負擔,節省時間和成本,並提高滲透測試的準確性和可靠性。
如何使用SQLmap?
SQLmap 可以在命令行中使用,根據需要添加不同的參數和選項。使用SQLmap的基本步驟如下:
a. 識別目標URL
b. 分析目標網站的漏洞和資料庫結構
c. 使用不同的技術和參數進行注入測試
d. 通過dumping和爆破等方式獲取目標資料庫中的資料
e. 利用out-of-band連接等方式進一步擴大攻擊面
f. 創建報告並整理測試結果。
SQLmap 參數 Usage 說明
英文 | 中文說明 | 中文敘述 | 英文原文敘述 | 較常使用的參數 |
---|---|---|---|---|
Target | 目標 | 至少必須提供其中一個選項來定義目標 | At least one of these options has to be provided to define the target(s) |
|
Request | 請求 | 該選項可用於指定如何連接到目標URL | These options can be used to specify how to connect to the target URL |
|
Optimization | 優化 | 該選項可用於優化 sqlmap 的性能 | These options can be used to optimize the performance of sqlmap |
|
Injection | 注入 | 該選項可用於指定要測試的參數,提供自定義注入 payload 和可選的篡改腳本 | These options can be used to specify which parameters to test for, provide custom injection payloads and optional tampering scripts |
|
Detection | 檢測 | 該選項可用於自定義檢測階段 | These options can be used to customize the detection phase |
|
Techniques | 技巧 | 該選項可用於微調特定 SQL 注入技巧的測試 | These options can be used to tweak testing of specific SQL injection techniques |
|
Fingerprint | 指紋 | 執行廣泛的 DBMS 版本指紋 | Perform an extensive DBMS version fingerprint |
|
Enumeration | 列舉 | 該選項可用於列舉後端資料庫管理系統資訊,結構和包含在表中的資料 | These options can be used to enumerate the back-end database management system information, structure and data contained in the tables |
|
Brute force | 暴力破解 | 該選項可用於運行暴力破解檢查 | These options can be used to run brute force checks |
|
User-defined function injection | 自定義函數注入 | 該選項可用於創建自定義的用戶定義函數 | These options can be used to create custom user-defined functions |
|
File system access | 檔案系統存取 | 該選項可用於存取後端資料庫管理系統底層檔案系統 | These options can be used to access the back-end database management system underlying file system |
|
Operating system access | 作業系統存取 | 該選項可用於存取後端資料庫管理系統底層作業系統 | These options can be used to access the back-end database management system underlying operating system |
|
Windows registry access | Windows 註冊表存取 | 該選項可用於存取後端資料庫管理系統 Windows 註冊表 | These options can be used to access the back-end database management system Windows registry |
|
General | 一般設置 | 該選項可用於設置一些常規工作參數 | These options can be used to set some general working parameters |
|
Miscellaneous | 其他 | 該選項不適用於任何其他類別 | These options do not fit into any other category |
|
Options
參數 | 中文說明 | 英文原文 | 舉例 |
---|---|---|---|
-h , --help |
顯示基本幫助資訊並退出 | Show basic help message and exit | sqlmap -h |
-hh |
顯示進階幫助資訊並退出 | Show advanced help message and exit | sqlmap -hh |
--version |
顯示程式版本並退出 | Show program's version number and exit | sqlmap --version |
-v VERBOSE |
設定冗長度,0-6 級別 (預設為 1) | Verbosity level: 0-6 (default 1) | sqlmap -v 3 |
Target
參數 | 中文說明 | 英文原文 | 舉例 |
---|---|---|---|
-u URL , --url=URL |
指定目標 URL (例如 "https://feifei.tw/vuln.php?id=1") | Target URL (e.g. "https://feifei.tw/vuln.php?id=1") | sqlmap -u "https://feifei.tw/vuln.php?id=1" |
-d DIRECT |
指定直接連線至資料庫的連線字串 | Connection string for direct database connection | sqlmap -d "mysql://root:password@localhost/testdb" |
-l LOGFILE |
從 Burp 或 WebScarab proxy 的日誌檔解析目標 | Parse target(s) from Burp or WebScarab proxy log file | sqlmap -l /path/to/proxy.log |
-m BULKFILE |
從文字檔案中掃描多個目標 | Scan multiple targets given in a textual file | sqlmap -m /path/to/targets.txt |
-r REQUESTFILE |
從檔案中載入 HTTP 請求 | Load HTTP request from a file | sqlmap -r /path/to/request.txt |
-g GOOGLEDORK |
將 Google Dork 結果作為目標 URL 處理 | Process Google dork results as target URLs | sqlmap -g "inurl:php?id=" |
-c CONFIGFILE |
從 INI 設定檔載入選項 | Load options from a configuration INI file | sqlmap -c /path/to/config.ini |
Request
參數 | 中文說明 | 英文原文 | 舉例 |
---|---|---|---|
-A , --user-agent=AGENT |
指定 HTTP User-Agent 標頭值 | HTTP User-Agent header value | --user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:99.0) Gecko/20100101 Firefox/99.0" |
-H , --header=HEADER |
指定額外的標頭 (例如 "X-Forwarded-For: 127.0.0.1") | Extra header (e.g. "X-Forwarded-For: 127.0.0.1") | --header="X-Forwarded-For: 127.0.0.1" |
--method=METHOD |
強制使用指定的 HTTP 方法 (例如 PUT) | Force usage of given HTTP method (e.g. PUT) | --method=PUT |
--data=DATA |
設定要通過 POST 送出的資料字串 (例如 "id=1") | Data string to be sent through POST (e.g. "id=1") | --data="id=1 and 1=1" |
--param-del=PARAM_DELIM |
指定用於分割參數值的字元 (例如 &) | Character used for splitting parameter values (e.g. &) | --param-del='&' |
--cookie=COOKIE |
指定 HTTP Cookie 標頭值 (例如 "PHPSESSID=a8d127e52ecb6a0d60f03c86a29a9d2a") | HTTP Cookie header value (e.g. "PHPSESSID=a8d127e52ecb6a0d60f03c86a29a9d2a") | --cookie="PHPSESSID=a8d127e52ecb6a0d60f03c86a29a9d2a" |
--cookie-del=COOKIE_DELIM |
指定用於分割 Cookie 值的字元 (例如 ; ) | Character used for splitting cookie values (e.g. ; ) | --cookie-del=';' |
--live-cookies=LIVE_COOKIES |
指定用於載入最新 Cookie 值的 Live cookies 檔案 | Live cookies file used for loading up-to-date values | --live-cookies=/path/to/live_cookies.txt |
--load-cookies=LOAD_COOKIES |
從 Netscape/wget 格式的檔案載入 Cookie | File containing cookies in Netscape/wget format | --load-cookies=/path/to/cookies.txt |
--drop-set-cookie |
忽略回應中的 Set-Cookie 標頭 | Ignore Set-Cookie header from response | --drop-set-cookie |
--mobile |
模擬智慧型手機的 HTTP User-Agent 標頭 | Imitate smartphone through HTTP User-Agent header | --mobile |
--random-agent |
隨機選擇 HTTP User-Agent 標頭值 | Use randomly selected HTTP User-Agent header value | --random-agent |
--host=HOST |
指定 HTTP Host 標頭值 | HTTP Host header value | --host=www.feifei.tw |
--referer=REFERER |
指定 HTTP Referer 標頭值 | HTTP Referer header value | --referer=https://www.google.com/ |
--headers=HEADERS |
指定額外的標頭 (例如 "Accept-Language: fr\nETag: 123") | Extra headers (e.g. "Accept-Language: fr\nETag: 123") | --headers="Accept-Language: fr\nETag: 123" |
--auth-type=AUTH_TYPE |
指定 HTTP 驗證類型 (Basic、Digest、NTLM 或 PKI) | HTTP authentication type (Basic, Digest, NTLM or PKI) | --auth-type=Digest |
--auth-cred=AUTH_CRED |
指定 HTTP 認證類型 (Basic、Digest、NTLM 或 PKI) | HTTP authentication type (Basic, Digest, NTLM or PKI) | --auth-cred=Digest |
--auth-cred=AUTH_CRED |
HTTP 認證帳號密碼 (帳號:密碼) | HTTP authentication credentials (name:password) | --auth-cred=admin:password |
--auth-file=AUTH_FILE |
HTTP 認證 PEM 憑證/私鑰檔案 | HTTP authentication PEM cert/private key file | --auth-file=/path/to/auth.pem |
--ignore-code=IGNORE_CODE |
忽略 (有問題的) HTTP 錯誤碼 (例如 401) | Ignore (problematic) HTTP error code (e.g. 401) | --ignore-code=401 |
--ignore-proxy |
忽略系統預設代理伺服器設定 | Ignore system default proxy settings | --ignore-proxy |
--ignore-redirects |
忽略重新導向嘗試 | Ignore redirection attempts | --ignore-redirects |
--ignore-timeouts |
忽略連線逾時 | Ignore connection timeouts | --ignore-timeouts |
--proxy=PROXY |
使用代理伺服器連線到目標 URL | Use a proxy to connect to the target URL | --proxy=https://localhost:8080 |
--proxy-cred=PROXY_CRED |
代理伺服器認證帳號密碼 (帳號:密碼) | Proxy authentication credentials (name:password) | --proxy-cred=username:password |
--proxy-file=PROXY_FILE |
從檔案載入代理伺服器清單 | Load proxy list from a file | --proxy-file=proxies.txt |
--proxy-freq=PROXY_FREQ |
從指定清單中更改代理伺服器的間隔請求次數 | Requests between change of proxy from a given list | --proxy-freq=10 |
--tor |
使用 Tor 匿名網路 | Use Tor anonymity network | --tor |
--tor-port=TOR_PORT |
設定 Tor 代理伺服器連接埠,非預設值 | Set Tor proxy port other than default | --tor-port=9050 |
--tor-type=TOR_TYPE |
設定 Tor 代理伺服器類型 (HTTP、SOCKS4 或 SOCKS5 (預設值)) | Set Tor proxy type (HTTP, SOCKS4 or SOCKS5 (default)) | --tor-type=SOCKS5 |
--check-tor |
檢查是否正確使用 Tor | Check to see if Tor is used properly | --check-tor |
--delay=DELAY |
每個 HTTP 請求之間的延遲秒數 | Delay in seconds between each HTTP request | --delay=5 |
--timeout=TIMEOUT |
等待連接超時的秒數 (預設為 30 秒) | Seconds to wait before timeout connection (default 30) | --timeout=60 |
--retries=RETRIES |
連線逾時時的重試次數 (預設為 3 次) | Retries when the connection timeouts (default 3) | --retries=5 |
--randomize=RPARAM |
隨機變更指定參數的值 | Randomly change value for given parameter(s) | --randomize=param1,param2 |
--safe-url=SAFEURL |
在測試期間經常存取的 URL 地址 | URL address to visit frequently during testing | --safe-url=https://www.feifei.tw |
--safe-post=SAFE_POST_DATA |
發送到安全 URL 的 POST 資料 | POST data to send to a safe URL | --safe-post='username=admin&password=password123' |
--safe-req=SAFE_REQUEST_FILE |
從檔中加載安全 HTTP 請求 | Load safe HTTP request from a file | --safe-req=/path/to/safe_request.txt |
--safe-freq=SAFE_REQUEST_INTERVAL |
存取安全 URL 之間的常規請求 | Regular requests between visits to a safe URL | --safe-freq=10 |
--skip-urlencode |
跳過有效 payload 資料的 URL 編碼 | Skip URL encoding of payload data | --skip-urlencode |
--csrf-token=CSRFPARAM |
用於保存防 CSRF 權杖(token)的參數 | Parameter used to hold anti-CSRF token | --csrf-token=csrf_token |
--csrf-url=CSRFURL |
用於提取防 CSRF 權杖(token)的 URL 地址 | URL address to visit for extraction of anti-CSRF token | --csrf-url=https://www.feifei.tw/csrf |
--csrf-method=CSRFPARAM |
防 CSRF 權杖(token)頁面存取時使用的 HTTP 方法 | HTTP method to use during anti-CSRF token page visit | --csrf-method=POST |
--csrf-retries=CSRFRETRIES |
擷取防 CSRF 權杖(token)時的重試次數 (預設為 0 次) | Retries for anti-CSRF token retrieval (default 0) | --csrf-retries=3 |
--force-ssl |
強制使用 SSL/HTTPS | Force usage of SSL/HTTPS | --force-ssl |
--chunked |
使用 HTTP 分塊傳輸編碼 (POST) 請求 | Use HTTP chunked transfer encoded (POST) requests | --chunked |
--hpp |
使用 HTTP 參數污染方法 | Use HTTP parameter pollution method | --hpp |
--eval=EVALCODE |
在請求之前評估提供的 Python 程式碼 (例如 "import hashlib;id2=hashlib.md5(id).hexdigest()") | Evaluate provided Python code before the request (e.g. "import hashlib;id2=hashlib.md5(id).hexdigest()") | --eval="import hashlib;id2=hashlib.md5(id).hexdigest()" |
Optimization
參數 | 中文說明 | 英文原文 | 舉例 |
---|---|---|---|
-o |
啟用所有優化開關 | Turn on all optimization switches | -o |
--predict-output |
預測常見的查詢輸出 | Predict common queries output | --predict-output |
--keep-alive |
使用持久化的 HTTP(s) 連線 | Use persistent HTTP(s) connections | --keep-alive |
--null-connection |
不回傳實際 HTTP 回應體的頁面長度 | Retrieve page length without actual HTTP response body | --null-connection |
--threads=THREADS |
最大同時執行的 HTTP(s) 請求數 (預設為 1) | Max number of concurrent HTTP(s) requests (default 1) | --threads=10 |
Injection
參數 | 中文說明 | 英文原文 | 舉例 |
---|---|---|---|
-p TESTPARAMETER |
指定測試的參數 | Testable parameter(s) | -p id |
--skip=SKIP |
跳過指定的參數 | Skip testing for given parameter(s) | --skip=password |
--skip-static |
跳過看起來不是動態的參數 | Skip testing parameters that not appear to be dynamic | --skip-static |
--param-exclude=REGEX |
排除不測試的參數的正則表達式 | Regexp to exclude parameters from testing (e.g. "ses") | --param-exclude="(PHPSESSID|JSESSIONID)" |
--param-filter=PARAMETER_FILTER |
選擇測試的參數類型 (GET, POST, COOKIE 等) | Select testable parameter(s) by place (e.g. "POST") | --param-filter=GET |
--dbms=DBMS |
強制指定後端資料庫管理系統 | Force back-end DBMS to provided value | --dbms=mysql |
--dbms-cred=DBMS_CREDENTIALS |
資料庫管理系統認證憑證 (使用者:密碼) | DBMS authentication credentials (user:password) | --dbms-cred=root:toor |
--os=OS |
強制指定後端資料庫管理系統的作業系統 | Force back-end DBMS operating system to provided value | --os=Linux |
--invalid-bignum |
使用大數字來無效化值 | Use big numbers for invalidating values | --invalid-bignum |
--invalid-logical |
使用邏輯運算來無效化值 | Use logical operations for invalidating values | --invalid-logical |
--invalid-string |
使用隨機字串來無效化值 | Use random strings for invalidating values | --invalid-string |
--no-cast |
關閉有效 payload 資料轉換機制 | Turn off payload casting mechanism | --no-cast |
--no-escape |
關閉字串轉義機制 | Turn off string escaping mechanism | --no-escape |
--prefix=PREFIX |
注入有效 payload 的前綴字串 | Injection payload prefix string | --prefix="' |
--suffix=SUFFIX |
注入有效 payload 的後綴字串 | Injection payload suffix string | --suffix=# |
--tamper=TAMPER |
在注入資料前使用指定的 Python 程式碼 | Use given script(s) for tampering injection data | --tamper=apostrophemask.py |
--technique=TECHNIQUES |
要使用的 SQL 注入技術 (預設為 "BEUSTQ") | SQL injection techniques to use (default "BEUSTQ") | --technique=BEUST |
--time-sec=TIMESEC |
延遲 DBMS 回應的秒數 (預設為 5 秒) | Seconds to delay the DBMS response (default 5) | --time-sec=10 |
--union-cols=UCOLS |
要測試 UNION 查詢 SQL 注入的欄位範圍 | Range of columns to test for UNION query SQL injection | --union-cols=1-5 |
--union-char=UCHAR |
用於猜解欄位元數的字元 | Character to use for bruteforcing number of columns | `-- |
Detection
參數 | 中文說明 | 英文原文 | 舉例 |
---|---|---|---|
--level=LEVEL |
指定測試級別 (1-5, 預設為 1) | Level of tests to perform (1-5, default 1) | --level=5 |
--risk=RISK |
指定測試風險等級 (1-3, 預設為 1) | Risk of tests to perform (1-3, default 1) | --risk=2 |
--string=STRING |
當 SQL 語句執行結果為真時,要匹配的字串 | String to match when query is evaluated to True | --string="Welcome admin" |
--not-string=NOTSTRING |
當 SQL 語句執行結果為假時,要匹配的字串 | String to match when query is evaluated to False | --not-string="Access denied" |
--regexp=REGEXP |
當 SQL 語句執行結果為真時,要匹配的正則表達式 | Regexp to match when query is evaluated to True | --regexp="(true|1)" |
--code=CODE |
當 SQL 語句執行結果為真時,要匹配的 HTTP 狀態碼 | HTTP code to match when query is evaluated to True | --code=200 |
--smart |
只在存在正向啟發時執行徹底的測試 | Perform thorough tests only if positive heuristic(s) | --smart |
--text-only |
僅基於文字內容比較頁面 | Compare pages based only on the textual content | --text-only |
--titles |
僅比較頁面標題 | Compare pages based only on their titles | --titles |
Techniques
參數 | 中文說明 | 英文原文 | 舉例 |
---|---|---|---|
--technique=TECH |
指定使用的 SQL 注入技術(預設為 "BEUSTQ") | SQL injection techniques to use (default "BEUSTQ") | --technique=U |
--time-sec=TIMESEC |
設定 DBMS 回應延遲的秒數(預設為 5 秒) | Seconds to delay the DBMS response (default 5) | --time-sec=10 |
--union-cols=UCOLS |
設定在 UNION 查詢中測試的欄位範圍 | Range of columns to test for UNION query SQL injection | --union-cols=1-5 |
--union-char=UCHAR |
設定用於測試欄位數的字元 | Character to use for bruteforcing number of columns | --union-char=^ |
--union-from=UFROM |
設定在 UNION 查詢中使用的表格名稱 | Table to use in FROM part of UNION query SQL injection | --union-from=users |
--dns-domain=DNS |
設定在 DNS 洩漏攻擊中使用的功能變數名稱 | Domain name used for DNS exfiltration attack | --dns-domain=attacker.com |
--second-url=SECURL |
設定在二次注入攻擊中搜索的結果頁面 URL | Resulting page URL searched for second-order response | --second-url=https://feifei.tw/dashboard.php |
--second-req=SECREQ |
從檔案載入二次注入攻擊的 HTTP 請求 | Load second-order HTTP request from file | --second-req=second-order-request.txt |
Enumeration
參數 | 中文說明 | 英文原文 | 舉例 |
---|---|---|---|
-a, --all |
擷取所有資料 | Retrieve everything | -a |
-b, --banner |
擷取 DBMS 標語 | Retrieve DBMS banner | -b |
--current-user |
擷取目前使用者 | Retrieve DBMS current user | --current-user |
--current-db |
擷取目前資料庫 | Retrieve DBMS current database | --current-db |
--hostname |
擷取 DBMS 主機名稱 | Retrieve DBMS server hostname | --hostname |
--is-dba |
檢測目前使用者是否為 DBA | Detect if the DBMS current user is DBA | --is-dba |
--users |
列舉 DBMS 使用者 | Enumerate DBMS users | --users |
--passwords |
列舉 DBMS 使用者密碼雜湊 | Enumerate DBMS users password hashes | --passwords |
--privileges |
列舉 DBMS 使用者權限 | Enumerate DBMS users privileges | --privileges |
--roles |
列舉 DBMS 使用者角色 | Enumerate DBMS users roles | --roles |
--dbs |
列舉 DBMS 資料庫 | Enumerate DBMS databases | --dbs |
--tables |
列舉 DBMS 資料庫表格 | Enumerate DBMS database tables | --tables |
--columns |
列舉 DBMS 資料庫表格欄位元 | Enumerate DBMS database table columns | --columns |
--schema |
列舉 DBMS schema | Enumerate DBMS schema | --schema |
--count |
擷取表格中的資料筆數 | Retrieve number of entries for table(s) | --count |
--dump |
列出 DBMS 資料庫表格內容 | Dump DBMS database table entries | --dump |
--dump-all |
列出所有 DBMS 資料庫表格內容 | Dump all DBMS databases tables entries | --dump-all |
--search |
搜尋欄位元、表格或資料庫名稱 | Search column(s), table(s) and/or database name(s) | --search |
--comments |
列舉資料庫註解 | Check for DBMS comments during enumeration | --comments |
--statements |
擷取 DBMS 所執行的 SQL 陳述式 | Retrieve SQL statements being run on DBMS | --statements |
-D DB |
指定 DBMS 要枚舉的資料庫 | DBMS database to enumerate | -D database_name |
-T TBL |
指定要枚舉的資料表 | DBMS database table(s) to enumerate | -T table_name |
-C COL |
指定要枚舉的資料表欄位 | DBMS database table column(s) to enumerate | -C column_name |
-X EXCLUDE |
指定不要枚舉的資料庫標識符 | DBMS database identifier(s) to not enumerate | -X database_identifier |
-U USER |
指定要枚舉的使用者 | DBMS user to enumerate | -U user_name |
--exclude-sysdbs |
枚舉資料表時排除 DBMS 系統資料庫 | Exclude DBMS system databases when enumerating tables | --exclude-sysdbs |
--pivot-column=PNAME |
指定當進行資料表樞紐分析時要使用的欄位 | Pivot column name | --pivot-column=column_name |
--where=DUMPWHERE |
在列出資料表時使用 WHERE 條件式 | Use WHERE condition while table dumping | --where="column_name='value'" |
--start=LIMITSTART |
設定要列出的第一個資料表項目 | First dump table entry to retrieve | --start=10 |
--stop=LIMITSTOP |
設定要列出的最後一個資料表項目 | Last dump table entry to retrieve | --stop=20 |
--first=FIRSTCHAR |
設定要列出的查詢輸出的第一個單詞的字元 | First query output word character to retrieve | --first=1 |
--last=LASTCHAR |
設定要列出的查詢輸出的最後一個單詞的字元 | Last query output word character to retrieve | --last=10 |
--sql-query=SQLQUERY |
指定要執行的 SQL 查詢語句 | SQL statement to be executed | --sql-query="SELECT * FROM table_name" |
--sql-shell |
使用互動式 SQL shell | Prompt for an interactive SQL shell | --sql-shell |
--sql-file=SQLFILE |
從指定的檔執行 SQL 查詢語句 | Execute SQL statements from given file(s) | --sql-file=query_file.sql |
Brute force
參數 | 中文說明 | 英文原文 | 舉例 |
---|---|---|---|
--common-tables |
檢查常見的資料表是否存在 | Check existence of common tables | --common-tables |
--common-columns |
檢查常見的欄位是否存在 | Check existence of common columns | --common-columns |
--common-files |
檢查常見的檔案是否存在 | Check existence of common files | --common-files |
User-defined function injection
參數 | 中文說明 | 英文原文 | 舉例 |
---|---|---|---|
--udf-inject | 注入自訂的使用者定義函數 | Inject custom user-defined functions | --udf-inject=udf_lib.so |
--shared-lib=SHLIB | 載入共用庫文件 | Local path of the shared library | --shared-lib=/tmp/udf_lib.so |
File system acces
參數 | 中文說明 | 英文原文 | 舉例 |
---|---|---|---|
--file-read=FILEPATH |
從資料庫檔案系統中讀取文件 | Read a file from the back-end DBMS file system | --file-read=/etc/passwd |
--file-write=FILEPATH |
將本地檔寫入資料庫檔系統中 | Write a local file on the back-end DBMS file system | --file-write=local_file.txt |
--file-dest=FILEPATH |
設定在資料庫檔系統中寫入檔的目標位置 | Back-end DBMS absolute filepath to write to | --file-dest=/var/www/html/shell.php |
Operating system access
參數 | 中文說明 | 英文原文 | 舉例 |
---|---|---|---|
--os-cmd=COMMAND |
在資料庫伺服器上執行系統命令 | Execute an operating system command | --os-cmd="ls -la" |
--os-shell |
在資料庫伺服器上啟動一個互動式 shell | Prompt for an interactive operating system shell | --os-shell |
--os-pwn |
啟動一個 Out-Of-Band (OOB) shell 或 Meterpreter | Prompt for an OOB shell, Meterpreter or VNC | --os-pwn |
--os-smbrelay |
啟動一個 Out-Of-Band (OOB) shell 或 Meterpreter,並透過 SMB Relay | One click prompt for an OOB shell, Meterpreter or VNC | --os-smbrelay |
--os-bof |
將資料庫上的 Stored Procedure Buffer Overflow 漏洞利用 | Stored procedure buffer overflow exploitation | --os-bof |
--priv-esc |
提升資料庫進程的使用者權限 | Database process user privilege escalation | --priv-esc |
--msf-path=MSFPATH |
指定 Metasploit 框架的路徑 | Local path where Metasploit Framework is installed | --msf-path=/opt/metasploit |
--tmp-path=TMPPATH |
指定遠端系統的臨時檔目錄 | Remote absolute path of temporary files directory | --tmp-path=/var/tmp/ |
Windows registry access
參數 | 中文說明 | 英文原文 | 舉例 |
---|---|---|---|
--reg-read |
讀取 Windows 註冊表鍵值 | Read a Windows registry key value | --reg-read |
--reg-add |
寫入 Windows 註冊表鍵值資料 | Write a Windows registry key value data | --reg-add |
--reg-del |
刪除 Windows 註冊表鍵值 | Delete a Windows registry key value | --reg-del |
--reg-key=REGKEY |
Windows 註冊表鍵 | Windows registry key | --reg-key="HKLM\SOFTWARE\Microsoft" |
--reg-value=REGVAL |
Windows 註冊表鍵值 | Windows registry key value | --reg-value=Version |
--reg-data=REGDATA |
Windows 註冊表鍵值資料 | Windows registry key value data | --reg-data=12 |
--reg-type=REGTYPE |
Windows 註冊表鍵值類型 | Windows registry key value type | --reg-type=REG_DWORD |
General
參數 | 中文說明 | 英文原文 | 舉例 |
---|---|---|---|
-s SESSIONFILE |
從已存的 (.sqlite) 檔案載入 session | Load session from a stored (.sqlite) file | -s session.sqlite |
-t TRAFFICFILE |
將所有 HTTP 流量記錄到文字檔案 | Log all HTTP traffic into a textual file | -t traffic.txt |
--answers=ANSWERS |
設定預先定義的回答 (e.g. "quit=N,follow=N") | Set predefined answers (e.g. "quit=N,follow=N") | --answers=quit=N,follow=Y |
--base64=BASE64PARAMETER |
包含 Base64 編碼資料的參數 | Parameter(s) containing Base64 encoded data | --base64=auth=bG9naW46cGFzc3dvcmQ= |
--base64-safe |
使用 URL 和檔案名稱安全的 Base64 字母表 (RFC 4648) | Use URL and filename safe Base64 alphabet (RFC 4648) | --base64-safe |
--batch |
永遠不要詢問使用者輸入,使用預設行為 | Never ask for user input, use the default behavior | --batch |
--binary-fields=BINARYFIELDS |
有二進位值的結果欄位 (e.g. "digest") | Result fields having binary values (e.g. "digest") | --binary-fields=digest,cookie |
--check-internet |
評估目標之前,檢查網路連線 | Check Internet connection before assessing the target | --check-internet |
--cleanup |
從資料庫中刪除 sqlmap 特定的 UDF 和表格 | Clean up the DBMS from sqlmap specific UDF and tables | --cleanup |
--crawl=CRAWLDEPTH |
從目標 URL 開始爬網站 | Crawl the website starting from the target URL | --crawl=3 |
--crawl-exclude=CRAWLEXCLUDE |
排除某些網頁不要爬 | Regexp to exclude pages from crawling (e.g. "logout") | --crawl-exclude=logout |
--csv-del=CSVDEL |
CSV 輸出時使用的分隔符號號 (預設為 ",") | Delimiting character used in CSV output (default ",") | --csv-del=";" |
--charset=CHARSET |
Blind SQL injection 字元集 (e.g. "0123456789abcdef") | Blind SQL injection charset (e.g. "0123456789abcdef") | --charset=utf8 |
--dump-format=DUMPFORMAT |
列出資料的格式 (CSV (預設), HTML 或 SQLITE) | Format of dumped data (CSV (default), HTML or SQLITE) | --dump-format=HTML |
--encoding=ENCODING |
取回資料時使用的字元編碼 (e.g. GBK) | Character encoding used for data retrieval (e.g. GBK | |
--eta |
每個輸出顯示預計到達時間 | Display for each output the estimated time of arrival | --eta |
--flush-session |
刷新當前目標的 session 文件 | Flush session files for current target | --flush-session |
--forms |
解析和測試目標 URL 上的表單 | Parse and test forms on target URL | --forms |
--fresh-queries |
忽略已儲存在會話文件中的查詢結果 | Ignore query results stored in session file | --fresh-queries |
--gpage=GOOGLEPAGE |
從指定頁面使用 Google dork 結果 | Use Google dork results from specified page number | --gpage=2 |
--har=HARFILE |
將所有 HTTP 流量記錄到 HAR 檔中 | Log all HTTP traffic into a HAR file | --har=/path/to/file.har |
--hex |
使用 16 進制轉換來檢索資料 | Use hex conversion during data retrieval | --hex |
--output-dir=OUTPUT_DIR |
自定義輸出目錄路徑 | Custom output directory path | --output-dir=/path/to/directory |
--parse-errors |
解析並顯示來自回應的 DBMS 錯誤消息 | Parse and display DBMS error messages from responses | --parse-errors |
--preprocess=PREPROCESS |
使用給定的腳本進行預處理(請求) | Use given script(s) for preprocessing (request) | --preprocess=/path/to/script |
--postprocess=POSTPROCESS |
使用給定的腳本進行後處理(回應) | Use given script(s) for postprocessing (response) | --postprocess=/path/to/script |
--repair |
重新 dump 具有未知字元標記(?)的條目 | Redump entries having unknown character marker (?) | --repair |
--save=SAVECONFIG |
將選項保存到配置 INI 檔 | Save options to a configuration INI file | --save=/path/to/file.ini |
--scope=SCOPE |
正則表達式篩選目標 | Regexp for filtering targets | --scope=https://feifei.tw |
--skip-heuristics |
跳過啟發式偵測 SQLi/XSS 漏洞 | Skip heuristic detection of SQLi/XSS vulnerabilities | --skip-heuristics |
--skip-waf |
跳過啟發式偵測 WAF/IPS 保護 | Skip heuristic detection of WAF/IPS protection | --skip-waf |
--table-prefix=TABLE_PREFIX |
設置暫存表的前綴 | Prefix used for temporary tables (default: "sqlmap") | --table-prefix=myapp_ |
--test-filter=TEST_FILTER |
通過 payload 和/或標題選擇測試 | Select tests by payloads and/or titles (e.g. ROW) | --test-filter="AND(SELECT 1 FROM DBMS_RANDOM)='" |
--test-skip=TEST_SKIP |
通過 payload 和/或標題跳過測試 | Skip tests by payloads and/or titles (e.g. BENCHMARK) | --test-skip="AND (SELECT * FROM mytable)='" |
--web-root=WEB_ROOT |
設置網站根目錄 | Web server document root directory (e.g. "/var/www") | --web-root=/var/www/html/ |
Miscellaneous
參數 | 中文說明 | 英文原文 | 舉例 |
---|---|---|---|
-z MNEMONICS |
使用短記憶體技巧 (e.g. "flu,bat,ban,tec=EU") | Use short mnemonics (e.g. "flu,bat,ban,tec=EU") | -z flu,bat,ban,tec=EU |
--alert=ALERT |
在發現 SQL 注入時執行主機 OS 命令 | Run host OS command(s) when SQL injection is found | --alert="ls -la" |
--beep |
當發現 SQLi/XSS/FI 時發出嗶聲 | Beep on question and/or when SQLi/XSS/FI is found | --beep |
--dependencies |
檢查是否缺少 (選用的) sqlmap 依賴項 | Check for missing (optional) sqlmap dependencies | --dependencies |
--disable-coloring |
禁用控制台輸出顏色 | Disable console output coloring | --disable-coloring |
--list-tampers |
顯示可用的篡改腳本列表 | Display list of available tamper scripts | --list-tampers |
--offline |
在離線模式下工作 (僅使用會話資料) | Work in offline mode (only use session data) | --offline |
--purge |
安全地從 sqlmap 資料目錄中刪除所有內容 | Safely remove all content from sqlmap data directory | --purge |
--results-file=RESULTS_FILE |
CSV 結果檔在多目標模式下的位置 | Location of CSV results file in multiple targets mode | --results-file=/path/to/results.csv |
--shell |
提示進入互動式 sqlmap shell | Prompt for an interactive sqlmap shell | --shell |
--tmp-dir=TMPDIR |
儲存臨時檔的本地目錄 | Local directory for storing temporary files | --tmp-dir=/path/to/tmpdir |
--unstable |
調整不穩定連接的選項 | Adjust options for unstable connections | --unstable |
--update |
更新 sqlmap | Update sqlmap | --update |
--wizard |
簡單的向導介面供初學者使用 | Simple wizard interface for beginner users | --wizard |
[安裝教學] 007 安裝 XAMPP (Windows、MAC)
飛飛 | 2023-04-29環境安裝 - Windows 安裝 XAMPP 的注意事項
- XAMPP 是一個 PHP 的集合開發環境,會選擇 XAMPP 作為這次的練習環境是因為其中已經包含了 Apache + MySQL + PHP
- 下載 XAMPP: XAMPP
- 安裝 XAMPP:
- 只保留 Apache、MySQL、PHP、phpMyadmin,其他的都不要勾選:
- 只保留 Apache、MySQL、PHP、phpMyadmin,其他的都不要勾選:
- 看到控制介面及代表 XAMPP 安裝成功:
- 開啟 Apache 跟 MySQL 的服務:
- 開啟瀏覽器,輸入網址:
http://localhost
,如果看到以下畫面,就代表 Apache 啟動成功:
For Mac
- 雖然我們可以直接安裝課程會需要的 Apache2, MySQL, PHP,但由於課程需求,會希望可以一樣有 XAMPP 的環境,好在 XAMPP 本來就有 Mac 的版本,而且已經有支援 Aarm 的 M1, M2 CPU 了,因此可以直接安裝。
- 下載之後直接點會拿到 Mac 的
.dmg
安裝檔,點擊裡面的 installer 就會看到 xampp 的安裝畫面了。
- MacOS 的 XAMPP 的選項中並沒有如 Windows 中的套件選擇,基本上就是如圖所示一個 XAMPP core files 一個 XAMPP developer files,其中 core files 裡面包含了我們需要的 Apache2, MySQL, PHP 等等檔案,而 developer files 則是常見的開發輔助套件,基本上兩個都勾選就好。
- 之後就是一路往下一步就對了,直到最後安裝完成,Launch XAMPP 之後,如果看到如下畫面就代表安裝成功了。
- 管理服務的畫面則是在 Manage Servers 裡面,可以看到有 Apache Web Server 等等服務的編輯畫面,並且可以看到 Apache 已經在運作了,因此我們查看
localhost
有沒有看到 Apache 的預設頁面,如果也看到了,就代表環境跟安裝都沒有問題了。
- 今天的課程還會用到 phpmyadmin,但 Mac 版本的 XAMPP 沒有安裝,因此要另外安裝 phpmyadmin,先去 phpMyAdmin 的官網 https://www.phpmyadmin.net/ 下載最新的 phpMyAdmin,並且解壓縮。
- 打開熟悉的 Terminal 並且使用下面
sudo mv ~/Downloads/phpMyAdmin-5.2.0-all-languages/ /Library/WebServer/Documents/phpmyadmin/
將 phpmyadmin 將資料複製到/Library/WebServer/Documents/
底下,在瀏覽器中輸入http://localhost/phpmyadmin/
就會看到 phpmyadmin 的畫面了。
Ref
補充知識
- MariaDB 是 MySQL 的分支,可以想像成以 MySQL 為基礎,再加上一些功能的社群開發版本,因此 MariaDB 的 API 和 協定 都是相容 MySQL。
[問題諮詢] 005 如何學習數位鑑識、事件調查(DFIR)
飛飛 | 2023-03-31前言
雖然仍然不是數位鑑識與事件調查的專家,但偶而還是會看一下相關的書籍,或是在求學過程中有幸可以參加相關的課程,真的很感謝這些講師提供課程。
本文簡單介紹 DFIR 範疇與相關的資源與學習方向。
關鍵字
- 數位鑑識(Digital Forensics, DF)
- 數位鑑識是 forensic science 的範疇,forensic science 鑑識科學是一種利用科學手段處理、解決與司法體系利益相關問題的科學。其主要針對刑事及民事案件。[1]
- 事件調查(Incident Response,IR)
- NIST SP800-61 R2
- Computer Security Incident Handling Guide
- 提供資安事件回應的指導方針,如何分析事件數據和確定每個事件的適當回應。
- 幫助企業建立資安事件回應能力,並有效地處理事件。
- 指導方針不限於特定的硬體平台、作業系統、協定或應用程式。
- NIST SP800-61 R2
IR 學習流程[2]
- 時間軸分析:在資安事件發生後,調查入侵過程的時間軸,將事件串連成線,以得到完整的攻擊過程,快速判定可用於後續分析的資訊。
- 關鍵字搜尋:利用關鍵字快速搜尋與過濾,從大量記錄中找出可疑的記錄,再進行前後比對或分析,找出資安攻擊的源頭。
- 統計及頻率分析:透過統計分析的方法,找出系統運作的正常平均值,再比對資安事件發生時各系統的數值,判定是否異常,以找出被入侵的系統源頭。
- 方向性分析:分析資安攻擊的方向性,由外而內或由內而外,以確定調查方向。
相關資源
參考資料
- [1] 鑑識科學 https://zh.wikipedia.org/wiki/%E5%8F%B8%E6%B3%95%E7%A7%91%E5%AD%A6
- [2] 親身分享第一線IR經驗,靠4大實戰法則找駭客入侵源頭 https://www.ithome.com.tw/news/145002
[新手入門] 004 學習網路概論的技巧
飛飛 | 2023-03-29前言
網路概論是網路安全與網站安全最重要的基礎內容,但有時候拿起學校的「網路概論」的課程就覺得非常難懂,甚至不想讀下去。
在這裡建議新手閱讀這些書籍的時候,可以帶著「問題」去找答案。
當然,你還是可以從一本網路基礎概論裡面下手去把所有的知識補完。
新手可以嘗試的問題
一、使用一台電腦到可以透過瀏覽器需要哪一些設備或流程
雖然看起來很很硬核的題目,但可以分隔出來目前自己有哪些基礎知識尚未補齊。
使用筆電 > 開啟 WiFi > 手機開啟基地台 > 連到該基地台 > 可以正常上網
假設你說出以上的內容,那你可以開始深度挖掘裡面的內容:
- WiFi 是什麼
- 為什麼手機網路開基地台,就可以使用網路
- 基地台的原理是什麼
家裡有中華電信的網路 > 會連到一台黑色的盒子 > 從盒子插了一條網路線 > 網路線連到我的桌電
以上面為例子,
- 中華電信的網路是什麼?
- 黑色的盒子是什麼?他做了什麼事情?
- 網路線是什麼,裡面有很多顏色
- 網路線連到我的電腦,那個孔是什麼?
二、為什麼開瀏覽器,輸入網址可以看到,網頁的內容
- 瀏覽器是什麼
- 網頁是什麼
- 網址是什麼
規劃
原本希望可以設計出 52 個問題,利用一年把網路概論打好基礎,但偷偷說,其實上述的第二題就可以把一整個網路世界慢慢摸清楚了。
正常的網路入門
不外乎就是從什麼是協定、OSI 模型、TCP/IP 模型,到網路封包、每一層的細節以及網路建置等內容。
[問題諮詢] 004 CTF PWN 領域中如何變強
飛飛 | 2023-03-17前言
雖然不是 PWN 領域的專家,但網路上的資源很多,基本上還是可以利用這些內容來加強自己的能力,本篇也分享一些學習的方法。
問題
「教練,我想變強。」這是在漫畫裡面最經典的那個畫面。
而這次的問題諮詢時,同樣也遇到這個問題。
因為本身這個問題者已經有對應的知識量,還有經驗,但一直覺得自己能力還上不去。
初學者
給 PWN 的初學者看的,
推薦入門還是用 張元的教材,了解一下 PWN 的架構。
方法
以下是目前給對方的建議:
也許有時候拿起書,書本太厚,讀不下去,這是資訊圈的工具書的問題,但書裡面有大綱,你可以拿來盤點自己的能力,當做一個 Check List。
輸入和輸出的黃金比例是3:7,因此你今天學習的時候,還是重在"輸出",流程是你今天看了很多東西, 你放在腦袋裡面可能會忘記,你嘗試輸出(不管是用寫的、用講的、做簡報、做圖 anything),你可以看到自己累積下來的內容。
CTF 中戰隊的成果是 CTF 比賽的結果,打了幾場比賽,贏了幾次,但如果不打比賽如何證明自己的能力,除了挖更多的漏洞,有時候挖不到有時挖得到(運氣導向),說我自己的有多少個 CVE 編號。
其他可以證明的,可累積的成果展示,包含分享次數、演講、報告、寫作、日記、心得、文章、教學、工作坊的講師,還有很多都可以練習輸出。
更多在學習的過程,可能會"失敗",但是記錄失敗不是壞事,記錄自己的思路,別人想得出來,卡在哪裡,下次遇到類似的可以直接沿用這次的經驗。
步驟
- 先盤點自己會有哪些內容
- 怎麼盤點
- 用書本的大綱來盤點
- 多本書籍
- 主題閱讀
- 用書本的大綱來盤點
- 怎麼盤點
- 設定目標
- 每天閱讀五分鐘
- 每天輸出十五分鐘
- 看到成果
- 累積自己的學習成果
[資安社群] 005 DEVCORE Conference 2023 企業場心得-DEVCORE 紅隊的進化,與下一步 Ver. 2023
飛飛 | 2023-03-12前言
本篇內容記錄 2023/03/10 到台北國際會議中心 (TICC) 201 會議室參與 DEVCORE Conference 2023 企業場的筆記以及心得,因為是靠拍照可能會有一點疏漏,如果有任何問題可以看日後 DEVCORE 的 BLOG。
小感想
這場議程的最後,有人詢問講者說,紅隊人員的能力該如何量化,對於我來說,人員能力量化真的很困難,可能客戶可以從系統知道他們嘗試什麼思路失敗,以證明自己能力還是很厲害,這個問題值得思考很久。
議程列表
- 攻擊一日,創業十年
- DEVCORE 執行長暨共同創辦人 Allen
- 紅隊紅隊,多少服務假汝之名而行!
- DEVCORE 商務發展總監 Aaron
- 紅隊常見 Q&A 大解密
- DEVCORE 資深副總暨共同創辦人 Bowen
- DEVCORE 紅隊的進化,與下一步 Ver. 2023
- DEVCORE 紅隊總監暨共同創辦人 Shaolin
DEVCORE 紅隊的進化,與下一步 Ver. 2023
outline
- 紅隊的進化 ver.2019
- 紅隊的進化 ver.2023
- 企業的下一步
- 紅隊的下一步
紅隊的進化 ver.2019
延續 2019 的版本,可以看 DEVCORE 官方 Blog 回顧
紅隊演練怎麼進行
- 收到任務目標(來自企業)
- 取得控制核心的系統的控制權
- 取得網域高權限帳號
- 取得客戶信用卡完整卡號
- 取得特定人員權限
- 執行專案
- 排除協議的禁止行為
- 紅隊無所不用其極地達成任務目標
Reveiw 2019
- 目標: 進入內網
- 研究高價值產品漏洞
- 出國演講、參加比賽
- 目標:協同合作與歷程記錄
- 需要團隊合作,有協同合作工具與平台,記錄每一筆的行為
- Shell 主機主控台,方便其他人接手
- 客製化系統,可以標籤、排序、搜尋主機的系統、
- 客製化系統,主機有用資源分享
- 目標: 隱匿的內網橫向移動
- 開發隱匿工具
- WAF 抓不到
- 防毒軟體抓不到
- 不會有 EventLog
- 收集所需系統或程式碼 netstat, route,tasklist ...
- 開發隱匿工具
2023 的進化
- 為了進入企業內網
- 高價值產品漏洞研究與挖掘
- 團隊協同合作與歷程記錄
- 客製化的協同合作工具
- 更穩定的內網橫向
- 開發隱匿工具
客戶的疑問
為什麽我花了這麽多的預算
安全檢測也做過這麼多年了
紅隊演練時還是照亮被突破
一般紅隊演練的流程
- Reconnaissance:偵查,找到企業外面有哪些介面
- Initial Access:找到第一個進入點,找到一個漏洞進入企業內部
- Persistence
- Privilege Escalation
- Lateral Movement:橫向移動到更重要的核心系統
- Exfiltration:把核心系統的資料全部攜帶出來
- 取得紅隊演練的標的
紅隊演練面臨的挑戰
- 企業外網找到漏洞:可能已經做了很多次檢測,所以從外部找不到漏洞
- WAF、IDS 設備:企業佈署防禦設備
- 防毒軟體:伺服器會安裝防毒,還需要繞過
- 內網連外限制:安裝後門程式之後,面連到網路無法對外,因為有些企業會限制外網連線
- 企業內網橫向移動:需要一道比較重要的網段
- 實體隔離:大魔王,有實體隔離的機器,該如何取得裡面的資料
企業外網找到漏洞
如果做過很多次的滲透測試,該如何突破,講者提到他們做了多次的紅隊演練,的經驗分享如下:
- 第一個關鍵點: 收集資訊比他人多
- ▲ 長期累積的精華字典檔案
- 知道企業喜歡哪些國產軟體
- 蒐集這些國產軟體的路徑
- 可以更快掃到目錄
- 飛飛 Tips: 平常有自己收集好字典檔、路徑、帳號、密碼都需要收集
- ▲ 背景自動蒐集資訊洩漏
- 針對 GitHub、Google、HackMd 等網站蒐集機敏資料
- 舉例:Machine Key(公開測試專案的 Machine Key),若取得該 Key 可以控制 Key deploy 的所有網站
- 長期去收集這些問題,進行紅隊演練的時候就可以利用
- ▲ 長期累積的精華字典檔案
- 第二個關鍵: 觀察比他人細
- ▲ 供應商的弱點:發現供應商的資訊洩漏
- 確認資訊系統是哪一間廠商維護,透過標案系統找到目標開發廠商
- 針對開發商或維護商尋找漏洞,如洩漏目標網站程式碼,針對程式碼挖掘漏洞。
- 例子:Repository 公開在外面,可以看到所有的程式碼。
- ▲ 說明文件取得檢測資源
- 觀察企業的說明文件,可能會有登入的案例,可以從截圖找到帳號與"密碼長度""
- 發現測試站的複雜帳號(例子為 demo3345678)
- 發現密碼位數猜測弱密碼(例子為5位,常見可能為 admin)
- 進入系統發現其他漏洞(可能為權限過大的管理者)
- 觀察企業的說明文件,可能會有登入的案例,可以從截圖找到帳號與"密碼長度""
- ▲ 社交平台的資訊洩漏
- 例子為內部系統的密碼是生日,針對主管的社交平台,如 Facebook 等,找到過去的 "護照" "機票" 的資訊,並取得生日進入主管權限,(該照片為 2013 分享)
- ▲ 供應商的弱點:發現供應商的資訊洩漏
- 第三個關鍵點: 找別人不想看,或沒有注意的服務
- ▲ 專用桌面端軟體:
- 這個企業有多年滲透測試經驗,因此外網漏洞甚少,WAF 也很優秀。
- 針對企業的桌面端軟體,桌面端將參數"加密"並跟伺服器互動,可透過逆向工程解出加密演算法後,就可以針對參數進行測試,根伺服器交互的過程中找到漏洞。
- 也因為參數有進行加密所以 WAF 剛好被繞過。
- ▲ 專用桌面端軟體:
- 第四個關鍵點:有世界級的漏洞利用與研究能力
- 大家都知道不用講 (X
- 有足夠時間很高機率可以挖出 0 day
WAF、IDS 設備:企業佈署防禦設備
- 關鍵點:讓 WAF 認不出來中間傳了什麼
- 繞 WAF 基本概念
- 假設 illegal 是 WAF 認為不合法的字串
- 攻擊者傳出字串: illega%6c
- WAF 看到的字串: illega%6c (WAF 以為合法)
- 伺服器理解的字串 illegal(成功繞過 WAF)
- ▲ 可透過字元編碼、取代搭配伺服器的特性嘗試繞過 WAF
- 以上是基礎概念
- ★(常用) 使用序列化的特性
- 因為序列化的資烙是亂碼
- WAF 看不到任何關鍵字
- 實測成功繞過多種廠商的防禦
防毒軟體
- 關鍵點:程式不要出現特徵碼即可
- 關鍵方法
- 加殼
- 加密
- 壓縮
- 混淆
- 手動移除程式內的關鍵字,如 help message
- 可以透過重新編譯繞過防毒軟體
- 關鍵方法
內網連外限制
- 企業嚴苛的環境
- 掛一個 proxy 才能夠上網
- 中間要有一層 Gateway
- 不合法網站不能上
- 不能傳危險的內容
- 關鍵點: 想辦法成為 Gateway 的白名單
- 關鍵方法
- 開發後門工具支援純 HTTP 協定+ Proxy
- 尋找 Gateway 的白名單 domain,看什麼 domain 是可以利用的
- ★ CDN domain 最好利用
- 因為一般網站一定會用到 CDN 素材(CSS,JS),CDN 通常是白名單,可以去 CDN 的網站申請後,許內容都可以透過 CDN 傳輸
- 關鍵方法
企業內網橫向移動
- 關鍵點:直搗黃龍,打 AD 伺服器
- AD 價值高,現階段相對好攻擊,原因如下:
- 權限種類太多: 容易出現設定疏失
- 企業帳號太多: 莫名的服務,人員擁有不需要的高權限
- 歷史包袱太多: 不知道哪個學長留下的高權限帳號
- 個人疏失: 資源回收桶殘留關鍵帳號密碼、個人目錄放密碼表.xls
- AD 價值高,現階段相對好攻擊,原因如下:
飛飛OS: 也要有 AD 可以打 XD,但不過我個人經驗也是許多人的電腦裡面資源回收桶都不會定時清理,通常會等到電腦當當的才會清,所以偶爾翻個垃圾桶也是會有不一樣的東西。
實體隔離(大魔王)
- 關鍵點: 實體隔離仍要方便維運
- 一般而言無法突破
- 嘗試尋找維運實體隔離機器的痕跡,以下是實戰看到的例子
- 透過 AD 管理
- 透過資產管理系統
- 透過 iLO 管理
- 透過 vCenter 管理
- 尋找方式
- 直接攻陷上述提到的管理系統,搜尋出"號稱"實體隔離的機器
- 尋找維運交接的文件
- 淺伏在維運人員電腦觀察
- Case: 透過IPMI 連接螢幕,網路實體隔離,但螢幕滑鼠可控制,可以直接登進去做紅隊的其他事情
反思
- 做過滲透測試/紅隊演練並不代表 100 % 安全
- 過去的檢測團隊不一定有時間 or 有資源可以看到這麼像
- 做檢測的團隊,從不同角度、不同人、不同時間,會有不同結果
- 以上是企業定期進行資安檢測的由來
- 資安防護軟體:WAF 是有可能失效的
- 只要做到讓 WAF 認不得的傳輸內容就可以繞過 WAF
- 有些網站可能還會用 Javascript 或其他方式加密傳輸封包,WAF 認不出來,就無法抵擋
- 繞過防毒軟體的成本,沒有想像中的高
- 以攻擊者的角度,遇到防毒軟體只會覺得麻煩,但並非不能繞過
- 企業限制內網對外連線
- 駭客仍有機會透過白名單網站把資料傳出去,只要員工沒有被完全禁止上網(循著員工上網足跡)
- AD 帶來的管理便利性,很容易會有設定上的疏失
- 可以透過 AD Attack Path Assessment 等產品盤點 AD 可能會被攻擊的路徑
- 無法盤點: 員工的文件、email、密碼管理軟體等人為洩漏疏失無法盤點,例子: 資源回收桶、桌面密碼表
- 企業說的實體隔離,有可能只是防火牆的設定
- 特定 主機 開放連線
- 特定 port 開放連線
- 特定 時段 開放連線
- 方便維運和安全性的取捨,方便維運有機會成為破口
企業的下一步
- 從漏洞檢測、防火牆、防毒軟體、限制外網連線、橫向移動到實體隔離,每一個都有可能失效,怎麼應對
- 上述所提的對於攻擊者來說都是一條攻擊鏈
- 解決方式: 眼明手快
- 眼明 → 偵測
- 手快 → 回應、阻斷
- 衍明:有偵測能力,知道有人正在攻擊
- 手快: 快速回應,阻斷害克的攻擊
- ▲ 面對駭客很像面對 COVID-19,讓身體認識它 > 沒有駭客(病毒清零政策)
會讓紅對覺得麻煩的防禦機制
- ★ 內網發現異常就通報,甚至阻斷網路(對駭客來說非常困擾)
- 來自異常 IP 存取
- 來自不同軟體的登入
- 同 IP 對內網大範圍的掃瞄
- 網站檔案異動後復原及通報
- 網頁伺服器身分執行系統指令
跟你平常看到不一樣的就是異常
- 例子: 登入 AD 的過程,用一台沒有用的機器,企業馬上告警,就是異常
- 平常企業收集流量分析
- 企業使用習慣
- 如何發現不同點或不一樣
- 例子: 取得資料庫的帳號密碼,伊登入,馬上就被發現登入資料庫
- 因為登入的 Client Header 不一樣,所以馬上可以發現
企業資安成熟度現況
- 2019 當真正的駭客入侵時,企業準備好了嗎
- 攻進內網的時候,大部分的企業沒有知覺
- 對於頂尖團隊而言,進入內網的難度並不甘
- 從紅隊演練中訓練企業"偵測"和"應變"的能力
- 大部分的企業都還在第一階段到第二階段之間
- 第一階段演練目標
- 找出最快入侵途徑
- 盡量監控但不阻擋
- 第二階段演練目標
- 驗證防禦的有效性
- 久攻不克的特許方案
- 嘗試新的攻擊情境與手法,如社交工程、實體入侵
- 第三階段演練目標
- 完全擬真對抗演練
- 不限時間、不限範圍、不限手法
- 確認日常團隊防禦應變流程及能力
- 勇於挑戰團隊極限
- 第一階段演練目標
紅隊如何幫助企業
- 第一階段:確保外網有一定的安全性
- 評估點:2~3 週外網找不到進入點(視範圍而定﹚
- 第二階段:確保內網具有偵測與應變能力
- 評估點: 可否發現 DEVCORE 在內網的行動
- 第三階段: 確保整體防禦達 24/7 的有效性
- 評估點: 隱匿攻擊下核心系統的重要資料,有沒有被取走
真實客戶的進化
- 第一年: 什麼權限都拿到了,管理員卻什麼都不知道
- 第二年: 我們核心網段有異常 log ,是你們在攻擊嗎
- 第三年: 我們 DMZ 網段有異常 log,是你們在攻擊嗎
建議
- 如果外網安全已投資多年,開始思考「如果駭客已經在內網」的防禦策略
- 盤點出最不可以被洩漏的重要資料,從這些地方開始奉行 Zero Trust 概念
- 企業內部需要有專職資安人員編制的藍隊,負責偵測和應變
- 透過有經驗的紅隊合作,全盤檢視防禦盲點
紅隊的下一步
- 學習尋找新的攻擊面
- 釣魚、供應鏈攻擊
- 新攻擊手法很多時吼都是因為打不穿企業,而後逼出來的結果
- 仍舊在乎隱匿技術、工具研發
- 台灣目前平均偵測能力不夠,預計兩三年後,才會需要在演練中隱匿技術
- 研擬紅藍對抗的戰術
- 如: 洩漏蹤跡是調虎離山,還是真的洩漏?
- 資安成熟度高的企業可逐漸導入擬針對抗演練
- 情境式的演練,紅隊推薦劇本模擬駭客使用特定的技術或攻擊路徑
- 可增強防禦方對特定技術或攻擊路徑的偵測、應變能力
- 紅藍對抗:擬真的演練
- 增強對職業攻擊者的應變能力,將傷害降低
Takeaways
- 從紅隊在各個階段的攻擊思維,了解各個資安產品都有其極限
- 駭客入侵一定會發生
- 因此防禦方須持續培養資安人員加強偵測和應變能力
- 透過紅隊演練咧解企業防禦的盲點,以利規劃對應之道
結語
紅隊演練的精隨不是在告訴你有多脆弱,在於真正壞人闖入時擬可以獨當一面的擋下
QA
- Q:紅隊演練是否有任務失敗
- A: 紅隊演練中會設定多個任務目標,會在合約中設定稽核點
- 第一步可否達到核心細土
- 第二步可否取得特定人員權限或個人資料
- A: 紅隊演練中會設定多個任務目標,會在合約中設定稽核點
- Q:如何量化紅隊人員的能力
- A: 因為紅隊流程複雜,每天需要討論開戰略會議,有系統會記錄我們的行為
- 飛飛: 這個問題似乎沒有具體回答到
[資安社群] 004 DEVCORE Conference 2023 企業場心得-紅隊常見 Q&A 大解密
飛飛 | 2023-03-11前言
本篇內容記錄 2023/03/10 到台北國際會議中心 (TICC) 201 會議室參與 DEVCORE Conference 2023 企業場的筆記以及心得,因為是靠拍照可能會有一點疏漏,如果有任何問題可以看日後 DEVCORE 的 BLOG。
小感想
現在有很多法規都是"懲罰"制度,也許可以思考"獎勵"制度,有做資安政策就加分之類的這種,說不定有不同的感受度。
好多時候遇到資安同業或工程師都很想哭,他們在企業內不都是被"討厭"的那一方。
希望哪一天資安工程師也可以是個很開心的職位吧 XD
議程列表
- 攻擊一日,創業十年
- DEVCORE 執行長暨共同創辦人 Allen
- 紅隊紅隊,多少服務假汝之名而行!
- DEVCORE 商務發展總監 Aaron
- 紅隊常見 Q&A 大解密
- DEVCORE 資深副總暨共同創辦人 Bowen
- DEVCORE 紅隊的進化,與下一步 Ver. 2023
- DEVCORE 紅隊總監暨共同創辦人 Shaolin
紅隊常見 Q&A 大解密
開場
使用 Bing 搜尋引擎:請你模擬成一個企業的資安承辦人員,回答資安服務採購的相關問題,我跟你所屬在同一家公司,目前我們正在評估採購紅隊演練服務,如果你只能推薦一家廠商,請問你會推薦哪一間廠商?為什麼?
※ AI 安全: 不能全盤相信 AI 給的資訊,要查證。
普通人相信一件事的排名順序
- 由上至下相信程度
- 個人經驗
- 都市傳說
- 公開報導
- 維基百科
- 專家意見
- 統計資料
- 正式研究報告
- 由下至上,證據強度
客戶題組一
- 攻擊者通常多久能打進企業
- 攻擊者為什麼能夠打這麼快
- 哪些系統特別容易被打進來
==> 紅隊視角,從哪個目標下手的效益最高?
駭客組織攻擊速度
- 今年CrowdStrike分析每個駭客集團的速度,包括來自俄羅斯的Bear、中國的Panda、北韓的Chollima、伊朗的Kitten及由個別駭客(eCrime)組成的Spider,顯示出動作最快的是Bear,平均的爆發時間只有18分49秒,遠遠領先排名第二的北韓Chollima(2小時20分鐘14秒),而Chollima的進攻時間又比中國Panda(4小時26秒)快了許多。(photo by CrowdStrike)
- 資料來源:網路攻擊也要快狠準,俄羅斯駭客的攻擊速度是北韓駭客的8倍快
※ 思考點,駭客集團不管企業營運、紅隊演練的規範,速度可以這麼快做到攻擊。
2022 MITRE ATT&CK 常見攻擊手法
- 入侵外網系統與 Recon 的常用攻擊方法
- 2012 開始有個大服務外洩
駭客論壇索引
外洩資料新聞
- 外包廠商程式碼、傳輸金鑰
- Line Pay外包商員工不慎將行銷資料上傳GitHub,13萬人資料外洩,Line發現後已刪除並公布調查結果
常見外洩地方
- GitHub
- Google Drive
- HackMD
- 上傳到以上地方,被員工設定公開存取
供應鏈攻擊
- 第三方系統太多漏洞導致外網系統容易被入侵
- 最常檢測的系統
- E-Learning、HR系統、Email 伺服器、VPN、NAS
- 資產管理系統(取得大量資產控制權)
- ERP 企業資源規劃、BPM 流程管理系統、會計系統
- 公文管理系統、線上簽核系統、客服錄音系統
- 印表機、攝影機、無線 AP
自己開發 vs 買進來的軟體
- 企業內部開發系統很強
- 從外面買進來的軟體、設備也很安全嗎?
最常檢測的系統特徵
- 第三方開發、企業採購買進來
- 很熱門(很多企業使用,打了 CP 值很高):打一個可以用很多次
- 很冷門(打了也不會發現,甚至是誰管的也不知道)
- 太好打(沒有做過滲透測試的系統、沒有更換預設帳號密碼、沒有定期更新)
飛飛:冷門設備,企業自己也不知道,稱為「無主設備」,在工控安全領域中也時常利用類似手法,也常常 EOL(End-of-life,產品生命週期結束)
採購的設備
- 廠商沒有更改預設管理帳號密碼
- 廠商沒有更改預設加密金鑰
- 通常不會被納入在滲透測試標的
- 放外網有漏洞是破口,放內網很容易成為橫向移動的跳板
台灣漏洞公告
- TVN (Taiwan Vulnerability Note) 漏洞公告
- 白帽駭客:通知原廠,盡快修補
廠商的產品成功案例
- 列舉很多客戶都使用自家的產品,但這個產品被攻擊之後,很多客戶都會中招(攻擊者的福利)
如何面對第三方系統的風險
- 要求系統開發商提供可信賴的第三方檢測證明
- 落實供應鏈資安管理機制
2.1 撤換預設管理者密碼、撤換預設加密金鑰
2.2 定期安裝更新
2.3 定期盤點資產、落實下線流程
※ 以上都是老生常談
※ 有些時候漏洞被揭露,沒有被修補,或是修補之後沒有通知其他客戶
演練最常遇到
- 管理者預設帳號密碼
- 預設 ASP.NET MachineKey
- 掌握 DMZ 系統控制權,可直達 AD 伺服器橋段
其他防禦技巧
- 做好網段切割,確保第三方系統不會與非必要的伺服器相連
- 確認供應鏈有沒有使用 GitHub、GitLab 等原始碼託管系統
2.1 稽核項目:需要登入?有開啟 2FA? 專案有切分權限 - 查核供應鏈過去遇到弱點的修補速度
3.1 稽核項目:修補是否超過三個月?修補後是否有主動通知客戶?
※ 權限控管:行政部門卻可以看其他開發部門的網站、網段?不合理之處。
反思:企業該如何避免出現效益很高的目標?
- 切勿在私人帳號與公司帳號共用同一組密碼(常常遇到這種案例)
- 訂閱 TWCERT 的漏洞公告,發現漏洞就請廠商盡快更新
- 自己要採購的系統有弱點,可以確認是否有更新
- 請廠商做好滲透測試、換預設密碼、更換加密金鑰、進行安裝更新
- 做好資產盤點與供應鏈管理,確保不會有豬隊友
客戶題組二
- 做完一次的紅隊演練有多大的代表性
- 可不可以只專注找外網的漏洞就好
- 你們沒有做過相同的產業會不會打不進來
- 現在有沒有客戶是從外網打不進去的
企業迷思:過度關注外網
資安攻擊情境很像玩具中的疊疊樂,抽掉一兩根,也許不會垮掉,如果抽掉很多跟就會影響根基,忽然垮掉。
對應到重大資安事件,可能不是一兩個漏洞造成,可能是一堆漏洞集合。
飛飛: 突然想到地震的時候房屋倒掉也是這種感覺,一次兩次的地震,開始有裂縫,大地震來就倒了。
其他入侵途徑
- 社交工程(Email、電話)
- 通常滲透測試的時候企業都不希望使用"社交工程"會覺得影響到企業營運,主管看到、員工看到觀感不佳,不過"社交工程"是很多駭客集團利用的。
- WiFi 溢播檢測
- 拿著指向型天線,到企業附近、樓梯間,抓到 WIFI 訊號
- 透過封包破解密碼,破解後可能取得 WIFI 存取權限
- 有權限後,企業內沒有做好網段隔離就有機會直達核心網段、核心系統,如 AD、VMware vCenter
- 實體入侵、供應鏈攻擊
- 盜用門禁卡
- 破壞門鎖
- 穿得像維修工人
- 除了攻擊你之外也會攻擊上下游,再從上下游攻擊你
從防疫思考如何做資安
- N95 口罩、防護衣
- 對應 Firewall、WAF、IPS、Web Gateway、Mail GateWay
- ★ 不要仰賴資安產品,長久下來會出事
- 免疫系統
- 對應安裝更新(定期)、制定流程、定期演練、確認演練的有效性
適合自己的階段
- 第一階段:初次進行演練
- 階段特徵
- 缺乏優先順序
- 缺乏網段切割
- 缺乏定期盤點
- 預算放錯位置
- 不熟悉攻擊流程
- 演練方式
- 找出最外入侵途徑
- 盡量監控但不阻擋
- ★ 框出自己的關鍵字產、核心系統,系統周圍做好隔離與切割
- 階段特徵
- 第二階段:資安成熟度成熟
- 特徵
- 有優先順序但尚未落實完畢
- 已完成部分內網網段切割
- 僅剩零星資產尚未掌握
- 已可掌握部分攻擊手法
- 演練方式
- 驗證防禦的有效性
- 久攻不克特許方案
- 特徵
- 第三階段:資安成熟度高
- 演練方式
- 完全擬真的對抗演練方式
- 不限時間、不限範圍、不限手法
- 嘗試社交工程、實體入侵等攻擊情境
- 勇於挑戰團隊極限
- 演練方式
沒做過相同產業如何演練
- 相同產業的公司可打進內網的天數不一樣:代表不同"防禦"等級
- 相同產業的公司可偵測到攻擊的天數不一樣:代表不同"偵測"等級
- 注意外部檢測團隊
- 是否有足夠火力
- 是否有專業檢測經驗
- 是否積極更新檢測手法
- 注意企業防禦團隊
- 是否有規劃縱身防禦措施
- 是否有落實資安應變機制
- 是否有順暢的跨部門溝通
有打不穿的企業,這些企業特徵
- 持續縮小攻擊表面積
- 徹底落實網段切割,不會發生 DMZ 直達 AD 的狀況
- 樂於接受駭客思維,不會用防禦方的角度來指揮攻擊方
- 高階主管不會究責,主管只關心團隊是否能在演練後成長
- 開放心態,擁抱變化
記住
- 沒有最好的答案,只有最適合的答案(每個企業因為規模大小不同,能規劃的資安機制會不同,要慢慢去成長)
- 企業一定會遇到資安事件
Takeaways
- 建立供應鏈管理機制,並落實到每次的系統建置中
- 規劃不同階段的企業強化機制,按部就班強化資安體質
- 以開放心態,擁抱變化的姿態面對千變萬化的攻擊
[資安社群] 003 DEVCORE Conference 2023 企業場心得-紅隊紅隊,多少服務假汝之名而行
飛飛 | 2023-03-11前言
本篇內容記錄 2023/03/10 到台北國際會議中心 (TICC) 201 會議室參與 DEVCORE Conference 2023 企業場的筆記以及心得,因為是靠拍照可能會有一點疏漏,如果有任何問題可以看日後 DEVCORE 的 BLOG。
小感想
這個議程有提到「紅人演練」有時候在思考說,到底要怎麼樣才能快速提升服務品質,或是培訓更多的人做資安檢測,但培訓出來是否有效果,或是能不能量化,都是一個挑戰。
議程列表
- 攻擊一日,創業十年
- DEVCORE 執行長暨共同創辦人 Allen
- 紅隊紅隊,多少服務假汝之名而行!
- DEVCORE 商務發展總監 Aaron
- 紅隊常見 Q&A 大解密
- DEVCORE 資深副總暨共同創辦人 Bowen
- DEVCORE 紅隊的進化,與下一步 Ver. 2023
- DEVCORE 紅隊總監暨共同創辦人 Shaolin
紅隊紅隊,多少服務假汝之名而行!
誤用名詞
- 紅隊演練 (O)
- 紅白演練 (X)
- 紅藍演練 (X)
- 紅軍演練 (X)
- 紅人演練 (X)
※ 紅人演練:人數較少,希望能提升客戶的作戰時間滿足需求。
抽換概念
- 弱點掃描(Vulnerability Sacnning)
- 滲透測試(Penetraion Testing)
- 弱點評估(Vulnerability Assessment)
- 攻擊與入侵模擬工具(Breach and Attack Simulation)
- 網路資安風險管理系統(Attack Surface Management)
※ 可能會把以上的內容,塞進去開案的規格裡面,但以上必非紅隊演練。
之前做過的滲透測試跟其他的比較圖:
議程
- 攻擊市場趨勢
- 防守方的挑戰
- 紅隊真正的價值
- 紅隊的架構
攻擊市場趨勢
趨勢一:攻擊型產品,市場急促增加
未來六年攻擊型產品,市場非常樂觀,每年以 11% 以上的成長率進行成長。
數據一
The global Cybersecurity, Red Teaming and Penetration Testing market size was valued at USD 120695.13 million in 2021 and is expected to expand at a CAGR of 11.59% during the forecast period, reaching USD 233045.88 million by 2027.
數據二
Penetration Testing Market Anticipated to Touch USD 8.13 Billion at a 13.5% CAGR by 2030 - Report by Market Research Future (MRFR)
數據三
According to a new market research report titled, ‘Penetration Testing Market by Offering, Position, Type, Method (Black Box Testing, White Box Testing), Visibility (Covert Pen Testing, Automated Pen Testing), and End User (BFSI, Healthcare, Automotive, Others), and Geography - Global Forecast to 2029,’ the penetration testing market is expected to reach $4.05 billion by 2029, at a CAGR of 12.5% during the forecast period.
Gartner® Hype Cycle for Security Operations, 2022
講者引用 Gartner® Hype Cycle for Security Operations, 2022 的內容說明「資安產品」的變化
-
圖片來源:Gartner®
-
Gartner:國際研究暨顧問機構
-
各個階段
- Innovation Trigger: 科技誕生的促動期
- Peak of Inflated Expectations:過度期望的峰值期
- Trough of Disillusionment:泡沫化的底谷期
- Slope of Enlightenment:穩步爬升的光明期
- Plateau of Productivity: 實質生產的高源期
-
Gartner® Hype Cycle for Security Operations, 2022 當中有【1/4】是攻擊型產品
※ 越右邊的部分就是市場越被接受,市場承受度越高的類型,應該優先採用的產品。
飛飛: Gartner® 資訊跟統整非常好,建議大家每年都可以看他的統計與歸納的報告。
採用率
- Vulnerability Assessment 50%
- Vulnerability Prioritization Technology 20%-50%
- Breach and Attack Simulation 5%-20%
- PTaaS 5%-20%
- Automated Penetration Testing and Red Teaming Tool 1%~5%
- Exposure Management < 1%
第二個趨勢:主動、廣泛、高頻率
攻擊型服務及產品的演進
已知漏洞 從被動識別到積極管理
- Vulnerability Scanning
- Vaherability Analysis and Notice System
- Vulnerability Assessment
- Vulnerability Prioritization Technology
未知漏洞 Web 服務、產品到目標導向
- Web Penetration Testing
- Network Penetration Testing
- Physical Penetration Testing
- Full-Stack Assessment
- Threat Intelligence Red Team Assessment
- Red Team Assessment
執行頻率 每年定期掃描到持續檢測
- Vulnerability Scanning
- External Attack Surface Management
- PTaaS
- Breach and Attack Simulation
- Security Assessment
- Exposure Management
趨勢三:不只識別弱點,也往防禦及偵測發展
利用 Cyber Defense Matrix 來了解
- 弱點評估
- 模擬入侵攻擊工具
- 外部攻擊表面管理
- 滲透測試
- 紅隊演練的關係
以下的圖有點不確定(QQ)
※ 不一定要買紅隊演練,要看企業自己的資安成熟度。
- 飛飛:資安大會的時候,擺出來的產品,很多時候會利用 Cyber Defense Matrix 來表示自家的產品的防禦能力。
挑戰一:漏洞嚴重程度是很難評估
- 萬物聯網,只要連到網路都有風險
- 物聯網漏洞數據
- 累積到 2025 年會有 750 億個物聯網設備
- 累積到 2023 年有 196,843 個物聯網 CVE 漏洞
- 10.1% 19,974 個 極高風險漏洞
- 18.8% 36,895 個 高風險漏洞
- 13.3% 26,229 個 低風險漏洞
挑戰二:漏洞風險的機率評估難以衡量
大部分做風險評估,其實是不斷去測試各個資產,有沒有機會被攻擊下來,從不斷評估外部資產到內部資產的機率,以及核心系統資產的機率。
但是這些資產機率,並非單純的單點風險,而是其實是一連串資產所造成的。
挑戰三:過度仰賴資安產品
產品一:EASM(External Attack Surface Management)
- 遠端可執行
- 讓企業了解網路是否有組態設定錯誤或已知漏洞
- 只針對網路邊界,網路邊界只是企業資產的一部分
- EASM 可以快速緩解初級的錯誤
- 拿到高分報告不代表完美且安全
產品二:BAS(Breach and Attack Simulation)
- 台灣近兩年很多客戶採用
- 協助企業去評估資安產品(防毒軟體、EDR等)是否有效
- 針對已知漏洞去攻擊
- 工具版的橫向移動與入侵
- 思考點:買一個產品去評估另外一個產品
- 執行的環境高度影響模擬成果
- 無法用於未知漏洞
產品三:PT 滲透測試
- 很吃檢測人員能力
- 勞力活
- 不確定服務廠商的檢測能力
- 品質與費用的權衡
- 如何挑選要執行滲透測試的系統
降低風險
- ESAM 主機跟內網的關係
- BAS 執行的位置跟內網的關係
- PT 標的跟內網的關係
※ 內網很重要
※ 做社交工程沒有人去評估被釣中的人員那些電腦可不可以存取 AD、核心資產 --> 真正的問題
跟內網的關係
- 評估單點可能性,無法把所有的風險都找到
- 無法評估投入的資安設備效應
- 無法評估回應的落實性
紅隊演練
- 本質:技術
- 多元化的演練模式
-
紅隊演練不同階段
- 第一階段:初次進行
- 初步盤點資安體質
- 調整未來資安策略及優先順序
- 第二階段:資安成熟度成長中(需要1~2年)
- 驗證措施有效性
- 訓練藍隊防禦應變
- 嘗試不同攻擊情境
- 第三階段:資安成熟度高,真實攻防演練(合作2次以上)
- 增加資安防禦強度
- 確認日常團隊防禦應變流程及能力
- 更多樣性攻擊情境
紅隊演練不同階段的演練模式
- 第一階段
- 實體位置
- 遠端(辦公室)
- 虛擬位置
- 網際網路 Internet
- 策略
- 無所不用其極 Zero day
- 第三方軟體 Third party Software
- 供應鏈攻擊 Supply Chain Attack
- 執行方式
- 黑箱測試 Black Box
- 目標分類
- 關鍵基礎設施(路由器、Windows AD、ESXi、特權帳號)
- 核心資訊系統(SWIFT、ATM、Portal)
- 特殊權限(root, domain admin)
- 目標項目
- 網站 Web Application
- 桌面應用程式 Desktop Application
- 網段區隔 OA、NOC、OT
- 雲端安全 AWS, Azure
- 執行時間
- 指定時間 10:00-18:00
- 防禦規避
- 防禦機制繞過 WAF、EDR、SOC
- 實體位置
- 第二階段
- 實體位置
- 遠端(辦公室)
- 虛擬位置
- 混合模式 Hybrid
- 策略
- 第三方軟體 第三方軟體 Third party Software
- 社交工程 Landing、Credential
- 供應鏈攻擊 Supply Chain Attack
- 執行方式
- 灰箱測試 Gray Box
- 目標分類
- 關鍵基礎設施(路由器、Windows AD、ESXi、特權帳號)
- 核心資訊系統(SWIFT、ATM、Portal)
- 特殊權限(root, domain admin)
- 機敏資料 演算法、合約 智慧財產、個人資料
- 目標項目
- 網站 Web Application
- 桌面應用程式 Desktop Application
- 資安設備安全 Mail Gateway WAF
- 網段區隔 OA、NOC、OT
- 執行時間
- 不限定時間 7x24
- 防禦規避
- 動態IP Dynamic IP Address
- 流量干擾 Traffic Log
- 日誌干擾 Event Log
- 防禦機制繞過 WAF、EDR、SOC
- 比手速 RASAP
- 實體位置
- 第三階段
- 實體位置
- 遠端(辦公室)
- 現場 On-site
- 虛擬位置
- 混合模式 Hybrid
- 策略
- 無所不用其極 Zero day
- Threat Intelligence Threat Actor、Playbook
- 第三方軟體 第三方軟體 Third party Software
- 社交工程 Landing、Credential
- WiFi Guest、OA
- 供應鏈攻擊 Supply Chain Attack
- 執行方式
- 黑箱測試 Black Box
- 目標分類
- 關鍵基礎設施(路由器、Windows AD、ESXi、特權帳號)
- 核心資訊系統(SWIFT、ATM、Portal)
- 特殊權限(root, domain admin)
- 機敏資料 演算法、合約 智慧財產、個人資料
- loT OT 製造機台、行控系統
- 目標項目
- 網站 Web Application
- 桌面應用程式 Desktop Application
- 資安設備安全 Mail Gateway WAF
- 網段區隔 OA、NOC、OT
- 雲端安全 AWS, Azure
- 執行時間
- 不限定時間 7x24
- 防禦規避
- 動態IP Dynamic IP Address
- 流量干擾 Traffic Log
- 日誌干擾 Event Log
- 防禦機制繞過 WAF、EDR、SOC
- 比手速 RASAP
- 實體位置
一定要做紅隊嗎?
可以根據安全成熟度不同,選擇比較合適的檢測方法,包含真實型、深度或廣度、持續性、時間、成本下去考量:
- 資安事故 Incident: 成本最高,最痛
- 資安標準跟框架
- 弱點掃描
- EASM
- BAS
- 滲透測試
- 紅隊演練
Takeaways
- 善用攻擊型產品跟服務來減少被初始入侵的機率 (Initial Access)
- 防禦策略應該以核心系統為基礎,而非單點式的防護策略
- 資安作為都是用來縮小攻擊表面積,企業必須同時專注於回應事件的韌性