
Cisco IOS XE インプラントのスキャン及び検出 (CVE-2023-20198, CVE-2023-20273)
CVE-2023-20198 の悪用のネットワーク検出と、Cisco IOS XE デバイスのポストエクスプロイテーションのフィンガープリンティング。
suricata/ フォルダには、CVE-2023-20198 の悪用に対する Suricata 検出ルールが含まれています。これらのルールは、CVE-2023-20198 のパッチが適用されていない Cisco IOS XE デバイスでの認証バイパスに使用されるパーセントエンコードされたパーセントを監視します。
このディレクトリには、実際に観測された悪用トラフィックに基づく参考 PCAP も含まれています:
このリポジトリには、Cisco IOS XE ソフトウェア Web 管理ユーザインターフェースの大量悪用に関連するポストエクスプロイテーション活動に関する情報も含まれています。Cisco Talos 1 は、Cisco IOS XE デバイスでインプラントがアクティブかどうかを確認できるフィンガープリントを公開しました。参考までに:
curl -k -X POST "https://DEVICEIP/webui/logoutconfirm.html?logon_hash=1"
HTTP レスポンスが16進数の文字列で構成されている場合、これはデバイスが侵害されている可能性が高い指標です。ただし、複数の情報源が述べているように 2 3、この方法で発見できるインプラントの数は大幅に減少しています。
侵害されたデバイスへの調査したネットワークトラフィックは、脅威アクターが追加のヘッダーチェックを行うようにインプラントをアップグレードしたことを示しています。したがって、多くのデバイスではインプラントは依然としてアクティブですが、正しい Authorization HTTP ヘッダーが設定されている場合にのみ応答するようになりました。
私たちは Cisco Talos による最初のブログ記事 を再度確認し、インプラントコード内に追加のロケーションチェックがあることに気づきました:

Cisco Talos が共有した上記のインプラントコードのスクリーンショットに基づき、インプラントの存在をフィンガープリントするために使用できる別の方法を見つけました。
curl -k "https://DEVICEIP/%25"
%25 (パーセントエンコードされたパーセント) を使用することで、追加のロケーションチェックで指定された条件を満たします。これにより、サーバーはインプラントが実行されていない場合とは異なる HTTP レスポンスを返すことになります。
現在、インプラントには3つの既知のバージョンがあります。2023年11月1日時点で、インプラントは Cisco Talos 1 によって BadCandy と名付けられました。
インプラント動作の兆候は、ボディ内の <head><title>404 Not Found</title></head> です。HTTP ボディの例は次のとおりです:
$ curl -k 'https://DEVICEIP/%25'
<html>
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>nginx</center>
</body>
</html>
3番目の亜種は、404 ではなくログインページを返します。通常はこのログインページではなく JavaScript リダイレクトが期待されるため、ログインページが返されるかどうかを確認することでインプラントの存在を判断できます:
curl -k 'https://DEVICEIP/%25'
<!DOCTYPE html>
<html>
<!--
Copyright (c) 2015-2019 by Cisco Systems, Inc.
All rights reserved.
-->
<head lang="en">
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title id="loginTitle"></title>
スキャン結果で異なるログインレスポンスが見つかり、最終的に name="Username" という文字列を、ログインページが返されているかどうかを判断する識別子として使用しました。
インプラントが存在しない場合、異なるレスポンスが返されます。例:
$ curl -k 'https://DEVICEIP/%25'
<script>window.onload=function(){ url ='/webui';window.location.href=url;}</script>
上記のフィンガープリンティング方法を使用して侵害を確認する小さなスクリプトを作成しました。スクリプトはこちらにあります:
使用例:
$ pip3 install requests
$ python3 iocisco.py 192.168.1.1
[!] Checking http://192.168.1.1/%25
WARNING: Possible implant found for 192.168.1.1 (impant v3)! Please perform a forensic investigation!
[!] Checking https://192.168.1.1/%25
WARNING: Possible implant found for 192.168.1.1 (implant v3)! Please perform a forensic investigation!
改行で区切られたホストのリストをスキャンすることも可能です。
$ python3 iocisco.py --file cisco-ips.txt