СЕРГЕЙ БОРИСОВ
Как защититься от fingerprinting?
Чаще всего хакерская атака начинается с fingerprinting – сбора информации о точной версии операционной системы и публичных сервисов. Приняв меры для противодействия удалённому снятию отпечатков системы, вы сможете остановить большинство атак на свою систему на самом ранем этапе.
Чтобы определить версии операционной системы или прикладных сервисов, последователи Кевина Митника предпочли бы позвонить системному администратору и выяснить все подробности по телефону. Остальные же будут проводить исследование особенностей реализации стека TCP/IP и других протоколов в удаленной операционной системе.
Кроме того, fingerprinting используется при сборе какой- либо статистической информации. В системах обнаружения атак он позволяет определить ОС атакующего или даже однозначно выделить его из общей массы (так же, как отпечатки пальцев позволяют идентифицировать преступника).
От чего защищаться?
Посмотрим, что выдает версию операционной системы и публичных сервисов, и узнаем, от чего нам защищаться. В fingerprinting используются следующие методы:
- Сбор баннеров и ручной анализ системы.
- Активное исследование реализации протоколов.
- Пассивное исследование реализации протоколов.
- Исследование некоторых технических характеристик системы.
Сбор баннеров
Это один из классических методов fingerprinting. Он заключается в опросе открытых в системе сервисов и анализа возвращаемых ими стандартных приглашений (баннеров). Помимо этого сервисы иногда предоставляют дополнительную возможность для определения версии ОС.
Так, например, ftp-сервис может позволить выполнение команды SYST, которая выдает версию операционной системы. Заголовок веб-сервера можно получить командой:
# echo ‘GET / HTTP/1.0 ’ | nc securitylab.ru 80 | grep ‘^Server:’
Server: Apache/2.0.52 (Unix) |
Активное исследование реализаций протоколов
Это контрольный набор тестов, проводимых над удаленной системой. Нас будут интересовать в первую очередь те протоколы, реализация которых имеет свои особенности у каждого производителя. К ним можно отнести протоколы стека TCP/IP, SNMP, HTTP, Telnet, FTP. Таким образом, достаточно подобрать хороший набор тестов, в которых различные системы ведут себя по-разному.
Fingerprinting стека протоколов TCP/IP-серверов
Сетевой стек в разных операционных системах различается по нескольким параметрам, и для каждого из них есть технология получения отличий.
Часть возможных исследований, в результатах которых есть различия, приведена в таблице 1.
Таблица 1. Результаты исследования стека TCP/IP Windows, Linux и FreeBSD
|
FreeBSD
|
Windows Server 2003
|
Linux 2.2.X
|
Начальное значение TCP window
|
8192 байт
|
17520 байт
|
32120 байт
|
Начальное значение IP TTL
|
64
|
128
|
64
|
Значение АСК в ответе на FIN, PSH, URG-пакет
|
Равно значению SEQ в пришедшем пакете
|
Равно значению SEQ+1 в пришедшем пакете
|
Равно значению SEQ в пришедшем пакете
|
Размер ICMP эхо-ответа
|
56 байт
|
176 байт
|
356 байт
|
Значение ICMP TOC
|
0
|
0
|
1
|
Порядок TCP Options
|
«MSS NOP WSCALE NOP NOP TIMESTAMP»
|
«MSS NOP WSCALE NOP NOP TIMESTAMP NOP NOP SACK»
|
«MSS SACK TIMESTAMP NOP SCALE»
|
Количество повторных ответов на SYN-запрос
|
3
|
2
|
2
|
Базовая модель стека TCP
|
NewReno
|
TahoeNoFR плюс SACK
|
NewReno
|
Этого вполне достаточно, чтобы легко распознать эти системы. Кроме этого можно проводить исследования:
- значения поля ACK в TCP-заголовке в ответах на нестандартные запросы;
- закона изменения ISN сервера;
- флага DontFragment в IP-заголовке;
- ICMP-заголовка эхо-ответа;
- время отсылки повторных пакетов в реализации TCP;
- модели протокола TCP (TCP-reno, TCP-Vegas, TCP-Tahoe, TCP-newreno, TCP-SACK), которые по-разному реагируют на ухудшение пропускной способности канала, появление частых ошибок и пропадание связи.
Fingerprinting публичных сервисов
Большинство публичных сервисов или служб используют достаточно сложные протоколы, которые подвержены снятию отпечатков (SMTP, IMAP, Telnet, FTP, HTTP, LPD, IKE, SNMP). Отправка большого количества нестандартных или неправильных команд позволяет определить как версию публичного сервиса на сервере, так и операционную систему. Подробности об активном fingerprinting вы можете найти в [1, 2].
Пассивное исследование реализаций протоколов
Это анализ проходящего через систему сетевого трафика с выделением некоторых ключевых параметров. Этот метод, как и предыдущий, основывается на особенностях реализации протоколов в различных системах. Только вот зачастую приходится довольствоваться меньшей точностью.
Идея пассивного fingerprinting заключается в анализе информации, доступной без непосредственного воздействия на исследуемую систему. Чаще всего он применяется во внутренней сети организации, когда мы имеем непосредственный доступ к нормальному рабочему трафику. Это одно из первых действий при моделировании внутреннего нарушителя для обнаружения слабостей политики безопасности внутренней сети. Примеры пассивного fingerprinting можно посмотреть по ссылкам [3, 4, 5].
Исследование технических характеристик системы
Это анализ таких отличительных характеристик, как время работы сервера с момента последней перезагрузки, отклонение таймера системных часов, серийные номера физических частей сервера (например, MAC-адрес сервера в том же сегменте сети). Подробнее об этом: http://www.caida.org/outreach/papers/2005/fingerprinting.
Возможность исследования технических характеристик системы может быть полезна в первую очередь как косвенная улика при инцидентах безопасности.
Итак, мы разобрали, почему возможен fingerprinting операционной системы и публичных сервисов, теперь рассмотрим, как с ним бороться.
Способы защиты от fingerprinting
В идеале необходимо внедрять защиту от fingerprinting как комплексную меру как на уровне сети, операционных систем и приложений, а также и на уровне процедур безопасности. Тем не менее защита даже на одном уровне (например, настройка межсетевого экрана) принесет свои плоды и не позволит определить версию ОС или публичного сервиса первой попавшейся утилитой.
Внедрение в концепцию безопасности на верхнем уровне
В политике безопасности необходимо обозначить отношение организации к тайне программного обеспечения. Информацию о версии операционной системы, версии публичного сервиса или другого установленного на сервере программного обеспечения необходимо отнести к категории коммерческой или конфиденциальной. Необходимо изложить требования к организации процесса защиты от сетевой разведки, в каких процедурах описан этот процесс и кто ответственен за реализацию процедур, какая предусмотрена отчетность.
Внедрение в процедуры и инструкции на нижнем уровне
Необходимо ввести специальную процедуру, например, защиты от сетевой разведки. В ней указываются:
- цели, которые преследует организация, внедряя этот документ, – например, недопущение утечки информации ограниченного распространения;
- условия, которые необходимы для выполнения целей, – например, наличие демилитаризованной зоны, фильтрация трафика, защита от НСД к архиву эталонного программного обеспечения;
- различные профили защиты – например, публичный сервис, локальный сервис, критический сервис;
- разделение обязанностей сотрудников – например, администратор сети отвечает за реализацию процедуры на уровне компьютерной сети, администратор серверов – за реализацию процедуры на уровне системы, администратор информационной безопасности – за контроль и оценку достаточности выполненных мероприятий;
- порядок проверки эффективности и процедуры – например, тестирование с использованием методов, описанных в статье, как извне, так и внутри организации, и порядок пересмотра процедуры;
- ответственность сотрудников – например, хранителя архивов эталонного программного обеспечения, за неразглашение информации, администраторов – за своевременность мероприятий.
Помимо этого в инструкции по организации безопасности серверов и компьютерной сети необходимо внести соответствующие пункты о защите от сетевой разведки.
Практическая реализация на уровне сети
Грамотная топология сети – это самая эффективная контрмера удаленному исследованию систем.
Первая возможная мера – фильтрация трафика с использованием межсетевого экрана. Лучше всего оставить открытым доступ только к одному порту публичного сервиса, фильтровать нестандартные сетевые запросы, icmp-трафик. Используя межсетевой экран, можно подменять часть трафика на уровне приложений. Возможна замена приветственных баннеров и ответов при ошибке на универсальные и отражающие корпоративную политику в целом. Это будет альтернативой изменению настроек на каждом сервере.
Выделение демилитаризованной зоны, четкое разделение внутренних и внешних сервисов – эти механизмы помимо своих основных задач увеличивают защищенность от fingerprinting.
Размещение двух публичных сервисов на одном сервере приводит к резкому повышению вероятности определения версии системы. Если по каким-то причинам невозможно от этого отказаться, тогда можно разместить сервисы в различных виртуальных машинах (jail) или с помощью настройки NAT межсетевого экрана связать один внутренний IP-адрес c несколькими внешними IP-адресами, по одному на каждый сервис. Тогда внешнему исследователю будет казаться, что приложения запущены на разных серверах.
Сегментация трафика, активный поиск слушающих устройств, рассылка ложных пакетов (с поддельными заголовками) в локальной сети уменьшают опасность пассивного fingerprinting.
Приведу несколько примеров части конфигурации различных межсетевых экранов, которая поможет реализовать защиту от fingerprinting.
Пример 1. Конфигурация межсетевого экрана IPFW (для ОС семейства *BSD)
# Отбрасываем пакеты с нестандартными IP-опциями
/sbin/ipfw add deny log all from any to 195.195.195.1 in via xl0 ipoptions ssrr
/sbin/ipfw add deny log all from any to 195.195.195.1 in via xl0 ipoptions lsrr
/sbin/ipfw add deny log all from any to 195.195.195.1 in via xl0 ipoptions rr
# Запрещаем пакеты с Timestampf
#/sbin/ipfw add deny log all from any to 195.195.195.1 in via xl0 ipoptions ts
# Запрещаем пакеты с некорректными TCP-флагами.
# NULL-пакеты – второй тест nmap
/sbin/ipfw add deny log tcp from any to 195.195.195.1 in via xl0 tcpflags !syn,!ack,!rst
# XMAS-пакеты – третий тест nmap
/sbin/ipfw add deny log tcp from any to 195.195.195.1 in via xl0 tcpflags syn,fin,urg,psh,!ack
/sbin/ipfw add deny log tcp from any to 195.195.195.1 in via xl0 tcpflags syn,fin,!ack,
# Седьмой тест nmap
/sbin/ipfw add deny log tcp from any to 195.195.195.1 in via xl0 tcpflags fin,urg,psh,!ack
/sbin/ipfw add deny log tcp from any to 195.195.195.1 in via xl0 tcpflags fin,!ack
/sbin/ipfw add deny log tcp from any to 195.195.195.1 in via xl0 tcpflags urg,!ack
/sbin/ipfw add deny log tcp from any to 195.195.195.1 in via xl0 tcpflags psh,!ack
# Разрешаем ICMP-пакеты, только echo и echo_replay
/sbin/ipfw add allow icmp from any to 195.195.195.1 icmptypes 8 via xl0
/sbin/ipfw add allow icmp from any to 195.195.195.1 icmptypes 0 via xl0
/sbin/ipfw add deny log icmp from any to any via xl0
# Можно различным образом блокировать закрытые порты
# При запросе на закрытый порт можно просто отбрасывать пакеты
/sbin/ipfw add deny tcp from any to 195.195.195.195 136-139 in via rl0
# Можно отправлять в ответ tcp rst или icmp host unreachable на запросы к закрытым TCP- и UDP-портам,
# но такие ответы убыстряют сканирование и демаскируют межсетевой экран
/sbin/ipfw add reject udp from any to any in via rl0
/sbin/ipfw add reset tcp from 195.195.195.195 to any 136-139 in via rl0
# Разрешаем только корректные пакеты на порты публичных сервисов
/sbin/ipfw add pass tcp from any to 195.195.195.1 25 in via xl0 tcpflags syn,!ack,!psh,!fin,!urg,!rst
/sbin/ipfw add pass tcp from any to 195.195.195.1 25 in via xl0 tcpflags ack,!syn,!psh,!fin,!urg,!rst
/sbin/ipfw add pass tcp from any to 195.195.195.1 25 in via xl0 tcpflags ack,psh,!syn,!fin,!urg,!rst
/sbin/ipfw add pass tcp from any to 195.195.195.1 25 in via xl0 tcpflags ack,fin,!syn,!psh,!urg,!rst
Пример 2. Конфигурация межсетевого экрана IP-Filter (для ОС семейства *NIX)
Редактируем файл ipf.rules:
# IP options
block in log level local3.info quick on xl0 from any to 195.195.195.1 with opt ssrr
block in log level local3.info quick on xl0 from any to 195.195.195.1 with opt lsrr
block in log level local3.info quick on xl0 from any to 195.195.195.1 with opt rr
# TCP flags
block in log level local3.info quick proto tcp from any to 195.195.195.1 flags SF/SF
block in log level local3.info quick proto tcp from any to 195.195.195.1 flags SFUP/SFUP
block in log level local3.info quick proto tcp from any to 195.195.195.1 flags FPU/FPU
block in log level local3.info quick proto tcp from any to 195.195.195.1 flags F/F
block in log level local3.info quick proto tcp from any to 195.195.195.1 flags U/U
block in log level local3.info quick proto tcp from any to 195.195.195.1 flags P/P
# Разрешенные icmp types
pass in quick on xl0 proto icmp from any to 195.195.195.1 icmp-type echo
pass in quick on xl0 proto icmp from any to 195.195.195.1 icmp-type echorep
pass out quick on xl0 proto icmp from 195.195.195.1 to any icmp-type echorep
pass out quick on xl0 proto icmp from 195.195.195.1 to any icmp-type echo
block in log level local3.info quick on xl0 proto icmp from any to any
block out log level local3.info quick on xl0 proto icmp from any to any
# Реакция на закрытые порты
block in log level local3.info quick on xl0 proto tcp from any to 195.195.195.1 port = 136 >< 140
block in log level local3.info quick on xl0 proto udp from any to 195.195.195.1
# Разрешаем только правильные tcp-запросы к публичному сервису
pass in quick on xl0 proto tcp from any to 195.195.195.1 port = 25 flags S/S
pass in quick on xl0 proto tcp from any to 195.195.195.1 port = 25 flags A/A
pass in quick on xl0 proto tcp from any to 195.195.195.1 port = 25 flags AP/AP
pass in quick on xl0 proto tcp from any to 195.195.195.1 port = 25 flags AF/AF
Пример 3. Конфигурация межсетевого экрана PF-FILTER (для ОС семейства *BSD)
# Нормализация трафика автоматически отфильтрует нестандартные пакеты атакующего, изменит TTL
scrub in on xl0 all fragment reassemble min-ttl 20 max-mss 1440
scrub on xl0 all reassemble tcp
# можно манипулировать IP-опциями, например, сбрасывать флаг DF в 0
scrub out on xl0 all no-df
# Фильтрация TCP-флагов
block in quick proto tcp from any to 195.195.195.1 flags SF/SFRA
block in quick proto tcp from any to 195.195.195.1 flags SFUP/SFRAU
block in quick proto tcp from any to 195.195.195.1 flags FPU/SFRAUP
block in quick proto tcp from any to 195.195.195.1 flags F/SFRA
block in quick proto tcp from any to 195.195.195.1 flags U/SFRAU
block in quick proto tcp from any to 195.195.195.1 flags P/P
# Разрешаем ICMP только echo request и echo reply
pass in quick on xl0 proto icmp from any to 195.195.195.1 icmp-type echoreq
pass in quick on xl0 proto icmp from any to 195.195.195.1 icmp-type echorep
pass out quick on xl0 proto icmp from 195.195.195.1 to any icmp-type echoreq
pass out quick on xl0 proto icmp from 195.195.195.1 to any icmp-type echorep
block in log-all quick on xl0 proto icmp from any to any
block out log-all quick on xl0 proto icmp from any to any
# Блокируем закрытые порты
block in log-all quick on xl0 proto tcp from any to 195.195.195.1 port 136 >< 140
block in log quick on xl0 proto udp from any to 195.195.195.1
# Фильтруем входящие пакеты на публичный сервис
pass in quick on xl0 proto tcp from any to 195.195.195.1 port = 25 flags S/SA synproxy state
Пример 4. Конфигурация межсетевого экрана PIX Firewall
В межсетевом экране PIX Firewall реализован механизм ASA, который отбрасывает не SYN-пакеты, которые не являются частью установленного соединения (2, 4, 6, 7 тесты NMAP), так что большая часть работы по защите от fingerprinting выполняется по умолчанию.
# Разрешаем исходящие ping
access-group 101 in interface outside
access-list 101 permit icmp any host 209.165.200.246 echo-reply
# Разрешаем входящие ping
access-list 101 permit icmp any host 209.165.200.246 echo
# Включаем анализатор протоколов приложений. Какие точно правила фильтрации использует PIX, не ясно. Но тот факт,
# что реально клиент устанавливает соединение не с сервером приложений, а с PIX затрудняет fingerprinting
fuxup protocol ftp 21
fixup protocol smtp 25
# Для фильтрации нестандартных или неправильных TCP/IP-пакетов PIX использует встроенную IDS
# с фиксированным набором сигнатур
ip audit name fingeraudit atack action alarm drop
ip audit name fingeraudit info action alarm drop
# Выберем только те сигнатуры, которые имеют отношение к fingerprinting
# Нужные нам сигнатуры:
# ID Название Тип
400000 1000 IP options-Bad option list Informational
400002 1002 IP options-Timestamp Informational
400007 1100 IP Fragment Attack Attack
400008 1101 IP Unknown IP Protocol Attack
1102 Impossible IP Packet Attack
400009 1103 IP Fragments Overlap Attack
400023 2150 Fragmented ICMP Traffic Attack
400026 3040 TCP NULL flags Attack
400027 3041 TCP SYN+FIN flags Attack
400028 3042 TCP FIN only flags Attack
# Остальные сигнатуры можно исключить из политики
no ip audit name fingeraudit signature sigN
ip audit interface outside fingeraudit
Остальные межсетевые экраны можно сконфигурировать соответствующим образом.
Практическая реализация на уровне системы
В зависимости от выбранной стратегии, возможно скрыть часть параметров системы, усложнив тем самым вероятность обнаружения версии системы, или изменить некоторые параметры системы так, чтобы ввести атакующего в заблуждение. В различных публичных сервисах необходимо изменить их демаскирующие признаки.
Изменение параметров стека TCP/IP операционных систем
Так, в Windows мы можем менять следующие параметры стека TCP/IP в разделах реестра HKEY_LOCAL_MACHINE\SYSTEM\Current ControlSet\Services\Tcpip\Parameters и HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Servi-ces\Tcpip\Parameters\Interfaces\ID of Adapter:
- KeepAliveInterval – время ожидания перед повторной отправкой пакета, если на предыдущий ответ не получен.
- MTU – максимальный размер пакета, который передается через сеть.
- TcpMaxConnectRetransmissions – количество повторных отсылок SYN-пакета, на который не получен ответ при установке соединения.
- TcpMaxDataRetransmissions – количество повторных отсылок остальных пакетов, на которые не получен ответ.
- TcpWindowSize – максимальный размер окна TCP-соединения, в байтах.
- DefaultTTL – определяет значение TTL по умолчанию в заголовках IP-пакета.
- Tcp1323Opts=1 – изменять значения TCP window и timestamps в соответствии с RFC 1323.
Операционные системы семейства UNIX позволяют изменять стек TCP/IP гораздо более гибко.
В системе FreeBSD добавим следующие опции в конфигурацию ядра:
# Параметр ID в заголовке IP-пакета генерируется случайно
Options random_ip_id
# Отбрасываются пакеты с флагами syn+fin
Options tcp_drop_synfin
Options icmp_bandlim # Включаем контроль над ICMP
После этого необходимо пересобрать ядро и перезагрузить систему. Теперь можно производить настройки на ходу:
# Определяем реакцию системы при получении пакета на закрытый TCP-порт
sysctl net.inet.tcp.blackhole=2
# Определяем реакцию системы при получении пакета на закрытый UDP-порт
sysctl net.inet.udp.blackhole=1
# Определяем размер окна TCP-соединения
sysctl net.inet.tcp.sendspace=64395
sysctl net.inet.tcp.recvspace=64395
# Определяем TTL в заголовке IP-пакета
sysctl net.inet.ip.ttl=128
sysctl net.inet.tcp.drop_synfin=1
# Указываем ОС изменять параметры window и timestamps в соответствии с RFC 1323.
sysctl net.inet.tcp.rfc1323=1
Или мы можем закрепить эти параметры в файле /etc/sysctl.conf.
В операционной системе Linux в конфигурацию ядра добавим опции CONFIG_PROC_FS и CONFIG_SYSCTL, которые позволяют менять элементы /proc без перезагрузки системы или перекомпиляции ядра.
# Запрет ICMP echo (ping):
echo “1” > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo “1” > /proc/sys/net/ipv4/icmp_echo_ignore_all
# Изменяем IP TTL по умолчанию
echo “128” > /proc/sys/net/ipv4/ip_default_ttl
# Скорость генерации ICMP пакетов (по умолчанию 100)
echo “70” > /proc/sys/net/ipv4/icmp_ratelimit
# Количество повторных отсылок пакетов, на которые не получен ответ
echo “5” > /proc/sys/net/ipv4/tcp_synack_retries
echo “5” > /proc/sys/net/ipv4/tcp_syn_retries 5
# Устанавливаем стандартный размер TCP window
echo “64395” > /proc/sys/net/core/rmem_default
echo “64395” > /proc/sys/net/core/wmem_default
# Изменять параметры TCP window и timespamp в соответствии с 1323.
echo “1” > /proc/sys/net/ipv4/tcp_window_scaling
echo “1” > /proc/sys/net/ipv4/tcp_timestamps
# Разрешить использование SACK в соответствии с RFC2018 (SACK будет добавляться в tcp options)
Echo “1” > /proc/sys/net/ipv4/tcp_sack
Продукты, которые реализуют защиту системы от fingerprinting на уровне операционной системы:
- FingerPrintFucker
- IP Personality
- Morth
В операционной системе Solaris изменять параметры TCP/IP можно утилитой /usr/sbin/ndd. Изменения вступают в силу только после перезагрузки системы.
# Изменяем стандартное значение maximux segmet size.
ndd -set /dev/tcp tcp_mss_def 546
# Отключим «path MTU discovery» и система перестанет ставить бит «don’t fragment»
ndd -set /dev/ip ip_path_mtu_discovery 0
# Устанавливаем закон генерации ISN действительно случайным образом.
ndd -set /dev/tcp tcp_strong_iss 2
# Изменяем стандартное значение tcp window size
ndd -set /dev/tcp tcp_xmit_hiwat 64395
ndd -set /dev/tcp tcp_recv_hiwat 64395
# Изменяем стандартное время жизни пакета (TTL)
ndd -set /dev/tcp tcp_ip_ttl 128
Защита от fingerprinting публичных сервисов на верхнем уровне
Для маскировки приложений можно произвести изменение конфигурации, изменение исходников или установить специальное ПО, которое будет фильтровать сетевой трафик на уровне приложения.
Защита от HTTP fingerprinting:
- Замена стандартных баннеров.
- Фильтрация или преобразование заголовков HTTP.
- Настройка кодов ошибок, таких как 404 или 500.
- Использование дополнительного ПО. Для веб-сервера IIS есть продукт ServerMask, который позволяет настроить три вышеописанных способа защиты. Он имеет профили для маскировки под различные сервера.
Для веб-сервера APACHE перед компиляцией в src/include/httpd.h находим строки:
# define SERVER_BASEPRODUCT “Apache”
# define SERVER_BASEREVISION “X.X.X”
Вместо него напишем (выдаем за ОС Windows + IIS)
# define SERVER_BASEPRODUCT “Microsoft-IIS”
# define SERVER_BASEREVISION “5.0”
Дополнительно проверим, что в http.conf есть:
# IIS не ставит подпись в рапортах об ошибках
ServerSignature Off
# Для того чтобы выдавать только ту информацию, которую мы изменили
ServerTokens Min
Защита от SMTP fingerprinting:
- Фильтрация заголовков исходящей почты защитит пользовательские почтовые программы и серверные почтовые приложения, расположенные во внутренней сети организации от ID fingerprinting.
На внешнем почтовом сервере Sendmail, можно использовать опции:
MASQUERADE_AS(mail.somedomain.com)
MASQUERADE_DOMAIN(mailoffice.somedomain.com)
чтобы заголовки почтовых сообщений из вашей локальной сети перезаписывались заново так, как будто они посылаются непосредственно с почтового сервера mail.somedomain.com.
Для почтового сервера QMAIL есть фильтр qmail-masq, который позволяет изменять заголовки исходящих писем, подменяя внутренние адреса внешним.
Для организаций, которые предоставляют почтовые услуги сторонним организациям или пользователям, необходимы более сложные фильтры, изменяющие лишь ту часть заголовка почтового письма, где есть информация о внутренних почтовых ретрансляторах (relay).
- Замена стандартных баннеров, кодов и ответов ошибок возможна путем изменения соответствующих конфигурационных файлов. Это позволяет защитить от fingerprinting внешний почтовый сервер.
Например, в Windows 2000 smtp запустить metaedit.exe, выбрать lm\smtpsvc\<номер виртуального сервера>: «Edit new» в ID ввести 36907, в Data ввести баннер.
В Postfix редактируем /etc/postfix/main.cf:
smtpd_banner = secure SMTP server
В Sendmail редактируем sendmail.cf:
# SMTP initial login message (old $e macro)
O SmtpGreetingMessage=$j secure SMTP server; $b
В EXIM редактируем /etc/exim.conf:
smtpd_banner = secure SMTP server
В QMAIL необходимо отредактировать файл smtpgreeting, в котором хранится приветственное сообщение.
Аналогично настраиваются коды и ответы ошибок в конфигурационных файлах или в исходниках до компиляции.
Защита от исследования таймеров
Возможными контрмерами могут служить, например, методы маскирующего перекоса временной диаграммы с улучшенной генерацией случайных чисел.
Можно отключить timestamps там, где они не нужны (например, на модемном соединении).
# sysctl net.ipv4.tcp_timestamps=0
net.ipv4.tcp_timestamps = 0
Заключение
Фильтрация и модификация заголовков и другие методы защиты от fingerprinting, являются элементом «security through obscurity» (безопасности за счет незнания) и не могут использоваться в качестве основного средства защиты.
Литература и ссылки:
- http://cherepovets-city.ru/insecure/runmap/runmap-osdetect.htm.
- http://cherepovets-city.ru/insecure/runmap/runmap-versionscan.htm.
- http://www.securitylab.ru/49847.html.
- http://www.honeynet.org/papers/finger.
- http://lcamtuf.coredump.cx/p0f.shtml.
- Маскировка локальных адресов в QMail – http://www.folug.org/sviluppo/qmail-masq/qmail-masq.html.
- Параметры конфигурации TCP/IP и NBT для Windows XP – http://support.microsoft.com/kb/314053/ru.
- Сравнение трех пакетных фильтров FreeBSD 5.3 (IPFW, PF, IPFILTER) – http://www.opennet.ru/docs/RUS/ipfw_pf_ipfilter/index.html.
- «CP tuning cookbook.
- Кейт Е. Страссберг. Полный справочник по брандмауэрам.: Пер. с англ. – М.: Издательский дом «Вильямс», 2004 г.