DICOMの謎を解く: 医療画像の裏側を探る
2024年1月23日
エグゼクティブサマリー
- 医療におけるデジタル画像および通信規格であるDICOM(Digital Imaging and Communications in Medicine)規格は、医師と医療提供組織(HDO)間で医療画像および患者データを転送する方法を管理します。
- Team82は、この重要な医療通信プロトコルの攻撃対象領域を調査し、主要な医療機器メーカーの様々なDICOM実装における脆弱性を発見しました。これらの脆弱性には、CVE-2022-2120(CVSS 7.5)、CVE-2022-2119(CVSS 7.5)などが含まれます。
- この脆弱性により、DICOM サーバ(主に画像アーカイブ通信システムであるPACS マシン)に対する攻撃が可能となり、 PACS サーバーが追加のサービスを公開する必要がなく、DICOM サービスまたはWeb管理をインターネットに提供可能です。
- これらのセキュリティ欠陥の悪用が成功すると、画像機器に対してサービス拒否攻撃やリモートコード実行攻撃が行われる可能性があります。影響を受けた画像処理デバイスが乗っ取られると、重要なサービスの機密性、完全性、可用性が損なわれ、患者の治療に影響を与える可能性があります。
医療におけるDICOMとは?
CTスキャンを受けたことがありますか?MRIや超音波検査はどうでしょうか?ご存じないかもしれませんが、これらのスキャンには臓器や骨の詳細な画像を提供する重要な診断ツールであることに加えて、もう1つ共通点があります。それは、DICOMプロトコル標準を使用して通信しているということです。
DICOMは、Digital Imaging and Communications in Medicineの略で、医療画像と患者データの保存および転送のための標準ネットワークプロトコルとデータ形式です。 DICOM標準は、世界中の病院、診療所、放射線センターで使用されており、製造元や関連する独自技術に関係なく、医療用画像デバイスが医療モダリティ画像を適切に共有、保存、送信、処理、表示することを保証します。
サイバーセキュリティの観点から、DICOMはデータがデジタルチャネルを通過する際、どのように管理されるべきかを規定し、デジタル領域における医療情報の保護を保証します。このブログでは、DICOMのデータ交換メカニズムの技術的複雑さを掘り下げ、サイバーセキュリティにおける重要な役割に焦点を当てます。
DICOM対応機器
モダリティマシン
CTスキャナー、MRI、超音波検査、PET装置などのモダリティデバイスに至るまで、さまざまな種類の医療デバイスがDICOM標準を介して通信を行います。これらの種類のモダリティデバイスは、新しいDICOM検査において、機械によって撮影された医療用画像や、患者に関する情報、患者に対して行われた検査(腹部スキャンなど)、および検査に関するメタデータ(処置の日付)などを作成します。
DICOMビューア
DICOMビューアは、医療専門家が検査結果を分析および検査するために使用するものです。 DICOMビューアは通常、DICOMサンプルを受信または取得し、保存されている画像とメタデータを表示します。 これは、DICOMプロセスの主なビジネスロジック*1と要件であり、ここで患者の画像は調べられ、検査され、医学的診断をされるからです。
PACS
かつてDICOMビューアはデスクトップアプリケーションであり、焼かれたディスクでDICOM検査を受信していましたが、今日のハイパーコネクティビティの時代においてはこのユースケースは有効ではありません。現代の病院では、画像保存通信システム(PACS)マシンとして知られるネットワークベースソリューションが活用されています。PACSはDICOM検査のデータベースとして機能し、医療従事者はビューワーを使ってPACSに接続し、選択したい検査の抽出が可能です。つまり、PACSサーバーは検査を実施するモダリティマシンをDICOMビューアに接続し、後の使用のために検査をアーカイブすることです。
DICOMネットワークエンティティ*2
プロトコルのデータ交換ニーズを満たすために、DICOMサーバー(SCPサービスクラスプロバイダーとも呼ばれる)は、さまざまな機能性やインターフェースを実装し公開します。
例えば、検査を保存するために、DICOMクライアント(SCUサービスクラスユーザーとも呼ばれる)はC-STORE関数を呼び出し、保存する検査をサーバーに提供する。ユーザが異なる検査についてサーバに問い合わせたい場合(例えば、特定の患者の検査を取得する)、SCUは代わりにC-FIND関数を呼び出し、特定のフィルタで検査を検索します。
DICOMセッション(Association)
DICOM接続を開始するために、SCUとSCPは最初に A-ASSOCIATE 機能を使用してハンドシェイクを実行します。そこで、双方がサポートする機能の種類を通知します。 このハンドシェイク中に、SCUとSCPは、DICOMハンドシェイクに不可欠な共通のプレゼンテーションコンテキストを決定します。
プレゼンテーションコンテキストは、どのような種類のデータが交換され、さらにどのように交換されるのかという2つの重要な質問に答え、下記の2種類により構成されます。
- 抽象構文:CT スキャンに関連するデータなど、交換したいデータの種類を関係者に伝える。
- プレゼンテーション コンテキスト:データがネットワーク上でどのように送信されるかを双方に伝える転送構文です。 具体的には、JPEGやJPEG2000の画像に圧縮アルゴリズムが使用されている場合、双方が認識し、データ交換を行うためにこの圧縮アルゴリズムのサポートを確認する必要があります。また、 双方がネットワーク通信において明示的構文を使用するか暗黙的構文を使用するかということです。これについては以下で説明します。
DICOMにおける要素表現
最後に、DICOMアプリケーションとデバイスの攻撃対象領域とリスクを理解する前に、DICOMのデータ要素がどのように構造化され、解釈されるかを理解する必要があります。 DICOMスタディの各要素は、タグ、価値表現 (VR)、およびデータ要素自体で構成されます。
最初にタグが来ます。このタグの主な目的は、渡される情報 (たとえば、患者の名前) を指定することです。 DICOMタグは4バイト長で、グループ番号 (GGGG) と要素番号 (EEEE) の2つのセクションで構成され、それぞれ2バイト (4つの16進文字) で表されます。 2つの部分を合わせて渡される要素を識別し、記述します。 例えば、患者の名札を見てみましょう。
タグの後には、要素のVR が続きます。 DICOM VRは、要素のデータ型と形式を定義し、どのような情報が保存されているか、およびどのように表現・解析されるべきかを理解するために使用されます。 VRは2バイトの長さで、2つのASCII文字で構成されます。 さまざまな種類のVRが存在します。 例えば、PNのVRは人の名前を表し、文字列として読み取る必要があり、DAは日付を表します。
VRはDICOM要素の不可欠な部分ですが、常に明確に表示されるわけではありません。 暗黙的な転送構文が決定された場合、VRはデータ要素内で送信されず、DICOMアプリケーションは代わりにデフォルトを使用する必要があります。 例えば、タグが人名 (0010,0010) の場合、アプリケーションはVRをPNに設定する必要があり、 明示的転送構文を使用する場合はVR 値を要素の一部として送信する必要があります。
最後に、VR の後に実際のデータ要素が来ますが、これは使用されるVRに従って送信されます。
DICOM規格のセキュリティー
DICOMプロトコルとその標準は正確であり、アプリケーションがDICOM検査を送信および解析する方法を詳しく説明していますが、セキュリティーメカニズムは明確に定義されておらず曖昧であり、この定義はベンダーとユーザーに委ねられています。
暗号化に関しては、TLS接続上でのDICOM使用は可能ですが、明確なプロトコル要件またはその一部ではないため、DICOMでのTLS使用は開発者と実装者に任されています。 実際には、DICOMサーバーはトラフィックに暗号化プロトコルを使用することはほとんどなく、代わりに機密情報をネットワーク上でプレーン テキストで送信します。 このため、DICOMトラフィックは攻撃者にとって簡単な標的となり中間者攻撃トラフィックおよび変更する能力とともに、個人の特定可能な機密情報を漏洩し、取得することが可能になります。
DICOMは、ユーザー名およびパスワードベースの認証が弱く、多要素認証や強力なアクセス制御リスト (ACL) などの機能欠陥も強く批判されています。 DICOMの適切な認証を行うことは可能ですが、大部分のDICOMサーバーはこれらの機能を使用せず、代わりに機密情報が未認証または無許可の攻撃者に晒されたままになります。
PACSへの攻撃
近年、DICOM検査を保存するサーバーをターゲットとした攻撃が急増しています。 現在、DICOMサーバーは、組織が漏洩を望まない機密の個人識別情報 (PII) を保持しているため、不正ハッカー、ハクティビスト、ランサムウェアギャングの主な標的となっています。
攻撃者は、DICOMベースのPACSマシンをターゲットにして悪用し、患者の機密情報漏洩を脅かして医療組織を混乱させる可能性があります。 医療提供組織 (HDO) に対する恐喝攻撃が横行しており、攻撃者は支払いを要求したり、患者情報やビジネス情報を漏洩すると脅迫し、場合によっては暗号化するランサムウェア攻撃と組み合わせます。
6月の事件では、ハッキンググループが人気の放射線センターのDICOM研究にアクセスし、医療記録、個人情報、診断などを含む数千人の患者情報が漏洩し、ハッキンググループはその後、攻撃したデータベース全体をTelegramチャンネルとウェブサイトに公開しました。
接続されたDICOMデバイスのセキュリティー現状
クラウドストレージ
非公開のDICOM研究の暴露をより深く理解するべく、クラロティは利用可能なツールと情報により、機密で暗号化されていないDICOMファイルを含む公的にアクセス可能なAWSおよびAzureクラウドストレージバケットを検索しました。 さらに、攻撃者の手の届く範囲にある何百万もの公開されたDICOMファイルを含み、誰もがアクセス可能なストレージバケットが何千も存在することを知りました。 具体的には、GrayhatWarfare のツールを使用してDICOMのサフィックス (.dcm) で終わるファイルのバケットを検索したところ、公開バケットに保存されている数百万のDICOMファイルが見つかりました。
多くの組織はすべてのサンプルをクラウドに自動的にアップロードしますが、構成ミスによってバケットがプライベートではなくパブリックアクセスに設定されているため、これはセキュリティーとプライバシーに関する重大な懸念事項です。 多くの組織はこれらのバケットの状態や構成さえ認識していません。
インターネットに公開されたPACS サーバー
オープンバケットに加えて、主に構成ミスが原因であるインターネット接続されたPACS サーバーを検索したいと考えました。PACS サーバーにはDICOMサンプルが保持されており、外部アクターに公開される可能性があります。 インターネットに公開されたPACSサーバーを探すために、Shodan.io などのインターネットスキャンサービスを使用しました。 IP範囲全体を常にスキャンするShodanを活用することで、そのデータセットをクエリし、DICOMサービスを公開しているサーバー検索が可能になりました。クラロティはDICOMサービスをインターネットに公開している世界中の約4,150ものPACSサーバーの発見に驚きました。
取得されたデータの結果を確認したところ、サーバーの大部分が米国 、インド 、およびドイツに配置されていることがわかりました。 これらのオープンDICOM サーバーでは、著名な大学、放射線センター、診療所、さらにはいくつかの病院が公開されていることに気付きました。
PACSサーバーをインターネットに公開するだけでは、攻撃者がPACSマシンに保存されている機密情報にアクセス可能ではありませんが、主に強力な認証/ACL により、攻撃対象領域が大幅に増加します。
DICOM 脆弱性調査
この時点でクラロティは脆弱性調査を開始し、単一のSDK脆弱性が数千の製品に実装される可能性があるため、DICOMソフトウェア開発キット (SDK) に焦点を当てることにしました。
DCMTKの脆弱性
クラロティは、何千もの医療機器メーカーや開発者が使用しているDICOMツールキット (DCMTK) と呼ばれるDICOMライブラリおよびアプリケーションのコレクションに注目し、調査を開始しました。
DCMTKに実装されている2つの主な機能、DICOMファイル解析と、C-STOREやC-GETなどのDICOM関数の処理を調査しました。 DCMTK調査の最後に、3つの異なる脆弱性の特定が可能となりました。
- CVE-2022-2121: STDINからファイルを読み取る際のDICOM解析ルーチン内にメモリ破損を引き起こすヌル ポインタ逆参照の脆弱性。
- CVE-2022-2119: C-STOREルーチン内のDCMTK SCPアプリケーションにパス トラバーサルの脆弱性があります。 DICOM SCPサーバーへの接続中、C-STORE関数を呼び出し、悪意のあるDICOM研究を提供することにより、サーバー上の任意の場所にファイルを書き込むことが可能となります。場合によってはサービス妨害攻撃の発生可能性があり、 このライブラリを使用する高レベルのアプリケーションによってはリモートコード実行も可能です。
- CVE-2022-2120: C-GETルーチン内のDCMTK SCUにパス トラバーサルの脆弱性があります。 SCUが悪意のあるDICOM SCPに接続できるようにすると、悪意のあるサーバーが接続しているクライアント上で書き込みプリミティブを実行できるようになり、DOS 攻撃につながる可能性があり、場合によっては高レベルの機能によってはリモート コード実行さえも発生する可能性があります。 このライブラリを使用したアプリケーション。
DICOMプロトコル実装の脆弱性を特定することで、PACS サーバーが追加のサービスを公開する必要がなく、DICOM サービスをインターネットに公開する DICOM サーバー (主に PACS マシン) を攻撃することが可能になります。
PACSの脆弱性: Softneta MedDream の例 (CVE-2023-40150)
最も著名なDICOMライブラリの1 つにおける脆弱性発見の後、私たちは評判の良いPACS実装されたSoftneta MedDreamに焦点を当て始めました。 MedDreamは、多くのDICOMおよびWeb管理機能を備えた、最も人気のあるビューアおよび PACSアプリケーションの1つです。
今回の目標は、必ずしもDICOM解析プリミティブの脆弱性を見つけることではなく、インターネット接続されたインストールで公開の可能性がある、プラットフォームの脆弱性発見を目的としていました。 MedDreamは、主にWebベースのDICOMビューアとPACS管理プラットフォームなど、複数のWebベースのエンドポイントを公開しているため、そこから調査を開始しました。
Softneta Meddream PACSインストールにおける未認証のリモートコード実行の脆弱性をCVE-2023-40150 として追跡し特定することができました。 この脆弱性は、認証を必要とせず、ユーザーが任意のコード実行可能なルートに起因しているため、攻撃者に悪用され、PACSマシンやDICOMネットワークを乗っ取られる可能性があります。
この脆弱性が悪用された主な問題は、ユーザーがサーバーのファイルシステム内でファイル移動できるようにする、未認証のAPIルート/Pacs/originalImage.php です。 このAPIルートではユーザーが任意のファイルを移動することはできませんが、特定の一連の操作を実行することでこのプリミティブを実現できます。
通常の使用法では、このAPIルートは1つのパラメーター (パス パラメーター) のみを受け取り、ファイル名の最初の6文字を削除してファイル名の変更を試みます。 このAPIルートの実際の使用法は、ファイル名からバックアッププレフィックスを削除して、バックアップ ファイルの名前を正しい名前に変更することです。
これではファイルシステム内の任意のファイルを移動することはできませんが、主にファイルを他のディレクトリに移動する機能の獲得や、ファイルのサフィックス変更、および複数技術の組み合わせにより、基本的機能完備を達成をすることができました。 これにより、システム上の任意のファイルを任意の場所に移動し、また、その名前を変更できるようになりました。
まず、サーバーがスラッシュ (/) を検索することによってのみファイル名とディレクトリを分割しようとするというバグを悪用して、ファイルシステムツリー内の前のディレクトリへのファイル移動を開始します。 ただし、Windowsマシンでは、バックスラッシュ (\) は同じ目的を果たし、パスにおける2つの異なる部分を区切ります。 スラッシュ (/) の代わりにバックスラッシュ (\) を使用することで、ファイルを一度に1ディレクトリずつ移動することが可能になりました。例えば、FILENAMEという名前のファイルをDIR_A/DIR_Bから DIR_Aに移動するには、次のペイロードを指定できます。
c:/DIR_A/DIR_B/..\\\\FILENAME
これにより、ファイルはDIR_A/DIR_B/FILENAMEではなくDIR_A/FILENAMEに保存され、ファイルシステム内の場所が変更されます。 同様に、ファイル ディレクトリ内でファイルを下位に移動することができ、SYSTEM として希望する場所に完全に任意にファイルを移動できるようになりました。
システムのファイルに、悪意のあるPHPペイロードを書くために、クラロティはサーバーがセッションを開始し、セッション($path変数)でコントロールするパラメータを保存するという事実を誤用しました。
PHPでは、セッションはファイルで節約され、単にPHPセッションファイルをウェブルートディレクトリの方へ移動可能であることを意味します。そして、我々はサーバーがそれを実行する原因になるのを許可します。
これにより任意のPHPコードを実行する機能が与えられ、さらに弱いPACSサーバーで先に認証された遠隔コードを実行しました。
脆弱性の深刻度により、攻撃者がPACSマシン上で遠隔から任意コードを実行できること、また、認証や知識が必要ないことにより、この脆弱性のCVSSスコアは9.8でした。
DICOMにおける攻撃デモ
DICOM PACSマシンへの攻撃の深刻度を示すために、攻撃シナリオを紹介するデモを作成しました。
このデモでは、妊婦が超音波検査を受けており、医師が胎児の健康状態を観察して検査できる設定です。
まず、超音波検査技師が医師による診察のために画像を撮影します。 舞台裏ではDICOM検査が作成され、技術者が撮影した画像や患者情報、一般的なメタデータなど、検査中のテスト全体が整理されます。 この研究結果はPACSマシンに保存され、医師がビューアーに接続することで検査を実行できるようになります。
ここから攻撃が始まり、攻撃者は物理的な損傷や混乱を引き起こそうとします。 PACSマシンを攻撃することにより攻撃者は個人の医療情報や画像などを含む患者データベース全体を漏洩します。さらに悪いことに、攻撃者は単に情報を漏洩するのではなく、そのデータの一部を改ざんすることもします。
攻撃者はPACSマシンを完全に制御することにより、DICOM検査の一部、特に妊婦の超音波検査を改ざんします。 攻撃者らは超音波検査技師が撮影した画像を改変し、女性の検査に別の胎児を追加しました。 DICOM検査を改ざんすることで、攻撃者は医師を混乱させ、妊娠している人には双子がいると思わせることに成功し、壊滅的な結果を引き起こす可能性があります。
重要なポイント
DICOMが医療画像通信プロトコルとしての標準地位を確立することにより、より多くのHDOが診断、治療、診察をデジタル化するようになり、DICOMの適切な保護が必要となります。
Team82*5は、数十の医療機器メーカー製品に影響を与え、数千人の患者個人の安全に影響を与える可能性がある重要なDICOMソフトウェア ライブラリの脆弱性と危険な実装について実証しました。
このレポートでは、重要な画像処理装置の動作妨害の可能性がある、DCMTK、DICOM、 SDKツールキットの3つの脆弱性の詳細を説明しました。 さらに、これらの課題の一部が遠隔によるコード実行に悪用される可能性もあります。 一例では、攻撃者が DICOM 画像を改ざんし、診断や治療に影響を及ぼす可能性のあるコードを遠隔から挿入する方法を示しました。
医療機器をインターネットに接続するHDOが増える中、これらの脆弱性を認識することは患者の長期的な安全とプライバシー保護のために非常に重要です。
*1:ビジネスロジック:業務システムのデータベース上において処理手順をコードで表現したもの。
*2:ネットワークエンティティ:ネットワーク内で様々な役割を担うコンポーネントやシステムのこと。
*3:ハンドシェイク:2つのサーバーを認証し、暗号コードの設定によりセッションキーに合意するためにメッセージを交換し情報転送を行うこと。
*4:パス トラバーサル:OS(ソフトウェア)の「パス(path)」の脆弱性を悪用したサイバー攻撃のこと。ディレクトリ・トラバーサルともいう。
*5:Team82:『8200部隊』出身の最優秀人材で構成されるクラロティの専門分析チーム。現時点で400以上のプロトコルを独自に解析し、ICS 脆弱性の発見、実現性の高いセキュリティ対策を提案しています。
◾️クラロティ公式製品ページ◾️