למה תקיפות OT שולחות פקודות תקינות, ואיך מבדילים בין אדם לסקריפט
התקיפות שגורמות נזק אמיתי במערכות בקרה כמעט אף פעם לא נראות כמו פריצה. הן שולחות פקודות שהבקר בנוי לקבל.
כשמדמיינים תקיפה על תחנת כוח, חושבים על פריצה: חבילות משובשות, בקר שקורס, מסך מלא קוד. התקיפות שגורמות נזק אמיתי במערכות בקרה נראות בדרך כלל אחרת לגמרי. הן שולחות פקודות שהבקר אמור לקבל, ממחשב שהוא אמור לסמוך עליו.
הבקר עושה מה שאומרים לו
PLC קיים כדי לבצע פקודות: לפתוח את המגוף הזה, לשנות את נקודת הכיוון ההיא, להפיל את המפסק הזה. הרבה פרוטוקולים תעשייתיים תוכננו לרשתות סגורות ואין בהם אימות בכלל. Modbus הקלאסי, למשל, מקבל פקודת כתיבה מכל רכיב שמגיע לבקר. גם כשפרוטוקולים חדשים יותר מוסיפים אבטחה, הבקר עדיין סומך על שרת ה-HMI ועל תחנת ההנדסה, כי שם עובדים המפעילים.
לכן התוקף לא צריך חולשה בבקר. הוא צריך דריסת רגל במחשב שהבקר סומך עליו. משם, כל פקודה שהוא שולח תקינה: הפרוטוקול הנכון, קוד הפונקציה הנכון, האוגר הנכון, מכתובת המקור הנכונה.
איך זה נראה בפועל
הדוגמה הציבורית המתועדת ביותר היא התקיפה על חברות חלוקת החשמל באוקראינה בדצמבר 2015. התוקפים שהו חודשים ברשתות החברות, וביום התקיפה פתחו מפסקים דרך תוכנת הבקרה וכלי הגישה מרחוק של המפעילים עצמם. לקוחות נשארו בלי חשמל במשך שעות. מבחינת תחנות המשנה, הפקודות היו זהות לפקודות של מפעיל.
בקנה מידה קטן הדפוס חוזר: נוזקה על שרת HMI שכותבת נקודות כיוון, חיבור גישה מרחוק שמאחוריו לא יושב הספק, סקריפט שאינטגרטור השאיר וממשיך לרוץ אחרי סוף הפרויקט. בקורס להגנה על תשתיות קריטיות יש מעבדה שמקליטה תעבורת Modbus ואז כותבת לבקר אמיתי ממחשב אחר ברשת. המשתתפים בדרך כלל מופתעים כמה מעט צריך.
למה ההגנות הרגילות מפספסות
- Firewall מאפשר לשרת ה-HMI לדבר עם הבקרים. בשביל זה הוא הוגדר.
- אנטי-וירוס על שרת ה-HMI לעיתים קרובות חסר, לא מעודכן או מוגבל בתנאי התמיכה של היצרן. וסקריפט שמשתמש בפונקציות של ה-HMI עצמו הוא ממילא לא נוזקה במובן הקלאסי.
- זיהוי חדירות ברמת הרשת רואה פקודה תקינה מהמקור הרגיל. הוא יכול להתריע על רכיב חדש, סריקת פורטים, עדכון קושחה או קוד פונקציה חריג, והוא צריך להיות שם. אבל כתיבה בודדת של נקודת כיוון משרת ה-HMI נראית כמו עבודה רגילה של משמרת.
- לוגים רושמים שה-HMI שלח את הפקודה. הם לא רושמים מי, או מה, עמד מאחוריה.
השאלה האמיתית: מי יושב מול העמדה?
כשהפקודה עצמה תקינה, השאלה שמבדילה בין תפעול לתקיפה זזה צעד אחד אחורה. האם מפעיל אנושי נתן את הפקודה ב-HMI, או שתוכנה הוציאה אותה בשמו? אדם שעובד מול עמדה מתנהג אחרת מסקריפט. באופן כללי:
- אדם פועל דרך הממשק. הוא פותח מסך, בוחר רכיב ומאשר. סקריפט יכול לשלוח את הפקודה בלי לגעת בממשק בכלל.
- אדם עובד בקצב ובמקצב אנושיים. סקריפט יכול לשלוח הרבה פקודות בשבריר שנייה, או בשלוש לפנות בוקר כשאף אחד לא מחובר.
- הפקודות של אדם מתאימות למצב התהליך ולעבודת המשמרת. הפקודות של סקריפט הן מה שהתוקף החליט מראש.
אף סימן לבדו אינו מכריע, ותוקף שמכיר אותם ינסה לחקות אותם. לכן הבדיקה צריכה להיעשות במקום שבו הפקודה נוצרת, על שרת ה-HMI, ולשקלל כמה סימנים יחד במקום להסתמך על חוק אחד.
למה דווקא על שרת ה-HMI
ברשת, הפקודה כבר הפכה לחבילה מוכנה. אפשר לראות ממי היא יצאה ולאן היא הולכת, אבל כבר אי אפשר לראות מה קרה לפני שהיא נוצרה. על שרת ה-HMI ההקשר עוד קיים: איזו אפליקציה יצרה את הפקודה, מה קרה בממשק לפני כן, איזה משתמש מחובר, והאם כל זה מתאים לתפעול השוטף באותו רגע.
יש גם צד שני לאותה בעיה. תוקף שמשתלט על עמדת הבקרה יכול לא רק לשלוח פקודות, אלא גם להציג למפעילים תמונה רגועה בזמן שהתהליך משתנה. זה מה שעשתה Stuxnet בשעתה: היא הקליטה ערכים תקינים והציגה אותם למפעילים, בזמן שהבקרים קיבלו פקודות אחרות. לכן אמצעי הגנה שיושב על שרת ה-HMI צריך להגן גם על השרת עצמו, בנוסף לסינון של מה שיוצא ממנו.
וזו גם הסיבה שהבדיקה לא יכולה להיות רק התרעה שמישהו יקרא בבוקר. כשפקודה להפלת מפסק או לשינוי נקודת כיוון יוצאת לדרך, הנזק יכול לקרות בתוך שניות. המטרה היא לעצור פקודה חשודה לפני שהיא מגיעה לבקר, ובמקביל לא לעכב מפעיל אמיתי שעובד בזמן אמת.
הגישה של SPARTA
SPARTA (SCADA Protection And Real-Time Alert) הוא המודול ש-ICS Security, החברה שהקמתי, פיתחה לבעיה הזו. הוא רץ על שרת ה-HMI כמודול תוכנה ומשלב מניעת חדירות (IPS) וזיהוי חדירות (IDS) עם אלגוריתמים ובינה מלאכותית. התפקיד המרכזי שלו הוא לוודא, ברמת ודאות גבוהה, שקלט הגיע ממפעיל אנושי ולא מנוזקה.
מהמיקום שלו נובעות תכונות נוספות:
- אין צורך ברכיבים חדשים ברשת הבקרה, והאחריות של היצרן נשמרת
- ניטור הנכסים ברשת: בקרים, RTU, שרתי HMI ועמדות קצה
- הגנה רב-שכבתית מפני תקיפות מבחוץ ומבפנים
- שרת ה-HMI עצמו נמנע מלתקוף נכסים אחרים ברשת
- עבודה משותפת עם GRAPHENE, מערכת זיהוי החדירות הפסיבית שלנו, לחיזוק הזיהוי
- תאימות ל-NERC CIP ול-NIST, ולמגוון פלטפורמות HMI ובקרים
SPARTA מוגנת בפטנט אמריקאי US 11,621,972 B2, שניתן ב-4 באפריל 2023; הממציאים הם אילן שעיה, שמעון זגדון ואבישי סביר. נמל אשדוד בחר ב-SPARTA להגנה על מערכת הבקרה שלו, כפי שדיווח TheMarker ב-2021.
מה עושים בכל מקרה
בין אם SPARTA מתאימה למתקן ובין אם לא, העיקרון זהה: צריך להיות קשה לשנות את התהליך אם לא יושב אדם מול העמדה הנכונה.
- להגדיר אילו מחשבים בכלל רשאים לכתוב לבקרים, ולתת לצופים עמדות לקריאה בלבד.
- להחזיק את תחנת ההנדסה בנפרד ולחבר אותה רק כשצריך.
- משתמשים אישיים למפעילים, לא סיסמה משותפת שמודבקת למסך.
- להגדיר רשימה לבנה של הפעולות הצפויות מכל HMI, ולהתריע על כל השאר.
- לבנות גבולות בלוגיקה של הבקר כך שנקודת כיוון קיצונית תידחה, ולשמור על מערכת הבטיחות בלתי תלויה בבקרה.
- לנטר את הרשת באופן פסיבי, כדי שהסריקה או הרכיב החדש שקודמים לפקודה ייראו.
- לתרגל מה המפעילים עושים כשהמסך מראה משהו שהם לא הפעילו.
לשם גילוי נאות: אני הממציא של SPARTA. תכנוני הארכיטקטורה שאני כותב מנוסחים כך שכל ספק מוסמך יוכל להגיש הצעה. למפעילים בישראל, ההקשר הרגולטורי נמצא בעמוד הגנת סייבר OT לתשתיות קריטיות בישראל.