SINUS Firewall
SINUS Firewall еще один firewall для Linux (ядра 2.0.x и 2.2.x). Скачать его можно с
http://www.sinusfirewall.org.
Сканеры вторжения
Сканеры вторжения представляют собой следующий шаг в развитии сетевых сканеров. Эти пакеты программ идентифицируют уязвимость, и в некоторых случаях позволяют Вам активно пробовать атаковать систему. Если Ваши машины восприимчивы к этим нападениям, Вы должны принять меры защиты, поскольку любой нападаюший может получить эти программы и использовать их.
Скрипты Firewall
Многие скрипты для Red Hat Linux в rpm-формате:
http://www.webideal.de/rh-isdn/downloads.
Slurp
slurp ведет себя подобно installwatch, но имеет и возможности alien. Он отслеживает систему при установке пакетов и создает из него rpm-пакет. Вы можете скачать slurp с
http://students.vassar.edu/~jajohnst/slurp.
Slush
Slush основан на OpenSSL и поддерживает сертификаты X.509. Slush распространяется по GPL, но не закончен (все необходимое поддерживается, но есть досадные ограничения). В конце концов может составить хорошую замену для SSH. Скачать можно с
http://violet.ibs.com.au/slush.
Sniffit
Мой любимый перехватчик, sniffit, имеет хорошие возможности фильтрации, преобразует полезные грузы данных в ASCII текст для простого чтения (подобно telnet-сеансам), и даже имеет графический режим (хорош для текущего контроля действий/подключений). Sniffit доступен на
http://sniffit.rug.ac.be/~coder/sniffit/sniffit.html.
Snort
Snort хороший пакет, который может использоваться, чтобы обнаружить различные нападения. Он может наблюдать за действиями типа Queso TCP-IP fingerprinting scans, Nmap scans и подобными. Snort доступен на
http://www.clark.net/~roesch/security.html.
SOCKS
SOCKS сервер proxy уровня сессии, обычно используется на firewall из-за хороших возможностей контроля доступа. Приложения должны поддерживать протокол SOCKS, многие популярные web-браузеры, ftp-клиенты и тому подобное имеет такую поддержку. Скачать можно с http://www.socks.nec.com.
Software
RPM
dpkg
tarballs / tgz
Проверка целостности файлов
RPM integrity
dpkg integrity
PGP signed files
GnuPG signed files
MD5 signed files
Автоматическое обновление
NSBD
Автообновление и RPM
AutoRPM
Rhlupdate
RpmWatch
Автообновление и dpkg
Автообновление и tarballs / tgz
Отслеживание установки софта
installwatch
instmon
Преобразование форматов файлов
alien
slurp
Поиск софта
Безопасное программирование
Secure Linux Programming FAQ
Secure UNIX Programming FAQ
Secure Internet Programming
Writing Safe Setuid Programs
userv
Тестирование программ
fuzz
Патчи компилятора
Stackguard
Stack Shield
Sophos Anti-Virus
Sophos Anti-Virus коммерческий сканер, работает на разных Windows и UNIX платформах. Свободен для персонального и относительно недорог для коммерческого использования. Скачать можно с http://www.sophos.com.
Списки контроля доступа (ACL)
Один главный компонент файловой системы, которого пока нет в Linux, это поддержка Access Control Lists (списков контроля доступа) вместо обычных User, Group и Other. ACL позволяет более гибко управлять доступом, предоставляя права доступа к каждому объекту конкретному пользователю. Например, можно предоставить полный доступ к файлу пользователю ?bob ?, доступ на чтение пользователю ?mary?, доступ для изменения группе ?sales? и закрыть доступ всем остальным. В настоящее время в Linux обычными методами сделать такое нельзя или крайне трудно. Значит, нужна ACL. Сейчас поддержка ACL для Linux есть в виде патча для ядра. Справедливости ради надо отметить, что поддержка ACL реализована в NT (для файловой системы NTFS), и является одним из самых уязвимых мест защиты NT (если применительно к NT вообще корректно говорить о какой-либо защите).
SPY
SPY продвинутый многопротокольный перехватчик, который работает на различных платформах. Это не свободная программа, однако имеется одиночная лицензия, доступная для некоммерческого использования с максимумом в 5 серверов. Коммерческая версия стоит около $6000 US, но вроде бы того стоит, поскольку качество программы великолепное. Доступен на
http://pweb.uunet.de/trillian.of/Spy.
SQUID
SQUID мощный и быстрый объектный сервер кэша. Он обрабатывает сеансы FTP и WWW, что во многом подобно FTP и WWW серверам, но прокси только пишет и читает файлы в кэш-каталоге, что делает его безопасным. Squid работет как не-root пользователь (обычно 'nobody'), так что он довольно надежен. Основная его трудность заключается в правильной настройке. Например, если Squid подключен к Вашей внутренней сети (как обычно имеет место) и internet, это могло бы фактически использоваться, чтобы достигнуть внутренних компьютеров (даже если они используют не-направленные IP-адреса). Следовательно, соответствующая конфигурация Squid очень важна.
Самое лучшее, это настроить Squid на обслуживание только внутренних систем, чтобы снаружи никто не мог его использовать. К тому же, не помешает firewall. Squid может также использовать как ускоритель HTTP (известен также как обратный proxy), возможно Вы имеете NT WWW Server во внутренней сети, которую Вы хотите совместно использовать с миром. В этом случае настройка труднее, но все можно сделать вполне надежно. Squid имеет очень хороший ACL (списки контроля доступа) встроенные в файл squid.conf, что позволяет Вам блокировать доступ по именам, IP, сетям, времени дня, дню недели (возможно, Вы позволяете неограниченное просматривание в уикэнды для людей, которые относятся к Вашей организации). Не забудьте однако, что более сложный ACL, замедляет Squid.
Большинство сетевых администраторов будет хотеть конфигурировать Squid так, чтобы внутренняя сеть могла обращаться к www-сайтам в Internet. В этом примере 10.0.0.0/255.255.255.0 внутренняя сеть, 5.6.7.8 внешний адрес IP-адрес Squid-сервера и 1.2.3.4 www-сервер, который надо увидеть.
Squid должен быть конфигурирован так, чтобы обрабатывать запросы ТОЛЬКО из внутренней сети. В противном случае, любой сможет обратиться на 5.6.7.8 (порт 3128), запросить http://10.0.0.2 (или любую внутреннюю машину) и смотреть www-содержимое внутренней сети. Впишите нечто подобное приведенному ниже примеру в свой squid.conf file:
tcp_incoming_address 10.0.0.1 tcp_outgoing_address 5.6.7.8 udp_incoming_address 10.0.0.1 udp_outgoing_address 5.6.7.8
Это предотвратит от использования Squid, чтобы исследовать внутреннюю сеть.
Но иногда используют Squid для того, чтобы внутренние www-серверы были досьупны из Internet. Например, есть IIS 4.0 www-сервер, который надо выпустить в Internet, но не хочется подключать его напрямую. Используя Squid Вы может предоставлять доступ к нему очень хорошим способом. В этом примере 1.2.3.4 произвольная машина в Internet, 5.6.7.8 внешний IP-адрес Squid-сервера, 10.0.0.1 внутренний IP-адрес и 10.0.0.2 www-сервер во внутренней сети, управляемый IIS 4.0.
Чтобы использовать Squid как ускоритель просто установите ? http_port? в 80 в файле squid.conf:
http_port 3128
Затем установите IP-адреса по-другому:
tcp_incoming_address 5.6.7.8 tcp_outgoing_address 10.0.0.2 udp_incoming_address 5.6.7.8 udp_outgoing_address 10.0.0.2
В заключение Вы должны определить машину, для которой Вы используете ускорение:
httpd_accel_host 10.0.0.2 httpd_accel_port 80
Есть подробное Squid FAQ
http://squid.nlanr.net/Squid/FAQ/FAQ.html.
ACL работает с помощью задания и прменения правил, например:
acl internalnet 10.0.0.0/255.0.0.0 http_access allow internalnet http_access deny all
Здесь определяется "internalnet" для чего-то с адресом 10.0.0.0/255.255.255.0, позволяя этому доступ к http кэширование порта, и запрещая его всем остальным. Не забудьте, что правила читаются в заданном порядке, точно так же как ipfwadm, позволяя Вам делать их очень сложными (и наделать ошибок, если Вы неосторожны). Всегда размещайте общие правила перед специальными. Лучше запретить лишнее. О лишнем запрете Вы узнаете быстрее (обычно от разьяреных пользователей), чем о лишнем разрешении (обычно когда файлы из внутренней сети появятся в Internet). Файл настройки Squid (squid.conf) хорошо прокомментирован и имеет подробную man-страницу.
Другой полезный пример блокирует ads (баннеры и прочие веселые гадости, комх в последнее время развелось немерено), для этого добавьте в squid.conf:
acl ads dstdomain ads.blah.com http_access deny ads
Объявление acl задает шаблон домена назначения, исходного домена, регулярного выражения и так далее, директива http_access фактически определяет, что делать с этим (deny, allow или что-то еще). Правильная установка этого дает чрезвычайно мощный инструмент, чтобы ограничить доступ к WWW. К сожалению, это имеет одну Ахиллесову пяту: не поддерживает идентификацию пользователя и управление на ее основе (многие UNIX proxy такое умеют). Не забудьте, что подобно любому набору правил они читаются сверху вниз. Squid FAQ есть на
http://squid.nlanr.net/Squid/FAQ/FAQ.html.
Одна важная деталь защиты: протоколы Squid. По умолчанию Squid может протоколировать или нет каждый запрос, который обрабатывает (зависит от файла конфигурации), от ?http://www.nsa.gov/? до ?http://www.example.org/cgi-bin/access&member=john&password=bob?. Вы определенно захотите отключать файлы регистрации доступа, если Вы не хотите иметь позицию наблюдателя за тем, что люди рассматривают в Internet (по закону это сомнительно, возможны БОЛЬШИЕ проблемы!). Директива ?cache_access_log? и нацеливание записей в ?/dev/null?, положат этому конец. Еще одна директива ?cache_store_log?, является полезной для ведения статистики по эффективности Вашего кэша, она не регистрирует кто сделал запрос, просто пишет каково состояние объектов в кэше, так что Вы видите, что изображения на pornographic-сайте обслуживаются неоднократно... Чтобы отключить это, установите в ?none?. ?cache_log? должен вероятно быть оставлен включенным, протокол содержит базисную информацию отладки типа того, когда станция была запущена и когда остановлена, отключить это можно установкой на "/dev/null". Еще один не очень ясно документированный файл протокола задан ?cache_swap_log?. Он хранит запись того, что происходит с кэшем, и также покажет Вам, какие URL посещают (но не кто туда ходит!), установка его на ?/dev/null? не работает (фактически Squid вимательно за этим следит), установка ? none? просто меняет имя файла с ?log? на ?none?. Единственный способ остановить это состоит в том, чтобы связать файл с ?/dev/null? и связать ?log-last-clean? с ?/dev/null ?. Итак,
в squid.conf пишем:
cache_access_log /dev/null cache_store_log none cache_log /dev/null
и свяжите:
/var/spool/squid/log с /dev/null /var/spool/squid/log-last-clean с /dev/null
или в каком там каталоге у Вас лежит www-кэш (каталоги с 00 по 0F).
Еще одна важная деталь: ICP (Internet Cache Protocol), компонент Squid. Он нужен при создании наборов или цепочек proxy-серверов. Если сервер один, надо выключить ICP. Для этого просто установите порт ICP в squid.conf не в ?3130? (значение по умолчанию): а в ?0?. Также прикройте firewall порт 3128 (по умолчанию Squid работает с клиентами через него) от доступа из Internet:
ipfwadm -I -a accept -P tcp -S 10.0.0.0/8 -D 0.0.0.0/0 3128 ipfwadm -I -a accept -P tcp -S some.trusted.host -D 0.0.0.0/0 3128 ipfwadm -I -a deny -P tcp -S 0.0.0.0/0 -D 0.0.0.0/0 3128
или в ipchains:
ipchains -A input -p all -j ACCEPT -s 10.0.0.0/8 -d 0.0.0.0/0 3128 ipchains -A input -p all -j ACCEPT -s some.trusted.host -d 0.0.0.0/0 3128 ipchains -A input -p all -j DENY -s 0.0.0.0/0 -d 0.0.0.0/0 3128
squidGuard
squidGuard позволяет Вам править списки управления доступом, списки фильтров и переназначать запросы легко и эффективно. Это идеально для управления доступом к WWW и для более специфических задач типа блокирования pornographic содержания. Данное средство просматривает только URL (содержимое не анализируется!), так что для активного содержания это не подходит. squidGuard доступен на
http://info.ost.eltele.no/freeware/squidGuard.
Модуль LDAP auth для SQUID
Позволяет проводить авторизацию юзверей через сервер LDAP, но пароли и прочие данные передаются открытым текстом, так что используйте какую-нибудь форму VPN для их защиты. Скачать можно с
http://sites.inka.de/ms/python/proxy_auth_ldap.
SRP
SRP относительно новая разработка, однако имеет несколько преимуществ над некоторыми из старших программ. SRP свободный и не использует шифрование для обеспечения безопасности сеанса, хотя есть и шифрующая версия. SRP использует довольно шуструю математику, подробно рассмотренную на
http://srp.stanford.edu/srp/ndss.html. Недостаток в том, что SRP шифрует только вход в систему (username и пароль), так что любые перемещаемые данные (типа telnet-сеанса или ftp-сайта) уязвимы. Скачать SRP можно с http://srp.stanford.edu/srp. SRP сейчас поддерживает Telnet и FTP (для windows тоже), хотя поддержка SRP других протоколов проста. Клиент для windows с поддержкой SRP доступен на
http://www.kermit-project.org/k95.html.
SSH
SSH rpm? не доступен для OpenLinux 2.2 (то есть, я его не нашел). SSH rpm? для Red Hat неполон и исходники не удается откомпилировать, SSH компилируется из чистого исходного текста без проблем. Вы можете получить исходник SSH с
ftp://ftp.zedz.net/pub/replay/crypto/SSH/. Чтобы запустить sshd, Вы должны выполнить ?/usr/local/bin/sshd? во время загрузки. Он будет искать файлы настроек в /etc.
Port 22 # runs on port 22, the standard ListenAddress 0.0.0.0 # listens to all interfaces, you might only want to bind a firewall # internally, etc HostKey /etc/ssh/ssh_host_key # where the host key is RandomSeed /etc/ssh/ssh_random_seed # where the random seed is ServerKeyBits 768 # how long the server key is LoginGraceTime 300 # how long they get to punch their credentials in KeyRegenerationInterval 3600 # how often the server key gets regenerated PermitRootLogin no # permit root to login? no IgnoreRhosts yes # ignore .rhosts files in users dir? yes StrictModes yes # ensures users don't do silly things QuietMode no # if yes it doesn't log anything. yikes. we want to log logins/etc. X11Forwarding no # forward X11? shouldn't have to on a server FascistLogging no # maybe we don't want to log too much. PrintMotd yes # print the message of the day? always nice KeepAlive yes # ensures sessions will be properly disconnected SyslogFacility DAEMON # who's doing the logging? RhostsAuthentication no # allow rhosts to be used for authentication? the default is no # but nice to say it anyways RhostsRSAAuthentication no # is authentication using rhosts or /etc/hosts.equiv sufficient # not in my mind. the default is yes so lets turn it off. RSAAuthentication yes # allow pure RSA authentication? this one is pretty safe PasswordAuthentication yes # allow users to use their normal login/passwd? why not. PermitEmptyPasswords no # permit accounts with empty password to log in? no
Другие интересные директивы sshd_config:
AllowGroups - явно позволяет группам (/etc/group) входить в систему по ssh DenyGroups - явно запрещает группам (/etc/group) входить в систему по ssh AllowUsers - явно позволяет пользователям входить в систему по ssh DenyUsers - явно запрещает пользователям входить в систему по ssh AllowHosts - разрешает доступ некоторым хостам (остальным будет отказано) DenyHosts - блокирует некоторые хосты, остальные будут работать IdleTimeout time - время в minutes/hours/days/etc, после которого производится принудительный выход из системы по получению процессом сигнала SIGHUP.
SSH: клиент и сервер
SSH безопасный протокол и набор инструментальных средств, чтобы заменить некоторые общие (опасные) средства. Это было разработано из желания предложить максимум защиты и позволить удаленный доступ к серверам безопасным способом. SSH может использоваться, чтобы защитить любое сетевое соединение, устанавливая его как 'канал' (то есть, связывая с некоторым портом на обеих концах). Это хорошо для таких вещей как использование X через Internet. В дополнение к этому компоненты сервера выполняются на большинстве UNIX-систем, и NT, а компоненты клиента выполняются практически на всем и везде. К сожалению SSH больше не свободен; однако, имеется проект создать свободную реализацию протокола SSH. Не имеется проблем с SSH, подобных проблемам с telnet, все данные сеанса шифрованы, и обмен ключами выполняется относительно надежно (альтернатива: Вы можете предзагрузить ключи с обеих концов, чтобы предотвращать атаки посередине канала.
SSH tunnel
SSH или OpenSSH может использоваться, чтобы создать туннель между хостами (или между двумя X-серверами), шифруя канал, обеспечивая авторизацию и вообще делая работу более безопасной. Следующая web-страница объясняет это подробно
http://csociety.ecn.purdue.edu/~sigos/projects/ssh/forwarding.
Back
Written by Kurt Seifried |
SSH Win32 ports
http://guardian.htu.tuwien.ac.at/therapy/ssh.
SSL
В основном SSL применяется для защиты отдельных ресурсов (например, WWW). Хороший FAQ есть на
http://www2.psy.uq.edu.au/~ftp/Crypto. OpenSSL, OpenSource-реализация библиотек SSL, доступна на
http://www.openssl.org.
SSL в сочетании с серверами POP и IMAP
simap stream tcp nowait root /usr/sbin/stunnel imapd -l imapd
RANDFILE = stunnel.rnd [ req ] default_bits = 1024 encrypt_key = no distinguished_name = req_dn x509_extensions = cert_type [ req_dn ] countryName = Country Name (2 letter code) organizationName = Organization Name (eg, company) 0.commonName = Common Name (FQDN of your server) [ cert_type ] nsCertType = server
openssl req -new -x509 -days 365 -config /etc/stunnel.cnf -out /etc/stunnel.pem -keyout stunnel.pem openssl x509 -subject -dates -fingerprint -noout -in stunnel.pem
SSLtelnet и MZtelnet
Замена для telnet, SSLtelnet и MZtelnet предоставляют более высокий уровень безопасности, чем telnet, хотя SSLtelnet и MZtelnet не столь гибки как SSH, они полностью свободны (то есть, GNU licensed), а SSH нет (хотя OpenSSH *BSD licensed). Пакеты клиента и сервера доступны как tarballs на
ftp://ftp.uni-mainz.de/pub/internet/security/ssl/, а как RPM-пакеты на
ftp://ftp.zedz.net/pub/replay/linux/redhat.
Stack Shield
Stack Shield альтернативный метод защиты Linux от переполнения буфера, но я его не пробовал. Скачать можно с
http://www.angelfire.com/sk/stackshield.
Back
Written by Kurt Seifried |
Stackguard
Stackguard представляет собой набор патчей для GCC, которые компилируют программы так, чтобы предотвратить их от записи в те места памяти, куда они не должны ничего записывать (это простое объяснение, web-сайт Stackguard имеет кудабольше деталей). Stackguard разрывает некоторые функциональные возможности: программы подобные gdb и другие отладчики будут терпеть неудачу, но это не имеет значения для отлаженных программ. Скачать Stackguard можно с http://www.immunix.org.
StegFS
Steganographic File System фактически скрывает данные на диске, делая трудным доказательство того, что они вообще есть. Это может быть очень полезно, поскольку нападавший сначала должен найти данные, уже не говоря о том, что они зашифрованы. Скачать StegFS можно с
http://ban.joh.cam.ac.uk/~adm36/StegFS.
StegHide
StegHide прячет данные в файлах картинок и звуков, где в байте используются не все биты. Так как данные шифрованы, доказать их наличие очень трудно. Единственная проблема связана с объемами: для сокрытия мегабайта шифрованных данных понадобится звук или картинка размеров порядка нескольких мегабайт. Скачать StegHide можно с
http://www.stego.com.
Storm Administration System (SAS)
SAS сейчас специфичен для Stormix (новый дистрибутив Linux), но его можно скачать с
http://www.stormix.com/products/sas/index_html.
Back
Written by Kurt Seifried |
Stormix
http://www.stormix.com/bugtrack/input_bug_html и bugs@stormix.com
Security: security@stormix.com
http://www.stormix.com/support/index_html
Strip
Strip программа для карманного недокомпьютера palm pilot. Хрнаит пароли надежно и может также использоваться, чтобы генерировать пароли. Доступна по лицензии GNU с
http://www.zetetic.net/products.html.
Back
Written by Kurt Seifried |
Strobe
Strobe один из старых сканеров портов. Он просто пытается соединяться с различными портами на машине и сообщает результат. Прост в использовании и очень быстр, но не имеет свойств, которые имеют более новые сканеры портов. Strobe доступен для почти всех дистрибутивов, исходники есть на ftp://suburbia.net/pub.
Stunnel
Stunnel представляет собой решение для безопасных сетей на основе SSL. Сервер работает под UNIX, клиенты под UNIX или Windows.
http://mike.daewoo.com.pl/computer/stunnel
Sudo
Sudo дает пользователю setuid-доступ к программе (или нескольким), и Вы можете определять, при доступе с каких хостов можно работать с sudo (так что кто-то, ворвавшись не с того хоста, ничего не разрушит). Вы можете определять то, какой пользователь какие команды может выполнить. Необходимо проследить, чтобы пользователи использовали только ПОЛНЫЕ имена исполняемых файлов (если пользователь имеет sudo-доступ к "adduser", ничто не помешает ему реально подправить путь, скопировать bash в /tmp/adduser и захватить контроль над системой). Этот инструмент очень подобен super, но с немного менее удобным управлением доступом. Sudo доступен в большинстве дистрибутивов, но его можно скачать с
http://www.courtesan.com/sudo. Sudo позволяет Вам определять группы хостов, команд и пользователей. Несколько примеров /etc/sudoers:
#Give the user ?seifried? full access seifried ALL=(ALL) ALL
#Create a group of users, a group of hosts, and allow then to shutdown #the server as root Host_Alias WORKSTATIONS=localhost, station1, station2 User_Alias SHUTDOWNUSERS=bob, mary, jane Cmnd_Alias REBOOT=halt, reboot, sync Runas_Alias REBOOTUSER=admin SHUTDOWNUSERS WORKSTATIONS=(REBOOTUSER) REBOOT
Super
Super одно из немногих инструментальных средств, которые могут реально использоваться, чтобы дать некоторым пользователям (и группам) измененные уровни доступа к администрированию системы. В дополнение к этому Вы можете определять время и позволять доступ к скриптам, давая setuid доступ к командам, которые могли бы иметь непредвиденные последствия (любой редактор, любые инструментальные средства манипулирования файлами подобные chown, chmod, инструментальные средства вроде lp вообще-то могут поставить под угрозу части системы). Debian поставляется с super, к тому же есть rpm-пакет. Это очень мощный инструмент но требует значительных усилий при настройке (подобно любому мощному инструменту), но я думаю, что это стоит усилий. Некоторые примеры файла конфигурации обычно в каталоге /usr/doc/super-xxxx. Главный сайт для super
ftp://ftp.ucolick.org/pub/users/will.
SuSE
Bugs: bugs@suse.com
http://www.suse.de/de/support/security/index.html
Support: support@suse.com
Marc Heuse) написал несколько хороших
Один из авторов SuSE ( Marc Heuse) написал несколько хороших утилит для SuSE Linux, доступных на
http://www.suse.de/~marc. Первая называется "Harden SuSE" и в основном удаляет сомнительные объекты, сжимает права доступа файлов и блокирует лишние демоны. Другая, "SuSE security check", является набором скриптов оболочки, которые ежемесячно проверяют файл паролей, списки установленных пакетов и так далее.
Back
Written by Kurt Seifried |
SuSEauditdisk
SuSEauditdisk представляет собой загрузочный диск с системой проверки целостности. Он поставляется в поставке SuSE и может быть легко перенесен на другие дистрибутивы Linux. Доступен по GPL и может быть загружен с http://www.suse.de/~marc.
SWAT
SWAT очень хороший инструмент администрирования smb.conf. Основная проблема: он требует, чтобы Вы использовали для входа логин и пароль для root, и выполняется как отдельный процесс из inetd.conf, так что нет никакого простого способа шифровать трафик, и насколько мне известно, нет никакого способ предоставить другим пользователей административный доступ к SWAT. Однако это хороший инструмент для сокращения ошибок в smb.conf. Вы можете также выполнять SWAT с параметром ?a, чтобы вообще не спрашивать пароль, и использовать TCP_WRAPPERS, чтобы ограничить доступ к некоторым рабочим местам (хотя вы все еще не защищены от IP spoofing). По существу SWAT не предполагался как безопасный административный инструмент, но он полезен. SWAT обычно поставляется вместе с samba и доступен на http://www.samba.org, демонстрационная версия SWAT есть на
http://anu.samba.org/cgi-bin/swat.
Swatch
swatch очень подобен WOTS, и настройка журналов тоже очень похожа. Вы можете скачать swatch с
ftp://ftp.stanford.edu/general/security-tools/swatch.
Sxid
Sxid проверяет setuid и setgid на предмет измения, строит MD5-сигнатуры файлов и вообще позволяет Вам прослеживать любые сделанные изменения. Вы можете скачать его с
ftp://marcus.seva.net/pub/sxid.
Sysklogd и klogd
klogd обрабатывает ядерные сообщения, в зависимости от вашей установки, их может быть разное количество. Например, можно включить учет процессов в системе. Реально почти все сообщения передаются syslogd для дальнейшей обработки. man-страницы для sysklogd, klogd и syslog.conf довольно хорошие с ясными примерами. Одна чрезвычайно мощная и часто пропускаемая способность syslog состоит в том, чтобы регистрировать сообщения на удаленный хост на котором работает syslog. Так как Вы можете определять много мест назначения для сообщений syslog (i.e. посылать все сообщения в файл /var/log/messages, на консоль, на удаленный хост или на несколько таких хостов) это позволяет Вам централизовать регистрацию на одном хосте. Но если кто-то все же доберется до протоколов и поправит их в своих интересах, Вы об этом можете и не узнать: встроенных средств контроля целостности тут нет.
Стандартные log-файлы, которые обычно определяются в файле syslog.conf:
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler
Первый (messages) получает большую часть информации: входы в систему пользователей, дампы TCP_WRAPPERS, данные о IP-firewall и многое другое. Второй обычно записывает события подобные изменениям пользователями своих UID/GID (через su, sudo), ошибки авторизации паролей и прочее в таком духе. Файл maillog обычно хранит сведения о соединениях pop/imap (вход и выход пользователей) и заголовок каждого письма прошедшего через систему (от кого, кому, msgid, status и прочая информация). Файл spooler не часто используется поскольку число людей использующих usenet или uucp резко упало, uucp был в основном заменен на ftp и email, а большинство серверов usenet обычно чрезвычайно мощные машины, чтобы обработать полный или даже частичный newsfeed, значит их немного (обычно одна на ISP или чуть больше в зависимости от размера).
Можно задавать дополнительные log-файлы, например:
kern.* /var/log/kernel-log
Можно также разделить поток сообщений на разные файлы в соответствии с типом сообщений:
*.emerg @syslog-host mail.* @mail-log-host
Теперь все сообщения ядра будут записываться в /var/log/kernel-log. Во втором случае все аварийные сообщения будут регистрироваться на ? syslog-host?, и все журналы почты будут посланы на ?mail-log-host ?, позволяя Вам легко поддерживать централизованные журналы различных услуг. Значение по умолчанию syslogd, которое поставляется во многих дистрибутивах ужасно опасно, журналы легко можно поправить или вообще разрушить.
По умолчанию файлы протоколов доступны на чтение/запись только для root. К тому же можно и нужно установить для них режим append only (помните, что программы ротации журналов воспринимают это болезненно).
Tar и Gzip (куда без них...)
Старые добрые tar и gzip. Сколько я писал про них в Russian LDP... Почему они по-прежнему в ходу? Потому что подобно vi Вы можете быть уверены, что любая UNIX-система будет иметь tar и gzip. Данная парочка способна сбросить образ системы, а потом его легко восстановить за несколько десятков минут. Просто скомандуйте:
tar -cvf archive-name.tar dir1 dir2 dir3....
для создания архива (tarball) всех выбранных файлов (обычно /etc, /var/spool/mail, /var/log, /home и прочие пользовательские/системные данные), затем скомандуйте:
gzip -9 archive-name.tar
для сжатия их с максимальной плотностью, можно использовать более мощный, но и более медленный, bzip2. Я обычно делаю копию архива на удаленный сервер.
rsync
rsync идеальный путь для обмена данными между серверами. Он очень эффективен на обработке громадных деревьев каталогов, прост в настройке и безопасен. rsync не шифрует данные при передаче, но можно использовать IPSec, если нужно. rsync подробно описан ниже.
Tarballs / tgz
Наиболее современные дистрибутивы Linux используют систему управления пакетами чтобы устанавливать, следить и удалять программное обеспечение. Имеются, однако, много исключительных ситуаций, Slackware не использует систему управления пакетами, но взамен имеет precompiled tarballs (сжатый файл tar, содержащий файлы) который Вы просто распаковываете из корневого каталога, чтобы установить пакет. Некоторые такие пакеты имеют скрипт установки, чтобы выполнить любые задачи установки типа добавления пользователя. Эти пакеты также могут быть удалены, но функции типа запроса относительно файлов пакета, сравнения установленных файлов с файлами пакета и им подобные практически отсутствуют. Иногда Вам придется иметь дело с такими пакетами, даже если система использует менеджер пакетов. Допустим, Вы хотите попробовать последнюю версию X, но никто еще не создал хороший .rpm или .deb файл, так что Вы должны захватить исходный текст (также обычно в сжатом tarball), распаковывать его и установить. Это представляет не большую опасность, чем любой пакет поскольку большинство tarball имеет MD5 и/или PGP сигнатуры, связанные с ними. Так что Вы можете загрузить и проверить пакет. Главная проблема в том, чтобы отслеживать нужные файлы и определять их версии. Например, удалили Вы какой-то пакет, вместе с кучей его библиотек, а система работать перестала. Что такое? А все просто: библиотеки были нужны еще пакетам, которые Вы добавили уже после этого. Так что лучше бы Вам их не использовать, но если очень надо, сделайте перед установкой список файлов системных каталогов, после установки еще один и сравните их, чтобы знать, что куда дописалось. Собственно, менеджеры пакетов часто делают именно это. Запустите 'find /* > /filelist.txt' перед и 'find /* > /filelist2.txt' после установки tarball и используйте 'diff -q /filelist.txt /filelist2.txt > /difflist.txt' для получения перечня изменений. Альтернатива: выполните 'tar -tf blah.tar' чтобы получить список файлов в архиве, но толку от этого может и не быть: большинство tarballs выполняет компиляцию программ и установочные скрипты, так что простой перечень файлов может и не помочь. Другой метод для слежения за тем, что Вы установили через tar состоит в использовании программ типа ?stow?, stow ставит пакет в отдельный каталог (например, /opt/stow) и создает ссылки из системы на данный каталог. Stow требует Perl и доступен на
http://www.gnu.ai.mit.edu/software/stow/stow.html.
Команда | Действие |
tar -tf filename.tar | Перечисляет имена файлов в filename.tar |
tar -xf filename.tar | Распаковывает файлы из filename.tar |
TCFS
TCFS представляет собой утилиту уровня ядра для шифрования данных, похожую на CFS. Поскольку реализована она на уровне ядра, работает куда быстрее. Благодаря интеграции с NFS Вы можете распространять зашифрованные данные за пределами локальной машины. Дешифровка производится на машине клиента, что позволяет передавать по сети пароли и прочуб критичную информацию. Скачать TCFS можно с http://tcfs.dia.unisa.it.
TCP-WRAPPERS
Wietse's TCP-WRAPPERS позволяют Вам ограничивать подключения к различным сервисам на основании IP-адреса и другой информации, но что даже более важно, так это то, что такая система позволяет Вам конфигурировать ответ. TCP_WRAPPERS входят во многие дистрибутивы, а вообще-то их можно скачать с
ftp://ftp.porcupine.org/pub/security.
Использование TCP_WRAPPERS существенно облегчает защиту от внешних атак. TCP_WRAPPERS управляется двумя файлами:
/etc/hosts.allow /etc/hosts.deny
hosts.allow проверяется первым, и его правила проверяются сверху вниз. В случае нахождения правила с разрешением для Вас (то есть, Вашего хоста, домена, маски подсети или других сетевых параметров), Вы получите доступ к сервису. Если ничего подходящего не найдено, проверяется hosts.deny в поисках таких же правил. Этот файл ничем не отличается от предвдущего, кроме того, что все данные в нем интерпретируются как запреты определенным системам подключаться к защищаемой системе. Первое же найденное правило приведет к тому, что доступа Вы не получите. Если ничего не найдено, доступ будет предоставлен. Если Вы придерживаетесь пессиместичной стратегии защиты, впишите :
в hosts.deny:
ALL: 0.0.0.0/0.0.0.0
что запретит все услуги для всех, кроме тех услуг, которые явно разрешены для тех систем, которым явно дано разрешение (помните, что по умолчанию доступ разрешен). Можно также избрать такой подхож в отношении только некоторых сервисов, скажем, telnet, а другие, например, ftp, оставить открытыми всем. Для этого впишите:
в hosts.allow:
in.telnetd: 10.0.0.0/255.255.255.0 # allow access from my internal network # of 10.0.0.* in.ftpd: 0.0.0.0/0.0.0.0 # allow access from anywhere in the world
в hosts.deny:
in.telnetd: 0.0.0.0/0.0.0.0 # deny access to telnetd from anywhere
Или если Вы желаете быть действительно безопасными:
ALL: 0.0.0.0/0.0.0.0 # deny access to everything from everywhere
Это может воздействовать и на сервисы типа ssh и nfs, так что будьте очень внимательны!
Вы можете просто внести в список все услуги, которые Вы используете отдельно:
in.telnetd: 0.0.0.0/0.0.0.0 ipop3d: 0.0.0.0/0.0.0.0
Если некоторый сервис не упомянут в inetd.conf и не имеет политики запрета по умолчанию, это не сервис, а дыра в системе. Более безопасное (и немного больше работы, но в конечном счете меньшее количество работы, чем восстанавливать сервер) иметь запрет в качестве значения по умолчанию правил для firewall и TCP_WRAPPERS.
man-страницы для TCP_WRAPPERS очень хорошие, и вызываются командами:
man hosts.allow man hosts_allow
и/или:
man hosts.deny man hosts_deny
Один глюк в TCP_WRAPPERS, который недавно выскочил на Bugtraq, TCP_WRAPPERS интерпретирует в hosts.allow и hosts.deny следующим способом:
1) Обрезает все символы \ (продолжение строки), делая все строки полными (помните также, что максимальная длина строки около 2k, лучше использовать несколько строк в некоторых случаях).
2) Обрезает все строки, начинающиеся на #, то есть все комментарии. Таким образом
# this is a test # in.ftpd: 1.1.1.1 \ in.telnetd: 1.1.1.1
Это означает, что строка "in.telnetd: 1.1.1.1" тоже будет проигнорирована!
Tcpdump
Самый первый перехватчик пакетов для Linux, этот инструмент существовал сколько я помню, и использовался для отладки сетевых проблем. Большинство дистрибутивов его имеет в своем составе. Недостатки, а их немало, учтены в более новых перехватчиках, но иногда tcpdump может быть полезен.
Техника безопасности
Chrooting
http://madhouse.lonyay.edu.hu/dep/
Back
Written by Kurt Seifried |
Telnet
Telnet был одной из первых услуг того, что является теперь Internet, это позволяет Вам регистрироваться на удаленной машине в интерактивном режиме, давать команды и смотреть их результаты. Это все еще основное инструментальное средство для удаленного администрированич в большинстве сред, и оно имеет почти универсальную поддержку (даже NT имеет telnet-клиент и daemon). Это также один из наиболее опасных протоколов, восприимчивых ко всему. Если Вы имеете пользователей использующих telnet для доступа к серверу Вы должны определенно выполнить chroot для их логинов если возможно, также как ограничить доступ telnet на используемые ими хосты с помощью TCP_WRAPPERS. Самое лучшее решение для обеспечения безопасности telnet состоит в том, чтобы отключить его и использовать SSL-telnet или ssh.
Проблемы с telnet:
username и пароли открытым текстом.
Все команды открытым текстом.
Атаки на подбор паролей (правда, остаются следы в файлах протоколов).
Самое лучшее решение состоит в том, чтобы выключить telnet и использовать ssh. Однако, это практично не во всех ситуациях. Если Вы используете telnet, я настоятельно предлагаю применить firewall для разрешения определенным хостам/сетям обращаться к порту 23, а для всех остальных такое обращение запретить. Неплохо применить и TCP_WRAPPERS. Пример правил для firewall:
ipfwadm -I -a accept -P tcp -S 10.0.0.0/8 -D 0.0.0.0/0 23 ipfwadm -I -a accept -P tcp -S some.trusted.host -D 0.0.0.0/0 23 ipfwadm -I -a deny -P tcp -S 0.0.0.0/0 -D 0.0.0.0/0 23
или в ipchains:
ipchains -A input -p all -j ACCEPT -s 10.0.0.0/8 -d 0.0.0.0/0 23 ipchains -A input -p all -j ACCEPT -s some.trusted.host -d 0.0.0.0/0 23 ipchains -A input -p all -j DENY -s 0.0.0.0/0 -d 0.0.0.0/0 23
Пример использования TCP_WRAPPERS в /etc/hosts.allow:
in.telnetd: 10.0.0.0/255.0.0.0, some.trusted.host
и в /etc/hosts.deny:
in.telnetd: ALL
Имеются несколько шифрованных вариантов telnet: ssh, SSLeay Telnet и другие. По-моему, лучше всего ssh. Для защиты пользователей telnet можно сделать несколько дел. Во-первых, запретите доступ root через telnet, это делается в файле /etc/securetty и по умолчанию в большинстве дистрибутивов root может заходить только с консоли. Во-вторых, чтобы пользователь мог работать его shell должна быть упомянута в файле /etc/shells).
Если Вы хотите чтобы пользователь не имел telnet-доступа, но мог менять свой пароль, сделайте вот что:
В файл /etc/shells добавьте строку:
/usr/bin/passwd
и установите shell для пользователя в /usr/bin/passwd, например так:
username:x:1000:1000::/home/username:/usr/bin/passwd
Теперь при входе с помощью telnet у пользователя система спросит логин и пароль, и если все правильно, предложит пароль сменить. Если новый пароль будет введен правильно, он сменится, и пользователь будет отсоединен от системы (связь прервана). Если новый пароль будет введен как-то не так, то пароль не сменится (останется прежним), а пользователь опять же будет отсоединен (связь прервется). Выглядит такой сеанс примерно так:
Trying 1.2.3.4... Connected to localhost. Escape character is '^]'.
Red Hat Linux release 5.2 (Apollo) Kernel 2.2.5 on an i586 login: tester Password: Changing password for tester (current) UNIX password: New UNIX password: Retype new UNIX password: passwd: all authentication tokens updated successfully Connection closed by foreign host.
Telnet также отображает системное приглашение при любом соелдинении. Оно обычно включает системную информацию, в частности название OS, версию и тому подобные сведения, вплоть до версии ядра. При работе с несколькими OS на разных машинах это удобно, но дает хакерам много ценного. Telnetd отображает содержимое файла /etc/issue.net (обычно он идентичен /etc/issue, который отображается на терминалах), этот обычно пересоздается во время перезагрузки в большинстве дистрибутивов Linux из загрузочного скрипта rc.local. Просто поправьте файл rc.local, чтобы он больше не трогал файлы /etc/issue и /etc/issue.net, затем впишите в них некую постоянную информацию.
Обычно в Linux файл rc.local меняет /etc/issue и /etc/issue.net:
# This will overwrite /etc/issue at every boot. So, make any changes you # want to make to /etc/issue here or you will lose them when you reboot. echo "" > /etc/issue echo "$R" >> /etc/issue echo "Kernel $(uname -r) on $a $(uname -m)" >> /etc/issue cp -f /etc/issue /etc/issue.net echo >> /etc/issue
просто закомментируйте строки или удалите команды uname. Если telnet-доступ юзверям абсолютно необходим, создайте свое приглашение:
This system is for authorized users only. Trespassers will be prosecuted.
или что-то в таком роде.
Tera Term
Tera Term свободный клиент Telnet для Windows, имеет add-on DLL для поддержки ssh. Tera Term доступен на
http://hp.vector.co.jp/authors/VA002416/teraterm.html. А add-on DLL для поддержки SSH можно скачать с
http://www.zip.com.au/~roca/ttssh.html.
Тестирование программ
Есть ряд типичных программистских ошибок, которые делают программы уязвимыми. Есть и инструменты для тестирования на эти ошибки.
Tftp
tftp используется всем от X терминалов до маршрутизаторов Cisco при загрузке, чтобы получить их начальные файлы начальной загрузки и данные конфигурации.
tftp принимает каталог, которым будет ограничен (очень похоже на chroot), и можно использовать TCP_WRAPPERS, чтобы ограничить доступ к некоторым хостам, но если Вы хотите управлять доступом к файлам, Вы должны выполнить utftp. По умолчанию tftp (по крайней мере для Red Hat) предоставляет доступ только к каталогу /tftpboot (который обычно не существует, так что создайте его, если Вы нуждаетесь в этом сервисе). Следующий пример запускает tftp и предоставляет ему доступ к каталогам /tftpboot и /kickstart.
tftp dgram udp wait root /usr/sbin/tcpd in.tftpd /tftpboot /kickstart
Также не забудьте, что tftp использует UDP, так что 'ps xau' обязательно покажет, кто вошел, и что они делают (в противоположность ftp). Самое лучшее место, чтобы контролировать tftp, из syslog, но tftp не регистрирует адреса IP или что-нибудь полезное. Ниже приведен вывод ps и фрагмент протокола syslog по активному сеансу tftp.
nobody 744 0.0 0.6 780 412 ? R 14:31 0:00 in.tftpd /tftpboot
Apr 21 14:31:15 hostname tftpd[744]: tftpd: trying to get file: testfile Apr 21 14:31:15 hostname tftpd[744]: tftpd: serving file from /tftpboot
TFTP может быть легко ограничен, используя TCP_WRAPPERS и firewall, tftp работает через порт 69, протокол UDP, так что заблокировать доступ для всех, кроме бездисковых систем, просто. Закройте также доступ через Internet. Также запускайте tftp как пользователь nobody. Здесь надо заметить, что сервер tftp не выполняет авторизацию, так что от прав доступа толку мало, TFTP работает через порт 69, протокол udp.
ipfwadm -I -a accept -P udp -S 10.0.0.0/8 -D 0.0.0.0/0 69 ipfwadm -I -a accept -P udp -S some.trusted.host -D 0.0.0.0/0 69 ipfwadm -I -a deny -P udp -S 0.0.0.0/0 -D 0.0.0.0/0 69
или
ipchains -A input -p udp -j ACCEPT -s 10.0.0.0/8 -d 0.0.0.0/0 69 ipchains -A input -p udp -j ACCEPT -s some.trusted.host -d 0.0.0.0/0 69 ipchains -A input -p udp -j DENY -s 0.0.0.0/0 -d 0.0.0.0/0 69
The Finger Server
The Finger Server хороший finger-сервер, основанный на web, который дает пользователям возможность модифицировать их finger-информацию самостоятельно. Скачать можно с
http://www.glazed.org/finger.
Back
Written by Kurt Seifried |
Thttpd
Простой сервер http для web-интерфейса (например, Phoenix Adaptive firewall использует такой интерфейс). Скачать можно с
http://www.acme.com/software/thttpd