ホーム › ブログ › macOS 27 がアプリから netstat と ARP を隠すと何が壊れるか

macOS 27 がアプリから netstat と ARP を隠すと何が壊れるか

公開 2026-09-29

macOS 27 では、アプリが起動したプログラムに対して 2 つのネットワークテーブルが渡されなくなりました。コマンドは成功して終了コード 0 を返しますが、何も出力しません。同じコマンドをターミナルで実行すると動くため、症状は「監視ツールがすべて正常と報告する」ことだけです。

確認したこと

これはアプリサンドボックスによる拒否ではありません。サンドボックスなしのビルドでも再現し、サンドボックスのログにも何も残りません。ARP については、未署名・アドホック署名・バンドル化したテスト用バイナリのいずれも同じ挙動です。

なぜ問題なのか

空の出力は「安全に見える」方向に失敗します。待ち受けポートを netstat で調べるスクリプトはポートが閉じていると判断し、確立済みの VPN 接続を探すチェックは VPN が切断されていると判断し、ルータを MAC アドレスで照合するルールは一致しなくなります。FrontierStack を修正する前の社内テストでは、接続中の VPN が「切断」と表示され、すべてのポートが「公開されていない」と表示されました。

引き続き動くもの

制限されるのはこの 2 つのテーブルだけです。netstat -rn(経路)と netstat -bi(インターフェイスのカウンタ)は動作し、試したほかのコマンド(ifconfig・route・scutil・sysctl・ps・df・diskutil・launchctl・dscl・dig・ping・curl・log、lsof の全形式)もすべて正常でした。

netstat の代わりに lsof を使う

lsof は同じソケット情報を返し、制限を受けません。自分のプロセスなら権限は不要で、すべてのプロセスを見るには sudo で実行します。

# 開いているすべてのネットワークソケット
lsof -nP -i

# 待ち受け中の TCP ポート
lsof -nP -iTCP -sTCP:LISTEN

# UDP ポートを使っているプロセス
lsof -nP -iUDP:1194

ARP にはまだ確実な代替がない

IPv4 の ARP キャッシュについては、代わりの取得方法が見つかっていません。ルーティングソケットも同じエントリを返さず、ndp -an は IPv6 の近隣を表示できますが IPv4 の代わりにはなりません。アクセスはローカルネットワークのプライバシー許可と関係しているようですが、それだけでは決まりません。ローカルネットワークを許可したアプリでテーブルが空のまま、同じ Mac の別のアプリでは普通に読めるケースを確認しています。詳しいことが分かれば、この記事を更新します。

やるべきこと

FrontierStack の対応

FrontierStack は待ち受けポートと確立済みの接続を lsof で取得し、netstat は旧い macOS 向けのフォールバックとしてだけ使います。ARP が関わる箇所(デバイス検出・ルータとネットワーク・ロケーション)では「MAC がキャッシュにない」と「macOS が教えてくれない」を区別し、チェックを失敗ではなく不明として表示し、ローカルネットワークへのアクセスを許可するカードを表示します。

すべてをひとつの Mac アプリで。

FrontierStack は、ローカルでもフリート全体でも、スタック全体のインストール・監視・保護をひとつのネイティブ macOS アプリで行います。

FrontierStack をダウンロード

Apple 公証済み · 安全・安心 · macOS 13 Ventura 以降