Основы защиты компьютера. UNIX-среда .

UNIX прост. Но надо быть гением, чтобы понять его простоту.

Денис Ритчи (Dennis Ritchie)

Краткая предыстория

Первоначально операционная система UNIX была разработана в конце 1960-х годов сотрудниками компании Bell Labs, в первую очередь Кеном Томпсоном (Kenneth Thompson), Денисом Ритчи (Dennis MacAlistair Ritchie) и Дугласом МакИлроем (Douglas McIlroy) (рис. 8.1). Уже к 1978 году система была установлена более чем на 600 персональных компьютерах, прежде всего в исследовательских институтах.

Рис. 8.1. Кен Томпсон и Денис Ритчи – создатели UNIX

В начале 1980-х годов компания AT&T, которой принадлежала Bell Labs, осознала всю ценность операционной системы UNIX, начав тем самым разработку ее коммерческой версии. Впоследствии многие компании, лицензировав UNIX-код у AT&T, успешно разработали собственные коммерческие разновидности UNIX, такие как HP-UX, AIX, Solaris, IRIX. В 1991 году Линус Товальдс (Linus Benedict Torvalds) опубликовал ядро Linux. Дистрибутивы этой системы (в частности, Red Hat и Debian), включающие ядро, утилиты GNU и дополнительное программное обеспечение, стали бешено популярны как среди любителей, так и среди профессионалов.

Идеи, заложенные в основу UNIX, оказали огромное влияние на развитие компьютерных операционных систем. В настоящее время UNIX-системы признаны одними из самых надежных и производительных серверных систем. Достаточно лишь посмотреть статистику использования операционной системы на серверах. Комментарии, как говорят, излишни.

ПРИМЕЧАНИЕ

К слову будет сказано, предположение о том, что UNIX-подобную систему трудно встретить на настольном ПК, в корне неверно. Когда фирма Apple искала основу для своей новой операционной системы, она выбрала NEXTSTEP. Данная система относится к UNIX-семейству BSD и основана на ядре Mach. Применение модификации BSD UNIX в Mac OS X делает его одной из наиболее широко используемых версий UNIX.

«Невозможно написать абсолютно качественный код», – это скажет вам любой хороший программист, особенно если речь идет о миллионах строчек программного кода. Представьте себе следующую ситуацию. Код № 1 писала одна группа программистов, код № 2 – другая. В обоих случаях над его созданием работали профессионалы, хорошо знающие свое дело. Однако первый код был на виду и дорабатывался совместными усилиями тысяч светлых голов, постоянно оттачивался и совершенствовался. Второй код был закрыт, и только лишь горстке избранных разработчиков были доступны его тексты… Конечно, в каждом из двух описанных вариантов есть свои плюсы и минусы, однако перейдем ближе к делу.

Основное концептуальное отличие UNIX от Windows – это, конечно же, открытый код. Абсолютное большинство UNIX-систем, включая популярные Linux-клоны, выпускаются по GNU General Public License, которая позволяет любому желающему копировать, изменять и распространять исходный код. Открытый код постоянно дорабатывается и совершенствуется, именно поэтому в UNIX-системах так мало уязвимостей. Этот открытый код (на то он и открытый), ко всему прочему, бесплатен.

Исходный же код Windows закрыт, именно поэтому подобный подход к безопасности часто называют "безопасность в тумане" (security through obscurity).

Из характерных особенностей организации безопасности UNIX-систем хотелось бы отметить и следующие:

? глубоко продуманная технология разделения прав доступа к ресурсам;

? каждый из процессов выполняется строго в своем адресном пространстве (Windows этим похвастаться не может);

? встроенные в ядро тонко конфигурируемые инструменты безопасности (к примеру, IP-Firewall (IPFW) FreeBSD);

ПРИМЕЧАНИЕ

В большинстве UNIX-подобных систем можно задействовать не один, а три (чаще всего) различных межсетевых экрана; зачем это нужно и какой выигрыш от этого можно получить – ответ, в общем, очевидный.

? наличие таких инструментов безопасности, как chroot (более подробно см. далее) и Jail (в BSD-системах), позволяет создать систему, устойчивую даже в случае успешной попытки взлома.

Если кому-то из читателей данный список покажется полным, смеем заверить – перечисленное является лишь верхушкой айсберга безопасности UNIX-систем.

Почему UNIX-системы так любят хакеры? Наверное, потому что UNIX – это свобода действий и прозрачность кода. Как узнать, что выполняет привычная для нас программа в Windows-среде? Интуитивно понятное пространное окно с множеством кнопок – нажимай какую хочешь, просто, как робот, бери и нажимай.

В UNIX все совсем наоборот. Не тебя контролируют, а ты. Свобода! Взял исходный код программы, подправил, как тебе надо, скомпилировал – и вот она, программа, живая и светится (рис. 8.2).

Безопасность UNIX-систем оттачивалась не одним поколением программистов. В контексте данной главы следует упомянуть о таких техниках повышения безопасности, как chroot и Jail (для BSD-систем).

Рис. 8.2. Любимый nmap…

Концепция изоляции – вариант безопасного выполнения кода

Под chroot в UNIX-подобных операционных системах подразумевается техника, позволяющая создать изолированную среду – имитацию корневого каталога файловой системы. Запущенная в такой среде любая программа будет воспринимать только указанный рабочий каталог – и «ни шагу влево». chroot затрагивает только текущий процесс и всех его потомков. Программа в такой изолированной среде не может обращаться к файлам вне этого каталога, что обеспечивает надежный способ защиты в случае компрометации программы в chroot.

К слову будет сказано, chroot-каталог может быть использован, чтобы сымитировать реальную систему с запущенными сетевыми сервисами. Такой искусственно созданный механизм безопасности может быть использован как "наживка" для взломщиков, или honeypot.

Jail, или «тюрьма», – механизм изолирования выполнения процессов в операционных системах UNIX. Системный вызов jail заключает процесс и всех его потомков в изолированную среду выполнения. Процесс, выполняющийся в jail, не имеет возможности получить доступ к тому, что не принадлежит jail. Более того, даже суперпользователь – root – не в состоянии выполнить большинство операций, которые он может выполнять снаружи от jail.

Если chroot и Jail – это инструменты безопасности, обсуждаемые в контексте UNIX-систем, то о следующем инструменте безопасности так сказать нельзя.

Виртуальная машина (от англ. virtual machine) представляет собой программную или аппаратную среду, исполняющую некоторый код. Фактически, как это и следует из названия, виртуальная машина эмулирует работу реального компьютера. Виртуальная машина, как и реальная, может иметь свою операционную систему (и даже несколько), обслуживаемую искусственно эмулированным «железом»: BIOS, ОЗУ, жесткий диск (часть места на жестком диске реального компьютера).

В контексте обеспечения безопасности применение виртуальных машин оправдано там, где высока вероятность поражения вредоносным кодом или нельзя допустить выхода из строя основной системы. Установив несколько виртуальных машин на одну реальную, можно легко и просто сымитировать локальную сеть.

В качестве примеров наиболее популярных виртуальных машин можно привести VMWare, Xen (для UNIX-подобных систем), Microsoft Virtual PC.

Live-CD представляет собой загрузочный диск, на котором имеется все необходимое для развертывания виртуальной операционной системы прямо в памяти компьютера. Live-CD может оказаться особенно полезным, когда необходимо получить доступ к файловой системе, поврежденной или инфицированной вирусом. Применение Live-CD также оправдано в нестандартных вариантах работы пользователя (например, на чужом компьютере или на компьютере без винчестера и т. д.). Примеры LiveCD – Windows LiveCD, Linux Knoppix LiveCD.

Вовсе не надо быть гением, чтобы проследить закономерность – логическую связь между вышеперечисленными техниками безопасности: в каждом из случаев выполнение кода идет в изолированной среде, не затрагивая при этом рабочую зону основной системы.