Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】How the live Kubernetes DNS Tunneling Demo Was Scripted ? live at CDS 2025 Conference !

2025年09月16日に「Dev.to」が公開したITニュース「How the live Kubernetes DNS Tunneling Demo Was Scripted ? live at CDS 2025 Conference !」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

KubernetesのDNSトンネリングデモをスムーズに実行するスクリプトを解説。demo-magic.shでコマンドを自動入力し、tmuxで画面を分割。デモ環境の構築から悪意あるクライアントのデプロイ、データ流出の様子まで、一連の流れと技術を紹介する。

ITニュース解説

CDS 2025カンファレンスで行われたKubernetes DNSトンネリングのライブデモは、まるで魔法のようにスムーズに進み、観客を魅了した。このデモの裏側には、緻密に練られたシェルスクリプトが存在し、そのスクリプトこそが「動くペイン、ASCIIアート、そして流れるようなKubernetesコマンド」といった印象的な演出を可能にしたのだ。この記事では、システムエンジニアを目指す初心者にも理解できるように、このデモを支えたスクリプトの全貌と、各ステップが具体的に何をしているのかを解説する。

まず、デモの基盤となるのは「demo-magic.sh」という小さなBashライブラリだ。このライブラリは、ライブデモをより円滑に進めるための機能を提供する。例えば、「p "テキスト"」コマンドは、画面に説明文を表示するだけで実際には何も実行しないため、演者がデモの状況を説明するナレーション部分に利用される。「pe "コマンド"」は、指定されたコマンドをまるで手でタイプしているかのように画面に表示し、その後そのコマンドを実際に実行する。これにより、観客はコマンドが入力され実行される様子をリアルタイムで見ることができる。さらに、「pei "コマンド"」は、コマンドの表示と実行の後、ユーザーが次の操作をできるように、そのターミナルペインを対話可能な状態で残す。また、「TYPE_SPEED=20」といった設定で、文字が画面に表示される速さを調整でき、人間がタイプしているような自然な速度感を演出する。これにより、実際にはスクリプトが自動で進めているにもかかわらず、まるでその場でコマンドを入力しているかのような錯覚を観客に与え、タイプミスといったヒューマンエラーを完全に排除できる。

次に、このデモの視覚的な演出を支えるのが「tmux」というツールである。tmuxはターミナルマルチプレクサと呼ばれ、一つのターミナルウィンドウの中で複数の画面(ペイン)を分割して表示・管理できる。このデモでは、tmuxを使って画面を縦横に分割し、それぞれ異なる情報を表示する「ダッシュボード」を作り出した。例えば、左上のペインをメインのコマンド入力エリアとして、下30%のペインをASCIIアートの表示や攻撃者側のDNSサーバーの起動に使い、右60%のペインをログの表示やステータス監視に割り当てる。特定のペインにコマンドを送信する「tmux send-keys」という機能を使うことで、スクリプトから自動的に各ペインにコマンドを送り込み、それぞれ独立した作業を進めることができる。初期設定では、下側のペインにjp2alolcatを組み合わせ、カラフルなASCIIアートのハッカー画像をループ表示させることで、デモ開始前から観客の視覚的な興味を引く工夫が凝らされている。

デモの具体的な手順は、まず環境のクリーンアップから始まる。これは、デモを何度でも繰り返せるようにするため、以前の実行で残った設定やプロセスを全て削除する作業だ。具体的には、ログファイル(~/kind.log)を空にし、kind delete clusterでDockerコンテナ上に構築されたKubernetesクラスターを全て削除する。kindは「Kubernetes in Docker」の略で、ローカル環境で手軽にKubernetesクラスターを構築できるツールである。また、もし実行中の悪意あるDNSサーバー(dnscat2-server)があれば停止させ、tmux kill-pane -aで開いているすべてのtmuxペインを閉じる。これにより、常に同じクリーンな状態からデモを開始できる。

クリーンアップ後、観客に「Are you ready ???」と問いかけ、waitコマンドでユーザーがEnterキーを押すまでデモを一時停止する。これは、演者が観客と対話したり、次の重要なステップに移る前に説明を加えたりするための自然な間合いを作る役割を果たす。

そしていよいよ、Kubernetesクラスターの起動に移る。右側のログ監視ペインにはtail -f ~/kind.logコマンドが送信され、クラスター作成の進捗ログがリアルタイムで表示される。メインの操作ペインからはkind create clusterが実行され、Kubernetesクラスターが構築される。その後、kind load docker-image alialp/dnscat2-clientコマンドで、デモで悪用するdnscat2-clientというコンテナイメージを、事前にクラスター内に読み込んでおく。さらに、kubectl config set-context --current --namespace demoコマンドで、これ以降のkubectl操作の対象をdemoという名前空間(Kubernetesにおけるリソースの論理的な区画)に切り替える。

クラスターが準備できたら、攻撃の準備を進める。下側のASCIIアートを表示していたペインは、C-c(Ctrl+C)でアートの表示を停止し、bash ./dns-evil-server.shコマンドが実行され、攻撃者側の悪意あるDNSサーバーが起動する。これにより、デモの核心となるDNSトンネリングを待ち受ける体制が整う。同時に、kubectl create namespace demoで、攻撃対象となるdemo名前空間が正式に作成される。

次に、KubernetesクラスターのDNSサービスであるCoreDNSを操作する。CoreDNSはクラスター内の名前解決を担う重要なコンポーネントだ。kubectl waitでCoreDNSのPod(コンテナ化されたアプリケーションの最小実行単位)が準備完了状態になるのを待った後、coredns-cm.yamlという設定ファイルを使ってCoreDNSの設定をkubectl replaceコマンドで変更する。この変更により、DNSトンネリングをサポートするためのlocalhost DNSフォワーディング(特定のDNSクエリをローカルのDNSサーバーに転送する設定)が可能となる。設定変更を確実に適用するため、kubectl rollout restartでCoreDNSのデプロイメント(Podのセットを管理するKubernetesオブジェクト)を再起動し、再度Podが準備完了になるのを待つ。

いよいよ悪意あるクライアントをデプロイする段階だ。ログ監視ペインは再びC-cで表示を停止され、kubectl get pods -n demoを1秒ごとに監視する表示に切り替わる。これは、これからデプロイする悪意あるクライアントPodの状況をリアルタイムで観客に見せるためだ。メインの操作ペインからはcat ./dnscat2-client-pod.yamlでクライアントPodの定義ファイル(マニフェスト)が表示され、その内容が説明された後、pe "kubectl apply -f dnscat2-client-pod.yaml"コマンドで実際にKubernetesクラスターにデプロイされる。そして、whileループを使い、dnscat-clientという名前のPodが「Running」状態になるまでスクリプトの実行を一時停止し、確実に起動するのを待つ。

クライアントPodが起動し、攻撃者サーバーとの間でDNSトンネリングのセッションが確立されると、その様子を視覚的に強調する。悪意あるサーバーが表示されていたペインの背景色が赤(bg=#872736)に変わり、危険な通信が始まったことを観客に強く印象付ける。同時に、ログ監視ペインではkubectl snifftsharkが起動され、dnscat-clientPodから発信されるDNSパケットをリアルタイムでキャプチャし、DNSトンネリングによるデータ送受信が実際に発生していることを観客に可視化する。

最後に、DNSトンネリングによるデータ窃取の実演を行う。メインの操作ペインからkubectl exec -n demo pods/dnscat-client -- watch -t -d -n 1 ls -al /home/というコマンドを実行する。これは、DNSトンネリングで制御されているクライアントPod内部に対して、ls -al /home/コマンドを1秒ごとに繰り返し実行させるものだ。これにより、攻撃者がまるでPod内部にアクセスしているかのように、遠隔地のファイルリストをリアルタイムで観客に見せることができ、DNSトンネリングが悪用されるシナリオを具体的に示せる。

デモの終盤には、「Press Enter to end the demo!」というメッセージと「✅ Demo complete!」が表示され、観客にデモの終了を伝える。その後、「Cleaning up...」というメッセージに続き、kind delete clusterでKubernetesクラスターを削除し、docker kill dnscat2-serverで悪意あるDNSサーバーを停止し、tmux kill-pane -aで開いている全てのtmuxペインを閉じる。最後にclearコマンドで画面をクリアし、デモ開始前のクリーンな状態に環境を完全に戻す。この自動的なクリーンアップは、デモをいつでも安心して再実行できるための重要なステップだ。

このライブデモが成功した秘訣は、demo-magic.shによるコマンドの表示タイミングと実行の完璧な制御にあり、これにより人間が行うタイプミスや遅延といった問題を完全に回避している。tmuxは、複数の情報を同時に見せる「ダッシュボード」を提供し、デモに視覚的な深みと説得力をもたらした。send-keysコマンドにより、複雑なバックグラウンド処理を演者が手動で入力することなく自動実行でき、デモ中のストレスを軽減する。また、waitコマンドは、演者が観客と対話する機会を自然に作り出し、観客のエンゲージメントを高める。そして、ASCIIアートや背景色の変更といった視覚的な要素が、観客の注意を引きつけ、デモをより印象的なものにした。

これらのテクニックは、どんな技術的なライブデモにも応用できる普遍的なものだ。コマンドをdemo-magicで事前にスクリプト化すること、tmuxを使って視覚的な要素、バックグラウンドのログ、メインの操作画面といった複数のビューを効果的に配置すること、そしてASCIIアートや色を使って観客の視覚的興味を引きつけること、さらにデモの信頼性を確保するために常にクリーンアップステップを含めること。これらが、魅力的で完璧なライブデモを実現するための重要なヒントとなる。

関連コンテンツ

関連IT用語