プライバシーとセキュリティ
ドキュメント作成中
一部の内容はまだ不完全な場合があります。
ThinkTerm は、あなたについても、あなたのマシンについても、使い方についても何も収集しません。テレメトリーも、分析も、トラッカーもなく、そうしたデータを受け取るサーバーをプロジェクトは持っていません。1 つの更新確認を除けば、ThinkTerm がネットワークに送るものはすべて、あなたが始めたものです。
何もしなくても送られるもの
更新確認だけです。デスクトップアプリが動いているあいだ、GitHub のリリース API に新しいリリースがあるかを問い合わせます。最初は起動からおよそ 10 秒後、その後は check_for_updates_interval_seconds ごとで、既定は 1 日です。コマンドラインツール、TUI、セッションサーバーが自分から確認することはありません。
このリクエストは匿名です。あなたが THINKTERM_UPDATE_TOKEN を設定しない限り資格情報は載りません。この変数はプライベートなフォークに届くときにしか役立ちません。アプリは GITHUB_TOKEN を読まないので、ほかのツールのために export したトークンが、あなたが実行していない確認で送られることはありません。GitHub はこのリクエストをほかのリクエストと同じように見ますが、ThinkTerm の作り手には見えません。
設定に check_for_updates = false と書けば止められます。更新の流れの残りは アップデート を参照してください。
使ったときに送られるもの
| あなたがすること | 送り先 |
|---|---|
| SSH、Mosh、ThinkTerm Connect で接続する | 接続先のホスト |
ホストの OS を検出 や リモートのプログラムを識別 をオンにしておく | 同じ接続を通ってそのホストへ。ディストリビューションの確認、またはそこの ~/.config/thinkterm/ へのシェル統合のコピー |
| Web 上の画像を表示するノートを開く | 画像のアドレスが指すサーバー |
| リモートサーバーの更新に同意する | そのホストが GitHub からインストールスクリプトとリリースをダウンロードする |
thinkterm update を実行する、または アップデートをインストール を押す | リリースを取得するため GitHub へ |
| ブラウザアクセスを有効にする | あなたが作ったリンクを開いたブラウザ |
ノートの Web 上の画像は既定で読み込まれ、読み込むとそのサーバーにあなたのアドレスが伝わります。どの Web ページでも同じことです。note_remote_images_enabled = false で止められます。
プラグインはあなたがインストールしたプログラムで、ほかのプログラムと同じようにネットワークを使えます。たとえば ThinkTerm のソースにある Stocks プラグインは、Yahoo Finance から相場を取得します。ダウンロードにプラグインは含まれていません。プラグイン を参照してください。
このマシンに保存されるもの
ThinkTerm は状態をあなたのユーザーアカウントに保存します。Space、Project、Thread、SSH ホスト帳、スニペット、最近のコマンド、各種設定です。それぞれがどのシステムでどこに置かれるかは 設定 にあります。ノートの Vault はあなたが選んだフォルダーで、中身は普通の Markdown ファイルです。
端末の出力はアプリかセッションサーバーのメモリにあり、ディスクには書き込まれません。
macOS と Linux では、特に大事なファイルはあなただけが読めるモード 0600 で書き込まれます。
- 保存した SSH パスワードを暗号化する鍵、
secret.key - スニペットのファイル
- 書き出したバックアップのファイル
- ブラウザ用リスナーのトークンファイルと、その証明書と秘密鍵
- ThinkTerm が新しく作るノート(フォルダー側が独自のモードを与える場合を除く)
これでマシン上のほかのアカウントは防げますが、あなたとして動くもの — 同期クライアント、バックアップ処理、プラグイン — は防げません。それらは 0600 のファイルを ThinkTerm と同じように難なく読みます。保存したパスワードにとってそれが何を意味するかは リモート で説明しています。
Windows には相当するモードがないため、これらのファイルは置かれたフォルダーの権限を引き継ぎます。既定のユーザープロファイルなら、あなた、SYSTEM、Administrators グループです。資格情報を移動プロファイルに入れないため(一部のドメインでは、サインアウト時に Windows がそれをプロファイルサーバーへコピーします)、SSH ホスト帳とその鍵は %LOCALAPPDATA%\ThinkTerm\ssh\ に、ブラウザ用リスナーの証明書は %LOCALAPPDATA%\thinkterm\web-tls\ に置かれます。
ブラウザのページ
ブラウザアクセスは、あなたがオンにするまでオフです。オンにすると、ページ、スクリプト、フォントはすべてあなた自身のマシンから配信されます。ページがほかの誰かにリクエストを送ることはなく、使われ方が収集されることもありません。
ブラウザは、あなたが発行したトークンで入室し、トークンはリンクの一部として届きます。ページは読み込まれるとすぐにトークンをアドレスバーから取り除き、そのタブの sessionStorage に保持します。タブを閉じるとブラウザはそれを破棄します。リンクを持つ人はそのマシンであなたとしてシェルを持つことになるので、SSH 鍵と同じ資格情報です。
サーバーがトークンをディスクに保存するのは token_file が設定されている場合だけで、そうでなければメモリにあり、再起動で忘れられます。トークンごとに書き込まれるのはトークンの SHA-256 ダイジェストで、トークンそのものではありません — そのためファイルをコピーされても誰も入れません。あわせて、名前、作成日時、有効期限、最終使用日時、最後に使ったブラウザの大まかな説明("iPhone · Safari" など)が書かれます。どのデバイスのアドレスも記録されず、サーバーのログに残るのは、誰が使ったかではなく、どのトークンで入室したかです。
自己署名証明書が作られるのは、自前の証明書なしでリスナーをループバック以外にバインドしたときだけです。証明書にはマシンのホスト名とアドレスが書かれ、そのポートに接続した人なら誰でも見られます。証明書とはそういうものです。
ページはあなたの選択 — 言語、テーマ、フォントサイズ、配色、表示していた Space、パネルの幅、パレットの最近の選択 — をブラウザの localStorage、つまりそのデバイスに保存します。サイトのデータを消去すれば忘れられます。ポートに誰が届くか、証明書の確かめ方は ウェブアクセス を参照してください。
macOS の許可ダイアログ
macOS は、プログラムがしたことをそれを起動したアプリに帰属させます。ThinkTerm はシェルを起動し、シェルはあなたが実行するすべてを起動するので、保護されたものに触れるコマンド — 連絡先が保存されたフォルダーを find がたどる、カメラを開くツールを使う — は ThinkTerm の名前でダイアログを出します。ダイアログの文面もそう書いています:An application launched via ThinkTerm would like to access…。ThinkTerm 自体には、連絡先、カメラ、位置情報などに手を伸ばすコードはありません。
バックグラウンドのセッションサーバーに置いたローカル端末は、アプリではなくそのサーバーが起動し、サーバーは自分の名前 thinkterm-mux-server でアクセスを求めます。ThinkTerm に許可済みのフォルダーでも、サーバーに対してもう一度許可が要ることがあります。どちらが拒否されたかを ThinkTerm がどう伝えるかは 設定 を参照してください。
プラグイン
プラグインはあなたとして、あなたの権限で動きます。ThinkTerm はサイドバーの外には何も表示しませんが、プログラム自体を囲むサンドボックスはありません。ファイルを読み、ネットワークを使い、ほかのプログラムを実行でき、SSH で接続した端末の隣では、そのホストで同じことをするよう ThinkTerm に頼むこともできます。ほかのプログラムをインストールするときと同じように扱ってください。詳しくは プラグイン を参照してください。
セキュリティ上の問題を報告する
GitHub の非公開の脆弱性報告で、非公開に報告してください。リポジトリの Security タブを開いて Report a vulnerability を選ぶか、github.com/RoversX/ThinkTerm/security/advisories/new に直接進みます。公開の issue、discussion、pull request は開かないでください。
できるだけ次の内容を添えてください。
- バージョン(
thinkterm -Vの出力)とオペレーティングシステム - 関係する部分 — デスクトップアプリ、セッションサーバー、ブラウザアクセス、SSH や Mosh の接続、プラグインサーバー
- 再現手順、または概念実証
- 攻撃者に何ができるか、そのために先に何が必要か
1 週間以内に返信があるはずです。複雑な問題の修正にはそれ以上かかることもあり、進み具合はお知らせします。修正がリリースされるとアドバイザリーが公開され、名前を出したくない場合を除いてあなたの名前が記されます。それまでは詳細を公開しないでください。
サポートされるのは最新のリリースだけで、修正は次のリリースに入ります。報告する前に、最新版でも問題が起きることを確かめてください。
対象になるもの
リポジトリのコードはすべて対象で、ThinkTerm が WezTerm から受け継いだコードも含まれます。問題が WezTerm にも影響する場合はそう書いてください。上流にも報告できるようにするためです。
次のものは ThinkTerm の脆弱性ではありません。
- インストールしたプラグインにできること。あなたがインストールし、あなたとして動くプログラムです。
- 有効なブラウザトークンをすでに持つ人、あなたの ThinkTerm のデータを読める人、あなたとしてログインできる人によるアクセス。トークンと、保存したパスワードを守る鍵は資格情報です。
- ThinkTerm が実行するだけのプログラム、たとえばシェル、
ssh、moshの問題。
ほかの入手元のビルド
ここまでの内容は、ThinkTerm のソースと、ThinkTerm 自身のリリース手順で GitHub に公開されたビルドについてのものです。ほかの場所で入手したビルドは、違う動きをするよう変更されているかもしれません。
