Мое руководство по безопасности
Автор: (C)
href="mailto:[email protected]">Rob Tougher
Перевод: (C)
href="mailto:[email protected]">Андрей Киселев
Цель данной статьи -- показать мои действия, направленные на повышение защищенности моего домашнего компьютера и пересылки данных. Если вы активно занимаетесь компьютерной безопасностью, то рассматривайте статью просто как беглый обзор. Если же вы только начинаете -- то вам следует внимательно прочитать ее, чтобы понять, как обезопасить работающий под управлением Linux компьютер. Я не претендую на полноту охвата темы компьютерной безопасности. Я серьезно подхожу к настройке защиты, но, тем не менее, я не так бдителен, как следовало бы. Вам следует лично убедиться, достаточен ли для вас уровень безопасности, который дают описанные здесь действия.
Мой домашний компьютер работает под управлением Debian Linux. Он постоянно включен и все время соединен с Internet. На нем хранится важная информация и я не хотел бы, чтобы доступ к ней имел еще кто нибудь, кроме меня. Кроме того, весьма нежалательно, чтобы моя машина была использована для проникновения в другие системы. Мне было бы крайне неприятно, если бы я вдруг обнаружил, что мой компьютер был использован для вторжения к кому бы то ни было. По этим причинам я и стремлюсь обезопасить свою машину, т.е. скрыть информацию, хранящуюся на ней и не дать использовать ее системные ресурсы тем, кому это не позволено.
Сразу после установки я настраиваю поддержку iptables на http://www.netfilter.org в ядре. Iptables позволяет блокировать входящий и исходящий трафик. Это очень важно, поскольку компьютер постоянно соединен с сетью и, следовательно, открыт для нападения извне. Конфигурирование ядра - процедура не для начинающих, для этого потребуется скачать исходные тексты ядра, корректно сконфигурировать и установить его. Если вы никогда не делали этого раньше, то вам следует прочитать Linux Kernel HOWTO на http://www.tldp.org/HOWTO/Kernel-HOWTO.html (перевод на русский язык, хотя и крепко устаревший, вы сможете найти на linux.ru.net прим. перев.), попрактиковаться в компиляции ядра и лишь затем попытаться сконфигурировать iptables.
Следующий шаг - настройка LIDS на http://www.lids.org - Linux Intrusion Detection System (Система Обнаружения Вторжений). LIDS состоит из "заплаты" на ядро и двух утилит -- lidsconf и lidsadm. Назначение этой системы состоит в повышении уровня безопасности путем наложения ограничений на доступ к файлам и процессам, и выдачи предупреждения, когда производится попытка преодолеть эти ограничения. Особенно привлекательно то, что с помощью LIDS можно ограничить даже права root'а! Такое ограничение может существенно уменьшить ущерб, нанесенный злоумышленником, завладевшим паролем root'а. Я использую LIDS для наложения ограничений на доступ к исполняемым файлам, файлам журналов в каталоге /var/log и файлам конфигураций в каталоге /etc. Исполняемые файлы я помечаю как READONLY (доступ только на чтение) так, чтобы никто, включая root'а, не мог удалить или изменить их. Файлам журналов я присваиваю атрибут APPEND (дополнение в конец файла), таким образом программы смогут добавлять записи в журналы, но не смогут изменять или удалять существующие записи.
Далее я уменьшаю количество запущеных сервисов. Чем меньше сервисов "крутится" на машине -- тем меньше шансов у злоумышленника проникнуть в нее. Дистрибутивы имеют тенденцию к увеличению количества демонов, запускаемых по умолчанию, что, на мой взгляд, отрицательно сказывается на безопасности. Я останавливаю telnet, FTP, named и семейство сервисов R*. Как правило я отключаю все, что мне не нужно, таким образом меня перестает волновать необходимость их обновления в случае появления исправлений ошибок в безопасности. Для сервисов, которые остаются, я устанавливаю "заплаты" по мере их появления. Если вдруг выявляется уязвимость в каком либо сервисе, то я его останавливаю до тех пор, пока не появится соответствующая "заплата".
После того, как все ненужные сервисы будут остановлены, я даю команду "netstat -l", которая выдаст на экран список всех открытых сетевых портов. Делаю я это лишь для того, чтобы лишний раз убедиться, что я ничего не пропустил. Если я что-то и упущу из виду на предыдущих шагах, то эта команда позволит мне увидеть мои упущения.
В процессе эксплуатации я периодически (раз в неделю или что-то около того) запускаю утилитуchkrootkit (http://www.chkrootkit.org), которая выдаст предупреждение в случае, если на моей машине появится какой либо rootkit. Rootkit -- это набор программ, с помощью которых взломщик может скрыть свое присутствие. Этот набор содержит "зараженные" (измененные) версии самых разнообразных утилит, таких как ps, ifconfig и др. Если взломщик установит rootkit, то потом он сможет использовать "взломанную" систему как только пожелает. Определить наличие rootkit'ов в системе можно только при очень детальном ее исследовании. Вы можете попробовать скачать и просмотреть различные rootkit'ы (только в учебных целях!) с packetstorm (http://packetstorm.decepticons.org/UNIX/penetration/rootkits/)
Для файлов, загруженных из Internet, я проверяю контрольную сумму с помощью утилиты md5sum (http://www.gnu.org/software/textutils/textutils.html). Большинство сайтов, которые выкладывают файлы для загрузки, указывают и их контрольные суммы. Эта простая проверка дает мне уверенность в том, что я скачал то, что мне нужно. Конечно есть небольшая вероятность того, что и файл и контрольная сумма "поддельные", но такие случаи достаточно быстро обнаруживаются и устраняются администраторами WEB сайтов.
Никакая защита не может гарантировать абсолютную безопасность вашего компьютера. Скажу честно: я не думаю, что мою машину кто-нибудь, когда-нибудь пытался взломать, однако полной уверенности в этом у меня нет. Первые несколько месяцев работы в Linux я совершенно не думал о безопасности -- я просто пытался получить работающую операционную систему. В основном изучал команды и не желал заниматься чем-то другим. В те дни мой компьютер, под управлением Red Hat Linux с настройками "из коробки", был широко распахнутой дверью для взломщиков. На нем "крутилось" множество различных серверов, а я даже не подозревал об этом! Бедный парень!
Итак, если мой компьютер будет взломан, то в первую очередь я пойду на The Coroner's Toolkit (http://www.porcupine.org/forensics/tct.html). TCT -- это набор утилит, которые помогут определить характер взлома и объем повреждений. Вы их просто запускаете и ждете пока они занимаются сбором информации с жесткого диска. Лично мне еще не приходилось пользоваться ими, но судя по тому, что говорится на этом сайте, это довольно мощный инструмент. Однако для новичка он чрезвычайно сложен, так что готовьтесь к длительному изучению документации, если у вас нет опыта общения с TCT. На главной страничке, внизу, имеется нсколько ссылок на различные документы, так что лучше всего начать оттуда.
Я так же сходил бы на Honeynet Project (http://www.honeynet.org). Группа добровольцев-профессионалов, в рамках данного проекта, занимается исследованием инструментария, мотивов и тактики взломщиков, и публикует результаты исследований, с целью поднять общую культуру безопасности на более высокий уровень. На этом сайте ежемесячно публикуется информация о реальных взломах и предлагается прислать свой вариант исследования вторжения. В архивах этого сайта можно найти достаточно большое количество подобных рецензий, представленных высокопрофессиональными специалистами в области компьютерной безопасности. Именно на этом сайте я впервые встретил упоминание о The Coroner's Toolkit. Всякий, кто беспокоится о безопасности своего компьютера, должен посетить этот сайт. И читать, и читать, и читать! Информации, имеющейся там, вам хватит надолго.
По умолчанию передаваемые по сети данные никак не защищены. Ваша информация может быть перехвачена в сети кем угодно и вы ничего не можете с этим поделать. Попробуйте запустить утилиту traceroute, чтобы увидеть наглядный пример. Подайте команду "traceroute www.google.com" и увидите все серверы, через которые проходят ваши данные по пути к www.google.com.
Всякий раз, когда мне предстоит войти в систему на каком либо сайте, я использую протокол https. HTTPS использует SSL (Secure Sockets Layer) для шифрования передаваемых данных. Если бы я не делал этого, то мой пароль мог бы быть перехвачен взломщиком. Кстати, Yahoo! предоставляет возможность безопасного входа, когда необходимо передавать имя пользователя и пароль. У меня имеется почтовый ящик на Yahoo! и я всегда использую возможность безопасного входа, когда проверяю его содержимое.
Для нужд удаленного администрирования я пользуюсь ssh и scp (http://www.openssh.com). Эти две программы прекрасно заменяют telnet и FTP. Они просты в установке и работают аналогично вышеуказанным программам. После их установки я открываю соответствующие порты в настройках iptables так, чтобы иметь возможность соединения с машиной извне.
Для шифрования электронной почты я пользуюсь GnuPG (http://www.gnupg.org). Если я отправляю кому либо закрытую информацию, то я использую для шифрования открытый ключ данного субъекта. Я так же прошу их использовать для шифрования мой открытый ключ при передаче закрытой информации мне. Мой открытый ключ можно взять с моей домашней странички на http://www.robtougher.com, кроме того, его можно найти на различных серверах открытых ключей ("http://www.openpgp.net/pgpsrv.html). Все это дает мне уверенность в том, что мою почту никто не прочитает кроме меня самого.
Надеюсь, вам понравилась эта статья -- я попытался объяснить свои действия по обеспечению безопасности своего компьютера и передаваемых по сети данных настолько ясно, насколько это возможно. Если вы обнаружите какие-либо ошибки или неточности, обязательно сообщите мне по адресу [email protected]. Кроме того, моя политика безопасности весьма далека от совершенства и мне было бы чрезвычайно интересно узнать ваше мнение и ознакомиться с вашим опытом в этой области.
Ниже представлен набор ссылок на сайты, которые я посещаю регулярно в поисках информации на темы компьютерной безопасности.
Роб -- пишущий на C++ программист из Нью-Йорка. В свободное от работы время его можно найти прогуливающимся по пляжу со своей девушкой Николь (Nicole) и их собакой Холли (Halley).
Команда переводчиков:
Владимир Меренков, Александр Михайлов, Иван
Песин, Сергей Скороходов, Александр Саввин, Роман Шумихин, Александр Куприн,
Андрей Киселев