זיהוי רשתות בוטים בטוויטר

נעם רותם ויובל אדם

בוטים / אווטארים /

בובות גרב / כימרות

מתודולוגיה

  • הפניה לחשבונות חשודים
  • אישור חשבונות לצורך שימוש API
  • זיהוי צבירים חשודים
  • מחקר ידני ואוטומטי

תקציר הפרקים הקודמים - הרשת הטורקית

תוכן

מטא-דאטה מחשיד

חריקות שפה ותרבות

אנשי קש

רשת חשודה

רשת אורגנית

ציטוטים במדיה

תוכן

הקשר הטורקי

תוצאות

  • דיווח לטוויטר
  • 142 חשבונות נסגרו

כנסיית האל הכל יכול

רשת הבנות החדשה

עיתונאים - אוכלוסיה בסיכון גבוה

קמפיין פייק ניוז

קמפיין פייק ניוז

חשבון פייק חד-פעמי

  • חשבון בעל ותק של מספר שנים
  • נקנה מרשת ספאם
  • מוסב לאוואטר "לגיטימי"
  • טירגוט עיתונאים במינשונים וDM

אי-התאמת עוקבים

תשתית טכנית

איסוף נתונים מטוויטר

  • Python
  • PostgreSQL
  • SQLAlchemy
  • Celery

Lifecycle

  • קריאות API לטוויטר
  • שמירת המידע
  • תיוג
  • יצוא דוחות (CSV, XLS)
  • ממשק ניתוח לאנליסטים
  • ויזואליזציות Gephi

מודל לדוגמה

class User(Base):
    __tablename__ = 'users'

    id = Column(String(20), primary_key=True)
    name = Column(String(15), nullable=False)
    full_name = Column(Text)
    description = Column(Text)
    created = Column(DateTime)
    location = Column(Text)
    protected = Column(Boolean)

    followers_count = Column(Integer)
    friends_count = Column(Integer)
    favourites_count = Column(Integer)
    statuses_count = Column(Integer)
    listed_count = Column(Integer)

    imported = Column(DateTime(timezone=True), default=func.now())
    updated = Column(DateTime(timezone=True), onupdate=func.now())

    tags = Column(ARRAY(Text), nullable=False,
        default=cast(array([], type_=Text), ARRAY(Text)))

    followers = relationship('User', secondary=follows,
        primaryjoin=id == follows.c.to_id,
        secondaryjoin=id == follows.c.from_id,
        order_by=follows.c.id,
        backref='friends', lazy='subquery')

    tweets = relationship('Tweet',
        primaryjoin='User.id == foreign(Tweet.user_id)',
        backref='user', lazy='subquery', viewonly=True)

    __table_args__ = (
        Index('ix_user_name_lower', func.lower('name')),
        Index('ix_user_tags', tags, postgresql_using='gin'),
    )

ספיחים לפרוייקט

מלכודת דבש

דוקסינג

איסוף נתונים

  • Browser fingerprinting
  • WebRTC de-anonymization
  • IP leakage

כיוונים להמשך

  • קמפיין מימון המונים
  • הרחבת האיסוף והניתוח

שאלות?

Twitter Dev Conf

By Yuval Adam

Twitter Dev Conf

  • 1,541