# 醫療數位影像傳輸協定(DICOM,Digital Imaging and Communications in Medicine)滲透測試 [TOC] ## 什麼是 DICOM? DICOM (Digital Imaging and Communications in Medicine) 是醫療領域中用於處理、儲存、列印和傳輸醫學影像(如 X 光、CT、MRI 等)及其相關資訊的國際標準。它定義了檔案格式和網路通訊協定。關鍵組件包括: * 影像擷取設備 (Modalities): 如 CT、MRI 掃描儀。 * 影像儲存與管理系統 (PACS - Picture Archiving and Communication System): 儲存、管理和分發影像的伺服器。 * 影像工作站 (Workstations): 供放射科醫生或其他臨床醫生檢視和分析影像的電腦。 * 印表機 (Printers): 列印醫學影像。 ## 0 前置工作:威脅建模與規範檢討 | 要素 | 說明 | | ------- | ------------------------------------------------------------------------------- | | 法規 & 合約 | 確認 HIPAA、GDPR、ISO 27799、DIN 6868‑159、IEC 80001 等對醫療影像傳輸安全的要求(加密、存取控制、審計)。 | | 組態盤點 | 列出院內/雲端 PACS、工作站、閘道、影像交換平台 (HIE) 與任何對外開放的 104/TCP、11112/TCP、DICOMweb HTTPS 埠。 | | 測試目標 | ① 未授權影像擷取或竄改 ② 影像隱匿通道 (covert channel) ③ 任意程式碼執行 (RCE) ④ 供應鏈漏洞 (Viewer/PACS 軟體) | --- ## 1 偵察與枚舉 1. **fingerprinting** ```bash nmap -p 104,11112 --script dicom-info -sV -Pn <target-subnet> ``` * `dicom-info.nse` 會嘗試 **C‑ECHO**,列出 AETitle、Implementation‑UID 與版本,利於後續 AE Title 偽裝和版本匹配漏洞搜尋。 2. **存取控制確認** * 嘗試從未授權 IP 執行 `echoscu -aec <AE> <host> 104`(DCMTK) → 若成功即表示「IP + AETitle white‑list」缺失。 * 測試 TLS profiles:`echoscu -tls12 -aec <AE> …`,若降級到明文或 SSLv3 即為弱加密流量。 3. **Web 端點** (DICOMweb / FHIR‑DICOM) ```bash ffuf -w wordlist.txt -u https://pacs.example.com/rs/{dir} ``` * 常見未驗證端點:`/studies`, `/series`, `/instances`. 掃描回應中 `0002,0010` Transfer Syntax Tag 確認伺服器支援格式。 --- ## 2 弱點分析 | 漏洞類型 | 實例或參考攻擊手法 | 影響 | | | -------- | --------- | -------- | ---------- | | Improper Authorization / 路徑穿越 | **CVE‑2025‑27721**, INFINITT PACS 允許未驗證讀取系統資訊;**CVE‑2025‑2264**, Sante PACS 路徑穿越可下載任意檔案 | 影像與病歷外洩、攻擊鏈前置 ([CISA][3], [NVD][4]) | | | Heap / Stack Overflow in DICOM Parsing | **CVE‑2024‑22100** (MicroDicom Viewer) – 惡意 DCM 觸發 RCE | 工控工作站淪陷 → 橫移至企業網 ([NVD][5]) | | | Custom URL Handler Injection | **CVE‑2024‑33606** – 自訂 URL Scheme 導致檔案上傳或覆寫 | 竄改診斷影像、隱蔽植入 | | CVE-2019-11687 | 參考demo:https://github.com/d00rt/pedicom DICOM Pixeldata Injection | https://arxiv.org/abs/1901.03597 影片:https://www.youtube.com/watch?v=_mkRAArj-x0 --- - 參考Dr. Eichelberg提出五種滲透模式:http://dx.doi.org/10.15308/Sinteza-2025-23-28 - 攻擊模式1:透過媒體儲存裝置植入惡意程式匯入病人資料 - 攻擊模式2:攻擊者進入院內網路攻擊 - 攻擊模式3:惡意程式植入DICOM影像或報告中 - 攻擊模式4:透過影像處理模式惡意攻擊 - 攻擊模式5:透過內涵惡意腳本之HL7訊息滲透網路 [contributor:CY Lien](https://hackmd.io/@9yZ_2dl6QTSj853knc8fkw), update at 2025.09.10 --- ## 3 利用 (Exploitation) ### 3.1 明文傳輸與 MITM 1. **流量竊聽**:`tcpdump -i eth0 port 104 -w dicom.cap` 2. **影像竄改 PoC** * 取出影像:`tshark -r dicom.cap -Y dicom && editcap -A "frame:X-Y" …` * 使用 `pydicom` 改寫 `PatientName`、`PixelData`。 * 重新封包並透過 `storescu` 發送到目標 PACS: ```bash storescu -aec PACS -aet ATTACKER <host> 104 hacked.dcm ``` ### 3.2 Path Traversal – CVE‑2025‑2264 ```bash curl "http://<pacs>/download?path=../../../../windows/win.ini" ``` * 驗證是否能存取任意系統檔案。成功後可嘗試 `/ProgramData/PACS/config.xml` 以獲取 DB 密碼或 AE 列表。 ### 3.3 惡意 DCM 檔案 (Viewer RCE) ```python from pydicom.dataset import Dataset, FileMetaDataset ds = Dataset(); ds.PatientName = "exploit"; ds.PixelData = b"A"*0x10000 # 溢位 ds.file_meta = FileMetaDataset(); ... ds.save_as("boom.dcm") ``` * 對照 CVE‑2024‑22100,將尺寸欄位設為極大值以觸發 heap overflow。把檔案遞送至影像工作站或放入共用資料夾以社工。 ### 3.4 AE Title Spoofing & 儲存洪水 * 透過變造 AETitle 與 IP,向未做 ACL 的 PACS 發 10 萬筆 **C‑STORE**;測試系統日誌與資源耗盡防護。 ### 3.5 Fuzzing * 使用 **Peach** 或 **Boofuzz** 套件,基於 pydicom 建立 DICOM fuzz harness;針對 **Command Group (0x0000,\*\*\*\*)** 欄位進行長度與型別變異。觀察 PACS 崩潰或高 CPU。 ## 4 後滲透與持續化 | 目標 | 技術 | | ---------- | ------------------------------------------------------------------------------------- | | 影像隱寫 | 將 C2 資料隱藏於 `Overlay Data (60xx,3000)`;由於臨床軟體少用 overlay,可長期潛伏。 | | 影像替換 | 自動重寫病患 CT,插入或刪除病灶 (GAN / adversarial patch),再重上傳 → 臨床決策操控。 | | PACS 橫移 | 多數 PACS 以 MS SQL / Oracle 儲存 metadata。利用洩露的 DB 認證或 Linked‑Server 進行 lateral movement。 | | Ransomware | 加密 DICOM 檔案(副檔名 .dcm.lock)並修改 DICOM header ;影像 viewer 將顯示錯誤,影響診療流程。 | ## 5 緩解與藍隊檢核 1. **端到端加密** * 啟用 DICOM TLS v1.2/1.3 Secure Transport Profile;停用明文 Port 104,改用 2762/TLS 或 11112/TLS。 2. **AE Title + IP Whitelisting** * 在 PACS 與 modality 雙向設 ACL,阻絕 Spoofing。 3. **拆分網段與硬體隔離** * 影像網與一般 IT 網 (EHR/AD) 使用 L3 隔離與防火牆;對外影像交換需走 DMZ。 4. **上傳防毒與格式檢查** * 部署 DICOM 沙盒或 Content‑Disarm‑Reconstruct (CDR) 於 `storescp`/DICOMweb 接點。 5. **持續漏洞管理** * 追蹤**CISA ICS‑MEDICAL ADVISORY**與 NVD;近期需立即評估 CVE‑2025‑27721 (INFINITT) 與 CVE‑2025‑2264 (Sante PACS)。 ([HIPAA Journal][9]) 6. **日誌與威脅偵測** * 收集 C‑STORE/C‑MOVE Audit Messages (IHE‑ATNA);偵測異常 AETitle 或巨量傳輸。 7. **Viewer 軟體白名單** * 僅允許簽章/校驗之 Viewer,並施行「檢視器‑沙箱」;禁止自動開啟外部 URL scheme。 ## 6 工具與資源速查 | 分類 | 工具 / 連結 | 用途 | | ---- | -------------------------------------------------------------------------------------------- | ------------------------- | | 協定套件 | **DCMTK**, **pynetdicom**, **pydicom** | C‑ECHO / C‑STORE / 客製 DCM | | 掃描腳本 | `nmap dicom-info.nse`, `dicom-ping.py` | 版本與 ACL 枚舉 | | 模糊測試 | **[Boofuzz](https://github.com/jtpereyda/boofuzz)** + pydicom 高速 Fuzzer | 崩潰點尋找 | | 攻擊模組 | Metasploit `auxiliary/scanner/dicom/dicom_dump`, `exploit/windows/fileformat/microdicom_bof` | PoC 利用 | | 防禦 | **Orthanc** + TLS Proxy, **dicom‑sanitize**, **Grafana Loki** for ATNA | 藍隊部署 | ## Ref [1]: https://ioactive.com/penetration-testing-of-the-dicom-protocol-real-world-attacks/ "Penetration Testing of the DICOM Protocol: Real-World Attacks [2]: https://www.iosentrix.com/blog/dicom-protection-from-cyber-attacks "How To Secure Your DICOM System From Cyber Attacks? [3]: https://www.cisa.gov/news-events/ics-medical-advisories/icsma-25-100-01 "INFINITT Healthcare INFINITT PACS - CISA [4]: https://nvd.nist.gov/vuln/detail/CVE-2025-2264"CVE-2025-2264 Detail - NVD" [5]: https://nvd.nist.gov/vuln/detail/cve-2024-22100 "CVE-2024-22100 Detail - NVD" [6]: https://nvd.nist.gov/vuln/detail/CVE-2024-33606 "CVE-2024-33606 Detail - NVD" [7]: https://www.cisa.gov/news-events/ics-medical-advisories/icsma-24-163-01 "MicroDicom DICOM Viewer - CISA" [8]: https://claroty.com/team82/research/dicom-demystified-exploring-the-underbelly-of-medical-imaging "DICOM Demystified: Exploring the Underbelly of Medical Imaging" [9]: https://www.hipaajournal.com/infinitt-pacs-vulnerabilities-2025/ "Immediate Patching Required to Address High Severity INFINITT ..."