Шрифт:
stunnel -с -d 1055 -r В:999
Опция – с указывает на работу в режиме клиента, все данные, полученные в открытом виде на порт 1055, передаются в шифрованном виде на порт 999 на хосте Б. После проделанных манипуляций можно устанавливать telnet-соединение с компьютером Б. Команда запуска telnet на компьютере А будет выглядеть следующим образом:
telnet localhost 1055
Несколько непривычно, зато трафик полностью шифруется. Точно по такому же принципу организовывается шифрованный туннель и для других сетевых протоколов. Stunnel и приложения, поддерживающие SSL
Достаточно часто возникает ситуация, когда одно из приложений поддерживает протокол SSL, а приложение с другой стороны не поддерживает протокол SSL. В этом случае Stunnel можно запускать только с одной стороны – там, где приложение не способно поддерживать протокол SSL. Но в этом случае возникает проблема – какие порты используются приложением, поддерживающим протокол SSL.
Существует официальный список SSL-портов, который приведен ниже:https 443/tcp # http protocol over TLS/SSL
smtps 465/tcp # smtp protocol over TLS/SSL (was ssmtp)
nntps 563/tcp # nntp protocol over TLS/SSL (was snntp)
imap4-ssl 585/tcp # IMAP4+SSL (use 993 instead)
sshell 614/tcp # SSLshell
ldaps 636/tcp # ldap protocol over TLS/SSL (was sldap)
ftps-data 989/tcp # ftp protocol, data, over TLS/SSL
ftps 990/tcp # ftp protocol, control, over TLS/SSL
telnets 992/tcp # telnet protocol over TLS/SSL
imaps 993/tcp # imap4 protocol over TLS/SSL
ires 994/tcp # ire protocol over TLS/SSL
pop3s 995/tcp # pop3 protocol over TLS/SSL (was spop3)
СертификатыПрограмма Stunnel имеет возможность проверки подлинности сертификатов тех хостов, к которым или с которых идет подключение. Для этого предназначена опция командной строки – v. После -v необходимо указать уровень проверки сертификата. Он может иметь следующие значения:
• 0 – никакой проверки наличия и подлинности сертификата не производится;
• 1 – сертификат проверяется на подлинность, если присутствует. Если сертификат не является подлинным – соединение не устанавливается;
• 2 – проверяется присутствие сертификата и его подлинность. Если сертификат отсутствует или не является подлинным – соединение не устанавливается;
• 3 – проверяется присутствие сертификата и его наличие в списке проверенных сертификатов. Если сертификат отсутствует или его нет в списке проверенных сертификатов – соединение не устанавливается.
Сертификат создается при сборке пакета и помещается вместе с секретным ключом, используемым при расшифровке входящего трафика, в файл stunnel.pem.
Более полную информацию по этому программному обеспечению смотрите в документации, идущей в комплекте с Stunnel.
Утилиты сканирования и защиты сети
Утилиты сканирования – это класс программного обеспечения, предназначенный для нахождения уязвимостей в конфигурации компьютера или сети. Они могут быть использованы и как средство для улучшения безопасности системы, и как инструмент для взлома системы.
SATAN
Одна из старейших утилит сканирования. Говорят, что автора этого пакета уволили из фирмы, где он работал, из-за того, что он выложил SATAN на свой Web-сайт.
SATAN может работать на нескольких операционных системах. Считается устаревшим, но тем не менее для проверки правильности основных сетевых настроек вполне пригоден. Работает от пользователя root, требует наличия Perl.
После запуска SATAN становится Web-сервером и запускает браузер Netscape, поскольку интерфейс у него – Web-ориентированный. Для начала сканирования необходимо указать сканируемый хост или диапазон адресов и "уровень нападения", который может быть слабым, нормальным и тяжелым. После этого кнопкой Start the scan запускается сканирование.
По окончании сканирования необходимо перейти в раздел Reporting & Data Analysis. В этом разделе можно ознакомиться с найденными проблемами, которые необходимо устранить.
Portsentry
Еще один программный продукт, предназначенный для обнаружения сканирования сетевых портов. Основные возможности программы Portsentry:
• обнаруживает практически все известные виды сканирования компьютеров;
• в реальном времени блокирует компьютер, производящий сканирование, посредством установленного на атакуемом компьютере брандмауэра, команду запуска которого можно задать в файле конфигурации;
• записывает в журнал операционной системы посредством syslogd информацию об атаке;
• может вызывать любую указанную в файле конфигурации программу, в ответ на сканирование или подключение к защищенному сетевому порту.
Установка и настройкаПроцесс установки подробно описан в документации на программу и не вызывает трудностей, поэтому сразу перейдем к настройке программы.
Основной конфигурационный файл программы Portsentry называется portsentry.conf. Содержимое файла portsentry.conf представляет собой несколько строк, каждая из которых имеет вид:ОПЦИЯ = «значение»
Ниже приведен список основных поддерживаемых опций:
• TCP_PORTS – в этой опции через запятую перечисляются ТСР-порты, которые проверяются программой Portsentry. При обнаружении подключения к перечисленным портам Portsentry записывает информацию об этом в системный журнал и выполняет команду, заданную пользователем, а после этого блокирует хост посредством брандмауэра. ТСР-порты, открытые на защищаемом компьютере другими программами, в этот список включаться не должны;
• UDP_PORTS – то же, что и tcp_ports, но для UDP-портов;
• ADVANCED_PORTS_TCP – значение этой опции определяет верхнюю границу множества TCP-портов, которые проверяются Portsentry при работе в режиме Advanced Stealth Scan Detection Mode. Нижней границей является 1, т. е. при значении advanced_ports_tcp, равном 2048, проверяется подключение к любому порту в промежутке от 1 до 2048;
• ADVANCED_PORTS_UDP – то же, что и advanced_portsjtcp, но для UDP-портов;
• ADVANCED_EXCLUDE_TCP – TCP-порты, которые исключаются из промежутка проверяемых портов, заданного параметром advanced_portsjtcp. Здесь обязательно нужно перечислить ТСР-порты, открытые работающими на защищаемом компьютере программами;
• ADVANCED_EXCLUDE_UDP – то же, что и advanced_exclude_tcp, но для UDP-портов;
• IGNORE_FILE – имя и путь к файлу с IP-адресами хостов, которые не блокируются при подключении к портам, проверяемым программой Portsentry;
• HISTORY_FILE – имя и путь к файлу с историей работы программы Portsentry. В файл записывается время блокирования, имя и IP хоста, атакованный порт, протокол;
• BLOCKED_FILE – строка, из которой формируется имя и путь к файлам, куда записывается информация о блокированных хостах;
• BLOCK_TCP – эта опция в зависимости от значения задает ответную реакцию Portsentry на сканирование портов:
– 0 – не блокировать хост, не запускать заданную пользователем команду;
– 1 – блокировать хост и запустить команду;
– 2 – только запустить заданную команду.
Команда задается при помощи опции KILL_RUN_CMD;
• BLOCK_UDP – то же, что и BLOCK_TCP, но для UDP;
• KILL_ROUTE – эта опция задает команду, которую надо выполнить для блокирования атакующего хоста. Для указания IP-адреса используется переменная $target$. Переменная $port$ используется для указания порта, к которому было подключение;
• KILL_HOSTS_DENY – эти опция задает строку, которая записывается в /etc/hosts.deny для блокирования доступа к сервисам, запускаемым через inetd;
• KILL_RUN_CMD – с помощью этой опции можно задать команду, запускаемую до блокирования хоста;
• SCAN_TRIGGER – данная опция задает количество разрешенных подключений к проверяемым программой Portsentry портам одного и того же хоста, прежде чем Portsentry начнет действовать. О определяет немедленную реакцию;
• PORT_BANNER – задает сообщение, которое будет выводиться при подключении к проверяемому Portsentry порту.
В файле portsentry.ignore необходимо перечислить IP-адреса компьютеров, которые не должны быть блокированы программой при подключении к проверяемому порту.
ЗапускPortsentry можно запускать в трех различных режимах. Режимы задаются в командной строке при вызове Portsentry. Одновременно можно задать только один режим работы для одного протокола:
• Classic – при работе в этом режиме Portsentry открывает порты, указанные в tcp_ports или udp_ports, и ждет соединения. При попытке подключиться к такому порту происходит блокировка удаленного хоста. Этот режим работы задается опциями командной строки -tcp – для ТСР-портов и – udp – для UDP-портов;
• Enhanced Stealth Scan Detection – этот режим используется для проверки перечисленных в tcp_ports или udp_ports портов на предмет подключения или сканирования. Выявляет почти все виды Stealth-сканирования, а не только сканирование подключением. В отличие от режима Classic, не держит открытыми порты, поэтому сканировщик получает достоверную информацию об открытых портах. Задается опциями командной строки -step – для TCP-портов и -sudp – для UDP-портов;
• Advanced Stealth Scan Detection – этот режим используется для проверки всех портов в промежутке от 1 до advance d_port_tcp или advanced_port_udр. Порты, открытые другими программами и перечисленные в advanced_exlude_tcp или advanced_exclude_udp, исключаются из проверки. Любой компьютер, попытавшийся подключиться к порту в этом промежутке, тут же блокируется. Задается опциями командной строки – atcp – для TCP-портов и -audp – для UDP-портов.
Сетевая статистика
Очень часто администратору необходимо получить развернутую информацию по сетевому трафику – кто, когда, сколько и по какому протоколу отправлял/принимал информацию. Конечно, все это можно получить из различных log-файлов, однако незачем тратить время на изготовление анализаторов log-файлов, когда уже есть готовые программные решения.
NeTraMet
Этот программный пакет позволяет подсчитывать трафик по IP-адресам в локальной сети раздельно по типам трафика: SMTP, ICMP, HTTP, FTP, UDP, TCP и т. п. Также существует возможность подробного регистрирования трафика.
Программный пакет состоит из:
• NeTraMet – программы-сборщика трафика. Собирает и хранит в оперативной памяти статистику с сетевых интерфейсов сервера;
• NeMaC – программы-менеджера сборщика NeTraMet. NeMaC собирает статистику и записывает ее в журнал;
• srl – компилятора правил для NeMaC;
• fd_filter – программы обработки журналов NeMaC;
• fd_extract – программы обработки результатов fd_filter.
Ключи запуска NeTraMetПрограмма запускается со следующими ключами:
• -i network_interface – определяет сетевой интерфейс, трафик которого будет считать NeTraMet;
• -l – предписывает использовать размер пакета из заголовка, а не аппаратный размер;
• -m 614 – определяет UDP-порт, на котором будет соединяться NeTraMet с NeMaC;
• -r password_for_read – устанавливает пароль на чтение;
• -w password_for_write_and_read – устанавливает пароль на чтение/ запись;
• -f 60000 – определяет максимальное количество сетевых потоков в NeTraMet. Чем больше клиентов, трафика и степень детализации статистики, тем больше сетевых потоков.
Ключи запуска NeMaCПрограмма запускается со следующими ключами:
• -k 120 – каждые 120 секунд NeMaC будет проверять – не перезагрузился ли NeTraMet;
• -F /var/ntm. iog/$DATER. flows – в этот файл записывать статистику;
• -m 614 – определяет порт для управления NeTraMet;
• -c 900 – предписывает забирать статистику с NeTraMet каждые 15 минут;
• -р – предписывает после записи в файл статистики данных закрывать его. Если файл не найден, то создается новый файл;
• -L /var/ntm. log/$DATER.nemac – журнал работы NeMaC;
• -r /root/ntm.sh/short.3.rules – файл с правилами.
Протоколирование
Нет смысла тратить много времени на защиту компьютера от взлома и не обращать внимания на систему протоколирования событий. Каким образом вы сможете узнать о попытке и способе взлома, не используя инструментов для ведения log-файлов? В этом разделе мы познакомимся со стандартной системой ведения log-файлов – демоном syslogd.
Демон syslogd является частью пакета sysklogd, в который входят две программы: syslogd и klogd. Syslogd отвечает за протоколирование сообщений системы, a klogd – ядра.
Демон syslogd
Демон syslogd запускается автоматически при старте системы и обеспечивает протоколирование событий, которое используется большинством программ. Демон syslogd пишет сообщения в файлы /var/log/* в зависимости от настроек. Обычно записи в log-файле, создаваемом syslogd, содержат следующие поля: дата и время, имя компьютера, программа, сообщение.
Параметры запускаВ табл. 27.1 приведены основные параметры командной строки демона syslogd.
Таблица 27.1. Основные параметры командной строки syslogdФайл конфигурации По умолчанию используется файл конфигурации /etc/syslog.conf. Вы можете указать другой файл конфигурации с помощью опции -f. Типичный файл конфигурации приведен ниже.
# Все сообщения ядра операционной системы выводить на консоль #kern.* /dev/console
# Все сообщения уровня info или выше протоколировать в файл
# /var/log/messages
# Кроме почтовых сообщений и сообщений аутентификации
*.info;mail.none;authpriv.none;cron.none /var/log/messages# Протоколирование аутентификации.
# Файл протокола /var/log/secure
authpriv.* /var/log/secure
# Все log-сообщения почтовой системы сохранять в файле /var/log/maillog.
mail.* /var/log/maillog# Все сообщения демона сгоп сохранять в файле /var/log/cron cron.* /var/log/cron
# Everybody gets emergency messages *.emerg *
# Сообщения системы новостей уровня crit и выше сохранять в файле
# /var/log/spooler
uucp,news.crit /var/log/spooler# Все загрузочные сообщения хранить в файле /var/log/boot.log lоса17.* /var/log/boot.log
Файл конфигурации состоит из двух полей: объект протоколирования и файл, в который будут записываться сообщения, порождаемые этим объектом. Для каждого объекта можно указать один из уровней протоколирования:
• debug – отладочная информация;
• info – просто информация;
• notice – уведомление;
• warn – предупреждение;
• err – ошибка;
• emerg – критический уровень.
Первые три уровня протоколирования относятся к информационным сообщениям. Уровень warn – это предупреждения, a err – ошибки. Помимо этого, существуют критические сообщения, которые выводятся прямо на консоль. Для обозначения объектов и для обозначения уровней протоколирования можно использовать символ *, который обозначает все объекты или все уровни.
Сетевое протоколированиеДля обеспечения повышенной защищенности сети все сообщения можно хранить не на локальном компьютере, а передавать по сети на специальный сервер, на котором будет находиться база log-файлов компьютеров, подключенных к сети.
Для передачи сообщений используется протокол UDP. Для нормального функционирования необходимо в файле /etc/service раскомментировать строку syslog 514/udp.
После этого необходимо внести изменения в файл конфигурации /etc/syslog.conf – вместо файлов протоколов используйте параметр @hostname, где hostname – это имя компьютера, на который будут перенаправлены сообщения.
Имя узла желательно указать в файле /etc/hosts, поскольку демон syslogd обычно стартует раньше, чем сервер DNS.
Демон klogd
Демон klogd предназначен для перехвата и протоколирования сообщений ядра Linux. В табл. 27.2 приведены основные параметры командной строки демона klogd.
Таблица 27.2. Основные параметры командной строки klogdПо умолчанию демон klogd вызывается системным вызовом для того, чтобы препятствовать отображению всех сообщений на консоль. Это не распространяется на критические сообщения ядра (kernel panic). Эти сообщения в любом случае будут отображены на консоли.
Защита системы после взлома
Правда, несколько странное название раздела? Как это – защита системы после взлома? Если вы помните, вопросы обеспечения безопасности компьютера в целом уже рассматривались нами в гл. 7. В этом же разделе мы остановимся на сетевой безопасности, а именно на том моменте, когда взлом уже произошел. После обнаружения факта взлома стандартным решением является отключение взломанного компьютера от сети и полная переустановка операционной системы с последующей установкой всех обновлений программного обеспечения, используемого на компьютере. А что делать, если нет возможности вывести из работы взломанный компьютер, а защитить его все равно необходимо? Именно этот случай мы и рассмотрим в этом разделе.
Взломы операционной системы бывают разные. Самый простой вариант – какой-то подросток начитался литературы или нашел в Интернете программку-взламыватель, например sendmail, применил свои псевдознания к вашей системе, пошалил – удалил что-то с вашего компьютера или, наоборот, оставил послание – "ваш компьютер взломан супер-хакером Васей" и ушел, причем, зачастую, не уничтожив следы своего воздействия на компьютер. На такой простой случай вам рассчитывать не стоит. Как правило, серьезный взлом подготавливается долгое время, и о нем вы узнаете, например, от администратора какого-нибудь сервера на другом конце земного шара, да и то потому, что от вас на его сервер идет очень большой трафик или еще по каким-либо косвенным признакам. Такой взлом преследует чисто прагматические цели – воспользоваться вашей системой для дальнейшего взлома других компьютеров, устроить на вашем сервере хранилище файлов или что-нибудь в подобном роде. Причем взломщик после себя всегда оставляет на вашем компьютере набор специальных утилит, называемых rootkit.
Rootkit
Rootkit (набор инструментов администратора) – это набор утилит, которые взломщик устанавливает на взломанном компьютере после получения первоначального доступа. Rootkit обычно содержит сетевой sniffer (утилиту, способную получать и обрабатывать весь сетевой трафик вашей локальной сети, вне зависимости от того, какому компьютеру адресованы сетевые пакеты) для прослушивания сетевого трафика, программы для модификации log-файлов, позволяющие скрыть присутствие взломщика на вашем компьютере, и специально модифицированные системные утилиты, замещающие основные утилиты системы, например ps, netstat, ifconfig, killall, login.
Основное назначение rootkit – позволить взломщику возвращаться во взломанную систему и получать доступ к ней, не будучи при этом обнаруженным системным администратором. Обычно для этого используется модифицированная версия telnetd или sshd. Модифицированный сервис будет использовать сетевой порт, отличный то того, который этот демон по умолчанию прослушивает. Большинство версий rootkit снабжены модифицированными системными программами, которые замещают существующие во взломанной системе. Конкретный набор модифицируемых системных утилит весьма зависит от версии rootkit и нужд и квалификации взломщика, но, как правило, заменяются программы ps, w, who, netstat, Is, find, login и другие, которые могут быть использованы для контроля за работой взломанной системы.
Для усложнения обнаружения подмены системных утилит большинство rootkit, производя замену системных утилит на модифицированные версии, устанавливают точно такие же даты их создания и размеры файлов, поэтому простой список файлов с датой их создания и модификации и размером никакой пользы в обнаружении подмены системных утилит не принесет. Исходя из этого, пожалуй, лучший способ обнаружения подмены системных утилит – получить контрольную сумму файлов в системе и сохранить этот список в надежном месте – на другом компьютере или на компакт-диске.
В принципе, можно воспользоваться возможностями, предоставляемыми менеджером пакетов RPM – контрольной суммой пакета, рассчитанной по алгоритму MD5. При этом RPM использует контрольные суммы пакетов, хранящиеся в базе данных установленных RPM. Как легко заметить, данный способ не подходит для обнаружения опытных взломщиков. Причин к тому две.
• В вашей системе могут быть установлены программы не из RPM, а скомпилированные из исходных кодов – совершенно очевидно, что ваш менеджер пакетов абсолютно ничего не знает о программах, устанавливаемых без помощи RPM.
• База данных RPM находится на взломанном компьютере, и взломщику не составляет труда модифицировать ее нужным образом или вообще повредить ее.
Для решения этой проблемы обычно используются специализированные программные пакеты, например Tripwire или AIDE, о которых мы поговорим несколько позже.
Помимо вышеперечисленного, некоторые rootkit содержат сетевой анализатор пакетов и утилиты для записи нажатий клавиатурных кнопок, что позволяет взломщику с целью получения необходимой информации организовать сбор паролей и анализ сетевого трафика.
Наибольшую угрозу для безопасности вашей системы представляют rootkit, использующие загружаемые модули ядра (Loadable Kernel Module, LKM), что позволяет не подменять системные утилиты, а нарушать их правильное функционирование через ядро операционной системы.Обнаружение rootkit
Мы нарисовали достаточно мрачную картину – получается, что после взлома системы сделать для ее излечения ничего не возможно? К счастью, не все так плохо.
Сначала необходимо определить сам факт взлома системы. Возможным последствием взлома вашего компьютера и установки на нем rootkit может стать изменение в поведении системных утилит. Например, некоторые утилиты отказываются запускаться от имени пользователя, которому было разрешено пользоваться этими утилитами. Или ваша любимая утилита top стала выглядеть несколько иначе. Другие очень настораживающие признаки – изменение показателей сетевого трафика, а также резкое уменьшение свободного места на жестком диске.
Сканирование портов
После обнаружения взлома первое, что необходимо сделать после смены паролей – лишить взломщика возможности проникновения в систему через сетевые порты. Поскольку взломанный компьютер не вызывает доверия, просканировать сетевые порты необходимо с другого компьютера.
Проще всего просканировать порты с помощью программы nmap. Для этого достаточно выполнить следующую команду:
nmap -р 1-65535 192.168.0.1
Указываем диапазон сканируемых портов – от 1 до 65535, а также адрес сканируемого компьютера. После этого на консоль будет выдан список портов, протокол, используемый для каждого порта, и сервис, который использует этот порт. Обычно всякие «специальные» программы обращаются к портам выше 1023, причем зачастую это порты с номером выше десяти тысяч. Помимо nmap, можно воспользоваться программой lsof. Она позволяет получить список открытых на вашем компьютере сетевых портов. Для этого достаточно выполнить команду
lsof -i Использование RPM
Хотя чуть ранее мы утверждали, что использование RPM для обнаружения rootkit – дело бесперспективное, это не совсем так. RPM можно применить для быстрой проверки. Если он не найдет ничего подозрительного – воспользуемся другими средствами, если найдет и на том спасибо – будем знать, что у нас не так в системе.
RPM записывает и проверяет контрольную сумму всех файлов в пакете, включая те файлы, которые должны изменяться с течением времени. О проверке контрольных сумм пакетов RPM см. в гл. 8.
Сканер для rootkitПакет chkrootkit – набор утилит, используемых для выявления присутствия в системе уже известных rootkit. Chkrootkit удобен тем, что способен выявлять большое количество rootkit с помощью единственного приложения. Вдобавок к выявлению известных rootkit, он также включает несколько тестов, помогающих обнаружить новые rootkit.
Пакет chkrootkit состоит из следующих утилит:
• chkrootkit – используется для выявления сигнатур известных rootkit;
• ifpromisc – используется для обнаружения прослушивания сетевого трафика взломанным компьютером;
• chklastlog, chkwtmp, check_wtmpx – утилиты для проверки log-файлов;
• chkproc – предназначена для обнаружения «посторонних» загружаемых модулей ядра операционной системы.
Об особенностях применения chkrootkit можно узнать в документации, идущей в комплекте с пакетом.
После обнаружения
Что делать после обнаружения rootkit? Единственно верный способ избавиться от последствий взлома – заново полностью переустановить операционную систему и установить все обновления пакетов для вашего дистрибутива. Однако не всегда есть возможность проделать такие действия сразу – квартальный отчет, непрерывное производство, болезнь администратора – да мало ли что еще.
В дистрибутивах на основе RPM-пакетов вы можете определить поврежденные пакеты. После этого необходимо переустановить их, используя следующую команду: