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

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

עודכן ב: יונ 3

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

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


אני מזכיר, מצאתי ב-Github אוסף של נוזקות JavaScript. מדובר על קרוב ל-40,000 תוכנות זדוניות.

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


אז אתחיל בתיקיה שנקראת 1936, עודכנה לפני 3 שנים, בתוכה ישנה תיקיה 19360611 ובתוכה הקובץ:

19360611_23f5eaf84cedb0998e31b34a5f81e4ef.js


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


הקוד במצב obfuscated וכתוב בשורה אחת ארוכה. איפשרתי בעורך קוד (VS Code) שבירה של השורה כך שהקוד יוצג בשורות (word wrap). תצוגה בלבד, שימו לב ל-1. עדיין שורה אחת.



התקנתי הרחבה שנקראת Beautify. כמה אירוני :)


לחצתי על F1 במקלדת, כתבתי beautify והפעלתי על הקובץ את Beautify file.

זה כבר נראה הרבה יותר טוב.


הדבר הבא שעשיתי היה להמיר את כל החלקים שכתובים ב-unicode - למשל u0041\ - לתוים.

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


מילים הגיוניות מתחילות לצוץ. זה כיף. אז יש משתנה ActXN ואם מחברים את האותיות שמופיעות בהמשך, מקבלים:

ActiveXObject

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

var ActXN = 'ActiveXObject';


כעבור 35 דקות, סיימתי להחליף - בצורה ידנית - את כל ה-unicode לתווים שאפשר לקרוא. היה כיף, באמת. גם אם אמצא עכשיו תוכנה שתעשה את זה, אמשיך בצורה הזאת. אני רציני. המילים מתחילות להופיע והקוד מתחיל לקבל משמעות. הספקתי - במבט חטוף - לראות בקוד קריאה ל-https - לקובץ php עם סימן שאלה אחריו ופרמטרים של query string.


מה שאעשה עכשיו זה להחליף את שרשור האובייקטים ומערכי התווים - למחרוזות קריאות. כמו שתיארתי קודם לכן.


הקוד מתחיל לתפוס צורה. אני מזכיר, זה קוד Javascript אבל יש שם בנייה של קוד שקשור ב-ActiveX - נראה לי שרתי IIS אבל אני לא בטוח. יש שם גם בנייה של קוד php עם פונקציות למשל CopyFile, DeleteFile וגם echo ו-Sleep. שימו לב לקריאה לכתובת שקודם לכן שמתי לב אליה במבט חטוף.


עצרתי את העבודה ב-03:00 לפנות בוקר - לאחר שעה וחצי של עבודה. אני ממשיך לאחר 5 שעות שינה ב-08:00 (1 למאי). עדיין לא בדקתי בגוגל מה הפונקציות עושות אבל אני יודע שטעיתי לגבי ה-ActiveX ושרתי IIS - אין קשר. מדובר, כנראה, על פרצת אבטחה בדפדפני Explorer באמצעות רכיבי ActiveX בדפדפן הזה. כנראה. אני רוצה קודם כל להשלים את העבודה על הקוד ואחר כך אנתח אותו מול גוגל.


כעבור שעה, סיימתי. הנה צילומי מסך של הקוד.


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


אז הדבר הראשון שבדקתי זה את המשתנים בתחילת הקוד - בשורות 1 עד 12 - ובחלק האחרון של הקוד - בשורות 82 עד 93. תוצאת הבדיקה היא שכל אחד מהם מופיע פעם אחת בקוד והמסקנה שלי היא שהם שם כדי לנסות לרמות את תוכנות האנטי-וירוס. לגרום לקוד להיראות קוד javascript תמים כשהקוד הזדוני נמצא בין שני החלקים הללו.


המסקנה הבאה שהגעתי אליה היא שטעיתי לגבי פונקציות php. הטעות נבעה מהפונקציה echo שמופיעה בשורה 41 ומהעובדה שראיתי קריאה לקובץ php. מצד שני, Sleep עם האות S גדולה. לא הסתדר. נראה לי שאני מבין מה הולך.


כאמור, יש שימוש באובייקט ActiveX שנמצא בדפדפני Explorer (גירסאות מסויימות ??) ומאפשר - בסופו של דבר - גישה למערכת הפעלה ול-File System. אני רואה יצירה של קובץ exe ופונקציות כגון DeleteFile, FileExists, SaveToFile וכן הלאה. אז האם מדובר בקוד dot NET או סי שארפ - אני עדיין לא יודע אבל זה הכיוון. בתוך מגוון שפות שהכרתי, אלו שפות שלא יצא לי לעבוד איתן.


כמו כן, יש העברת מידע לשרת מרוחק שמחזיק סקריפט php. ה-URL שמופיע בשורה 33.


הדבר הבא שאעשה זה ארכיב את הקוד כפי שהדפדפן עושה כך שיתקבל קוד dot net או סי שארפ או VB (עדיין קיים??). ואולי הגיע הזמן להכיר קצת את מערכת ההפעלה Windows ואיך היא עובדת. גם זה רעיון לא רע.


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

https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/wscript


wscript Windows Script Host provides an environment in which users can execute scripts in a variety of languages that use a variety of object models to perform tasks.


ומעבר לזה, עושה רושם ש-VBScript קיימת ואולי היא הבסיס של המערכת Windows ושאר הפריימוורקים הגדולים והמפותחים יותר. אבדוק בהמשך.


הנה הקוד שהמרתי - בצורה גסה, כרגע - ל-VBScript. יש שם מספר טעויות, כמו השימוש בפונקציה random ו-floor של Math - ששייכות בכלל ל-JavaScript (או שלא??) - אבל רוב הקוד נראה טוב והכיוון נכון.


הרצתי מכונת Windows XP על VirtualBox ויש שני דברים שאני רוצה לעשות. הראשון, לבדוק את הקוד שהמרתי ולתקן אותו תוך כדי בדיקה. אני רוצה להגיע למצב שבו אני מריץ את הקוד ישירות באמצעות התוכנה wscript של Windows. הדבר השני שארצה לעשות הוא לבדוק את הקוד JavaScript במצב לפני ההמרה ל-VB על הדפדפן IE.


מבחינת עריכת קוד ה-vbs - מצאתי תוכנה שנקראת VbsEdit אך לצערי היא לא עובדת על XP. אנסה במקביל - בלי קשר לתוכנה - להריץ את הקוד גם על מכונה וירטואלית של Windows 10. בכל מקרה, עד שאמצא עורך אחר, התחלתי לערוך את הקוד באמצעות התוכנה המאוד ישנה ומיושנת edit. הקובץ, אגב, נמצא ב-shared folder ככה שיש לי אפשרות לערוך אותו ב-VS Code על ה-host וזה בדיוק מה שעשיתי בהמשך.


כפי שציינתי קודם לכן וכפי שניתן לראות בתמונה, אני מריץ את הקוד ב-Command Prompt בעזרת התוכנה המובנית wscript. החלון פופאפ בתמונה הופיע כתוצאה מהשורה:

WScript.Echo temp12



הסבר על פעולת הוירוס

דבר ראשון, הסקריפט JavaScript הראשי, כלומר ה-malware עצמו - במידה ועדיין לא הועתק למיקומו הרצוי במערכת ה-Windows של הקורבן - מועתק ל-Startup Folder עם שם חדש: aflash_update.js - כך שייראה כמו קובץ לעדכון Adobe Flash - וירוץ בכל הפעלה מחדש של המערכת. לאחר הפעולה הזאת, יקפוץ פופאפ שאומר:

The document is corrupted and cannot be opened

אני לא בטוח מה הסיבה להקפצת הפופאפ. אולי כדי ליצור blocking למערכת כך שהפעולה תבוצע עד לסיומה.


ברגע שירוץ, הוא יכנס ללולאה אינסופית - כלומר ירוץ לנצח - וכל 70 שניות הוא יבצע את הפעולות הבאות:

יבצע קריאה מסוג GET לסקריפט PHP בשרת מרוחק.

הוא יוסיף ל-query string פרמטר עם ערך רנדומלי כדי לקבל מידע חדש מהשרת ולא cached מקומי. סוג המידע, אגב, MSXML.


במידה והתקבל response code של 200, הוא יבדוק אם קיים בתיקיית TEMP של Windows קובץ exe בעל שם עם מספר רנדומלי אותו הגדיר קודם לכן. אם קיים, הוא יימחק.

הוא ייצור את הקובץ exe כשתוכן הקובץ הוא ה-response body שהגיע מהשרת.

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

לאחר מכן, ימחק את הקבצים. גם את הסקריפט JavaScript וגם את ה-exe.


קוד ה-JavaScript לאחר טיפול

כפי שציינתי קודם לכן, במקביל לבדיקת הקוד כ-VBSscript, ארצה לבדוק את הקוד ישירות ב-IE - כ-JavaScript. מהסיבה הזאת שיניתי את שמות המשתנים והפונקציות כך שהקוד יהיה נקי וברור יותר וזאת התוצאה הסופית.


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

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


בדיקת הוירוס ב-virustotal


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