更新
11 月 2 日:BadCandy インプラントの 第 3 のバージョンを特定。感染デバイスの確認に使用される HTTP リクエストの 1 つに対して、新バージョンのインプラントで予期されるレスポンスを追加。
11 月 1 日:関連するエクスプロイトの POC(Proof of Concept、有効性の確認テスト)を公開して以降、エクスプロイト攻撃の増加を確認。Lua ベースの Web シェルを「BadCandy」と命名。
10 月 23 日:インプラントの更新バージョンを特定。新たな curl コマンドを提供して感染デバイスを確認。CVE-2023-20198 と CVE-2023-20273 の修正プログラムは、10 月 22 日に配布開始。
10 月 20 日:インプラントの展開のためにエクスプロイトされた追加の脆弱性(CVE-2023-20273)を特定。CVE-2023-20198 と CVE-2023-20273 の修正プログラムは、10 月 22 日に公開予定。これまで関連性を指摘されていた CVE-2021-1435 は、本アクティビティに関連していないと評価。
10 月 19 日:さらなる攻撃者の IP とユーザー名、防御回避の見解、新たな Snort ルールを追加。同一の攻撃者によってアクティビティが実行されているという Talos のアセスメントに関する新たな情報も追加。
概要
- シスコは、Cisco IOS XE ソフトウェアの Web ユーザーインターフェイス(Web UI)機能の脆弱性(CVE-2023-20198)が実際に悪用されている事例を確認しました。これまで知られていなかった脆弱性であり、Cisco IOS XE ソフトウェアを搭載したデバイスがインターネットや信頼できないネットワークに公開されている場合にエクスプロイトが可能になります。この脆弱性は、HTTP サーバーまたは HTTPS サーバーの機能が有効になっている Cisco IOS XE ソフトウェアを実行中の物理デバイスと仮想デバイスの両方に影響します。
- CVE-2023-20198 のエクスプロイトに成功した攻撃者は、デバイスへの権限レベル 15 のアクセスを取得できます。この権限を悪用して、ローカルユーザーを作成し通常のユーザーアクセス権でログインします。
- 次に、攻撃者は未承認の新たなローカルユーザー アカウントを使用して、WebUI 機能の別のコンポーネントで第 2 の未知の脆弱性(CVE-2023-20273)をエクスプロイトします。これにより、昇格された(ルート)権限を利用してコマンドを挿入し、デバイス上で任意のコマンドを実行できるようになります。
- シスコは、インターネットに接続されているシステムの HTTP サーバー機能を無効にするよう、セキュリティアドバイザリで勧告を提示しました。これはベストプラクティスであり、米国政府が過去に提示したガイダンス(インターネットに公開された管理インターフェイスに起因するリスクの軽減に関するガイダンス)とも一致しています。
- シスコのサポートセンターがセキュリティチームの調査に協力しました。シスコでは通常、1 日あたり相当な件数のケースを処理しますが、そのうちごく少数のケースにおける類似の痕跡を関連付けるという方法と手順がとられました。
- それぞれが「緊急」または「高シビラティ(重大度)」の脆弱性であり、影響を受ける場合はシスコの PSIRT のアドバイザリで概説している手順を直ちに実施することを強く推奨します。
シスコが不審な活動を特定
2023 年 9 月 28 日、悪意のある活動の疑いがある初期の証拠が発見されました。この日、シスコのテクニカル アシスタンス センター(TAC)でケースが作成され、お客様のデバイス上で異常な動作が見つかっています。さらに調査を進めたところ、これに関連すると判断される活動が 9 月 18 日の時点で発生していたことが確認されました。このときは、権限を持つユーザーが、不審な IP アドレス(5.149.249[.]74)からユーザー名「cisco_tac_admin」でローカルユーザーアカウントを作成していました。このときの活動は 10 月 1 日には終了しており、その時点では不審なアカウントの作成を除けば関連する行為は確認されていませんでした。
10 月 12 日、Talos インシデント対応チーム(Talos IR)と TAC は、後に「同じ日に始まった関連する活動の追加事例」と判断した活動を検出しました。この事例では、権限のないユーザーが別の不審な IP アドレス(154.53.56[.]231)から「cisco_support」という名前でローカルユーザーアカウントを作成したことが確認されました。9 月の事例とは異なり、10 月に確認された活動の事例では、後続のいくつかの操作が実行されていました。その中には、構成ファイル(「cisco_service.conf」)で構成され、Talos が「BadCandy」と呼んでいるインプラントの展開もありました。この構成ファイルには、インプラントとのやりとりに使用される新しい Web サーバーのエンドポイント(URI パス)が定義されています。このエンドポイントは以下に詳述する特定のパラメータを受け取り、その設定により攻撃者がシステムレベルまたは IOS レベルで任意のコマンドを実行できるようになります。インプラントを有効にするには Web サーバーを再起動する必要があります。サーバーを再起動しなかったために、インストールしたにもかかわらずインプラントが有効にならなかった事例が、少なくとも 1 件確認されています。
BadCandy インプラントが保存されるファイルパスは「/usr/binos/conf/nginx-conf/cisco_service.conf」で、16 進数文字で構成される 2 つの変数文字列が含まれています。このインプラントは永続的なものではなく、デバイスを再起動すると削除されます。ただし新しく作成されたローカルユーザーアカウントは、システムを再起動してもアクティブなままです。新しいユーザーアカウントはレベル 15 の特権、つまりデバイスに対する完全な管理者アクセス権を持っています。デバイスへのこの特権的なアクセスと、それに続く新しいユーザーの作成は、CVE-2023-20198 の脆弱性として追跡されています。
CVE-2023-20198 のエクスプロイトに成功した攻撃者は、WebUI 機能の別のコンポーネントをエクスプロイトし、昇格された(ルートなど)権限でコマンド挿入を実行して、ファイルシステムにインプラントを書き込みます(これは CVE-2023-20273 のことであり、詳細は後述のとおり)。
Talos は、攻撃者が付録に掲載したコマンドを使ってデバイスに関する情報を収集し、事前調査を行なっていることを確認しました。おそらくアクティビティの証拠を隠すために、以下のコマンドを使用してログをクリアし、ユーザーを削除しているのも確認しました。
clear logging no username cisco_support no username cisco_tac_admin no username cisco_sys_manager
Talos は、これら一連のアクティビティが同一の攻撃者によって行われた可能性が高いと考えています。10 月、攻撃者は証拠隠滅の一環として、9 月に作成された「cisco_tac_admin」ユーザー名を削除しました。これは、9 月と 10 月のアクティビティが同じオペレーションの一部だったことを示唆しています。一連の最初の活動は、おそらく攻撃者による最初の試行とコードテストであり、10 月の活動は、インプラントの展開による永続的なアクセスの確立など、攻撃活動の拡大を示しているようです。
攻撃者による脆弱性のエクスプロイトと BadCandy Web シェルの展開が成功した結果、それ以上のエクスプロイトを防ぐ非永続的なパッチが適用されました。POC を利用しやすくなったことから、他の攻撃者に侵害済みのシステムを乗っ取られるのを防ぐための措置を取ったものと考えられます。
初期アクセスとインプラント提供
脆弱性 CVE-2023-20198 の CVSS(共通脆弱性評価システム)のスコアは最高(10 点/緊急)となっています。エクスプロイトに成功した攻撃者は、完全な管理者権限を使用してデバイスにアクセスできるようになります。デバイスを侵害した後、攻撃者が次の脆弱性(CVE-2023-20273)をエクスプロイトするのを Talos は確認しています。これは Web UI 機能の別のコンポーネントに影響を与えるもので BadCandy インプラントをインストールします。攻撃者は昇格された(ルート)権限を使用して任意のコマンドを実行できるようになり、効果的にデバイス全体のコントロールを奪います。この特定の攻撃によって、攻撃者はその後任意のコマンドを実行できる能力を駆使してファイルシステムにインプラントを書き込むことができます。CVE-2023-20273 の CVSS スコアは 7.2(高)です。Talos は既存のシスコ保護機能を活用して、CVE-2023-20273 アクティビティを特定しました。
インプラントの分析
BadCandy は Lua プログラミング言語をベースとしており、任意のコマンドを実行するための 29 行のコードで構成されています。攻撃者は、デバイスに対して HTTP POST リクエストを作成する必要があり、これにより以下の 3 つの関数が提供されます(図 1)。
- 最初の関数は「menu」パラメータで指定されます。これは必須パラメータであり、値を空にすることはできません。スラッシュで囲まれた数字の文字列を返します。これはインプラントのバージョンを表していると思われます。
- 2 番目の関数は「logon_hash」パラメータで指定されます。これには必ず「1」を設定します。インプラントにハードコードされている 18 文字の 16 進数文字列を返します。
- 3 番目の関数も「logon_hash」パラメータで指定されます。これは、インプラントにハードコードされている 40 文字の 16 進数文字列とパラメータが一致するかどうかをチェックするものです。ここで使用される 2 つ目のパラメータは「common_type」で、この値は空にすることはできません。このパラメータの値によって、コードが実行されるレベル(システムレベル、または IOS レベル)が決定されます。コードをシステムレベルで実行する場合はこのパラメータを「subsystem」に設定する必要があり、IOS レベルで実行する場合は「iox」にする必要があります。IOX コマンドは特権レベル 15 で実行されます。
図 1:BadCandy のコード
BadCandy がインストールされていることが確認された大半の事例では、2 番目の関数に含まれる 18 文字の 16 進数文字列と、3 番目の関数に含まれる 40 文字の 16 進数文字列の両方が一意でした。ただし、同じ文字列が異なるデバイス間で確認された事例もいくつかありました。このことは、3 番目の関数で使用する値は 2 番目の関数が返す値から算出されており、3 番目の関数で設定される任意のコマンド実行に必要な認証の方法として機能していることを示しています。
また、BadCandy の第 2 のバージョンも確認しました。これには現在 HTTP Authorization ヘッダーの事前チェックが含まれています。このバージョンの主要な機能の多くは、前のバージョンと同じです(図 2)。第 2 のバージョンは、早ければ 10 月 20 日に展開が開始されたようです。以前のバージョンのインプラントを使用して展開されました。
図 2:更新された BadCandy のコード
攻撃者がインプラントにヘッダーチェックを追加したのは、侵害されたシステムの特定を防ぐための事後対応と見られています。このヘッダーチェックは主に、侵害の特定を阻止するもので、Talos が提供する旧バージョンの curl コマンドを使用しています。これまでに評価された情報に基づくと、インプラントでのヘッダーチェックの追加によって、公開されている感染システムの可視性が最近著しく下がったと考えられます。Talos は、ガイダンスアドバイザリに沿って curl コマンドを更新し、HTTP ヘッダーチェックを使用したインプラントの亜種を識別できるようにサポートしています。
11 月 2 日、Talos は BadCandy の 第 3 のバージョンを発見しました。これには、同インプラントへのリクエストに 「X-Csrf-Token」HTTP ヘッダーのチェックが含まれています。
図 3:更新された BadCandy コード(バージョン 3)
新しい亜種では、インプラントで「Authorization」または「X-Csrf-Token」HTTP ヘッダーの存在と、必要な値を確認できます。ヘッダーの値を確認するロジックは、どちらのヘッダーも変わらないままです。インプラントへの着信リクエストは、これら 2 つのヘッダーのうちのどちらかが正しい値を持っていれば、認証されたものと見なされます。X-Csrf-Token ヘッダーの導入は、新しい HTTP ヘッダーパラメータを使用してインプラントと通信するための措置のようです。これにより、前のインプラントとの通信トラフィックである「Authorization」ヘッダーの存在を利用した既存の検出メカニズムを回避できます。
この最新の亜種では、URI 内の「%」の存在に関連する設定も変更しています。404 レスポンスを返すのではなく、標準のログインページが表示されるようになっています。
今も続くエクスプロイト、ガイダンスや緩和策
10 月 30 日に CVE-2023-20198、10 月 31 日に CVE-2023-20273 の POC エクスプロイトコードが公開されました。CVE-2023-20198 の POC コードが公開された直後から、脆弱なデバイスに対するエクスプロイト攻撃の件数が劇的に増加しました。過去の事例から、POC が普及するにつれて、POC を使用して無差別攻撃、日和見攻撃、標的型攻撃を行う攻撃者が増えています。
Talos では、この活動の影響を受ける可能性がある場合はシスコの PSIRT(プロダクト セキュリティ インシデント レスポンス チーム)のアドバイザリに概説しているガイダンスを直ちに実施して、セキュリティ修正をインストールすることを強く推奨しています。
正体不明のユーザーや新しく作成されたユーザーがデバイスに存在しないか探す必要があります。そうしたユーザーは、この脅威に関連する悪意のある活動が行われた可能性を示す証拠となります。BadCandy の既知の亜種が存在するかどうかを確認する 1 つの方法は、デバイスに対して以下のコマンドを実行することです。「DEVICEIP」の部分はプレースホルダで、チェックするデバイスの IP アドレスを指定します。
curl -k -H "Authorization: 0ff4fbf0ecffa77ce8d3852a29263e263838e9bb" -X POST "https[:]//DEVICEIP/webui/logoutconfirm.html?logon_hash=1"
これにより、デバイスの Web UI へのリクエストが実行され、インプラントが存在するかどうかを確認できます。上記の 3 番目の関数で説明したものと似た 16 進数文字列が返された場合は、インプラントの既知のバージョンが存在します。なお、インプラントのインストール後に攻撃者が Web サーバーを再起動した場合にのみ、これが侵害の痕跡(IOC)として機能することに注意してください。
また、汎用的な curl コマンドを実行すると、インプラントの主要な機能とやりとりすることなく、インプラントの既知の亜種を持つシステムを特定できます。
curl -k "https[:]//DEVICEIP/%25"
404 HTTP レスポンスが返され「404 Not Found」メッセージで構成される HTML ページが表示された場合、インプラントの既知の亜種のうち、最初の 2 件のどちらかが存在するということです。標準のログインページが表示された場合は、第 3 の亜種が存在することになります。インプラントの既知の亜種が存在しないシステムでは、javascript のリダイレクトを含む 200 HTTP レスポンスが返されます。
注:デバイスが、安全でない Web インターフェイスに対してのみ設定されている場合は、上記のチェックで HTTP スキームを使用する必要があります。
Talos では、この脅威に対処するために以下の Snort カバレッジも提供しています。
- 3:50118 – インプラントのインストールに対応(CVE-2023-20273)
- 3:62527 – インプラントとのインタラクションに対応するが、コード実行には対応しない
- 3:62528 – インプラントとのインタラクションに対応するが、コード実行には対応しない
- 3:62529 – インストールされたインプラントへのコードの受け渡しに対応
- 3:62541 – 初期アクセスを目的とするエクスプロイト試行に対応(CVE-2023-20198)
- 3:62542 – 初期アクセスを目的とするエクスプロイト試行に対応(CVE-2023-20198)
シスコは、インターネットに接続されているシステムの HTTP/HTTPS サーバー機能を無効にするよう、セキュリティアドバイザリで勧告を提示しました。これはベストプラクティスであり、米国政府が過去に提示したガイダンス(インターネットに公開された管理インターフェイスに起因するリスクの軽減に関するガイダンス)とも一致しています。また、シスコが Network Resilience Coalition のメンバーとして、業界のパートナーと進めている取り組みに沿ったものです。
シスコのサポートセンターがセキュリティチームの調査に協力しました。シスコでは通常、1 日あたり相当な件数のケースを処理しますが、そのうちごく少数のケースにおける類似の痕跡を関連付けるという方法と手順がとられました。
付録:情報収集と事前調査
攻撃者は、侵害されたシステム上で事前に情報収集と調査を行うために、以下のコマンドを(通常この順で)使用していました。
show ip ospf show inventory show eigrp protocols show iox-service show platform software iox-service show ip interface brief show power inline show lldp show standby show vrrp show ip route show version show running-config show license summary show dlep config show platform show subsys show flow monitor show ip dns view show ip name-servers
IOC
この脅威の IOC は、こちらの GitHub リポジトリでも提供しています。
上述した curl コマンドに加え、以下をチェックすることでデバイスが侵害されていないかを判断できます。
- システムログをチェックして、「user」が「cisco_tac_admin」、「cisco_support」、またはネットワーク管理者が認識していないローカルユーザーに設定されているログメッセージがないか確認します。
%SYS-5-CONFIG_P: Configured programmatically by process SEP_webui_wsma_http from console as user on line
%SEC_LOGIN-5-WEBLOGIN_SUCCESS: Login Success [user: user] [Source: source_IP_address] at 03:42:13 UTC Wed Oct 11 2023
注:ユーザーが Web UI にアクセスしたインスタンスごとに、%SYS-5-CONFIG_P メッセージがログに表示されます。このメッセージに新しいユーザー名または不明なユーザー名が含まれていないか確認してください。
- システムのログで次のメッセージをチェックし、filename が、ファイルのインストール時の通常の操作に関連していない不明なファイル名でないかどうかを確認します。
%WEBUI-6-INSTALL_OPERATION_INFO: User: username, Install Operation: ADD filename
本稿は 2023 年 10 月 16 日に Talos Group のブログに投稿された「Active exploitation of Cisco IOS XE Software Web Management User Interface vulnerabilities」の抄訳です。