pattern-of-life-from-socials について
デューデリジェンスなどの調査向けに、許可された範囲で公開ソーシャルアカウントを分析するワークフローです。アカウント情報、ネットワーク、メディア、投稿時刻を調べ、出典を示して所見を評価します。
主な機能
- 01許可範囲、目的、停止条件の設定
- 02アカウント識別子と履歴の分析
- 03ソーシャルネットワークの把握
- 04メディア情報と時間パターンの確認
- 05出典の引用と所見の評価
活用シーン
- 01取引先担当者の公開情報の確認
- 02アカウント間の関連と交友関係の分析
- 03投稿時刻や場所の手掛かりの整理
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ useosint/ skills --skill pattern-of-life-from-socialsインストール後、Claude Code で/pattern-of-life-from-socialsを入力して読み込まれたか確認します。
同梱ファイルreference/analytic-checklist.mdreference/platform-disclosure.md
詳細
ソーシャルメディアから生活パターンを分析する
生活パターン分析では、散在する公開投稿を、ある人物がいつ、どこに、誰といるのかを示すモデルにまとめます。このリポジトリで最も悪用されやすい手法です。同じ手法で、デューデリジェンス報告書もストーキング用の個人情報ファイルも作成できます。その違いは、調査の手腕ではなく、権限と範囲です。初心者が陥りがちな誤りは、投稿を分析するのではなく集めてしまうことです。フィードのスクリーンショットはインテリジェンスではありません。アカウントのメタデータ、ネットワーク、コンテンツ、時間的な行動の4つの層を調べてください。最初と最後の層は、誰もが飛ばしがちであり、対象者が取り繕えない2つの層でもあります。
ステップ1 — 許可された範囲
../../ETHICS.mdを読み、プロフィールを1つでも開く前に、次の項目を書き出してください。
- 対象者 — アカウントと、その背後にいると考えられる現実世界の主体。
- 目的 — 調査を終わらせる問い。「生活パターン」は問いではありません。「このベンダーのEU担当者は実際にEUに住んでいるのか」は問いです。
- 範囲内/範囲外 — 明確に定めてください。未成年者、無関係な家族、自宅住所、健康、宗教、性的指向、在留資格は、目的上必要であり、その必要性を説明できる場合を除き、範囲外です。
- 調査姿勢 — 観察のみか、許可されたやり取りを行うのか。フォロー、いいね、メッセージの送信、ストーリーの閲覧はいずれもやり取りです。
- 管轄区域 — 自分のもの、対象者のもの、プラットフォームのもの。
- 終了条件 — 目的の答えが得られたとき、調査の手が無関係な第三者に及んだとき、または残る問いが「どこで寝ているのか」だけになったときに終了します。
完了条件 — 6項目すべてが案件ファイルに記録されていること。
ステップ2 — 閲覧用のアカウントを選び、記録を保全する
ログアウト状態では漏れる情報が少なく、閲覧できる情報も少なくなります。ログイン状態ではより多くを閲覧できますが、漏れる情報も増えます。プラットフォームによっては、ストーリーの閲覧やプロフィールへのアクセスが対象者に通知されます。また、レコメンデーションシステムによって、互いのアカウントを閲覧したアカウントが表示されることがあります。そのため、閲覧しただけでも、調査用アカウントが対象者へのおすすめに表示される可能性があります。investigate-without-getting-madeを参考に、そのトレードオフを判断してください。対象者の情報を、個人アカウントや勤務先のアカウントから閲覧してはいけません。
次に、分析する前に記録を保存します。調査中にアカウントがロックされたり、投稿が削除されたりすることがあります。誰かに気づかれたことが原因の場合も少なくありません。read-deleted-pagesを使って、プロフィールと引用する可能性のあるすべての投稿をアーカイブし、過去のスナップショットも取得してください。過去のプロフィール文、リンク、ハンドルが残っていることはよくあります。メディアはローカルに保存してください。
完了条件 — 閲覧用のアカウントが記録され、引用する予定のすべての情報が、アーカイブURLまたは取得日時付きのローカルファイルとして存在していること。
ステップ3 — 第1層:アカウントのメタデータ
対象者自身が選んだものではない情報を調べます。プラットフォームごとの詳しい仕様はプラットフォーム情報開示マトリックスに記載されています。
- 作成日。 プラットフォームによっては明示され、別のプラットフォームでは推定できます。Snowflake形式の64ビットIDは、上位ビットにミリ秒単位のタイムスタンプを格納しており、プラットフォーム固有のエポックからのオフセットとして表されます。つまり、IDそのものが登録時刻です。単純な連番IDからは登録順がわかるため、作成時期がわかっているアカウントと照合して日付を絞り込めます。
- 数値ID。 ハンドルを変更しても残るため、永続的な識別子として使うべきなのはハンドルではなく数値IDです。記録してください。
- ハンドルの履歴。 履歴機能があることはまれですが、過去のメンション、外部からのリンク、アーカイブされたスナップショット、放置されたクロスポストから、通常は復元できます。空いたハンドルは見知らぬ人に再取得される可能性があるため、古いリンクがあっても、現在の管理者が誰かは証明できません。
- 認証とリンク済みアカウント。 バッジが有料か、本人確認済みかによって、その価値は変わります。リンク先のサイトやビジネスアカウントの連絡先欄から、個人プロフィールには掲載されていないメールアドレスや電話番号が明らかになることがあります。
完了条件 — ID、作成日、ハンドルの履歴、リンクされたすべての識別子が、出典とともに記録されていること。
ステップ 4 — 第 2 層:ネットワーク
本人の OPSEC は、親族にタグ付けされればほとんど意味がありません。
- 初期のフォロワー。 個人アカウントを最初にフォローするアカウントは、その大半が家族、学校の友人、同僚です。アカウントにリーチが生まれる前に、口コミで広まっていたためです。フォロワーの順序を確認できる場合、古い時期のフォロワーほど、そのページで最も価値の高い対象セグメントです。
- 相互フォローのクラスター。 相互のつながりは、現実世界のコミュニティ、つまり勤務先、学校の同期、出身地、クラブを示します。見つけるべきものはクラスターであり、単一のつながりではありません。
- タグ付けの方向。 本人が誰にタグ付けするかは本人が選べます。しかし、誰が本人をタグ付けするかは選べません。オープンな投稿をするいとこからのタグ付けで、鍵をかけた本人が伏せていた誕生日、家、車、勤務先が明らかになることはよくあります。
- 返信の速さ。 フォロワー数にかかわらず、数分以内に確実にコメントするアカウントは親しい人たちです。
これをリストではなく、graph-the-network で構築します。
完了条件: 親しい人たち、現実世界のクラスターを 1 つ、本人について情報を漏らす第三者を特定し、評価できていること。
ステップ 5 — 第 3 層:コンテンツ
各写真の主題だけでなく、意図せず写り込んだ内容も確認します。窓、鏡、眼鏡、暗い画面への反射、写真に写ったノート PC やスマートフォンの画面、搭乗券、荷物のラベル、イベント用バッジなどの書類、車両、ナンバープレート、ディーラーフレーム、駐車許可証に注目してください。背景が繰り返し現れることで、部屋が「どこか」から「自宅」や「職場」へと特定されます。出現回数を数え、日付の範囲を記録してください。
ダウンロードしたすべてのデータに対して secrets-in-file-metadata を実行します。EXIF を削除するかどうかはプラットフォームによって異なり、同じプラットフォームでも、インライン画像からは削除する一方で、ファイル添付やオリジナル品質のダウンロードでは保持することがあります。
位置の特定自体は geolocate-from-pixels で行います。都合がよすぎるように見えるものは、is-this-photo-real で妥当性を確認してください。
完了条件: 位置の手掛かりとなる各成果物に、投稿 URL、日付、位置特定作業への参照が記録されていること。
ステップ 6 — 第 4 層:時間的行動
すべての投稿のタイムスタンプを抽出して表にまとめ、時間帯別と曜日別にグラフ化します。抽出用のスキーマは分析チェックリストにあります。
およそ 7 ~ 9 時間続く連続した空白は睡眠時間帯で、その位置から UTC オフセットが分かります。大陸を区別するには十分ですが、近隣地域を区別するには不十分です。平日の営業時間中に投稿が減るなら、デバイスへのアクセスが制限された仕事に就いていることが示唆されます。反対に、営業時間中に投稿が増えるなら、交代勤務やオンラインで過ごす仕事が示唆されます。複数日にわたる急なオフセットの変化は、旅行を示します。
この分析を損なうのは、本人がどこにいても固定された現地時刻で投稿する予約投稿ツールです。この場合、測定されるのは人間ではなく予約投稿ツールの動作です。また、プラットフォームは閲覧者のロケールでタイムスタンプを表示することがあり、編集時刻が記録される場合もあります。さらに、クロスポストの連携や共有チームアカウントによって複数人の動きが 1 つのヒストグラムに混在することもあります。投稿パターンを読み取る前に、手動で投稿されていることを確認してください。
完了条件: 明示されたサンプル期間における両方の分布があり、推定された UTC オフセットとその信頼度が明記されていること。
ステップ 7 — 統合して報告する
証拠に基づいてアカウントを関連付けます。同じアバターファイル、同じプロフィールリンクの誘導先、フォロワー集合の重複、整合するヒストグラムなどが根拠になります。文体だけでは手掛かりにとどまり、関連付けの根拠にはなりません。その後、write-the-intel-brief を実行します。すべての主張に投稿またはアーカイブの URL と日付を付け、時間に関するすべての結論にサンプル期間とサンプル数を明記します。
完了条件: 引用のない主張がなく、評価のない推論がないこと。
ここで誤りが生じる理由
- サンプルバイアス。 読んでいるのは、その人の人生のうち本人が公開した一部です。沈黙は「投稿しなかった」という意味であり、「そこにいなかった」という意味では決してありません。
- 投稿日と出来事の日付のずれ。 投稿日は、出来事の日付の上限にすぎません。写真は数か月後に投稿されたり、再投稿されたり、まったく別の人から転載されたりします。
- アカウントは本人ではありません。 ハンドルは売買、相続、ハッキング、再利用されるため、長い履歴の途中で所有者が変わっていることがあります。パートナー、アシスタント、代理店が本人になりすまして投稿することもあります。1つのヒストグラムに2つの行動パターンが見られる場合は、通常、2人の人間が関わっています。
- 自己申告は演出されています。 場所、役職、交際状況は宣伝文句です。よくある名前と一致する都市は、本人だと裏付ける証拠ではなく、偶然の一致を生みやすい要素です。
- 表示の違い。 タイムスタンプ、フォロワーの並び順、共通のフォロワーを示す表示はログイン状態によって変わり、正確ではなく「2時間前」「先週」のような概算であることもよくあります。
- 観察によって対象が変化します。 調査の途中でアカウントを非公開にした場合、あなたの調査に気づいた可能性があります。
調査結果の評価
- 確認済み — 権威ある記録がある、または本人が明言している、もしくは種類の異なる2つの独立した証拠が一致している場合です(別のアカウントからのタグ付けと、位置情報が特定できる背景など)。両方ともアーカイブされています。
- 可能性が高い — 同じ種類の一貫したシグナルが複数ある、または強いシグナルが1つあり、それに反する情報がない場合です。たとえば、繰り返し映る背景に加えて、そこに住んでいると考えて矛盾しない時間的パターンがある場合です。
- 未確認 — 情報源が1つだけ、自己申告、文体に基づくもの、またはサンプルが少なすぎるものです。投稿が数十件以下の場合、タイムゾーンの推定は、例外なく未確認です。
一文で説明できない仮定に基づくものは、すべて評価を下げてください。
例
目的:契約要件に従い、サプライヤーの「EU事業責任者」がヨーロッパにいることを確認します。
プロフィールにはリスボンとあります。数値IDをデコードすると、会社が設立される何年も前に登録されていることがわかります。つまり、プロフィールの記載は現在について何も示していません。4か月分のタイムスタンプは14:00~05:00 UTCに集中し、06:00~13:00は投稿がありません。睡眠時間は09:00 UTC付近が中心で、リスボンとは合わず、南北アメリカとは整合します。ここで行き詰まりました。位置情報タグは一切なく、プラットフォームはダウンロードしたすべてのファイルからEXIF情報を削除していました。
ネットワーク層が手がかりになります。初期のフォロワーは米国のある州立大学の関係者に集中しており、親族が、本人がポルトガルにいると公に主張していた日に、本人を地元の有名レストランでタグ付けしていました。繰り返し映るキッチンの背景は、その日の前後両方に登場しています。評価は可能性が高いです。本人がどこにいたかを示す権威ある記録はなく、ヒストグラムでは隣接する国を区別できません。報告ではサンプル期間を明記しています。
次の調査先
| 現在あるもの | 次に調べるもの |
|---|---|
| ハンドルとそのバリエーション | hunt-a-handle |
| アバター、バナー、投稿された写真 | find-the-original-image, is-this-photo-real |
| 場所や時間の特定が必要な写真 | geolocate-from-pixels |
| ダウンロードしたメディアファイル | secrets-in-file-metadata |
| 公開されたメールアドレス/電話番号 | what-an-email-reveals, whose-number-is-this, what-leaked-about-you |
| 複数の情報で裏付けられた個人名 | find-anyone |
| 勤務先、ブランドページ、プロフィール欄のリンク先ドメイン | x-ray-a-company, recon-a-domain-passively |
| フォロワーと相互フォローのつながり | graph-the-network |
| 削除または編集された投稿 | read-deleted-pages |
| 投稿に登場する航空機または船舶 | track-planes-and-ships |
| ウォレットアドレスまたはENS名 | follow-the-crypto |
法律と利用規約
プロフィールやフォロワーのデータを自動収集することは、事実上すべての主要プラットフォームの利用規約に違反し、一部の法域ではコンピューターの不正使用として訴訟の対象になっています。一方、公開コンテンツを手動で閲覧することは、一般に違反にはなっていません。対象者を閲覧するためにアカウントを作成することは、少なくとも利用規約上の問題となり、アクセスを得るために身元を偽れば詐欺の問題にもなります。
GDPRや同等の規制体制では、「一般公開されている」こと自体は適法な処理根拠にはならず、個人の居場所や日課のプロファイリングは高リスクの処理です。政治的意見、健康、宗教、性的指向、労働組合への加入は特別カテゴリに該当します。対象範囲外の情報が偶然見つかった場合は、記録しないでください。そして重要な点として、個人の居場所や日課を継続的に監視する行為は、多くの法域で法定のストーキングの定義に該当し、公開情報を情報源にしても免責にはなりません。権限、文書化された目的、停止条件があって初めて、この作業は適法となります。