Дело было так. Один молодой человек меня достал, покажи мол ему полиморфизм на скриптовых языках и все тут. Видите-ли, он по наивности своей считает, что это невозможно. Хотя мы-то с вами знаем, что на Perl и Python вообще возможно все.
Для написания своего простенького полиморфного скрипта я выбрал Perl, так как я владею им лучше всего из всех тех языков которые допустимы правилами конкурса. Итак, встречайте, полиморфный скрипт на Perl.
print "Hello, I'm polymorphic\n";
open(Myself, $0);
@Body = <Myself>;
close(Myself);
$Body = join("",@Body);
$cryptKey = int(rand(255));
for($i=0;$i<length($Body);$i++)
{@Crypt[$i]=(ord(substr($Body,$i,1))) * ($cryptKey);}
for($i=0;$i<6;$i++)
{$Var[$i]=chr(int(rand(25)+65)).int(rand(65535));}
$glue = chr(int(rand(25)+65));
$Crypt = join($glue,@Crypt);
open(File, ">$0");
print File "\$$Var[0]=\"$Crypt\";";
print File "\@$Var[1]=split(\"$glue\",\$$Var[0]);";
print File "for(\$$Var[2]=0;\$$Var[2]<(\@$Var[1]);\$$Var[2]++)
{\$$Var[3].=chr(\@$Var[1] [\$$Var[2]]/$cryptKey);}";
print File "open($Var[4],\">\$0\"); print $Var[4] \$$Var[3];
close($Var[4]); \@$Var[5]=(\"perl\",\"$0\"); system(\@$Var[5]);";
close(File);
При первом запуске он зашифрует и перезапишет себя, и превратится в нечто подобное:
$T17629="16912H17214H15855H16610H17516H4832H5134H10872H
15251H16308H16308H16761H6644H4832H11023H5889H16459H4832
…
for($P51339=0;$P51339<(@B11503);$P51339++)
{$G13527.=chr(@B11503 [$P51339]/151);}open(T50805,”>$0″);
print T50805 $G13527;close(T50805); @X30941=(”perl”,”d2.pl”);
system(@X30941);
При каждом последующем запуске, в результате случайной генерации ключей, имен переменных и т.д., возможны незначительные изменения в размере файла.
Попрошу читателей не бояться запускать этот скрипт, это не вирус, ничего заражать он не будет, никаких троянских функций тоже не несет, просто перезаписывает себя и все.
Еще раз напоминаю: это — очень простой скрипт, который я написал за 20 минут. Если проявить фантазию, можно сделать все что угодно, даже нечто такое, обо что современные антивирусные технологии вроде эвристики и эмуляторов кода зубы пообломают.
Комментариев: 21
Wi-FU
Август 22nd, 2008 @ 04:36
1Теперь смотри. Во первых код не пашет. После второго запуска он выплевывает гавно. Во вторых ПОЛИМОРФИЗМ предполагает ПОЛНОЕ изменение тела вируса. wiki:
[ Полиморфизм заключается в формировании кода вируса «на лету» — уже во время исполнения, при этом сама процедура, формирующая код также не должна быть постоянной и видоизменяется при каждом новом заражении. ]
[root@blackhat /home/blackhat/perl]# chmod 777 source.pl
[root@blackhat /home/blackhat/perl]# cp source.pl test1.pl
[root@blackhat /home/blackhat/perl]# cat test1.pl
#!/usr/bin/perl
print “Hello, I’m polymorphic\n”;
open(Myself, $0);
@Body = ;
close(Myself);
$Body = join(”",@Body);
$cryptKey = int(rand(255));
for($i=0;$i$0″);
print File “\$$Var[0]=\”$Crypt\”;”;
print File “\@$Var[1]=split(\”$glue\”,\$$Var[0]);”;
print File “for(\$$Var[2]=0;\$$Var[2]\$0\”); print $Var[4] \$$Var[3];
close($Var[4]); \@$Var[5]=(\”perl\”,\”$0\”); system(\@$Var[5]);”;
close(File);
[root@blackhat /home/blackhat/perl]# ./test1.pl
Hello, I’m polymorphic
[root@blackhat /home/blackhat/perl]# ee test1.pl
$A61318=”4060G3828G5452G13572G13340G13224G5452G11368G12180G12760G5452G12992G11716G13224G12528G1160G1
{$U19017.=chr(@O5173 [$A46271]/116);}open(D24035,”>$0″); print D24035 $U19017;
close(D24035); @G29715=(”perl”,”./test1.pl”); system(@G29715);
[root@blackhat /home/blackhat/perl]# ./test1.pl
./test1.pl: line 1: syntax error near unexpected token `”G”,$A61318′
./test1.pl: line 1:
xenonex
Август 22nd, 2008 @ 09:59
2Неправда. У меня этот скрипт как положено сработал.
Автору спасибо за пример, очень интересно.
x0x01
Август 22nd, 2008 @ 10:34
3Поддерживаю, скрипт рабочий, однако не до конца полиморфный ;) но пример интересный, спасибо.
Революционный Матрос Железняк
Август 22nd, 2008 @ 11:45
42 Wi-FU:
Во-первых попрошу у меня в комментах не выражаться. Ато забаню на веки вечные.
Во-вторых разве код в этом примере не формируется “на лету”?
В-третьих чтобы сделать скрипт до конца полиморфным, можно “разбавить” код какими-нибудь не имеющими смысла конструкциями в случайных местах, тогда оба условия будут соблюдены; получится классический полиморфик, однако для наглядности я этого делать не стал.
Victor G.
Август 22nd, 2008 @ 12:16
5Гм… я и не знал что перл поддерживает полиморфизм…
Революционный Матрос Железняк
Август 22nd, 2008 @ 12:28
62 Victor G.: Смотря что считать полиморфизмом. Мне кажется вы путаете полиморфизм в ООП с тем, что мы тут обсуждаем. А так, в общем, да, perl, как объекто ориентированный язык полиморфизм поддерживает, да ;-)
Wi-FU
Август 22nd, 2008 @ 12:42
7>> Во-первых попрошу у меня в комментах не выражаться. Ато забаню на веки вечные
это ты про что?
слушай мне видео заснять как скрипт не пашет?
[root@blackhat /home/blackhat/perl]# perl -v | grep “built”
This is perl, v5.8.8 built for i386-freebsd-64int
[root@blackhat /home/blackhat/perl]# uname -a
FreeBSD blackhat 7.0-RELEASE FreeBSD 7.0-RELEASE #0: Sun Feb 24 19:59:52 UTC 2008 root@logan.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC i386
[root@blackhat /home/blackhat/perl]# id
uid=0(root) gid=0(wheel) groups=0(wheel),5(operator)
ещё раз говорю, на скриптовых языках ПОЛИМОРФИЗМ не возможен, как же ты этого не поймешь. частичный морф да, частичное убогое (как этот вариант) криптование да, но ПОЛИМОРФИЗМ НЕ-ВО-ЗМ-ОЖ-ЕН !
Longer
Август 22nd, 2008 @ 12:58
8>to Wi-FU
OMG!!! работаете под рутом… да еще и чужеродные скрипты запускаете(мало ли в чем автор скрипта может заверить)… ппц…
Революционный Матрос Железняк
Август 22nd, 2008 @ 13:14
92 Wi-FU: Мне кажется ты путаешь полиморфизм с метаморфизмом. См. определения:
Полиморфизм — технология, используемая для шифрования тела вируса и создания нового механизма шифрования и нового ключа каждый раз, когда вирус копирует себя.
Метаморфизм —технология, изменяющая весь исходный код вируса при создании новых копий.
http://www.securitylab.ru/analytics/288278.php
Да и кстати, откуда мне знать почему у всех работает а у тебя — нет.
OsO
Август 22nd, 2008 @ 13:54
10Железняк прав - это именно что полиморфик. А фулл морфинг вообще вещь сложная, и далеко не каждому под силу, не важно на каком языке. Ассемблер тут лучше всего подходит конечно, ну а утверждать “невозможно”, потому что этого никто не делал, по меньшей мере глупо.
Wi-FU
Август 22nd, 2008 @ 15:16
11> Longer
во-первых это VMWare malware test stand со снап шотами.
во-вторых я знаю что делает скрипт, я же вижу его исходник.
> Революционный Матрос Железняк
скрипт заработал, я запускал по другому не много
[i]Полиморфизм заключается в формировании кода вируса «на лету» — уже во время исполнения, [b]при этом сама процедура, формирующая код также не должна быть постоянной и видоизменяется при каждом новом заражении.[/b][/i]
http://img149.imageshack.us/img149/1379/31797934uc9.jpg
Революционный Матрос Железняк
Август 22nd, 2008 @ 20:02
122 Wi-FU: Ну хорошо, давай крутой уокер, покажи насколько ты крут. Тебе мы разрешаем писать на чем угодно, хоть на ассемблере, напиши что-то такое этакое, чем сможешь нас удивить. Напиши какой-нить метаморф, который будет изменяться до неузнаваемости через два поколения, и мы с радостью присудим первое место в конкурсе тебе.
Longer
Август 22nd, 2008 @ 23:30
13>to Wi-FU
на лоре помницо был скрипт “в одну строчку на перле”… сюда ее или ей подобную с таким же успехом незаметно можо впихнуть… или сделат так чтобы она при определнных условиях сгенилась… напр. на N’ом шаге трансформации…
канечно на виртуальной машине такое не оч. страшно… если бы такое имело место быть…
Wi-FU
Август 23rd, 2008 @ 05:51
14>to Longer
я всё понимаю, но я же вижу что в скрипте, поэтому запустил.
на живой тачке наверное только идиот запустит, а под рутом - конченный идиот.
>Революционный Матрос Железняк
назови ОС под каторую надо будет писать
Wi-FU
Август 23rd, 2008 @ 06:00
15>Революционный Матрос Железняк
Я не понимаю почему ты так резко воспринимаешь мои слова. Я просто хочу уточнить условия конкурса и всё. Ты наверное сам понимаешь, и тебе не надо объяснять ПОЧЕМУ нужно указать ОС под которую надо будет писать код. Так как ты указал :
б) Способность эффективно скрывать себя (различные стелс-технологии);
А это уже говорит минимум об перехватах функций в usermode, и максимум это уже спайсы\добавление syscall’ов\и dkom в ядре. Ещё я не совсем могу понять как участники конкурса будут это делать на перле и питоне. Нет я конечно понимаю что среди участников могут быть гении которые будут писать шеллкоды для ВСЕХ unix os, внедрять их в ядра, писаться в EP и скрывать потоки выполняемых скриптов…но на это нужно два года как минимум.
Не обижайся ;)
Революционный Матрос Железняк
Август 23rd, 2008 @ 11:45
162 Wi-FU:
>назови ОС под каторую надо будет писать
Пусть это будет фряха.
Собственно под стелсом подразумевался, разумеется никак не перехват системных функций, а под полиморфизмом никак уж не метаморф.
Тем не менее, мы разрешаем тебе и еще одному товарищу использовать любой язык программирования, и называем конкретную ОС. На таких условиях ты готов участвовать?
Искандер
Август 24th, 2008 @ 18:21
172 Революционный Матрос Железняк
Ок, если под стелсом понимаются не перехват системных вызовов, то что? Надеюсь не
mv script.pl .script.pl
Остается открытым вопрос - скрипт запустит юзер? От рута? А если AppArmor/SELinux включен?
Революционный Матрос Железняк
Август 24th, 2008 @ 20:12
182 Искандер: да хотя бы и это, почему нет. В более продвинутых вариантах вирус вообще может выдавать себя за консоль, и дурачить пользователя уже по полной, хотя это и не так просто реализовать.
Искандер
Август 25th, 2008 @ 09:26
192 Революционный Матрос Железняк - да реализовать то может быть и не так уж и сложно, не обязательно ведь писать шелл с нуля. Открываем исходники того же баша (подавляющее большинство пользуются именно им), дописываем строчки вируса. Проблема в другом - как заставить юзера запустить скрипт, который заменит его /bin/bash Это, к счастью, не винда, где достаточно по флешке один раз кликнуть.
Хотя конечно, как уже говорилось на лоре, достаточно выложить пакет
ATI_3d_video-drivers-compiz-hibernate-patched.deb на форуме. Народ не дурак, сам знает что такое от рута запускать надо….
Wi-Fu
Август 27th, 2008 @ 11:44
202 Революционный Матрос Железняк
готов. время покажет.
2 Искандер
не обязательно править сорцы и пересобирать шелл, можно использовать mith, между юзером и консолью.
mikebeatz
Сентябрь 6th, 2008 @ 01:33
21Советовать всегда проще, но по мне - делай так как тебе больше нравится. Как ты себя комфортнее чувствуешь, так и надо поступать.
RSS лента комментариев к этой записи · Ссылка для трэкбэка
Добавить комментарий
Рубрики
Архив
Друзья
живой журнал
счетчики
диски почтой (доставка по казахстану и СНГ)
ПЕРВЫЙ КАЗАХСТАНСКИЙ БЛОГ О UNIX-ПОДОБНЫХ ОПЕРАЦИОННЫХ СИСТЕМАХ

обзоры UNIX-систем | полезные советы | литература по UNIX | эмуляторы X86 | Linux в Казахстане | Linux в Алматы
ALUG | Свободное ПО в Казахстане | Open Source в Казахстане | Разработка под UNIX | Linux Game Development
Серверные решения | BSD-системы | Графика в UNIX | UNIX Desktop | Портирование программ | Исторические материалы
ВСЕ О UNIX-LIKE ОПЕРАЦИОННЫХ СИСТЕМАХ
kernel.kz © 2007-2008
блог работает на WordPress