RSecurityProject [ver. 1.0.4]
Почитать предыдущие выпуски: 1, 2, 3
Yuri N. Looshnya V.I.P.n@t [при помощи oreillynet.com || ibm.com || linuxnewbie.org] Март 17, 2001
Добро пожаловать в RSecurityProject! - проект, цель которого - поиск уязвимостей Linux-систем и пути их решения.
В прошлом выпуске рубрики (2 марта) были описаны проблемы с различными программами (J-Pilot, bftpd, pine, DNS итп), а также обновлениям RedHat Linux 7.0
На этой неделе, как я и обещал, внимание уделяется комплексной защите домашней Linux-системы. Но сначала вопрос/ответ. Начиная с этого выпуска RSecurityProject-рубрики, я буду более подробно останавливаться на конкретных проблемах, отходя немножко в сторону от вопросов, типа, "сколько вам лет?", "где работаете?", "как часто будет обновляться рубрика?" и пр. Да, спасибо всем тем, кто присылает мне свои вопросы (иногда вопрос/ответ). Это говорит о том, что Linux жив, живет и будет жить (по крайней мере, в странах xUSSR :). Одним словом - Linux_Rulez_Forever.
Вопрос:Правда, что в Midnight Commander есть уязвимости? И если есть, то какие?
Ответ:К сожалению, есть. Найденная уязвимость может быть использована взломщиком для извлечения произвольных программ с правами доступа пользователя, который запустил Midnight Commander. Так что, обновляйте свой mc, товарищи.
Вопрос:На своем предприятии я столкнулся с проблемой выбора защиты систем от взлома. Посоветуйте что-нибудь: чтоб и недорогое и неплохое.
Ответ:По соображениям стоимости, а также потому, что операционная система Linux по праву считается одной из самых надежных, программы защиты в сетях фирм часто эксплуатируются с ней. Однако для отдельного рабочего места такое решение слишком сложно, разве что вы подпали под чары технической привлекательности Linux. В Linux комплексная техника защиты и функция IP-фильтра применены уже в ядре. В отличие от Windows NT, для эксплуатации защитной программы не требуется приобретать дополнительного ПО. Принцип защиты в ОС Linux подобен принципу защиты других сетевых операционных систем: администратор с помощью инструментов, которые в случае Linux входят в стандартный комплект, устанавливает правила фильтрации. Защитным инструментом для версий ядра 2.2 является ipchains, в более старых системах применяется ipfwadm. Во многих поставляемых дистрибутивах ipchains инсталлирован и предварительно cконфигурирован уже при выпуске. Если нет, то это нужно сделать отдельно. При этом нужно соблюдать следующие правила: сначала запретить прохождение всех служб и IP-адресов через Firewall, а затем деблокировать нужные приложения. Практически это происходит путем написания небольшого скрипта. Инсталляция часто издаваемых изменений для ipchains для устранения слабых мест в защите системы всегда оправдывается. Начиная с нового ядра версии 2.4 вместо ipfchains появился новый инструмент - iptables, но в принципе, его действия ничего не изменили. Причина выхода нового инструмента заключается, в первую очередь, в новом протоколе для Internet IPv6. Несмотря на это нововведение, ipchains и его конфигурационные файлы по соображениям совместимости будут продолжать функционировать. Более подробную информацию о настройке Firewall можно найти на просторах Internet, а также на домашних страницах тех или иных дистрибутивов, SuSe, например.
Вопрос:Где можно найти побольше информации по безопасности системы?
Ответ:Прочтите /usr/doc/HOWTO/Security-HOWTO. Если это уже "не помогает", тогда можно сходить на rootshell.com, linuxsecurity.com, openwall.com...
Защита домашней Linux-системы
Рост популярности Linux-систем растет с каждым днем все больше и больше. С больших серверов больших и маленьких компаний эта операционная система потихоньку мигрирует на домашние ПК. Чем это вызвано? Во-первых, операционная система Linux снабжена всей мощью UNIX'a, она стабильнее и быстрее, а для новых пользователей еще и интересней, чем операционная система Microsoft. Я просто уверен, что по этому поводу разгорится флейм, поэтому, чтобы как-то умерить пыл всех "флеймистов" хочу сначала высказать свою точку зрения по этому поводу. Каждая операционная система по своему интересна и привлекательна. Кроме этого, у каждой ОС'ы есть свое прямое назначение, т.е. - некоторые предназначены для набора большого количества текстов, некоторые для работы с графикой, некоторые с видео- и аудио- данными. Поэтому, нельзя сказать, что "...эта операционная система НЕПРАВИЛЬНАЯ...", а "...эта попросту НЕ НУЖНА...". Мне тоже, например, в какой-то степени нравится Windows (у меня параллельно с Linux OS стоит Windows Millennium Edition): хорошей локализацией, например, совместимостью с любимыми геймами и т.д. Но в Windows нет чего-то, что есть в Linux и наоборот. Так что, ОС'ы разные важны, ОС'ы разные нужны :). Думаю, что после вышеизложенного, флейм уменьшится:). Но все же... Для хакеров и программистов Linux открывает большие возможности для удовлетворения своих рабочих потребностей в связи с открытостью исходного кода (open source). Эту операционную систему можно перестроить под/для себя и она будет выполнять все вам нужное именно так, как нравится вам, а не "далеким разработчикам".
Но все же, чтобы изучить Linux нужно не так мало времени, а чтобы обеспечить достойную защиту своему домашнему ПК с Linux-системой на борту - еще больше. Цель этой статьи заключается в облегчении первого и второго, так как не зная хоть немножко первого, второе отпадает само собой .
Что подразумевается под словом "защита" в данной статье? Секретность паролей, предотвращение регистрации "со стороны" в вашей системе, защита/секретность демонов (daemons), шифрование "любопытных" файлов, защита от троянов (trojan horses) и вирусов, разрешения/права файлов (file permissions), сканирование портов, "защитные" программы. Все это покажется вам простым/легким экскурсом в мир Linux security, если вы: используете Linux-систему персонально и дома (т.е. не как сервер), знаете базовые Linux-команды и знаете как читать path-имена, используете именно Linux, а не другой UNIX-вариант, FreeBSD, например, можете нормально работать в текстовых редакторах, например, vi, emacs, pico и т.д., пользуетесь man-командами и считаете их полезными :).
Сколько защиты нужно для ВАШЕЙ домашней системы на базе Linux? На этот вопрос каждый должен ответить сам. Если вы хотите иметь сильно защищенную систему, то имейте в виду, что это предотвратит вас от выполнения некоторых программ. Поэтому рекомендую вам обеспечить такую защиту/тех программ, в которых вы действительно нуждаетесь.
Защита/секретность паролей Так как именно пароли являются главной вещью, на которую обращают внимание взломщики, то необходимо внимание обратить именно на обеспечение их защиты/секретности. Пароль root'а должен быть максимально защищен. Как это сделать? Вот несколько способов:
* используйте максимально разрешенную длину пароля;
* используйте в пароле числа,
символы и специальные символы (вперемешку, естественно);
* обязательно используйте верхний регистр букв
(т.е. они должны быть в вашем пароле, но не все, конечно);
* вы должны запомнить пароль
(не записывать его где бы то нибыло);
* пароль не должен иметь никакого отношения к вам
(дата рождения, кличка собаки, имя друга и т.д.);
* это не должно быть найдено в словаре;
* это слово - не существует в природе (типа Sds12_8kjKdfkl0+-)
После того, как вы сгенерировали пароль, было бы неплохо проверить его какой-нибудь программой взлома паролей. Как происходит взлом пароля? Linux автоматически шифрует пароль, т.е. он становится нечитабельным. Взлом пароля - это процесс расшифровки зашифрованного пароля, т.е. создание из не читабельного пароля читабельного. Если ваш пароль поддается взлому, то стоит более усиленно потрудиться над созданием нового. Взломщики паролей легко доступны. Некоторые из них можно взять на www.rootshell.org. Если вы хотите сгенерировать зашифрованный пароль, то можете "поиграться" с /dev/urandom. Вот как это можно сделать:
root# head -c 6 /dev/urandom | uuencode - | cat -n |
grep 2 | cut -f2 | cut -c 2,3,4,5,6,7,8,9
Это действие сгенерирует зашифрованный пароль для вас. Следующий шаг - тень ваших password-файлов (способ затенения заключается в извлечении читаемых зашифрованных паролей в /etc/passwd и сохранении их в файле /etc/shadow, который может прочитать только root). Ваша Linux-система может уже по умолчанию затенять пароли. Для проверки наберите:
root# cat /etc/passwd | grep root
Если вы видите что-то вроде root:x, тогда ваши пароли уже затенены. Иначе, это не так. Для затенения их "вручную" используйте команду pwconv.
Отключение демонов (daemons)
После первой инсталляции, ваша Linux-система по умолчанию имеет много включенных демонов (выполняющихся по умолчанию). Обычно (я больше чем уверен) большинство этих демонов вам не нужно, особенно при использовании Linux в домашних условиях. Что такое демон? Демон - это программа, которая загружается в background (так называемый, задний план/фон) и ждет до тех пор, пока не будет вызвана непосредственно пользователем. Например, демон finger будем "бездействовать" до тех пор, пока не будет вызвано подключение. После этого, finger или предоставит информацию об удаленной системе или прервет подключение. Большинство ваших демонов вы найдете в /etc/inetd.conf (inetd - Internet Super Server. Он управляет всеми доступными демонами в вашей системе. Когда пользователь запрашивает подключение к демону, inetd передает подключение соответствующему демону, который за это отвечает). Для вышеупомянутого демона finger это выглядит так:
finger stream tcp nowait /usr/etc/in.fingerd in.fingerd
В этом случае выполняется демон finger. Если запрос на выполнение этого демона делает кто-то из стороны, то вот что он увидит (это же увидите и вы, но постороннему это будет "любопытнее"):
xconsole$ finger root@localhost
Login: root Name: root
Directory: /root Shell: /bin/bash
On since Sun Mar 7 00:43 (EST) on ttyp0 from :0.0
Mail last read Sun Feb 28 20:58 2000 (EST)
No Plan
Не кажется ли это вам риском? Почему кто-то должен просматривать состояние root'a? Поэтому, отключение данного демона является хорошей идеей. Сделать это проще простого, закомментировав (#) строку
#finger stream tcp nowait /usr/etc/in.fingerd in.fingerd в inetd.
Сохраните файл (inetd) и запустите
killall -HUP inetd
для отключения inetd. Обратившись к демону finger как root снова, вы получите:
xconsole$ finger root@localhost
[localhost]
finger: connect: Connection refused
Демон finger был успешно выключен. Выключение того или иного демона не значит, что вы не сможете им пользоваться. В данном случае, вы сможете делать запросы с помошью демона finger на другие машины, а вот они не смогут сделать запрос на вас :). Этот демон не единственный, который можно отключить. Вот еще несколько кандидатов:
* echo
* discard
* daytime
* chargen
* ftp
* telnet
* gopher
* shell
* login
* exec
* talk
* tftp
* netstat
* systat
(Иметь на своей машине запущенными ненужные демоны - всегда плохая идея). Что делать, если вы хотите оставить демон finger активным, но только на некоторое определенное время (например, чтобы просмотреть, кто "стучится к вам")? В таком случае вам необходим tcp_wrapper. tcp_wrapper предусмотрен для контроля всех соединений для всех активных демонов. С помощью tcp_wrapper можно также ограничить список IP-адресов, с которыми происходит соединение. Как правило, этот пакет поставляется практически всеми +/- новыми дистрибутивами. В противном же случае, качайте отсюда ftp://ftp.win.tue.nl/pub/security/. После инсталляции, вы можете сконфигурировать свой /etc/inetd так:
finger stream tcp nowait /usr/sbin/tcpd in.fingerd
Заметьте, что теперь демон finger управляется tcpd. Любое подключение к демону finger будет регистрироваться в файле по вашему выбору. Посмотрите /etc/syslog.conf, чтобы понять как это все работает, а так же наберите man /etc/syslog.conf для того, чтобы узнать, как это изменить. Я рекомендую иметь tcp_wrapper для "слежки" за работой того или иного демона, независимо от того, является активным он или не активным.
Управление входом в систему
Чтобы обеспечить вход в систему только root'у, стоит покопаться в /etc/security-файле. Можно сделать так, чтобы только root мог входить в систему (регистрироваться в ней), чтобы уменьшить риск быть "взломанным" (хотя, на мой взгляд, это далеко "не фонтанная идея"). Чтобы ограничить вход в систему всем пользователям, кроме root'a (еще раз напоминаю, что это идея для параноиков), тогда сделайте следующее:
root# touch /etc/nologin
Это действие запретит вход в систему всем, кроме суперпользователя (root'a). Содержание файла /etc/nologin может быть представленo так:
root# echo "Down for upgrade." > /etc/nologin
Пользователь, который захочет войти в систему после этого, получит следующее сообщение:
Linux 2.2.5
Down for upgrade.
Подключение будет прервано. НО, вход в систему только суперпользователя (и никого другого) имеет как позитивные моменты, так и негативные: вы имеете максимум риска, но также и рискуете сами, так как вам не будут выводится никакие предупреждения, так как root это root. Отсюда, вседозволенность может в корне повредить вашу систему (если вы случайно наберете в командной строке rm -rf / как root, то следующие час-два вы потратите на восстановление своей системы). Так что, стоит подумать, делать ли такое радикальное изменение для вашей системы.
Соединение с другими компьютерами Самый простой способ соединиться с другими компьютерами - это telnet. Но при использовании telnet'a вы подвергаете свой сеанс "прослушиванию" со стороны (взломщики могут следить за вашей сессией telnet'a и видеть, что вы печатаете). Чтобы решить эту проблему, установите SSH (Secure Shell). SSH шифрует ваши сессии, после чего "прослушивание" становится невозможным. SSH можна взять здесь http://www.ssh.fi/sshprotocols2. После установки SSH, вы можете деинсталлировать ваши r-утилиты (rsh, rlogin и др.). Все эти утилиты не безопасны для использования и оставляют файлы, типа .rhosts, которые являются "кандидатами" для взлома системы из-за вычисления прерываний. После установки SSH также необходимо убедиться, что вы отключили telnetd в /etc/inetd.conf (т.е. закрыли telnet демон).
"Троянцы" и вирусы "Троянцы" - программы, которые ничего хорошего пользователю не несут. Название их происходит от мифа о Троянском Коне, который был принят троянцами от греков, что стало причиной их (троянцев) поражения. Троянцы имеют широкий диапазон действия: от создания уязвимой дыры в безопасности вашей системы до полного ее разрушения. Взломщик, который взломал вашу систему, очень любит оставлять "на память" троянца в вашей системе. Рассмотрим пример заражения троянцем, а точнее, замену родного ls на зараженный троянцем ls:
#!/bin/sh
# tainted ls program
rm -rf /
НЕ ЗАПУСКАЙТЕ эту программу, если не хотите повторно устанавливать Linux. Если же вы все же допустили оплошность и запустили эту программу, то в основном удаляется все. Как видите, троянца определить не так уж и легко. Зараженная ps-программа показывает вам только то, что захотел взломщик, чтобы вы видели, таким образом оставляя троянца практически невидимым. Самой лучшей защитой от троянцев является "недоверие" к непроверенным источникам, которые присылают вам файлы и не запускать программы, которые до этого никогда вами не запускались. Так же не помешает самим компилировать исходные коды программ, читать строки в исходном коде программ (если вам это доступно, а если нет, то стоит научиться :). Кроме вышеперечисленных методов борьбы с троянцами, можно использовать самый радикальный и, наверное, подходящий для начинающих пользователей - установить программу Tripwire. Эта программа проверяет базу данных пользователей и предупреждает вас в том случае, если находит какие-то изменения в программах/файлах. Есть возможность с помощью настроек подстроить программу под себя.
Кроме троянцев, головную боль пользователям создают также вирусы. Об этих "создателях головной боли" было обширно рассказано в предыдущем выпуске рубрики. Можно только добавить, что очень хорошим "охотником на вирусы" является программа AntiVir, которую можно скачать по адресу: www.hbedv.com.
В следующем выпуске мы поговорим о комплексной защите системы при работе в Internet (возможны изменения). Также не останутся без внимания и ваши письма. БОЛЬШАЯ ПРОСЬБА: из-за острой нехватки времени, я просто не успеваю отвечать на все вопросы, которые приходят мне по электронной почте. Поэтому, обсуждение тех или иных проблем, связанных с использованием тех или иных программ (описанных здесь и нет) могут остаться без ответа (извинения приношу заранее :) или же ответ будет дан непосредственно на страницах рубрики. Хотелось бы, чтобы этот проект имел право на жизнь и приносил пользу. Если у вас есть свой (свои) вопрос-ответ (вопросы-ответы) на данную тему, то пишите - все они будут рассмотрены. Также принимаются корректировки уже описанных проблем. Удачи!
|