מה זה YARA ולמה קוראים לו "אולר השוויצרי" של חוקרי מלוור¶
תארו לכם שאתם צוות אבטחה שזיהה תוכנה זדונית חדשה ברשת שלכם. עכשיו יש לכם שאלה קריטית - האם היא נמצאת גם במחשבים אחרים בארגון? האם היא רק וריאציה של משהו שכבר ראיתם בעבר? כדי לענות על שאלות כאלה במהירות, על אלפי קבצים בבת אחת, צריך כלי שיודע לחפש דפוסים ספציפיים בקבצים - וזה בדיוק מה ש-YARA עושה. הוא כל כך מרכזי בעולם המחקר של תוכנות זדוניות, שקוראים לו "אולר השוויצרי של חוקרי מלוור".
מה הבעיה ש-YARA פותר¶
לכל תוכנה זדונית יש "טביעת אצבע" - קטעי קוד, מחרוזות טקסט, או מבנה בינארי ספציפי שחוזרים על עצמם בכל הגרסאות של אותה משפחת מלוור. הבעיה היא שברגע שיש לכם אלפי קבצים לבדוק, או שאתם צריכים לסרוק כל מכונה בארגון, אי אפשר לבדוק כל קובץ בעין. YARA פותר את זה בכך שהוא נותן לכם שפה פשוטה לכתוב "כללים" (rules) שמתארים בדיוק מה לחפש, ואז מריץ אותם אוטומטית על כמות עצומה של קבצים, זיכרון, או תעבורת רשת, ומדווח בדיוק היכן נמצאה התאמה.
זה שונה מ-אנטי וירוס רגיל, בכך ש-YARA לא בא עם מסד נתונים סגור של חתימות שמישהו אחר קבע. אתם כותבים בעצמכם את הכללים שמתאימים בדיוק למה שאתם מחפשים, מה שהופך אותו לכלי גמיש בהרבה לחקירות ספציפיות.
איך בנוי כלל YARA בסיסי¶
כלל YARA בנוי משני חלקים עיקריים, וההיגיון שלו פשוט להפליא ברגע שמבינים אותו:
- strings. רשימה של דפוסים שרוצים לחפש - יכולה להיות מחרוזת טקסט רגילה (למשל שם דומיין ספציפי שמלוור מסוים מתקשר אליו), רצף בייטים בינארי, או ביטוי רגולרי (regex) שמתאר תבנית מורכבת יותר.
- condition. התנאי ההגיוני שקובע מתי הכלל "יתפוס" - למשל, "אם נמצאו לפחות שתיים מתוך שלוש המחרוזות שהוגדרו", או "אם המחרוזת הראשונה נמצאת ב-256 הבייטים הראשונים של הקובץ".
השילוב של השניים נותן כוח אדיר - במקום פשוט לחפש מחרוזת אחת בודדת שקל לתוקף לשנות, אפשר לבנות תנאים חכמים שמזהים משפחה שלמה של תוכנה זדונית, גם כשגרסאות שונות שלה משתנות מעט אחת מהשנייה.
איך צוותי אבטחה משתמשים ב-YARA בפועל¶
צייד איומים (threat hunter) שמקבל דגימה חדשה של תוכנה זדונית מנתח אותה, מזהה מה מייחד אותה - אולי מחרוזת ייחודית בקוד, או רצף פונקציות מסוים - וכותב כלל YARA שמתאר את זה. אחר כך הוא מריץ את הכלל הזה על כל הקבצים בארגון, על מסדי נתונים ענקיים של דגימות ידועות, או אפילו על זיכרון חי של מכונות, כדי לגלות אם אותה משפחת מלוור מסתתרת במקום נוסף שעדיין לא זוהה.
מעבר לזה, YARA משמש גם לסיווג. כשמגלים דגימה חדשה, אפשר להריץ עליה מאגר עצום של כללי YARA קיימים כדי לבדוק אם היא בעצם וריאציה של משהו שכבר מוכר, במקום להתחיל את הניתוח מאפס בכל פעם. חברות אבטחה גדולות ופלטפורמות שיתוף מודיעין איומים משתפות כללי YARA ביניהן כדי שכל אחת תוכל להגן מהר יותר מול איומים שכבר זוהו אצל אחרים.
למה זה כלי מרכזי גם באתגרי CTF¶
בעולם ה-CTF, אתגרי forensics ו-reverse engineering לעיתים קרובות דורשים לזהות בתוך קובץ מסוים דפוס חבוי - חתימת קובץ, פיסת קוד מוצפנת, או מחרוזת שמרמזת על הדגל. כתיבת כלל YARA מהיר כדי לסרוק קובץ גדול או אוסף קבצים שלם היא הרבה יותר מהירה מבדיקה ידנית, ומי שמכיר את הכלי חוסך לעצמו זמן יקר באתגר תחת לחץ של שעון.
מה זה אומר עבורכם כמפתחי אבטחה¶
גם אם אתם לא מתכננים להיות חוקרי מלוור מקצועיים, ההיגיון שמאחורי YARA - זיהוי דפוסים חוזרים, בניית תנאים לוגיים, וחשיבה איך לתאר איום בצורה שאפשר לחפש אותה אוטומטית - הוא מיומנות שימושית בכל תחום אבטחה. זה בדיוק סוג החשיבה שנדרש גם בבדיקות חדירה, כשצריך לזהות דפוסים חוזרים במערכת שאתם בודקים. מי שרוצה להעמיק בכיוונים האלה יכול להתחיל מקורס בדיקות חדירה שמלמד את הבסיס לחשיבה המתודית הזאת.
לסיכום¶
YARA לוקח בעיה שנשמעת מסובכת - לזהות תוכנה זדונית מתוך ים של קבצים - והופך אותה לתהליך פשוט ושיטתי של כתיבת כללים ברורים. זה אחד הכלים הפשוטים ביותר ללמוד בעולם אבטחת המידע, ובאותו הזמן אחד השימושיים ביותר בעבודה היומיומית של חוקרי איומים בכל העולם.