Когда заходит речь о компьютерной безопасности, то первым делом вспоминаются вирусы. И здесь у Unix есть огромное преимущество перед Dos/Windows: в Unix вирусов не существует. Основная причина этого заключается в ограничении прав доступа: в Unix у программ просто нет возможности писать что угодно, куда угодно и когда угодно, что является необходимым условием для существования и распространения вирусов. Даже если какой-нибудь пользователь случайно и подхватит некую "зловредную" программу, то обычно максимум, что она сможет сделать -- это испортить файлы самого пользователя, на операционную систему же это никак не повлияет. Кроме того, хотя во многих Unix и существуют некоторые "дыры" в защите, разнообразие систем делает создание программ, использующих эти дыры, крайне трудоемкой задачей. Даже разные версии/дистрибутивы Linux на одной и той же платформе Intel x86 могут отличаться столь сильно, что "нехорошая" программа попросту зайдет в тупик и не сможет ничего сделать. В принципе, в Unix могут существовать "черви" -- программы, самостоятельно распространяющиеся по сети и заражающие компьютеры. Однако их разработка является не менее трудоемкой задачей, и количество известных червей крайне мало. Даже знаменитый "Червь Морриса", который в ноябре 1988 года поразил большое количество систем в США, заражал лишь компьютеры двух типов. В настоящее же время многообразие систем несравненно выше, а таких огромных дыр в защите, какие существовали в конце 80-х, практически не осталось. (Подробно почитать про Червь Морриса можно по адресу http://www.msnbc.com/news/209745.asp.) Таким образом, большинство атак на Unix-системы производится не автоматическими средствами, а требует участия человека. | ||
Технические аспекты С точки зрения пользователя, нарушение безопасности может принимать одну из трех форм:
Под "приватными данными" понимаются как файлы в компьютерах, так и электронная корреспонденция. Нарушение безопасности всегда происходит по одной из двух причин. Первая -- несовершенство программных средств. Вторая -- ошибки человека. С технической точки зрения, нарушение безопасности может включать:
Последний случай наиболее опасен, поскольку наличие прав "root" позволяет делать с системой все, что угодно, включая первые шесть вариантов. Атаки могут проводиться одним из трех основных способов:
При взломе в подавляющем числе случаев используется один и тот же прием -- программе, исполняющейся с высокими привилегиями, "скармливаются" такие данные, на которые она не рассчитана, и она или просто "падает" (получается DOS-атака), или исполняет код, "подсунутый" взломщиком. Причем в качестве такой уязвимой программы может выступать и ядро. Например, в конце 1997-го/начале 1998-го года весьма популярны были атаки, основанные на посылке машине-жертве "неправильного" IP-пакета, так что система просто "падала замертво" (именно на этом принципе была основана программа WinNuke). Хорошую возможность взлома дает физический доступ к компьютеру. Например, достаточно загрузить свой экземпляр системы с дискеты и с правами пользователя "root" делать все, что заблагорассудится. Хотя большинство современных BIOS дают возможность отключить загрузку с дискеты (а изменение настроек самого BIOS закрыть паролем), остается еще возможность переставить жесткий диск в другой компьютер. Впрочем, защититься от "отверточного" взлома очень трудно, и это совсем отдельная тема. После успешного взлома злоумышленник обычно модифицирует системные файлы (например, подменяет некоторые программы своими). Обнаружить такую замену зачастую можно, регулярно выполняя команду "rpm -ya" и анализируя ее результаты. Меры предосторожности Основные меры предосторожности, которые следует соблюдать, достаточно просты и диктуются здравым смыслом (вести себя аккуратно, не вступать в беспорядочные связи):
При обнаружении случаев взлома надо не пытаться разобраться самостоятельно, а немедленно связаться с компетентным персоналом. В частности, в ИЯФ следует обращаться в ОВС. Не следует считать безопасность своего компьютера личным делом -- "пускай ломают, мне не жалко". Дело в том, что взломав чей-то личный компьютер, на порядок легче взломать другие машины в той же организации -- взлом "изнутри" всегда проще. | ||
Хорошим стартовым пособием является глава 23 книги "UNIX: руководство системного администратора". Кроме того, многое можно почерпнуть из Internet -- см. к примеру, раздел Computers & Internet -> Security and Encryption -> Unix в Web-директории Yahoo!. | ||
Под локальным взломом понимается несанкционированные действия (получение прав "root", нарушение работы системы и т.д.), проведенные "из под" обычного непривилегированного пользователя. При этом не следует считать всех зарегистрированных в системе пользователей потенциальными злоумышленниками -- зачастую взлом "снаружи" проводится в два этапа: сначала получаются права обычного пользователя (к примеру, путем похищения пароля), а затем уже эксплуатируется какая-нибудь локальная "дырка". В подавляющем большинстве случаев локальный взлом производится при помощи так называемых "программ с флагом смены идентификатора пользователя". | ||
Что это такое Обычно вместо громоздкого термина "программа с флагом смены идентификатора пользователя" используется "сетъюидная программа" или "сюидная программа" (калька с английского "suid program") -- этот термин мы и будем употреблять далее. Сюидная программа -- это программа, которая исполняется с правами (uid) не запустившего ее пользователя, а того, кому принадлежит файл программы. Реже используется смена идентификатора группы ("эсгидная программа" -- "sgid program"). Внешне сюидная программа отличается тем, что в правах доступа, показываемых командой "ls -l", вместо символа "x" в правах владельца стоит "s":
Сюидные программы используются в тех случаях, когда для выполнения некоей операции требуются права "root". В основном это требуется для авторизации и для доступа к неким файлам/ресурсам, недоступным обычному пользователю. Примерами сюидных программ являются rlogin (права нужны для создания сокета с номером порта < 1024), passwd (для записи в файл /etc/passwd или для чтения/записи /etc/shadow), xterm/nxterm (для получения устройства виртуального терминала), x11amp (для получения realtime-приоритета). Вообще говоря, в настоящее время сюидность считается одной из самых неудачных (или, по крайней мере, самых неудачно реализованных) концепций в Unix. Программ, которым реально требуется сюидность, не так уж много -- в типичной установке из дистрибутива RedHat 5.2 их около полусотни.
Одно из применений сюидности при взломе -- непосредственно после взлома создать root-сюидную программу, позволяющую интерактивно вводить команды (на эту роль хорошо подходит любой shell), или же запускающую shell с правами "root". Поэтому надо уметь находить имеющиеся на компьютере сюидные программы -- во-первых, чтобы знать программы, в которых потенциально могут обнаружиться дыры, а во-вторых, чтобы обнаруживать уже произведенный взлом. Как установить и удалить атрибут setuid Поскольку атрибут setuid входит в права доступа файла, то для манипуляций с ним используется команда chmod. Для установки этого атрибута служит команда (избегайте этого!), а для удаления --
Атрибут setgid отличается тем, что символ "s" отображается вместо "x" в правах доступа группы, а не владельца:
Для его установки/удаления команде chmod указывается "g+s" и "g-s" соответственно.
Поиск сюидных программ Для поиска имеющихся на диске сюидных программ используется команда find. Команда найдет все файлы с установленным флагом setuid. Чтобы включить в список также файлы с атрибутом setgid, следует воспользоваться командой
Чтобы сразу выдать листинг найденных файлов, подойдет команда
Поиск сюидных программ следует выполнять, естественно, как пользователь "root". | ||||||||||||||||
Риск для безопасности, связанный с использованием компьютерных сетей, в основном сводится к трем факторам:
Первые две проблемы в основном могут быть решены путем использования пакета ssh вместо ftp, telnet и rlogin/rsh/rcp, а на третьей мы остановимся чуть подробнее. | ||
Хотя в принципе "дыра" может обнаружиться в любой сетевой программе, исторически наиболее подверженными взлому являются подсистемы FTP, NFS, Samba (сеть MS-Windows), Sendmail (электронная почта) и NIS/NIS+ (Network Information System, она же YP -- "yellow pages", сетевая информационная система от фирмы Sun). Самое простое решение -- не использовать эти системы, не всегда доступно. Если от FTP еще можно отказаться (а от NIS/NIS+ просто надо отказаться), то с остальными сложнее. Для пакета Sendmail существует несколько аналогов, но отсутствие (точнее, необнаруженность) в них дыр объясняются в значительной степени их меньшей распространенностью. Для NFS же реальной альтернативы попросту нет, и если сетевая файловая система реально нужна, то с риском приходится мириться. Собственно, с NFS связаны две проблемы. Первая -- собственно дыры в реализации. Вторая -- то, что авторизация выполняется по IP-адресам, и если злоумышленник установит для своего компьютера адрес доверенной машины, то в то время, когда та выключена (а при небольшой сноровке -- даже когда включена), он может получить доступ к экспортируемым ресурсам. Использование же Samba-сервера на большинстве машин попросту ни к чему. Реально он требуется лишь на компьютерах, являющихся серверами для Windows-машин, а в таких случаях следует доверять заботу о серверах квалифицированным системным администраторам -- правильная настройка Samba в любом случае дело непростое.
При реальной необходимости использования указанных систем остается два способа поддержания безопасности. Первый -- постоянное отслеживание новых версий. Второй -- ограничение доступа по сети. | ||||||||
Ограничение доступа по NFS рассмотрено в разделе "Сетевая файловая система NFS". Отметим лишь, что следует давать доступ как можно меньшему количеству машин, и при возможности -- доступ только на чтение, а не на чтение/запись. Ограничение доступа к таким подсистемам, как ftp, finger, telnet, talk и т.д. осуществляется пакетом tcp-wrappers (программа tcpd). При проверке разрешения на доступ tcpd просматривает файлы /etc/hosts.allow и /etc/hosts.deny и (вольный перевод фрагмента man-страницы):
Изначально /etc/hosts.allow и /etc/hosts.deny пусты, что означает "доступ разрешен всем и ко всему". Язык описания правил доступа довольно гибкий, поэтому мы лишь приведем пример простейшего содержания файлов конфигурации для случая, когда доступ ко всем сервисам дается компьютерам Tom и Jerry из домена example.net, компьютеру Cathy разрешается finger, а всем остальным запрещено все. Файл /etc/hosts.allow:
Файл /etc/hosts.deny:
Имена компьютеров следует указывать полные -- с именем домена. Если при такой конфигурации с компьютера VeryBad попробовать запустить на нашу машину finger или telnet, то доступ ему будет закрыт:
Подробное описание файлов /etc/hosts.allow и /etc/hosts.deny можно найти в man-странице hosts_access(5). | |||||
Назначение ssh Ssh -- это программа для удаленного входа в другой компьютер через сеть, удаленного исполнения команд и копирования файлов между компьютерами. "Ssh" расшифровывается как "Secure Shell". Ssh обеспечивает надежную авторизацию и безопасную передачу данных по открытым каналам связи. Ssh предназначена для замены программ rlogin, rsh, rcp и telnet. При использовании программ telnet, rlogin и ftp есть две проблемы, связанные с безопасностью.
Ssh решает обе эти проблемы. Даже при минимальной установке, безо всякой настройки, когда для входа на другой компьютер надо вводить пароль, этот пароль передается по сети уже зашифрованным и не может быть перехвачен. Как ssh работает Для того, чтобы объяснить принцип работы Ssh, воспользуемся аналогией со шпионской деятельностью (благо, общего очень много) на примере известного героя Штирлица. Представим себе, что Штирлицу ("Юстас") надо передать в Центр ("Алекс") некое сообщение, но старый шифр раскрыт. Что делать? Самый очевидный ответ -- организовать где-нибудь встречу для передачи Юстасу нового шифра ("договориться о новом коде"). Но что, если это невозможно, и единственный канал связи -- открытый? Казалось бы, безвыходная ситуация. Однако сравнительно недавно, в середине 1970-х, математиками был открыт алгоритм RSA, позволяющий использовать в криптографии так называемые "публичные ключи". Идея заключается в том, что есть два криптоключа -- один для зашифровки, а другой для расшифровки. Ключ для зашифровки называется "публичным ключом", поскольку может быть свободно передан любому и не является секретным. Ключ же для расшифровки является секретным и называется "приватным ключом". RSA основан на невозможности получить приватный ключ, требуемый для расшифровки, из публичного ключа (по крайней мере, за разумное для человека время). Таким образом, если бы действие "Семнадцати мгновений весны" происходило в наше время, то Алексу достаточно было бы открытым текстом отправить Юстасу новый публичный ключ, и Мюллеру и компании осталось бы только рвать на себе волосы.
| ||||||||
Пакет Ssh был создан в Технологическом Университете Хельсинки и его домашняя страница расположена по адресу http://www.ssh.fi/sshprotocols2/а исходные тексты доступны по адресу ftp://ftp.cs.hut.fi/pub/ssh/зеркало в Новосибирске -- ftp://sunsite.nstu.ru/pub/mirrors/ftp.cs.hut.fi/ssh/ Существует два варианта Ssh: версия 1 и версия 2, именуемых обычно ssh1 и ssh2. Хотя ssh2 является более продвинутым вариантом, более распространен пока ssh1, на нем мы и сосредоточимся. На момент написания этих строк последней в семействе ssh1 является версия 1.2.27. Хотя можно взять исходные тексты по указанному выше адресу и самостоятельно собрать пакет, лучше воспользоваться готовыми .rpm-файлами. Наиболее распространенным rpm-дистрибутивом Ssh является набор из четырех пакетов, собираемых в Чехии. В ИЯФ они доступны в директории ftp://rdist.inp.nsk.su/pub/Linux/security/i386/или по NFS в директории это пакеты ssh, ssh-clients, ssh-server и ssh-extras, все с суффиксом -1.2.27-2i.i386.rpm. Однако эти пакеты не устанавливаются в RedHat 5.2, поскольку требуют слишком новых версий библиотек. Поэтому можно воспользоваться rpm-пакетом сборки SibLUG (Siberian Linux Users Group), доступным по адресу ftp://sunsite.nstu.ru/pub/linux/install/siblug/RH5.x/i386/ Собственно пакет Ssh состоит из трех компонентов: сервер (sshd), клиентские программы (ssh, slogin, scp) и нескольких служебных программ. Пакет ssh-1.2.27-1.i386.rpm от SibLUG содержит их все. Для установки достаточно инсталлировать .rpm, и остальные действия (генерация публичного и приватного ключей для данного компьютера) будут произведены автоматически. | ||
Программы ssh, slogin и scp используются точно так же, как и rsh, rlogin и rcp. Отличия заключаются, во-первых, в том, для беспарольного входа файла .rhosts на удаленном компьютере недостаточно, а во-вторых, даже команды "ssh <команда>" и "rcp" при отсутствии беспарольного входа просто спросят пароль. Кроме того, scp, в отличие от rcp, еще и показывает процент сделанной работы по мере копирования. При первом запуске ssh создаст директорию ~/.ssh, а при первом входе на конкретный компьютер запросит подтверждение, действительно ли вы этого хотите (поскольку компьютер отсутствует в списке известных машин):
При повторном запуске потребуется лишь ввести пароль:
Два замечания. Во-первых, в ответ на вопрос "yes/no" надо набрать "yes" (на не "y"). Во-вторых, для ssh "jerry" и "jerry.inp.nsk.su" -- разные компьютеры, и если теперь набрать команду "ssh jerry.inp.nsk.su", то вопрос, действительно ли мы хотим зайти на указанный компьютер, будет задан вновь. | ||||
Файлы конфигурации У пакета Ssh есть два "комплекта" файлов конфигурации: общесистемные в директории /etc/ или, в некоторых версиях, /etc/ssh/, и персональные для каждого пользователя, хранящиеся в директории ~/.ssh/. Права доступа на общесистемные файлы конфигурации лучше не трогать -- в частности, файл, содержащий приватный ключ компьютера, имеет права "rw-------".
В персональных настройках часть файлов должна иметь права на чтение только пользователем, а часть может (но не обязательно) быть доступна всем. Лучше всего сделать всю директорию ~/.ssh доступной только для себя командой
Причем сделать это следует на всех компьютерах, которыми пользуетесь. Настройка беспарольного входа Для того, чтобы получить возможность использовать ssh, slogin и scp без ввода пароля, надо создать пару персональных криптоключей (публичный и приватный) и положить их в нужные файлы. Поскольку процедура эта не слишком интуитивно-понятная, а в документации на Ssh "пошаговые" инструкции на эту тему отсутствуют (это прямо записано как "надо бы сделать" в файле TODO), приведем детальное описание требуемых шагов. Последовательность действий тут следующая:
Для генерации пары ключей достаточно запустить команду ssh-keygen:
Обратите внимание, что ssh-keygen просит ввести "ключевую фразу" (passphrase). Ключевая фраза позволяет повысить степень безопасности -- если она есть, то при входе на удаленный компьютер обязательно надо будет ее ввести (т.е. это как бы пароль в дополнение к ключу), так что даже если кто-то сможет похитить ваш приватный ключ (файл ~/.ssh/identity), этого будет недостаточно для входа. Если же нужен именно беспарольный вход, то ключевую фразу следует оставить пустой (просто нажав <Enter>). Поскольку ssh-keygen автоматически создал файл ~/.ssh/identity, осталось лишь добавить публичный ключ в файл ~/.ssh/authorized_keys на удаленном компьютере. Файл ~/.ssh/authorized_keys представляет собой список публичных ключей, обладателям которых разрешен доступ, по одному ключу на каждой строке. Причем строки эти довольно длинные, так что если модифицировать файл при помощи текстового редактора, то следует предварительно отключить автоматический перенос слов (word-wrapping). Публичный ключ ssh-keygen помещает в ~/.ssh/identity.pub, так что лучше всего скопировать его в какой-нибудь временный файл на удаленном компьютере при помощи scp, а затем "дописать" содержимое к authorized_keys при помощи cat:
Обратите внимание, что при перенаправлении вывода команды cat следует указывать двойной символ ">", а не одинарный, чтобы содержимое identity.pub было добавлено к authorized_keys, а не заменило его. Файл .rhosts Поскольку Ssh использует другие методы авторизации, наличие файлов .rhosts на используемых компьютерах больше не требуется, и их можно удалить. Их наличие значительно уменьшает степень безопасности, поскольку позволяет воспользоваться для входа обычным rlogin, который, как мы упоминали выше, сравнительно легко взламывается. | ||||||||||
Где взять Первоначально одним из сдерживающих факторов в распространении Ssh было отсутствие свободно распространяемых ssh-клиентов под Windows. В настоящее же время имеется ssh-plugin ("дополнение") к пакету TeraTerm Pro, под названием TTSSH. Домашняя страница TeraTerm Pro -- http://hp.vector.co.jp/authors/VA002416/teraterm.htmlа TTSSH -- http://www.zip.com.au/~roca/download.html В ИЯФ и TeraTerm Pro, и дополнение к нему доступны в директории ftp://ftp.inp.nsk.su/pub/Crypt/ssh/TeraTerm/ Несколько слов о TeraTerm Pro Пакет TeraTerm Pro создан в Японии и является свободно распространяемым. Это эмулятор терминала для Windows95/NT, есть также версия для Windows 3.1 (но TTSSH для 3.1 отсутствует). Одной из отличительных особенностей является поддержка русского языка -- прямо при установке программа позволяет выбрать русский язык. При этом программа автоматически "догадывается", что на клиентской машине (Windows) используется набор символов Windows-1251, а на сервере -- koi8-r, и автоматически производит перекодировку. Это свойство вместе с поддержкой ssh делают TeraTerm Pro практически лучшей программой-эмулятором терминала для России. И TeraTerm Pro, и TTSSH доступны в исходных текстах. Установка и настройка TTSSH Первым делом надо установить TeraTerm Pro. Данный процесс стандартен для Windows -- надо просто распаковать .zip-файл и запустить программу setup.exe. По завершении процесса установки в меню [Пуск] -> Программы появится меню "TeraTerm Pro". Затем нужно распаковать содержимое файла ttssh.zip в директорию, куда установлен TeraTerm Pro -- обычно это C:\Program Files\TTERMPRO. При этом в директории появится файл ttssh.exe, который и следует запускать. Поскольку ttssh.exe доступен только прямо в директории, для удобствы следует поместить ярлык на него в меню. Если же запускать просто ttermpro.exe, то будет прежняя функциональность TeraTerm Pro -- без ssh. При запуске TTSSH в окне "New connection" появляется дополнительный пункт -- "SSH".
При выборе варианта "SSH" появится дополнительное окно, в котором указывается имя пользователя и тип авторизации.
В частности, для беспарольного входа надо выбрать вариант "Use RSA key to log in" и указать файл, в котором содержится приватный ключ -- этот файл можно просто скопировать из ~/.ssh/identity. Чтобы каждый раз не вводить заново имя пользователя, стоит один раз произвести настройку при помощи пункта "SSH Authentication" из меню Setup, и затем сохранить ее командой Setup -> Save setup.
| ||||||||||||||
| ||