今すぐ NightOwl アプリを削除してください
(archive.md)- macOS のライト/ダークモード自動切り替えユーティリティが、2022年末の買収後、ユーザーの同意なくデバイスをボットネットに組み込むツールへと変質
- 買収主体の TPE.FYI LLC は利用規約に基づき、ユーザーのデバイスをインターネットトラフィックの ゲートウェイ として活用し、アプリを終了してもこの機能は無効化不可
- インストール時に root 権限で動作する launch agent が登録され、起動時に自動実行されるうえ、アプリケーション内から無効化できない
- 「自動更新」を装ったデーモンがローカル HTTP プロキシ を立ち上げ、外部サーバーへ SSH トンネル を開いて、ユーザーのインターネット回線経由でトラフィックを迂回処理
- 住宅向けプロキシ販売業者 IPRoyal の Pawns SDK が使われており、ユーザーのインターネット帯域幅が市場調査用として再販売される構造
NightOwl アプリの正体と変質
- NightOwl は 2018年から存在するアプリで、OS の ライト/ダークモードを自動切り替え する機能を提供
- macOS 標準の自動モードが、ユーザーが席を外したときにしか切り替わらないという制限を補う代替手段
- 2022年末に TPE.FYI LLC に買収された後、ユーザーの認知や明示的な同意なしにデバイスを 市場調査用ボットネット に強制編入
- ダウンロードページの小さな文字の規約以外に別途通知はなし
- アプリを終了した状態でもこの機能は無効化できない
- 利用規約(TOS)には該当動作が明記されている
- デバイスのネットワーク設定を変更してインターネットトラフィックを共有し、ユーザーのデバイスを ゲートウェイ として使用
- ゲートウェイの顧客には、Web・市場調査、SEO、ブランド保護、コンテンツ配信、サイバーセキュリティなどの分野の企業が含まれる
- NightOwl 側に問い合わせたが回答はなかった
削除方法
- アプリが起動していなくても、インストールされているだけであれば ターミナルで削除コマンドを実行する必要がある
sudo killall NightOwllaunchctl unload ~/Library/LaunchAgents/NightOwlUpdater.plistsudo killall AutoUpdatesudo rm -rf /Applications/NightOwl.app/ ~/Library/LaunchAgents/NightOwlUpdater.plistsudo zsh -c "rm /Users/*/Library/LaunchAgents/NightOwlUpdater.plist"
技術的な動作分析
- インストール時に
org.nightowl.autoupdater.comという名前の launch agent を登録/Applications/NightOwl.app/Contents/Helpers/AutoUpdateプロセスをデーモン化し、起動時に root 権限 で実行- アプリケーションから無効化できず、ユーザーの認知や同意なく静かに進行する
- アプリが表示する通知は Google Analytics の統計収集に関する内容に限られる
- 機能の使い方やバグ解析のためのデータ追跡だと案内
anonymizeIp設定により IP の末尾部分を隠して 匿名化データ収集 を保証すると明記- 設定の「Send Statistics」のチェックを外せば追跡をオプトアウトできると案内
- ただし、統計送信をオフにしても launch agent は無効化されない
- 「自動更新」デーモンは3つの作業を実行
- Sparkle を使ったアプリ更新確認
- Sentry を使ったクラッシュ報告
- ポート
40701で ローカル HTTP プロキシ を起動(アプリバンドル内の設定 json ファイルで変更可能) - 最後の項目は、自動アップデーターを名乗るアプリでは想定しにくい動作
-
プロキシ・SSH トンネル構造
- デーモンは
sudoにより root からメインユーザーアカウントへ切り替えた後、nightowl_t.dylibを実行- これは tinyproxy のコピーで、GPLv2 ライセンスだが GPL ライセンス表記が含まれておらず、違反の可能性がある
- HTTP(S) プロキシとして動作
- autossh を
nightowl_a.dylibにリネームしたファイル(ライセンス表記なし)を通じて SSH 接続 を確立- 接続先は
testconnectuser2023@proxy-gw1-europe.squidyproxy.com、ポート2043 /tmpに.uu拡張子で落とした公開鍵を使用し、-Rオプションでリモートポートをローカルへトンネリング- 鍵は
proxy-api1.squidyproxy.comへの HTTPS リクエストで取得 - 当該ドメインは 2022年4月に GoDaddy へ登録され、IP は Microsoft がホスティング
- 接続先は
- この SSH サーバーは シェルアクセス が有効な状態
- 接続成功後、HTTP トラフィックがユーザー側へ転送され、ユーザーのインターネット接続を通じて外部へ迂回される
- デーモンは
-
UPnP ポートフォワーディングの試行
- ルーターに UPnP ポートフォワーディング を開こうと試みるが、キー名が混在しているため失敗
- 送信された SOAP リクエストには
AddPortMappingアクションとip royal pawsという値が含まれる
- 送信された SOAP リクエストには
- ルーターに UPnP ポートフォワーディング を開こうと試みるが、キー名が混在しているため失敗
帯域幅の再販売構造(Pawns / IPRoyal)
- アプリは Pawns SDK を使用しているように見える
- Pawns は、ユーザーが共有したインターネット帯域幅に対して 1GB あたり $0.20 を支払うアプリ
- Pawns サービスの運営主体は IPRoyal
- 住宅向け(residential)プロキシ接続を 1GB あたり $1.75 で販売するプロキシ業者
- 「100% 倫理的に取得された IP」と宣伝
「TPE.FYI LLC」の正体
- TPE(または Keeping Tempo、Tempo AI)は、YouTube 動画の再生数や地域別人気データなどの分析に基づき、アーティストの実需要に合わせて会場がチケット価格を設定できるようにする 価格モデル構築 を進めている
- Tempo AI カレンダー、Tempo AI ジムとは無関係
- 関連情報は乏しく、2018年以降の資料はほとんどない
- 執筆時点で、確認されたインストール済みアプリは
https://stubbs.frontgatetickets.com/へ多数の接続を試みていた- このサイトはテキサス州オースティンのあるレストランで行われるライブ音楽公演のチケット販売サイト
- 会社は 2018年9月にテキサス州オースティンで設立され、2023年3月に「Jarod Stirling」により解散
- 住所は The Muse at SoCo, 1007 South Congress Avenue, Apartment 443, Austin, Texas, 78704
1件のコメント
Hacker News の意見
こういうことがかなり頻繁に起きるのは分かっているが、企業がこういう文言で利用規約をどれほど頻繁に更新しているのか気になる
そもそも、恒久的にあらゆる利用を支配する自動更新規約という発想自体、ずっと前に法的に封じられているべきだったと思う
NightOwl の現在の文言では、規約と価格情報をいつでも変更でき、ウェブサイトに掲載した時点で直ちに効力を持ち、「重大な」変更かどうかも NightOwl が単独で判断するとされている
ローカルにインストールされたアプリの規約変更をウェブサイト更新で知らせるというのは、ソーシャルフィードまで購読して確認しろということなのかと思ってしまう
直感的には執行不能で不当な条項に思えたが、Comcast の法務チームなら検討している気もする
ウェブサイトに契約変更を掲載する方式、特に別途通知がない場合にこうした文言が有効なのか知っている弁護士がいるのか気になる
以前は良い OpenStreetMap フロントエンドだったが、収益化のために投資会社に買収されたと理解している
今のアプリの状態がどうなのか、収益モデルがここで説明されているものと似ているのか、代替アプリとして何を使うとよいのか気になる
Safeway の事例で裁判所は、消費者はまだ存在していない将来の規約に同意することはできず、規約変更の通知を受けていないなら、継続利用したという理由だけで修正後の規約に同意したとは見なせないと判断した
ブラウザが安全ではないと表示したように思う
アプリがライブ音楽チケット販売サイトに多くの接続を作るというのは、住宅用プロキシでよくある用途だ
チケット転売業者が感染したユーザーの端末を使って、データセンターホストのブロックや大量アクセス制限を回避し、後で転売価値のあるチケットを入手する確率を高める
作者、リポジトリ侵入者、または今回のような買収者を通じてバックドアが仕込まれた無料のブラウザ拡張機能や VPN アプリなどが、ユーザーの端末をこうしたプロキシに変えてしまうことがある
Google と Amazon はクラウドサービス用の IP レンジを大きく保有しているため、AWS や Google Cloud ベースの bot は比較的検出しやすい
一方で Verizon も住宅顧客に割り当てる大きな IP レンジを持っており、Netflix や Amazon のようなサービスが Verizon の IP レンジ全体をブロックしたがらない点を NordVPN が利用して、トラフィックを住宅用のように見せている
静かな買収が本当に嫌いだ
Chrome 開発者向け拡張機能も、悪意ある行為者に買い取られた後でマルウェアに変えられることが非常に多く、ひどいものだ
https://chrome.google.com/webstore/detail/hover-zoom%20/pccc...
https://github.com/extesy/hoverzoom/discussions/670
所有者が一夜にして変わったら大きく通知する、という形でよい
寄付しようとする人はほとんどおらず、まともな会社がアプリを買って収益化しようともしないので、結局、ユーザーを搾取しようとする最悪の会社だけが拡張機能やアプリを買っていく
こうした無料アプリには価値があるが、開発者の収入にはつながらないため、別の道を探すことになる
システムレベルの機能を実現するには避けようもなく膨大な権限が必要だった非常に侵襲的なアプリが、広告とデータ販売の会社にすんなり渡ったのは筋が通らない
ユーザーがソフトウェアを使う際に同意した利用規約にそのまま書かれているのだから、結局は買主責任の原則のような話になる
macOS 内蔵の自動モードは、ユーザーがコンピュータから離れているときだけ切り替わるという説明はおかしい
Night Shift のスケジュール/位置情報を設定してダークモードを自動にしておけば即座に切り替わるし、ランチャーや Spotlight を使うなら
tell application "System Events" to tell appearance preferences to set dark mode to not dark modeのような 1 行の AppleScript でも切り替えられる日没時にダークモードがオンになる確率は 25% くらいだと思う
何年もの間、Ventura までずっとそうだったが、他の人たちはずっと完璧に動いていたのか気になる
Appleが開発者証明書を失効させたように見える
いつ失効したのかを示す公開ログがあるのか気になる
アプリの読み込みはブロックされたが、2つのdylibはまだ実行中で、証明書失効がすでに始まった後に起きたことだからかもしれないと思った
ログアウトして再ログインしても実行され続けていたので、ログアウトを越えて残存するのかもしれない
macOSファイアウォールでも、言及されていたAutoUpdateバイナリに接続の受信を許可するか尋ねるプロンプトが出たので、これらはすべてここ数日のうちに配布されたもののように見える
再起動すると
“NightOwl” will damage your computer. You should move it to the Trash.というダイアログが出て、許可しても/Users/*/Library/LaunchAgents/NightOwlUpdater.plistと通常の設定ファイルが残り、完全にはクリーンアップされなかったターミナルに慣れていない非技術系ユーザーには、再起動を案内するのがよさそう
https://lapcatsoftware.com/articles/revocation.html
私の環境ではmacOSがアプリを無効化し、開くことを拒否した
代わりにNightFallへ切り替えた: https://github.com/r-thomson/Nightfall
Settings > Control Center > Display > Always Show in Menu Bar
ダークモードのオン/オフにはクリックが1回余計に必要だが、Night Shiftも使えて100%ネイティブ
Automatorを開いて新しいアプリケーションを作成し、“change system appearance”を選んでからライト/ダークモードの切り替えを選べばよい
保存した後、Spotlightでそのアプリ名を開けばモードを切り替えられるし、Shortcutsでもできそう
グローバルショートカットとして右クリック+Option+Commandを割り当てているが、とてもよく動く
こういう種類のことには、通せる法律があるべきだと思う
ソフトウェアは言われたとおりに動作し、まったく別のことをしないという黙示の契約があるべきで、違反時には強い罰則が必要
大きなWebサイトにリクエストするたびに10MBのEULAファイルを送り、受け入れるまで送り続けるようにすれば、「EULAによるDDoS」になるかもしれない
MIT Licenseの大文字条項は、ソフトウェアが商品性や特定目的への適合性について明示的・黙示的な保証なしに「現状のまま」提供される、というところから始まり、GPL第15条もほぼ同じ文言を含んでいる
https://opensource.org/license/mit/
https://www.gnu.org/licenses/gpl-3.0.html#section15
英国の消費者契約法は、EU消費者権利指令の影響で2015年からデジタルコンテンツにまで拡張され、商品は満足できる品質でなければならず、Netflix、Spotify、アップデートのあるソフトウェアのような継続サービスが、最初に提供されたものから急激に変わってはならないという黙示条件を含んでいる
https://www.legislation.gov.uk/ukpga/2015/15/part/1/chapter/...
ほとんどの法域にも似た規定があり、EU各国には消費者権利指令を実装した法律があるはず
ただしこれはお金を払った場合に適用されるもので、NightOwlは無料なので、商品・サービス販売を規制する法的期待がそのまま適用されるわけではない
会社が買収されて製品にスパイウェアが入るのは悪いことだが、コーディングを学ぼうとして無料のオープンソースやフリーウェアを公開した十代の若者や趣味の開発者がleft-padのようなことをしたからといって、巨大企業に訴えられる構図も望ましくない
技術規制の重みは、無料のメニューバーユーティリティやChrome拡張を作る小規模開発者よりも、Google、Microsoft、Appleのようなところにずっと重くかかるべき
小さな無料・オープンソースアプリがサプライチェーン攻撃のベクトルにならないようにするのは依然として難しく、より良いサンドボックス化とアプリレベルの権限、アプリごとのネットワーク監視と異常検知、パッケージング/配布プロセスでの信頼構築といった、遅く不完全な改善が必要であり、訴訟が答えではない可能性が高い
UPnP ポートフォワーディングを開こうとしたが、ルーター側でキー名が入り乱れていて失敗したという部分は、実際にはどのルーターでも失敗すべきものです
UPnP は無効化しておくべきだからです
Tailscale のようなすべての P2P アプリは、一時的にサーバーのように動作し、着信トラフィックを許可する必要があります
この機能がないと、いわば二級市民になり、ユーザーを子ども扱いしているようなものです
もちろんポートを自分で開けることはできますが、見つけにくく、一貫性がなく、複雑な UX のため、大多数のユーザーには手が届きにくく、ほとんどの人はポートが何かも知りません
彼らは UPnP をオフにする手間も望んでおらず、その設定は、あなたが詳しかろうが詳しくなかろうが、オンになっている可能性が高いです
ほとんどのルーターにはそのような設定はないはずなので、感染したデバイスをセキュリティモデルに含めるなら、NAT slipstream attacks によって NAT は事実上完全に無力化されると考えるのが賢明です
感染したデバイスはルーターの NAT テーブルを変更し、実質的に UPnP のように動作させることができますが、ユーザーが監査できる UI は提供しません
NAT なしで IPv6 だけを使うなら、ファイアウォール例外をすべて手動で管理するつもりがある場合には UPnP の無効化は有効なセキュリティ対策になり得ますが、現在ほとんどの人にとってはホストファイアウォールだけが信頼できる保護手段です
かなり紛らわしい話です
規約には「ユーザーのデバイスをインターネットトラフィックのゲートウェイとして使うためにネットワーク設定を変更してインターネットトラフィックを共有させ、NightOwl の顧客にはウェブ/市場調査、SEO、ブランド保護、コンテンツ配信、サイバーセキュリティ企業などが含まれる」と書かれています
これは本当に焼き払うべきレベルです
それなのに、これを利用規約に明記した理由が本気で気になります
こんな怪しい機能を入れる組織なら、その事実も積極的に隠しそうなのに、規約に書いておくと NightOwl が法的に保護される理由があるのか知りたいです
たとえば、本来なら訴えられて負ける可能性があったが規約に入っていれば大丈夫になる、という類いなのか、こうした怪しい行為も規約にさえあれば技術的には合法なのか分かりません
もしそうならかなり残念で、アプリの権限がもっと細分化されるとよいと思います
Little Snitch を使うと、アプリがどの IP やアドレスに接続しているかを検知し、その接続をブロックする助けになります
絶対に売却を検討しないでほしいです