Change Software View->Start with Products) 2. Выделяем MailUtilities.Runtime и MailUtilities.Manuals для установки 3. Отменяем NFS.Runtime.NIS-CLIENT для установки (также отменяется KEY-CORE и NIS-CORE) 4. Выделяем NFS.Runtime.NFS-64SLIB для установки 5. Отменяем Networking.MinimumRuntime.PPP-RUN для установки 6. Выбираем OS-Core.Manuals для установки 7. Выбираем SOE для установки 8. Выбираем SecurityMon для установки 9. Выбираем Streams.Runtime.STREAMS-64SLIB для установки 10. Выбираем SystemAdmin.Runtime для установки 11. Выбираем TextEditors.Runtime и TextEditors.Manuals для установки 12. Выполняем анализ инсталляции (Actions->Install (analysis)) Мы выбрали минимальную установку HP-UX. Не будет установлена система X window и много других ненужных программ. Мы удаляем большинство NFS программ, потому что они имеют множество проблем защиты. Мы также удаляем PPP-RUN fileset, потому что мы не используем PPP. Для целей сопровождения системы мы устанавливаем SAM, программы для электронной почты и текстовые редакторы. Мы будем использовать коммерческую особенность защиты HP-UX, так что мы должны выбрать SecurityMon, и программы SOE (SecurityMon содержат команды и документацию для ревизии и доверия системным компонентам, а SOE содержит команду pwconv, которую мы будем позже использовать). Наконец, так как мы устанавливаем на 64-bit hardware, мы выбираем 64-bit библиотеки для NFS и STREAMS, которые требуются для различных приложений. Также стоило бы удалить другие программы типа SNMP (OVSNMPAgent), но множество других программ зависят от них (хотя непонятно почему). Мы отключим SNMP и другие программы, которые трудно или невозможно удалить. Установка дополнительных программ. В этом разделе, вы должны установить любые дополнительные программы HP, которые требуются на компьютере, например сетевые драйверы для добавочных LAN плат, или других программ, которые вы планируете использовать подобно LVM Mirror. Также потребуется дополнительная программа (команда make_recovery) для создания резервной копии. Установка заплат + связывание в единое целое Затем мы устанавливаем все General Release (GR) заплаты для самого последнего HP-UX 11.0. HP постоянно обновляет набор заплат, распространяя их на компакт диске. Используйте swinstall, чтобы установить GR. Установка дополнений безопасности. Затем проверяем, какие из заплат защиты должны быть установлены. Заплаты для HP-UX доступны через анонимный FTP сервер ftp://ftp.itrc.hp.com/hp-ux_patches/. "HP-UX Patch Security Matrix" (ftp://ftp.itrc.hp.com/export/patches/hp-ux_patch_sum) содержит список текущих заплат защиты для каждой платформы HP-UX и комбинации версий операционных систем (например, s800 11.00). Имеется также список MD5 проверочных кодов (ftp://ftp.itrc.hp.com/export/patches/hp-ux_patch_sum) для каждой заплаты, которые могут использоваться для проверки того, что ваши заплаты оригинальны. Каждая заплата устанавливаемая в системе, должна быть проанализирована, чтобы определить, требуется ли ее установка. Сначала Вы должны проверить, установлена ли она раньше со средств установки или связок заплат. Вы можете просмотреть детальную информацию о заплате в patch.text. файле, включая зависимости, эффект filesets, и исправленные файлы. Вы можете определить filesets, установленный на системе, выполняя swlist -l fileset. Факт существования заплаты не подразумевает, что вы должны установить ее так. Некоторые заплаты могут фиксировать дефекты переполнения буфера или другие каналы нападения в командах set-uid root или в процессах корня. Если вы планируете удалять set-uid биты, вы можете не устанавливать заплаты к ним. Вы также можете не иметь конфигурированной программы (например, rlogind), но иногда трудно определить, является ли дефект дистанционным или локальным. Если вы не уверены, должна ли специфическая заплата быть установлена, лучше установить ее. Вы также должны исследовать непосредственно бюллетени защиты (http://itrc.hp.com/ - для доступа нужно зарегистрироваться), потому что не все бюллетени защиты приводят к заплате, например, имеется бюллетень защиты о проблеме значения по умолчанию PMTU, который рекомендует, чтобы значение по умолчанию было изменено, используя ndd (HPSBUX0001-110) а также существует серьезная проблема пустых паролей при использовании Ignite-UX и доверенных системы (HPSBUX0002-111). Ручной анализ заплат защиты может занять длительное время; и из-за этого часто он выполняется не полностью или не выполняется вообще. Это - одна из первичных причин разрушения защиты. Разрушение защиты связанно с ослаблением защиты системы через какое-то время, из-за неизбежных изменений первоначальной конфигурации; например неисправленная уязвимость защиты, найденная в установленном программном обеспечении. К счастью, имеется способ уменьшить ручной анализ заплат защиты. Security_patch_check (http://www.software.hp.com/cgi-bin/swdepot_parser.cgi/cgi/displayProductInfo.pl?productNumber=B6834AA) - утилита, которая может использоваться, чтобы автоматизировать многие из шагов, выполненных в процессе анализа заплаты защиты. Она использует на входе "Security patch catalog" (ftp://ftp.itrc.hp.com/export/patches/security_catalog) и swlist (1M) на выходе, чтобы определить, какие из заплат защиты могут отсутствовать в системе, и генерирует сообщение, содержащее рекомендуемые заплаты. Исправление установок по умолчанию Следующие шаги мы должны использовать после установки операционной системы: 1. Удалите сохраненные заплаты. В процессе инсталляции системы, копии всех изменяемых файлов хранятся в /var/adm/sw/save/. Для удаления заплат исполните следующую команду: # Swmodify -x patch_commit=true '*. * ' 2. Преобразуйте доверенную систему: 1. # /usr/lbin/tsconvert 2. Creating secure password database... 3. Directories created. 4. Making default files. 5. System default file created... 6. Terminal default file created... 7. Device assignment file created... 8. Moving passwords... 9. secure password database installed. 10. Converting at and crontab jobs... 11. At and crontab files converted. 12. # passwd root Пароли на существующих учетных записях истекут в результате преобразования. Также вы можете включить аудит. 3. Ужмите глобальные привилегии. По умолчанию привилегия CHOWN - глобальная привилегия и применяется ко всем группам: $ getprivgrp global privileges:CHOWN Непривилегированные пользователи действительно не должны быть способными делать chown файлам другим пользователям; в Linux например, только супер-пользователь может изменять владельца файла. /sbin/init.d/set_prvgrp выполняется по умолчанию при запуске системы и выполняет команду /usr/sbin/setprivgrp -f /etc/privgroup, если /etc/privgroup существует. Мы можем создать файл конфигурации, который удалит все привилегии для всех групп: # getprivgrp global privileges: CHOWN # echo -n >/etc/privgroup # chmod 400 /etc/privgroup # /sbin/init.d/set_prvgrp start # getprivgrp global privileges: 4. Устраните проблемы PAM CDE: SAM выполняет некоторые проверки правильности на /etc/pam.conf, который вовлекает попытку найти команду, используя несколько различных путей для каждого service_name. Хотя мы и не устанавливали CDE, все же наш pam.conf файл содержит входы dtlogin и dtaction для каждого из типов PAM модуля; например: dtlogin auth required /usr/lib/security/libpam_unix.1 dtaction auth required /usr/lib/security/libpam_unix.1 5. Устраните запуск hparray. По некоторым причинам имеется запуск символьных указателей (symlinks pointing), чтобы выстроить сценарий запуска, который содержится в filesets, в котором мы не нуждаемся (OS-ЯДРО. C2400-UTIL и OS-ЯДРО. МАССИВ - MGMT) так что мы удаляем их: # for f in /sbin/rc*.d/*; do [ ! -f $f ] && echo $f; done /sbin/rc1.d/K290hparamgr /sbin/rc1.d/K290hparray /sbin/rc2.d/S710hparamgr /sbin/rc2.d/S710hparray # rm /sbin/rc1.d/K290hparamgr # rm /sbin/rc1.d/K290hparray # rm /sbin/rc2.d/S710hparamgr # rm /sbin/rc2.d/S710hparray 6. Установленное по умолчанию значение umask. Один побочный эффект преобразования к доверенной системе, является то, что значение по умолчанию umask 0, преобразовано к 07077. 7. Ограничите корневой вход в систему консолью. 8. # echo console > /etc/securetty 9. # chmod 400 /etc/securetty 10. Разрешие inetd вход. Добавьте -l параметр к INETD_ARGS переменной среды в /etc/rc.config.d/netdaemons: export INETD_ARGS=-l 11. Удалите ненужные псевдо-учетные записи. Сначала мы исследуем некоторые группы, которые могли бы быть удалены; наша основная стратегия состоит в том, если не имеется никаких процессов, которые выполнены с данным пользователем или группой, и не имеется никаких файлов, принадлежащих пользователю или группе, мы удаляем их: # find / -group lp -o -group nuucp -o -group daemon -exec ls -ld {} \; # groupdel lp # groupdel nuucp # groupdel daemon # find / -user uucp -o -user lp -o -user nuucp -o -user hpdb \ > -o -user www -o -user daemon -exec ls -ld {} \; # userdel uucp # userdel lp # userdel nuucp # userdel hpdb # userdel www # userdel daemon Для остающихся псевдо-учетных записей (bin, sys и adm), Вы должны изменить оболочку входа в систему к некоторому недопустимому пути, например /, или рассмотрите использование noshell программы Titan (http://www.fish.com/titan/). # pwget -n bin bin:*:2:2:NO LOGIN:/usr/bin:/ 12. Конфигурируйте nsswitch.conf политику Если вы хотите сконфигурировать DNS, вы можете сделать это сейчас. Вы можете заставить nsswitch.conf искать только местные файлы: # cp /etc/nsswitch.files /etc/nsswitch.conf # chmod 444 /etc/nsswitch.conf 13. Измените основной root каталог к /root. Мы изменяем основной root каталог от значения по умолчанию / к /root. Отредактируйте /etc/passwd, и измените root вход к: root:*:0:3::/root:/sbin/sh Тогда сформируйте каталог, и обновите TCB: # mkdir /root # chmod 700 /root # mv /.profile /root # pwconv Обновите, если требуется tcb, чтобы соответствовать /etc/passwd. Отключение сетевых служб 1. Отключите службу inetd Мы должны быть способны идентифицировать каждую TCP и UDP службу выдаваемую netstat -af inet. Службы, которые не необходимы или не могут быть защищены, должны быть заблокированы. Примеры таких служб включают UDP и TCP small servers, подобно ECHO, chargen, daytime, time и discard; Berkeley r*, talk, и т.д. Некоторые компьютеры имеют полностью пустой inetd.conf. Если вы используете пустой inetd.conf, вы можете вообще не выполнять inetd. Вы можете отключать запуск и завершение inetd, удаляя соответствующие символьные связи в rc каталогах: # Rm /sbin/rc2.d/S500inetd # Rm /sbin/rc1.d/K500inetd Для оставшихся сервисов, рассмотрите использование inetd.sec, который разрешает идентификацию основанную на IP адресах для отдаленных систем. 2. Отключите другие службы А. Отключите доступ из сети к syslogd. Б. Отключите SNMP демон. Отредактируйте файлы конфигурации запуска SNMP: 1. /etc/rc.config.d/SnmpHpunix Set SNMP_HPUNIX_START to 0: SNMP_HPUNIX_START=0 2. /etc/rc.config.d/SnmpMaster Set SNMP_MASTER_START to 0: SNMP_MASTER_START=0 3. /etc/rc.config.d/SnmpMib2 Set SNMP_MIB2_START to 0: SNMP_MIB2_START=0 4. /etc/rc.config.d/SnmpTrpDst Set SNMP_TRAPDEST_START to 0: SNMP_TRAPDEST_START=0 C. Отключите демон swagentd (SD-UX). Выполнить это достаточно сложно. Сценарий swagentd исполняется сначала при запуске, и исполняет различные задачи, основанные на параметре имени программы. Например, если он выполняется, как S100swagentd, он удалит файлы, перечисленные в /var/adm/sw/cleanupfile. Также, чтобы работал должным образом сценарий swconfig, swagentd должен выполнятся. Наше решение состоит в том, чтобы создать новый сценарий, который будет сконфигурирован, чтобы немедленно уничтожить демон swagentd после S120swconfig. Вот ключевая часть уничтожающегося сценария: start) /usr/sbin/swagentd -k sleep 1 findproc swagentd if [ "$pid" != "" ]; then kill $pid sleep 5 findproc swagentd if [ "$pid" != "" ]; then kill -9 $pid sleep 5 findproc swagentd if [ "$pid" != "" ]; then echo "UNABLE TO KILL SWAGENTD PROCESS!!!" rval=3 # REBOOT!!! fi else rval=0 fi else rval=0 fi ;; Мы пытаемся уничтожить демон 3 раза, с увеличением уровня силы. Если мы не можем остановить демон, используя kill -9, мы устанавливаем rval=3, который вызовет перезагрузку. Для конфигурирования, используем следующее: # cp /tmp/swagentdk /sbin/init.d # chmod 555 /sbin/init.d/swagentdk # ln -s /sbin/init.d/swagentdk /sbin/rc2.d/S121swagentdk # rm /sbin/rc2.d/S870swagentd # rm /sbin/rc1.d/K900swagentd D. Отключите демон sendmail Установите переменную среды SENDMAIL_SERVER в 0 в /etc/rc.config.d/mailservs: export SENDMAIL_SERVER=0 E. Отключите демон rpcbind Мы не планируем выполнять какие либо RPC сервисы, и нуждаемся в отключении запуска rpcbind (это - portmap замена на HP-UX 11.0). После некоторого просмотра в /etc/rc.config.d мы находим, что rpcbind начинается со сценария nfs.core, так что мы отключаем его в rc каталогах запуска. # rm /sbin/rc1.d/K600nfs.core # rm /sbin/rc2.d/S400nfs.core # mv /usr/sbin/rpcbind /usr/sbin/rpcbind.DISABLE Также это приведет к отключению запуска nfskd процесса, который мы видели в предыдущем выводе ps. После перезагрузки, чтобы проверить модификации, сделанные сценариями запуска, мы можем проверить netstat и lsof выводы и проверить, чтобы не осталось никаких сетевых сервисов. Мы можем также снова проверить вывод ps, чтобы проверить, что заблокированный демон не был запущен: # nettlconf -L -console 0 # nettl -stop # nettl -start Initializing Network Tracing and Logging... Команда Nettlconf изменяет файл конфигурации nettl, /etc/nettlgen.conf, так что это изменение сохранится поперек системных запусков. Pwgrd – кэширующий демон для паролей и групп. Так как мы имеем очень маленький файл паролей и груп, то демон нам не нужен. Также, небольшой анализ работы с lsof и tusc (Trace Unix System Calls) показывает нам, что они прослушиваются на сокетах домена Unix для клиентских запросов, и мы не хотим позволять командные каналы, подобно этим процессам, выполняющимся как root, так что у нас есть дополнительный стимул отключить их: Установите переменную среды PWGR в 0 в /etc/rc.config.d/pwgr: PWGR=0 Мы также удаляем устаревшие сокеты, которые предотвратят ненужные libc создание сокета и запросы несуществующему pwgrd слушателю: # Rm /var/spool/pwgr/* # Rm /var/spool/sockets/pwgr/* Ptydaemon - загадочный демон. Как нам кажется он используется только как vtydaemon, который мы не используем. Мы уничтожаем его, и проверяем, можем ли мы все еще входить в систему дистанционно (мы временно даем возможность telnetd проверить это). Все работает прекрасно, так что можно отключить запуск ptydaemon: Установите переменную среды PTYDAEMON_START в 0 в /etc/rc.config.d/ptydaemon: PTYDAEMON_START=0 Очистка старого файла регистрации: # Rm /var/adm/ptydaemonlog Исследование установленных программ. Многие Unix системы, включая HP-UX, поставляются с многочисленными программами, которые являются set-uid или set-gid. Многие из этих программ не используются или используются только root пользователем. Многие из уязвимостей, которые обнаружены в Unix утилитах, полагаются на the set-uid root, чтобы поднять привилегии. Вы можете улучшить защиту вашей системы, удаляя эти программы или, удаляя set-id bit. Чтобы получить список всех файлов у set-uid или gid bit на системе, вы можете выполнить: # find / \( -perm -4000 -o -perm -2000 \) -type f -exec ls -ld {} \; Вы, скорее всего, увидите более чем 100 файлов (в типовой конфигурации их 145). Вы можете обратить внимание, что имеются два набора команд LVM (в /sbin/ и /usr/sbin /), каждая с более чем 25 ссылок, которые являются set-uid root. Также, SD команды - set-uid root. Следующие изменения разрешений сильно уменьшат размер вашего set-id списка: # chmod u-s /usr/sbin/swinstall # chmod u-s /usr/sbin/vgcreate # chmod u-s /sbin/vgcreate Вы также обратите внимание, что имеются некоторые общедоступные библиотеки, которые имеют множество наборов set-uid bit; причина для этого неизвестна, однако безопасно удалить их. Если вы предварительно не удалили все сохраненные файлы заплат в /var/adm/sw/save /, вы можете быть удивлены увидев, что они сохранились как set-id. Они защищены от исполнения не-корневыми пользователями из-за 500 режима на /var/adm/sw/save/ каталоге. Наша стратегия состоит в том, чтобы удалить set-id bits из всех файлов, а затем выборочно добавлять их к некоторым программам, которые должны быть выполнены не-корневыми пользователями. Следующие команды удалят универсальный set-uid и set-gid bits из всех файлов, затем обратно добавляют их к SU и к общедоступной версии lib PAM команды passwd: # find / -perm -4000 -type f -exec chmod u-s {} \; # find / -perm -2000 -type f -exec chmod g-s {} \; # chmod u+s /usr/bin/su # chmod u+s /usr/bin/passwd /usr/bin/passwd имеет 5 ссылок и включает, chfn, chsh, nispasswd и yppasswd. Команды, которым вы оставляете set-id, зависят от определенного использования и политики вашего компьютера. Во многих случаях, /usr/bin/su может быть единственная программа на системе, которая должна быть set-uid. Множество команд будет прекрасно функционировать без привилегий, используя значение по умолчанию или обычно используемые опции, включая bdf, uptime и arp - однако некоторые функциональные возможности могут быть потеряны для некорневых пользователей. Например, вы больше не сможете определить параметр filesystem для bdf: $ bdf /dev/vg00/lvol3 bdf: /dev/vg00/lvol3: Permission denied Исследование разрешений файлов. Недавно установленная система HP-UX будет содержать множество файлов, которые могут быть перезаписаны другими (002 бит установлен в битах режима). Эти файлы могут быть перечислены следующей командой: # find / -perm -002 ! -type l -exec ls -ld {} \; Мы не отображаем символьные линки с записями дополнительных установочных битов, потому что биты режима не используются для проверки разрешения. Один из подходов состоит в том, чтобы удалить запись дополнительных битов от всех файлов, и выборочно добавлять их к тем файлам и каталогам, где это необходимо. Следующая команда удаляет запись дополнительных битов из всех файлов с этим набором: # find / -perm -002 ! -type l -exec chmod o-w {} \; Теперь мы разрешаем разрешения файлов, которые должны быть перезаписываемыми другими пользователями: # chmod 1777 /tmp /var/tmp /var/preserve # chmod 666 /dev/null Обратите внимание, что мы также устанавливаем второй промежуточный бит(sticky bit) (01000) в перезаписываемых каталогах подобно /tmp и /usr/tmp. Это предотвратит непривилегированных пользователей от удаления или переименования файлов в каталогах, которые им не принадлежат. Настройка защиты сети. HP-UX 11 содержит команду ndd, чтобы исполнить настройку сети. Ndd -h выводит справку для каждого поддерживаемого и неподдерживаемого ndd tunable параметра, который может быть изменен. После исследования этого списка, мы решаем, что следующие - кандидаты на изменение на компьютере: Сетевое устройство Параметр Значение по умолчанию Предлагаемое значение /dev/ip ip_forward_directed_broadcasts 1 0 /dev/ip ip_forward_src_routed 1 0 /dev/ip ip_forwarding 2 0 /dev/ip ip_ire_gw_probe 1 0 /dev/ip ip_pmtu_strategy 2 1 /dev/ip ip_send_redirects 1 0 /dev/ip ip_send_source_quench 1 0 /dev/tcp tcp_conn_request_max 20 500 /dev/tcp tcp_syn_rcvd_max 500 500 /dev/ip ip_check_subnet_addr 1 0 /dev/ip ip_respond_to_address_mask_broadcast 0 0 /dev/ip ip_respond_to_echo_broadcast 1 0 /dev/ip ip_respond_to_timestamp_broadcast 0 0 /dev/ip ip_respond_to_timestamp 0 0 /dev/tcp tcp_text_in_resets 1 0 Некоторые из значений по умолчанию соответствуют нашему привилегированному значению, но мы можем выбирать устанавливать их так или иначе, на всякий случай, так как значение по умолчанию может в будущем измениться. Ndd поддерживает -c опцию, которая просматривает значения и перестраиваемый список из файла /etc/rc.config.d/nddconf. Однако, имеются некоторые проблемы с заданной по умолчанию установкой. Сначала, во время этой записи, ndd -c только способен обработать 10 перестраиваемых списков (tunables) в nddconf. Затем, ndd -c выполняется в конце net сценария, который появляется после того, как сетевые интерфейсы были сконфигурированы. Одна из проблем это то, что мы слишком поздно устанавливаем ip_check_subnet_addr, если мы используем подсетевой нуль (subnet zero) в локальной части сети. Более важно, установить tunables прежде, чем сетевые интерфейсы сконфигурированы (проблема упорядочения была устранена в одной из заплат, но ограничение в 10 tunable все равно осталось). В качестве искусственного приема, мы можем использовать новый startup скрипт и файл конфигурации: # cp /tmp/secconf /etc/rc.config.d # chmod 444 /etc/rc.config.d/secconf # cp /tmp/sectune /sbin/init.d # chmod 555 /sbin/init.d/sectune # ln -s /sbin/init.d/sectune /sbin/rc2.d/S009sectune Sectune и примеры secconf доступны для загрузки: http://people.hp.se/stevesk/secconf и http://people.hp.se/stevesk/sectune. Установка программного обеспечения и тестирования конфигурации. В этом месте вы можете устанавливать, проверять и конфигурировать прикладные программы, которые вы будете использовать на компьютере, типа BIND, Web сервера, firewall и т.д. Программное обеспечение для безопасности, типа SSH и TCP wrappers могут быть установлены на этом этапе, как определено в соответствии с определенными требованиями защиты и использованием компьютера. Снова, критическое предостережение должно быть осуществлено при установке нового программного обеспечения на вашем главном. Вы должны вообще получить самую последнюю версию программы, содержащее все исправления всех известных дефектов защиты. Вы можете установить программу сначала на другой системе и определить, может ли она быть защищена. Мыслите подобно нападающему, и гарантируйте, что ваш компьютер способен защитить себя с установленной программой. Создания системы восстановления конфигурации. Затем мы создаем самозагружаемую систему восстановления корневой; эта система может также использоваться, чтобы имитировать систему к другим аппаратным средствам, поддержаны с той же самой программной конфигурацией. Самый простой способ выполнить следующую команду: # /opt/ignite/bin/make_recovery -Ai Option -A specified. Entire Core Volume Group/disk will be backed up. *************************************** HP-UX System Recovery Going to create the tape. System Recovery Tape successfully created. Заключение Используя представленную методологию, вы можете создать защищенный компьютер на основе HP-UX. " /> Change Software View->Start with Products) 2. Выделяем MailUtilities.Runtime и MailUtilities.Manuals для установки 3. Отменяем NFS.Runtime.NIS-CLIENT для установки (также отменяется KEY-CORE и NIS-CORE) 4. Выделяем NFS.Runtime.NFS-64SLIB для установки 5. Отменяем Networking.MinimumRuntime.PPP-RUN для установки 6. Выбираем OS-Core.Manuals для установки 7. Выбираем SOE для установки 8. Выбираем SecurityMon для установки 9. Выбираем Streams.Runtime.STREAMS-64SLIB для установки 10. Выбираем SystemAdmin.Runtime для установки 11. Выбираем TextEditors.Runtime и TextEditors.Manuals для установки 12. Выполняем анализ инсталляции (Actions->Install (analysis)) Мы выбрали минимальную установку HP-UX. Не будет установлена система X window и много других ненужных программ. Мы удаляем большинство NFS программ, потому что они имеют множество проблем защиты. Мы также удаляем PPP-RUN fileset, потому что мы не используем PPP. Для целей сопровождения системы мы устанавливаем SAM, программы для электронной почты и текстовые редакторы. Мы будем использовать коммерческую особенность защиты HP-UX, так что мы должны выбрать SecurityMon, и программы SOE (SecurityMon содержат команды и документацию для ревизии и доверия системным компонентам, а SOE содержит команду pwconv, которую мы будем позже использовать). Наконец, так как мы устанавливаем на 64-bit hardware, мы выбираем 64-bit библиотеки для NFS и STREAMS, которые требуются для различных приложений. Также стоило бы удалить другие программы типа SNMP (OVSNMPAgent), но множество других программ зависят от них (хотя непонятно почему). Мы отключим SNMP и другие программы, которые трудно или невозможно удалить. Установка дополнительных программ. В этом разделе, вы должны установить любые дополнительные программы HP, которые требуются на компьютере, например сетевые драйверы для добавочных LAN плат, или других программ, которые вы планируете использовать подобно LVM Mirror. Также потребуется дополнительная программа (команда make_recovery) для создания резервной копии. Установка заплат + связывание в единое целое Затем мы устанавливаем все General Release (GR) заплаты для самого последнего HP-UX 11.0. HP постоянно обновляет набор заплат, распространяя их на компакт диске. Используйте swinstall, чтобы установить GR. Установка дополнений безопасности. Затем проверяем, какие из заплат защиты должны быть установлены. Заплаты для HP-UX доступны через анонимный FTP сервер ftp://ftp.itrc.hp.com/hp-ux_patches/. "HP-UX Patch Security Matrix" (ftp://ftp.itrc.hp.com/export/patches/hp-ux_patch_sum) содержит список текущих заплат защиты для каждой платформы HP-UX и комбинации версий операционных систем (например, s800 11.00). Имеется также список MD5 проверочных кодов (ftp://ftp.itrc.hp.com/export/patches/hp-ux_patch_sum) для каждой заплаты, которые могут использоваться для проверки того, что ваши заплаты оригинальны. Каждая заплата устанавливаемая в системе, должна быть проанализирована, чтобы определить, требуется ли ее установка. Сначала Вы должны проверить, установлена ли она раньше со средств установки или связок заплат. Вы можете просмотреть детальную информацию о заплате в patch.text. файле, включая зависимости, эффект filesets, и исправленные файлы. Вы можете определить filesets, установленный на системе, выполняя swlist -l fileset. Факт существования заплаты не подразумевает, что вы должны установить ее так. Некоторые заплаты могут фиксировать дефекты переполнения буфера или другие каналы нападения в командах set-uid root или в процессах корня. Если вы планируете удалять set-uid биты, вы можете не устанавливать заплаты к ним. Вы также можете не иметь конфигурированной программы (например, rlogind), но иногда трудно определить, является ли дефект дистанционным или локальным. Если вы не уверены, должна ли специфическая заплата быть установлена, лучше установить ее. Вы также должны исследовать непосредственно бюллетени защиты (http://itrc.hp.com/ - для доступа нужно зарегистрироваться), потому что не все бюллетени защиты приводят к заплате, например, имеется бюллетень защиты о проблеме значения по умолчанию PMTU, который рекомендует, чтобы значение по умолчанию было изменено, используя ndd (HPSBUX0001-110) а также существует серьезная проблема пустых паролей при использовании Ignite-UX и доверенных системы (HPSBUX0002-111). Ручной анализ заплат защиты может занять длительное время; и из-за этого часто он выполняется не полностью или не выполняется вообще. Это - одна из первичных причин разрушения защиты. Разрушение защиты связанно с ослаблением защиты системы через какое-то время, из-за неизбежных изменений первоначальной конфигурации; например неисправленная уязвимость защиты, найденная в установленном программном обеспечении. К счастью, имеется способ уменьшить ручной анализ заплат защиты. Security_patch_check (http://www.software.hp.com/cgi-bin/swdepot_parser.cgi/cgi/displayProductInfo.pl?productNumber=B6834AA) - утилита, которая может использоваться, чтобы автоматизировать многие из шагов, выполненных в процессе анализа заплаты защиты. Она использует на входе "Security patch catalog" (ftp://ftp.itrc.hp.com/export/patches/security_catalog) и swlist (1M) на выходе, чтобы определить, какие из заплат защиты могут отсутствовать в системе, и генерирует сообщение, содержащее рекомендуемые заплаты. Исправление установок по умолчанию Следующие шаги мы должны использовать после установки операционной системы: 1. Удалите сохраненные заплаты. В процессе инсталляции системы, копии всех изменяемых файлов хранятся в /var/adm/sw/save/. Для удаления заплат исполните следующую команду: # Swmodify -x patch_commit=true '*. * ' 2. Преобразуйте доверенную систему: 1. # /usr/lbin/tsconvert 2. Creating secure password database... 3. Directories created. 4. Making default files. 5. System default file created... 6. Terminal default file created... 7. Device assignment file created... 8. Moving passwords... 9. secure password database installed. 10. Converting at and crontab jobs... 11. At and crontab files converted. 12. # passwd root Пароли на существующих учетных записях истекут в результате преобразования. Также вы можете включить аудит. 3. Ужмите глобальные привилегии. По умолчанию привилегия CHOWN - глобальная привилегия и применяется ко всем группам: $ getprivgrp global privileges:CHOWN Непривилегированные пользователи действительно не должны быть способными делать chown файлам другим пользователям; в Linux например, только супер-пользователь может изменять владельца файла. /sbin/init.d/set_prvgrp выполняется по умолчанию при запуске системы и выполняет команду /usr/sbin/setprivgrp -f /etc/privgroup, если /etc/privgroup существует. Мы можем создать файл конфигурации, который удалит все привилегии для всех групп: # getprivgrp global privileges: CHOWN # echo -n >/etc/privgroup # chmod 400 /etc/privgroup # /sbin/init.d/set_prvgrp start # getprivgrp global privileges: 4. Устраните проблемы PAM CDE: SAM выполняет некоторые проверки правильности на /etc/pam.conf, который вовлекает попытку найти команду, используя несколько различных путей для каждого service_name. Хотя мы и не устанавливали CDE, все же наш pam.conf файл содержит входы dtlogin и dtaction для каждого из типов PAM модуля; например: dtlogin auth required /usr/lib/security/libpam_unix.1 dtaction auth required /usr/lib/security/libpam_unix.1 5. Устраните запуск hparray. По некоторым причинам имеется запуск символьных указателей (symlinks pointing), чтобы выстроить сценарий запуска, который содержится в filesets, в котором мы не нуждаемся (OS-ЯДРО. C2400-UTIL и OS-ЯДРО. МАССИВ - MGMT) так что мы удаляем их: # for f in /sbin/rc*.d/*; do [ ! -f $f ] && echo $f; done /sbin/rc1.d/K290hparamgr /sbin/rc1.d/K290hparray /sbin/rc2.d/S710hparamgr /sbin/rc2.d/S710hparray # rm /sbin/rc1.d/K290hparamgr # rm /sbin/rc1.d/K290hparray # rm /sbin/rc2.d/S710hparamgr # rm /sbin/rc2.d/S710hparray 6. Установленное по умолчанию значение umask. Один побочный эффект преобразования к доверенной системе, является то, что значение по умолчанию umask 0, преобразовано к 07077. 7. Ограничите корневой вход в систему консолью. 8. # echo console > /etc/securetty 9. # chmod 400 /etc/securetty 10. Разрешие inetd вход. Добавьте -l параметр к INETD_ARGS переменной среды в /etc/rc.config.d/netdaemons: export INETD_ARGS=-l 11. Удалите ненужные псевдо-учетные записи. Сначала мы исследуем некоторые группы, которые могли бы быть удалены; наша основная стратегия состоит в том, если не имеется никаких процессов, которые выполнены с данным пользователем или группой, и не имеется никаких файлов, принадлежащих пользователю или группе, мы удаляем их: # find / -group lp -o -group nuucp -o -group daemon -exec ls -ld {} \; # groupdel lp # groupdel nuucp # groupdel daemon # find / -user uucp -o -user lp -o -user nuucp -o -user hpdb \ > -o -user www -o -user daemon -exec ls -ld {} \; # userdel uucp # userdel lp # userdel nuucp # userdel hpdb # userdel www # userdel daemon Для остающихся псевдо-учетных записей (bin, sys и adm), Вы должны изменить оболочку входа в систему к некоторому недопустимому пути, например /, или рассмотрите использование noshell программы Titan (http://www.fish.com/titan/). # pwget -n bin bin:*:2:2:NO LOGIN:/usr/bin:/ 12. Конфигурируйте nsswitch.conf политику Если вы хотите сконфигурировать DNS, вы можете сделать это сейчас. Вы можете заставить nsswitch.conf искать только местные файлы: # cp /etc/nsswitch.files /etc/nsswitch.conf # chmod 444 /etc/nsswitch.conf 13. Измените основной root каталог к /root. Мы изменяем основной root каталог от значения по умолчанию / к /root. Отредактируйте /etc/passwd, и измените root вход к: root:*:0:3::/root:/sbin/sh Тогда сформируйте каталог, и обновите TCB: # mkdir /root # chmod 700 /root # mv /.profile /root # pwconv Обновите, если требуется tcb, чтобы соответствовать /etc/passwd. Отключение сетевых служб 1. Отключите службу inetd Мы должны быть способны идентифицировать каждую TCP и UDP службу выдаваемую netstat -af inet. Службы, которые не необходимы или не могут быть защищены, должны быть заблокированы. Примеры таких служб включают UDP и TCP small servers, подобно ECHO, chargen, daytime, time и discard; Berkeley r*, talk, и т.д. Некоторые компьютеры имеют полностью пустой inetd.conf. Если вы используете пустой inetd.conf, вы можете вообще не выполнять inetd. Вы можете отключать запуск и завершение inetd, удаляя соответствующие символьные связи в rc каталогах: # Rm /sbin/rc2.d/S500inetd # Rm /sbin/rc1.d/K500inetd Для оставшихся сервисов, рассмотрите использование inetd.sec, который разрешает идентификацию основанную на IP адресах для отдаленных систем. 2. Отключите другие службы А. Отключите доступ из сети к syslogd. Б. Отключите SNMP демон. Отредактируйте файлы конфигурации запуска SNMP: 1. /etc/rc.config.d/SnmpHpunix Set SNMP_HPUNIX_START to 0: SNMP_HPUNIX_START=0 2. /etc/rc.config.d/SnmpMaster Set SNMP_MASTER_START to 0: SNMP_MASTER_START=0 3. /etc/rc.config.d/SnmpMib2 Set SNMP_MIB2_START to 0: SNMP_MIB2_START=0 4. /etc/rc.config.d/SnmpTrpDst Set SNMP_TRAPDEST_START to 0: SNMP_TRAPDEST_START=0 C. Отключите демон swagentd (SD-UX). Выполнить это достаточно сложно. Сценарий swagentd исполняется сначала при запуске, и исполняет различные задачи, основанные на параметре имени программы. Например, если он выполняется, как S100swagentd, он удалит файлы, перечисленные в /var/adm/sw/cleanupfile. Также, чтобы работал должным образом сценарий swconfig, swagentd должен выполнятся. Наше решение состоит в том, чтобы создать новый сценарий, который будет сконфигурирован, чтобы немедленно уничтожить демон swagentd после S120swconfig. Вот ключевая часть уничтожающегося сценария: start) /usr/sbin/swagentd -k sleep 1 findproc swagentd if [ "$pid" != "" ]; then kill $pid sleep 5 findproc swagentd if [ "$pid" != "" ]; then kill -9 $pid sleep 5 findproc swagentd if [ "$pid" != "" ]; then echo "UNABLE TO KILL SWAGENTD PROCESS!!!" rval=3 # REBOOT!!! fi else rval=0 fi else rval=0 fi ;; Мы пытаемся уничтожить демон 3 раза, с увеличением уровня силы. Если мы не можем остановить демон, используя kill -9, мы устанавливаем rval=3, который вызовет перезагрузку. Для конфигурирования, используем следующее: # cp /tmp/swagentdk /sbin/init.d # chmod 555 /sbin/init.d/swagentdk # ln -s /sbin/init.d/swagentdk /sbin/rc2.d/S121swagentdk # rm /sbin/rc2.d/S870swagentd # rm /sbin/rc1.d/K900swagentd D. Отключите демон sendmail Установите переменную среды SENDMAIL_SERVER в 0 в /etc/rc.config.d/mailservs: export SENDMAIL_SERVER=0 E. Отключите демон rpcbind Мы не планируем выполнять какие либо RPC сервисы, и нуждаемся в отключении запуска rpcbind (это - portmap замена на HP-UX 11.0). После некоторого просмотра в /etc/rc.config.d мы находим, что rpcbind начинается со сценария nfs.core, так что мы отключаем его в rc каталогах запуска. # rm /sbin/rc1.d/K600nfs.core # rm /sbin/rc2.d/S400nfs.core # mv /usr/sbin/rpcbind /usr/sbin/rpcbind.DISABLE Также это приведет к отключению запуска nfskd процесса, который мы видели в предыдущем выводе ps. После перезагрузки, чтобы проверить модификации, сделанные сценариями запуска, мы можем проверить netstat и lsof выводы и проверить, чтобы не осталось никаких сетевых сервисов. Мы можем также снова проверить вывод ps, чтобы проверить, что заблокированный демон не был запущен: # nettlconf -L -console 0 # nettl -stop # nettl -start Initializing Network Tracing and Logging... Команда Nettlconf изменяет файл конфигурации nettl, /etc/nettlgen.conf, так что это изменение сохранится поперек системных запусков. Pwgrd – кэширующий демон для паролей и групп. Так как мы имеем очень маленький файл паролей и груп, то демон нам не нужен. Также, небольшой анализ работы с lsof и tusc (Trace Unix System Calls) показывает нам, что они прослушиваются на сокетах домена Unix для клиентских запросов, и мы не хотим позволять командные каналы, подобно этим процессам, выполняющимся как root, так что у нас есть дополнительный стимул отключить их: Установите переменную среды PWGR в 0 в /etc/rc.config.d/pwgr: PWGR=0 Мы также удаляем устаревшие сокеты, которые предотвратят ненужные libc создание сокета и запросы несуществующему pwgrd слушателю: # Rm /var/spool/pwgr/* # Rm /var/spool/sockets/pwgr/* Ptydaemon - загадочный демон. Как нам кажется он используется только как vtydaemon, который мы не используем. Мы уничтожаем его, и проверяем, можем ли мы все еще входить в систему дистанционно (мы временно даем возможность telnetd проверить это). Все работает прекрасно, так что можно отключить запуск ptydaemon: Установите переменную среды PTYDAEMON_START в 0 в /etc/rc.config.d/ptydaemon: PTYDAEMON_START=0 Очистка старого файла регистрации: # Rm /var/adm/ptydaemonlog Исследование установленных программ. Многие Unix системы, включая HP-UX, поставляются с многочисленными программами, которые являются set-uid или set-gid. Многие из этих программ не используются или используются только root пользователем. Многие из уязвимостей, которые обнаружены в Unix утилитах, полагаются на the set-uid root, чтобы поднять привилегии. Вы можете улучшить защиту вашей системы, удаляя эти программы или, удаляя set-id bit. Чтобы получить список всех файлов у set-uid или gid bit на системе, вы можете выполнить: # find / \( -perm -4000 -o -perm -2000 \) -type f -exec ls -ld {} \; Вы, скорее всего, увидите более чем 100 файлов (в типовой конфигурации их 145). Вы можете обратить внимание, что имеются два набора команд LVM (в /sbin/ и /usr/sbin /), каждая с более чем 25 ссылок, которые являются set-uid root. Также, SD команды - set-uid root. Следующие изменения разрешений сильно уменьшат размер вашего set-id списка: # chmod u-s /usr/sbin/swinstall # chmod u-s /usr/sbin/vgcreate # chmod u-s /sbin/vgcreate Вы также обратите внимание, что имеются некоторые общедоступные библиотеки, которые имеют множество наборов set-uid bit; причина для этого неизвестна, однако безопасно удалить их. Если вы предварительно не удалили все сохраненные файлы заплат в /var/adm/sw/save /, вы можете быть удивлены увидев, что они сохранились как set-id. Они защищены от исполнения не-корневыми пользователями из-за 500 режима на /var/adm/sw/save/ каталоге. Наша стратегия состоит в том, чтобы удалить set-id bits из всех файлов, а затем выборочно добавлять их к некоторым программам, которые должны быть выполнены не-корневыми пользователями. Следующие команды удалят универсальный set-uid и set-gid bits из всех файлов, затем обратно добавляют их к SU и к общедоступной версии lib PAM команды passwd: # find / -perm -4000 -type f -exec chmod u-s {} \; # find / -perm -2000 -type f -exec chmod g-s {} \; # chmod u+s /usr/bin/su # chmod u+s /usr/bin/passwd /usr/bin/passwd имеет 5 ссылок и включает, chfn, chsh, nispasswd и yppasswd. Команды, которым вы оставляете set-id, зависят от определенного использования и политики вашего компьютера. Во многих случаях, /usr/bin/su может быть единственная программа на системе, которая должна быть set-uid. Множество команд будет прекрасно функционировать без привилегий, используя значение по умолчанию или обычно используемые опции, включая bdf, uptime и arp - однако некоторые функциональные возможности могут быть потеряны для некорневых пользователей. Например, вы больше не сможете определить параметр filesystem для bdf: $ bdf /dev/vg00/lvol3 bdf: /dev/vg00/lvol3: Permission denied Исследование разрешений файлов. Недавно установленная система HP-UX будет содержать множество файлов, которые могут быть перезаписаны другими (002 бит установлен в битах режима). Эти файлы могут быть перечислены следующей командой: # find / -perm -002 ! -type l -exec ls -ld {} \; Мы не отображаем символьные линки с записями дополнительных установочных битов, потому что биты режима не используются для проверки разрешения. Один из подходов состоит в том, чтобы удалить запись дополнительных битов от всех файлов, и выборочно добавлять их к тем файлам и каталогам, где это необходимо. Следующая команда удаляет запись дополнительных битов из всех файлов с этим набором: # find / -perm -002 ! -type l -exec chmod o-w {} \; Теперь мы разрешаем разрешения файлов, которые должны быть перезаписываемыми другими пользователями: # chmod 1777 /tmp /var/tmp /var/preserve # chmod 666 /dev/null Обратите внимание, что мы также устанавливаем второй промежуточный бит(sticky bit) (01000) в перезаписываемых каталогах подобно /tmp и /usr/tmp. Это предотвратит непривилегированных пользователей от удаления или переименования файлов в каталогах, которые им не принадлежат. Настройка защиты сети. HP-UX 11 содержит команду ndd, чтобы исполнить настройку сети. Ndd -h выводит справку для каждого поддерживаемого и неподдерживаемого ndd tunable параметра, который может быть изменен. После исследования этого списка, мы решаем, что следующие - кандидаты на изменение на компьютере: Сетевое устройство Параметр Значение по умолчанию Предлагаемое значение /dev/ip ip_forward_directed_broadcasts 1 0 /dev/ip ip_forward_src_routed 1 0 /dev/ip ip_forwarding 2 0 /dev/ip ip_ire_gw_probe 1 0 /dev/ip ip_pmtu_strategy 2 1 /dev/ip ip_send_redirects 1 0 /dev/ip ip_send_source_quench 1 0 /dev/tcp tcp_conn_request_max 20 500 /dev/tcp tcp_syn_rcvd_max 500 500 /dev/ip ip_check_subnet_addr 1 0 /dev/ip ip_respond_to_address_mask_broadcast 0 0 /dev/ip ip_respond_to_echo_broadcast 1 0 /dev/ip ip_respond_to_timestamp_broadcast 0 0 /dev/ip ip_respond_to_timestamp 0 0 /dev/tcp tcp_text_in_resets 1 0 Некоторые из значений по умолчанию соответствуют нашему привилегированному значению, но мы можем выбирать устанавливать их так или иначе, на всякий случай, так как значение по умолчанию может в будущем измениться. Ndd поддерживает -c опцию, которая просматривает значения и перестраиваемый список из файла /etc/rc.config.d/nddconf. Однако, имеются некоторые проблемы с заданной по умолчанию установкой. Сначала, во время этой записи, ndd -c только способен обработать 10 перестраиваемых списков (tunables) в nddconf. Затем, ndd -c выполняется в конце net сценария, который появляется после того, как сетевые интерфейсы были сконфигурированы. Одна из проблем это то, что мы слишком поздно устанавливаем ip_check_subnet_addr, если мы используем подсетевой нуль (subnet zero) в локальной части сети. Более важно, установить tunables прежде, чем сетевые интерфейсы сконфигурированы (проблема упорядочения была устранена в одной из заплат, но ограничение в 10 tunable все равно осталось). В качестве искусственного приема, мы можем использовать новый startup скрипт и файл конфигурации: # cp /tmp/secconf /etc/rc.config.d # chmod 444 /etc/rc.config.d/secconf # cp /tmp/sectune /sbin/init.d # chmod 555 /sbin/init.d/sectune # ln -s /sbin/init.d/sectune /sbin/rc2.d/S009sectune Sectune и примеры secconf доступны для загрузки: http://people.hp.se/stevesk/secconf и http://people.hp.se/stevesk/sectune. Установка программного обеспечения и тестирования конфигурации. В этом месте вы можете устанавливать, проверять и конфигурировать прикладные программы, которые вы будете использовать на компьютере, типа BIND, Web сервера, firewall и т.д. Программное обеспечение для безопасности, типа SSH и TCP wrappers могут быть установлены на этом этапе, как определено в соответствии с определенными требованиями защиты и использованием компьютера. Снова, критическое предостережение должно быть осуществлено при установке нового программного обеспечения на вашем главном. Вы должны вообще получить самую последнюю версию программы, содержащее все исправления всех известных дефектов защиты. Вы можете установить программу сначала на другой системе и определить, может ли она быть защищена. Мыслите подобно нападающему, и гарантируйте, что ваш компьютер способен защитить себя с установленной программой. Создания системы восстановления конфигурации. Затем мы создаем самозагружаемую систему восстановления корневой; эта система может также использоваться, чтобы имитировать систему к другим аппаратным средствам, поддержаны с той же самой программной конфигурацией. Самый простой способ выполнить следующую команду: # /opt/ignite/bin/make_recovery -Ai Option -A specified. Entire Core Volume Group/disk will be backed up. *************************************** HP-UX System Recovery Going to create the tape. System Recovery Tape successfully created. Заключение Используя представленную методологию, вы можете создать защищенный компьютер на основе HP-UX. "/> Change Software View->Start with Products) 2. Выделяем MailUtilities.Runtime и MailUtilities.Manuals для установки 3. Отменяем NFS.Runtime.NIS-CLIENT для установки (также отменяется KEY-CORE и NIS-CORE) 4. Выделяем NFS.Runtime.NFS-64SLIB для установки 5. Отменяем Networking.MinimumRuntime.PPP-RUN для установки 6. Выбираем OS-Core.Manuals для установки 7. Выбираем SOE для установки 8. Выбираем SecurityMon для установки 9. Выбираем Streams.Runtime.STREAMS-64SLIB для установки 10. Выбираем SystemAdmin.Runtime для установки 11. Выбираем TextEditors.Runtime и TextEditors.Manuals для установки 12. Выполняем анализ инсталляции (Actions->Install (analysis)) Мы выбрали минимальную установку HP-UX. Не будет установлена система X window и много других ненужных программ. Мы удаляем большинство NFS программ, потому что они имеют множество проблем защиты. Мы также удаляем PPP-RUN fileset, потому что мы не используем PPP. Для целей сопровождения системы мы устанавливаем SAM, программы для электронной почты и текстовые редакторы. Мы будем использовать коммерческую особенность защиты HP-UX, так что мы должны выбрать SecurityMon, и программы SOE (SecurityMon содержат команды и документацию для ревизии и доверия системным компонентам, а SOE содержит команду pwconv, которую мы будем позже использовать). Наконец, так как мы устанавливаем на 64-bit hardware, мы выбираем 64-bit библиотеки для NFS и STREAMS, которые требуются для различных приложений. Также стоило бы удалить другие программы типа SNMP (OVSNMPAgent), но множество других программ зависят от них (хотя непонятно почему). Мы отключим SNMP и другие программы, которые трудно или невозможно удалить. Установка дополнительных программ. В этом разделе, вы должны установить любые дополнительные программы HP, которые требуются на компьютере, например сетевые драйверы для добавочных LAN плат, или других программ, которые вы планируете использовать подобно LVM Mirror. Также потребуется дополнительная программа (команда make_recovery) для создания резервной копии. Установка заплат + связывание в единое целое Затем мы устанавливаем все General Release (GR) заплаты для самого последнего HP-UX 11.0. HP постоянно обновляет набор заплат, распространяя их на компакт диске. Используйте swinstall, чтобы установить GR. Установка дополнений безопасности. Затем проверяем, какие из заплат защиты должны быть установлены. Заплаты для HP-UX доступны через анонимный FTP сервер ftp://ftp.itrc.hp.com/hp-ux_patches/. "HP-UX Patch Security Matrix" (ftp://ftp.itrc.hp.com/export/patches/hp-ux_patch_sum) содержит список текущих заплат защиты для каждой платформы HP-UX и комбинации версий операционных систем (например, s800 11.00). Имеется также список MD5 проверочных кодов (ftp://ftp.itrc.hp.com/export/patches/hp-ux_patch_sum) для каждой заплаты, которые могут использоваться для проверки того, что ваши заплаты оригинальны. Каждая заплата устанавливаемая в системе, должна быть проанализирована, чтобы определить, требуется ли ее установка. Сначала Вы должны проверить, установлена ли она раньше со средств установки или связок заплат. Вы можете просмотреть детальную информацию о заплате в patch.text. файле, включая зависимости, эффект filesets, и исправленные файлы. Вы можете определить filesets, установленный на системе, выполняя swlist -l fileset. Факт существования заплаты не подразумевает, что вы должны установить ее так. Некоторые заплаты могут фиксировать дефекты переполнения буфера или другие каналы нападения в командах set-uid root или в процессах корня. Если вы планируете удалять set-uid биты, вы можете не устанавливать заплаты к ним. Вы также можете не иметь конфигурированной программы (например, rlogind), но иногда трудно определить, является ли дефект дистанционным или локальным. Если вы не уверены, должна ли специфическая заплата быть установлена, лучше установить ее. Вы также должны исследовать непосредственно бюллетени защиты (http://itrc.hp.com/ - для доступа нужно зарегистрироваться), потому что не все бюллетени защиты приводят к заплате, например, имеется бюллетень защиты о проблеме значения по умолчанию PMTU, который рекомендует, чтобы значение по умолчанию было изменено, используя ndd (HPSBUX0001-110) а также существует серьезная проблема пустых паролей при использовании Ignite-UX и доверенных системы (HPSBUX0002-111). Ручной анализ заплат защиты может занять длительное время; и из-за этого часто он выполняется не полностью или не выполняется вообще. Это - одна из первичных причин разрушения защиты. Разрушение защиты связанно с ослаблением защиты системы через какое-то время, из-за неизбежных изменений первоначальной конфигурации; например неисправленная уязвимость защиты, найденная в установленном программном обеспечении. К счастью, имеется способ уменьшить ручной анализ заплат защиты. Security_patch_check (http://www.software.hp.com/cgi-bin/swdepot_parser.cgi/cgi/displayProductInfo.pl?productNumber=B6834AA) - утилита, которая может использоваться, чтобы автоматизировать многие из шагов, выполненных в процессе анализа заплаты защиты. Она использует на входе "Security patch catalog" (ftp://ftp.itrc.hp.com/export/patches/security_catalog) и swlist (1M) на выходе, чтобы определить, какие из заплат защиты могут отсутствовать в системе, и генерирует сообщение, содержащее рекомендуемые заплаты. Исправление установок по умолчанию Следующие шаги мы должны использовать после установки операционной системы: 1. Удалите сохраненные заплаты. В процессе инсталляции системы, копии всех изменяемых файлов хранятся в /var/adm/sw/save/. Для удаления заплат исполните следующую команду: # Swmodify -x patch_commit=true '*. * ' 2. Преобразуйте доверенную систему: 1. # /usr/lbin/tsconvert 2. Creating secure password database... 3. Directories created. 4. Making default files. 5. System default file created... 6. Terminal default file created... 7. Device assignment file created... 8. Moving passwords... 9. secure password database installed. 10. Converting at and crontab jobs... 11. At and crontab files converted. 12. # passwd root Пароли на существующих учетных записях истекут в результате преобразования. Также вы можете включить аудит. 3. Ужмите глобальные привилегии. По умолчанию привилегия CHOWN - глобальная привилегия и применяется ко всем группам: $ getprivgrp global privileges:CHOWN Непривилегированные пользователи действительно не должны быть способными делать chown файлам другим пользователям; в Linux например, только супер-пользователь может изменять владельца файла. /sbin/init.d/set_prvgrp выполняется по умолчанию при запуске системы и выполняет команду /usr/sbin/setprivgrp -f /etc/privgroup, если /etc/privgroup существует. Мы можем создать файл конфигурации, который удалит все привилегии для всех групп: # getprivgrp global privileges: CHOWN # echo -n >/etc/privgroup # chmod 400 /etc/privgroup # /sbin/init.d/set_prvgrp start # getprivgrp global privileges: 4. Устраните проблемы PAM CDE: SAM выполняет некоторые проверки правильности на /etc/pam.conf, который вовлекает попытку найти команду, используя несколько различных путей для каждого service_name. Хотя мы и не устанавливали CDE, все же наш pam.conf файл содержит входы dtlogin и dtaction для каждого из типов PAM модуля; например: dtlogin auth required /usr/lib/security/libpam_unix.1 dtaction auth required /usr/lib/security/libpam_unix.1 5. Устраните запуск hparray. По некоторым причинам имеется запуск символьных указателей (symlinks pointing), чтобы выстроить сценарий запуска, который содержится в filesets, в котором мы не нуждаемся (OS-ЯДРО. C2400-UTIL и OS-ЯДРО. МАССИВ - MGMT) так что мы удаляем их: # for f in /sbin/rc*.d/*; do [ ! -f $f ] && echo $f; done /sbin/rc1.d/K290hparamgr /sbin/rc1.d/K290hparray /sbin/rc2.d/S710hparamgr /sbin/rc2.d/S710hparray # rm /sbin/rc1.d/K290hparamgr # rm /sbin/rc1.d/K290hparray # rm /sbin/rc2.d/S710hparamgr # rm /sbin/rc2.d/S710hparray 6. Установленное по умолчанию значение umask. Один побочный эффект преобразования к доверенной системе, является то, что значение по умолчанию umask 0, преобразовано к 07077. 7. Ограничите корневой вход в систему консолью. 8. # echo console > /etc/securetty 9. # chmod 400 /etc/securetty 10. Разрешие inetd вход. Добавьте -l параметр к INETD_ARGS переменной среды в /etc/rc.config.d/netdaemons: export INETD_ARGS=-l 11. Удалите ненужные псевдо-учетные записи. Сначала мы исследуем некоторые группы, которые могли бы быть удалены; наша основная стратегия состоит в том, если не имеется никаких процессов, которые выполнены с данным пользователем или группой, и не имеется никаких файлов, принадлежащих пользователю или группе, мы удаляем их: # find / -group lp -o -group nuucp -o -group daemon -exec ls -ld {} \; # groupdel lp # groupdel nuucp # groupdel daemon # find / -user uucp -o -user lp -o -user nuucp -o -user hpdb \ > -o -user www -o -user daemon -exec ls -ld {} \; # userdel uucp # userdel lp # userdel nuucp # userdel hpdb # userdel www # userdel daemon Для остающихся псевдо-учетных записей (bin, sys и adm), Вы должны изменить оболочку входа в систему к некоторому недопустимому пути, например /, или рассмотрите использование noshell программы Titan (http://www.fish.com/titan/). # pwget -n bin bin:*:2:2:NO LOGIN:/usr/bin:/ 12. Конфигурируйте nsswitch.conf политику Если вы хотите сконфигурировать DNS, вы можете сделать это сейчас. Вы можете заставить nsswitch.conf искать только местные файлы: # cp /etc/nsswitch.files /etc/nsswitch.conf # chmod 444 /etc/nsswitch.conf 13. Измените основной root каталог к /root. Мы изменяем основной root каталог от значения по умолчанию / к /root. Отредактируйте /etc/passwd, и измените root вход к: root:*:0:3::/root:/sbin/sh Тогда сформируйте каталог, и обновите TCB: # mkdir /root # chmod 700 /root # mv /.profile /root # pwconv Обновите, если требуется tcb, чтобы соответствовать /etc/passwd. Отключение сетевых служб 1. Отключите службу inetd Мы должны быть способны идентифицировать каждую TCP и UDP службу выдаваемую netstat -af inet. Службы, которые не необходимы или не могут быть защищены, должны быть заблокированы. Примеры таких служб включают UDP и TCP small servers, подобно ECHO, chargen, daytime, time и discard; Berkeley r*, talk, и т.д. Некоторые компьютеры имеют полностью пустой inetd.conf. Если вы используете пустой inetd.conf, вы можете вообще не выполнять inetd. Вы можете отключать запуск и завершение inetd, удаляя соответствующие символьные связи в rc каталогах: # Rm /sbin/rc2.d/S500inetd # Rm /sbin/rc1.d/K500inetd Для оставшихся сервисов, рассмотрите использование inetd.sec, который разрешает идентификацию основанную на IP адресах для отдаленных систем. 2. Отключите другие службы А. Отключите доступ из сети к syslogd. Б. Отключите SNMP демон. Отредактируйте файлы конфигурации запуска SNMP: 1. /etc/rc.config.d/SnmpHpunix Set SNMP_HPUNIX_START to 0: SNMP_HPUNIX_START=0 2. /etc/rc.config.d/SnmpMaster Set SNMP_MASTER_START to 0: SNMP_MASTER_START=0 3. /etc/rc.config.d/SnmpMib2 Set SNMP_MIB2_START to 0: SNMP_MIB2_START=0 4. /etc/rc.config.d/SnmpTrpDst Set SNMP_TRAPDEST_START to 0: SNMP_TRAPDEST_START=0 C. Отключите демон swagentd (SD-UX). Выполнить это достаточно сложно. Сценарий swagentd исполняется сначала при запуске, и исполняет различные задачи, основанные на параметре имени программы. Например, если он выполняется, как S100swagentd, он удалит файлы, перечисленные в /var/adm/sw/cleanupfile. Также, чтобы работал должным образом сценарий swconfig, swagentd должен выполнятся. Наше решение состоит в том, чтобы создать новый сценарий, который будет сконфигурирован, чтобы немедленно уничтожить демон swagentd после S120swconfig. Вот ключевая часть уничтожающегося сценария: start) /usr/sbin/swagentd -k sleep 1 findproc swagentd if [ "$pid" != "" ]; then kill $pid sleep 5 findproc swagentd if [ "$pid" != "" ]; then kill -9 $pid sleep 5 findproc swagentd if [ "$pid" != "" ]; then echo "UNABLE TO KILL SWAGENTD PROCESS!!!" rval=3 # REBOOT!!! fi else rval=0 fi else rval=0 fi ;; Мы пытаемся уничтожить демон 3 раза, с увеличением уровня силы. Если мы не можем остановить демон, используя kill -9, мы устанавливаем rval=3, который вызовет перезагрузку. Для конфигурирования, используем следующее: # cp /tmp/swagentdk /sbin/init.d # chmod 555 /sbin/init.d/swagentdk # ln -s /sbin/init.d/swagentdk /sbin/rc2.d/S121swagentdk # rm /sbin/rc2.d/S870swagentd # rm /sbin/rc1.d/K900swagentd D. Отключите демон sendmail Установите переменную среды SENDMAIL_SERVER в 0 в /etc/rc.config.d/mailservs: export SENDMAIL_SERVER=0 E. Отключите демон rpcbind Мы не планируем выполнять какие либо RPC сервисы, и нуждаемся в отключении запуска rpcbind (это - portmap замена на HP-UX 11.0). После некоторого просмотра в /etc/rc.config.d мы находим, что rpcbind начинается со сценария nfs.core, так что мы отключаем его в rc каталогах запуска. # rm /sbin/rc1.d/K600nfs.core # rm /sbin/rc2.d/S400nfs.core # mv /usr/sbin/rpcbind /usr/sbin/rpcbind.DISABLE Также это приведет к отключению запуска nfskd процесса, который мы видели в предыдущем выводе ps. После перезагрузки, чтобы проверить модификации, сделанные сценариями запуска, мы можем проверить netstat и lsof выводы и проверить, чтобы не осталось никаких сетевых сервисов. Мы можем также снова проверить вывод ps, чтобы проверить, что заблокированный демон не был запущен: # nettlconf -L -console 0 # nettl -stop # nettl -start Initializing Network Tracing and Logging... Команда Nettlconf изменяет файл конфигурации nettl, /etc/nettlgen.conf, так что это изменение сохранится поперек системных запусков. Pwgrd – кэширующий демон для паролей и групп. Так как мы имеем очень маленький файл паролей и груп, то демон нам не нужен. Также, небольшой анализ работы с lsof и tusc (Trace Unix System Calls) показывает нам, что они прослушиваются на сокетах домена Unix для клиентских запросов, и мы не хотим позволять командные каналы, подобно этим процессам, выполняющимся как root, так что у нас есть дополнительный стимул отключить их: Установите переменную среды PWGR в 0 в /etc/rc.config.d/pwgr: PWGR=0 Мы также удаляем устаревшие сокеты, которые предотвратят ненужные libc создание сокета и запросы несуществующему pwgrd слушателю: # Rm /var/spool/pwgr/* # Rm /var/spool/sockets/pwgr/* Ptydaemon - загадочный демон. Как нам кажется он используется только как vtydaemon, который мы не используем. Мы уничтожаем его, и проверяем, можем ли мы все еще входить в систему дистанционно (мы временно даем возможность telnetd проверить это). Все работает прекрасно, так что можно отключить запуск ptydaemon: Установите переменную среды PTYDAEMON_START в 0 в /etc/rc.config.d/ptydaemon: PTYDAEMON_START=0 Очистка старого файла регистрации: # Rm /var/adm/ptydaemonlog Исследование установленных программ. Многие Unix системы, включая HP-UX, поставляются с многочисленными программами, которые являются set-uid или set-gid. Многие из этих программ не используются или используются только root пользователем. Многие из уязвимостей, которые обнаружены в Unix утилитах, полагаются на the set-uid root, чтобы поднять привилегии. Вы можете улучшить защиту вашей системы, удаляя эти программы или, удаляя set-id bit. Чтобы получить список всех файлов у set-uid или gid bit на системе, вы можете выполнить: # find / \( -perm -4000 -o -perm -2000 \) -type f -exec ls -ld {} \; Вы, скорее всего, увидите более чем 100 файлов (в типовой конфигурации их 145). Вы можете обратить внимание, что имеются два набора команд LVM (в /sbin/ и /usr/sbin /), каждая с более чем 25 ссылок, которые являются set-uid root. Также, SD команды - set-uid root. Следующие изменения разрешений сильно уменьшат размер вашего set-id списка: # chmod u-s /usr/sbin/swinstall # chmod u-s /usr/sbin/vgcreate # chmod u-s /sbin/vgcreate Вы также обратите внимание, что имеются некоторые общедоступные библиотеки, которые имеют множество наборов set-uid bit; причина для этого неизвестна, однако безопасно удалить их. Если вы предварительно не удалили все сохраненные файлы заплат в /var/adm/sw/save /, вы можете быть удивлены увидев, что они сохранились как set-id. Они защищены от исполнения не-корневыми пользователями из-за 500 режима на /var/adm/sw/save/ каталоге. Наша стратегия состоит в том, чтобы удалить set-id bits из всех файлов, а затем выборочно добавлять их к некоторым программам, которые должны быть выполнены не-корневыми пользователями. Следующие команды удалят универсальный set-uid и set-gid bits из всех файлов, затем обратно добавляют их к SU и к общедоступной версии lib PAM команды passwd: # find / -perm -4000 -type f -exec chmod u-s {} \; # find / -perm -2000 -type f -exec chmod g-s {} \; # chmod u+s /usr/bin/su # chmod u+s /usr/bin/passwd /usr/bin/passwd имеет 5 ссылок и включает, chfn, chsh, nispasswd и yppasswd. Команды, которым вы оставляете set-id, зависят от определенного использования и политики вашего компьютера. Во многих случаях, /usr/bin/su может быть единственная программа на системе, которая должна быть set-uid. Множество команд будет прекрасно функционировать без привилегий, используя значение по умолчанию или обычно используемые опции, включая bdf, uptime и arp - однако некоторые функциональные возможности могут быть потеряны для некорневых пользователей. Например, вы больше не сможете определить параметр filesystem для bdf: $ bdf /dev/vg00/lvol3 bdf: /dev/vg00/lvol3: Permission denied Исследование разрешений файлов. Недавно установленная система HP-UX будет содержать множество файлов, которые могут быть перезаписаны другими (002 бит установлен в битах режима). Эти файлы могут быть перечислены следующей командой: # find / -perm -002 ! -type l -exec ls -ld {} \; Мы не отображаем символьные линки с записями дополнительных установочных битов, потому что биты режима не используются для проверки разрешения. Один из подходов состоит в том, чтобы удалить запись дополнительных битов от всех файлов, и выборочно добавлять их к тем файлам и каталогам, где это необходимо. Следующая команда удаляет запись дополнительных битов из всех файлов с этим набором: # find / -perm -002 ! -type l -exec chmod o-w {} \; Теперь мы разрешаем разрешения файлов, которые должны быть перезаписываемыми другими пользователями: # chmod 1777 /tmp /var/tmp /var/preserve # chmod 666 /dev/null Обратите внимание, что мы также устанавливаем второй промежуточный бит(sticky bit) (01000) в перезаписываемых каталогах подобно /tmp и /usr/tmp. Это предотвратит непривилегированных пользователей от удаления или переименования файлов в каталогах, которые им не принадлежат. Настройка защиты сети. HP-UX 11 содержит команду ndd, чтобы исполнить настройку сети. Ndd -h выводит справку для каждого поддерживаемого и неподдерживаемого ndd tunable параметра, который может быть изменен. После исследования этого списка, мы решаем, что следующие - кандидаты на изменение на компьютере: Сетевое устройство Параметр Значение по умолчанию Предлагаемое значение /dev/ip ip_forward_directed_broadcasts 1 0 /dev/ip ip_forward_src_routed 1 0 /dev/ip ip_forwarding 2 0 /dev/ip ip_ire_gw_probe 1 0 /dev/ip ip_pmtu_strategy 2 1 /dev/ip ip_send_redirects 1 0 /dev/ip ip_send_source_quench 1 0 /dev/tcp tcp_conn_request_max 20 500 /dev/tcp tcp_syn_rcvd_max 500 500 /dev/ip ip_check_subnet_addr 1 0 /dev/ip ip_respond_to_address_mask_broadcast 0 0 /dev/ip ip_respond_to_echo_broadcast 1 0 /dev/ip ip_respond_to_timestamp_broadcast 0 0 /dev/ip ip_respond_to_timestamp 0 0 /dev/tcp tcp_text_in_resets 1 0 Некоторые из значений по умолчанию соответствуют нашему привилегированному значению, но мы можем выбирать устанавливать их так или иначе, на всякий случай, так как значение по умолчанию может в будущем измениться. Ndd поддерживает -c опцию, которая просматривает значения и перестраиваемый список из файла /etc/rc.config.d/nddconf. Однако, имеются некоторые проблемы с заданной по умолчанию установкой. Сначала, во время этой записи, ndd -c только способен обработать 10 перестраиваемых списков (tunables) в nddconf. Затем, ndd -c выполняется в конце net сценария, который появляется после того, как сетевые интерфейсы были сконфигурированы. Одна из проблем это то, что мы слишком поздно устанавливаем ip_check_subnet_addr, если мы используем подсетевой нуль (subnet zero) в локальной части сети. Более важно, установить tunables прежде, чем сетевые интерфейсы сконфигурированы (проблема упорядочения была устранена в одной из заплат, но ограничение в 10 tunable все равно осталось). В качестве искусственного приема, мы можем использовать новый startup скрипт и файл конфигурации: # cp /tmp/secconf /etc/rc.config.d # chmod 444 /etc/rc.config.d/secconf # cp /tmp/sectune /sbin/init.d # chmod 555 /sbin/init.d/sectune # ln -s /sbin/init.d/sectune /sbin/rc2.d/S009sectune Sectune и примеры secconf доступны для загрузки: http://people.hp.se/stevesk/secconf и http://people.hp.se/stevesk/sectune. Установка программного обеспечения и тестирования конфигурации. В этом месте вы можете устанавливать, проверять и конфигурировать прикладные программы, которые вы будете использовать на компьютере, типа BIND, Web сервера, firewall и т.д. Программное обеспечение для безопасности, типа SSH и TCP wrappers могут быть установлены на этом этапе, как определено в соответствии с определенными требованиями защиты и использованием компьютера. Снова, критическое предостережение должно быть осуществлено при установке нового программного обеспечения на вашем главном. Вы должны вообще получить самую последнюю версию программы, содержащее все исправления всех известных дефектов защиты. Вы можете установить программу сначала на другой системе и определить, может ли она быть защищена. Мыслите подобно нападающему, и гарантируйте, что ваш компьютер способен защитить себя с установленной программой. Создания системы восстановления конфигурации. Затем мы создаем самозагружаемую систему восстановления корневой; эта система может также использоваться, чтобы имитировать систему к другим аппаратным средствам, поддержаны с той же самой программной конфигурацией. Самый простой способ выполнить следующую команду: # /opt/ignite/bin/make_recovery -Ai Option -A specified. Entire Core Volume Group/disk will be backed up. *************************************** HP-UX System Recovery Going to create the tape. System Recovery Tape successfully created. Заключение Используя представленную методологию, вы можете создать защищенный компьютер на основе HP-UX. "/>
Данный обзор построен на общих рекомендациях
Hewlett Packard для защиты сервера на HP-UX 11.0, который может включать в себя:
1. FireWall
2. Web сервер
3. FTP сервер
4. Сервер доменных имен (DNS)
5. Почтовый сервер.
Этот обзор представляет методологию, которая поможет вам максимально защитить ваш сервер использующий
HP-UX 11.0. Все изложенные принципы могут применяться к более ранним версиям
HP-UX, а также к другим вариантам UNIX, построенных на основе
HP-UX.
При создании такой методологии, важно осознать, что мы стремимся максимально защитить сервер, но при этом не подстраиваемся под конкретную конфигурацию, поэтому какие изменения нужно внести должны решать вы сами. Для построения такой модели, мы разделим наши шаги на следующие пункты:
1. Установка HP-UX.
2. Установка дополнительных программ.
3. Установка заплат + связывание в единое целое
4. Установка дополнений безопасности.
5. Исправление начальных установок
6. Отключение сетевых сервисов.
7. Отключение ненужных демонов.
8. Исследование установленных программ.
9. Исследование разрешений файлов.
10. Настройка защиты сети.
11. Установка программного обеспечения и тестирования конфигурации.
12. Создания системы восстановления конфигурации.
Имейте в виду, что это стартовая конфигурация, и вы должны делать нужные изменения под ваше определенное использование системы. Если вы устанавливаете более позднюю версию
HP-UX 11.1, некоторые подходы могут отличаться. Вы можете тасовать эти шаги, но не забывайте полностью документировать их.
Установка HP-UX.
Требуется самое большее один час, чтобы установить минимальную конфигурацию
HP-UX из компакт диска. Выгоды защиты от старта с чистой установки операционной системы, и знания точно, что вы имеете, намного превышают этот незначительный расход вашего времени. Даже если ваш компьютер новый и был поставлен с предустановленной
HP-UX, вы должны повторно установить ее на пустое место. В процессе начальной инсталляции, конфигурации и испытания, удостоверьтесь, что ваша система не связана c какой-либо недоверенной сетью. К сети вы можете подключить ваш компьютер только после того, как пройдены все шаги конфигурации.
Чтобы выполнить инсталляцию, мы загружаемся с инсталляционного компакт-диска и исполняем следующие шаги:
1. Выбираем "Install HP-UX".
2. В окне "User Interface and Media Options" выбираем:
1. Media only installation
2. Advanced Installation
3. В окне “Basic" выбираем переменную "64-Bit Minimal HP-UX (English Only)"
4. В окне "Software":
1. Выбираем "Change Depot Location"
2. Изменяем "Interactive swinstall" в положение
"Yes"
3. Выбираем "Modify"
5. Изменяем другие параметры настройки конфигурации под вашу систему
6. Выбираем "Go!"
7. В окне "SD Install":
1. Изменяем “Software View” в “Products”
(View->Change Software View->Start with Products)
2. Выделяем MailUtilities.Runtime и MailUtilities.Manuals
для установки
3. Отменяем NFS.Runtime.NIS-CLIENT для установки (также отменяется
KEY-CORE и NIS-CORE)
4. Выделяем NFS.Runtime.NFS-64SLIB для установки
5. Отменяем Networking.MinimumRuntime.PPP-RUN для установки
6. Выбираем OS-Core.Manuals для установки
7. Выбираем SOE для установки
8. Выбираем SecurityMon для установки
9. Выбираем Streams.Runtime.STREAMS-64SLIB для установки
10. Выбираем SystemAdmin.Runtime для установки
11. Выбираем TextEditors.Runtime и TextEditors.Manuals
для установки
12. Выполняем анализ инсталляции (Actions->Install (analysis))
Мы выбрали минимальную установку
HP-UX. Не будет установлена система X window и много других ненужных программ. Мы удаляем большинство
NFS программ, потому что они имеют множество проблем защиты. Мы также удаляем
PPP-RUN fileset, потому что мы не используем PPP. Для целей сопровождения системы мы устанавливаем SAM, программы для электронной почты и текстовые редакторы. Мы будем использовать коммерческую особенность защиты
HP-UX, так что мы должны выбрать SecurityMon, и программы
SOE (SecurityMon содержат команды и документацию для ревизии и доверия системным компонентам, а
SOE содержит команду pwconv, которую мы будем позже использовать). Наконец, так как мы устанавливаем на
64-bit hardware, мы выбираем 64-bit библиотеки для
NFS и STREAMS, которые требуются для различных приложений.
Также стоило бы удалить другие программы типа
SNMP (OVSNMPAgent), но множество других программ зависят от них (хотя непонятно почему). Мы отключим
SNMP и другие программы, которые трудно или невозможно удалить.
В этом разделе, вы должны установить любые дополнительные программы
HP, которые требуются на компьютере, например сетевые драйверы для добавочных
LAN плат, или других программ, которые вы планируете использовать подобно LVM Mirror. Также потребуется дополнительная программа (команда
make_recovery) для создания резервной копии.
Затем мы устанавливаем все General Release (GR) заплаты для самого последнего HP-UX 11.0. HP постоянно обновляет набор заплат, распространяя их на компакт диске. Используйте swinstall, чтобы установить GR.
Затем проверяем, какие из заплат защиты должны быть установлены. Заплаты для
HP-UX доступны через анонимный FTP сервер ftp://ftp.itrc.hp.com/hp-ux_patches/.
"HP-UX Patch Security Matrix" (ftp://ftp.itrc.hp.com/export/patches/hp-ux_patch_sum) содержит список текущих заплат защиты для каждой платформы
HP-UX и комбинации версий операционных систем (например, s800 11.00). Имеется также список MD5 проверочных кодов (ftp://ftp.itrc.hp.com/export/patches/hp-ux_patch_sum) для каждой заплаты, которые могут использоваться для проверки того, что ваши заплаты оригинальны.
Каждая заплата устанавливаемая в системе, должна быть проанализирована, чтобы определить, требуется ли ее установка. Сначала Вы должны проверить, установлена ли она раньше со средств установки или связок заплат. Вы можете просмотреть детальную информацию о заплате в patch.text.
файле, включая зависимости, эффект filesets, и исправленные файлы. Вы можете определить
filesets, установленный на системе, выполняя
swlist -l fileset.
Факт существования заплаты не подразумевает, что вы должны установить ее так. Некоторые заплаты могут фиксировать дефекты переполнения буфера или другие каналы нападения в командах
set-uid root или в процессах корня. Если вы планируете удалять
set-uid биты, вы можете не устанавливать заплаты к ним. Вы также можете не иметь конфигурированной программы (например,
rlogind), но иногда трудно определить, является ли дефект дистанционным или локальным. Если вы не уверены, должна ли специфическая заплата быть установлена, лучше установить ее.
Вы также должны исследовать непосредственно бюллетени защиты (http://itrc.hp.com/
- для доступа нужно зарегистрироваться), потому что не все бюллетени защиты приводят к заплате, например, имеется бюллетень защиты о проблеме значения по умолчанию PMTU, который рекомендует, чтобы значение по умолчанию было изменено, используя
ndd (HPSBUX0001-110) а также существует серьезная проблема пустых паролей при использовании
Ignite-UX и доверенных системы (HPSBUX0002-111).
Ручной анализ заплат защиты может занять длительное время; и из-за этого часто он
выполняется не полностью или не выполняется вообще. Это - одна из первичных причин разрушения защиты. Разрушение защиты связанно с ослаблением защиты системы через какое-то время, из-за неизбежных изменений первоначальной
конфигурации; например неисправленная уязвимость защиты, найденная в установленном программном обеспечении. К счастью, имеется способ уменьшить ручной анализ заплат защиты.
Security_patch_check (http://www.software.hp.com/cgi-bin/swdepot_parser.cgi/cgi/displayProductInfo.pl?productNumber=B6834AA) - утилита, которая может использоваться, чтобы автоматизировать многие из шагов, выполненных в процессе анализа заплаты защиты. Она использует на входе
"Security patch catalog" (ftp://ftp.itrc.hp.com/export/patches/security_catalog) и
swlist (1M) на выходе, чтобы определить, какие из заплат защиты могут отсутствовать в системе, и генерирует сообщение, содержащее рекомендуемые заплаты.
Следующие шаги мы должны использовать после установки операционной системы:
1. Удалите сохраненные заплаты. В процессе инсталляции системы, копии всех изменяемых файлов хранятся в
/var/adm/sw/save/. Для удаления заплат исполните
следующую команду:
# Swmodify -x patch_commit=true '*. * '
2. Преобразуйте доверенную систему:
1. # /usr/lbin/tsconvert
2. Creating secure password database...
3. Directories created.
4. Making default files.
5. System default file created...
6. Terminal default file created...
7. Device assignment file created...
8. Moving passwords...
9. secure password database installed.
10. Converting at and crontab jobs...
11. At and crontab files converted.
12. # passwd root
Пароли на существующих учетных записях истекут в результате преобразования. Также вы можете включить аудит.
3. Ужмите глобальные привилегии.
По умолчанию привилегия CHOWN - глобальная привилегия и применяется ко всем группам:
$ getprivgrp
global privileges:CHOWN
Непривилегированные пользователи действительно не должны быть способными делать
chown файлам другим пользователям; в Linux
например, только супер-пользователь может изменять владельца файла.
/sbin/init.d/set_prvgrp выполняется по умолчанию при запуске системы и выполняет команду
/usr/sbin/setprivgrp -f /etc/privgroup, если /etc/privgroup существует. Мы можем создать файл конфигурации, который удалит все привилегии для всех групп:
# getprivgrp
global privileges: CHOWN
# echo -n >/etc/privgroup
# chmod 400 /etc/privgroup
# /sbin/init.d/set_prvgrp start
# getprivgrp
global privileges:
4. Устраните проблемы PAM CDE:
SAM выполняет некоторые проверки правильности на
/etc/pam.conf, который вовлекает попытку найти команду, используя несколько различных путей для каждого
service_name. Хотя мы и не устанавливали CDE, все же наш
pam.conf файл содержит входы dtlogin и dtaction для каждого из типов
PAM модуля; например:
dtlogin auth required /usr/lib/security/libpam_unix.1
dtaction auth required /usr/lib/security/libpam_unix.1
5. Устраните запуск hparray.
По некоторым причинам имеется запуск символьных указателей (symlinks pointing), чтобы выстроить сценарий запуска, который содержится в
filesets, в котором мы не нуждаемся (OS-ЯДРО.
C2400-UTIL и OS-ЯДРО. МАССИВ - MGMT) так что мы удаляем их:
# for f in /sbin/rc*.d/*; do [ ! -f $f ] && echo $f; done
/sbin/rc1.d/K290hparamgr
/sbin/rc1.d/K290hparray
/sbin/rc2.d/S710hparamgr
/sbin/rc2.d/S710hparray
# rm /sbin/rc1.d/K290hparamgr
# rm /sbin/rc1.d/K290hparray
# rm /sbin/rc2.d/S710hparamgr
# rm /sbin/rc2.d/S710hparray
6. Установленное по умолчанию значение umask.
Один побочный эффект преобразования к доверенной системе, является то, что значение по умолчанию
umask 0, преобразовано к 07077.
7. Ограничите корневой вход в систему консолью.
8. # echo console > /etc/securetty
9. # chmod 400 /etc/securetty
10. Разрешие inetd вход. Добавьте -l параметр к INETD_ARGS переменной среды в
/etc/rc.config.d/netdaemons:
export INETD_ARGS=-l
11. Удалите ненужные псевдо-учетные записи.
Сначала мы исследуем некоторые группы, которые могли бы быть удалены; наша основная стратегия состоит в том, если не имеется никаких процессов, которые выполнены с данным пользователем или группой, и не имеется никаких файлов, принадлежащих пользователю или группе, мы удаляем их:
# find / -group lp -o -group nuucp -o -group daemon -exec ls -ld {} \;
# groupdel lp
# groupdel nuucp
# groupdel daemon
# find / -user uucp -o -user lp -o -user nuucp -o -user hpdb \
> -o -user www -o -user daemon -exec ls -ld {} \;
# userdel uucp
# userdel lp
# userdel nuucp
# userdel hpdb
# userdel www
# userdel daemon
Для остающихся псевдо-учетных записей (bin, sys и
adm), Вы должны изменить оболочку входа в систему к некоторому недопустимому пути, например /, или рассмотрите использование
noshell программы Titan (http://www.fish.com/titan/).
# pwget -n bin
bin:*:2:2:NO LOGIN:/usr/bin:/
12. Конфигурируйте nsswitch.conf политику
Если вы хотите сконфигурировать DNS, вы можете сделать это сейчас. Вы можете заставить
nsswitch.conf искать только местные файлы:
# cp /etc/nsswitch.files /etc/nsswitch.conf
# chmod 444 /etc/nsswitch.conf
13. Измените основной root каталог к /root.
Мы изменяем основной root каталог от значения по умолчанию / к
/root. Отредактируйте /etc/passwd, и измените
root вход к:
root:*:0:3::/root:/sbin/sh
Тогда сформируйте каталог, и обновите TCB:
# mkdir /root
# chmod 700 /root
# mv /.profile /root
# pwconv
Обновите, если требуется tcb, чтобы соответствовать /etc/passwd.
1. Отключите службу inetd
Мы должны быть способны идентифицировать каждую
TCP и UDP службу выдаваемую netstat -af inet. Службы, которые не необходимы или не могут быть защищены, должны быть заблокированы. Примеры таких служб включают
UDP и TCP small servers, подобно ECHO, chargen, daytime, time и discard; Berkeley r*, talk, и т.д. Некоторые компьютеры имеют полностью пустой
inetd.conf. Если вы используете пустой inetd.conf, вы можете вообще не выполнять
inetd. Вы можете отключать запуск и завершение
inetd, удаляя соответствующие символьные связи в
rc каталогах:
# Rm /sbin/rc2.d/S500inetd
# Rm /sbin/rc1.d/K500inetd
Для оставшихся сервисов, рассмотрите использование
inetd.sec, который разрешает идентификацию основанную на IP адресах для отдаленных систем.
2. Отключите другие службы
А. Отключите доступ из сети к syslogd.
Б. Отключите SNMP демон.
Отредактируйте файлы конфигурации запуска SNMP:
1. /etc/rc.config.d/SnmpHpunix
Set SNMP_HPUNIX_START to 0: SNMP_HPUNIX_START=0
2. /etc/rc.config.d/SnmpMaster
Set SNMP_MASTER_START to 0: SNMP_MASTER_START=0
3. /etc/rc.config.d/SnmpMib2
Set SNMP_MIB2_START to 0: SNMP_MIB2_START=0
4. /etc/rc.config.d/SnmpTrpDst
Set SNMP_TRAPDEST_START to 0: SNMP_TRAPDEST_START=0
C. Отключите демон swagentd (SD-UX).
Выполнить это достаточно сложно. Сценарий swagentd исполняется сначала при запуске, и исполняет различные задачи, основанные на параметре имени программы. Например, если он выполняется, как S100swagentd, он удалит файлы, перечисленные в
/var/adm/sw/cleanupfile. Также, чтобы работал должным образом сценарий swconfig,
swagentd должен выполнятся. Наше решение состоит в том, чтобы создать новый сценарий, который будет сконфигурирован, чтобы немедленно уничтожить демон
swagentd после S120swconfig.
Вот ключевая часть уничтожающегося сценария:
start)
/usr/sbin/swagentd -k
sleep 1
findproc swagentd
if [ "$pid" != "" ]; then
kill $pid
sleep 5
findproc swagentd
if [ "$pid" != "" ]; then
kill -9 $pid
sleep 5
findproc swagentd
if [ "$pid" != "" ]; then
echo "UNABLE TO KILL SWAGENTD PROCESS!!!"
rval=3 # REBOOT!!!
fi
else
rval=0
fi
else
rval=0
fi
;;
Мы пытаемся уничтожить демон 3 раза, с увеличением уровня силы. Если мы не можем остановить демон, используя
kill -9, мы устанавливаем rval=3, который вызовет перезагрузку.
Для конфигурирования, используем следующее:
# cp /tmp/swagentdk /sbin/init.d
# chmod 555 /sbin/init.d/swagentdk
# ln -s /sbin/init.d/swagentdk /sbin/rc2.d/S121swagentdk
# rm /sbin/rc2.d/S870swagentd
# rm /sbin/rc1.d/K900swagentd
D. Отключите демон sendmail
Установите переменную среды SENDMAIL_SERVER в 0 в
/etc/rc.config.d/mailservs:
export SENDMAIL_SERVER=0
E. Отключите демон rpcbind
Мы не планируем выполнять какие либо RPC сервисы, и нуждаемся в отключении запуска
rpcbind (это - portmap замена на HP-UX 11.0). После некоторого просмотра в
/etc/rc.config.d мы находим, что rpcbind начинается со сценария
nfs.core, так что мы отключаем его в rc каталогах запуска.
# rm /sbin/rc1.d/K600nfs.core
# rm /sbin/rc2.d/S400nfs.core
# mv /usr/sbin/rpcbind /usr/sbin/rpcbind.DISABLE
Также это приведет к отключению запуска
nfskd процесса, который мы видели в предыдущем выводе ps.
После перезагрузки, чтобы проверить модификации, сделанные сценариями запуска, мы можем проверить
netstat и lsof выводы и проверить, чтобы не осталось никаких сетевых сервисов. Мы можем также снова проверить вывод
ps, чтобы проверить, что заблокированный демон не был запущен:
# nettlconf -L -console 0
# nettl -stop
# nettl -start
Initializing Network Tracing and Logging...
Команда Nettlconf изменяет файл конфигурации
nettl, /etc/nettlgen.conf, так что это изменение сохранится поперек системных запусков.
Pwgrd – кэширующий демон для паролей и групп. Так как мы имеем очень маленький файл паролей и
груп, то демон нам не нужен. Также, небольшой анализ работы с
lsof и tusc (Trace Unix System Calls) показывает нам, что они прослушиваются на сокетах домена
Unix для клиентских запросов, и мы не хотим позволять командные каналы, подобно этим процессам, выполняющимся как root, так что у нас есть дополнительный стимул отключить их:
Установите переменную среды PWGR в
0 в /etc/rc.config.d/pwgr:
PWGR=0
Мы также удаляем устаревшие сокеты, которые предотвратят ненужные
libc создание сокета и запросы несуществующему
pwgrd слушателю:
# Rm /var/spool/pwgr/*
# Rm /var/spool/sockets/pwgr/*
Ptydaemon - загадочный демон. Как нам кажется он используется только как
vtydaemon, который мы не используем. Мы уничтожаем его, и проверяем, можем ли мы все еще входить в систему дистанционно (мы временно даем возможность
telnetd проверить это). Все работает прекрасно, так что можно отключить запуск ptydaemon:
Установите переменную среды PTYDAEMON_START в 0 в
/etc/rc.config.d/ptydaemon: PTYDAEMON_START=0
Очистка старого файла регистрации:
# Rm /var/adm/ptydaemonlog
Многие Unix системы, включая HP-UX, поставляются с многочисленными программами, которые являются
set-uid или set-gid.
Многие из этих программ не используются или используются только root пользователем. Многие из уязвимостей, которые обнаружены в
Unix утилитах, полагаются на the set-uid root, чтобы поднять привилегии. Вы можете улучшить защиту вашей системы, удаляя эти программы или, удаляя
set-id bit. Чтобы получить список всех файлов у
set-uid или gid bit на системе, вы можете выполнить:
# find / \( -perm -4000 -o -perm -2000 \) -type f -exec ls -ld {} \;
Вы, скорее всего, увидите более чем 100 файлов (в типовой конфигурации их 145). Вы можете обратить внимание, что имеются два набора команд
LVM (в /sbin/ и /usr/sbin /), каждая с более чем 25 ссылок, которые являются
set-uid root. Также, SD команды - set-uid root. Следующие изменения разрешений сильно уменьшат размер вашего
set-id списка:
# chmod u-s /usr/sbin/swinstall
# chmod u-s /usr/sbin/vgcreate
# chmod u-s /sbin/vgcreate
Вы также обратите внимание, что имеются
некоторые общедоступные библиотеки, которые имеют множество наборов
set-uid bit; причина для этого неизвестна, однако безопасно удалить их. Если вы предварительно не удалили все сохраненные файлы заплат в
/var/adm/sw/save /, вы можете быть удивлены увидев, что они сохранились как
set-id. Они защищены от исполнения не-корневыми пользователями из-за 500 режима на
/var/adm/sw/save/ каталоге.
Наша стратегия состоит в том, чтобы удалить
set-id bits из всех файлов, а затем выборочно добавлять их к некоторым программам, которые должны быть выполнены не-корневыми пользователями.
Следующие команды удалят универсальный set-uid и
set-gid bits из всех файлов, затем обратно добавляют их к SU и к общедоступной версии
lib PAM команды passwd:
# find / -perm -4000 -type f -exec chmod u-s {} \;
# find / -perm -2000 -type f -exec chmod g-s {} \;
# chmod u+s /usr/bin/su
# chmod u+s /usr/bin/passwd
/usr/bin/passwd имеет 5 ссылок и включает, chfn, chsh, nispasswd и
yppasswd.
Команды, которым вы оставляете set-id, зависят от определенного использования и политики вашего компьютера. Во многих случаях,
/usr/bin/su может быть единственная программа на системе, которая должна быть
set-uid.
Множество команд будет прекрасно функционировать без привилегий, используя значение по умолчанию или обычно используемые опции, включая
bdf, uptime и arp - однако некоторые функциональные возможности могут быть потеряны для
некорневых пользователей. Например, вы больше не сможете определить параметр
filesystem для bdf:
$ bdf /dev/vg00/lvol3
bdf: /dev/vg00/lvol3: Permission denied
Недавно установленная система HP-UX будет содержать множество файлов, которые могут быть перезаписаны другими (002 бит установлен в битах режима). Эти файлы могут быть перечислены следующей командой:
# find / -perm -002 ! -type l -exec ls -ld {} \;
Мы не отображаем символьные линки с записями дополнительных установочных битов, потому что биты режима не используются для проверки разрешения.
Один из подходов состоит в том, чтобы удалить запись дополнительных битов от всех файлов, и выборочно добавлять их к тем файлам и каталогам, где это необходимо. Следующая команда удаляет запись дополнительных битов из всех файлов с этим набором:
# find / -perm -002 ! -type l -exec chmod o-w {} \;
Теперь мы разрешаем разрешения файлов, которые должны быть перезаписываемыми другими пользователями:
# chmod 1777 /tmp /var/tmp /var/preserve
# chmod 666 /dev/null
Обратите внимание, что мы также устанавливаем второй промежуточный бит(sticky bit) (01000) в перезаписываемых каталогах подобно
/tmp и /usr/tmp. Это предотвратит непривилегированных пользователей от удаления или переименования файлов в каталогах, которые им не принадлежат.
Настройка защиты сети.
HP-UX 11 содержит команду ndd, чтобы исполнить настройку сети.
Ndd -h выводит справку для каждого поддерживаемого и неподдерживаемого
ndd tunable параметра, который может быть изменен. После исследования этого списка, мы решаем, что
следующие - кандидаты на изменение на компьютере:
Сетевое устройство | Параметр | Значение по умолчанию | Предлагаемое значение |
/dev/ip | ip_forward_directed_broadcasts | 1 | 0 |
/dev/ip | ip_forward_src_routed | 1 | 0 |
/dev/ip | ip_forwarding | 2 | 0 |
/dev/ip | ip_ire_gw_probe | 1 | 0 |
/dev/ip | ip_pmtu_strategy | 2 | 1 |
/dev/ip | ip_send_redirects | 1 | 0 |
/dev/ip | ip_send_source_quench | 1 | 0 |
/dev/tcp | tcp_conn_request_max | 20 | 500 |
/dev/tcp | tcp_syn_rcvd_max | 500 | 500 |
/dev/ip | ip_check_subnet_addr | 1 | 0 |
/dev/ip | ip_respond_to_address_mask_broadcast | 0 | 0 |
/dev/ip | ip_respond_to_echo_broadcast | 1 | 0 |
/dev/ip | ip_respond_to_timestamp_broadcast | 0 | 0 |
/dev/ip | ip_respond_to_timestamp | 0 | 0 |
/dev/tcp | tcp_text_in_resets | 1 | 0 |
Некоторые из значений по умолчанию соответствуют нашему привилегированному значению, но мы можем выбирать устанавливать их так или иначе, на всякий случай, так как значение по умолчанию может в будущем измениться.
Ndd поддерживает -c опцию, которая просматривает значения и перестраиваемый список из файла
/etc/rc.config.d/nddconf. Однако, имеются некоторые проблемы с заданной по умолчанию установкой. Сначала, во время этой записи,
ndd -c только способен обработать 10 перестраиваемых списков (tunables) в
nddconf. Затем, ndd -c выполняется в конце
net сценария, который появляется после того, как сетевые интерфейсы были сконфигурированы. Одна из проблем это то, что мы слишком поздно устанавливаем ip_check_subnet_addr, если мы используем подсетевой нуль (subnet zero) в локальной части сети. Более важно, установить
tunables прежде, чем сетевые интерфейсы сконфигурированы (проблема упорядочения была устранена в одной из заплат, но ограничение в 10
tunable все равно осталось).
В качестве искусственного приема, мы можем использовать новый
startup скрипт и файл конфигурации:
# cp /tmp/secconf /etc/rc.config.d
# chmod 444 /etc/rc.config.d/secconf
# cp /tmp/sectune /sbin/init.d
# chmod 555 /sbin/init.d/sectune
# ln -s /sbin/init.d/sectune /sbin/rc2.d/S009sectune
Sectune и примеры secconf доступны для загрузки:
http://people.hp.se/stevesk/secconf и
http://people.hp.se/stevesk/sectune.
В этом месте вы можете устанавливать, проверять и конфигурировать прикладные программы, которые вы будете использовать на компьютере, типа
BIND, Web сервера, firewall и т.д. Программное обеспечение для безопасности, типа
SSH и TCP wrappers могут быть установлены на этом этапе, как определено в соответствии с определенными требованиями защиты и использованием компьютера. Снова, критическое предостережение должно быть осуществлено при установке нового программного обеспечения на вашем главном. Вы должны вообще получить самую последнюю версию программы, содержащее все исправления всех известных дефектов защиты. Вы можете установить программу сначала на другой системе и определить, может ли она быть защищена. Мыслите подобно нападающему, и гарантируйте, что ваш компьютер способен защитить себя с установленной программой.
Создания системы восстановления конфигурации.
Затем мы создаем самозагружаемую систему восстановления корневой; эта система может также использоваться, чтобы имитировать систему к другим аппаратным средствам, поддержаны с той же самой программной конфигурацией. Самый простой способ выполнить следующую команду:
# /opt/ignite/bin/make_recovery -Ai
Option -A specified. Entire Core Volume Group/disk will be backed up.
***************************************
HP-UX System Recovery
Going to create the tape.
System Recovery Tape successfully created.
Используя представленную методологию, вы можете создать защищенный компьютер на основе
HP-UX.
В Матрице безопасности выбор очевиден