はじめに
新製品の開発ライフサイクルにおいては、既存のコンポーネントの上にやみくもに保護プリミティブを適用することで、セキュリティ要件を迅速に満たしたくなる。しかし、基本的な文脈と効果的な脅威モデルを適切に理解することなくセキュリティ対策を実装することは、製品の全体的なセキュリティ体制を低下させる結果になりかねません。
最近、シーメンス社のPXC4.E16のセキュリティ解析を行う機会がありました。PXC4.E16は、HVACおよびビルサービスプラント向けのDesigo/APOGEEファミリーのビルディングオートメーションシステム(BAS)です。このブログでは、ユーザーアカウントのパスワードベースの鍵導出メカニズムの不適切な実装に起因する脆弱性(Siemens SSA-626968およびCVE-2022-24040で追跡)の詳細を公開します。また、この脆弱性が悪用され、コントローラに対してサービス運用妨害(DoS)攻撃が行われる可能性がありました。
安全なパスワード保管
クレデンシャルを平文でメモリデバイス(永続的なストレージであれ、長期間であればデバイスの RAM であれ)に格納することは、システム全体のセキュリティに対するリスクを構成する。クリアテキストパスワードが侵害される可能性のある方法は、物理メモリから直接その値をダンプする、論理的に読 み取ることを可能にするプリミティブにアクセスする、デバイスのエクスポートされたバックアップを間接的に分析する、など複数あ るかもしれない。
この問題を避けるため、パスワードはまず暗号ハッシュ関数で生成されたダイジェストで代用された。例えば、一定サイズの出力を無限の入力に対して高速に生成する一方向性関数は、同時に(ある出力が与えられた場合)生成された入力を復元することが数学的に困難になる。
多くのセキュリティ関連のユースケースには完全に適しているが、パスワード保存の目的で暗号ハッシュ関数を直接使用することは、正しい解決策ではないことが証明された。パスワード値のみから生成されるダイジェストの場合、事前に計算されたハッシュのテーブル(いわゆる「レインボーテーブル」)により、生成されたダイジェスト値が与えられたパスワードの検索時間を大幅に短縮することができました。さらに、入力からダイジェストを生成する暗号ハッシュ関数の高速な性質により、生成されたダイジェストは、特にGPUのような高度に並列化可能なコンピューティングデバイスで実行された場合、クラッキング攻撃の危険性が非常に高くなりました。
これらの問題や他の問題を解決するために、パスワードハッシュ関数は、時とともに パスワードベースの鍵導出関数に置き換えられてきた。これらの関数は、入力されたパスワード値からダイジェストを生成するために、かなりの回数(通常は数千回)の暗号ハッシュ関数の逐次反復を実行するアルゴリズムであり、平均的なブルートフォース攻撃を計算不可能にすることを最終目的としている。これらの関数の注目すべき例としては、Password-Based Key Derivation Function 2 (PBKDF2)、scrypt、Argon2などがある。
PBKDF2の紹介
PBKDF2は、米国国立標準技術研究所(NIST)が推奨し、連邦情報処理標準規格(FIPS)-140で検証された実装を持つ、数少ない鍵導出関数の1つである。
RFC2898によると、PBKDF2はパスワード以外に以下の入力を必要とする:
- 擬似ランダム関数(PRF)、
- 紐のような塩、
- 反復回数を正の整数で表す、
- 派生キーの長さ。
PRF、反復回数、派生鍵の意図する長さを手動で選択し、各パスワードに対して一意で、予測不可能なソルトをプログラムで生成することは、開発者の義務である。これらの値が与えられると、PBKDF2は、ユーザーによって挿入されたパスワードから、希望する長さの出力鍵を生成する。
すべての引数の中で、PRFと反復回数は設定すべき重要な値である。複雑な関数や高い反復カウント値は、攻撃者がブルートフォース攻撃を実行するのに必要な労力を増大させ、その結果、得られるダイジェストのセキュリティを低下させる。また、認証プロセス中の正規デバイスの計算も遅くなります。逆に、単純な関数と低い反復カウント値は、正規デバイスにとってログインを容易にしますが、生成されたダイジェストの安全性を損なう可能性があります。したがって、セキュリティと性能の適切なバランスを見つけることが重要であり、堅牢であると同時にシステムの十分な応答性を保証するダイジェストを作成する必要があります。
最後に、前述のすべての引数(PRF、ソルト、反復回数、出力長)は、認証プロセスを正しく機能させるために、派生鍵とともにストレージデバイスに保存する必要がある。入力パスワードと保存されたダイジェストとの適切な比較を実行するために、PBKDF2は、ダイジェストが最初に生成された時点とまったく同じ引数で設定されていなければならない。
シーメンス脆弱性の詳細
ユーザー・プロファイル設定では、シーメンスABTサイト・ソフトウェア(デバイスのリファレンス・エンジニアリングおよびコミッショニング・ツール)により、ユーザーが「ユーザー・プロファイル・アクセス」権限をロールに設定することができ、これによりユーザーの作成、更新、削除などのユーザー管理機能が追加されます。
私たちの分析(図1)では、"基本操作 "権限を持つロールに "ユーザープロファイルへのアクセス "権限を追加することができた。
前述のロールを持つユーザーを作成し、ログインした後、ユーザー作成プロセスを完了し、以下のようなインタラクションを観察した(図2)。
図 2 では、アプリケーションはウェブ・インターフェースを通して、新しいユーザのために通常のプレーンテキストのパスワー ドを入力することができることに注目してください。しかし、バックグラウンドで、新しく定義されたユーザーを実際に作成するための HTTP リクエストが、以下のフォーマットでパスワードの PBKDF2 文字列を運んでいることに驚きました:
Prf ID $ イテレーション回数 $ ソルト $ ダイジェスト
私たちの仮説は、バックエンドのコードに適切な綿密な変更を加えることなく、平文のパスワードか、せいぜい塩漬けされていないハッシュを保存していた既存のシステムの上に、安全なパスワード保存メカニズムを素早く実装しようとした、というものだ。
ウェブ・サービス通信を処理するサーバー・バイナリで簡単なリバース・エンジニアリングを行った結果(図3)、反復回数の値について、解析可能な符号なし整数であることを確認する以外に、特別なバリデーション・チェックが行われていないことがわかった。
これは、ユーザープロファイルのアクセス権限を持つ悪意のある内部関係 者(または、セッションクッキーの「secure」属性の欠如を悪用するなどして、そのよ うな権限を持つアカウントを乗っ取ることに成功した攻撃者)が、PRFが遅く、反復回数が極端に多い PBKDF2文字列を持つユーザーを作成できることを意味する。そして、前述のユーザーでログインを試みるだけで、コントローラに対して、CPUの消耗によるサービス拒否(DoS)攻撃を実行できる。実際、デバイス上でログインを実行するだけで、このように設定されたPBKDF2アルゴ リズムが長時間実行され、パスワードの比較が実行されるため、デバイス上でそれ以上 の操作ができなくなる。
テストでは、PRFをHMAC-SHA256、反復回数を1,000,000に設定するだけで、デバイスを約98秒間完全に使用不能にすることができました(図4)。デバイスがさらに複雑なPRF(HMAC-SHA512など)と最大反復カウント4,294,967,295をサポートしていることを考慮すると、最悪のシナリオでは、ログインを試みるだけでデバイスを数日間使用できなくすることが可能である。最も懸念されるのは、攻撃者が別の機会にログインを再試行し、コントローラのダウンタイムをさらに延長することを妨げるものが何もないことである。
概要
ビルディングオートメーションコントローラは、HVAC、火災制御システム、安全アラーム、セキュリティカメラ、および施設の機能に必要なその他のシステムを制御するために使用されるため、多面的です。私たちの研究では、脅威行為者がコントローラにアクセスするだけでなく、サービス拒否を開始し、デバイスを最大数日間操作不能にすることができることを示しました。また、脅威行為者がBASを攻撃すると同時に、施設内の他の産業用制御システム(ICS)に対して壊滅的な攻撃を仕掛けることも可能です。火災報知器システムや他のシステムがDDoS攻撃を受けた場合、サイバーフィジカル攻撃が激化する可能性がある。過去には、脅威行為者は多層攻撃を仕掛けながら、無停電電源装置(UPS)のようなBASをターゲットにしてきました。脅威者はBASを魅力的なターゲットとして評価しているようだ。
Nozomi Networks Labs からの通知により、ベンダーはこの脆弱性に対応するパッチをリリースしました。影響を受けるデバイスを最新のファームウェアバージョンにアップデートすることを推奨します。Desigo DXR2およびPXC3は、V01.21.142.5-22またはそれ以降のバージョンにアップデートする必要があります。Desigo PXC4およびPXC5は、V02.20.142.10-10884にアップデートする必要があります。