1 ポイント 投稿者 GN⁺ 2023-08-09 | 1件のコメント | WhatsAppで共有
  • 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 NightOwl
    • launchctl unload ~/Library/LaunchAgents/NightOwlUpdater.plist
    • sudo killall AutoUpdate
    • sudo rm -rf /Applications/NightOwl.app/ ~/Library/LaunchAgents/NightOwlUpdater.plist
    • sudo 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 という値が含まれる

帯域幅の再販売構造(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件のコメント

 
GN⁺ 2023-08-09
Hacker News の意見
  • こういうことがかなり頻繁に起きるのは分かっているが、企業がこういう文言で利用規約をどれほど頻繁に更新しているのか気になる
    そもそも、恒久的にあらゆる利用を支配する自動更新規約という発想自体、ずっと前に法的に封じられているべきだったと思う
    NightOwl の現在の文言では、規約と価格情報をいつでも変更でき、ウェブサイトに掲載した時点で直ちに効力を持ち、「重大な」変更かどうかも NightOwl が単独で判断するとされている
    ローカルにインストールされたアプリの規約変更をウェブサイト更新で知らせるというのは、ソーシャルフィードまで購読して確認しろということなのかと思ってしまう

    • Comcast と数年前にビジネス向けインターネット/電話契約を結んだ友人も似たような文言を見ていて、実際の URL すらなかった
      直感的には執行不能で不当な条項に思えたが、Comcast の法務チームなら検討している気もする
      ウェブサイトに契約変更を掲載する方式、特に別途通知がない場合にこうした文言が有効なのか知っている弁護士がいるのか気になる
    • maps.me も似たような状態なのではないかと思う
      以前は良い OpenStreetMap フロントエンドだったが、収益化のために投資会社に買収されたと理解している
      今のアプリの状態がどうなのか、収益モデルがここで説明されているものと似ているのか、代替アプリとして何を使うとよいのか気になる
    • こうした条項はすでに無効とされたことがあり、誰かが訴訟を起こす気さえあれば、再びそうなる可能性は高い: https://arstechnica.com/tech-policy/2007/07/court-says-no-to..., https://scholar.google.com/scholar_case?case=592583419165850...
      Safeway の事例で裁判所は、消費者はまだ存在していない将来の規約に同意することはできず、規約変更の通知を受けていないなら、継続利用したという理由だけで修正後の規約に同意したとは見なせないと判断した
    • 最近 Chrome 拡張機能 The Great Suspender にも似たようなポリシーや機能変更があったのか気になる
      ブラウザが安全ではないと表示したように思う
  • アプリがライブ音楽チケット販売サイトに多くの接続を作るというのは、住宅用プロキシでよくある用途だ
    チケット転売業者が感染したユーザーの端末を使って、データセンターホストのブロックや大量アクセス制限を回避し、後で転売価値のあるチケットを入手する確率を高める
    作者、リポジトリ侵入者、または今回のような買収者を通じてバックドアが仕込まれた無料のブラウザ拡張機能や VPN アプリなどが、ユーザーの端末をこうしたプロキシに変えてしまうことがある

    • NordVPN もこうした方式を使っている
      Google と Amazon はクラウドサービス用の IP レンジを大きく保有しているため、AWS や Google Cloud ベースの bot は比較的検出しやすい
      一方で Verizon も住宅顧客に割り当てる大きな IP レンジを持っており、Netflix や Amazon のようなサービスが Verizon の IP レンジ全体をブロックしたがらない点を NordVPN が利用して、トラフィックを住宅用のように見せている
  • 静かな買収が本当に嫌いだ
    Chrome 開発者向け拡張機能も、悪意ある行為者に買い取られた後でマルウェアに変えられることが非常に多く、ひどいものだ

    • ある程度人気のある Chrome 拡張機能の管理者として、買収提案をあまりにも多く受け取るので、誰でも見られるよう公開で集め始めた
      https://chrome.google.com/webstore/detail/hover-zoom%20/pccc...
      https://github.com/extesy/hoverzoom/discussions/670
    • アプリ所有者を監視するアプリというアイデアは悪くなさそうだ
      所有者が一夜にして変わったら大きく通知する、という形でよい
    • 無料アプリの問題はここにある
      寄付しようとする人はほとんどおらず、まともな会社がアプリを買って収益化しようともしないので、結局、ユーザーを搾取しようとする最悪の会社だけが拡張機能やアプリを買っていく
      こうした無料アプリには価値があるが、開発者の収入にはつながらないため、別の道を探すことになる
    • ActionDash が Sensor Tower に買収されたことを思い出す
      システムレベルの機能を実現するには避けようもなく膨大な権限が必要だった非常に侵襲的なアプリが、広告とデータ販売の会社にすんなり渡ったのは筋が通らない
    • 何が静かだというのか分からない
      ユーザーがソフトウェアを使う際に同意した利用規約にそのまま書かれているのだから、結局は買主責任の原則のような話になる
  • macOS 内蔵の自動モードは、ユーザーがコンピュータから離れているときだけ切り替わるという説明はおかしい
    Night Shift のスケジュール/位置情報を設定してダークモードを自動にしておけば即座に切り替わるし、ランチャーや Spotlight を使うなら tell application "System Events" to tell appearance preferences to set dark mode to not dark mode のような 1 行の AppleScript でも切り替えられる

    • 私の場合はそうではない
      日没時にダークモードがオンになる確率は 25% くらいだと思う
      何年もの間、Ventura までずっとそうだったが、他の人たちはずっと完璧に動いていたのか気になる
    • NightOwl がリリースされた2018年には、こうした便利機能の一部または全部がまだ存在していなかった
  • Appleが開発者証明書を失効させたように見える
    いつ失効したのかを示す公開ログがあるのか気になる
    アプリの読み込みはブロックされたが、2つのdylibはまだ実行中で、証明書失効がすでに始まった後に起きたことだからかもしれないと思った
    ログアウトして再ログインしても実行され続けていたので、ログアウトを越えて残存するのかもしれない
    macOSファイアウォールでも、言及されていたAutoUpdateバイナリに接続の受信を許可するか尋ねるプロンプトが出たので、これらはすべてここ数日のうちに配布されたもののように見える
    再起動すると “NightOwl” will damage your computer. You should move it to the Trash. というダイアログが出て、許可しても /Users/*/Library/LaunchAgents/NightOwlUpdater.plist と通常の設定ファイルが残り、完全にはクリーンアップされなかった
    ターミナルに慣れていない非技術系ユーザーには、再起動を案内するのがよさそう

  • 私の環境ではmacOSがアプリを無効化し、開くことを拒否した
    代わりにNightFallへ切り替えた: https://github.com/r-thomson/Nightfall

    • 次の設定で、ディスプレイ設定をメニューバーに直接入れることもできる
      Settings > Control Center > Display > Always Show in Menu Bar
      ダークモードのオン/オフにはクリックが1回余計に必要だが、Night Shiftも使えて100%ネイティブ
    • 標準のAutomatorアプリで自分でとても簡単に作ることもできる
      Automatorを開いて新しいアプリケーションを作成し、“change system appearance”を選んでからライト/ダークモードの切り替えを選べばよい
      保存した後、Spotlightでそのアプリ名を開けばモードを切り替えられるし、Shortcutsでもできそう
    • モード切り替えだけが必要なら、BetterTouchToolですぐにできる
      グローバルショートカットとして右クリック+Option+Commandを割り当てているが、とてもよく動く
  • こういう種類のことには、通せる法律があるべきだと思う
    ソフトウェアは言われたとおりに動作し、まったく別のことをしないという黙示の契約があるべきで、違反時には強い罰則が必要

    • 私たちも各自でEULAを作って、相手が黙示的に同意したことにすればよさそう
      大きな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 は無効化しておくべきだからです

    • UPnP はひどい仕様ではありますが、家庭環境でインターネット接続機器が備えるべき基本的な能力を取り戻すための応急処置です
      Tailscale のようなすべての P2P アプリは、一時的にサーバーのように動作し、着信トラフィックを許可する必要があります
      この機能がないと、いわば二級市民になり、ユーザーを子ども扱いしているようなものです
      もちろんポートを自分で開けることはできますが、見つけにくく、一貫性がなく、複雑な UX のため、大多数のユーザーには手が届きにくく、ほとんどの人はポートが何かも知りません
    • 「Windows ノート PC の煩わしさが嫌だから」Mac を使っている家族のことを考えればよいでしょう
      彼らは UPnP をオフにする手間も望んでおらず、その設定は、あなたが詳しかろうが詳しくなかろうが、オンになっている可能性が高いです
    • UPnP をオフにするとより安全にはなりますが、ルーターの NAT ALG もすべてオフにしない限り、依然として危険にさらされます
      ほとんどのルーターにはそのような設定はないはずなので、感染したデバイスをセキュリティモデルに含めるなら、NAT slipstream attacks によって NAT は事実上完全に無力化されると考えるのが賢明です
      感染したデバイスはルーターの NAT テーブルを変更し、実質的に UPnP のように動作させることができますが、ユーザーが監査できる UI は提供しません
      NAT なしで IPv6 だけを使うなら、ファイアウォール例外をすべて手動で管理するつもりがある場合には UPnP の無効化は有効なセキュリティ対策になり得ますが、現在ほとんどの人にとってはホストファイアウォールだけが信頼できる保護手段です
    • UPnP の必要性そのものを完全に否定しているのかは分かりません
      かなり紛らわしい話です
  • 規約には「ユーザーのデバイスをインターネットトラフィックのゲートウェイとして使うためにネットワーク設定を変更してインターネットトラフィックを共有させ、NightOwl の顧客にはウェブ/市場調査、SEO、ブランド保護、コンテンツ配信、サイバーセキュリティ企業などが含まれる」と書かれています
    これは本当に焼き払うべきレベルです

    • 普通は、非常に怪しいことほどその事実を隠すものだと思っていました
      それなのに、これを利用規約に明記した理由が本気で気になります
      こんな怪しい機能を入れる組織なら、その事実も積極的に隠しそうなのに、規約に書いておくと NightOwl が法的に保護される理由があるのか知りたいです
      たとえば、本来なら訴えられて負ける可能性があったが規約に入っていれば大丈夫になる、という類いなのか、こうした怪しい行為も規約にさえあれば技術的には合法なのか分かりません
    • 「デバイスのネットワーク設定を変更」する権限が、本来の機能であるダークモード切り替えのために付与していた権限にすでに含まれていたように思えます
      もしそうならかなり残念で、アプリの権限がもっと細分化されるとよいと思います
    • ここで “enables” と表現しているのは、自由やプライバシー侵害ではなく機会であるかのように包み込む感じがします
    • 開発者と会社を実名公開して恥をかかせるべきです
  • Little Snitch を使うと、アプリがどの IP やアドレスに接続しているかを検知し、その接続をブロックする助けになります

    • LuLu もあります
    • 可能な限り Little Snitch にお金を払ってきました
      絶対に売却を検討しないでほしいです