تحليل الرسم البياني للأجهزة: ربط النقاط عبر الجلسات
كيف تكشف قواعد بيانات الرسوم البيانية الروابط الخفية بين الأجهزة، مما يتيح اكتشاف الحسابات المتعددة وتحديد شبكات الاحتيال على نطاق واسع.
عندما يدير محتال واحد عشرات الحسابات، تبدو الحسابات الفردية مشروعة عند النظر إليها بمعزل عن غيرها. فلكل منها بريد إلكتروني فريد، وعنوان IP معقول، وأنماط تصفح واقعية. يفحص الاكتشاف التقليدي القائم على القواعد كل حساب على حدة فلا يجد شيئًا مريبًا. أما الروابط بين الحسابات — الأجهزة المشتركة، والجلسات المتداخلة، وبصمات الشبكة المشتركة — فتكون غير مرئية للأنظمة التي تعالج الحسابات واحدًا تلو الآخر.
لماذا الرسوم البيانية
يغيّر تحليل الرسم البياني للأجهزة النموذج. فبدلًا من تقييم الحسابات على نحو مستقل، نبني رسمًا بيانيًا تكون فيه العُقد أجهزةً وحساباتٍ وعناوين IP وجلسات، وتمثّل الحواف روابط مرصودة: «استُخدم هذا الجهاز لإنشاء هذا الحساب»، و«رُصد عنوان IP هذا مع هذا الجهاز»، و«تشارك هذان الحسابان ملف تعريف ارتباط جلسة». يكشف الرسم البياني بنيةً لا تستطيع الجداول المسطحة كشفها.
إن شبكة احتيال تستخدم 50 حسابًا عبر 5 أجهزة و3 عناوين IP تشكّل عنقودًا مميزًا في الرسم البياني. وكثافة العنقود — روابط كثيرة داخل مجموعة صغيرة من العُقد — إشارة قوية. فالمستخدمون الشرعيون نادرًا ما يتشاركون الأجهزة مع الغرباء، وتشكّل روابط الحساب-الجهاز لديهم بنى متناثرة شبيهة بالشجرة بدلًا من العناقيد الكثيفة.
بنية قاعدة بيانات الرسم البياني
نستخدم نموذج رسم بياني بالخصائص بأربعة أنواع من العُقد: الجهاز (يُعرَّف بمعرّف الزائر)، والحساب (معرّف المستخدم لديك)، والشبكة (عنوان IP + ASN)، والجلسة (حدث تعريف فردي). وتحمل الحواف بيانات وصفية: الطابع الزمني، ودرجة الثقة، ونوع الحدث.
يُخزَّن الرسم البياني في فهرس جوار مبني لهذا الغرض ومُحسَّن للاجتياز بقفزتين. عند وصول حدث تعريف جديد، ندرج الحدث بوصفه عقدة جلسة، ونصله بعقدتي الجهاز والشبكة، ونتحقق مما إذا كان أي حساب مرتبط له روابط بأجهزة أخرى. تكتمل عملية الإدراج والاستعلام هذه في أقل من 5 مللي ثانية للرسوم البيانية التي تصل إلى 10 ملايين عقدة.
جرّبنا Neo4j أولًا في الواقع. عمل بشكل رائع في بيئة التطوير مع 100 ألف عقدة. ثم حمّلنا بيانات الإنتاج — 500 مليون عقدة — فبدأت استعلامات Cypher التي كانت تستغرق 2 مللي ثانية تستغرق 800 مللي ثانية. أمضى David أسبوعًا في قياس أداء البدائل قبل أن نبني فهرس الجوار الخاص بنا مدعومًا بـ RocksDB المجزأة. في بعض الأحيان يتغلّب الحل المخصص الممل على الحل الجاهز الأنيق.
خوارزميات التجميع العنقودي
نطبّق خوارزميتَي تجميع عنقودي على رسم الأجهزة البياني:
المكوّنات المتصلة
النهج الأبسط: إيجاد جميع العُقد التي يمكن الوصول إليها من جهاز معيّن. فإذا كان الجهاز A متصلًا بالحساب 1 والحساب 2، وكان الجهاز B متصلًا أيضًا بالحساب 2، فإن الجهازين A وB يقعان في المكوّن المتصل نفسه. يحدّد هذا جميع الحسابات التي تتشارك أي رابط جهاز متعدٍّ.
سريعة الحساب هي المكوّنات المتصلة، لكنها قد تنتج عناقيد كبيرة جدًا عندما تنشئ الأجهزة المشتركة الشرعية (حواسيب العائلة، أجهزة المكتبات) جسورًا بين حسابات غير مرتبطة. نعالج هذا بترجيح الحواف — إذ تحصل الروابط عبر بيئات مشتركة معروفة على وزن أقل.
اكتشاف المجتمعات
لتحليل أدقّ، نشغّل اكتشاف مجتمعات Louvain على الرسم البياني المرجّح. تقسّم هذه الخوارزمية الرسم البياني إلى مجتمعات تكون فيها الروابط داخل المجتمع كثيفة والروابط بين المجتمعات متناثرة. تشكّل شبكات الاحتيال مجتمعات متماسكة حتى عندما ترتبط بالرسم البياني الأوسع عبر بنية تحتية مشتركة.
تعمل خوارزمية Louvain بزمن O(n log n)، مما يجعلها عملية للرسوم البيانية ذات ملايين العُقد. نشغّلها تدريجيًا — فعند إضافة حواف جديدة، نحدّث إسنادات المجتمعات محليًا بدلًا من إعادة حساب التقسيم بالكامل.
نمط من العالم الواقعي: اكتشاف شبكات الاحتيال
دمجت إحدى منصات الألعاب واجهة برمجة تطبيقات رسم الأجهزة البياني لدينا لاكتشاف شبكات الاحتيال المنظّمة. وخلال الأسبوع الأول، كشف الرسم البياني عنقودًا من 127 حسابًا متصلة عبر 8 أجهزة و4 عناوين IP. أُنشئت الحسابات على مدى فترة 3 أشهر، ولكل منها بريد إلكتروني فريد وملف شخصي واقعي. لم يرصد الاكتشاف القائم على القواعد أيًّا منها.
كانت بنية الرسم البياني هي الدليل الفاضح: 127 حسابًا تتشارك 8 أجهزة يُنتج متوسطًا قدره 15.8 حساب لكل جهاز. ويبلغ متوسط المستخدمين الشرعيين 1.2 حساب لكل جهاز على هذه المنصة. وكانت كثافة العنقود أعلى 47 ضعفًا من خط الأساس — إشارة احتيال لا لبس فيها.
الأداء على نطاق واسع
يتعامل رسم الأجهزة البياني في الإنتاج لدينا مع 2.3 مليار عقدة و8.1 مليار حافة. زمن الإدراج 2.4 مللي ثانية عند p99. ويكتمل الاجتياز بقفزتين (إيجاد جميع الحسابات المتصلة بجهاز عبر أي مسار بطول 2) في 4.1 مللي ثانية عند p99. وتعالج تحديثات اكتشاف المجتمعات 50000 حافة جديدة في الثانية.
يُجزَّأ الرسم البياني حسب تجزئة معرّف الجهاز عبر 12 عقدة، إذ يحمل كل جزء نحو 190 مليون عقدة. ويضمن عامل تكرار قدره 3 التوافر. ونلتقط لقطة للرسم البياني كل ساعة للتعافي من الكوارث، ونشغّل إعادة حساب كامل لاكتشاف المجتمعات يوميًا بوصفها فحص اتساق مقابل التحديثات التدريجية.
التكامل
يمكن الوصول إلى رسم الأجهزة البياني عبر واجهتين: واجهة برمجة تطبيقات للاستعلام في الوقت الفعلي لعمليات البحث الفردية (هل هذا الجهاز متصل بحسابات أخرى؟)، وواجهة برمجة تطبيقات للتصدير على دفعات لأغراض التحليلات (أعطني جميع العناقيد التي تضم أكثر من N حسابًا). صُمّمت واجهة الوقت الفعلي لقرارات الاحتيال المضمّنة — استعلِم أثناء إنشاء الحساب للتحقق مما إذا كان الجهاز قد شاهد حسابات أخرى. أما واجهة الدفعات فتغذّي مسارات عمل التحقيق لدى فريق البيانات لديك.