חזרה לכל הפרויקטים
Security · On Device

Sentinel

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

9 פרקים · ~9 דק׳ קריאה
iOS NativeSwift / SwiftUINetworkingComputer Vision
Sentinel

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

בניתי את האפליקציה מקצה לקצה ב-Swift נייטיבי: מנוע סריקת הרשת, זיהוי הפרוטוקולים, סורק האינפרה אדום, החיבור לשידורי מצלמות, העיצוב, וכמעט 370 בדיקות אוטומטיות.

Local Network Discovery

סריקת הרשת בלחיצה אחת

כל מכשיר שמחובר ל-Wi-Fi, גם אלה שמנסים לא להיראות

בשפה פשוטה

המשתמש לוחץ על כפתור אחד, והאפליקציה עוברת על כל הכתובות ברשת שהוא מחובר אליה, מוצאת כל מכשיר פעיל ומנסה להבין מה הוא. מצלמה שמחוברת לאותו Wi-Fi לא יכולה להסתתר, גם אם היא לא מפרסמת את עצמה.

מסך הסריקה של Sentinel: מכ״ם שסורק את כל הכתובות ברשת ומציג שתי מצלמות אפשריות

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

סריקה בשכבות, בלי להעמיס על הרשת

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

Protocol Fingerprinting

זיהוי מצלמה לפי מה שהיא אומרת, לא לפי הפורט

הלקח הכי חשוב מבדיקות השטח

בשפה פשוטה

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

תוצאות הסריקה ב-Sentinel: מצלמות אפשריות מדורגות לפי סבירות, ומתחתן שאר המכשירים ברשת

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

Evidence Based Scoring

הסבר לכל חשד

לא רק "מצלמה", אלא למה

בשפה פשוטה

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

מסך הפרטים של מצלמה ב-Sentinel: ״Very likely camera״ ורשימת הסיבות שבגללן סומנה

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

Live Camera Stream

לראות מה המצלמה רואה

מחשד להוכחה

בשפה פשוטה

כשנמצאה מצלמה ברשת, אפשר ללחוץ "View camera" ולראות את השידור שלה, וכך לדעת בדיוק לאן היא מכוונת. זה ההבדל בין "אולי יש פה משהו" לבין הוכחה ביד.

צפייה בשידור של מצלמה שנמצאה ב-Sentinel (הדמיה)

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

Bluetooth LE Detection

גם מה שמשדר בבלוטות׳

ומסך איתור שמתחמם ככל שמתקרבים

בשפה פשוטה

חלק מהמצלמות הנסתרות לא מתחברות ל-Wi-Fi בכלל, אבל משדרות בבלוטות׳. Sentinel סורקת גם אותן, מסווגת כל מכשיר, ובעזרת עוצמת האות מובילה את המשתמש אליו.

רשימת מכשירי הבלוטות׳ ב-Sentinel עם עוצמת אות וכפתור איתור לכל מכשיר

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

Infrared Detection · On Device Computer Vision

סורק אינפרה אדום דרך מצלמת הטלפון

למצוא את נורות ראיית הלילה של מצלמות בחושך

בשפה פשוטה

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

סורק האינפרה אדום של Sentinel מסמן נקודת אור של ראיית לילה על הקיר (הדמיה)

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

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

Honest UX

כנות מול המשתמש

אף סורק לא מושלם, וזה כתוב בגדול

בשפה פשוטה

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

רשימת הבדיקה הידנית של Sentinel: המקומות שבהם מצלמות נוטות להסתתר

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

Privacy by Design · On Device

הכל רץ על הטלפון

אפליקציה לפרטיות לא יכולה לדלוף בעצמה

בשפה פשוטה

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

מסך הפתיחה של Sentinel: כפתור סריקה אחד והסבר כן על מגבלות הסריקה

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

Test Driven · Field Calibrated

נבדק מול מצלמות אמיתיות

כמעט 370 בדיקות אוטומטיות

בשפה פשוטה

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

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

Tech Stack

המחסנית הטכנולוגית

iOSSwift · SwiftUI · Observation · Structured Concurrency · XcodeGen
NetworkingNetwork.framework · ICMP sockets · Bonjour / mDNS · Reverse DNS (dnssd) · ONVIF · WS-Discovery · RTSP · SSDP / UPnP · PPPP / CS2 P2P
Sensors & VisionAVFoundation · Core Image · CoreBluetooth · NetworkExtension
StreamingVLCKit · MJPEG parser · HTTP snapshots
Patterns & MethodologiesOn Device · Privacy by Design · Evidence Based Scoring · Protocol Fingerprinting · Field Calibration · Test Driven (367 tests)
Team

הצוות

01מפתחDeveloper
02ארכיטקטArchitect
03מעצב מוצרProduct Designer
04בודק תוכנהQA
רוצים פרויקט כזה? דברו איתנו