Я всё-таки потратил половину рабочего дня в пятницу на прошлой недели и, пока коллеги добивали очередного монстра на просторах Калимдора, я писал свой «детский» шифровальщик. В процессе написания было отмечено несколько интересных моментов со стороны Касперского, о которых будет сказано ниже (на машине, где писался «вирус», установлен именно Касперский).
Сам шифровальщик работал по следующему алгоритму:
1) Искал все файлы в моих документах (исключая системные, скрытые и т.п.).
2) Читал каждый файл по байтно, изменяя каждый считанный байт по формуле (read_byte XOR key[i]) + 1 и записывал изменённый байт в новый файл.
3) На место считанного байта в оригинальный файл записывал значение 0xFF (в шестнадцатеричной системе) (это для того, чтобы уменьшить вероятность восстановления файла утилитами восстановления удалённых файлов).
В процессе написания шифровальщика я последовательно вводил в код перечисленные выше функции, и Касперский сработал только на последнем третьем пункте. Причина срабатывания заключалась в том, что я писал «непонятные» данные в заголовки файлов (в начало файлов). Поэтому я внёс небольшое изменение в этот пункт, и стал перезаписывать данные только в середине файла (после первых 1000 байт и до последних 1000 байт). Но, так как Касперский уже «запомнил» моего шифровальщика, то детект периодически возникал, и пришлось собирать проект не в «дебаге», а в «релизе» (то есть с другими «системными настройками»). В «релизе» детекта не было. И тут меня срочно вызвали товарищи из «боевого братства», бить врагов теперь уже не в Калимдоре, а под Малиновкой. Написание «переносчика» вируса и тестирование пришлось отложить до понедельника…
Как известно, утро в понедельник добрым не бывает… Я начал с небольшой доработки моего шифровальщика, но теперь он уже детектился Касперским и под дебажной, и под релизной сборкой, и в разных местах, и с разными названиями… Но это было не из-за того, что программа шифровала файлы, а потому что (как я уже писал) при первой попытке реализации перезаписывания исходного файла перезаписывались «запрещённые» секции файлов (заголовки), и этим мой шифровальщик засветился перед Каспером, и он его каким-то образом запомнил. (и это не смотря на то, что я исправил вирус, и он уже не записывал данные в заголовки файлов). Что бы избежать детекта, пришлось пересобрать проект на старом добром делфи 7 (изначально, разработка велась в делфи 10). И о чудо, пересборка проекта в делфи 7 помогла!
Чтоб эксперимент был более реальным, я написал ещё одно приложение «Инженерный калькулятор» с двумя кнопками. «Инженерный калькулятор», помимо сложных математических вычислений 2*2, выполнял скрытую функцию: через 5 секунд после запуска он выполнял поиск шифровальщика (в папке, из которой был запущен) и копировал его в папку автозагрузки пользователя. На этом этапе всё работало хорошо, Касперский молчал. Тогда я подумал, что «Инженерный калькулятор», это же не обычный калькулятор, и он должен быть более «изобретательным». Теперь «Инженерный калькулятор» пытался копировать программу-шифровальщик в автозапуск каждые 30 секунд. Но на этом этапе Касперский выдал предупреждение, что мой калькулятор ведёт себя подозрительно и предложил выбрать что с ним сделать. Пришлось откатить изменения и остановиться на первоначальном варианте, когда программа-шифровальщик копируется один раз папку автозагрузки.
Пришло время переходить к тестированию вируса и антивирусов. Я подготовил флешку, на которой было два файла, шифровальщик и «Инженерный калькулятор». Было выбрано два компьютера один с Доктор Вебом, другой с Касперским. Ход эксперимента состоял из следующих шагов:
1) Вставляем флешку в компьютер.
2) Запускаем с неё «Инженерный калькулятор», ждём 20-30 секунд (пока файл нашего шифровальщика поместиться в автозапуск).
3) Закрываем «Инженерный калькулятор».
4) Выполняем перезагрузку компьютера.
5) Ждём, пока все файлы пользователя (вордовские, базы данных аксеса, архивные файлы – всего около 30 штук общим объемом около 10 Мбайт) в папке «мои документы» шифруются.
Почему ждём…? Да потому что ни один из этих двух антивирусов не выдал ни одного предупреждения.
Что можно сказать «в сухом остатке», если человек без опыта в сфере «вирусов», на коленке за пол дня написал пусть и не типичный, и «детский» шифровальщик, который никак не детектится…? Да то, что ни один антивирус не может защитить от угроз «нулевого дня», если за дело берётся профессиональный вирусописатель. Остаётся лишь надеяться на оперативность добавления в базы, и на всякие облака, и т.п.
p/s: Хорошо, что я предусмотрительно написал утилиту для расшифровки и сделал бэкапы :-)