
YouTubeをC2チャネルとして使用 - QR動画をYouTubeにアップロードしてWindowsシステムを制御する
SharpCovertTubeは、Youtubeに動画をアップロードしてWindowsシステムをリモート制御するために作成されたプログラムです。
このプログラムは、動画がアップロードされるまでYoutubeチャンネルを監視し、アップロードされた動画のサムネイルからQRコードをデコードしてコマンドを実行します。動画内のQRコードは平文またはAES暗号化された値を使用できます。
バイナリ版とサービスバイナリ版の2つのバージョンがあり、悪意のある動画を生成するPythonスクリプトが含まれています。その目的は、Google APIへのWebリクエストのみを使用した永続化手法として機能することです。

Windowsシステムでリスナーを実行します:

新しい動画がアップロードされるまで、一定時間ごと(デフォルトでは10分)にYoutubeチャンネルをチェックします。この例では、example-videosフォルダから "whoami.avi" をアップロードしています:
チャンネルに新しい動画があることを確認すると、動画のサムネイルからQRコードをデコードし、コマンドを実行し、その応答はbase64エンコードされてDNS経由で外部に漏洩されます:

これはAES暗号化されたペイロードや長いコマンド応答を持つQRコードでも機能します。この例では、example-videosから "dirtemp_aes.avi" をアップロードし、c:\tempの内容を複数のDNSクエリを使用して漏洩させます:

ファイルへのログ記録はオプションですが、フォルダが存在することを確認してください。デフォルト値は "c:\temp\.sharpcoverttube.log" なので、"c:\temp" が存在する必要があります。
DNS漏洩もオプションであり、BurpのCollaboratorを使用して簡単にテストできます:

代替案として、QR動画を簡単に作成し、Youtubeにアップロードし、base64エンコードされたDNSクエリを監視・解析するスクリプトを作成しました。このスクリプトをC2サーバーとして使用するための設定は、c2-serverフォルダで説明されています:

変更可能な値がいくつかあります。通常のバイナリとサービスバイナリのConfiguration.csファイルにあります。最初の2つの値のみ更新する必要があります:

動画はc2-serverフォルダ内のサーバースクリプトを使用するか、単に generate_video.py スクリプトを実行して生成できます。後者の場合、まず依存関係をインストールしてください:
pip install Pillow opencv-python pyqrcode pypng pycryptodome rebus
Linuxを使用している場合は、以下も必要になる場合があります:
apt-get install libgl1
次に、generate_video.py スクリプトを実行します:
python generate_video.py -t TYPE -f FILE -c COMMAND [-k AESKEY] [-i AESIV]
平文で "whoami" のQR値を持つ動画をパス c:\temp\whoami.avi に生成します:
python generate_video.py -t qr -f c:\temp\whoami.avi -c whoami
キーとIVが "0000000000000000" で "dir c:\windows\temp" のAES暗号化QR値を持つ動画をパス c:\temp\dirtemp_aes.avi に生成します:
python generate_video.py -t qr_aes -f c:\temp\dirtemp_aes.avi -c "dir c:\windows\temp" -k 0000000000000000 -i 0000000000000000

サービスとして実行するコードはSharpCovertTube_Serviceフォルダにあります。自己削除を除き同じ機能を持ちます(自己削除はこの場合意味がありません)。
InstallUtilを使用してインストールできます。SYSTEMユーザーとして実行するように準備されており、管理者としてインストールする必要があります:
InstallUtil.exe SharpCovertTube_Service.exe
その後、次のように開始できます:
net start "SharpCovertTube Service"

管理者権限がある場合、これは通常のバイナリよりもステルス性が高い可能性がありますが、"Description"と"DisplayName"を更新する必要があります(上の画像のとおり)。これらの権限がない場合、サービスをインストールできないため、通常のバイナリのみを使用できます。
ファイルは64ビットである必要があります!!! これはQRコードのデコードに使用されるコードによるもので、Stefan Gansevles氏のQR-Captureプロジェクトから借用しており、同プロジェクトはUzi Granot氏のQRCodeプロジェクトから一部を借用し、さらに同プロジェクトはZakhar Semenov氏のCamera_Netプロジェクトから一部を借用しています(その後は追跡不能)。すべての方々に感謝します!
このプロジェクトは、2021年にPythonのみを使用して開発したcovert-tubeプロジェクトの移植版であり、WelivesecurityのCasbaneiroおよびNumandoマルウェアに関するブログに触発されました。
このプロジェクトは、インターネット上のほとんどすべてのものをC2チャネルとして使用できることを示すためのPoCであり、誰かのインスピレーションになれば幸いです。このプロジェクトは教育目的を意図しており、Youtubeサービスを悪用すると、Youtubeによるチャンネル削除などの問題が発生する可能性があります。