ОПНЦПЮЛЛЮ ЬХТПНБЮМХЕ ДЮММШИ

Часто задаваемые вопросы о безопасности Linux // malpaso.ru Часто задаваемые вопросы о безопасности Linux Этот документ представляет собой список вопросов, наиболее часто задаваемых новыми посетителями форума Security на сервере linux.org.ru (иначе LOR/Security). Копия этого FAQ и дополнительные документы доступны по адресу: http://malpaso.ru/lor-faq/ (зеркало на Украине: http://lor-faq.skolot.org.ua/lor-faq/). Владимир Иванов (ivlad@malpaso.ru), Анатолий Пугачев (mator@mail.ru) и др. v2.4.16, 2 марта 2008 г. 1. Общие рекомендации по защите. Во-первых, следует понимать, что абсолютной защиты не существует. Задача человека, занимающегося обеспечением безопасности системы - сделать так, что бы затраты на ее взлом превосходили ценность взлома. Во-вторых, с ростом защищенности системы падает удобство работы с ней. В-третьих, само обеспечение безопасности требует ресурсов - человеческих, денежных и вычислительных. Учтите, что данный FAQ предполагает наличие у читающего некоторого объема знаний о администрировании UNIX. 1.1. Что посоветуете для общего обеспечения безопасности? Прочитать данный FAQ и применить его к себе; а так же: обеспечить физическую безопасность системы никакие брэндмауэры, антивирусы, настройка прав на файловой системе не помогут, если взломщик может вынуть жесткий диск из сервера и унести домой. Даже если вы будете шифровать данные на жестком диске, зачем облегчать ему задачу? А если он просто развинтит винчестер? Держите ваши серверы под замком! поставить все security fixes от вендоров вашего дистрибутива: для RedHat ищите на ftp://updates.redhat.com/ или воспользуйтесь RedHat Network up2date; для Debian - поместите строчку deb http://security.debian.org stable/updates main contrib non-free в /etc/apt/sources.list, выполните apt-get update и apt-get upgrade; отключить все ненужные сервисы проверьте как сервисы, запускаемые из (x)inetd так и standalone, запускаемые из стартовых скриптов. man inetd.conf, man xinetd настроить syslogd для копирования важных сообщений на другую машину man syslog.conf на предмет опции @hostname. Хранение копии файлов журналов на отдельной системе (доступ к которой, конечно, должен быть максимально ограничен) позволит иметь журнал, который не был изменен вломщиком, заметавшим следы, если взлом все-таки произошел. С другой стороны, syslogd обычно использует UDP для доставки сообщений, что не позволяет гарантировать, полноту журнала на протоколирующей системе. Кроме того, это открывает широкие фозможности для спуфинга сообщений и DoS с целью переполнения файловой системы, где хранятся файлы журналов. Таким образом, может оказаться необходимым рассмотреть модифицированные версии syslogd (например, syslog-ng), позволяющие использовать протокол tcp для доставки сообщений и позволяющие выполнять их электронную подпись. Это особенно важно, если сообщения доставляются через глобальные сети. отказаться от использования протоколов с слабой авторизацией в первую очередь это относится к так называемым r-командам: rlogin, rsh, rcp - соответствующие сервисы следует отключить или заменить на аналоги с более стойкой аутентификацией (Kerberized или ssh). Если r-команды вам таки необходимы (например, для работы с cisco, которая ssh не понимает), используйте TCP Wrappers (man tcpd). Кроме того, не стоит применять без необходимости telnet, POP3, отключите так же plain-text аутентификацию в IMAP, либо туннелируйте эти протоколы в SSL. производить проверку изменений файлов Для дистрибутивов, основанных на RPM, частично помогает rpm -Va, однако лучше использовать специализированные программные пакеты, такие как Tripwire (http://www.tripwire.org/) или или Aide (http://www.cs.tut.fi/~rammer/aide.html). Применение такого ПО позволит своевременно обнаружить изменения в конфигурационных файлах или установку "троянских коней". произвести тотальный chroot для всех возможных сервисов в первую очередь, это касается Apache (описание тут) и BIND (описание тут), если вы пользуетесь ими. Однако, я рекомендую вам помещать в chroot все ваши сервисы предоставляемые пользователям через Internet. приложить OpenWall patch документация и патчи под стандартное ядро ищите на http://www.openwall.com/linux/, обратите внимание, что производитель вашего дистрибутива, возможно, уже включил этот патч в свое ядро. Так же очень интересными возможностями обладает GrSecurity (см. так же ответ на вопрос 2.5). Из перечисленных шагов каждый следующий требует несколько больше усилий чем предыдущий, поэтому начинайте с начала, но доходить до конца необязательно - рассчитывайте ваши силы и соблюдайте балланс между ресурсами, потраченными на защиту информации и ценностью этой информации. 1.2. Какой/какая дистрибутив/OS лучше в плане защищенности? Обязательно ли ставить Slackware на сервер? Правда ли, что RedHat Linux такой «дырявый?» Разница между особенностями дистрибутивов, относящимися к безопасности, обычно сильно перевешивается (не)знанием администратора. Таким образом, знающий системный администратор способен на основе дистрибутива общего назначения (каковыми являются и Slackware, и RedHat, и Debian, и многие другие) построить систему, имеющую приемлемый уровень безопасности для Internet-хоста. Однако, особо надо отметить «специализированные» дистрибутивы. Они часто собраны на основе «нестандартного» ядра и реализуют какую-либо формальную модель безопасности. Примером такого дистрибутива может служить Adamantix, собранный на основе проектов Linux RSBAC и PaX. Такой дистрибутив может служить фундаментом для построения высоко защищенной системы, однако требует некоторого дополнительного времени для настройки. Отметим так же существование ОС МСВС, основанной на дистрибутиве Mandrake Linux и включающей в себя RSBAC. Ряд дистрибутивов, точнее, аппаратно-программных комплексов, включающих в себя Linux был сертифицирован по Common Criteria (ISO15408). Сюда, в частности, относятся некоторые системы IBM и HP под управлением дистрибутивов RedHat и SuSE. TODO: SELinux,Trustix, LIDS, Openwall GNU/*/Linux 1.3. Взломали! Что делать? Во-первых, Don't panic! :) Не вы первый, не вы последний. Во-вторых, постарайтесь определить для себя, какие действия вы должны предпринять. В-третьих, записывайте все, что вы сделали - это поможет на досуге сесть, разобраться и сделать выводы. Теперь подробней. Идентифицируйте проблему Насколько опасен взлом? Критична ли информация, которая могла подверчься утечке? Сколько систем взломано? Может ли быть так, что о некоторых взломах вы не подозреваете? Стоит ли немедленно выдернуть кабель из сетевого интерфейса или можно позволить себе понаблюдать за действиями взломщика? Кого нужно оповестить о взломе? Стоит ли привлекать правоохранительные органы? Традиционно, для сохранения контроля над взломанной системой, взломщики устанавливают т.н. rootkit - набор программ (и иногда - модулей ядра), которые скрывают факт взлома от системного администратора, обеспечивают доступ к системе, или позволяют расширить привелегии атакующего. Если у вас возникло подозрение, что в системе установлен rootkit, попробуйте проверить ОС с помощью chkrootkit или rkhunter. Так же проверьте целостность файлов с помощью Tripwire/Aide (см. так же п. 1.1). Приступайте к решению проблемы Не забудьте записывать все происходящее. Если вы решили понаблюдать за взломщиком, отдавайте себе отчет, что он может это обнаружить и постараться уничтожить все следы. Убедитесь, что он не использует ваши сервера как трамплин для новых атак. Будет очень неприятно оказаться вовлеченным в DDoS или обнаружить у себя склад эксплоитов или вареза (хотя, кому как, конечно :) ). Повторю прописную истину, что если вы следите за взломщиком командой, не надо пользоваться скомпроментированными ящиками электронной почты для координации своих действий. Команда CERT Coordination Center выпустила документ Steps for Recovering from a UNIX or NT System Compromise, описывающий основные шаги по восстановлению системы. Если у вас нет желания и сил проводить расследование, переустановите OS с дистрибутива, восстановите данные из резервных копий (у вас ведь есть резервные копии? :) ) и перечитайте данный FAQ для повышения ее защищенности. Сделайте выводы После того как работоспособность восстановлена, займитесь «разбором полетов». Как этот взломщик пролез? Как сделать так, что бы подобного больше не случалось? Попытки взломов могут повториться, к этому нужно быть готовым. Тут вам понадобятся сделанные ранее записи. Дополнительная информация Detecting Loadable Kernel Modules, статья, описывающая борьбу с LKM rootkits (локальная копия) Steps for Recovering from a UNIX or NT System Compromise http://www.rootkit.nl/ http://www.chkrootkit.org/ 1.4. Сборка из исходных текстов. Много раз в форуме читал что все сервернные приложения обязательно компилируют из исходников.Объясните новичку почему и какие изменения вносите при компиляции? Это не так. Собирать из исходников надо, если знаешь, зачем. Если не знаешь, возьми то, что есть в дистрибутиве. Самостоятельная сборка ПО может понадобиться для внесения в работу программы изменений, которые доступны только путем перекомпиляции из исходников. Вторым важным случаем, когда имеет смысл пересобрать ПО самостоятельно, является срочная необходимость исправления ошибки. После того, как вендор вашего дистрибутива выпустил исправленную версию, установите ее вместо вашей «срочной» сборки. 1.5. Чем опасна работа под root? В первую очередь - собственными ошибками. Во-вторых, намного возрастает опасность всевозможных «троянских коней» и т.п. Случайно запустив троянскую программу без привелегий root, вы в худшем случае потеряете свои файлы. Запуск из-под root может обернуться настоящей катастрофой. 1.6. Незнакомые сервисы. Много раз читал про такой подход к администрированиб безопасности - «если не знаешь, что это - отключи», но так же читал про «если не знаешь, что это - не трогай». Какой подход правильнее и надежнее? Оба подхода фундаментально неверны. Наш подход - «если не знаешь, что это - узнай, потом реши». ;) 1.5. Какой алгоритм шифрования лучше всего? Лучше всего — гаммирование по случайному потоку, используемому один раз. Это очень быстрый и принципиально невзламываемый алгоритм шифрования, потомок шифра Вернама. К сожалению, длина ключа в нем равна длине защищаемого текста. Вообще говоря, криптография — отдельная, большая и сложная тема, выходящая за рамки этого FAQ, поэтому здесь мы дадим только практические рекомендации. За дополнительной информацией обратитесь к литературе, упомянутой в разделе «Что читать». Для прикладного применения в настоящее и ближайшее время подходит алгоритм симметричного шифрования AES с длиной ключа не менее 256 бит, алгоритм хеширования SHA256 и алгоритмы ассиметричного шифрования RSA или El-Gamal с длиной ключа не менее 2048 бит. 2. Локальная безопасность. 2.1. Не могу удалить файл от root! Например, /bin/login, /etc/passwd и др. Скопировать получается, удалить скопированный файл получается. Удалить исходный - нет. Проблема обычно состоит в том, что на файл установлен бит immutable. Файловая система ext2 поддерживает дополнительные биты, управляющие некоторыми атрибутами файлов. В частности, бит immutable не позволяет изменить, переименовать или удалить файл. Руководствами по безопасности рекомендуется устанавливать такой бит на файлы типа /bin/login и /bin/passwd. Атрибут append-only позволяет открывать файл на запись только для дополнения. Такой бит может быть установлен на файлы системных журналов.(ВНИМАНИЕ! При этом может нарушиться нормальная работа logrotate). Подробнее - man chattr. 2.2. Попробовал снять immutable bit с помощью chattr - не получилось. В чем может быть дело? Linux (хотя в принципе это закреплено и в Posix) поддерживает так называемые kernel capabilities - флаги ядра, ограничивающие возможности системы вцелом. К ним, например, относятся CAP_CHOWN (возможность пользователям, применять chown) или CAP_KILL (возможность посылать сигналы процессам, владельцем которых является другой пользователь). Среди них есть CAP_LINUX_IMMUTABLE - этот флаг ядра (специфичный для Linux) управляет возможностью снятия аттрибутов immutable и append-only с файлов. В принципе для управления capabilities можно использовать команду echo и интерфейс /proc/sys/kernel/cap-bound, однако, проще установить утилиту lcap (homepage: http://pw1.netcom.com/~spoon/lcap/, там же есть ссылки на дополнительную информацию). Подробнее - /usr/src/linux/include/linux/capability.h и домашняя страница lcap, Linux Capabilities FAQ. 2.3. Как ограничить ресурсы пользователю? Диск, память, процессорное время? Собственно ограничение дискового пространства пользователя выполняется посредством механизма квот. Подробнее - Quota mini-HOWTO. Память, процессорное время и многое другое управляется посредством Pluggable Authentification Modules - PAM. В данном случае - pam_limits. Конфигурационный файл (/etc/[pam|security]/limits.conf) в принципе самодостаточен, так же рекомендуем ознакомиться с документацией к PAM. ВНИМАНИЕ! pam_limits - это PAM модуль, что означает, что он обычно имеет эффект только при регистрации пользователя одним из способов, позволяющим применить PAM, например через ssh или при вызове /bin/login. Таким образом, это не имеет эффекта на Apache, запускающийся с параметром «User» в httpd.conf или MySQL. Кроме того, все современные shell имеют команду ulimit, позволяющую ограничить пользователя. Обращайтесь к документации по вашему shell. 2.4. Как дать пользователю права root, но только частично? Например, как разрешить любой mount, а не только те, что в fstab? Наша рекомендация - пользуйтесь sudo! Помимо раздачи прав пользователям ведет учет применения этих самых прав, обладает гибкой системой конфигурирования в том числе и в масштабе локальной сети (впрочем, механизм этот далек от идеала IMHO - LDAP был бы куда как лучше; для этого есть патчи, искать в списках рассылки sudo - прим. Vladimir Ivanov). Вторым вариантом может стать priv ( ftp://ftp.ucdavis.edu/pub/unix/priv.tar.gz). Идеи, заложенные в эту программу в чем-то лучше, например, информацию о привелегиях можно хранить в NIS, а формат конфигурационного файла напоминает termcap, поэтому конфигурационные файлы легче создавать и модифицировать с помощью скриптов, что полезно при больших инсталляциях. К сожалению, по всей видимости, развитие priv остановлено. Наконец, вы можете применить RSBAC (см. выше), но это требует куда больших затрат на администрирование. На крайний случай (на самый крайний!) - воспользуйтесь механизмом SUID на конкретных программах. Подробнее - http://www.courtesan.com/sudo/, man chmod. 2.5. Как не дать пользователю запускать свои программы? У меня пользователь собрал/скачал эксплоит/игру/еще-какую-гадость. Теперь запустил и ломает/играет/еще-какой-гадостью-занимается. Как победить ситуацию в принципе? Традиционно, в Unix существует ровно два места, куда пользователь может записать свои файлы - домашний каталог пользователя и /tmp. Что бы пользователь не смог запустить в системе лишние программы, собрав их самостоятельно из исходников, следует поступить так: от каталога /tmp можно избавиться - создайте у каждого пользователя в домашнем каталоге собственный TMP и пропишите на $HOME/tmp соответствующие переменные окружения (обычно это $TMPDIR). После этого права 1777 с /tmp можно снять. Поставьте, скажем, 0755, 0711 или что-то подобное в соответствии с ситуацией. смонтируйте файловую систему с домашними каталогами пользователей с параметром noexec, после чего они не смогут создать исполняемые файлы в домашних каталогах. /tmp можно так же смонтировать с noexec - если вам это нужно. Рекомендуем сделать тоже самое для сменных носителей - floppy, CDROM, zip... Подробнее - man mount. Примечание от Piter Kravtchenko (lbast@mail.ru): такой фокус не проходит, если вы устанавливаете софт, работающий с flexlm, поскольку он плюет на $TMPDIR, и желает писать именно в /tmp. Примечание от Sergey (srg@csu.ac.ru): Насчет монтирования хома с noexec, (в ядрах Linux до 2.6, в современных это не работает прим. ivlad) ничто на мешает юзеру сделать скопировать в систему что-нить и сделать: /lib/ld-2.3.1.so ./nmap hostname Лекарство - патч к ядру с http://www.grsecurity.net/, на уровне ядра .. если файл лежит в каталоге, не принадлежащем руту выполнение запрещено. 2.6. А как сгенерировать стойкий пароль подручными средствами? cat /dev/[u]random | uuencode -m - | head -n 2 | tail -c длина пароля 2.7. Как прозрачно шифровать данные на диске? Есть ли аналоги BestCrypt под Linux? Ядро Linux имеет встроенную возможность работы с зашифрованными устройствами хранения данных. Ядро 2.6.4 и старше позволяет организовать прозрачное шифрование данных на диске двумя способами: с помощью Cryptoloop или dm-crypt, остальные ядра - только Cryptoloop. Для начала подробнее о каждом. Cryptoloop - это механизм, суть работы которого заключается в создании файловой системы внутри защищённого файла на диске, доступ к которой осуществляется посредством петлевого блочного устройства, или loopback-устройства (/dev/loop*, не путать с петлевым интерфейсом lo). Такое устройство монтируется как обычное блочное устройство, после чего шифрование и дешифрование осуществляется "на лету". Существует две реализации Cryptoloop - для ядер 2.4 и 2.6, причём эти реализации несовместимы друг с другом. Способ имеет следующие недостатки: требует наложения патчей на пакет util-linux, а в случае с ядром 2.4 - ещё и на само ядро; нельзя работать с носителем напрямую, только через петлевое устройство; небезопасно использовать с журналируемыми ФС; активная разработка Cryptoloop приостановлена в пользу dm-crypt. С появлением в 2.6-х ядрах низкоуровневого драйвера логических томов - Device mapper - стала возможной работа не только с петлевыми устройствами, но и непосредственно с дисковыми разделами. Более того, благодаря модульной структуре Device mapper, ничто не мешает, комбинируя различные цели, организовать шифрование данных на RAID-массиве или создать зашифрованный своп. Цель для Device mapper, отвечающая за шифрование данных, называется dm-crypt. От всех недостатков предыдущего способа dm-crypt избавлен, но доступен он только для ядер старше 2.6.4 (если не заморачиваться с патчами). И Cryptoloop, и dm-crypt для собственно шифрования используют шифры, являющиеся частью так называемого Cryptographic API (aka CryptoAPI), интегрированного в ядро. CryptoAPI применяется не только для шифрования данных на диске, но и, например, для организации защищённого туннеля по протоколу IPsec. Здесь будет описано создание и использование зашифрованной файловой системы с помощью dm-crypt. Потребуются следующие программные пакеты: ядро версии 2.6.4 или старше; пакет device-mapper; пакет hashalot; пакет cryptsetup. Конфигурирование ядра. Для последних ядер всё как обычно, никаких дополнительных патчей накладывать не надо. Просто включаем следующие опции: Device Drivers ---> Multi-device support (RAID and LVM) ---> Device mapper support Crypt target support Block devices ---> Loopback device support Cryptographic options ---> SHA384 and SHA512 digest algorithms AES cipher algorithms (i586) Алгоритмы хэширования и шифрования выбирайте по вкусу, однако стоит принять во внимание недавние сообщения об уязвимостях в MD5 и SHA1. Собираем ядро. Установка необходимого ПО. Здесь тоже всё как обычно: # ./configure && make && make install для каждого пакета. Можно воспользоваться пакетами из своего дистрибутива, если они в нём есть. Загружаем необходимые модули: # modprobe dm_mod # modprobe dm_crypt # modprobe aes_i586 # modprobe sha512 Теперь необходимо определиться, что использовать в качестве защищённого хранилища для файловой системы: раздел на диске или loop-файл. Принципиальной разницы нет, только в последнем случае придётся вводить на несколько команд больше. Для удобства рассмотрим эти случаи отдельно. 1) Использование раздела на диске. Предполагается, что у вас уже есть свободный раздел, который вы собираетесь зашифровать. Если нет, то самое время его подготовить с помощью стандартных средств. Файловую систему создавать не нужно, это будет сделано позже. Когда раздел готов, даём такую команду: # cryptsetup -c aes -h sha512 -s 256 -y create sec /dev/hdXY где: -с aes - алгоритм шифрования; -h sha512 - алгоритм хэширования; -s 256 - длина ключа; -y - запрашивать подтверждение ключевой фразы; sec - имя устройства Device mapper'а; /dev/hdXY - зашифрованный раздел или устройство. Должно появиться приглашение `Enter passphrase:'. Рекомендуется, чтобы это была именно фраза, символов так на 20. Опцию -y имеет смысл использовать только при первом доступе к носителю. Все остальные опции придётся вводить каждый раз в неизменном виде, поэтому стоит обернуть команду в скрипт. После выполнения команды должен появиться файл /dev/mapper/sec, такой же, как и любой другой файл блочного устройства. На нём необходимо создать файловую систему и смонтировать её как обычно: # mke2fs /dev/mapper/sec # mount /dev/mapper/sec /mnt/sec Всё, можно работать с /mnt/sec как с обычной файловой системой, при этом шифрование будет производиться "на лету". По завершении работы НЕОБХОДИМО уничтожить устройство /dev/mapper/sec, иначе его можно будет смонтировать без ввода пароля. # umount /mnt/sec # cryptsetup remove sec 2) Использование loop-файла. Всё то же самое, с той лишь разницей, что сначала придётся этот loop-файл создать и подключить его к петлевому устройству: # modprobe loop # dd if=/dev/urandom of=~/container bs=1M count=100 # losetup /dev/loop/0 ~/container # cryptsetup -c aes -h sha512 -s 256 -y create sec /dev/loop/0 # mke2fs /dev/mapper/sec # mount /dev/mapper/sec /mnt/sec . . . . . Не забываем корректно завершить работу: # umount /mnt/sec # cryptsetup remove sec # losetup -d /dev/loop/0 Программа cryptsetup требует для работы прав суперпользователя, поэтому для регулярного использования есть смысл разрешить запуск через sudo. Более подробную информацию о dm-crypt можно получить по адресу http://www.saout.de/misc/dm-crypt/. Ещё немного информации о dm-crypt по-русски здесь. Если по каким-то причинам требуется использовать Cryptoloop, то на этот случай есть Cryptoloop-HOWTO. Также следует отметить, что существует Linux-порт программы BestCrypt. by Eugeny Ostapenko (thesoulru _ gmail _ com) Посмотрите так же на pam_mount. 2.8. Как безопасно удалять файлы? Как известно, обычно процедура удаления файла не приводит к уничтожению информации, а лишь к пометке в записи файла и передаче блоков, ранее принадлежавших файлу, в список свободных. Что бы удалить информацию, необходимо: Переписать информацию на диске, с учетом того, как происходит копирование данных между диском и контроллером; уменьшить размер файла до нуля; переименовать файл; собственно, удалить переименованный файл. Для решения этой задачи, например, можно использовать утилиту (и модуль ядра) THC-Securedelete. В архиве есть файл usenix6-gutmann.doc, который подробно описывает принципы удаления информации с диска с учетом кодирования данных в контроллере. К сожалению, это довольно туманная тема, поскольку многое зависит от конфигурации дисков, использования RAID и т.п. Другая утилита, решающая эту задачу — wipe. Дополнительная информация Локальная копия доклада «Secure Deletion of Data from Magnetic and Solid-State Memory» Питера Гутмана 3. Сетевая безопасность. 3.1. Посоветуйте нормальный файрвол под Linux! Типа AtGuard! AtGuard - страшный уродец по сравнению с теми возможностями, которые предоставляют ipchains (2.2 ядра) и iptables aka netfilter (2.4 ядра). Рекомендуем читать документацию. Кроме того, под Linux существуют Checkpoint Firewall-1, Raptor, но это уже за деньги. Наконец, на http://www.opensourcefirewall.com/ желающие могут попробовать T.REX. Это уже довольно сложные комплексы, предназначенные скорее для защиты корпоративных сетей, чем одиночных рабочих станций. Подробнее - IPChains-HOWTO,IPTables-HOWTO. 3.2. Как мне узнать, что творится у меня в сети? Какие средства обнаружения вторжений существуют под Linux? Самый популярный сниффер - TCPDump; домашняя страница проекта - http://www.tcpdump.org/. Самое популярное свободное средство обнаружения вторжений (Intrusion Detection System, IDS) - Snort; домашняя страница - http://www.snort.org/. Довольно удобным для тех, кто предпочитает графические интерфейсы может оказаться пакет Ethereal (http://www.ethereal.com/), который к тому же имеет приятную возможность «вырезания» потока информации из лога tcpdump. 3.3. А вот как бы не дать пользователям заниматься тем же? В противодействии взломщикам, пытающимся «прослушать сеть» надо сочетать три метода: построение не-sniffer-friendly сетевой топологии. Проще говоря - full-switched сети. Поскольку находятся любители переполнить таблицу соответствия MAC-адресов портам на коммутаторах (switches), активное оборудование тоже нужно правильно настраивать. Впрочем, это тема отдельного разговора. мониторинг сети - пользовательских систем и активного оборудования. Отметим, что сниффер - это пассивная программа. При правильной реализации сниффер не оказывает никакого влияния на сеть и не может быть обнаружен программными методами. Существующие методики обнаружения снифферов основываются на ошибках в реализации. Примером такого способа является следуюший: Проверяющий создает ethernet фрейм содержащий к качестве MAC адреса получателья адрес, неравный адресу подозреваемой машины. В качестве IP адреса получателья используется тем не менее IP подозреваемой машины. Пакет высылается в сеть. Идея состоит в том, что если сетевой интерфейс находится в promisc режиме то пакет с MAC не соответствующий MAC адресу карточки все равно пройдет через нее и достигнет уровня OS. Остается в качестве IP payload положить например ICMP echo-request или TCP SYN для некоторого well-known открытого порта. Если вы получили ответ, значит карточка находится в смешаном режиме. Если нет - то возможно что автор сниффера умнее вас. Второй способ проверки основан на том, что теоретически OS машины сетевой интерфейс которой находится в смешаном режиме, должна обрабатывать бОльшее число пакетов чем та, которая слушает только пакеты для себя. Проверка производится так - в сегменте сети создается болшое количество траффика, не имеющего в качестве адреса получателя подозреваемую машину. После этого сравнивается время отклика (например на ping) для подозреваемой машины и гарантированно «чистой.» Если подозреваемая машина сниффит сеть то на нее должна возрасти нагрузка по сравнению с «чистой» машиной. Способ не работает, если вы не способны создать загрузку в сети достаточно серьезную для «прогрузки» сниферящей машины. Т.е. прогрузить E15K на 10Mb ethernet врят ли возможно. Примером ПО, позволяющего обнаружить sniffer в сети является Sentinel ( http://www.packetfactory.net/projects/sentinel/). Эта утилита реализует указанные две проверки плюс еще одну, основанную на том, что если сниффер увидит в сети незнакомый ip он сделает reverse DNS look-up, который можно увидеть. собственно, опять же «правильный» сниффер ничего такого делать не будет. Существует еще несколько методик поиска, могущих применяться с переменным успехом, однако вцелом идеальным решением остается применение коммутаторов. административные меры Как ни странно, увольнение одного нарушителя может надолго отбить охоту у других повторять его эксперименты. Безусловно, это относится не только к снифферам. Дополнительная информация Обзор некоммерческих IDS перевод на русский Snort FAQ, выполненный Романом Лепешковым. 3.4. А чем бы мне проверить, какие порты у меня открыты? А как просканировать себя на «дырки?» Надо поискать в своем дистрибутиве nmap. Если его там нет, ругнуть составителя дистрибутива и пойти на http://www.insecure.org/nmap, скачать, собрать, применить. В качестве «просто» сканнера безопасности взять Nessus (homepage - http://www.nessus.org/), заслуживший «рекомендации лучших собаководов» в лице Jet Infosystems и ФАПСИ. 3.5 Как безопасно соединить два (три, десять) офиса через Internet? Технология, которая вам нужна называется VPN (Virtual Private Network). Самым развитым на текущий момент средством для создания VPN является набор протоколов IPSec. В Linux существует несколько реализаций IPsec. Для ядер ветки 2.4 и более ранних поддержка реализована в рамках проекта Openswan; для ядер ветки 2.6 рекомендуется пользоваться встроенным стеком IPSec. Среди других способов для создания VPN можно отметить pptp (и L2TP, http://www.l2tpd.org/), STunnel (http://www.stunnel.org/), VTun и OpenVPN. Мы не рекомендуем вам пользоваться pptp без крайней необходимости. Протокол pptp в реализации от Microsoft подвержен многочисленным уязвимостям, описание которых можно взять, например, здесь: http://www.ssl.stu.neva.ru/psw/crypto/pptp.html и локальную копию (спасибо за ссылку Денису Матыцыну). Ни при каких обстоятельствах мы не рекомендуем вам пользоваться протоколом FWZ (разработка компании Checkpoint, применяющаяся в линейке продуктов Firewall-1/VPN-1). Протокол FWZ подвержен уязвимости, позволяющей туннелировать любой UDP траффик внутрь защищенного периметра. Подробнее об уязвимости можно прочитать здесь: http://www.cert.org/advisories/CA-2001-17.html. 3.6. Известен некоторый MAC-адрес. Как можно определить по нему IP адрес? http://www.habets.pp.se/synscan/programs.php?prog=arping Предупреждаю - штука капризная, работает не всегда и не у всех. Связано это с широковещательной природой arp, скоростями работы сети и фазой луны. Но попробовать не мешает. 3.7. Как копировать всю электронную почту компании, проходящую через сервер? Вообще-то, это неэтично. Кроме того, электронная почта может попадать под действие закона о конфиденциальности почтовой переписки, так что такое копирование (даже если «директор фирмы велел») может быть наказуемо. Мы настоятельно рекомендуем проконсультироваться в юридическом отделе вашей компании, прежде чем начинать «играть в Большого Брата». Для sendmail Копирование почты средствами sendmail описано в Sendmail FAQ, вопрос 4.20. Локальная копия статьи в новостную группу доступна тут, так же доступна локальная копия logall.c. Для Postfix Прочтите man-страницу cleanup(8), обратите внимание на опцию always_bcc. Для Exim По этому поводу есть FAQ по адресу http://www.exim.org/exim-html-4.30/doc/html/FAQ_19.html#TOC348. Единственное, там описывается процесс копирования только исходящей почты. Если же надо копировать всю почту, то вот миниFAQ не претендующий на единственно верное решение: Определить system-filter system_filter = /usr/local/system_filter.exim system_filter_directory_transport = local_copy_outgoing /usr/local/system_filter.exim: if $sender_address_domain is domain.ru then unseen save /var/mail/backup/${lc:$sender_address}/outgoing/ endif Определить transport`s local_copy_incoming: driver = appendfile directory = /var/mail/backup/$local_part@$domain/incoming delivery_date_add envelope_to_add return_path_add group = mail user = mail mode = 0660 maildir_format = true create_directory = true local_copy_outgoing: driver = appendfile delivery_date_add envelope_to_add return_path_add group = mail user = mail mode = 0660 maildir_format = true create_directory = true И последнее, задать в траспорте для доставки локальным пользователям shadow_transport local_delivery: shadow_transport = local_copy_incoming Спасибо Алексею Синицыну за информацию о exim. 3.8. А что такое IDENT и зачем он нужен? Сервис IDENT предназначен для определения имени пользователя на удаленной клиентской системе, который подключился к вашему серверу. Сервер ident ожидает соединения на порту 113/tcp (обычно запускается через inetd). Протокол ident описан в RFC 1413. С работой сервиса IDENT связаны три особенности: сервис сообщает удаленной стороне имена локальных пользователей, что может использоваться при атаке сервер ident "знает" только о локальных пользователях, что может привести к проблемам в случае NAT если производится фильтрация порта 113/tcp без уведомления другой стороны о фильтрации пакета (действие DROP в iptables), это может привести к задержке при соединениях с серверами, которые проверяют ident Для решения первой и второй проблемы разработаны несколько ident серверов, которые не сообщают имени пользователя а так же поддерживают NAT. Для решения третьей проблемы, фильтруя порт ident, используйте REJECT а не DROP. Обычно сервер ident можно безболезненно отключить. Практически единственным сервисом, для работы которого часто требуется ident, является irc. Дополнительная информация RFC 1413 - Identification Protocol 3.9. Как избавить пользователей от просмотра баннеров, не дать скачивать mp3 и т.д.? Можно отфильтровывать это на прокси-сервере. Для этого существует ряд программ-редиректоров, например, «Режик». 3.10. Как шифровать почту? Наш системный администратор прочитал совет 3.7 и архивирует всю почту. Чем можно защитить свою переписку? Право на частную жизнь, безусловно, является основополагающим в свободном обществе. Понимая это, Филипп Циммерманн создал программу, которую назвал «PGP - Pretty Good Privacy». Среди функциональных возможностей программы есть возможность посылки зашифрованных сообщений по электронной почте. Существует так же свободная реализация, совместимая с PGP - GNU Privacy Guard. За более подробной информацией обратитесь к GnuPG Handbook, стандарту OpenPGP, описанному в RFC2440 и HOWTO о проведении встреч для обмена ключами GnuPG ( оригинальная версия и перевод на русский язык). Дополнительная информация The GNU Privacy Handbook на сайте GnuPG; RSA против ElGamal в PGP; FIDO RU.CRYPT FAQ; Обсуждение длин ключей симметричных и ассиметричных алгоритмов шифрования. 3.11. Как обнаружить присутствие NAT? Как избежать обнаружения? Поиск устройств, скрытых за трансляцией адресов и противодействие ему — это борьба брони и снаряда. Как и в ситуации с прослушиванием сетевого трафика, до победы еще далеко, и кому она достанется — пока не ясно. Механизмы обнаружения NAT основаны на том, что сетевой трафик, порождаемый различными хостами, имеет отличающиеся характеристики. Например, начальное значение TTL (в Windows - 128, а в Linux - 64) отличается в различных операционных системах и, как правило, известено и статично. Наблюдая в сети пакеты с различным значением TTL, приходящим с одного и того же сетевого устройства, можно предположить, что это устройство осуществляет трансляцию адресов. Так же, наблюдение TTL, на единицу меньше ожидаемого значения, может говорить о наличии NAT (в этом случае предполагается, что NAT-устройство уменьшит TTL при маршрутизации пакета). Кроме того, для обнаружения NAT могут использоваться аномалии в IP ID, TCP Timestamp и трассировка открытого соединения. Как правило, все эти меры можно успешно нейтрализовать за счет качественной нормализации трафика, выполняемой на устройстве с NAT. Использование NAT в режиме сетевого моста (без уменьшения значения TTL) позволит избежать обнаружения за счет TTL и трассировкой соединения. Дополнительная информация Техника обнаружения NAT, (локальная копия). 3.12. Кто-то пытается подобрать пароль по SSH. Как с этим бороться? Можно использовать pam_abl, позволяющий автоматически помещать в черный список на заданное время системы, с которых производятся попытки подбора пароля. Этот модуль PAM может работать не только с sshd, но и с другими демонами, поддерживающими аутентификацию через PAM. Другое решение состоит в использовании Swatch для анализа /var/log/messages и поиска сообщений об ошибочной аутентификации в sshd.ПЮГДЕКШ ОПНЕЙР ЩКЕЙРПНОПНБНДЙЮ МЮПД ЙНПНРЙХИ ЯОЕЖНАСБЭ ЙБМ УКЕАНПЕГЙЮ ЮУЛ ГХОКНЙ РЕОКНКЧЙЯ РНМХПНБЮМХЕ ЯРЕЙКНОЮЙЕРНБ ГЮКНЦ ЙНЯРПНЛЮ ГХОКНЙ ЯЕКХМ ДХНМ АХКЕР НПЦЮМХГЮЖХЪ ОНУНПНМ ЙНПОЮПЮРХБМШЕ ОПЮГДМХЙ ОНЛХДНП ЙСОКЪ ГСАМНИ ЙЮЛЕМЭ ДБЮ ЖБЕР ПЮЙ ОХЫЕБНД БНЯЯРЮМНБКЕМХЕ ХМТНПЛЮЖХЪ ЙНМЖЕОЖХЪ ЯНБЕПЬЕМЯРБНБЮМХЕ ЯАШРЮ ЩКЕЙРПХВЕЯЙХИ ОПНВМНЯРЭ ЙКЕХРЭ 88 КЧЙЯ СЖЕМЕММШИ УНКНДХКЭМХЙ ТПЮМЖСГЯЙХИ БХМЮ longines ПНЯЯХИЯЙХИ ТКЮЦ ПЕДХГЮИМ ЙНЯРПНЛЮ МЮАНП ЦХМЕЙНКНЦХВЕЯЙХИ КХДН ОЕЙЮПМЪ ГЮЙЮГЮРЭ НАЕД НГНМЮРНП БНГДСУЮ МЮПД online НУНРЮ КЕЦЮБШИ ПЕЬЕРЙЮ НЖХМЙНБЮММШИ БХУПЕБНИ РЕОКНЦЕМЕПЮРНПШ КХДН ОЕЙЮПМЪ АНКЕМ ЮКЙНЦНКХГЛНЛ 5440.15 (ЙПШЬЙЮ) НДЕБЮМХЕ АЮУХКЮ АЧПН ОНУНПНММШИ СЯКСЦЮ ЮМРХЦНКНКЕДМШЕ ПЕЮЦЕМР ЦСО ПХРСЮК БПЕЛЪ БКЮДХЛХП ЩРХЙЕРХПНБЫХЙ ppg ЙПЮЯЙЮ БЮЦНМЙЮ ОНКНБНИ ДНЯЙЮ ГЮДМХИ ГЕПЙЮКН АЧЦЕКЭМШЕ ГСАМНИ ОПНРЕГ ЙНПОЮПЮРХБМШЕ ОПЮГДМХЙ ГНМЮ НЦПЮМХВЕМХЕ ДНЯРСО ОЕЯЙНЯРПСИЙЮ ЛЮЬХМЮ r-600 ТКЧНПЕЯЖЕМРМШИ ЙПЮЯЙЮ ТКЮФНЙ МЮЯРНКЭМШИ dunlup 205 55 r16 ЙПЮЯЙЮ ДБСУЙНЛОНМЕМРМШИ o2 optix ЙСОХРЭ ЪИЖЕБЮПЙС ЛЕФДСМЮПНДМШИ ЙНМЙСПЯ ДЕАЧРЮМР ЩКЕЙРПНЯВЕРВХЙ ЦЮЛЛЮ ЦХПЪ РНПЦНБШИ ЙЮКХАПНБНВМШИ ОЕФН 407 ЮБХЮ НРОПЮБЙЮ УКЕАНПЕГЙЮ ЮУЛ ЩЙЯРПЮЙР ЙНПЕМЭ КНОСУ ЯСУ. ЙНПОНПЮРХБМШИ НАЯКСФХБЮМХЕ МСФЕМ ТНРНЦПЮТ ПЕТЙНМРЕИМЕПШ ОЕФН 407 ziplock ДНЯРЮБЙЮ НЙНМ БХРПХМЮ ОНДНЦПЕБЮЕЛШИ ФЮПНЯРНИЙХИ ЙПЮЯЙЮ БШОХЯЙЮ ЕЦПО ОЮЙЕР ЦПХООЕП kiev apartaments rent КЕВЕМХЕ ГЮПСАЕФНЛ НПЙЕЯРП ЙПЕНКЭЯЙХИ РЮМЦН dunlup 205 55 r16 ОПНЛЮКЭО ЯРЮКЭМНИ РНОЙХИ spartherm ДХЮЦМНЯРХВЕЯЙХИ ЯРЕМД ХГЛЕПХРЕКЭ ЯНОПНРХБКЕМХЕ ЖБЕР КЮЛХМЮРЮ ЙКЮЯЯ 32 ПЮЙ ОХЫЕБНД ЛЮЯКН ТНПЛЮ РЕКЕЛЮРХВЕЯЙХЕ ЯКСФАЮ ДНЯРЮБЙЮ МЮОХРНЙ ХБЮМНБЕЖ ТКЮФНЙ МЮЯРНКЭМШИ РПНИМХЙ ЙСКЕП 478 ziplock БПЮВ ЮЙСЬЕП ЦХМЕЙНКНЦ ЙБМ ЯРНЛЮРНКНЦХВЕЯЙХИ СЯКСЦЮ ХБЮМНБЕЖ renu multiplus 355ЛК МЕЯРЮМДЮПРМШИ ЙНПНАЙЮ ЮМРХНАКЕДЕМХРЕКЭМШЕ ЯХЯРЕЛЮ ЙАЕ ЩКЕЙРПНОЕВЭ dimplex model lee rc ХГЛЕПХРЕКЭМШИ ЙНЛОКЕЙЯ Й2-79 БХМХКНБШИ ДХПХФЮАКЭ ЩДЮЯ-134 ЮДЕМНЛЮ ОПЕДЯР.Ф-ГШ zip lock ЛЮЦМХРМШИ ПЕЬЕРЙЮ ЦХОЯНЙЮПРНМ ЩЛФЯ АЧПН ОНУНПНММШИ СЯКСЦЮ НАКХЖНБЙЮ ОЮМЕКЭ i`m o.k./ЦЕПНХ ЦПНА gislaved НРГШБ РНМХПНБЮМХЕ ЮБРН РЕММХЯМШИ ПЮЙЕРЙЮ ЙНПОНПЮРХБМШИ ХМНЯРПЮММШИ НФХПЕМХЕ ЮКЭОХМХГЛ ЖЕМРП ЙНМЯСКЭРХПНБЮМХЕ motorola v3i ЙСОХРЭ ОПНТЕЯЯХНМЮКЭМШИ ОЯХУНКНЦ ЯЙЮВЮРЭ ЙНПНРЙХИ МЮПД ЛЮЯЙЮ ЙНЯЛЕРХВЕЯЙХИ ЯОЕЖНАСБЭ НУНРЮ КХЯ БШОХЯЙЮ ЕЦПО ЯНГДЮМХЕ КНЦН ЮЩПНЦПЮТХЪ АЮМЙНБЯЙХИ ЯЕИТНБШЕ ЪВЕИЙЮ hi-fi ЯПНВМШИ ОЕПЕБНД НПЙЕЯРП ЙПЕНКЭЯЙХИ РЮМЦН МЮПД ЯЙЮВЮРЭ hi-fi omega НАКХЖНБЙЮ ЩКЕЙРПНЙЮЛХМ АЧПН ОЕПЕБНДВХЙ ОПНЦПЮЛЛЮ ЬХТПНБЮМХЕ ДЮММШИ