26 באוגוסט 2026

איך אפשר לדעת אם אתם בבית, אם המסך שלכם כבוי או אם אתם בשיחה - בלי שתדעו?

מימוש מעשי של מחקר “Careless Whisper” לזיהוי מצב המשתמש באמצעות Silent Delivery Receipts ב־WhatsApp, בתוך כלי קוד פתוח של טל בארי

brandbird

אז הכול התחיל כשראיתי את הציוץ הזה של טל בארי, שבו הוא שיתף קישור לכלי קוד פתוח שהוא יצר שמאפשר לאסוף מידע על משתמשי WhatsApp כמו מספר המכשירים המחוברים לחשבון, סוג המכשיר, הסטטוס שלו ועוד.

זה היה מעניין בפני עצמו, אבל מיד נזכרתי במחקר שקראתי לפני זמן מה, שהראה שאפשר להסיק מידע נוסף על פעילות המשתמש למשל, האם מסך הטלפון שלו כבוי או דלוק, האם הוא מחובר ל־Wi-Fi או לרשת סלולרית, ואפילו האם הוא נמצא בשיחה.

איך זה מתבצע?

אחרי שיודעים כמה מכשירים מחוברים לחשבון הודות לפרויקט הנהדר שפיתח טל אפשר לעבור לשלב הבא. אבל לפני כן, צריך להבין איך מנגנון ההודעות בWhatsApp עובד.

ששולחים הודעה בWhatsApp, היא מגיעה קודם לשרת , ואז מתקבל ✓ אחד. רק לאחר שההודעה מתקבלת אצל המכשיר של המשתמש מופיעים ✓✓.

על פניו, מדובר בפיצ'ר תמים שחושף בסך הכול מתי ההודעה נמסרה. אבל ברגע שמתחילים למדוד כמה זמן לוקח להודעה לעבור מהשרת ועד למכשיר, המידע הזה הופך להרבה יותר מעניין.

אז החוקרים שלחו למשתמש הודעות בתדירות גבוהה מאוד, ומדדו את ה־RTT - Round-Trip Time, כלומר הזמן שעובר מרגע שליחת ההודעה ועד לקבלת האישור שהיא נמסרה למכשיר,

image

למשל, בגרף אפשר לראות את התוצאות בפועל. כל נקודה כחולה מייצגת מדידת RTT כלומר, הודעה שנשלחה למשתמש והזמן שנמדד עד לקבלת אישור המסירה.

בחלק הראשון של הגרף, כשהמסך של המכשיר כבוי, אפשר לראות שה־RTT גבוה יחסית, ובמקרים רבים עולה על 1,000ms. ברגע שהתקשרתי למשתמש, התמונה השתנתה בצורה די ברורה: ה־RTT צנח משמעותית, והנקודות הכחולות התרכזו סביב ערך נמוך ויציב יותר.

ההבדל הזה הוא בדיוק מה שהופך את המדידה התמימה לכאורה למעניינת השינוי בזמני המסירה יכול לשמש כאינדיקציה למצב המכשיר.

עוד תמונה נוספת:

image

עכשיו אתם בטח שואלים את עצמכם, אם נשלח למשתמש הודעות בתדירות כל כך גבוהה, הוא לא ישים לב שמשהו חשוד קורה? אז במקום להספים בהודעות אנחנו במקום פשוט שמים תגובה (Reaction) להודעה למשל ❤️ הבעיה בזה היא שיש צורך שהיה היסטוריה של הודעות בין התוקף למשתמש, או שלפחות תישלח הודעה אחת.

אנחנו פותרים את הבעיה הזאת באמצעות הפרויקט של טל בארי, שמאפשר לגלות את המכשירים המחוברים לחשבון ובנוסף לבצע תגובה להודעה שאינה קיימת (Silent Ping), כך שהמשתמש לא מודע בכלל למתקפה.

image

כדי לממש את המדידה בפועל, כל מה שנשאר לי היה להוסיף שליחה של Silent Ping במרווחים קבועים של שנייה, למדוד את ה־RTT של כל אחת מהן ולהציג את התוצאות על גבי גרף.

והינה עוד תמונה שמאפשרת לזהות האם המשתמש מחובר לרשת סלולרית או לWi-Fi

image

ניתן לראות שכאשר המשתמש מחובר לרשת סלולר הנקודות הכחולות מפוזרות לעומת רשת הWi-Fi שהן יותר מרוכזות

האם יש דרך לזהות את זה?

אז התשובה הקצרה היא כן. אמנם בוואטסאפ לא נקבל שום הודעה על המסך, אבל ברמת הפרוטוקול האפליקציה עדיין קולטת את הפעולה. כל מה שצריך זה כלי שיחזיק רשימה של כל ההודעות שבאמת קיימות אצלנו. ברגע שמישהו שולח פעולה (עריכה, מחיקה או תגובה) על הודעה שלא קיימת ברשימה זה דגל אדום ואינדיקציה ברורה לכך שהמשתמש תחת התקפה.

כדי לבדוק את זה בעצמי, פיתחתי פרוייקט קטן שמבצע בדיוק את הניטור הזה: https://github.com/l1am-s/probe-guard.

אבל יש כאן קאץ: הכלי רץ בתור מכשיר מקושר נוסף לחשבון. אם התוקף משתמש בפרוייקט של טל למשל הוא יכול לראות את כל המכשירים המחוברים ולבחור לשלוח את ה-Silent Ping לטלפון הראשי בלבד וככה לעקוף את הניטור.

אמנם עדיין יש דרך לזהות ולהקשות על התוקף והיא להאזין לאירועים האלה ישירות על האפליקציה בטלפון עצמו, למשל באמצעות Script Hooks (עם Frida או LSPosed), וכך לתפוס את המתקפה גם כשהיא מכוונת ישירות למכשיר הראשי. מעט מסובך למשתמשים ללא רקע טכנולוגי

לסיכום

אפשר לראות כאן כמה מידע אפשר להסיק על משתמש WhatsApp בלי לגשת ישירות למכשיר שלו ובלי שהוא אפילו יודע שמתבצעת מדידה.

וזה נהיה הרבה יותר משמעותי כשזוכרים שמדובר באפליקציה שנמצאת בשימוש אצל יותר מ־3 מיליארד אנשים ברחבי העולם, ובישראל WhatsApp היא חלק בלתי נפרד מחיי מהיום יום של המון אנשים.

מקורות

https://arxiv.org/abs/2411.11194 - המחקר https://github.com/talbeerysec/WhatsApp-baileys-device-toolkit - הפרוייקט של טל