Мало кто из нас задумывается о современной malwar'и, а также о различных методиках заражения. О том что на любом ПК рекомендуется иметь антивирус с постоянно обновляемыми антивирусными базами уже говорилось миллион раз где только можно, однако, почему-то многие, в том числе и разработчики ПО, пренебрегают этим простым правилом. Эта история о том, что может получиться в случае, если этими простыми рекомендациями не пользоваться.
Итак, началось все с того что сегодня при попытке сборке пустого проекта (из одной оконной формы в Delphi) я получил сообщение антивируса о том что исполняемый файл (который только что собрался) заражен Win32.Induc. У DrWeb, который я использую, конечно были ложные срабатывания на exe'шники Delphi, но в принципе это уже в прошлом, да и Win32.Induc, само название, если честно, я увидел впервые. Прочитав эти две статьи на сайтах ведущих антивирусных вендоров:
Я понял что вещь эта вообще-то древняя, что она действительно заражает Delphi приложения еще на этапе разработки, модифицируя файл %DELPHI_RootDir%\source\rtl\sys\SysConst.pas , затем он собирает его с помощью dcc32.exe и в результате получается вредоносный SysConst.dcu ("%DELPHI_RootDir%\Lib\SysConst.dcu" ), который линкуется со всеми вашими вновь созданными приложениями. Т.е. любое приложение которое вы соберете в Delphi на зараженной машине уже окажется инфицированным. Например, вы выложите его в свободный доступ, в результате, любой пользователь запустивший его у себя и имеющий установленную версию Delphi версии с 4 по 7 получит "зараженный дистрибутив".
Итак, началось все с того что сегодня при попытке сборке пустого проекта (из одной оконной формы в Delphi) я получил сообщение антивируса о том что исполняемый файл (который только что собрался) заражен Win32.Induc. У DrWeb, который я использую, конечно были ложные срабатывания на exe'шники Delphi, но в принципе это уже в прошлом, да и Win32.Induc, само название, если честно, я увидел впервые. Прочитав эти две статьи на сайтах ведущих антивирусных вендоров:
- Win32.Induc
- "Лаборатория Касперского" обнаружила вирус, заражающий Delphi-приложения на этапе разработки
Я понял что вещь эта вообще-то древняя, что она действительно заражает Delphi приложения еще на этапе разработки, модифицируя файл %DELPHI_RootDir%\source\rtl\sys\SysConst.pas , затем он собирает его с помощью dcc32.exe и в результате получается вредоносный SysConst.dcu ("%DELPHI_RootDir%\Lib\SysConst.dcu" ), который линкуется со всеми вашими вновь созданными приложениями. Т.е. любое приложение которое вы соберете в Delphi на зараженной машине уже окажется инфицированным. Например, вы выложите его в свободный доступ, в результате, любой пользователь запустивший его у себя и имеющий установленную версию Delphi версии с 4 по 7 получит "зараженный дистрибутив".
Наиболее хорошо проблема освещена вот в этой статье в блоге GunSmoker'а: Virus.Win32.Induc.a: энцать дней спустя (FAQ) и вот здесь Delphi-“вирус”: проверьте свою установленную Delphi! . Материал полезный и рекомендуется к прочтению.
Если вкратце, то для заражения вашего дистрибутива Delphi достаточно запустить любой собранный с помощью инфицированной версии Delphi файл. Например, вы скачали с интернета какую-нибудь полезную утилиту, собранную инфицированной версией Delphi. Разработчик этой утилиты в принципе может не знать о том что его среда разработки инфицирована (например, у него нет антивируса, или он никогда не задумывался над тем, чтобы перед публикацией проверять собственные собранные исполняемые файлы на том же VirusTotal'е), в результате, все пользователи которые скачали и запустили у себя этот файл и имели копию Delphi на ПК - получили инфицированный дистрибутив. Если учесть еще и то, что сейчас разработчики мелких утилит используют всякого рода "навесные защиты", например, VMProtect и прочие, то скомпилировав приложение и защитив его исполняемый файл, получаем ситуацию когда приложение на самом деле инфицировано, но антивирус в силу того что код защищен (например, применена виртуализация или мутация кода в защите) с определенной долей вероятности не сможет определить в нем вредоноса.
Что же касается моих сборок, т.е. моего ПО, то к счастью заражения не произошло, т.к. любая сборка ПО перед тем как быть выложенной в интернет, обязательно автоматически проверяется и установленным у меня DrWeb и дополнительно на VirusTotal'е.
На всякий случай также запустил проверку папки всех собранных проектов с помощью консольного сканера от DrWeb, сделать это можно например так:
dwscancl.exe /LN /SST /FM:*.exe /RP:D:\drweb_work.log D:\Work (справка по консольным ключам сканера находится здесь)
Результат: всё нормально, т.е. зараженных скомпилированных в этой версии Delphi exe'шников найдено не было.
Не стоит думать что вирус мог обойти стороной тех, кто скачивает ПО только из проверенных источников. В свое время зараженными Win32.Induc оказались даже популярный мессенджер QIP и аудиоплеер AIMP, т.е. существовали зараженные сборки этих программных продуктов. Подробное описание ситуации есть в том же блоге GunSmoker'а вот здесь - Как это началось.
Также, кто-то наверняка может сказать, мол, Induc'у уже больше 8 лет, да и кто будет собирать какие-то проекты в 2017 году в 7-ой или более ранней версии Delphi? Поверьте, будут. Даже сейчас находятся люди, которые ей пользуются, например, для компиляции относительно простых приложений, во время поддержки созданных ранее проектов, да и просто в целях обучения. Здесь важна не версия Delphi как таковая, да даже и не то что это Delphi, а сам подход к инфицированию. Т.е. идея заражения приложения на этапе разработки. Представьте себе что кто-то сделает нечто аналогичное под ваш любимый MSVC или другую среду разработки, т.е. сам подход вообщем-то не зависит от среды разработки.
Ну а рекомендации разработчикам, чтобы не попасть в подобную ситуацию, естественно, довольно простые. Имейте на ПК, на котором вы занимаетесь разработкой ПО актуальную версию антивирусного ПО с постоянно обновляемыми антивирусными базами. Про "не запускайте на машине, которую вы используете для разработки, приложения полученные из сомнительных источников" - пожалуй не буду, это и так должно быть понятно. Собранные и готовые к публикации в интернет релизные версии ваших проектов обязательно проверяйте на VirusTotal'е. Во-первых, это лишний повод убедиться для себя лично, что все нормально, во-вторых, такая проверка заранее покажет, не сработает ли антивирусная защита какого-либо из вендоров на ваш код и не будут ли пользователи задавать вам вопросы в дальнейшем, в стиле "а почему мой антивирус ругается" и т.п.
Вообщем-то и все что хотелось рассказать ... надеюсь кому-то материал окажется полезным.
Я так в своё время с gdfs scanner'ом прокололся.
ОтветитьУдалить