Home אבטחת מידעPenetration Testing - Defense כתיבת חוקי Yara ו IPS בסיסי והסבר מהם חוקי Yara ו IPS Snort

כתיבת חוקי Yara ו IPS בסיסי והסבר מהם חוקי Yara ו IPS Snort

0 comment
נהנתם מהמאמר ? שתפו אותו!

כתיבת חוקי Yara ו IPS

במהלך הזמן אתם תקבלו הרבה IOC's (אינדיקטורים) שבהם מצויין חוקי YARA או חוקי IPS

חוקי IPS הם חוקים המתקשרים לתעבורת הרשת עצמה, זאת אומרת שIPS צריך להיות בין הרשת החיצונית של הארגון לרשת הפנימית.

מערכת ה IPS , לרוב מוטמעת בתוך ה Firewall על מנת שכל המידע הזורם דרך ה FW יזרום גם דרך מערכת ה IPS, ה IPS ע"פ חוקים מגדיר לאיזה Data Stream מותר לעבור ולאיזה לא.

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

למשל, בהתראה זו ששלחו ממשל זמין, ניתן להבחין שהם מצרפים חוקי Yara

 

ואילו בהתראה הזו שהוציאו במערך הסייבר, מתייחסים לEternal Blue, שהוא אינו קובץ, אלא Remote Excecution Exploit שעובר כמובן דרך הרשת, אז למקרה זה דרוש חוק IPS
אכן רשום חוק Snort ואילו Snort הוא מערכת IPS שבה יש חוקי IPS ולפי חוקים אלו חוסמת תעבורה.

על מנת להבין טוב יותר חוקי YARA ו IPS נתחיל מYara

חוקי YARA

תחילה נתקין ב Kali את Yara

apt-get install yara -y

לאחר ההתקנה ניקח קובץ של Petya Ransomware שנוכל להוריד כאן

*אזהרה! הורידו את הקובץ בתוך קאלי בלבד, אל תפעילו את הקובץ שכן זה Petya "חי" שכן הרצה שלו תצפין לכם את קבצי המחשב*

חילצתי את הקובץ ושיניתי את שמו ל petya.exe

לאחר שהורדנו נוציא ממנו Strings ע"י הפקודה

strings petya.exe > stringspetya.txt

כעת יש לנו קובץ בשם wannacry.txt שמכיל את כל ה strings

אם נרצה להיות קצת יותר מדוייקים ושיהיה קל לכתוב את החוק נכתוב את הפקודה כך

strings -el petya.exe

נפתח את הקובץ ונתחיל לחפש strings מעניינים שאיתם נוכל לכתוב את Yara Rule

3

כעת נתחיל לכתוב את החוק השאלה הגדולה היא מה מה Strings האלו הוא ייחודי?

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

לכן ניקח את ה Strings הבאים

ונציב אותם בחוק שכתבנו

rule Petya_Ransomware {
meta:
description = "Petya_Ransomware"
author = "Tal BS"
email = "tal@shushan.co.il"
reference = "https://github.com/ytisf/theZoo/blob/master/malwares/Binaries/Ransomware.Petya/Ransomware.Petya"
date = "2020/01/1"
hash0 = "e8fb95ebb7e0db4c68a32947a74b5ff9"

strings:
$a = "d:/re/workspace/8-2-build-windows-i586-cygwin/jdk8u73/6086/install/src/ipc/share/Mutex.cpp"
$b = "d:/re/workspace/8-2-build-windows-i586-cygwin/jdk8u73/6086/install/src/ipc/windows/ConditionalImpl.cpp"
condition:
all of them
}

כל ה meta הוא מידע על החוק

ה strings אלו הם ה strings שהוספנו, התנאי למטה, ה condition למעשה אומר שחייב להיות 2 הStrings האלו , על מנת להגדיר את הקובץ כזהה

ניצור את הקובץ ונקרא לו petya.yara

כעת נציב אותו בתיקיה בה אנחנו נמצאים בטרמינל ונבדוק אם החוק yara מגיב לקובץ petya.exe

yara -smgr Petya.yara petya.exe

כאשר מוצג לנו המשך הפקודה, yara מציג כי אכן נמצא ה strings האלו והם זהים

 

יש עוד המון אפשרויות שYara יכול לבצע, להגדיר משתנים בC ולהגדיר תנאים שאם $s1 ו $s5 זהים גם אז החוק תקף וכו'

חוקי IPS

Yara הוא בודק וחוסם Malware ולרוב ישב על Sandbox או אנטי ווירוס, אבל IPS הוא כלי בהגנה נגד מתקפות "רשת"
IPS הוא קיצור של intrusion prevention system וגם הוא ע"פ חוקים, בודק חבילות רשת, אם ה Data Stream זהה לחוק שכתוב במערכת, הוא יכול לבצע שני דברים.

הראשון – להתריע למערכת הSIEM או אצלו במערכת הלוגים שלו

השני – לבצע פעולה אקטיבית ולחסום את ה Data Steam הזה

Snort הוא אחד מהIPS ה Open Sorce היותר טובים בשוק,

לא חובה, אך תוכלו לבצע את המדריך הבא על מנת להגדיר אותו אצלכם:

הגדרת Snort ב pfsense כ- NIDS – IPS – IDS

נכנס לאתר של snort ושם נוריד את חוקי הקהילה

נוריד את community-rules

ונפתח אותם ב kali (או בווינדוס עם notepad ++ וכו')

 

כעת נפתח את הקובץ, נבחין שיש אלפי חוקים, כל שורה זה חוק

תחילה נתקין snort

apt-get install snort

כעת נגדיר כאן רק את כתובת ה IP שלנו, בכדי שנוכל לבדוק את המעבדה ובהמשך הכתובת הזו תיהיה ה HOME_NET אם יש רשת שעוברת דרכו, הגדירו את טווח הרשת שלכם

כעת בסיום ההתקנה נגדיר קובץ חוקים משלנו בשם myrules.rules, נערוך את קובץ ההגדרות

sudo nano /etc/snort/snort.conf

מחפש על ידי הקשה של CTRL +W ואז את המילה include

נגיע לתחתית הרשימה של החוקים שנכללים ושם נוסיף חוק משלנו

include $RULE_PATH/myrules.rules
  • הוסיפו לכל ה include $RULE_PATH סולמית בכדי שלא יחולו ולא תתרחש התנגשות.

נשמור ונסגור

כעת ניצור חוק

sudo nano /etc/snort/rules/myrules.rules

החוק בנוי כך:

alert - הוא תמיד ההתחלה בחוקי snort 

tcp - הפרוטוקול אותו הוא יבדוק

$HOME_NET - כתובת ה IP הפנימית בה יש מטרה והיא נמצאת מאחורי Snort

$HOME_NET! - הוספת ! אומרת שזה External_NET שזו הרשת החיצונית

ניתן גם לבנות חוק ב Snort ע"י האתר http://snorpy.com

חוק פשוט –

החוק שאני מעוניין לכתוב נניח הוא כל פניה שמגיע אליי בפורט 22 הלוא הוא SSH

alert - תן אזהרה

tcp - פרוטוקול 

$EXTERNAL_NET - כל מה שמגיע מהרשת החיצונית - קרי לא הכתובת IP שלכם, 

any הוא כל פורט בין 0-65535 שכן אתם פונים ל22 והפורט שחוזר אל התחנה שפנתה הוא פורט רנדומלי

<- החץ אומר מהרשת החיצונית אליכם

$HOME_NET - הרשת שלכם או כתובת ה IP שלכם

22 - פורט SSH

msg:"SSH Incoming Connection" - ההודעה שתוצג בלוג

sid:999 - מספר ההתראה, כתבו כל מה שתרצו, קחו בחשבון שאם יש לכם חוקים אחרים , בדקו שהSID לא מתנגש
alert tcp $EXTERNAL_NET any -> $HOME_NET 22 (msg:"SSH Incoming Connection"; sid:999; rev:14;)

נשמור את הקובץ

ונפעיל את snort

service snort start

כעת נפתח במחשב הפיזי או מחשב אחר ברשת putty וננסה להתחבר ל snort בפורט 22

כעת נבדוק אם snort תיעד את החיבור

נוכל לבדוק ע"י הכלי u2spewfoo

cd /var/log/snort

u2spewfoo snort.og

נוכל גם לבדוק את זה ע"י

snort -c /etc/snort/snort.conf -q -A fast

בתצורה זו snort בונה קובץ log חדש , אם יעבור Packet שעונה על החוק שיצרנו, אז הקובץ ישאר ואם לא יעבור Packet ברגע שתסגרו את התהליך הקובץ יעלם

נבצע כעת התחברות שוב ב SSH

כעת ניתן להבחין שהקובץ נוצר

נפתח את הקובץ, ניתן להבחין שאכן SSH עבר שם

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

snort -c /etc/snort/snort.conf -q -A console

כאן קיבלנו את ההתראה במידיית!

EternalBlue

כעת נבחן את החוק שאמור לחסום Exploit מסוג EternalBlue

אפשר להבחין שיש בדיוק את ההתחלה כמו בחוק הפשוט שהכנו קודם\ רק הפעם ההגדרה היא מכל מקום לכל מקום

ואילו כאן יש תוספות כמו

content:”|FF|SMB|32 02 00 00 c0|”; offset:4; depth:9

זה חלק מהMessage Signing ב SMB וכך למעשה הsnort rule יכול לזהות התקפה מסוג EternalBlue

alert tcp $HOME_NET any -> any any (msg:”EXPLOIT Possible Successful ETERNALBLUE Installation SMB MultiplexID = 82 – MS17-010″; flow:from_server,established; content:”|FF|SMB|32 02 00 00 c0|”; offset:4; depth:9; content:”|52 00|”; distance:21; within:23; classtype:trojan-activity; sid:5000072; rev:1;)# EternalBlue signature matching return signature for connection to pre-installed SMB payload

 

מאמרים קשורים

Leave a Comment