Сервер в кармане, или просто о сложном!

SENDMAIL: Копирование исходящей почты со всех компьютеров локальной сети, за исключением явно указанных компьютеров, копирование исходящей почты которых не должно производиться.

Обновлено: 13.09.2025

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

Имеем: FreeBSD 6.0, sendmail 8.13.6

Решение:

Проверить версию sendmail можно так:
в командной строке вводим (как root):

# sendmail -bt
ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
Enter <ruleset> <address>
> $v
8.13.6
>

Версию FreeBSD проверить можно так (как root): # uname –a

Не думаю, что необходимы именно такие (или не ниже) версии, но на всякий случай.

Итак, собственно решение.

Первое.

Создаем файл

# ee /usr/share/sendmail/cf/mailer/copymail.m4

в который пишем:

PUSHDIVERT(-1)

ifdef(`COPYMAIL_MAILBOX',,
	`define(`COPYMAIL_MAILBOX', `postmaster')')dnl

ifdef(`NOCOPY_USERS',,
	`define(`NOCOPY_USERS', `-o /etc/mail/nocopy-users')')dnl

ifdef(`NOCOPY_CONFIG',,
	`errprint(`*** You must define NOCOPY_CONFIG for copymail mailer!!! ***')')dnl

POPDIVERT
#########################################
###   COPYMAIL Mailer specification   ###
#########################################

VERSIONID(`$Id: cpsendmail.html,v 1.2 2002/06/14 18:39:10 freeman Exp $')dnl

LOCAL_CONFIG
F{NOCOPY}NOCOPY_USERS

LOCAL_RULE_0
# Send all mail (except $={NOCOPY}) to copymail mailer
R$* < @ $+ . > $*			$: $1 < @ $2 . > $3 $| $1 @ $2
R$* < @ $+ . > $* $| $={NOCOPY}		$@ $1 <@ $2 . > $3
R$* < @ $+ . > $* $| $*			$: $1 <@ $2 . > $3 $| $&{client_addr}
R$* < @ $+ . > $* $| $={NOCOPY}		$@ $1 <@ $2 . > $3
R$* < @ $+ . > $* $| $*			$: $1 <@ $2 . > $3 $| $&f
R$* < @ $+ . > $* $| <$*>		$: $1 <@ $2 . > $3 $| $4
R$* < @ $+ . > $* $| $={NOCOPY}		$@ $1 <@ $2 . > $3
R$* < @ $+ . > $* $| $*			$#copymail $@ localhost $: $1 < @ $2 . > $3

# Send message to original recipient + additional mailbox: COPYMAIL_MAILBOX
Mcopymail, P=/usr/sbin/sendmail, F=fmSDFMu, S=0, R=0,
	A=sendmail -N never -C NOCOPY_CONFIG COPYMAIL_MAILBOX $u

2. Редактируем sendmail.copy.mc

Скопируйте ваш sendmail.mc (конфигурационный файл) как sendmail.copy.mc

# cp /etc/mail/sendmail.mc /etc/mail/sendmail.copy.mc

В конец нового файла sendmail.copy.mc добавте следующие строки:

define(`COPYMAIL_MAILBOX',`user@domen')
define(`NOCOPY_CONFIG',`/etc/mail/sendmail.cf')
MAILER(copymail)

В итоге мой файл sendmail.copy.mc (точнее, его конец) стал вот такого вида:

define(`COPYMAIL_MAILBOX',`user@localhost')
define(`NOCOPY_CONFIG',`/etc/mail/sendmail.cf')
MAILER(local)
MAILER(copymail)
MAILER(smtp)

где user@localhost – адрес локального пользователя, на который будут приходить копии отправленных писем.

3. Компилируем cf

Необходимо скомпилировать этот самый sendmail.copy.mc в sendmail.copy.cf

Для этого делаем следующее:

# m4 /usr/share/sendmail/cf/m4/cf.m4 /etc/mail/sendmail.copy.mc > /etc/mail/sendmail.copy.cf

(это если у вас FreeBSD. Подробнее о компиляции .cf файлов для sendmail смотри здесь: http://www.sendmail.org/m4/intro.html)

Теперь у вас появился файл sendmail.copy.cf по адресу:

/etc/mail/sendmail.copy.cf

4. Кому не копируем почту

Создаем собственно файл, в котором будут указаны те пользователи, почту которых копировать не надо. Будьте внимательны!

# touch /etc/mail/nocopy-users

Следует поместить почтовые адреса (в виде user@FQDN-domen ) или IP адреса (в форме X.X.X.X) в этот файл. Почтовые сообщения приходящие на почтовые адреса¹, перечисленные в /etc/mail/nocopy-users или отправлямые от почтового адреса² или с IP адреса, перечисленных в /etc/mail/nocopy-users, не будут копироваться.

5. Проверяем

Собственно, все готово для тестирования того, что мы сделали.

# killall sendmail
# /usr/sbin/sendmail -bd -C /etc/mail/sendmail.copy.cf
# /usr/sbin/sendmail -q30m -C /etc/mail/sendmail.cf

Такой запуск sendmail необходим для того, что бы письмо, находящееся в очереди не копировалось каждые N минут, при каждой попытке доставки. Первая копия (-bd) работает как SMTP daemon, принимая письма (и копируя их). Вторая копия (-q30) работает обработчиком (queueing) очереди, доставляя письма находящиеся в очереди (и не копируя их, так как перед тем как попасть в очередь письма уже были скопированы).

Можете проверять систему. С клиентской машины отправляете письмо (естественно, рассылка писем до наших экспериментов должна быть настроена), и проверяете, получил ли локальный пользователь user письмо. Проверить можно, например, так:

# less /var/mail/user

Удачи!

Данный вопрос также рассмотрен в статье по адресу: http://www.vnc.org.ua/copymail/cpsendmail.html

Вышеизложенный материал не претендует на полноту, четкость, ясность или достоверность изложения и предоставляется автором "КАК ЕСТЬ". Автор не несет никакой отвественности за любое использование данного материала. Любое использование, копирование, цитирование, полностью или частично должно включать данный текст, ссылку на данный ресурс, а так же следующию строку без изменений: 2001-2002, O. Koreshkov .


Настройка Sendmail

Обновлено: 13.09.2025

Конфигурационный файл sendmail

Пожалуй самым сложным, с точки зрения настройки и сопровождения, из всех программных компонентов операционных систем семейства UNIX является программа sendmail. Те, кто видел хотя бы раз его конфигурационный файл, в этом нисколько не сомневаются. Такая сложность возникла не на пустом месте - она порождение условий существования в самом беспорядочном мире - мире электронной почты. Прямое редактирование конфигурационного файла программы sendmail, обычно носящего имя "sendmail.cf" (во FreeBSD этот файл располагается в каталоге "/etc/mail"), в особенности редактирование так называемых правил хранимых в нем, - задача посильная далеко немногим. Однако, необходимость подобного прямого хирургического вмешательства - явление крайне редкое. В большинстве случаев можно (и нужно) прибегнуть к помощи макропроцессора "m4(1)".Также см. построение файла sendmail.cf.

Сам по себе макропроцессор m4 не является узкоспециальной утилитой и может применяться во многих сферах, где необходима макрообработка текстовых данных. В случае с sendmail, для последнего создана богатая библиотека макросов формата m4, являющаяся штатным компонентом исходного кода самого sendmail, соответственно, поставляемая вместе с исходным кодом и позволяющая автоматизировать и упростить настройку sendmail в подавляющем большинстве случаев. Чем мы, собственно, сейчас и займемся. Подробное описание настройки sendmail при помощи m4 приведено в файле "SENDMAIL_ROOT/cf/README" (здесь SENDMAIL_ROOT - корень дерева исходного кода senmail, во FreeBSD это каталог "/usr/share/sendmail"), мы же ограничимся описанием нашего конкретного случая.

Имя файл исходного кода m4 обычно имеет суффикс ".mc", примеры готовых подобных конфигурационных файлов можно найти в каталоге "SENDMAIL_ROOT/cf/cf". Нам предстоит написать нечто подобное, свое. На синтаксисе m4 мы останавливаться не будем в силу его простоты, за комментариями же можно обратиться к странице руководства m4(1). В качестве отправной точки для файла можно воспользоваться уже готовой заготовкой для конкретной ОС из выше приведенного каталога. Для FreeBSD стандартным исходником m4 конфигурации для sendmail является файл "/etc/mail/freebsd.mc". Однако, наш конфигурационный файл достаточно сильно отличается от того, что имеется в наличии:


01: VERSIONID(`@(#)ironbox.mc,v 0.0.0 (vap@vap.org.ru) 2002/11/30')
02: OSTYPE(freebsd4)
03: DOMAIN(generic)
04: 
05: FEATURE(local_lmtp)
06: FEATURE(nocanonify)
07: FEATURE(accept_unresolvable_domains)
08: FEATURE(accept_unqualified_senders)
09: FEATURE(virtusertable)
10: FEATURE(genericstable)
11: FEATURE(masquerade_envelope)
12: FEATURE(always_add_domain)
13:
14: VIRTUSER_DOMAIN_FILE(`/etc/mail/virtusertable.domains')
15:
16: define(`SMART_HOST', `mail.infopac.ru')
17: define(`confBIND_OPTS', `-DNSRCH -DEFNAMES')
18: define(`confSERVICE_SWITCH_FILE', `/etc/mail/service.switch')
19: define(`confSMTP_MAILER', `smtp8')
20: define(`confTO_IDENT', `0')
21: define(`confTO_QUEUEWARN', `16h')
22: define(`confTO_QUEUERETURN', `8d')
23: define(`confCON_EXPENSIVE', `True')
24: define(`SMTP_MAILER_FLAGS', `e')
25:
26: MAILER(local)
27: MAILER(smtp)

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

Рассмотрим приведенный конфигурационный файл построчно.

Строка 01. Содержит определение версии файла, что позволяет упростить возможное дальнейшее сопровождение. Строка не является обязательной, но ее наличие не будет лишним. Этот макрос всего лишь дополняет результирующий файл строкой с информацией о версии. Формат самой строки произволен и может содержать, к примеру, информацию о версии в формате SCCS, RCS, CVS или каком-либо ином.

Пара пояснений. Хост, на котором я работаю, носит имя "ironbox", мое имя пользователя в системе, разумеется, - "vap". Остальное понятно без комментариев.

N.B. Обратите внимание, что в макросе строка открывается обратной кавычкой [`], а закрывается прямой [']. Таков синтаксис и за этим нужно следить внимательно, поскольку сообщения об ошибке при трансляции не будет.

Строка 02. Обязательный макрос объявления типа операционной системы. Выражение стоящее в скобках определяет имя, без суффикса ".m4", подключаемого файла из каталога "SENDMAIL_ROOT/cf/ostype/". Расположенные там файлы содержат определения системно-зависимых вещей, таких как пути доступа к каталогам, файлам и программам; аргументов командных строк программ почтовиков и прочих подобных вещей. Неуказание типа операционной системы приведет к ошибке во время трансляции.

Строка 03. Определение типа почтового домена. Подключает набор макросов задающих параметры специфичные для данного почтового домена. Подключаемые файлы расположены в каталоге "SENDMAIL_ROOT/cf/domain/". Для большинства реализаций вполне подходит "generic".

На этом общая схема конфигурации заканчивается, настает очередь определения особенностей - FEATURE. Стоит отметить, что каждый компонент конфигурации должен иметь свое место в конфигурационном файле, поскольку порядок их следования важен. Полная структура и порядок следования описаны в "SENDMAIL_ROOT/cf/README".

Строка 05. Объявляем, что в нашей системе имеется локальный агент доставки поддерживающий протокол LMTP (local mail transfer protocol - локальный протокол доставки почты, описанный в RFC2033). Для FreeBSD это "mail.local(8)". Имеет ли ваша система локальный почтовик с поддержкой LMPT описано в сопроводительной документации вашей ОС. Вообще говоря, наличие LMTP почтовика не критично, но полезно. Поэтому, если убрать этот параметр, то ничего страшного не произойдет.

Строка 06. Не выполнять канонификацию адресов. Операция канонификации требует выполнения запросов к серверу DNS, что в нашем случае не желательно и мы от этого будем избавляться всеми возможными средствами.

Строки 07 и 08. Указываем sendmail принимать почтовые отправления с неопределенным доменным именем в адресе отправителя или с частично сформированным самим адресом отправителя в команде "MAIL FROM:". Это нужно по простой причине - из-за трудностей доступа к серверу DNS мы все равно не сможем выполнить проверку адресов.

Строка 09. Использование таблицы виртуальных пользователей при доставке почты. По сути - это механизм синонимизации почтовых адресов назначения работающий не только в пространстве имен пользователей как, например, файл "/etc/mail/aliases" (см. "aliases(5)"), но и в пространстве доменов. Для чего эта функциональность нужна будет объяснено ниже. Кроме того, стоит отметить, что для работоспособности этого механизма необходимы еще некоторые, описанные ниже вещи.

Строка 10. Полный функциональный аналог "virtusertable" с той лишь разницей, что этот механизм отрабатывает не в момент доставки почты, а в момент передачи локального почтового сообщения на отправку. Фактически выполняется замена неквалифицированного адреса отправителя в исходящем сообщении, например, адреса не содержащего доменного имени, или иным образом особо описанного адреса на другой адрес содержащий иное имя пользователя и/или доменную часть адреса. Замена выполняется только для адреса отправителя в заголовке сообщения. Опять же, более подробно необходимость этого будет описана чуть позже.

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

Строка 12. Функциональное дополнение к строкам 9, 10 и 11 предписывающее всегда подставлять в адрес доменную часть даже если происходит локальная доставка. Это гарантирует, что механизм подстановки основанный на доменах будет срабатывать во всех случаях.

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

Строка 14. Определение расположения файла содержащего перечень доменов для которых может отрабатываться механизм виртуализации пользователей, включенный в строке 9. Если этот файл будет отсутствовать или будет пуст, то виртуализация будет работать только на уровне имен локальных пользователей, то есть будет полностью аналогична "aliases(5)". Формат файла будет описан ниже.

Строка 16. Объявляет доменное имя "продвинутого" хоста, который собственно и будет заниматься пересылкой нашей исходящей почты. Здесь "mail.infopac.ru" должно быть заменено вами на имя почтовой системы используемого вами провайдера.

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

Строка 18. Еще один "гвоздь в крышку гроба" DNS. Фактически здесь мы только определяем расположение и использование файла коммутатора сервисов. Посредством этого механизма мы запретим обращения к DNS сервису, что будет описано позже.

Строка 19. Мы живем в стране, где для кодирования символов используются все 8 бит байта, об этом и говорим MTA, чтобы передавал все как есть в 8-битовом кодировании, а не занимался ненужным преобразованием в 7-битный формат посредством MIME64 кодирования тела сообщения.

Строка 20. Устанавливаем тайм-аут на исполнение операции "IDENT" в 0 секунд. Это сервис практически нигде не используется, а его обработка приводит к бесполезным дополнительным задержкам при передаче почты.

Строки 21 и 22. Режим работы с очередью почтовых сообщений. Учитывая то, что отправка из очереди будет выполнена только на очередном сеансе связи, который будет может через час, а может завтра, устанавливаем тайм-аут предупреждения (строка 21) о невозможности доставки на достаточно длинный срок, здесь - 16 часов. Ну и, соответственно, возврат сообщения при невозможности его отправки (строка 22) по истечении 8 дней.

Строки 23 и 24. Запрещаем доставлять почту немедленно для так называемых дорогостоящих (expensive) агентов доставки (строка 23). Фактически это приводит к тому, что почта, которая должна доставляться агентом объявленным как дорогостоящий, будет просто устанавливаться в очередь, и там покорно ждать своего часа. Теперь, в строке 24, объявляем SMTP агента доставки как дорогостоящего. Таким образом добиваемся того, что вся локальная почта будет доставляться немедленно, а внешняя будет устанавливаться в очередь.

Строки 26 и 27. Последняя описываемая группа - группа используемых почтовиков. Это минимально необходимый и обязательный в нашем случае набор. Здесь "local" - почтовик локальной доставки, "smtp" - доставка посредством протокола SMTP через TCP/IP соединение.

На этом конфигурационный макро-файл завершен. Трансляция его в формат конфигурационного файла sendmail выполняется командой вида:

m4 -D_CF_DIR_=${CFDIR}/ ${CFDIR}/m4/cf.m4 config.mc > config.cf

Здесь ${CFDIR} - корневой каталог конфигурационной библиотеки sendmail - "SENDMAIL_ROOT/cf/", во FreeBSD это - "/usr/src/contrib/sendmail/cf". Определение каталога для "-D_CF_DIR_" должно обязательно заканчиваться "/". Вместо "config.mc" и "config.cf" должны быть реальные имена ваших файлов. Для FreeBSD определение "-D_CF_DIR_" может быть опущено, поэтому в моем случае команда имела вид:

m4 /usr/src/contrib/sendmail/cf/m4/cf.m4 ironbox.mc > ironbox.cf

Внешние файлы и сервисы

Получение конфигурационного файла sendmail - полдела. Теперь перейдем к конфигурации внешних для sendmail, но логически с ним связанных компонентов.

/etc/hosts

Для начала в файле "/etc/hosts" необходимо прописать IP адрес соответствующий доменному имени хоста объявленному в директиве строки 15 исходного файла конфигурации. В моем случае строка выглядит так:

217.77.96.6	mail.infopac.ru

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

Сама локальная система разрешения имен должна быть настроена на первичное использование "/etc/hosts", а именно в файле "/etc/host.conf" предложение "hosts" должно предшествовать предложению "bind". Подробнее смотри hosts(5) и host.conf(5). Сказанное касается и всех других имен хостов относительно которых требуется разрешение соответствующих им IP адресов. Это необходимо для избежания лишних запросов к внешнему DNS серверу, а следовательно позволит избежать ненужных установок коммутируемого соединения.

/etc/mail/genericstable

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

имя_пользователя	адрес_электронной_почты

Трюк состоит в следующем. Если вы будете отправлять почту через локальный MTA из своего пользовательского бюджета, то во всей исходящей корреспонденции фактический ваш адрес пользователя в системе будет заменен на указанный здесь адрес, который будет подставлен в поле "From". Если в системе несколько пользователей, то, разумеется, для каждого должно существовать свое вхождение в файле. У меня содержимое этого файла выглядит так:

vap	vap@vap.org.ru

Это гарантирует, что вся моя исходящая корреспонденция будет иметь на выходе адрес отправителя "vap@vap.org.ru".

Из данного текстового исходного файла должна быть сформирована хэш-база командой:

makemap hash /etc/mail/genericstable.db < /etc/mail/genericstable

/etc/mail/service.switch

Теперь создадим файл коммутатора сервисов. В нашем случае, в соответствии с заданным в директиве строки 18 значением, это будет файл "/etc/mail/service.switch". Этот текстовый файл должен содержать единственную строку:

hosts	files

Строка предписывает sendmail использовать только информацию из файла "/etc/hosts" при разрешении имен во время доставки почты. Более подробно использование коммутатора сервисов описано в "Sendmail Installation and Operation Guide", разделе "2.5. The Service Switch".

/etc/mail/virtusertable

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

vap@vap.org.ru	vap
vap@infopac.ru	vap

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

Из данного текстового исходного файла должна быть сформирована хэш-база командой подобной команде для файла "/etc/mail/genericstable".

Вообще говоря, функциональные возможности виртуальных таблиц для файлов "/etc/mail/genericstable" и "/etc/mail/virtusertable" значительно выше приведенных здесь. Механика их работы полностью описана в документе "SENDMAIL_ROOT/cf/README".

/etc/mail/virtusertable.domains

Механизм подстановки адресов, описанный для "/etc/mail/virtusertable", будет работать только в том случае, если сам исходный домен, для которого выполняется подстановка, объявлен как виртуальный. В нашем случае это делается посредством построчного перечисления всех этих доменов в данном текстовом файле. В моем случае он имеет вид:

vap.org.ru
infopac.ru

Хэш базы для файла генерировать не нужно.

Прочее

Создаем, если он еще не создан, файл с именами локального хоста. Нам он без надобности, но sendmail его хочет. При необходимости файл можно будет потом приметить по назначению. Для создания, от пользователя "root" выполняем:

ironbox:~# touch /etc/mail/local-host-names

Поскольку мы не будем выступать SMTP сервером, то и периодически обрабатывать почтовую очередь не имеет смысла. Поэтому нужно изменить способ запуска sendmail на загрузке системы. Для этого в файле "/etc/rc.conf" пишем:

sendmail_enable="YES"
sendmail_flags="-bd"

То есть демон будет присутствовать, но не будет обрабатывать свою очередь. Подробнее смотри sendmail(8). Завершаем работу запущенного демона командой выполняемой от пользователя "root":

ironbox:~# killall sendmail

И запускаем демона в новом режиме:

ironbox:~# /usr/sbin/sendmail -bd

/etc/mail/Makefile

Во FreeBSD, с версии, если не ошибаюсь, 4.3, в каталоге "/etc/mail" есть полезная вещица - файл "Makefile", который позволяет одним приемом получить конфигурационный файл для sendmail одновременно с генерацией всех необходимых хэш-баз. Для этого достаточно придерживаться соглашений о именовании исходных и сопутствующих файлов, держать их все в указанном каталоге, а так же сделать символическую ссылку с именем "sendmail.cf" указывающую на ".cf" файл вашей конфигурации. Например, если исходник конфигурации называется "myhost.mc", то ссылка должна быть на файл "myhost.cf". В случае если у вас все так, как здесь написано, то исполнение в каталоге "/etc/mail" команды:

make all

сделает все для вас. Подробнее об этом написано в комментариях самого "/etc/mail/Makefile".

Тестирование

Как говорится - настал момент истины. Если вы все сделали так, как здесь написано, то можно приступить к тестированию. Для начала проверим, что sendmail ведет себя так, как мы того ожидаем. Для этого запускам его в тестовом режиме:

ironbox:~# sendmail -bt
ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
Enter <ruleset> <address>
> 3,0 vap
canonify           input: vap
Canonify2          input: vap
Canonify2        returns: vap
canonify         returns: vap
parse              input: vap
Parse0             input: vap
Parse0           returns: vap
ParseLocal         input: vap
ParseLocal       returns: vap
Parse1             input: vap
Parse1           returns: $# local $: vap
parse            returns: $# local $: vap
> 3,0 vap@vap.org.ru
canonify           input: vap @ vap . org . ru
Canonify2          input: vap < @ vap . org . ru >
Canonify2        returns: vap < @ vap . org . ru . >
canonify         returns: vap < @ vap . org . ru . >
parse              input: vap < @ vap . org . ru . >
Parse0             input: vap < @ vap . org . ru . >
Parse0           returns: vap < @ vap . org . ru . >
ParseLocal         input: vap < @ vap . org . ru . >
ParseLocal       returns: vap < @ vap . org . ru . >
Parse1             input: vap < @ vap . org . ru . >
Recurse            input: vap
canonify           input: vap
Canonify2          input: vap
Canonify2        returns: vap
canonify         returns: vap
parse              input: vap
Parse0             input: vap
Parse0           returns: vap
ParseLocal         input: vap
ParseLocal       returns: vap
Parse1             input: vap
Parse1           returns: $# local $: vap
parse            returns: $# local $: vap
Recurse          returns: $# local $: vap
Parse1           returns: $# local $: vap
parse            returns: $# local $: vap
> 3,0 vap@infopac.ru
canonify           input: vap @ infopac . ru
Canonify2          input: vap < @ infopac . ru >
Canonify2        returns: vap < @ infopac . ru . >
canonify         returns: vap < @ infopac . ru . >
parse              input: vap < @ infopac . ru . >
Parse0             input: vap < @ infopac . ru . >
Parse0           returns: vap < @ infopac . ru . >
ParseLocal         input: vap < @ infopac . ru . >
ParseLocal       returns: vap < @ infopac . ru . >
Parse1             input: vap < @ infopac . ru . >
Recurse            input: vap
canonify           input: vap
Canonify2          input: vap
Canonify2        returns: vap
canonify         returns: vap
parse              input: vap
Parse0             input: vap
Parse0           returns: vap
ParseLocal         input: vap
ParseLocal       returns: vap
Parse1             input: vap
Parse1           returns: $# local $: vap
parse            returns: $# local $: vap
Recurse          returns: $# local $: vap
Parse1           returns: $# local $: vap
parse            returns: $# local $: vap
> 3,0 somebody@somewere.net
canonify           input: somebody @ somewere . net
Canonify2          input: somebody < @ somewere . net >
Canonify2        returns: somebody < @ somewere . net . >
canonify         returns: somebody < @ somewere . net . >
parse              input: somebody < @ somewere . net . >
Parse0             input: somebody < @ somewere . net . >
Parse0           returns: somebody < @ somewere . net . >
ParseLocal         input: somebody < @ somewere . net . >
ParseLocal       returns: somebody < @ somewere . net . >
Parse1             input: somebody < @ somewere . net . >
MailerToTriple     input: < mail . infopac . ru > somebody
	< @ somewere . net . >
MailerToTriple   returns: $# relay $@ mail . infopac . ru $: somebody
	< @ somewere . net . >
Parse1           returns: $# relay $@ mail . infopac . ru $: somebody
	< @ somewere . net . >
parse            returns: $# relay $@ mail . infopac . ru $: somebody
	< @ somewere . net . >
> ^D

Жирным выделен клавиатурный ввод. Из примера хорошо видно, что свои адреса будут доставляться локально, а чужие будут отдаваться не пересылку. В вашем случае, естественно, нужно вводить и ваши же адреса.

Не забывайте, что sendmail у нас работает в режиме "установки в очередь", а это значит, что любое принятое на доставку письмо будет именно устанавливаться в очередь на обработку, но не доставляться. Для того чтобы sendmail обработал свою очередь и выполнил доставку его нужно запустить с ключом "-q":

ironbox:~# sendmail -q

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

Литература

  1. FreeBSD: /usr/src/contrib/sendmail/README
  2. FreeBSD: /usr/src/contrib/sendmail/doc/op/op.me
  3. FreeBSD: /usr/src/contrib/sendmail/cf/README
  4. http://www.sendmail.org/faq/

Источник: http://vap.org.ru/mail@dialup/03.shtml


Установка Sendmail в качестве транзитного почтового релея

Обновлено: 13.09.2025

Настраиваем sendmail (8.12.6/7) в качестве транзитного почтового релея.

Установка sendmail

Сначала устанавливаем из портов sendmail c поддержкой cyrus sasl (система аутентификации).

Настройка sendmail

Будем считать, что мы настраиваем все те же два виртуальных почтовых домена: perldoc.ru и perlfaq.ru. Для настройки sendmail в каечстве транзитного почтового сервера необходимо кроме файлов aliases и access создать (изи изменить) еще три файла:

  • freebsd.mc
  • relay-domains
  • mailertable

relay-domains

В этом файле содержатся имена всех доменов, для которых наш сервер является транзитным. Файл расположен в каталоге /etc/mail и представляет собой список вида

domain1.com
domain2.com
...
...

В этот файл мы добавляем строки

perldoc.ru
perlfaq.ru

mailertable

В файле mailertable мы указываем sendmail, куда перенаправлять почту, пришедшую на адреса в доменах perldoc.ru и perlfaq.ru. Поскольку наш сервер - транзитный, мы должны прописать

perldoc.ru		smtp:mail.perldoc.ru
perlfaq.ru		smtp:mail.perlfaq.ru

Вся почта, пришедшая на любые адреса доменов perldoc.ru и perlfaq.ru будет направляться на почтовые сервера mail.perldoc.ru и mail.perlfaq.ru соответственно.

freebsd.mc

Теперь нам осталось только изменить конфигурацию файла freebsd.mc, чтобы sendmail научился работать с виртуальными почтовыми доменами. Здесь надо понимать, что в том случае, когда существует файл, у которого имя совпадает с названием машины (например, для машины с именем genius файл будет genius.mc), он используется вместо файла freebsd.mc.i

Вот примерный вид конфигурационного файла:

1  divert(0)
2  VERSIONID(`$FreeBSD: src/etc/sendmail/freebsd.mc,v 1.10.2.16 16:39:14 gshapiro Exp $')
3  OSTYPE(freebsd4)
4  DOMAIN(generic)
5
6  FEATURE(access_db, `hash -o -T /etc/mail/access')
 7  FEATURE(blacklist_recipients)
 8  FEATURE(local_lmtp)
 9  FEATURE(mailertable, `hash -o /etc/mail/mailertable')
 10 dnl FEATURE(virtusertable, `hash -o /etc/mail/virtusertable')
 11 define(`confCR_FILE', `/etc/mail/relay-domains')dnl
 12 dnl Uncomment to allow relaying based on your MX records.
 13 dnl NOTE: This can allow sites to use your server as a backup MX without
 14 dnl       your permission.
 15 dnl FEATURE(relay_based_on_MX)
 16 
 17 dnl DNS based black hole lists
 18 dnl --------------------------------
 19 dnl DNS based black hole lists come and go on a regular basis
 20 dnl so this file will not serve as a database of the available servers.
 21 dnl For that, visit http://dmoz.org/Computers/Internet/Abuse/Spam/Blacklists/
 22 
 23 dnl Uncomment to activate Realtime Blackhole List
 24 dnl information available at http://www.mail-abuse.com/
 25 dnl NOTE: This is a subscription service as of July 31, 2001
 26 FEATURE(dnsbl)
 27 dnl Alternatively, you can provide your own server and rejection message:
 28 FEATURE(dnsbl, `blackholes.mail-abuse.org', `"550 Mail from " $&{client_addr} "
 rejected, see http://mail-abuse.org/cgi-bin/lookup?" $&{client_addr}')
 29 
 30 dnl Dialup users should uncomment and define this appropriately
 31 dnl define(`SMART_HOST', `your.isp.mail.server')
 32 
 33 dnl Uncomment the first line to change the location of the default
 34 dnl /etc/mail/local-host-names and comment out the second line.
 35 dnl define(`confCW_FILE', `-o /etc/mail/sendmail.cw')
 36 dnl define(`confCW_FILE', `-o /etc/mail/local-host-names')
 37 
 38 dnl Uncomment both of the following lines to listen on IPv6 as well as IPv4
 39 dnl DAEMON_OPTIONS(`Name=IPv4, Family=inet')
 40 dnl DAEMON_OPTIONS(`Name=IPv6, Family=inet6')
 41 
 42 TRUST_AUTH_MECH(`GSSAPI DIGEST-MD5 CRAM-MD5 PLAIN LOGIN')dnl
 43 dnl define(`confAUTH_MECHANISMS', `GSSAPI DIGEST-MD5 CRAM-MD5 PLAIN LOGIN')dnl
 44 enl define(`confDEF_AUTH_INFO', `/etc/mail/auth/auth-info')dnl
 45 FEATURE(`no_default_msa')dnl turn off default entry for MSA
 46 DAEMON_OPTIONS(`Port=25, Name=MSA, M=E')dnl
 47 
 48 define(`confMAX_RCPTS_PER_MESSAGE', `10')
 49 define(`confMAX_MESSAGE_SIZE', `1048576')
 50
 51 define(`confBIND_OPTS', `WorkAroundBrokenAAAA')
 52 define(`confMAX_MIME_HEADER_LENGTH', `256/128')
 53 define(`confNO_RCPT_ACTION', `add-to-undisclosed')
 54 define(`confPRIVACY_FLAGS', `authwarnings,noexpn,novrfy')
 55 MAILER(local)
 56 MAILER(smtp)
 
 

В строке 10 мы указываем имя файла трансляции виртуальных пользователей в настоящих и направление пересылки почты, а в 11-й - имена доменов, для которых мы пересылаем почту.

Запуск и тестирование

Собрав и установив файлы конфигурации sendmail, протестируем результат нашей работы:

telnet relay1.perldoc.ru 25

Escape character is '^]'.
220 relay1.perldoc.ru ESMTP Sendmail 8.12.7/8.12.7; Sun, 18 Jan 2004 08:08:52 +0300 (MSK)
helo stellar
250 relay1.perldoc.ru Hello stellar [XXX.XXX.XXX.XXX], pleased to meet you
mail from:stellar@perldoc.ru>
250 2.1.0 ... Sender ok
 rcpt to:
 250 2.1.5 ... Recipient ok
 data
 354 Enter mail, end with "." on a line by itself
 from:
 to:
 
 test passed
 
 .
 250 2.0.0 i0I58qiZ007078 Message accepted for delivery
 quit
 221 2.0.0 relay1.perldoc.ru closing connection
 Connection closed by foreign host.
 

При этом в лог-файле должна быть примерно такие записи:

Jan 18 08:09:40 fw sm-mta[7078]: i0I58qiZ007078: from=,size=68, class=0, nrcpts=1, msgid=<200401180509.i0I58qiZ007078@relay1.perldoc.ru>, proto=SMTP, daemon=MSA, relay=stellar [XXX.XXX.XXX.XXX] Jan 18 08:09:42 fw sm-mta[7081]: i0I58qiZ007078: to=, delay=00:00:21, xdelay=00:00:02, mailer=esmtp, pri=30055, relay=mail.perldoc.ru. [YYY.YYY.Y.YYY], dsn=2.0.0, stat=Sent (h1ID1Ja5019222 Message accepted for delivery)

Установка и настройка sendmail

Обновлено: 13.09.2025

Настраиваем sendmail (8.12.6/7/8) для виртуального почтового хостинга.

Установка sendmail

Сначала устанавливаем итз портов sendmail c поддержкой cyrus sasl (система аутентификации).

cd /usr/ports/mail/sendmail-sasl
make install

После установки sendmail мы должны изменить файл /etc/make.conf. Добавляем в него строчку

SENDMAIL_CF_DIR=	/usr/local/share/sendmail/cf

Если до этого стоял более старый sendmail, устанавливаем файл submit.cf

make submit.cf

Для запуска sendmail будем использовать следующий сценарий (переименуем его в удобоваримый формат):

mv /usr/local/etc/rc.d/sendmail.sh.sample /usr/local/etc/rc.d/030.sendmail.sh

Для нормального запуска обновленной версии мы должны указать путь к ней (файл /etc/mail/mailer.conf). Это можно сделать либо при помощи команды

make mailer.conf

либо вручную, изменив файл mailer.conf:

sendmail	/usr/local/sbin/sendmail
send-mail	/usr/local/sbin/sendmail
mailq		/usr/local/sbin/sendmail
newaliases	/usr/local/sbin/sendmail
hoststat	/usr/local/sbin/sendmail
purgestat	/usr/local/sbin/sendmail

На этом установка sendmail окончена. Осталоь столько запустить его командой

/usr/local/etc/rc.d/030.sendmail.sh start

sendmail sm-msp-queue

Сообщения sendmail sm-msp-queue говорят о том, что все прошло нормально.

Настройка sendmail

Будем считать, что мы настраиваем два виртуальных почтовых домена: perldoc.ru и perlfaq.ru. Для настройки sendmail c поддержкой виртуального постового хостинга нам потребуется создать (или изменить) следующие файлы:

  • freebsd.mc
  • aliases
  • access
  • local-host-names
  • virtusertable

aliases

Этот файл описывает пользовательские псевдонимы, используемые sendmail. Файл расположен в каталоге /etc/mail и представляет собой список вида

имя addr_1, addr_2, addr_3...

Более подробно структура файла aliases описана в aliases (5). В этот файл мы добавляем строку

root:   admin@perldoc.ru

Вся локальная почта, адресованная пользователю root, теперь будет приходить на адрес admin@perldoc.ru.

access

В этом файле мы указываем, для каких IP адресов sendmail должен принимать и пересылать почту. Поскольку для эих целей мы будем использовать аутентификацию cyrus sasl, мы разрешим только отсылку с локального хоста

localhost.localdomain   RELAY
localhost               RELAY

local-host-names

В этом файле мы храним названия доменов, для которых наш сервер должен обрабатывать почту. Поскольку мы хотим использовать наш сервер для двух виртуальных почтовых доменов perldoc.ru и perlfaq.ru, пропишем их в файл:

perldoc.ru
perlfaq.ru

virtusertable

В файле virtusertable мы указываем sendmail, куда направлять почту, пришедшую на адреса в доменах perldoc.ru и perlfaq.ru.

stellar@perldoc.ru	stellar-perldoc.ru
admin@perldoc.ru	admin-perldoc.ru
@perldoc.ru		error:nouser No such user here

stellar@perlfaq.ru	stellar-perlfaq.ru
@perlfaq.ru		error:nouser No such user here

Вся почта, пришедшая на адрес stellar@perldoc.ru будет направляться в почтовый ящик пользователя stellar-perldoc.ru, а почта, пришедшая на admin@perldoc.ru, соответственно будет отсылаться пользователю admin-perldoc.ru. Тоже самое будет и для домена perlfaq.ru. Если на наш домен будет прислана почта с несуществующем пользователем, сработает строчка

@perldoc.ru		error:nouser No such user here 

и sendmail откажется принимать такое сообщение.

freebsd.mc

Теперь нам осталось только изменить конфигурацию файла freebsd.mc, чтобы sendmail научился работать с виртуальными почтовыми доменами. Здесь надо понимать, что в том случае, когда существует файл, у которого имя совпадает с названием машины (например, для машины с именем genius файл будет genius.mc), он используется вместо файла freebsd.mc

Вот примерный вид конфигурационного файла:

1  divert(0)
2  VERSIONID(`$FreeBSD: src/etc/sendmail/freebsd.mc,v 1.10.2.16 2002/05/22 16:39:14 gshapiro Exp $')
3  OSTYPE(freebsd4)
4  DOMAIN(generic)
5
6  FEATURE(access_db, `hash -o -T /etc/mail/access')
7  FEATURE(blacklist_recipients)
8  FEATURE(local_lmtp)
9  dnl FEATURE(mailertable, `hash -o /etc/mail/mailertable')
10 FEATURE(virtusertable, `hash -o /etc/mail/virtusertable')
11 
12 dnl Uncomment to allow relaying based on your MX records.
13 dnl NOTE: This can allow sites to use your server as a backup MX without
14 dnl       your permission.
15 dnl FEATURE(relay_based_on_MX)
16 
17 dnl DNS based black hole lists
18 dnl --------------------------------
19 dnl DNS based black hole lists come and go on a regular basis
20 dnl so this file will not serve as a database of the available servers.
21 dnl For that, visit http://dmoz.org/Computers/Internet/Abuse/Spam/Blacklists/
22 
23 dnl Uncomment to activate Realtime Blackhole List
24 dnl information available at http://www.mail-abuse.com/
25 dnl NOTE: This is a subscription service as of July 31, 2001
26 FEATURE(dnsbl)
27 dnl Alternatively, you can provide your own server and rejection message:
28 FEATURE(dnsbl, `blackholes.mail-abuse.org', `"550 Mail from " $&{client_addr} "
rejected, see http://mail-abuse.org/cgi-bin/lookup?" $&{client_addr}')
29 
30 dnl Dialup users should uncomment and define this appropriately
31 dnl define(`SMART_HOST', `your.isp.mail.server')
32 
33 dnl Uncomment the first line to change the location of the default
34 dnl /etc/mail/local-host-names and comment out the second line.
35 dnl define(`confCW_FILE', `-o /etc/mail/sendmail.cw')
36 define(`confCW_FILE', `-o /etc/mail/local-host-names')
37 
38 dnl Uncomment both of the following lines to listen on IPv6 as well as IPv4
39 dnl DAEMON_OPTIONS(`Name=IPv4, Family=inet')
40 dnl DAEMON_OPTIONS(`Name=IPv6, Family=inet6')
41 
42 TRUST_AUTH_MECH(`GSSAPI DIGEST-MD5 CRAM-MD5 PLAIN LOGIN')dnl
43 define(`confAUTH_MECHANISMS', `GSSAPI DIGEST-MD5 CRAM-MD5 PLAIN LOGIN')dnl
44 define(`confDEF_AUTH_INFO', `/etc/mail/auth/auth-info')dnl
45 FEATURE(`no_default_msa')dnl turn off default entry for MSA
46 DAEMON_OPTIONS(`Port=25, Name=MSA, M=E')dnl
47 
48 define(`confMAX_RCPTS_PER_MESSAGE', `10')
49 define(`confMAX_MESSAGE_SIZE', `1048576')
50
51 define(`confBIND_OPTS', `WorkAroundBrokenAAAA')
52 define(`confMAX_MIME_HEADER_LENGTH', `256/128')
53 define(`confNO_RCPT_ACTION', `add-to-undisclosed')
54 define(`confPRIVACY_FLAGS', `authwarnings,noexpn,novrfy')
55 MAILER(local)
56 MAILER(smtp)

В строке 6 мы задаем файл с пользовательскими псевдонимами; в десятой строке - имя файла трансляции виртуальных пользователей в настоящих, а в 36-й строке - названия доменов, для которых наш сервер должен обрабатывать почту.
Также ограничим максимальный размер письма одним мегабайтом (строка 49) и запретим рассылать письмо одновременно более, чем 10 получателям (строка 48). Если есть необходимость отправки всей почты на промежуточный SMTP сервер (например, на SMTP сервер провайдера), следует раскомментировать строку 31 и вместо "your.isp.mail.server" указать IP адрес или имя SMTP сервера провайдера.

Запуск и тестирование

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

cd /etc/mail
rm *.db
rm freebsd.cf
make all
make install

Результатом будет нечто вроде этого:

/usr/bin/m4 -D_CF_DIR_=/usr/local/share/sendmail/cf/ /usr/local/share/sendmail/cf/m4/cf.m4 genius.mc > genius.cf /usr/sbin/makemap hash virtusertable.db < virtusertable chmod 0640 virtusertable.db /usr/sbin/makemap hash access.db < access chmod 0640 access.db /usr/sbin/sendmail -bi /etc/mail/aliases: 26 aliases, longest 18 bytes, 276 bytes total chmod 0640 /etc/mail/aliases.db install -m 444 freebsd.cf /etc/mail/sendmail.cf install -m 444 freebsd.submit.cf /etc/mail/submit.cf

Теперь перезапускаем sendmail

/usr/local/etc/rc.d/030.sendmail.sh stop
/usr/local/etc/rc.d/030.sendmail.sh start

и тестируем:

telnet localhost 25

Trying ::1... Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 localhost.my.domain ESMTP Sendmail 8.12.6/8.12.6; Mon, 30 Dec 2002 13:31:56 +0300 (MSK) EHLO localhost 250-localhost.my.domain Hello localhost [127.0.0.1], pleased to meet you 250-ENHANCEDSTATUSCODES 250-PIPELINING 250-8BITMIME 250-SIZE 250-DSN 250-AUTH DIGEST-MD5 CRAM-MD5 PLAIN LOGIN 250-DELIVERBY 250 HELP QUIT 221 2.0.0 localhost.my.domain closing connection

Наличие строчки "250-AUTH DIGEST-MD5 CRAM-MD5 PLAIN LOGIN" говорит нам о том, что sendmail может аутентифицировать пользователя. Добавляем пользователя:

saslpasswd2 admin-perldoc.ru

Password:
Again (for verification):

Вводим пароль пользователя и проверяем:

sasldblistusers2

 admin-perldoc.ru@genius: userPassword 

Собственно говоря, на этом настройка sendmail закончена. Теперь настраиваем The Bat! для того, чтобы можно было отправлять почту с аутентификацией:

Заходим в Ящик -> Свойства почтового ящика -> Транспорт -> Аутентификация

Выделяем чекбокс "Аутентификация SMTP (RFC-2554)".
Переключаем кнопку "Использовать параметры, указанные ниже."
Вводим имя пользователя и пароль, которые создали при помощи saslpasswd2.
Пользователь: admin-perldoc.ru@genius.
Пароль: *********

(!) Обратите внимание на то, что имя пользователя указано вместе с именем машины.
Выделяем чекбокс "Требовать безопасную (MD5) аутентификацию".
 

В том случае, если используется MS Outlook или другой почтовый клиент, в котором нет безопасной аутентификации (DIGEST-MD5, CRAM-MD5), необходимо использовать аутентификацию по методам PLAIN или LOGIN. При этом в качестве имени пользователя надо использовать имя пользователя БЕЗ добавленного имени машины. В нашем случае имя пользователя будет выглядеть так: admin-perldoc.ru.

После отправки письма в лог-файле /var/log/maillog должны быть примерно такие записи:

Dec 30 13:54:41 genius sm-mta[77570]: AUTH=server, relay=xxx.yyy.zzz.kkk [xxx.yyy.zzz.kkk],
	authid=admin-perldoc.ru@genius, mech=CRAM-MD5, bits=0
Поддерживается http://stellar.df.ru


SNMP протокол - принципы, безопасность, применение

Обновлено: 13.09.2025
Евгений

Вступление

Данная статья посвящена протоколу SNMP (Simple Network Management Protocol) - одному из протоколов модели OSI, который практически не был затронут в документации просторов RU-нета. Автор попытался заполнить этот вакуум, предоставив читателю почву для размышлений и самосовершенствования, касательно этого, возможно нового для Вас, вопроса. Этот документ не претендует на звание "документации для разработчика", а просто отражает желание автора, насколько это возможно, осветить аспекты работы с данным протоколом, показать его слабые места, уязвимости в системе "security", цели преследованные создателями и объяснить его предназначение.

Предназначение

Протокол SNMP был разработан с целью проверки функционирования сетевых маршрутизаторов и мостов. Впоследствии сфера действия протокола охватила и другие сетевые устройства, такие как хабы, шлюзы, терминальные сервера, LAN Manager сервера , машины под управлением Windows NT и т.д. Кроме того, протокол допускает возможность внесения изменений в функционирование указанных устройств.

Теория

Основными взаимодействующими лицами протокола являются агенты и системы управления. Если рассматривать эти два понятия на языке "клиент-сервер", то роль сервера выполняют агенты, то есть те самые устройства, для опроса состояния которых и был разработан рассматриваемый нами протокол. Соответственно, роль клиентов отводится системам управления - сетевым приложениям, необходимым для сбора информации о функционировании агентов. Помимо этих двух субъектов в модели протокола можно выделить также еще два: управляющую информацию и сам протокол обмена данными.

"Для чего вообще нужно производить опрос оборудования?" - спросите Вы. Постараюсь пролить свет на этот вопрос. Иногда в процессе функционирования сети возникает необходимость определить определенные параметры некоторого устройства, такие как , например, размер MTU, количество принятых пакетов, открытые порты, установленную на машине операционную систему и ее версию, узнать включена ли опция форвардинга на машине и многое другое. Для осуществления этого как нельзя лучше подходят SNMP клиенты.

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

Остановимся на том, какую же все-таки информацию может почерпнуть система управления из недр SNMP. Вся информация об объектах системы-агента подержится в так называемой MIB (management information base ) - базе управляющей информации, другими словами MIB представляет собой совокупность объектов, доступных для операций записи-чтения для каждого конкретного клиента, в зависимости от структуры и предназначения самого клиента. Ведь не имеет смысла спрашивать у терминального сервера количество отброшенных пакетов, так как эти данные не имеют никакого отношения к его работе, так как и информация об администраторе для маршрутизатора. Потому управляющая система должна точно представлять себе, что и у кого запрашивать. На данный момент существует четыре базы MIB :

  1. Internet MIB - база данных объектов для обеспечения диагностики ошибок и конфигураций. Включает в себя 171 объект (в том числе и объекты MIB I).
  2. LAN manager MIB - база из 90 объектов - пароли, сессии, пользователи, общие ресурсы.
  3. WINS MIB - база объектов, необходимых для функционирования WINS сервера (WINSMIB.DLL).
  4. DHCP MIB - база объектов, необходимых для функционирования DHCP сервера (DHCPMIB.DLL), служащего для динамического выделения IP адресов в сети.

Все имена MIB имеют иерархическую структуру. Существует десять корневых алиасов:

  1. System - данная группа MIB II содержит в себе семь объектов, каждый из которых служит для хранения информации о системе (версия ОС, время работы и т.д.).
  2. Interfaces - содержит 23 объекта, необходимых для ведения статистики сетевых интерфейсов агентов (количество интерфейсов, размер MTU, скорость передачи , физические адреса и т.д.) .
  3. AT (3 объекта) - отвечают за трансляцию адресов. Более не используется. Была включена в MIB I. Примером использования объектов AT может послужить простая ARP таблица (более подробно об ARP протоколе можно почитать в статье "Нестандартное использование протокола ARP", которую можно найти на сайте www.uinc.ru в разделе "Articles" ) соответствия физических (MAC) адресов сетевых карт IP адресам машин. В SNMP v2 эта информация была перенесена в MIB для соответствующих протоколов.
  4. IP (42 объекта) - данные о проходящих IP пакетах (количество запросов, ответов, отброшенных пакетов).
  5. ICMP (26 объектов) - информация о контрольных сообщениях (входящие/исходящие сообщения, ошибки и т.д.).
  6. TCP (19) - все, что касается одноименного транспортного протокола (алгоритмы, константы, соединения, открытые порты и т.п.).
  7. UDP (6) - аналогично, только для UDP протокола (входящие/исходящие датаграммы, порты, ошибки).
  8. EGP (20) - данные о трафике Exterior Gateway Protocol (используется маршрутизаторами, объекты хранят информацию о принятых/отосланных/отброшенных кардах).
  9. Transmission - зарезервирована для специфических MIB.
  10. SNMP (29) - статистика по SNMP - входящие/исходящие пакеты, ограничения пакетов по размеру, ошибки, данные об обработанных запросах и многое другое.

Каждый из них представим в виде дерева, растущего вниз, (система до боли напоминает организацию DNS). Например, к адресу администратора мы можем обратиться посредством такого пути: system.sysContact.0 , ко времени работы системы system.sysUpTime.0 , к описанию системы (версия, ядро и другая информация об ОС) : system.sysDescr.0 . С другой стороны те же данные могут задаваться и в точечной нотации. Так system.sysUpTime.0 соответствует значение 1.3.0, так как system имеет индекс "1" в группах MIB II, а sysUpTime - 3 в иерархии группы system. Ноль в конце пути говорит о скалярном типе хранимых данных. Ссылку на полный список (256 объектов MIB II) Вы можете найти в конце статьи в разделе "Приложение". В процессе работы символьные имена объектов не используются, то есть если менеджер запрашивает у агента содержимое параметра system.sysDescr.0, то в строке запроса ссылка на объект будет преобразована в "1.1.0", а не будет передана "как есть". Далее мы рассмотрим BULK-запрос и тогда станет ясно, почему это столь важно . На этом мы завершим обзор структуры MIB II и перейдем непосредственно к описанию взаимодействия менеджеров (систем управления) и агентов. В SNMP клиент взаимодействует с сервером по принципу запрос-ответ. Сам по себе агент способен инициировать только оно действие, называемое ловушкой прерыванием (в некоторой литературе "trap" - ловушка). Помимо этого, все действия агентов сводятся к ответам на запросы, посылаемые менеджерами. Менеджеры же имеют гораздо больший "простор для творчества", они в состоянии осуществлять четыре вида запросов:

  • GetRequest - запрос у агента информации об одной переменной.
  • GetNextRequest - дает агенту указание выдать данные о следующей (в иерархии) переменной.
  • GetBulkRequest - запрос за получение массива данных. При получении такового, агент проверяет типы данных в запросе на соответствие данным из своей таблицы и цикле заполняет структуру значениями параметров: for(repeatCount = 1; repeatCount < max_repetitions; repeatCount++) Теперь представьте себе запрос менеджера на получение списка из сотни значений переменных , посланный в символьном виде, и сравните размер такового с размером аналогичного запроса в точечной нотации. Думаю, Вы понимаете, к чему привела бы ситуация, если бы символьные имена не преобразовывались вышеуказанным образом.
  • SetRequest - указание установить определенное значение переменой.

Кроме этого менеждеры могут обмениваться друг с другом информацией о своей локальной MIB. Такой тип запросов носит название InformRequest.

Приведу значения числовых констант для всех видов запросов:

#define SNMP_MSG_GET (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x0)
#define SNMP_MSG_GETNEXT (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x1)
#define SNMP_MSG_RESPONSE (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x2)
#define SNMP_MSG_SET (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x3)
/* PDU для SNMPv1 */
#define SNMP_MSG_TRAP (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x4)
/* PDU для SNMPv2 */
#define SNMP_MSG_GETBULK (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x5)
#define SNMP_MSG_INFORM (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x6)
#define SNMP_MSG_TRAP2 (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x7)

Вот тут то мы сталкиваемся с еще одной интересной деталью, как видите для ловушке есть 2 числовые константы. На самом деле существует 2 основные версии протокола SNMP (v1 & v2) и самое важное то, что они не являются совместимыми (на самом деле версий значительно больше -SNMP v2{p | c | u} etc, только все эти модификации довольно незначительны, так как , например, введение поддержки md5 и т.п.). SNMP - протокол контроля и диагностики, в связи с чем , он рассчитан на ситуации, когда нарушается целостность маршрутов, кроме того в такой ситуации требуется как можно менее требовательный с аппаратуре транспортный протокол , потому выбор был сделан в сторону UDP. Но это не значит, что никакой другой протокол не может переносить пакеты SNMP. Таковым может быть IPX протокол (например, в сетях NetWare) , также в виде транспорта могут выступать карды Ethernet, ячейки ATM. Отличительной особенностью рассматриваемого протокола есть то, что передача данных осуществляется без установки соединения.

Допустим менеджер послал несколько пакетов разным агентам, как же системе управления в дальнейшем определить какой из приходящих пакетов касается 1ого и 2ого агента? Для этого каждому пакету приписывается определенный ID - числовое значение. Когда агент получает запрос от менеджера, он генерирует ответ и вставляет в пакет значение ID , полученное им из запроса (не модифицирую его). Одним из ключевых понятий в SNMP является понятие group (группа). Процедура авторизации менеджера представляет собой простую проверку на принадлежность его к определенной группе, из списка, находящегося у агента. Если агент не находит группы менеджера в своем списке, их дальнейшее взаимодействие невозможно. До этого мы несколько раз сталкивались с первой и второй версией SNMP. Обратим внимание на отличие между ними. Первым делом заметим, что в SNMP v2 включена поддержка шифрования трафика, для чего, в зависимости от реализации, используются алгоритмы DES, MD5 . Это ведет к тому что при передаче данных наиболее важные данные недоступны для извлечения сниффингом, в том числе и информация о группах сети. Все это привело в увеличению самого трафика и усложнению структуры пакета. Сам по себе, на данный момент, v2 практически нигде не используется. Машины под управлением Windows NT используют SNMP v1. Таким образом мы медленно переходим к, пожалуй, самой интересной части статьи, а именно к проблемам Security. Об этом давайте и поговорим ...

Практика и безопасность

В наше время вопросы сетевой безопасности приобретают особое значение, особенно когда речь идет о протоколах передачи данных, тем более в корпоративных сетях. Даже после поверхностного знакомства с SNMP v1/v2 становится понятно, что разработчики протокола думали об этом в последнюю очередь или же их жестко поджимали сроки сдачи проекта %-). Создается впечатление что протокол рассчитан на работу в среде так называемых "доверенных хостов". Представим себе некую виртуальную личность. Человека, точнее некий IP адрес, обладатель которого имеет намерение получить выгоду , либо же просто насолить администратору путем нарушения работы некой сети. Станем на место этой особы. Рассмотрение этого вопроса сведем к двум пунктам:

  • a) мы находимся вне "враждебной сети". Каким же образом мы можем совершить свое черное дело? В первую очередь предполагаем что мы знаем адрес шлюза сети. Согласно RFC, соединение системы управления с агентом происходит по 161-ому порту (UDP). Вспомним о том что для удачной работы необходимо знание группы. Тут злоумышленнику на помощь приходит то, что зачастую администраторы оставляют значения (имена) групп, выставленные по умолчанию, а по умолчанию для SNMP существует две группы - "private" и "public". В случае если администратор не предусмотрел подобного развития событий, недоброжелатель может доставить ему массу неприятностей. Как известно, SNMP протокол является частью FingerPrintering. При желании , благодаря группе system MIB II, есть возможность узнать довольно большой объем информации о системе. Чего хотя бы стоит read-only параметр sysDescr. Ведь зная точно версию программного обеспечения, есть шанс , используя средства для соответствующей ОС получить полный контроль над системой. Я не зря упомянул атрибут read-only этого параметра. Ведь не порывшись в исходниках snmpd (в случае UNIX подобной ОС ), этот параметр изменить нельзя, то есть агент добросовестно выдаст злоумышленнику все необходимые для него данные. А ведь не надо забывать о том, что реализации агентов под Windows поставляются без исходных кодов, а знание операционной системы - 50% успеха атаки. Кроме того, вспомним про то, что множество параметров имеют атрибут rw (read-write), и среди таких параметров - форвардинг ! Представьте себе последствия установки его в режим "notForwarding(2)". К примеру в Linux реализации ПО для SNMP под название ucd-snmp есть возможность удаленного запуска скриптов на сервера, путем посылки соответствующего запроса. Думаю, всем понятно к чему могут привести "недоработки администратора".
  • б) злоумышленник находится на локальной машине. В таком случае вероятность увольнения админа резко возрастает. Ведь нахождение в одном сегменте сети дает возможность простым сниффингом отловить названия групп, а с ними и множество системной информации. Этого случая также касается все сказанное в пункте (а).

Перейдем к "практическим занятиям". Что же может на понадобиться. В первую очередь программное обеспечение. Его можно достать на http://net-snmp.sourceforge.net . Примеры я буду приводить для ОС Линукс, но синтаксис команд аналогичен Windows ПО.

Установка пакета стандартна:

gunzip udc-snmp-3.5.3.tar.gz
tar -xvf udc-snmp-3.5.3.tar
cd udc-snmp-3.5.3
./configure
make
make install

Запуск демона (агента)

snmpd

После инсталяции Вам доступны программы:

snmpget
snmpset
snmpgetnext
snmpwalk
snmpbulkwalk
snmpcheck
snmptest
snmpdelta
snmpnetstat snmpstatus
snmptable
snmptrap
snmptranstat
и демон
snmptrapd

Посмотрим, как выглядят описанные выше операции на практике.

Запрос GetRequest реализует одноименная программа snmpget

Для получения необходимой информации выполним следующую команду:

root@darkstar:~# snmpget 10.0.0.2 public system.sysDescr.0

На что сервер добросовестно сообщит нам:

system.sysDescr.0 = Hardware: x86 Family 6 Model 5 Stepping 0 AT/AT COMPATIBLE - Software: Windows NT Version 4.0 (Build Number: 1381 Uniprocessor Free )

(не правда ли - довольно содержательно), либо же

system.sysDescr.0 = Linux darkstar 2.4.5 #1 SMP Fri Aug 17 09:42:17 EEST 2001 i586

Прямо-таки - руководство по проникновению.

Допустим, мы хотим что-либо изменить в настройках агента. Проделаем следующую операцию:

root@darkstar:~# snmpset 10.0.0.2 public system.sysContact.0 s test@test.com

и получим ответ:

system.sysContact.0 = test@test.com

Список объектов MIB II с атрибутами можно найти пойдя по ссылке, указанной в "Приложении".

Думаю, настало время рассмотреть SNMP на пакетном уровне. Этот пакет был отловлен сниффером NetXRay на сетевом интерфейсе агента:

Как видим - практика не далека от теории. Наблюдаем Request ID и параметры запроса. На полном скриншоте можно увидеть стек протоколов - от кадров Ethernet, через UDP доходим до самого Simple Network Management Protocol:

А этот пакет был получен с интерфейса менеджера:

Как видите, название группы абсолютно никак не шифруется (о чем в свою очередь говорит Protocol version number : 1). Хочется отметить, что согласно спецификации протокола, пакеты SNMP не имеют четко определенной длины. Существует ограничение сверху равное длине UDP сообщения, равное 65507 байт, в свою очередь сам пртокол накладывает другое максимальное значение - лишь 484 байта. В свою очередь не имеет установленного значения и длина заголовка пакета (headerLength).

Ну вот мы в общих чертах и ознакомились с протоколом SNMP. Что еще можно добавить к сказанному выше ... Можно лишь дать пару советов сетевым администраторам, дабы уменьшить риск возникновения пролем с безопасностью сети... В первую очередь должное внимание следует уделить настройке файрволинга. Во-вторых - изменить установленные по умоланию имена групп. Разумным было бы жестко зафиксировать адреса машин (менеджеров), с которых разрешается опрос агентов. На этом, считаю, статью можно и закончить. Хочется верить, что она показалась Вам интересной.

Приложение

Список из 256 объектов MIB II: http://www.titanicum.kiev.ua/snmp/snmp_objects.htm

Объекты MIB II c атрибутами: http://www.titanicum.kiev.ua/snmp/mib2.htm

Софт под Линукс: http://www.titanicum.kiev.ua/snmp/ucd-snmp-3.5.3.tar.gz

RFC 1158: http://www.bezpeka.com/library/rfc/rfc1158.txt

Источник: http://bezpeka.com/ru/lib/sec/syst/art390.html

Windows NT: удалённое вторжение

Обновлено: 07.04.2025

rhino9

Введение

Этот документ - попытка группы Rhino9 документировать технику и методы, используемые в нападении на основанные на WindowsNT сети. Цель данного документа состоит в том, чтобы научить администраторов и профессионалов защиты  способам проникновения в NT-сети. Этот документ пытается следовать  шагам классического текста "Как улучшить защиту вашего сайта вторжением в него" , который написали  Dan Farmer и Wietse Venema.


Проблемы защиты сетевых соединений в Windows NT

Обновлено: 13.09.2025
Вадим Проскурин, vadim_proskurin@hotmail.com

В статье показана недостаточность защиты сетевых соединений между рабочими станциями и серверами Windows NT, организованных посредством интерфейса NPFS. Этот интерфейс имеет ряд слабостей, позволяющих осуществлять различные удаленные атаки. Предложены две атаки, одна из которых относится к классу "отказ в обслуживании", а другая позволяет получать обычному пользователю права администратора путем перехвата административных сетевых соединений. Рассматриваются возможности усиления защиты NPFS-соединений в Windows NT.

Что такое NPFS.

Аббревиатура NPFS расшифровывается как Named Pipe File System. Несмотря на то, что в этом названии присутствуют слова "file system", назвать NPFS файловой системой можно только с очень большой натяжкой. Драйвер npfs.sys, хотя и работает в соответствии со спецификациями драйвера файловой системы, не управляет никакими файлами. Вместо этого npfs.sys управляет так называемыми каналами (named pipes). Вместе с файлами, дисковыми директориями, устройствами и почтовыми ящиками (mailslots) каналы относятся к классу файловых объектов. Большинство функций, предназначенных для работы с файлами (в том числе CreateFile, ReadFile и WriteFile), работают и с каналами.

Канал можно представить себе как некую виртуальную трубу, по которой перетекает информация от одного процесса к другому. Информация может передаваться как в одну сторону (однонаправленный канал), так и в обе стороны (двунаправленный или дуплексный канал). Хотя каналы Windows NT очень похожи на аналогичные объекты UNIX, техническая реализация каналов в Windows NT и UNIX существенно различается.

Создание канала происходит следующим образом.

  • Процесс-сервер создает канал с помощью функции программного интерфейса Win32 CreateNamedPipe. Канал может быть создан только на локальном компьютере.
  • Процесс-сервер активизирует канал с помощью функции ConnectNamedPipe. Теперь к каналу могут подключаться клиенты.
  • Процесс-клиент подключается к каналу посредством вызова функции CreateFile. Параметры функции отличаются от обычных только именем открываемого объекта, которое имеет вид \computer_namepipepipe_name. Вместо имени компьютера может использоваться символ '.' (точка), в этом случае речь идет о локальном компьютере.

После выполнения перечисленных действий процесс-клиент и процесс-сервер могут обмениваться информацией посредством канала с помощью функций ReadFile и WriteFile. Все, что один участник информационного обмена записывает в канал функцией WriteFile, может быть прочтено другим участником посредством вызова функции ReadFile.

Клиент может отключиться от канала в любой момент с помощью функции CloseHandle. Сервер может отключить клиента в любой момент с помощью функции DisconnectNamedPipe. После прекращения связи с клиентом сервер может повторно использовать канал с помощью повторного вызова функции ConnectNamedPipe.

С помощью одного и того же канала сервер может одновременно обслуживать нескольких клиентов. Для этого сервер должен создать несколько экземпляров канала, вызвав функцию CreateNamedPipe нужное количество раз, при этом в каждом вызове CreateNamedPipe должно быть указано одно и то же имя канала. Если канал имеет несколько экземпляров, клиент может быть подключен к любому свободному (не занятому другим клиентом) экземпляру этого канала. Как показывают эксперименты, клиент всегда подключается к тому экземпляру канала, который был создан или освобожден раньше других. Другими словами, свободные экземпляры канала подключаются к клиентам в порядке "живой" очереди.

Интерфейс NPFS имеет много других возможностей, поддерживаются асинхронная передача информации, транзакции и многое другое. Полное описание NPFS выходит за пределы настоящей статьи.

В целом интерфейс NPFS весьма удобен для обмена информацией между процессами, особенно в тех случаях, когда процесс-клиент и процесс-сервер выполняются на разных компьютерах одной локальной сети. NPFS широко используется операционной системой Windows NT для своих нужд. С помощью NPFS решается множество задач, некоторые из которых играют важную роль в обеспечении безопасности операционной системы. Например, каналы lsass, lsarpc и LANMAN используются при передаче по сети имени и пароля пользователя при сквозной аутентификации в домене Windows NT. Также стоит отметить, что удаленный вызов процедур (RPC) в Windows NT реализован как надстройка над NPFS.

Некоторые странности NPFS.

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

Пусть некий процесс создал экземпляр некоторого канала. Другой процесс пытается создать экземпляр того же самого канала, вызывая CreateNamedPipe с тем же именем создаваемого канала. Как это ни странно, второй экземпляр канала будет успешно создан. Более того, если второй процесс вызовет теперь ConnectNamedPipe, экземпляр канала, созданный вторым процессом, сможет обслуживать клиентов.

Итак, в системе появляются два объекта, имеющих одинаковое имя, но обслуживаемых разными процессами. Когда клиент подключается к каналу, операционная система предоставляет ему первый экземпляр, поскольку он был создан раньше. Но когда к тому же каналу захочет подключиться другой клиент, он будет подключен ко второму экземпляру. При этом клиент никакими средствами не сможет определить, какой процесс обслуживает его запрос. Получается, что клиент хотел получить услугу от одного процесса, а на самом деле эту услугу ему предоставляет совсем другой процесс. Это выглядит очень странно. Представьте себе, что Вы открываете файл на жестком диске, а операционная система лезет в Internet. При этом, когда файл открыт, Вы никак не сможете узнать, откуда был взят файл, который Вы открыли.

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

Другой интересный эффект. Каналы, как и любые другие объекты Windows NT, могут иметь дескриптор защиты (security descriptor), описывающий то, какие пользователи имеют какие права на доступ к данному объекту. Мне так и не удалось найти простой метод, позволяющий получить дескриптор защиты канала по его имени (конечно, можно это сделать с помощью драйвера фиктивного устройства, но это слишком трудоемко). Эксперименты показывают, что любой канал, даже системный, даже такой важный и ответственный, как lsass, может быть открыт любым пользователем. Все, что требуется от пользователя - это аутентифицироваться под любым именем на компьютере, на котором выполняется процесс, обслуживающий данный канал.

Экспериментально установлено, что пользователь guest с помощью обычной прикладной программы может открывать системный канал lsass и записывать туда все, что угодно. Сервер LSA воспримет эту информацию и попытается ее интерпретировать в терминах протоколов сетевой аутентификации.

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

Из всего вышеперечисленного непосредственно следует, что NPFS представляет собой прекрасный объект для удаленных атак. Две возможные (но далеко не единственно возможные) атаки рассмотрены ниже.

Атака PipeBomb.

Что случится, если обычная прикладная программа, запущенная обычным пользователем, начнет в вечном цикле открывать на запись все новые и новые экземпляры некоторого системного канала и записывать в них огромные объемы заведомо бессмысленной информации? Один из возможных вариантов развития событий заключается в том, что через короткий промежуток времени все свободные экземпляры канала будут заняты, и сетевая служба, использующая атакуемый канал, будет отключена. Однако, как показывают эксперименты, более вероятна другая картина.

Обычно, когда процесс-сервер понимает, что все экземпляры его канала заняты, этот процесс начинает создавать новые экземпляры канала. Таким образом, чем больше экземпляров канала открывает процесс-клиент, тем больше экземпляров канала создает процесс-сервер. Как правило, каждый экземпляр канала обслуживается отдельным потоком (thread). Буферы для хранения информации, передаваемой по каналу, занимают оперативную память. По мере того, как процесс-клиент открывает новые экземпляры канала, процесс-сервер создает новые потоки. Когда процесс-клиент записывает в открытые им экземпляры канала бессмысленную информацию, эта информация передается процессу-серверу и засоряет его адресное пространство.

Все перечисленные эффекты приводят к тому, что загрузка процессора компьютера, на котором выполняется процесс-сервер, стабильно держится на уровне 100% (при этом около 90% времени процессор обслуживает процессы с базовым приоритетом High), а объем свободной оперативной памяти этого компьютера уменьшается со скоростью от 1 до 3 мегабайт в секунду. Когда и физическая, и виртуальная памяти компьютера переполняются, и начинается рост файла виртуальной памяти, эта скорость несколько уменьшается. Уже через минуту атакованный компьютер становится практически неработоспособен (окно Explorer прорисовывается несколько минут), а через 5-10 минут перегруженность операционной системы достигает такой степени, что команда Shutdown выполняется 3-6 часов.

Эта атака интересна тем, что использует не слабости протокола TCP/IP, в общем-то, чуждого для Windows NT, а слабости "родного" программного обеспечения этой операционной системы. Атака одинаково эффективно работает для любого сервис-пака Windows NT 4.0, включая четвертый, поражаются и рабочие станции, и серверы. Не исключено, что эту атаку можно применять и в Internet, инкапсулируя пакеты SMB в пакеты TCP/IP (сетевая составляющая интерфейса NPFS организована как надстройка над протоколом SMB).

Существует программа, реализующая данную атаку.

Напоследок об авторских правах в отношении данного параграфа. Первоначальная формулировка идеи атаки PipeBomb принадлежит Петру Девянину, детальная проработка идеи моя, программированием занимался Сергей Заливакин.

Атака AdminTrap.

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

В программном интерфейсе Win32 существует функция ImpersonateNamedPipeClient, выполняющая олицетворение (impersonation) клиента канала. Олицетворение клиента канала заключается в том, что потоку, вызвавшему данную функцию, назначается маркер доступа (access token) клиента экземпляра канала, handle серверного конца которого указан в качестве параметра функции. При этом поток процесса-сервера, обслуживающий данный экземпляр канала, получает полномочия пользователя, который подключился к этому экземпляру канала в качестве клиента. Обычно данная функция используется системными процессами-серверами для временного понижения полномочий, но если полномочия клиента превышают полномочия сервера, наблюдается обратная ситуация - после выполнения олицетворения полномочия сервера повышаются. Для того чтобы функция ImpersonateNamedPipeClient нормально выполнилась, необходимо, чтобы маркер доступа клиентского конца экземпляра канала представлял собой маркер олицетворения (impersonation token). Если процесс-клиент и процесс-сервер выполняются на разных компьютерах сети, это всегда имеет место. Никаких специальных привилегий для вызова ImpersonateNamedPipeClient не требуется.

Если прикладная программа, выполняющаяся с правами обычного пользователя, создаст экземпляр канала, дождется подключения клиента и выполнит олицетворение, эта программа получит полномочия клиента, которые могут превышать изначальные полномочия программы. Эта идея была положена в основу атаки AdminTrap.

Программа AdminTrap создает троянский экземпляр одного из системных каналов и ждет, когда к нему подключится клиент. Затем AdminTrap выполняет олицетворение клиента. Если олицетворение прошло успешно, один из потоков программы AdminTrap получает полномочия пользователя-клиента троянского экземпляра канала. В Windows NT интерфейс NPFS в основном используется для обмена информацией между операционными системами компьютеров локальной сети и удаленного администрирования, прикладные программы используют каналы редко. Поэтому вероятность того, что программа AdminTrap после вызова ImpersonateNamedPipeClient получит полномочия администратора, весьма велика, а при наличии этих полномочий программа может оказывать на операционную систему локального компьютера практически любые негативные воздействия. Например, подобная программа может использоваться для внедрения в систему программных закладок.

Традиционно, демонстрационные версии программ, предоставляющих обычному пользователю полномочия администратора, запускают в атакуемой системе командный интерпретатор, выполняющийся с правами администратора. Для описываемой атаки это невозможно, поскольку в Windows NT при выполнении функции CreateProcess новому процессу назначается маркер доступа процесса-родителя, а не маркер доступа потока, из которого была вызвана функция CreateProcess. Таким образом, полномочия, полученные программой, реализующей данную атаку, не могут быть унаследованы порожденными ей процессами.

Поэтому для демонстрации того, что программа AdminTrap действительно получает полномочия пользователя, соединение с которым она перехватила, была выбрана несколько нестандартная процедура. Описываемая версия программы, получив полномочия пользователя-клиента, пытается зарегистрировать в операционной системе пользователя-администратора по имени AdminTrap. Для предотвращения использования программы AdminTrap в противозаконных целях в нее встроен ряд блокировок, в том числе:

  • пароль пользователя AdminTrap не описан ни в настоящей статье, ни в файле ReadMe.txt, прилагаемом к программе;
  • пользователь AdminTrap создается заблокированным (disabled). Снять эту блокировку может только администратор;
  • в качестве полного имени пользователь AdminTrap получает информацию о том, кто, с какого компьютера и в какое время провел атаку.

Таким образом, учетная запись пользователя AdminTrap, созданная программой, не может использоваться для несанкционированного доступа к ресурсам операционной системы без дополнительных действий, выполнить которые может только администратор. Конечно, опытный хакер легко сможет снять все перечисленные (и неперечисленные) блокировки. Но, как показывает опыт, опытные хакеры обычно не занимаются подобной деятельностью. Как бы то ни было, не нужно писать мне письма с просьбой отключить эти блокировки - это бесполезно.

При программной реализации вышеописанной атаки имела место одна техническая проблема. Если к моменту создания троянского экземпляра канала в системе существует N легальных экземпляров этого канала, только N+1-й клиент канала сможет подключиться к троянскому экземпляру. Обычно системные процессы-серверы создают от двух до десяти экземпляров каждого обслуживаемого канала, поэтому, если не предпринять специальных мер, ожидание подключения клиента к троянскому экземпляру канала будет довольно долгим. В программе AdminTrap эта проблема решена следующим образом. Перед созданием троянского экземпляра канала программа подключается в качестве клиента ко всем легальным экземплярам атакуемого канала. Троянский экземпляр канала создается только тогда, когда все легальные экземпляры канала заняты и процесс-сервер, обслуживающий канал, настолько перегружен, что не может создавать новые экземпляры с той скоростью, с которой они захватываются программой AdminTrap. Другими словами, на операционную систему оказывается строго дозированное воздействие PipeBomb. Необходимая интенсивность воздействия определяется программой самостоятельно путем анализа времени реакции процесса-сервера на запросы клиентов.

Программа AdminTrap нормально функционирует под управлением всех существующих на сегодняшний день сервис-паков Windows NT 4.0. Мне удавалось перехватывать следующие сетевые соединения:

  • winreg - удаленное управление реестром, списком сервисов, репликацией и административными оповещениями (alerts); удаленный просмотр системных журналов; удаленное диагностирование и оценка производительности;
  • spoolss - удаленное управление принтером.

Вероятно, существуют и другие сетевые соединения, которые могут быть перехвачены программой AdminTrap. Не исключено, что в некоторых системах централизованного управления безопасностью сети (System Management Server, Secret Net и т.д.) NPFS используется системным программным обеспечением для установки административных соединений. При этом установка административных соединений происходит без непосредственного участия пользователя-администратора, что упрощает перехват этих соединений - система сканирует сеть каждые несколько минут и не нужно ждать, пока администратор соизволит обратиться к данному компьютеру сети.

Как с этим бороться.

Как было показано выше, в реализации интерфейса NPFS в Windows NT имеются слабости, позволяющие злоумышленникам осуществлять различные атаки операционной системы. К этим слабостям относятся следующие:

  • Возможно создание двух и более объектов, одноименных, но не идентичных функционально.
  • Отсутствуют средства, позволяющие определить, каким процессом обслуживается экземпляр канала.
  • Атрибуты защиты системных каналов, принятые по умолчанию, предоставляют пользователям права доступа, заведомо превышающие потребности пользователей.

Рассмотрим несколько способов преодоления вышеописанных слабостей.

Возможно создание двух и более объектов, одноименных, но не идентичных функционально.

Фактически должно быть запрещено создание процессом экземпляра канала, для которого уже существует экземпляр, созданный другим процессом. Это может быть сделано с помощью драйвера фиктивного устройства, фильтрующего информационные потоки, проходящие через драйвер npfs.sys. Более простые способы решения данной проблемы вряд ли приведут к успеху.

Отсутствуют средства, позволяющие определить, каким процессом обслуживается экземпляр канала.

Эта проблема также вряд ли может быть решена без использования драйвера фиктивного устройства. Этот драйвер должен перехватывать системные вызовы CreateNamedPipe и сохранять в специальном буфере информацию о том, каким процессом обслуживается каждый существующий в системе канал. Доступ к такому буферу может быть реализован посредством стандартного интерфейса управления устройствами.

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

Стандартный метод решения подобных проблем заключается в следующем. Создается сервис, который автоматически загружается при старте операционной системы, открывает все объекты, защита которых по умолчанию неудовлетворительна, и устанавливает этим объектам новые атрибуты защиты. Подобный метод описан, например, в [7], где он применяется для изменения атрибутов защиты секций, в которых хранится код часто используемых системных библиотек (KnownDlls). К сожалению, для решения проблемы с защитой каналов данный метод неприменим.

Для того чтобы изменить атрибуты защиты какого-либо объекта Windows NT, вначале надо открыть этот объект с правом доступа WRITE_DAC (если нужно получить старые атрибуты защиты объекта, дополнительно потребуется право READ_CONTROL). Microsoft рекомендует использовать для изменения атрибутов защиты каналов функции GetFileSecurity и SetFileSecurity (см. [5]), однако эти функции при попытке их применения к каналам всегда сообщают об ошибке ERROR_PIPE_BUSY.

Существует и обходной путь. В Windows NT имеются две универсальные (и, как это обычно бывает, недокументированные) функции, позволяющие управлять защитой любых объектов. Это функции NtQuerySecurityObject и NtSetSecurityObject. Функция NtQuerySecurityObject позволяет получить атрибуты защиты любого объекта, handle которого передан функции в качестве параметра, функция NtSetSecurityObject - установить новые атрибуты защиты любому объекту. Если получить каким то образом handle экземпляра канала, открытый с правами доступа READ_CONTROL и WRITE_DAC, то с помощью двух вышеназванных функций можно установить этому экземпляру канала любые атрибуты защиты.

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

Источник: http://bezpeka.com/ru/lib/sec/syst/art403.html

Где NT хранит пароли

Обновлено: 13.09.2025
Марк Джозеф Эдвардс, Дэвид Лебланк

Марк Джозеф Эдвардс, Дэвид Лебланк
WINDOWS 2000 MAGAZINE #02/99
ЖУРНАЛ СИСТЕМНЫХ АДМИНИСТРАТОРОВ И РАЗРАБОТЧИКОВ

Наверняка вы знаете о том, что пароли служат ключами к большинству <дверей> в сети. А известно ли вам, где Windows NT 4.0 хранит эти пароли? Их можно обнаружить во многих интересных местах. И для того, чтобы обеспечить надежную защиту системы, необходимо располагать полной информацией о них.

Для хранения и обработки таких атрибутов пользователя, как пароли в ОС NT, используется SAM (Security Accounts Manager - администратор учетных данных в системе защиты). SAM размещает всю информацию в базе данных SAM, поэтому можно сказать, что NT защищена от взлома настолько же, насколько защищены данные SAM. Взломать систему безопасности SAM непросто, только если не знать обо всех местах, где можно найти базу данных SAM. Эта статья поможет вам защитить некоторые важные области данных системы NT и отыскать участки системы, которые требуют дальнейшего конфигурирования для обеспечения более высокого уровня безопасности.

Ключи реестра SAM

NT хранит постоянно используемую копию базы данных SAM на жестком диске. Вы можете получить доступ к этой базе данных через реестр системы (HKEY_LOCAL_MACHINE, ключ SAM), написав программу или используя редактор реестра (например, regedt32.exe). В принципе, пользователи не имеют доступа к ключу реестра SAM непосредственно из редактора реестра, так как NT предоставляет права доступа к данному ключу только системной учетной записи SYSTEM. Однако пользователи, имеющие административные привилегии, могут воспользоваться трюком NT и обеспечить доступ из пользовательской среды с правами SYSTEM.

Блокировка службы Планировщика NT (NT Scheduler). Упомянутый выше трюк состоит в использовании службы Планировщика NT для запуска редактора реестра на системной консоли в некоторое заранее определенное время. По умолчанию, Планировщик NT при выполнении заданий использует права учетной записи SYSTEM. Поэтому любая программа, запущенная Планировщиком, имеет полный набор системных привилегий, включая доступ к базе данных SAM. Чтобы защититься от данной опасности, приходится действовать жесткими методами, так как для этого необходимо заблокировать службу Планировщика NT. Блокировка данной службы не всегда возможна в связи с тем, что она может потребоваться для запуска обычных заданий. Если вы не в состоянии заблокировать службу Планировщика, постарайтесь сконфигурировать ее таким образом, чтобы она работала от имени учетной записи пользователя (права пользователя - это необходимый минимум для выполнения запланированных заданий).

Использование технологии системного ключа (system key). Для обеспечения защиты SAM вы также можете применить предлагаемую Microsoft технологию системного ключа. Данная технология впервые появилась в составе дополнений (hotfix) к пакету обновления NT Service Pack 2 (SP2), но широкую известность она получила, когда вошла в состав SP3. (О сервисном пакете SP3 читайте статью Service Pack 3 Is Really Security Pack 3 в журнале Windows NT Magazine, август 1997.) Технология системного ключа применяется для защиты NT и ее паролей посредством шифрования базы данных SAM и требует использования ключа шифра при загрузке операционной системы.

Можно использовать один из трех вариантов системных ключей.

  •  Ключ формируется системой произвольным образом и хранится на системном диске с использованием специального алгоритма защиты от прочтения.
  •  Ключ формируется системой произвольным образом и хранится на дискете.
  •  Для формирования ключа применяется пароль, выбираемый администратором.

Более подробно о каждом из этих вариантов можно прочитать в статье Microsoft: Windows NT System Key Permits Strong Encryption of the SAM (http://support.microsoft.com/support/kb/articles/q143/4/75.asp).

Хотя системный ключ и помогает защитить SAM, прежде чем броситься в бой и начать его устанавливать, следует осознать несколько важных моментов. Нужно иметь в виду, что после установки syskey.exe на компьютере не существует возможности его удаления. Следовательно, необходимо очень внимательно отнестись к вопросу выбора оптимального для вашей системы метода хранения ключа. Непосредственно после установки syskey.exe нужно сформировать новую дискету ERD (Emergency Repair Disk). В противном случае вы не сможете полностью восстановить систему, если это потребуется.

Одно из реальных преимуществ использования системного ключа состоит в том, что если взломщикам удастся получить копию вашей базы данных SAM, они не смогут вытащить оттуда действующие хэш-коды паролей. У них не будет возможности применить для расшифровки паролей такие утилиты как L0phtCrack от L0pht Heavy Industries. Но следует заметить, что системный ключ не сможет остановить тех пользователей, которые имеют административные привилегии. Эти пользователи могут выгрузить базу данных SAM в формате, пригодном для взлома такими инструментами, как L0phtCrack; поэтому нужно очень аккуратно назначать административные права. Например, утилита Pwdump2 успешно получает хэш-коды паролей из базы данных SAM, даже если используется технология системного ключа. Следует учитывать потенциальную опасность, которую представляют подобные инструменты.

Другим преимуществом технологии системного ключа является возможность обнаруживать попытки такого малоизвестного способа взлома, при котором для получения доступа к системе применяются загрузочные диски. Конечно, такой метод взлома возможен только в том случае, если вы можете загрузиться с системного диска NT. Однако если это удается сделать, то взломщик может перенести базу данных SAM в другое место и затем перезагрузить компьютер. В процессе перезагрузки NT обнаруживает отсутствие базы данных SAM и создает новую базу, которая содержит только двух пользователей: Administrator и Guest, причем оба имеют пустые пароли. Очевидно, что теперь взломщик может зарегистрироваться в системе как Administrator, введя пустой пароль, сделать все, что ему нужно, затем перезагрузиться со своего системного диска и вернуть оригинальную копию базы данных SAM на прежнее место.

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

Аудит SAM

При любых обстоятельствах предусмотрительный администратор должен активизировать аудит базы данных SAM, чтобы своевременно обнаруживать какие-либо подозрительные действия. Разумеется, аудит предполагает, что вы будете регулярно и тщательно просматривать журнал событий. Процедура установки аудита SAM описана по шагам в колонке <Установка аудита системы безопасности>. Также эта процедура описывается в статье Microsoft Enable Auditing of Microsoft Windows NT Server Password Registry (http://support.microsoft.com/support/kb/articles/q186/ 3/74.asp). Вы можете активизировать аудит базы данных SAM, однако он не будет выполняться, если кто-то загрузит систему с другой копии ОС.

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

Активизация такого уровня аудита может привести к накоплению очень большого количества записей в журнале событий. Дело в том, что в процессе нормальной работы OC регулярно происходят обращения системы к ключам SAM. Поэтому следует установить параметры настройки журнала событий так, чтобы он мог вмещать достаточное количество записей. Также следует настроить программы мониторинга журнала событий, которые вы будете использовать.

Утилиты, выполняющиеся с правами привилегированных пользователей, таких как Administrator или SYSTEM, могут свободно манипулировать журналом событий и записями в нем. Сообразительные взломщики могут легко удалить все следы своей деятельности.

SAM на различных носителях информации

NT может помещать базу данных SAM на различные носители информации, включая дискеты, магнитные ленты и жесткие диски. Копирование базы на дискету или ленту требует определенных действий со стороны пользователя, такая операция не является частью обычной работы NT. В процессе ежедневного функционирования NT может размещать базу данных SAM в двух каталогах на жестком диске: %systemroot% epair и %systemroot%system32config. Хотя каталог config и содержит рабочую копию базы данных SAM, используемую <живой> системой, к этой базе нельзя получить доступ (например, для копирования) из таких программ, как Windows Explorer (Проводник), пока работает ОС. Это связано с тем, что системный процесс Local Security Authority (LSA) (lsass.exe) захватывает файл базы данных SAM для монопольного использования.

Тем не менее кто-нибудь все же может, используя загрузочный диск NT, скопировать данный файл. То есть взломщик имеет возможность перезагрузить систему со своего диска и скопировать либо переместить базу данных SAM. Еще раз заметим, что технология системного ключа может защитить SAM от подобной атаки с использованием загрузочного диска, так как база данных будет зашифрована. Это справедливо и для архивов на магнитных лентах, поскольку взятая оттуда копия базы данных SAM, зашифрованная с помощью системного ключа, окажется совершенно бесполезной для взломщика. Однако архивы на лентах все равно следует хранить под замком для защиты от потери, искажения и кражи информации.

Каталог epair содержит ту же информацию, что и дискета ERD, создаваемая утилитой rdisk.exe и используемая для восстановления системы. И каталог epair, и дискета ERD содержат копии базы данных SAM, поэтому они должны быть надежно защищены. Дискета ERD должна храниться в столь же безопасном месте, что и ленты с архивами данных.

Для защиты каталога epair назначайте права таким образом, чтобы злоумышленники не могли получить доступ к данному каталогу и содержащимся в нем файлам, в особенности к файлу sam._, в котором находится база данных SAM. Чтобы защитить файлы в каталоге epair, используйте утилиту calcs.exe, входящую в состав Microsoft Windows NT Server 4.0 Resource Kit или другую аналогичную программу. Выполните следующие действия.

В окне Command Prompt перейдите в каталог %systemroot% (обычно это C:winnt) и выполните команду:

cacls repair /g administrators:F system:F /t

Либо вы можете, используя программу Windows Explorer, сделать следующее.

1. Откройте Windows Explorer.
2. Перейдите в каталог repair (обычно это C:winnt epair), нажмите правую клавишу мыши и выберите в открывшемся меню Properties.
3. Выберите закладку Security.
4. Выберите Permissions.
5. Отметьте Replace Permissions on Subdirectories и Replace Permissions on Existing Files.
6. Удалите из списка всех пользователей, кроме Administrators и SYSTEM.
7. Убедитесь, что и Administrators, и SYSTEM имеют права Full Control.
8. Нажмите OK.

Теперь вы назначили пользователям Administrators и SYSTEM права Full Control на данный каталог и все файлы, которые в нем содержатся. Поскольку режим редактирования ACL выбран не был, права всех остальных пользователей удалены системой.

В зависимости от конфигурации системы помимо каталогов epair и config NT может записывать информацию, имеющую отношение к SAM, в следующие файлы: pagefile.sys, memory.dmp или user.dmp. NT использует файл pagefile.sys как дополнительное пространство для организации виртуальной памяти, которое добавляется к физической памяти, установленной в компьютере. Файл memory.dmp создается при аварийном завершении работы операционной системы, если в конфигурации NT выбран режим записи образа памяти на диск. Файл user.dmp создается при аварийном завершении работы какой-либо прикладной программы, если в конфигурации программы Dr. Watson выбран режим записи образа памяти в файл.

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

Чтобы уменьшить опасность, связанную с использованием файлов user.dmp и memory.dmp, вам необходимо предпринять одно из следующих действий:

  •  написать командный файл, который будет удалять указанные файлы при входе в систему.
  •  установить права для этих файлов так, что только администраторы смогут иметь доступ к ним.
  •  установить в реестре ключ, указывающий на необходимость удаления системного файла pagefile при завершении работы операционной системы.
  •  в конфигурации программы Dr. Watson отключить режим создания файлов.

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

Чтобы отключить создание файлов user.dmp программой Dr. Watson запустите утилиту drwtsn32.exe, отключите параметр Create Crash Dump File и закройте программу.

Чтобы отключить в параметрах настройки NT создание файла memory.dmp, запустите в Панели Управления (Control Panel) программу System и выберите закладку Startup/Shutdown.

Затем отключите параметр Write debugging information to. Если вам все же необходимо иметь образы памяти на момент аварийного завершения работы NT, постарайтесь настроить параметры ОС и программы Dr. Watson таким образом, чтобы файлы, содержащие образ памяти, помещались в защищенный каталог, доступный только администраторам.

Что касается файла pagefile.sys, то его открывает и защищает от попыток непосредственного доступа со стороны взломщиков только операционная система. Однако следует упомянуть прошлогодний инцидент, когда клиентская служба NetWare для Windows NT помещала в память пароли пользователей NetWare в открытом виде. Эти пароли могли быть записаны в файл pagefile.sys при переписывании соответствующей страницы памяти на диск. Любой человек, имеющий копию файла pagefile.sys и текстовый редактор, мог без труда получить пароли. Разработчики Novell решили эту проблему. Теперь, прежде чем поместить пароли в pagefile, они шифруются с использованием недокументированного API-интерфейса. Однако взломщики могут пробить эту защиту. Так, изобретательные российские программисты нашли способ расшифровки информации, получаемой из файла pagefile.sys. Чтобы защититься от подобных атак, настраивайте NT таким образом, чтобы файл pagefile.sys удалялся при завершении работы системы. (Как это сделать, мы расскажем далее.) И не забывайте о необходимости физической защиты компьютера с целью предотвращения нежелательного доступа к файлу pagefile.sys.

Да, вы можете сконфигурировать NT так, чтобы pagefile удалялся при нормальном завершении работы системы. Но таким способом вы обеспечите защиту только от тех взломщиков, которые копируют или изменяют файл, загрузившись с другой копии ОС (т. е. используя загрузочный диск или загрузив NT из другого системного каталога). Большинство взломщиков понимают, что в таком случае у них есть возможность получения доступа к системе путем перемещения базы данных SAM, следовательно, взлом файла pagefile.sys становится бессмысленным

Несмотря на это, в ситуациях, когда условия эксплуатации системы требуют установки и использования нескольких копий ОС, удаление файла pagefile при нормальном завершении работы можно считать достаточной мерой безопасности. Следует иметь в виду, что если NT сконфигурирована так, чтобы удалять pagefile во время завершения работы системы, то неизбежна некоторая задержка в процессе начальной загрузки и останова ОС. Однако эта задержка несущественна, если принять во внимание уровень безопасности, которого мы в результате достигаем. Для того чтобы включить режим удаления файла pagefile.sys во время нормального завершения работы ОС, следует модифицировать (или создать) в системном реестре параметр ClearPageFileAtShutdown (типа REG_SZ) в ключе HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerMemory Management, присвоив ему значение 1.

Хэш-коды паролей в памяти

По умолчанию, NT кэширует необходимые для регистрации атрибуты для 10 последних пользователей, входивших в систему интерактивно. Это делается для того, чтобы пользователь смог зарегистрироваться, даже если вы отключите компьютер от сети, или контроллер домена окажется недоступным. NT обеспечивает определенную защиту кэшируемой информации. Однако если ваши задачи требуют более высокого уровня безопасности, вы можете полностью отключить кэширование, чтобы исключить попытки атак на данные в кэш-памяти. Нужно учитывать, что кэшируемые данные содержат хэш-коды других хэш-кодов паролей. Поэтому их очень сложно взломать и использовать для несанкционированного входа в систему. Мы не можем вспомнить ни одного случая использования хакерами таких данных из кэш-памяти. Чтобы отключить кэширование, установите в 0 значение параметра реестра CachedLogonsCount (типа REG_DWORD) в ключе HKEY_ LOCAL_MACHINESOFTWAREMicrosoftWindowsNTCurrentVersion Winlogon.

SAM в сети

ОС Windows NT использует протокол SMB (Server Message Block - блок серверных сообщений), разработанный совместно фирмами Microsoft, IBM и Intel. Данный протокол определяет алгоритмы функционирования файловой службы в сетевой среде. Нетрудно предположить, что во время сеанса SMB по сети должны передаваться пакеты, содержащие информацию конфиденциального характера. Среди прочего эти пакеты обычно включают в себя зашифрованные данные протокола NTLM, передаваемые NT во время фазы аутентификации.

Взломщики, используя существующие сетевые анализаторы, могут легко перехватывать данные, передаваемые по сети. Задача перехвата нужных пакетов и получения из них информации о паролях всегда считалась нелегкой. Но ситуация в корне изменилась с появлением продукта SMB Packet Capture, выпущенного компанией L0pht Heavy Industries. Это сетевой анализатор, который тесно интегрирован с программой L0phtCrack. Имея в своем распоряжении L0phtCrack, можно легко <выхватывать> из сети хэш-коды паролей, передаваемые в соответствии с протоколом SMB.

Встроенный в L0phtCrack сетевой анализатор незаметно перехватывает хэш-коды паролей и запоминает их с целью расшифровки. После расшифровки паролей злоумышленнику ничего не стоит добраться до любого сетевого ресурса, к которому имел доступ соответствующий пользователь. Вот так! Риск здесь очевидный, но и методы защиты просты.

Для защиты от подобных атак нужно использовать протокол NTLMv2, поставляемый в составе пакетов обновления SP4 и SP5, либо применять механизм создания виртуальных частных сетей (VPN - Virtual Private Network) типа Microsoft PPTP. Протокол NTLMv2 позволяет защитить данные, передаваемые по внутренней локальной сети, а PPTP обеспечивает защиту информации, передаваемой через такие <небезопасные> сети, как, например, Internet. Если вы реализуете PPTP, то обязательно установите последние сервисные пакеты, включая дополнения и исправления к ним (hotfix). Мы предупреждаем вас об этом, потому что в свое время PPTP-соединение считалось очень ненадежным. Microsoft внесла необходимые корректировки, устраняющие недостатки PPTP. Но эти корректировки будут вам недоступны, если вы не установите hotfix к пакету SP3 или более позднему пакету.

Следует иметь в виду, что при отсутствии в вашей системе механизма VPN и технологии подписей SMB взломщик может использовать сеанс SMB для получения несанкционированного доступа в систему. Microsoft реализовала технологию подписей SMB в пакете обновления SP3 и также включила ее во все последующие пакеты обновления. При использовании подписей пакетов SMB операционная система проверяет подлинность каждого пакета, прежде чем принять его к исполнению. Однако реализация подписей SMB не всегда безопасна. Для получения более подробной информации обязательно прочитайте статью Microsoft How to Enable SMB Signing in Windows NT (http://support.microsoft.com/support/kb/articles/q161/3/72.asp).

Для борьбы со средствами взлома типа L0phtCrack можно запретить NT посылать в сеть хэш-коды паролей, формируемые по протоколу LAN Manager (LM). Хэш-коды LM являются более простыми, чем коды NTLM, так как NTLM позволяет задействовать пароли, учитывающие регистр. Также NTLM допускает возможность применения дополнительных символов клавиатуры. Это расширяет диапазон символов ключа шифрования на 26. Заметим, что сложные пароли труднее поддаются расшифровке даже при наличии таких инструментов, как L0phtCrack.

Целесообразно включать в пароль символ <возврат каретки>, так как L0phtCrack не умеет нормально обрабатывать этот символ. Чтобы вставить <возврат каретки>, нажмите клавиши Alt+0+1+3 на цифровой панели клавиатуры.

Для решения описываемой проблемы Microsoft реализовала в составе дополнений и исправлений к сервисному пакету SP3 новый ключ реестра. Он был включен во все сервисные пакеты, вышедшие после SP3. Новый параметр реестра, LMCompatibilityLevel, имеет тип REG_DWORD и размещается в HKEY_LOCAL_MACHINESystemCurrentControlSetControlLsa.

При использовании NTLMv2 можно установить значение этого параметра равным 0, 1, 2, 3, 4 и 5. Если это значение равно 0, то NT при аутентификации сетевого соединения передает по сети пароли как в формате NTLM, так и в формате LM (этот метод аутентификации обеспечивает совместимость с другими системами и используется в NT по умолчанию). Если значение равно 1, то NT передает оба типа хэш-кодов только тогда, когда этого требует сервер. Если значение равно 2, то хэш-коды паролей в формате LM не используются ни при каких обстоятельствах. Если значение равно 3, применяется только аутентификация по протоколу NTLMv2. Значение параметра, равное 4, запрещает контроллеру домена использовать аутентификацию LM, а значение 5 указывает на необходимость применять при аутентификации только протокол NTLMv2. Наиболее безопасной является установка значения этого параметра равным 2. Но следует иметь в виду, что системы, поддерживающие только протокол LM (т. е. Windows 95 и Windows for Workgroups), не смогут установить соединение с данной системой NT. Полный перечень особенностей конфигурации описан в статье Microsoft How to Disable LM Authentication on Windows NT (http://support.microsoft.com/support/kb/articles/q147/7/06.asp). Заметим, что при установке пакета обновления SP4 данный ключ реестра способен принимать шесть различных значений.

Еще один способ взлома системы может иметь место, если взломщик располагает возможностью физического доступа к компьютеру. Используя такие средства, как NT Locksmith или ERD Commander (оба можно найти на http://www.wininternals. com), ничего не стоит получить доступ в систему с правами любого пользователя. Для защиты от этого метода взлома следует принять меры, препятствующие физическому доступу к компьютеру.

Можно немного расслабиться

В этой статье мы представили основные идеи и особенности конфигурации, которые следует учитывать при установке и сопровождении ОС Windows NT и ее системы безопасности. Также мы упомянули несколько вопросов, связанных с приложениями NT (см. колонки <Безопасность приложений BackOffice> и <Безопасность прикладных программ>), которые проливают свет на потенциальные проблемы и могут способствовать поиску путей защиты паролей от несанкционированного доступа.

Эта статья должна помочь вам несколько разгрузить свой мозг. Но не слишком расслабляйтесь. Вам по-прежнему необходимо держать систему под контролем. Продолжайте следить за журналами событий!

Об авторах

Марк Джозеф Эдвардс - сетевой инженер с 16-летним опытом работы. Он является автором книги Internet Security with Windows NT (издательство 29th Street Press). С ним можно связаться по электронной почте по адресам mark@ntshop.net или mje@winntmag.com.
Дэвид Лебланк более пять лет занимается вопросами безопасности Windows NT, является старшим технологом группы по компьютерной безопасности корпорации Microsoft. C ним можно связаться по электронной почте по адресу dleblanc@mindspring.com.

Установка аудита системы безопасности
  1. Войдите в систему с административными правами.
  2. Запустите программу User Manager. Выберите в меню: Policies, Audit и отметьте Audit These Events.
  3. Выделите для аудита (по минимуму) события с успешным (Success) и неудачным (Failure) результатом выполнения; включите аудит попыток входа в систему и выхода из нее (Logon, Logoff). Закройте диалоговое окно, чтобы активизировать аудит системы.
  4. Откройте программу Services в Панели Управления (Control Panel), установите для службы Планировщика NT (NT Scheduler) режим запуска от имени системы (System account). Запустите (или перезапустите) службу Планировщика.
  5. Откройте командное окно DOS и проверьте текущее системное время.
  6. Прибавьте к текущему времени 1-2 минуты (так, если время 11:30, используйте 11:32) и введите следующую команду:
      at 11:32 /interactive "regedt32.exe"
    

    Эта команда вставляет в список Планировщика событие, по которому в 11:32 на консоли будет запущена утилита regedt32 с правами SYSTEM.

  7. Дождитесь 11:32, когда Планировщик NT запустит редактор реестра. При этом вы получите доступ ко всему реестру, включая базу данных SAM. Будьте внимательны при редактировании реестра - ошибка может вывести из строя систему.
  8. Выберите HKEY_LOCAL_MACHINE, найдите дерево SAM и выделите его в левой панели экрана.
  9. Выберите в меню: Security, Auditing.
  10. В диалоговом окне Auditing выберите Add, Show Users.
  11. Добавьте учетную запись SYSTEM, группу Domain Admins, все учетные записи пользователей, имеющих административные права, а также все остальные учетные записи, которым присвоены следующие права (User Rights):
    • Take ownership of files or other objects (Овладение файлами или иными объектами)
    • Back up files and directories (Архивирование файлов и каталогов)
    • Manage auditing and security log (Управление аудитом и журналом безопасности)
    • Restore files and directories (Восстановление файлов и каталогов)
    • Add workstations to domain (Добавление рабочих станций к домену)
    • Replace a process-level token (Замена маркера уровня процесса)
  12. Отметьте: Audit Permission on Existing Subkeys
  13. Отметьте Success и Failure для следующих полей:
    • Query Value
    • Set Value
    • Write DAC
    • Read Control
  14. Нажмите кнопки OK, Yes.
  15. Повторите шаги с 10 по 14 для ключа SECURITY, если это необходимо. Это не требуется, если вам нужно активизировать аудит только тех ключей, которые содержат пароли.

  16. Выйдите из редактора реестра.
  17. Остановите службу Планировщика и измените его конфигурацию так, чтобы он работал от имени пользователя, которое употреблялось ранее (до шага 4). Если вы не применяете в обычной работе системы Планировщик NT, то просто остановите его или, еще лучше, заблокируйте (вариант disabled).


Безопасность приложений BackOffice

Многие прикладные программы, работающие в среде Windows NT, используют пароли, которые хранятся не в базе данных SAM. Такие приложения, как Microsoft Outlook, Internet Explorer (IE), Internet Information Server (IIS), SQL Server, - размещают пароли в различных областях системы. Нужно иметь представления обо всех этих областях и принимать меры для предотвращения нежелательного доступа в систему.

Одно из наиболее распространенных приложений в NT - Internet Explorer. Сам IE не требует ввода паролей, однако этого требуют многие узлы, доступ к которым осуществляется с помощью IE. Слабый дизайн Web-узлов обычно приводит к появлению проблем в области безопасности. В особенности это происходит, когда необходимые для входа на сайт имена пользователей и пароли размещаются в специальных модулях настройки клиентов, называемых cookies.

Срок жизни модулей настройки клиентов можно программировать, следовательно, можно указать, что он истекает немедленно.Тогда эти данные будут оставаться в памяти только в тот период, когда они используются в текущей работе с узлом, и никогда не будут записаны на диск. Модули, содержащие имена пользователей и пароли, срок жизни которых не истек, NT сразу же записывает в каталог %systemroot%profilesusernamecookies.

Любой, кому доступен этот каталог, имеет доступ ко всем данным, хранящимся в модулях настройки клиентов, включая такую информацию, как имена пользователей и пароли. Злонамеренный оператор Web-узла, знающий, где нужно искать соответствующую информацию, сможет найти ее в каталоге cookies. И пользователь ничего не будет знать об этом. Эта ситуация не является дырой в системе безопасности IE. Это просто особенность алгоритмов работы HTML Cookies.

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

Клиент Outlook во время обычной работы нигде не хранит в системе паролей в открытом текстовом виде. Однако если вы работаете с сервером по протоколу POP3, то пароли передаются по сети в явном виде. Такие пароли можно легко перехватить с помощью сетевого анализатора пакетов. Протокол POP3 требует передачи открытых паролей, поэтому Microsoft ничего не может сделать для решения этой проблемы. Но несмотря на это, для приема почтовых сообщений можно использовать вместо POP3 протокол APOP (Authenticated Post Office Protocol). Этот протокол работает с зашифрованными паролями.

SQL Server при аутентификации пользователей хранит пароли в системном реестре. Соответствующие ключи реестра очень слабо защищены. Например, когда вы регистрируете SQL-сервер с использованием SQL Executive, имя пользователя и пароль для этого сервера записываются в реестр, в дерево HKEY_LOCAL_MACHINESOFTWAREMicrosoftMSSQLServer. И любой сообразительный пользователь, имеющий право непосредственной регистрации с консоли сервера, может легко получить пароли SQL-серверов. Поэтому будьте внимательны при назначении пользователям прав регистрации на серверах с локальной консоли. Желательно также запретить удаленный доступ к реестру на всех системах NT, где это возможно. Но это следует очень аккуратно планировать, так как многим системам управления сетью и многим программам установки необходимо использовать удаленный доступ к реестру.

Недавно было обнаружено, что при установке пакета Microsoft BackOffice Server пароли пользователей остаются записанными на диск в явном виде в областях файловой системы, доступных обычному пользователю. Во время инсталляции создается файл reboot.ini в каталоге program filesmicrosoft backoffice. Если пользователь в процессе установки Backoffice 4.0 выбирает установку продуктов SQL Server, Exchange Server или Microsoft Transaction Server (MTS), то программа установки запрашивает имя и пароль для пользователей, необходимые для работы данных продуктов.

Если подробнее, то программа установки запрашивает имена и пароли пользователей, от имени которых работают SQL Executive, Exchange Services и MTS Remote Administrator, и сохраняет эту информацию в виде открытого текста в файле reboot.ini. После завершения установки программе не удается удалить этот файл. Позаботьтесь о том, чтобы не предоставлять излишних прав доступа системам BackOffice. Если вы имеете достаточно надежную систему безопасности, то вряд ли вы столкнетесь с описанной проблемой. Но, несмотря на это, обязательно удалите вручную этот файл после завершения установки BackOffice 4.0. Более подробная информация по этой проблеме изложена в статье Microsoft BackOffice Installer Tool Does Not Delete Password Cache File (http://support.microsoft.com/support/kb/articles/q217/0/04.asp).


Безопасность прикладных программ

Многие компании, занимающиеся разработкой программного обеспечения, не слишком много внимания уделяют вопросам безопасности. И если внимательно посмотреть вокруг, то можно заметить, что программисты - это далеко не всегда люди, озабоченные проблемами безопасности. Большинство программистов начинают думать о безопасности уже после того, как кто-то взламывает программу, или программа позволяет взломать всю систему или сеть.

Многие программные продукты имеют уязвимые места с точки зрения безопасности. Одним из таких продуктов является СУБД Oracle. Эта СУБД хранит в системе конфиденциальную информацию в виде открытого текста.

Отсюда вытекает мораль: необходимо обеспечивать защиту собственными силами, отслеживая состояние системы до, во время и после установки новых программ, в особенности если эти программы не являются широко известными коммерческими продуктами. Отслеживать состояние системы удобно при помощи утилиты Sysdiff, входящей в состав пакета Microsoft Windows NT Workstation 4.0 Resource Kit. Посредством Sysdiff вы можете создать образ системного реестра перед установкой новых продуктов и затем сравнить его с реально используемым реестром после установки программ. Утилита Sysdiff отображает все различия между двумя образами реестра. В качестве альтернативного варианта можно использовать утилиту Regmon (ее можно найти на Web-сайте Sysinternals: http://www.sysinternals.com). Данная утилита позволяет наблюдать за доступом к реестру в реальном времени.

Что касается файловой системы, вы можете сделать сравнение ее состояния до и после установки. Это поможет выявить, какие файлы были удалены или добавлены во время установки нового продукта. Чтобы сделать такое сравнение, можно использовать утилиту Windiff из набора Resource Kit. Это делается следующим образом.

Прежде чем установить новый программный продукт, откройте окно DOS и перейдите в корневой каталог диска, с которым вы собираетесь работать (например, C:). Чтобы создать текстовый файл, содержащий полную структуру файлов и каталогов, введите команду

dir /S > directory1.txt

Эта команда создает файл directory1.txt, включающий в себя список всех каталогов и файлов, расположенных на текущем диске. Создайте такие файлы для всех дисков, имеющихся у вас в системе, назначая разные имена файлов для каждого диска. После завершения установки нового программного продукта точно так же создайте еще один набор файлов, назначая другие имена файлов. Затем, используя утилиту Windiff, выполните сравнение структур каталогов, содержащихся в соответствующих созданных файлах. В результате Windiff отобразит все каталоги и файлы, которые были удалены, добавлены или модифицированы во время установки. Обязательно прочитайте справочный файл Windiff, который содержит подробные инструкции по работе с данной утилитой.

Также для получения информации о текущей работе с файловой системой вы можете использовать утилиту Filemon (доступную на сайте Sysinternals). Совместное использование Filemon или Windiff является удачным решением, так как оно позволяет выявить прикладные программы, которые без вашего ведома считывают конфиденциальную информацию из системы.

 

Шпионские программы и новейшие методы защиты от них

Обновлено: 13.09.2025
Н.Д. Красноступ, Д.В. Кудин

Н.Д. Красноступ, Д.В. Кудин

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

Особую опасность представляют мониторинговые программные продукты и аппаратные устройства, которые могут быть скрытно и несанкционированно (как правило, дистанционно) установлены без ведома владельца (администратора безопасности) автоматизированной системы или без ведома владельца конкретного персонального компьютера. Данная категория мониторинговых продуктов далее в статье будет именоваться как "программы-шпионы" или "продукты-шпионы".

Санкционированные же мониторинговые программные продукты используется администратором безопасности вычислительной системы (службой информационной безопасности предприятия или организации) для обеспечения ее наблюдаемости - "свойства вычислительной системы, позволяющего фиксировать деятельность пользователей и процессов, использование пассивных объектов, а также однозначно устанавливать идентификаторы причастных к определенным событиям пользователей и процессов с целью предотвращения нарушения политики безопасности и/или обеспечения ответственности за определенные действия" [1]. Именно это свойство, в зависимости от качества его реализации, позволяет в той или иной мере контролировать соблюдение сотрудниками предприятия установленных правил безопасной работы на компьютерах и политики безопасности.

Между мониторинговыми продуктами для обеспечения наблюдаемости и продуктами-шпионами очень тонкая грань - это грань между управлением безопасностью и нарушением безопасности. При этом наличие в программе таких специальных функции как:

  • возможность предварительной конфигурации модуля (клиента, агента и т.п.) мониторинга и получение "скомплектованного" исполнимого файла, который при инсталляции не выводит никаких сообщений и не создает окон на экране;
  • встроенные средства доставки и дистанционной установки сконфигурированного модуля на компьютер пользователя;

способствует и содействует превращению продукта для мониторинга и наблюдаемости в продукт-шпион. Напротив, наличие в программе следующих требований:

  • возможность инсталляции и конфигурации модуля мониторинга только при непосредственном физическом доступе к компьютеру пользователя;
  • обязательное наличие прав администратора для инсталляции и конфигурации программы;

зачастую делает продукт малопригодным для шпионских целей и несанкционированного применения. Исключение составляют случаи, когда, например, злоумышленником является сам администратор.

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

Для чего используются мониторинговые программы?

Их применение позволяет специалисту, ответственному за информационную безопасность предприятия:

  • определить (локализовать) все случаи попыток несанкционированного доступа к конфиденциальной информации с точным указанием времени и сетевого рабочего места, с которого такая попытка осуществлялась;
  • определить факты несанкционированной установки программного обеспечения;
  • проконтролировать возможность использования персональных компьютеров в нерабочее время и выявить цель такого использования;
  • определить все случаи несанкционированного использования модемов в локальной сети путем анализа фактов запуска несанкционированно установленных специализированных приложений;
  • определить все случаи набора на клавиатуре критичных слов и словосочетаний, подготовки каких-либо критичных документов, передача которых третьим лицам приведет к материальному ущербу;
  • определить факты нецелевого использования персональных компьютеров:
  • получить достоверную информацию, на основании которой будет разрабатываться политика информационной безопасности предприятия;
  • контролировать доступ к серверам и персональным компютерам;
  • контролировать контакты собственных детей при серфинге в сети Интернет;
  • проводить информационный аудит;
  • исследовать и расследовать компьютерные инциденты;
  • проводить научные исследования, связанные с определением точности, оперативности и адекватности реагирования персонала на внешние воздействия;
  • определить загрузку компьютерных рабочих мест предприятия;
  • восстановить критическую информацию после сбоев компьютерных систем;
  • и т.д.

Для чего используются несанкционированно устанавливаемые мониторинговые программы, т.е. программы-шпионы?

Их применение позволяет злоумышленнику:

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

Продукты-шпионы представляют серьезную опасность защите отдельных и соединенных в сеть компьютерных систем.

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

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



Программные кейлоггеры, предназначенные для контроля информации, вводимой пользователем персонального компьютера



Программные кейлоггеры (keyloggers, key loggers, keystroke loggers, key recorders, key trappers, key capture programs и множество других вариантов названия) принадлежат к той группе программных продуктов, которые осуществляют контроль над деятельностью пользователя персонального компьютера. Первоначально программные продукты этого типа предназначались исключительно для записи информации о нажатиях клавиш клавиатуры, в том числе и системных, в специализированный журнал регистрации (Log-файл), который впоследствии изучался человеком, уставившим эту программу. Log-файл может отправляться по сети на сетевой диск, ftp сервер в сети Интернет, по Email и др. В последнее время программные продукты, имеющие данное название, выполняют много дополнительных функций - это перехват информации из окон, перехват кликов мыши, "фотографирование" снимков экрана и активных окон, ведение учета всех полученных и отправленных Email, мониторинг файловой активности, мониторинг системного реестра, мониторинг очереди заданий, отправленных на принтер, перехват звука с микрофона и видео-изображения с веб-камеры, подключенных к компьютеру и др.

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

MYDOOM - worst yet to come
The Age
... So far, the damage is minimal. But the pre-eminent danger is that one
virus strain has a keylogger." Faulkner said it is possible ...
http://www.theage.com.au/articles/2004/01/29/1075088122616.html

CI Host CEO Monitors Computer Virus Epidemic Effects: ...
Yahoo News (press release)
... One in every dozen e-mails carries the virus. So far, the damage is
minimal. But the preeminent danger is that one virus strain has a keylogger." ...
http://biz.yahoo.com/prnews/040128/flw020_1.html

MYDOOM virus delivers gloom
Press of Atlantic City
... Infected computers still will have a backdoor in them, as well
as a key logger that records every keystroke. "A backdoor ...
http://www.pressofatlanticcity.com/news/newjersey/012804MYDOOM_J27.html

SCO offers $250000 reward for arrest of Mydoom worm author
ComputerWorld
... According to Symantec, the worm also installs a "key logger" that can
capture anything that is entered, including passwords and credit card
numbers, and will ...
http://www.computerworld.com/securitytopics/security/virus/story/0,10801,89470,00.html

NEW, fast-spreading worm spells Doom
InfoWorld
... The worm will install a "key logger" that can capture anything that
is entered, including passwords and credit card numbers, Ruckman said...
http://www.infoworld.com/article/04/01/27/HNdoomworm_1.html

NO move to stop email bounce messages yet, says Telecom
Computerworld New Zealand
... Symantec also claims the worm will install a "key logger" that can
capture anything that is entered, including passwords and credit card
numbers ...
http://www.computerworld.co.nz/news.nsf/UNID/23A51A1010B535FCCC256E280012F960?OpenDocument

WEB virus beats defence
Melbourne Herald Sun
... Anti-virus company Symantec warned the virus could install a "key logger"
program on to computers, allowing hackers access to every keystroke, including ...
http://www.heraldsun.news.com.au/common/story_page/0,5478,8513866%255E421,00.html

GLOBAL Hauri Offers Quick Fix to the Latest Cyber Threat
Market Wire (press release)
... spread by email. With the infections MyDoom also installs a key logger
and backdoor server on the infected computer. A new feature ...
http://www.marketwire.com/mw/release_html_b1?release_id=62255

INVESTOR Scammed By Keylogger Spyware
Emediawire (press release)
... In reality what was in their download was a keylogger that
captured & recorded the usernames and passwords to online accounts ...
http://www.emediawire.com/releases/2004/1/emw100583.htm

И это - не единственный пример. Многие серьезные и наиболее опасные предшественники Mydoom также содержали кейлоггеры. При этом нередко для распространения червей использовалась широко известная уязвимость IFrame браузера Microsoft Internet Explorer, которая позволяла запустить произвольный код на компьютере пользователя при простом просмотре HTML документа в браузере или почтовом клиенте Outlook. И хотя она была "залатана" еще в 2001 году (http://www.microsoft.com/technet/security/bulletin/MS01-020.asp), широкомасштабные вирусные эпидемии в недавнем прошлом еще раз показали, что многие пользователи до сих пор работают на устаревших системах без обновлений и патчей, несмотря на регулярные предупреждения антивирусных компаний. Кроме того, компания Microsoft регулярно выпускает патчи, закрывающие новые уязвимости, позволяющие злоумышленнику выполнять произвольный код на компьютере пользователя.

Примерами известных программных кейлоггеров являются Activity Logger, Boss Everyware, Ghost Keylogger, HookDump, IamBigBrother, Invisible KeyLogger Stealth, iOpus STARR, iSpyNOW, KeyCopy, KeyKeeper, KeyKey, KeyLog, KeySpy, Keystroke Reporter, PC Spy, Perfect Keylogger, ProBot, Realtime Spy, Spector Pro, SpyAgent, SpyBuddy, WinWhatWhere Investigator. В мире на сегодняшний день существуют сотни подобных продуктов, отличающихся друг от друга функциональностью, удобством работы, информативностью отчетов, возможностями по невидимости и защите от обнаружения/удаления.

Образцы внешнего вида анализаторов Log-файла программ Perfect Keylogger и Boss Everyware приведены ниже:





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



Аппаратные кейлоггеры (keystroke recording device, hardware keylogger и пр.) представляют собой миниатюрные приспособления, которые могут быть прикреплены между клавиатурой и компьютером или встроены в саму клавиатуру. Они регистрируют все нажатия клавиш, сделанные на клавиатуре. Процесс регистрации абсолютно невидим для конечного пользователя. Аппаратные кейлоггеры не требуют установки какой-либо программы на компьютере интересующего объекта, чтобы успешно перехватывать все нажатия клавиш. Такое устройство может быть тайно прикреплен к ПК объекта кем угодно - коллегой, уборщицей, посетителем и т.д.. Когда аппаратный кейлоггер прикрепляется, абсолютно не имеет значения, в каком состоянии находится компьютер - включенном или выключенном.

Затем атакующий может снять устройство в любой удобный момент, а его содержимое (записанные нажатия клавиш) скачать, когда ему это будет удобно. Объемы внутренней энергонезависимой памяти данных устройств позволяют записывать до 10 миллионов нажатий клавиш. Фотографии, опубликованные ниже наглядно иллюстрирует, насколько легко прикрепить данное устройство к компьютеру пользователя. Данные устройства могут быть выполнены в любом виде, так что даже специалист не в состоянии иногда определить их наличие при проведении информационного аудита.

Особо известны на рынке следующие аппаратные кейлоггеры - KeyKatcher, KeyGhost, MicroGuard, Hardware KeyLogger, производителями которых являются компании Allen Concepts Inc., Amecisco, KeyGhost Ltd., MicroSpy Ltd.

Аппаратные кейлоггеры подразделяются на внешние и внутренние, отличительные особенности которых описаны ниже:

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

Современные аппаратные кейлоггеры представляют собой встроенные приспособления, которые выглядят, как оборудование для ПК.

Сложнее всего обнаружить (и обезвредить) внутренний аппаратный кейлоггер, у которого аппаратный модуль перехвата нажатий клавиш встроен в корпус клавиатуры.

Современный внутренний аппаратный кейлоггер представляет собой встроенное приспособление, которое выглядит, как клавиатура ПК.

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

Внешние виды анализаторов аппаратных кейлоггеров приведены ниже:





 

Методы противодействия программам-шпионам



Для обнаружения и удаления мониторинговых программных продуктов, которые могут быть установлены без ведома пользователя ПК, в настоящее время используются программы различных типов, обеспечивающие более или менее эффективную защиту исключительно только против ИЗВЕСТНЫХ программ-шпионов с помощью сигнатурного анализа. Для эффективной работы программ данного типа необходимо получить образец программы-шпиона, выделить из нее сигнатуру и включить данную сигнатуру в свою базу. При обновлении сигнатурной базы пользователи персонального компьютера получают возможность бороться с данным вариантом программы-шпиона. По данному принципу работают многие известные фирмы производители антивирусного программного обеспечения.

Но есть и другая группа программ-шпионов, которая наиболее опасна для любых автоматизированных систем - это НЕИЗВЕСТНЫЕ программы-шпионы. Они подразделяются на программы пяти типов:

  1. Программы-шпионы, разрабатываемые под эгидой правительственных организаций (как пример - продукт Magic Lantern, проект под названием Cyber Knight, США).
  2. Программы-шпионы, которые могут создаваться разработчиками различных операционных систем и включаться ими в состав ядра операционной системы.
  3. Программы-шпионы, которые разработаны в ограниченном количестве (часто только в одной или нескольких копиях) для решения конкретной задачи, связанной с похищением критической информации с компьютера пользователя (например, программы, применяемые хакерами-профессионалами). Данные программы могут представлять собой немного видоизмененные открытые исходные коды программ-шпионов, взятые из сети Интернет и скомпилированные самим хакером, что позволяет изменить сигнатуру программы-шпиона.
  4. Коммерческие, особенно, корпоративные программные продукты, которые очень редко вносятся в сигнатурные базы, а если и вносятся, то только по политическим мотивам (как пример - программные продукты таких известных фирм, как WinWhatWhere Corporation, SpectorSoft Corporation, ExploreAnywhere Software LLC, Omniquad Ltd. и др.).
  5. Программы-шпионы, представляющие собой keylogging модули включаемые в состав программ-вирусов. До внесения сигнатурных данных в вирусную базу данные модули являются неизвестными. Пример - всемирно известные вирусы, натворившие много бед в последние годы, имеющие в своем составе модуль перехвата нажатий клавиатуры и отправки полученной информации в сеть Интернет, например -

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

Информация о программах-шпионах второго типа нигде не опубликовывается, данный код работает на уровне ядра операционной системы и, соответственно, они не могут обнаруживаться никакими приложениями.

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

Информация о программах-шпионах пятого типа вносится в сигнатурные базы через несколько часов или дней после начала соответствующей вирусной атаки. А за это время конфиденциальная информация пользователя персонального компьтера уже может быть украдена и отослана в сеть Интеренет на заранее подготовленный вирусописателем адрес.

Что же может противопоставить пользователь персонального компьютера программам-шпионам?

Решение данной проблемы возможно только в использовании комплекса программных продуктов:

  • Программный продукт N1 - это продукт, который использует эвристические механизмы защиты против программ-шпионов, созданные специалистами, имеющими больший опыт борьбы с программами-шпионами. Он оказывает защиту непрерывно и не использует никакие сигнатурные базы.
  • Программный продукт N2 - это Антивирусный программный продукт, использующий постоянно обновляемые сигнатурные базы.
  • Программный продукт N3 - это персональный Firewall, контролирующий выход в сеть Интернет с персонального компьютера на основании политик, которые устанавливает сам пользователь.

Такая последовательность выбрана неспроста.

Антивирусный программный продукт успевает отреагировать на проникновение вируса с keylogging модулем, когда уже осуществлен перехват информации, т.к. вирусная база еще не успела пополниться новой информацией, а, соответственно, и обновиться на компьютере пользователя.

Персональный Firewall задает много вопросов, на которые даже очень хорошо подготовленный пользователь может ответить некорректно, тем самым неправильно его сконфигурировав. Например, некоторые коммерческие мониторинговые программы используют процессы программных продуктов, которым заведомо разрешен выход в Интернет (браузеры, почтовые клиенты и т.д.). Как правило, пользователь обязан разрешить им выход в Интернет. А это приводит к тому, что та информация, которая была уже украдена при полном бездействии антивирусной программы, спокойно будет передана в сеть Интернет на заранее подготовленный хакером (или кем-то иным) интернет-адрес.

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

Антивирусных программных продуктов, использующих постоянно обновляемые сигнатурные базы, в мире создано великое множество (AVP, Dr.Web, Panda Antivirus, Norton Antivirus и многие другие). Персональных межсетевых экранов создано еще больше (Norton Internet Security, BlackICE Defender, GuardianPro Firewall, Tiny Personal Firewall и многие другие). А защитные программные продукты первого типа представлены на сегодняшний день всего лишь одним продуктом, не имеющим аналогов в мире. Этот продукт называется PrivacyKeyboard™.

PrivacyKeyboard™ блокирует работу программ-шпионов без использования сигнатурных баз. Это стало возможным благодаря тому, что были найдены решения и разработаны алгоритмы, которые позволили отличить работу программы-шпиона от любого иного приложения, которое установлено в системе.

PrivacyKeyboard™ имеет в своем составе модули, обеспечивающие

  • защиту от перехвата нажатий клавиш клавиатуры;
  • защиту от перехвата текста из окон;
  • защиту от снятия изображения рабочего стола;
  • защиту от снятия изображения активных окон.

Для собственной защиты от внешнего разрушительного воздействия программ-шпионов программный продукт PrivacyKeyboard™ имеет систему контроля целостности и другие защитные функции.



Методы противодействия аппаратным кейлоггерам



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

Сегодня существует только два метода противодействия аппаратным кейлоггерам при работе на стандартном персональном компьютере:

  • физический поиск и устранение аппаратного кейлоггера;
  • использование виртуальных клавиатур для ввода особо важной информации (логины, пароли, коды доступа, PIN коды кредитных карт и т.д.).

Остановимся детальнее на втором пункте.

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

Раскладка виртуальной клавиатуры переключается автоматически при переключении раскладки основной клавиатуры персонального компьютера и поддерживает все языки и раскладки, которые установлены в операционной системе Microsoft Windows NT/2000/XP.

Структурная схема и краткое описание механизма функционирования программы PrivacyKeyboard™ представлены ниже.

  1. Модуль блокирования программных кейлоггеров является активным по умолчанию, обеспечивая постоянную и прозрачную защиту "на лету" от различных типов программных кейлоггеров. Его можно легко выключить/включить одиночным левым щелчком мыши на иконке PrivacyKeyboard™ в системном трее. Когда Модуль блокирования программных кейлоггеров включен, PrivacyKeyboard™ подавляет любые кейлоггеры, которые могут быть включены в состав коммерческих, бесплатных и условно бесплатных продуктов, а также "троянских коней" и вирусов, использующих самые разные принципы функционирования и основанных на модулях пользовательского уровня либо уровня ядра системы - dll, exe, sys и др., которые создают лог-файлы на жестком диске, в памяти, реестре, на сетевых дисках, либо пересылают лог-файлы на заранее указанные адреса по протоколам SMTP, FTP, HTTP и др.
  2. Модуль блокирования аппаратных кейлоггеров можно активировать путем нажатия правой клавиши мыши на иконке PrivacyKeyboard™ в системном трее и выбора опции Показать модуль блокирования аппаратных кейлоггеров. При этом на экране появится виртуальная клавиатура. Она поддерживает различные раскладки клавиатуры и языки, установленные в системе. При работе с виртуальной клавиатурой в целях безопасности стандартная клавиатура блокируется. При включении Модуля блокирования аппаратных кейлоггеров автоматически включается Модуль блокирования программных кейлоггеров, даже если он перед этим был выключен. Настоятельно рекомендуется использовать совместное функционирование этих двух модулей для ввода наиболее критичной информации - логинов, паролей, кодов доступа и т.п.

Разработчиком программы PrivacyKeyboard™ является ООО "Центр информационной безопасности" (г. Запорожье, Украина). Доступна бесплатная версия для ознакомления, скачать которую можно по адресу: http://www.bezpeka.biz/download.html.



Ссылки



 

  1. НД ТЗИ 1.1-003-99. Терминология в области защиты информации в компьютерных системах от несанкционированного доступа. // Департамент специальных телекоммуникационных систем и защиты информации Службы безопасности Украины. - Киев, 1999.
  2. "2001 AMA Survey: Workplace Monitoring & Surveillance: Summary of Key Findings"
    American Management Association
    http://www.amanet.org/research/pdfs/ems_short2001.pdf
  3. "Computer And Internet Surveillance in the Workplace: Rough Notes".
    Andrew Schulman, Chief Researcher, Privacy Foundation, US, 2001-2002
    http://www.sonic.net/~undoc/survtech.htm
  4. "The Extent of Systematic Monitoring of Employee E-mail and Internet Use"
    Andrew Schulman, Chief Researcher, Privacy Foundation, US, 2001-2002
    http://www.sonic.net/~undoc/extent.htm

Источник: http://bezpeka.com/ru/lib/sec/gen/art382.html

Социальная инженерия. Профессиональное программирование. Последовательный взлом

Обновлено: 13.09.2025
wider@frost.net.ru

Автор:
E-mail:wider
WWW:brotherhood



 

Вступление

  С развитием Internet, появилось много "хакеров" :) И все эти "хакеры" "умеют" ломать сервера и знают, как это делать. Я не буду учить вас взламывать сервера. Я, пожалуй, попытаюсь вам рассказать, как можно взламывать не сервера, а разум людей. А также как использовать удачно подвернувшуюся ситуацию.
  Все это я разбавлю примерами по теме разговора. Предупреждаю, что некоторые из этих примеров были на самом деле, другие же не больше, чем плод моего воображения. Если вы увидели себя в этих примерах - считайте, что это случайность.

Социальная инженерия

  К сожалению, с появлением всех этих хаксоров, все забыли о прекрасном методе взлома - социальной инженерии. Для тех, кто не в курсе, что это такое, я поясню. Это одна из частей социальной психологии, направленная лишь на то, чтобы манипулировать людьми или порождать в их разум новую модель поведения. Каждый в жизни, наверно, сталкивался с тем, что кто-то на него воздействовал социальной инженерией, но скорей всего эти оба человека, и жертва, и охотник не догадывались об этом. Вы можете столкнуться с этим в магазине, когда вам пытаются впарить какой-либо товар. Или по телевидению, когда вам рекламируют, какой замечательный этот товар, который на самом деле полное дерьмо. И так далее. Но как вы заметили, во всех этих ситуациях, никто не догадывается, о том, каким способом, все это происходит. Просто потому, что это частичная или слабая социальная инженерия. Я же попытаюсь вам рассказать о профессиональной инженерии, когда все ваши усилия будут направлены на достижения какой-либо цели.

Добыча информации. Социальная инженерия. Последовательный взлом.

  Конечно самое эффективное, для чего применяется социальная инженерия, это добыча информации. Причем неважно какой. Весь интерес в том, что можно узнать очень секретную информации, но тот человек, который вам ее скажет, будет чувствовать, не более чем, если бы он вам рассказал секретный рецепт пирожков. Тут к этому у меня есть замечательный пример, который рассматривает сразу две под темы социальной инженерии, но замечу, что пример нестандартный:

  Стоял я как-то перед зданием одной компании. Очень хорошее пятиэтажное здание, отданное полностью под эту компанию, постояв возле входа, я обнаружил, что все кто туда входит, отчитываются вахтеру, куда они и зачем. Понятно, что просто так туда не войти. Обойдя, его я обнаружил две дыры (дыры не такие, какие бывают у OS, а такие, которые бывают в ситуации такой, какая сейчас, я просто провел аналогию). Дыры заключались в следующем: 1) с задней стороны здания нет дверей, поэтому там люди не ходят, но есть лестница на крышу, такая простая лестница, железная, не удобная, немного высоко над землей. И хотя висела видеокамера, которая якобы все снимала, я видел, что она не работает, не горели никакие лампочки и не шли провода. 2) Прямо в притык с этим зданием строили новое здание, выше на четыре этажа, то есть девятиэтажное здание, пустое. И пара окон как раз выходила на крышу этого здания, и хотя на окнах была решетка, я заметил, что другая пара окон, которые на этаж выше без решетки и что высота между ними не большая. На следующую ночь, я вместе с другом забрались через стройку, протащив с собой лестницу и спустив ее со стройки 6-этажа на 5 этаж здания-жертвы. На крыше было: спутниковая антенна, 10 телефонных кабелей, и вроде бы ethernet. Нам тогда кроме телефонных кабелей нечего не надо было, поэтому мы занялись ими. Друг у меня работал в тел. компании, и был хорошим телефонным специалистом, он взял с собой два прибора: первый позволял прослушать, что в линии без подключения, второй - вклинивание в линию, не обрывая ее. В эту ночь все разведали и ушли. На следующую ночь мы разведали первый путь проникновения на крышу: лестницу, как я и предполагал, никто нечего не обнаружил. И на этот раз мы взяли с собой все необходимые приспособления. Вот что мы сделали за эту ночь: поставили 5 диктофонов на линии, чтобы они включались, когда в линии идет сигнал, на остальных линиях мы обнаружили только модемы и, подключившись к этим линиям, мы сделали, так чтобы при звонке на этот телефон запрос передавался на другой телефон (стандартная АТС`ная фича). На всех других телефонах у нас стояли модемы, которые принимали звонки и записывали пароли. Через сутки мы узнали 13 паролей, среди них 2 админовских и куча информации на диктофонах. Обнаружили, что среди тех телефонов присутствует телефон Отдела Кадров, Приемной директора, Серверной (!), Справочной, остальные оказались простыми телефонами сотрудников. За неделю записи данных с первых четырех телефонов нам дали столько информации об этой компании, что хватило бы для того, чтобы разорить их и ограбить легальным путем. А если еще учесть то, что мы обнаружили потом на их серваках через админовские пароли, то этого нам хватило на два месяца просмотра информации.

  Напоследок хочу сказать, что хотя на первый взгляд этот пример никак не связан с социальной инженерией стандартного характера (не участвует человек-жертва, нет сути развода жертвы на что-либо), я вам скажу, что здесь использовались методы человеческого сознания. То есть не надо думать, что раз висят камеры, то нас увидят или, что раз крупная компания, то им на крышу не залезешь. Надо думать технически тоже, а не социально. Поэтому в этом примере мы действовали по принципы обратного от human denial of service, то есть когда людей выводят из строя воздействием на них социальных мерок, таких как значимость компании и стереотипы охраны здания.

  И еще один пример, без комментариев, просто читайте и вникайте :)

  "Извините, а вы куда?" - охранник выглядел злым, что проходят мимо него.
  " В серверную. Вы что не видите, что я тороплюсь??" - я сделал недоуменное лицо, показывая, что я не собираюсь тратить свое время на какую-то личинку типа охранника.
  "Да, конечно, но у вас есть пропуск? Вы кто?" - он нервничал, что не узнает меня, еще бы, откуда ему меня знать.
  "Как кто? Вы что, не знаете своего начальства? Я - Свиридов. Как ваша фамилия?" - я сделал укоризненный взгляд, показывая, что я раздражен.
  "Моя? Ээ: Привалов, старший охранник Привалов!" - мямля ответил грозный человек, запинаясь и не зная куда смотреть.
  "Привалов? Ну, вы у меня смотрите, сегодня же зайду к вашему начальнику" - сказал я и быстро двинулся дальше.
Охранник поглядел мне в след и подумал "Фу... опять кого-то к нам занесло, ездят тут всякие начальники из Москвы, а нас не предупреждают".
  Я быстрым шагом прошел по коридору, оглядывая, как тут все смотрится, до этого я видел эту структуру только по топологии сети, украденной с сервера. "Хмм... должно быть это серверная" - подумал я, вспоминая план, и нажал на ручку двери. Она отворилась, и я увидел лысого человека с бородой нервно курившего и смотревшего на монитор. "Наверняка системный администратор" - мелькнула мысль, и я подошел.
  "Извините, а вы не могли бы посмотреть, что там у вас на сервере с моим именем" - сказал я извиняющим голосом, таким как говорят все пользователи перед грозными администраторами.
  "Хмм... а вы кто такой, я вас не узнаю" - спросил бородатый, как все админы подозрительный.
  "А я только вчера устроился, мне сказали, что у меня должна быть учетная запись на сервере, я попробовал войти, но у меня не получилось, вот я к вам и зашел" - пробубнил я, смотря на него невинными глазами.
  "Хмм: ну сейчас посмотрю. Как фамилия?"
  "Привалов. Привалов Александр Викторович" - сказал я обрадовавшимся голосом пользователя.
  "Ну да, вас не было в базе данных, я добавил. Пароль у вас такой же, как учетная запись, поменяйте при входе в сеть" - сказал админ уже увлекаемый снова в монитор.
  "Хорошо" - сказал я и исчез в двери.
  Вышел я из здания довольный, подошел к таксофону и набрал номер телефона серверной.
  "Алло" - сказал все тот же голос бородатого.
  "Хмм, Андрей Владимирович, почему у нашего начальства из Москвы нет доступа к информации для совета директоров?" - сказал я жестко поставленным баритоном.
  "Ну, как так, я не знал, что он из совета директоров, сейчас поставлю права доступа. Я не знал, предупреждать надо" - пробубнил он немного раздраженно.
  "Ну, хорошо, позаботитесь" - сказал я более грубо и положил трубку.
  Мой путь от таксофона до дома был налегке. Я пришел, сел за компьютер, набрал номер телефона внутри корпоративной сети компании X, вошел в сеть под Приваловым и стал с интересом читать документы совета директоров.

Нахождение и обработка информации.

  Рассмотрев раздел о том, как добывать информацию, рассмотрим, как находить информацию.
  Я видел много документацией в сети, как собрать информацию о человеке, которого вы собирайтесь атаковать. Наивные. На самом деле собирать ее не надо, так как она лежит перед вами. Зайдите не страничку вашей жертвы. Вот. Вот перед вами вся информация, которая вам нужна. Он сам вам ее дал. Город, где живет (часто). Может быть телефон, как связаться. Адрес, где их можно дойти (это если это фирма). E-mail (всегда). Имена и фамилии руководителей (на корпоративных сайтах). Это все, что вам нужно. Имя + фамилия + должность + e-mail = все, что нужно социальному инженеру.

  Была очень интересная компания, которая мне очень не нравилась. Я зашел на их сайт и прочитал, все, что там было написано. Я узнал: е-маил, имя и фамилию их веб-админа. Этого оказалось достаточно. Я по е-майлу представился как начинающий, но прогрессивный веб-дизайнервеб-программист и указал на некоторые ошибки в их сайте (немного неправильные скрипты, кое какие дизайнерские ошибки). И указал им url сайта, где была информация о том, как не допускать таких ошибок и парочка программ, которые помогали исправить эти ошибки. Конечно же, сайт был сделан мною, причем очень натурально, не хуже какого-нить www.download.ru или www.design.ru, при чем программы, которые там лежали ДЕЙСТВИТЕЛЬНО работали, исправлял ошибки, выдавали tips и все такое. Просто они выполняли еще кое-чего, ну просто то, что мне было необходимо. И, конечно же, мой сайт лежал не на www.chat.ru или tripod.com, а на хорошем домене www.[имя сайта].com, ведь нечего не стоит купить его на пару месяцев. Главное, чтобы все выглядело натурально и чтобы все, что там лежали было правдой, и работало.
  Да кстати, забыл упомянуть, что программы, которые он скачал, были написаны мною, и исправили ошибки на его сайте, так что он обрадовался, что ему действительно дали реальную ссылку. Что потом произошло уже не важно, главное, что я добился своего - я получил доступ к его web-сайту.

  Вывод: не нужно пренебрегать какой-либо информацией, и стоит воспользоваться всем, что видно снаружи. Любая строчка на сайте может дать полный доступ к сознанию человека, для проникновения в это сознание и для получения полного контроля над этим сознанием. Манипулировать людьми легко, поверьте мне.

Некоторые способы развода людей.

  Итак, как же все-таки получить что-либо путем развода?
  Можно раскрутить админаоператораопера на что-либо путем:
1) обещания дать взамен что-то (не обязательно потом исполнять)
2) просто за хороший разговор (когда говорят "он мне просто понравился")
3) путем наезда.
  Про первый пункт я думаю все понятно и так. Поэтому обсуждать его мы не будем.
  Второй пункт: тут главное определить врата сортировки собеседника. Для тех, кто не знает, что такое врата сортировки поясняю. У каждого человека есть свои врата сортировки. Они могут быть такие: место, время, люди, вещи, ценности. Сейчас объясню на примере: у Васи врата сортировки являются люди и время. В таком случае в разговоре легко прослеживается то, что человек часто тебя спрашивает "кто это был?" (врата сортировки: люди) или "а когда?" (врата сортировки: время). Понимаете? Вот такие дела. Так вот, когда определяешься врата сортировки человека, легко найти с ним общий язык, нужно просто говорить по его вратам сортировки. Тогда он с удовольствием будет с тобой говорить и соответственно легко, что-то из человека выклянчить.
  Третий путь: жестко на человека наехать. Я как-то присутствовал при ситуации, когда просто человек заходил на канал на irc и начинал наежать на какого-либо оператора. Сначала соответственно оператор тоже в ответ наежал, но тут главное не расслабиться, а быть серьезней. Я видел такую ситуацию, когда оператор уже начинал бояться человека, и пытался с ним подружиться, подмазывался и уже даже давал ему оператора.
  Также для развода может быть применен метод, описанный в следующем пункте.

Human denial of service (HDoS)

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

  Он сидел и читал логи сервера под управлением FreeBSD 2.2.8 и не понимал, почему сегодня ночью с 5 хостов одновременно пытались соединиться к порту 7 по протоколу udp. Он знал, что это порт для echo - отображение введенных символов, никаких дыр в этом сервисе он не знал, да и атака не была похоже на DoS - соединение устанавливалось, пересылалась какая-то строка и разрывалось, не занимая никакие сетевые и процессорные ресурсы. Это было похоже на попытку buffer overflow через ECHO. Но он не знал, что в ECHO есть такая дыра и стал упорно изучать исходные тексты свой OS в надежде найти, где там дыра, и сам, тестируя свою систему посылая различные строки, и отлавливая, что ему будут посылать еще в этот порт.
  В это же самое время, я сидел и пытался все более его запутать. Я стал посылать строки в finger, в sendmail, в popper, при этом, делал так, чтобы строки были немного разные, для каждой конкретной передачи и очень отличающие для разных служб. Это очень походило на поиск сразу во всех службах строки приводящей к buffer overflow. И все это отображалось в логах у админа, засоряя их по всякому. Я спокойно запустил эти программы посылки строк на 5 машинах, а сам в это время со своей машины ломал его сервер, а так как логи в это время чрезвычайно были пестры о попытках buffer overflow, то мои слабые попытки никак не выдавались в них. Когда у меня была успешная попытка, и я зашел, у него в логах отобразилось, что с внешнего хоста зашли под root`ом, но он этого не видел, он был чрезвычайно занят просмотром исходников.

  Мы хорошо видим пример HDoS. Мы вывели из строя админа, переключив его внимание на ненужную работу. Он просматривал исходники, которые были без ошибок, а он был уверен, что они есть, ведь иначе, зачем кому-то пытаться таким образом атаковать систему.
  Это натуральный пример HDoS.
  Таким образом, можно сделать достаточно много. При желании, можно реализовать такую ситуацию, что акции великих компаний начнут падать. Представьте такую ситуацию: заходите вы на www.intel.com, а там написано в новостях, что вчера сгорело одновременно 5 заводов, где выпускались процессоры (на самом деле, это хакер поменял новости). Это приведет к тому, что цены на процессоры резко вырастут, а акции Интела упадут. Делайте выводы сами. Стоит ли писать на взломанных веб-серверах "hacked by megaspoofa. btw, admins is lamers" или может быть взять ситуацию под контроль?

Углубленные методы и аспекты добычи информации.

  Перед осуществлением добычи информации, определите, какая информация вам необходима. Иначе вы можете затратить множество времени, для добычи не нужной вам информации. После того, как вы точно обдумайте, что вам необходимо от, допустим, системного администратора компании X, то подумайте, кто еще знает эту информацию, кто знает о существовании этой информации, кто имеет доступ к этой информации, кто имеет право на изменение этой информации. Часть ответов из этих вопросов вы решите в процессе добычи информации, но чем больше вы будете знать ответов, тем легче будет добыть информацию.
  Для начала необходимо узнать координаты и личные данные (как можно больше) о тех людях, кто имеет отношение к этой информации. Если вы знаете хотя бы домашний телефон одного сотрудника, то можно по справочнику узнать фамилию, иногда имя и отчество. Если вы это узнали, то вы можете попробовать узнать через этого человека всю остальную информацию. Вы можете позвонить ему, представить работником компании X, желательно в должности выше его и попросить координаты остальных людей, с которыми вам придется общаться. Так же желательно, чтобы в данном мероприятии участвовало несколько человек с различными голосами, также желательна представительница женского пола с красивым голосом. После того, как вы по цепочке узнаете личные данные на каждого человека, попытайтесь узнать о них рабочие данные. Это легко сделать, достаточно встретить любого, кто работает в этой компании, и поинтересоваться, а как выглядит Вася Пупкин. И кем он работает, а также его кабинет с телефоном, так как, видите ли, вам сказали его найти, а вы не знаете кто это. Любой не подумав нечего плохого, расскажет вам, если он знает. Таким образом, вы накопите много информации. Обязательно узнайте, кто стоит по должности под и над этими людьми, чтобы можно было так манипулировать.
  Теперь вы можете звонить к нижестоящему человеку этого человека и говорить, что вы якобы по поручению этого человека должны сделать что-либо важное, но не можете, так как присутствуют какие-либо проблемы. И поэтому просите, чтобы он сделал то-то (здесь надо его попросить сделать то, к чему вы собственно и стремились, например, дать вам привилегированные права).
  Можно уговорить, чтобы тот человек, которому вы звонили, связался с системным администратором и сделал для вас акаунт с соответствующими привилегиями. Желательно, чтобы тот, кто будет говорить с сис. админом был выше его по должности. Таким образом, сис. админа будет просить уже человек, которого он знает. И нечего не заподозрит. А вы тем временем можете наслаждаться доступом в сеть с крутыми привилегиями.

Профессиональный подход к программированию backdoor.

  Для добычи информации вам часто может понадобиться backdoor, который будет запущен там, где вам надо. Но сразу вам скажу - забудьте обо всех тех "троянцах", которые вы до этого видели. Напишите свой backdoor или попросите, профессиональна, написать вам такой, какой вам нужен.
  Всякие интересные и "полезные" вещи, как открывание cd-rom, выключение монитора, чат с жертвой - отложите это до будущих времен. Backdoor нужен для того, что определяет его название - back door - задняя дверь, незаметный проход, запасной вход. Нужно писать для того, чтобы получить доступ, манипулировать информацией, красть ее. А так как все развлечение занимают лишний код, и увеличивают сложность backdoor`а. Backdoor должен писаться только для того, что нужно вам и ничего иного. И не забывайте очень важного плюса этой ситуации: никакой антивирус не скажет про вашу замечательную программу, что она backdoor. :)
  Если вы будете следовать этому, то вы сможете узнать гораздо больше информации, чем рассчитывали.

  Мне понадобилось как-то узнать пароль root`а на одном unix`е. По стандарту мне надо ломать саму машину, где стоит unix. Но если она очень хорошо защищена, то это не так легко сделать, если вообще возможно. Но если вспомнить про человеческую незащищенность и социальную инженерию, то все unix-машины становятся доступны. Я сделал следующее: написал backdoor под windows, который делал буквально следующее: он записывал все набранное на клавиатуре и давал доступ к диску. ВСЕ. Ничего лишнего. Получился этакий ftp-сервер с логой, того, что написано на компьютере. В этого я скачал все файлы с рабочей станции этого человека и взял логу, того, что он писал. Этого оказалось достаточно, потому что там были пароли и от акаунта на unix-машине, и от root`а. Его пароль был прописан в почтовом клиенте. А пароль root`а лежал в логе (когда он удаленно заходил на его сервер, он вводил этот пароль). В итоге была взломана машина unix. Хотя никакие методы проникновения замечены не были.
  Вывод: нужно думать более глобально, не нужно ограничивать свое внимание только на объекте (aka жертве), а нужно думать обо всех машинах в сети.

  Так вот, поэтому практически во многих ситуациях нам достаточно прочитать веб-сайт жертвы и написать back door.
  Определите к чему и для чего вы хотите получить доступ. Если вам всего лишь надо скопировать всю информацию и то, что вводил пользователь с клавиатуры - ограничитесь упрощенным фтп-сервером и кей-логгером. Вам этого хватить.
  Если вы хотите постоянно наблюдать за жертвой, то встройте еще функцию screenshot`а, чтобы смотреть на экран жертве, встройте поддержку socks-соединения, чтобы работать не напрямую, а через socks-сервер. Встройте шифрование передаваемых данных и проверку паролем доступа к backdoor`у жертвы. Можете добавить, если это необходимо удаленное управление реестром.
  Но никогда не стоит делать того, что вам не надо. Не надо, допустим, вставлять в программу функцию просмотра запущенных процессов и их завершение. В большинстве случаев можно обойтись минимумом.
  Еще разумный шаг: использование plug-in`ов. На начальном этапе жертве посылается только база, даже без file manager`а. Но такой, который бы сам скачал бы plug-in с этим и установил.

Stealth-backdoors.

  Теперь рассмотрим такую немаловажную вещь, как стелс-технологию.
  Несколько примеров backdoor`ов.

  1. Небольшая программа (15-35 кб) при запуске соединяется с прописанным в ней фтп-сервером, скачивает с него некую модифицированную программу (например, internat.exe - переключение кодировки) с встроенным троянцем. (я делал так: клал на фтп-сервер несколько версий этого internat`а: w95en.exe, w95ben.exe, w95ru.exe, w95bru.exe, w98en.exe, w98ru.exe, w98seen.exe, w98seru.exe - win95 англ., win95osr2 англ, win95 русский и так далее до win98 second edition; и качал соответствующий). После скачивания он заменяет ей родную программу и удаляется. При перезагрузке он запускается как internat.exe, его даже видно в task list. Ни у кого нет подозрений. При этом порты он никакие не открывает, но раз в 30 минут принимает почту с определенного акаунта, который в нем прописан. Если почта есть, он проверяет ее принадлежность к вам, если принадлежность обнаруживается, то он исполняет команды, которые вы там укажите. Например, запустить фтп-сервер или скачать программу из сети и ее запустить. Или удалиться. Или закачать лог-файл на фтп-сервер. ВСЕ что угодно. ВСЕ, что вы сами встроите в свой backdoor.
  2. Небольшая программа (30-60 кб) при запуске соединяется с прописанным в ней фтп-сервером, скачивает с него некую модифицированную программу (например, internat.exe - переключение кодировки) с встроенным троянцем. При перезагрузке соединяется со специальным сервером, который вы запускайте на какой-нить unix-машине, и ждет команд от него, а вы уже на тот сервер посылайте свои команды, при этом на машине жертвы никак не узнают именно ваш ip-адрес. Поэтому вычислить вам будет крайне тяжело, только через промежуточный сервер. А если промежуточный сервер запускать на каком-нибудь сервере, который не играет для вас никакой роли (например, взломанный shell-box), то вы в любой момент сможете удалить всю информацию на нем.
  3. Небольшая программа (60 кб) при запуске соединяется с прописанным в ней фтп-сервером, скачивает с него полный комплект модифицированных программ, которые заменяют все стандартные утилиты (wordpad, internat, notepad, calc, image, write, explorer, iexplorer, scandisk, solitair). При этом даже если кто-либо обнаружить, что-то в вашей одной программе и заменить ее, то будут работать другие. Желательно, чтобы в каждой из них был разный принцип работы (один через unix-box, другие через е-маил, третьи напрямую и т.д.). При этом, когда начинает работать другой, они вам слали е-маил с извещением, каким образом ведет себя пользователь и какие программы он запускает. При этом можно пойти дальше и заразить dll системы. В которых при вызове любой функции, выполнялись и ваши функции тоже.


  Еще очень полезная вещь: как вы заметили, чтобы в windows просмотреть список, текущий соединений, нужно запустить netstat.exe. Но я вам напомню, что эта программа всего лишь спрашивает у winsock, кто куда соединяется, а значит можно написать свою программу, которая спрашивала бы все соединения, а показывала все, кроме ваших.

Последовательный взлом.

  Что делает человек, когда он хочет взломать много серверов? Он запускает сканнер, который ищет дыры и проверяет все сервера. Что он делает, когда хочет поломать один сервер? Он запускает тот же сканнер и проверяет только этот сервер.
  Вы наверно слышали выражение, что взломать можно что угодно. Так вот, оно верное, если следовать из того, что человек является самой опасной дырой в системе. А сервер может быть вообще без дыр.
  Если некий человек имеет доступ к тому серверу, который нам требуется взломать, то он обязательно как-то получает к нему доступ. И в 99% случаев это комбинация имени пользователя и пароля. И когда ему надо удаленно получить доступ к этому серверу, то он вводит этот пароль на свой машине. По логике вещей можно догадаться, что эта машина является на основе Windows 9x/NT. Тут-то как раз и вспоминаем, что все Windows 9x не обладают безопасностью. Или даже если на машине жертвы стоит unix, то скорей всего он не так защищен как сервер. В любом случаи, легче взломать его машине, чем ломать сервер. Ведь наверняка, даже если на сервере регулярно смотрят лог-файлы попыток взлома, то кто этим будет заниматься на локально машине с Windows.

  Есть некая компания, где установлено 200 компьютеров, 2 сервера на основе Unix, и два сервера WinNT. По виду работы этой компании все пользовательские компьютеры подключены через локальную сеть в Internet. У всех пользователей организован вход в домен NT при включении компьютера. Прослеживаем такую ситуацию: злоумышленник разговаривает по icq с один из пользователей и "дарит" ему некую хорошую программу, которую пользователь запускает. Злоумышленник получает доступ к этой машине. Легкими средствами получает все пароли. От почтового ящика на одном из Unix это компании, пароль входа в сеть на NT. И к тому же мы получили доступ в локальную сеть. Мы уже из этого локального компьютера можем попытаться получить доступ к NT. Путем перехвата smb-сообщений, куда может входить пароль администратора. Путем brute-force атаки, которая будет происходить быстро из-за того, что это LAN, а не WAN. И т.д. После того, как он получить доступ к NT. Наверняка там он найдет один из паролей на unix, из тех, кто имеет доступ туда логиниться. Или же, если там он не найдет, у него будет больше шансов их получить, так как он получить доступ ко всем локальным паролям, которые можно попытаться взломать. И админы в любом случаи больше доверяют серверу NT, чем рабочим станция и могут логиниться с NT в Unix. Тут-то и можно перехватить их пароль.

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

Заключение.

  Вот наверно все, что я вам хотел сказать. Используйте социальную инженерию, HDoS, пишите профессиональные программы, и ломайте последовательно.
  Удачи.
  И единственное, что я хочу - если вы распространяете эту статью, то, пожалуйста, сохраните ее целиком и полностью, не изменяйте. Не убирайте даже эту ссылку на чертов баннер, который приносит мне то, что вы могли бы мне принести - благодарность за эту черную работу, обучать людей.



Принимаю заказы на настройку серверов, mikrotik и других роутеров, точек доступа, nginx и т.п. В пределах Санкт-Петербурга возможен выезд к заказчику. См. контакты.


Последние комментарии