מ-אירועים בודדים לתמונת-תקיפה אחת
אותות-אבטחה חיים בזרמים נפרדים — חריגה בשרת פה, התראת-אבטחה במכשיר שם, סטייה ב-DNA ההתנהגותי של מכשיר, ואירוע-תקיפה שנתפס במלכודת. כל אחד לבדו נראה שולי. אבל פריצה אמיתית היא לא אף אחד מהם — היא הסיפור שנפרש לרוחב כולם. מנוע-הקורלציה של Doogree קורא את הסיפור הזה.
הבעיה: ארבעה זרמים, אף אחד לא מדבר עם השני
ל-Doogree יש כבר ארבעה מקורות-אמת נפרדים: חריגות-שרת, התראות-אבטחה במכשיר, חריגות ה-DNA ההתנהגותי של מכשיר, ואירועי-תקיפה — honeytokens, brute-force, מגע עם C2. הבעיה שכל זרם נצפה לחוד: אדמין רואה שש התראות נמוכות ומסמן אותן כרעש. אבל אותן שש התראות, אם משרשרים אותן, הן סריקה שהובילה לגישה שהובילה לתנועה-רוחבית. הרעש היה המתקפה.
הפתרון: קורלציה לפי ישות ולפי זמן
מנוע-הקורלציה רץ כל 5 דקות ועושה שלושה דברים. 1. אשכול לפי ישות. כל האותות מכל ארבעת הזרמים מקובצים סביב entity משותפת — מכשיר, שרת או כתובת-IP של תוקף. 2. אשכול לפי זמן. בתוך חלון של שעתיים, כדי שאותות מפוזרים אבל קרובים יתחברו לאותו סיפור. 3. מיפוי ל-kill-chain. כל אות ממופה לשלב גס בשרשרת-התקיפה של MITRE ATT&CK: recon → access → execution → evasion → lateral movement → C2 → impact. התוצאה: אירוע אחד מתמשך לכל ישות, במקום מבול התראות.
הסלמה: שרשרת גרועה מכל התראה בודדת
כאן נכנס הערך האמיתי. כשעל אותה ישות מצטברים כמה שלבי kill-chain שונים, המנוע מעלה את החומרה אוטומטית — שרשרת recon → access → lateral חמורה בהרבה מכל אחת מהחוליות לבדה. וכשאירוע מגיע ל-high או critical, המערכת דוחפת התראה לאדמינים של סביבת-העבודה ומציעה כפתור-הכלה (containment) שפועל בהסכמה — fix-with-consent, לא פעולה עיוורת.
מחזור-חיים: מהתראה ועד סגירה
אירוע הוא לא הבזק חד-פעמי אלא רשומה עם מצב: open, acknowledged, resolved. אפשר לאשר, לחקור ולסגור — והכל נשמר לתיעוד. מעל הכל רץ SOC digest יומי באימייל שמסכם את האירועים הפתוחים ברמת high/critical, כך שאף שרשרת פתוחה לא נופלת בין הכיסאות.