ניתוח גרף מכשירים: חיבור הנקודות בין סשנים
כיצד מסדי נתונים גרפיים חושפים קשרים סמויים בין מכשירים, ומאפשרים זיהוי ריבוי חשבונות ואיתור רשתות הונאה בקנה מידה גדול.
כאשר רמאי בודד מפעיל עשרות חשבונות, החשבונות הבודדים נראים לגיטימיים כשבוחנים כל אחד בנפרד. לכל אחד יש כתובת אימייל ייחודית, כתובת IP סבירה ודפוסי גלישה מציאותיים. איתור מסורתי מבוסס‑כללים בודק כל חשבון באופן עצמאי ולא מוצא דבר חשוד. הקשרים בין החשבונות — המכשירים המשותפים, הסשנים החופפים, טביעות האצבע הרשתיות המשותפות — בלתי נראים למערכות שמעבדות חשבונות אחד‑אחד.
למה גרפים
ניתוח גרף מכשירים משנה את המודל. במקום להעריך חשבונות באופן עצמאי, אנו בונים גרף שבו הצמתים הם מכשירים, חשבונות, כתובות IP וסשנים, והקשתות מייצגות קשרים שנצפו: "המכשיר הזה שימש ליצירת החשבון הזה", "כתובת ה‑IP הזו נצפתה יחד עם המכשיר הזה", "שני החשבונות האלה חלקו עוגיית סשן". הגרף חושף מבנה שטבלאות שטוחות אינן יכולות לחשוף.
רשת הונאה שמשתמשת ב‑50 חשבונות על פני 5 מכשירים ו‑3 כתובות IP יוצרת אשכול ייחודי בגרף. צפיפות האשכול — קשרים רבים בתוך קבוצה קטנה של צמתים — היא אות חזק. משתמשים לגיטימיים לעיתים רחוקות חולקים מכשירים עם זרים, וקשרי החשבון‑מכשיר שלהם יוצרים מבנים דלילים ודמויי‑עץ ולא אשכולות צפופים.
ארכיטקטורת מסד הנתונים הגרפי
אנו משתמשים במודל property graph עם ארבעה סוגי צמתים: Device (המזוהה לפי visitor ID), Account (מזהה המשתמש שלכם), Network (כתובת IP + ASN) ו‑Session (אירוע זיהוי בודד). הקשתות נושאות מטא‑דאטה: חותמת זמן, ציון ביטחון וסוג אירוע.
הגרף נשמר באינדקס שכנות ייעודי המותאם למעברים בשני צעדים. כאשר מגיע אירוע זיהוי חדש, אנו מכניסים את האירוע כצומת Session, מחברים אותו לצמתי ה‑Device וה‑Network, ובודקים אם לחשבון מקושר כלשהו יש קשרים למכשירים אחרים. פעולת ההכנסה‑ושאילתה הזו מסתיימת בפחות מ‑5ms עבור גרפים עם עד 10 מיליון צמתים.
למעשה ניסינו קודם Neo4j. הוא עבד מצוין בפיתוח עם 100K צמתים. ואז טענו נתוני ייצור — 500M צמתים — ושאילתות Cypher שלקחו 2ms התחילו לקחת 800ms. דיוויד בילה שבוע בבנצ'מרקינג של חלופות לפני שבנינו אינדקס שכנות משלנו הנשען על RocksDB מחולק לשארדים. לפעמים הפתרון המשעמם והמותאם‑אישית מנצח את הפתרון האלגנטי המוכן מהמדף.
אלגוריתמי אשכול
אנו מיישמים שני אלגוריתמי אשכול על גרף המכשירים:
רכיבים קשירים (Connected Components)
הגישה הפשוטה ביותר: מציאת כל הצמתים הנגישים ממכשיר נתון. אם Device A מחובר ל‑Account 1 ול‑Account 2, ו‑Device B מחובר גם הוא ל‑Account 2, אז Device A ו‑Device B נמצאים באותו רכיב קשיר. כך מזוהים כל החשבונות החולקים קשר מכשיר טרנזיטיבי כלשהו.
רכיבים קשירים מהירים לחישוב, אך עלולים לייצר אשכולות גדולים מאוד כאשר מכשירים משותפים לגיטימיים (מחשבים משפחתיים, עמדות בספרייה) יוצרים גשרים בין חשבונות שאינם קשורים. אנו מטפלים בכך באמצעות שקלול קשתות — קשרים דרך סביבות משותפות ידועות מקבלים משקל נמוך יותר.
זיהוי קהילות (Community Detection)
לניתוח מעודן יותר, אנו מריצים זיהוי קהילות בשיטת Louvain על הגרף המשוקלל. אלגוריתם זה מחלק את הגרף לקהילות שבהן הקשרים בתוך הקהילה צפופים והקשרים בין הקהילות דלילים. רשתות הונאה יוצרות קהילות צפופות גם כאשר הן מחוברות לגרף הרחב יותר דרך תשתית משותפת.
אלגוריתם Louvain רץ בזמן ריצה של O(n log n), מה שהופך אותו למעשי עבור גרפים עם מיליוני צמתים. אנו מריצים אותו באופן אינקרמנטלי — כאשר נוספות קשתות חדשות, אנו מעדכנים את שיוכי הקהילות באופן מקומי במקום לחשב מחדש את כל החלוקה.
דפוס מהעולם האמיתי: איתור רשת הונאה
פלטפורמת גיימינג שילבה את ה‑API של גרף המכשירים שלנו כדי לאתר רשתות הונאה מאורגנות. כבר בשבוע הראשון חשף הגרף אשכול של 127 חשבונות המחוברים דרך 8 מכשירים ו‑4 כתובות IP. החשבונות נוצרו על פני תקופה של 3 חודשים, כל אחד עם אימייל ייחודי ופרופיל מציאותי. איתור מבוסס‑כללים סימן אפס מהם.
מבנה הגרף היה הסימן המסגיר: 127 חשבונות החולקים 8 מכשירים מייצרים ממוצע של 15.8 חשבונות למכשיר. משתמשים לגיטימיים ממצעים 1.2 חשבונות למכשיר בפלטפורמה הזו. צפיפות האשכול הייתה פי 47 מעל הבסיס — אות הונאה חד‑משמעי.
ביצועים בקנה מידה גדול
גרף המכשירים בסביבת הייצור שלנו מתמודד עם 2.3 מיליארד צמתים ו‑8.1 מיליארד קשתות. השהיית ההכנסה היא 2.4ms ב‑p99. מעבר בשני צעדים (מציאת כל החשבונות המחוברים למכשיר דרך נתיב כלשהו באורך 2) מסתיים ב‑4.1ms ב‑p99. עדכוני זיהוי הקהילות מעבדים 50,000 קשתות חדשות בשנייה.
הגרף מחולק לשארדים לפי hash של מזהה המכשיר על פני 12 צמתים, כאשר כל שארד מחזיק כ‑190 מיליון צמתים. מקדם שכפול של 3 מבטיח זמינות. אנו יוצרים snapshot של הגרף מדי שעה לצורך התאוששות מאסון, ומריצים חישוב מלא מחדש של זיהוי הקהילות מדי יום כבדיקת עקביות מול העדכונים האינקרמנטליים.
אינטגרציה
גרף המכשירים נגיש דרך שני ממשקים: API לשאילתות בזמן אמת עבור בדיקות בודדות (האם המכשיר הזה מחובר לחשבונות אחרים?) ו‑API לייצוא באצ'ים עבור אנליטיקה (תן לי את כל האשכולות עם יותר מ‑N חשבונות). ה‑API בזמן אמת מיועד להחלטות הונאה מוטמעות (inline) — שאילתה בזמן יצירת החשבון כדי לבדוק אם המכשיר ראה חשבונות אחרים. ה‑API של הבאצ'ים מזין את תהליכי החקירה של צוות הנתונים שלכם.