Учебное пособие Ставрополь сф мггу им. М. А. Шолохова 2009
Скачать 5.26 Mb.
|
22.7.1.3 Файлы, которые могут изменять активного пользователя в процессе выполнения Файлы, для которых разрешены полномочия Set UID ( SUID ) или Set Group ID ( SGID ), могут изменять идентификатор своего активного пользователя или группы в процессе выполнения. Некоторым файлам требуется такая возможность для выполнения своей работы, однако это должен быть ограниченный набор файлов, и ни один из них не должен находиться в домашних каталогах пользователей. Чтобы найти все файлы SUID и SGID , выполните следующие команды: #find / -type f -perm -04000 -ls #find / -type f -perm -02000 -ls При построении системы необходимо выполнить данные команды и сохранить результаты их выполнения. Периодически следует выполнять эти команды и сопоставлять результаты с исходным списком. Любые обнаруженные изменения необходимо исследовать 22.7.1.4 Файлы, доступные для записи всем пользователям Файлы, общедоступные для записи, являются еще одной потенциальной ошибкой в конфигурации системы Unix. Такие файлы позволяют злоумышленнику создать сценарий, который при выполнении будет использовать уязвимость. Если файлы SUID и SGID доступны для записи всем пользователям, у атакующего появляется возможность создать для самого себя самые обширные привилегии. Чтобы выявить все файлы, общедоступные для записи, выполните следующую команду: #find / -perm -2 -type f -ls 340 Следует периодически выполнять эту команду, чтобы находить все общедоступные для записи файлы, имеющиеся в системе. 22.7.2 Мониторинг признаков подозрительной активности Мы уже описали некоторые признаки, которые необходимо отслеживать в системе и которые могут означать проявление угрозы или проникновение в систему (скрытые файлы, файлы SUID и SGID и общедоступные для записи файлы). Существует несколько других способов проверки системы Unix на наличие подозрительной активности. 22.7.2.1 Смешанный режим Интерфейс находится в смешанном режиме, когда в системе работает сниффер (сетевой анализатор пакетов). Сниффер переводит интерфейс в смешанный режим; при этом происходит фиксирование всей информации, проходящей через канал связи. Если при работе интерфейса в данном режиме выполнить команда ifconfig -a , то появится сообщение о том, что интерфейс находится в состоянии PROMISC (признак того, что работает анализатор пакетов). Если сниффер запущен не администратором системы, необходимо провести исследование причин этих обстоятельств. Примечание. Solaris не выдает соответствующего отчета о том, что интерфейс находится в смешанном режиме. Причиной этому является ошибка в программном обеспечении ядра. Чтобы корректным образом проверить, находится ли интерфейс Solaris в смешанном режиме, необходимо использовать команду ifstatus , доступную по адресу ftp://ftp.cerias.purdue.edu/pub/tools/unix/sysutils/iftatus/. 22.7.2.2 Мониторинг активных сетевых соединений Программа netstat Программа netstat используется для выяснения того, какие сетевые соединения находятся в активном состоянии в системе Unix. Команду следует использовать следующим образом: netstat -an . Аргумент « n » сообщает netstat о том, что обработка IP-адресов не требуется. 341 #netstat -an Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:10000 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:515 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:98 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:113 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:79 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:513 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:23 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN udp 0 0 0.0.0.0:10000 0.0.0.0:* udp 0 0 0.0.0.0:518 0.0.0.0:* udp 0 0 0.0.0.0:517 0.0.0.0:* udp 0 0 0.0.0.0:111 0.0.0.0:* raw 0 0 0.0.0.0:1 0.0.0.0:* raw 0 0 0.0.0.0:6 0.0.0.0:* Как видно из результирующих данных, любая строка, содержащая слово « LISTEN », означает, что имеется программа, прослушивающая этот порт. Прослушиваться должны только сконфигурированные администратором порты. Если в системе присутствует прослушиваемый порт, который не конфигурировался администратором, систему необходимо проверить и выяснить, почему порт открыт. Адреса, отображаемые в столбце локальных адресов, заканчиваются номером локального порта (число после столбца). Этот номер порта используется для определения того, является ли соединение входящим или исходящим. Например, если номер локального порта 23, то это входящее подключение к демону telnet. Если номер локального порта равен 1035, а номер внешнего порта - 23, то это исходящее соединение telnet. Программа lsof Одна из проблем, связанных с программой netstat , заключается в том, что данная команда не сообщает, какой процесс поддерживает открытое состояние порта. Поиск процесса, связанного с определенным портом, может стать очень трудной задачей. Однако существует программа под названием lsof (http://ftp.cerias.purdue.edu/pub/tools/unix/sysutil/Isof/), которая предоставляет такую информацию. Сразу после установки программы выполните команду lsof -i , как показано ниже: #lsof -i COMMAND PID USER FD TYPE DEVICE NODE NAME portmap 311 root 4u IPv4 301 UDP *:sunrpc portmap 311 root 5u IPv4 302 TCP *:sunrpc (LISTEN) inetd 439 root 5u IPv4 427 TCP *:ftp (LISTEN) 342 inetd 439 root 6u IPv4 428 TCP *:telnet (LISTEN) inetd 439 root 7u IPv4 429 TCP *:shell (LISTEN) inetd 439 root 9u IPv4 430 TCP *:login (LISTEN) inetd 439 root 10u IPv4 431 UDP *:talk inetd 439 root 11u IPv4 432 UDP *:ntalk inetd 439 root 12u IPv4 433 TCP *:finger (LISTEN) inetd 439 root 13u IPv4 434 TCP *:auth (LISTEN) inetd 439 root 14u IPv4 435 TCP *:linuxconf (LISTEN) lpd 455 root 6u IPv4 457 TCP *:printer (LISTEN) sendmail 494 root 4u IPv4 495 TCP *:smtp (LISTEN) miniserv. 578 root 4u IPv4 567 TCP *:10000 (LISTEN) miniserv. 578 root 5u IPv4 568 UDP *:10000 Как видно из результатов выполнения программы, lsof выводит перечень всех открытых портов с указанием того, какие процессы поддерживают открытое состояние портов. Убедитесь, что вам известно, какие функции выполняет каждый процесс, и почему открыт соответствующий ему порт. Примечание. lsof заменяет номер порта в столбце справа именем порта, если оно присутствует в файле /etc/services 22.7.2.3 Мониторинг активных процессов Администратор также должен изучать результаты выполнения команды ps . Эта программа выводит все активные процессы, имеющиеся в системе, что необходимо при поиске снифферов, так как сниффер может не отображаться в lsof или в netstat . В большинстве систем выполнение команды ps -ef выводит перечень процессов в системе. В тех версиях Unix, где эта команда не работает, следует выполнить команду ps -aux . Результаты выполнения данной команды показаны ниже: 343 #ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 13:09 ? 00:00:04 init root 2 1 0 13:09 ? 00:00:00 [kflushd] root 3 1 0 13:09 ? 00:00:00 [kupdate] root 4 1 0 13:09 ? 00:00:00 [kpiod] root 5 1 0 13:09 ? 00:00:00 [kswapd] root 6 1 0 13:09 ? 00:00:00 [mdrecoveryd] bin 3 11 1 0 13:09 ? 00:00:00 portmap root 327 1 0 13:10 ? 00:00:00 /usr/sbin/apmd -p 10 -w 5 -W root 380 1 0 13:10 ? 00:00:00 syslogd -m 0 root 391 1 0 13:10 ? 00:00:00 klogd daemon 407 1 0 13:10 ? 00:00:00 /usr/sbin/atd root 423 1 0 13:10 ? 00:00:00 crond root 439 1 0 13:10 ? 00:00:00 inetd root 455 1 0 13:10 ? 00:00:00 lpd root 494 1 0 13:10 ? 00:00:00 sendmail: accepting connections root 511 1 0 13:10 ? 00:00:00 gpm -t ps/2 xfs 528 1 0 13:10 ? 00:00:00 xfs -droppriv -daemon -port -1 root 570 1 0 13:10 tty1 00:00:00 login - root root 571 1 0 13:10 tty2 00:00:00 /sbin/mingetty tty2 root 572 1 0 13:10 tty3 00:00:00 /sbin/mingetty tty3 root 573 1 0 13:10 tty4 00:00:00 /sbin/mingetty tty4 root 574 1 0 13:10 tty5 00:00:00 /sbin/mingetty tty5 root 575 1 0 13:10 tty6 00:00:00 /sbin/mingetty tty6 root 578 1 0 13:10 ? 00:00:00 perl /usr/libexec/webmin/miniser root 579 570 0 13:10 tty1 00:00:00 -bash root 621 579 0 13:17 tty1 00:00:00 ps -ef Следует периодически проверять список процессов, работающих в системе. Если обнаруживается что-либо незнакомое, то необходимо выяснить, что это такое. 22.7.2.4 Измененные файлы Когда злоумышленник успешно проникает в систему, он может попытаться изменить системные файлы для обеспечения продолжительного доступа к системе. Файлы, передаваемые в систему, обычно называются «rootkit», так как позволяют злоумышленнику осуществить доступ через корневую (root) учетную запись. В дополнение к таким программам, как снифферы, rootkit может содержать двоичные замещения для следующих файлов: ftpd passwd inetd ps login ssh netstat telnetd 344 Как правило, любой исполняемый файл, который может тем или иным образом помочь злоумышленнику поддерживать доступ, является кандидатом на замещение. Наилучший способ определить, был ли файл заменен - использовать криптографическую контрольную сумму. Лучше всего создавать контрольные суммы всех системных файлов при построении системы, после чего обновлять их при установке системных обновлений. Необходимо хранить контрольные суммы на безопасной системе, чтобы злоумышленник не мог изменить контрольные суммы при изменении файлов. Если имеются подозрения нелегального проникновения в систему, пересчитайте контрольные суммы и сопоставьте их с исходными. Если они совпадают, то файлы изменены не были. Если же контрольные суммы различны, рассматриваемому файлу доверять не следует; его необходимо заменить оригиналом с установочного носителя. Совет. По адресу http://www.chkrootkit.org/ можно найти утилиту, которая помогает в проверке наличия в системе rootkit-ов. 22.7.3 Общий алгоритм аудита системы Unix Этот алгоритм покажет пути проверки систему Unix на ошибки в конфигурации или на наличие неизвестных процессов и учетных записей. - Начните с системы Unix, к которой у вас имеется административный доступ (то есть у вас имеется пароль к корневой учетной записи этой системы) и на которой можно вносить изменения, не затрагивая рабочие приложения. - Найдите файлы загрузки и определите, какие приложения запускаются при загрузке системы. Выявите приложения, которые являются необходимыми для системы, и отключите все остальные. - Просмотрите файл inetd.conf и определите, какие службы включены. Определите службы, необходимые для системы, и отключите все остальные. Не забудьте выполнить команду kill -HUP для процесса inetd , чтобы перезапустить его с использованием новой конфигурации. - Определите, используется ли в системе NFS. Внесите соответствующие изменения в файл dfstab - Если система использует telnet или FTP, загрузите TCP Wrappers и установите программу в системе. Настройте TCP Wrappers на разрешение доступа только к telnet и FTP, согласно требованиям системы. - Найдите файл приветственного сообщения. Определите, используется ли корректное приветственное сообщение. Если это не так, разместите в системе корректное приветственное сообщение. 345 - Выясните, настроены ли в системе требуемые ограничения на пароли согласно политике безопасности организации. Если это не так, внесите соответствующие настройки. - Определите, настроен ли в системе должным образом параметр umask по умолчанию. Если это не так, настройте umask соответствующим образом. - Определите требования для входа через корневую учетную запись. Если администраторам требуется осуществлять вход сначала с использованием их собственного идентификатора (ID), настройте соответствующим образом конфигурацию системы. - Проверьте систему на наличие неиспользуемых учетных записей. Все подобные учетные записи должны быть заблокированы. - Установите в системе соответствующие обновления. - Проверьте систему на некорректные пользовательские идентификаторы. В особенности следует искать учетные записи с UID, значение которого равно 0. - Убедитесь в том, что в системе ведется журнал подозрительной активности, и что файл syslog.conf настроен соответствующим образом. - Произведите в системе поиск скрытых файлов. Если будут найдены необычные скрытые файлы, исследуйте их, чтобы убедиться, что в систему никто не проник. - Произведите поиск файлов SUID и SGID . Если будут обнаружены такие файлы, расположенные в каталогах пользователей, исследуйте их, чтобы убедиться, что в систему никто не проник. - Произведите поиск файлов, общедоступных для записи. Если будут найдены такие файлы, либо устраните проблему посредством изменения разрешений (сначала выясните, для чего эти файлы используются), либо обратите на них внимание владельца. - Проверьте сетевые интерфейсы на наличие любых неправильных настроек. - Проверьте систему на предмет прослушиваемых (активных) портов. Если обнаружится какое-либо несоответствие, найдите процесс, использующий порт, и определите, должен ли данный процесс работать в системе. - Проверьте таблицу процессов в системе и определите, выполняются ли какие-либо несоответствующие процессы. 22.8 Обновления системы Для исправления ошибок и устранения уязвимостей для Unix выпускаются обновления и «патчи» аналогично тому, как это делается для операционных систем семейства Windows. Обновления должны устанавливаться регулярно, чтобы минимизировать число уязвимостей. 346 Различные поставщики систем Unix выпускают средства, помогающие в управлении обновлениями. Компания Sun предлагает программу Solaris Sunsolve Patch Manager , а Red Hat имеет онлайн-систему обновления в интернете (http://www.redhat.com/apps/support/errata/). Примечание. При загрузке обновлений для систем Solaris имейте в виду, что Sun размещает многие обновления в кластере обновлений. Однако кластер обновлений может не содержать некоторых обновлений безопасности. Может понадобиться загрузить их в отдельном порядке и установить вручную. 347 23. БЕЗОПАСНОСТЬ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ 23.1 Введение в защиту ПО Безопасность программного обеспечения (ПО) в широком смысле является свойством данного ПО функционировать без проявления различных негативных последствий для конкретной компьютерной системы. Под уровнем безопасности ПО понимается вероятность того, что при заданных условиях в процессе его эксплуатации будет получен функционально пригодный результат. Причины, приводящие к функционально непригодному результату могут быть разными: сбои компьютерных систем, ошибки программистов и операторов, дефекты в ПО. При этом дефекты принято рассматривать двух типов: преднамеренные и непреднамеренные. Первые являются, как правило, результатом злоумышленных действий, вторые - ошибочных действий человека. При исследовании проблем защиты ПО от преднамеренных дефектов неизбежна постановка следующих вопросов: - кто потенциально может осуществить практическое внедрение программных дефектов деструктивного воздействия в исполняемый программный код; - каковы возможные мотивы действий субъекта, осуществляющего разработку таких дефектов; - как можно идентифицировать наличие программного дефекта; - как можно отличить преднамеренный программный дефект от программной ошибки; - каковы наиболее вероятные последствия активизации деструктивных программных средств при эксплуатации компьютерных систем (КС). При ответе на первый вопрос следует отметить, что это: непосредственные разработчики алгоритмов и программ для компьютерных систем. Они хорошо знакомы с технологией разработки программных средств, имеют опыт разработки алгоритмов и программ для конкретных прикладных систем, знают тонкости существующей технологии отработки и испытаний программных компонентов и представляют особенности эксплуатации и целевого применения разрабатываемой КС. Отметим, что алгоритмические и программные закладки могут быть реализованы в составе программного компонента вследствие следующих факторов: - в результате инициативных злоумышленных действий непосредственных разработчиков алгоритмов и программ; 348 - в результате штатной деятельности специальных служб и организаций, а также отдельных злоумышленников; - в результате применения инструментальных средств проектирования ПО, несущих вредоносное свойство автоматической генерации деструктивных программных средств. Правомерно утверждать, что вредоносные программы, в отличие от широко применяемых электронных закладок, являются более изощренными объектами, обладающими большей скрытностью и эффективностью применения. 23.2 Угрозы безопасности ПО Угрозы безопасности информации и программного обеспечения компьютерных систем возникают как в процессе их эксплуатации, так и при создании этих систем, что особенно характерно для процесса разработки ПО, баз данных и других информационных компонентов КС. Наиболее уязвимы с точки зрения защищенности информационных ресурсов являются так называемые критические компьютерные системы. Критические компьютерные системы - сложные компьютеризированные организационно-технические и технические системы, блокировка или нарушение функционирования которых потенциально приводит к потере устойчивости организационных систем государственного управления и контроля, утрате обороноспособности государства, разрушению системы финансового обращения, дезорганизации систем энергетического и коммуникационно - транспортного обеспечения государства, глобальным экологическим и техногенным катастрофам. При решении проблемы повышения уровня защищенности информационных ресурсов КС необходимо исходить из того, что наиболее вероятным информационным объектом воздействия будет выступать программное обеспечение, составляющее основу комплекса средств получения, семантической переработки, распределения и хранения данных, используемых при эксплуатации критических систем. Программные средства деструктивного воздействия по своей природе носят, вредоносный характер, а последствия их активизации и применения могут привести к значительному или даже непоправимому ущербу. Такие вредоносные программы будем называть |