Может ли мой домашний компьютер быть взломан?

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

Реальную опасность представляет непрошенный гость, если он сможет войти в систему, используя любую учетную запись, которую сможет подобрать (или выведать) - и получить права "root". Обычно это возможно, если вы действительно администратор - новичок и/или ваша машина не ориентирована на настоящую безопасность (вы же дома, не так ли -- зачем думать о безопасности!).

Чтобы защитить себя, вы не должны позволить посторонним вломиться на ваш компьютер. Используйте длинные и сложные пароли для ВСЕХ учетных записей на вашем компьютере. Меняйте пароли регулярно. Для того чтобы навязать всем пользователям вашего компьютера правильную политику в отношении паролей, выполните (как "root", например в RH6.0) linuxconf и под "политики паролей и учетных записей(password and account policies)" измените минимальную длину пароля на 6 или более знаков, минимальное количество не-буквенных знаков на 1 или 2, количество дней, после которых пароль должен быть сменен, на что-то вроде 90 или менее, и установите предупреждение об устарении пароля на 7 дней перед устарением. Остальную информацию о паролях смотрите здесь (FAQ2.htm#pass_security). Абсолютно НИКОГДА не создавайте учетных записей без пароля или со слабыми паролями. Не работайте на своем компьютере, как "root" -- если вы выполняете программу с "дырами в безопасности" как "root", кто-то может найти возможность взломать ваш компьютер. Старые Linux-дистрибутивы имели известные дыры в безопасности, так что используйте более новые версии, особенно если вашим компьютером могут воспользоваться ненадежные люди, или если ваш компьютер выполняет серверные функции (например, ftp или http сервер).

Кроме того, совсем неплохая идея - регулярно просматривать все файлы, в которых фиксируются все входы пользователей в систему: /var/log/secure (самый последний log) /var/log/secure.1 (более старый) /var/log/secure.2 (еще более старый), и т.д. Кроме того, полезны log-файлы в директории /var/log. Проверяйте их время от времени. Наиболее распространенные "предупреждения(warning)" относятся к сканированию портов вашего компьютера - повторяющиеся попытки входа с какого-то IP-адреса на ваш telnet, ftp, finger или другой порт. Это значит, что кто-то хочет узнать больше о вашем компьютере.

Если вы не используете удаленного соединения с вашей машиной, есть прекрасная идея ограничить права на использование сетевых сервисов "со стороны сервера" (все сетевые сервисы перечислены в файле /etc/inetd.conf) машинами вашей домашней сети. Доступ контролируется двумя файлами: /etc/hosts.allow и /etc/hosts.deny. Эти файлы контроля за доступом работают следующим образом. Когда кто-то извне запрашивает соединение, файл /etc/host.allow сканируется первым и если одно из имен, содержащихся в нем и имя компьютера, запрашивающего соединение совпадают, доступ разрешен (независимо от содержимого файла /etc/host.deny ). Иначе, сканируется файл /etc/host.deny, и если имя машины, с которой запрашивается соединение совпадает с одним из имен в файле, соединение закрывается. Если совпадения не найдены, разрешение предоставляется.

B. Staehle (Гуру в Linux-модемах) дал мне совет не устанавливать сетевые службы вообще. "Если ваши сетевые службы не установлены правильно, ваш компьютер может быть захвачен любым скриптописателем. Новичкам _НЕ_СТОИТ_ разрешать сервисы (ftp, telnet, www) во внешний мир. Если вы "должны" устанавливать их, убедитесь в том, что вы разрешили доступ только с тех машин, которые можете контролировать. Файл /etc/hosts.deny должен содержать

ALL: ALL

а /etc/hosts.allow должен содержать

ALL: 127.0.0.1

для разрешения входа только с этого компьютера. Не используйте имен (только IP-адреса)!".

Действительно, мой /etc/host.deny, как и было посоветовано, содержит (ALL: ALL), но мой /etc/hosts.allow содержит еще два компьютера, имеющих полный доступ, и еще один для входа через telent и ftp: (IP-адреса вымышлены):

ALL: 127.0.0.1, 100.200.0.255, 100.200.69.1
in.telnetd, in.ftpd: 100.200.0.2

В вышеуказанных примерах "ALL: ALL" означает "ВСЕ(ALL) службы, ВСЕ(ALL) компьютеры", то есть "соединение со всех компьютеров ко всем сетевым службам" идущих с "любого компьютера".

Для большей информации, смотрите превосходное "Руководство сетевого администратора Linux (Network Administrator Guide)" которое, разумеется, есть в вашем дистрибутиве. Я, например, даже распечатал эту книгу.

Чтобы проверить, какие сетевые службы вашего компьютера доступны из внешнего мира, вы можете воспользоваться специальными WEB-инструментами. Зайдите на: scan.sygatetech.com/ и щелкните "scan now".

Здесь другие места в которых могут вас просканировать: crypto.yashy.com/ davidovv2.homestead.com/freetoolsservices.html privacy.net/ scan.sygatetech.com/ security1.norton.com/us/intro.asp suicide.netfarmers.net/ trojanscanner.com/cgi-bin/nph-portscanner doshelp.com/dostest.htm dslreports.com/secureme/ dslreports.com earthlink.net/freescan/ grc.com hackerwhacker.com/ nessus.org netcop.com/newscan/fullscan.html privacyscan.org sdesign.com/cgi-bin/fwtest.cgi sdesign.com/securitytest/index.htmll securityspace.com/ vulnerabilities.org/nmapemail.html grc.com dslreports.com/scan dslreports.com/security/sec025.htm

Из соображений безопасности, неплохо бы не афишировать операционную систему и ее версию, которые вы используете. Я сменил содержимое файла /etc/issue и /etc/issue.net, которые на моем компьютере выглядели так:

Red Hat Linux release 6.2 (Zoot)
Kernel 2.2.14-5.0 on an i586

на что-то вроде:

WARNING: THIS IS A PRIVATE NETWORK
UNAUTHORIZED USE IS PROHIBITED AND ALL ACTIVITIES ARE LOGGED
IBM S/390 LINUX

Эта шуточка может слегка (чуть-чуть) увеличить (я надеюсь) безопасность моей системы.

Содержимое файлов /etc/issue и /etc/issue.net я изменяю при каждой загрузке (когда выполняется /etc/rc.local). Чтобы сделать изменения постоянными, я могу сделать эти файлы доступными только для чтения для всех пользователей, выполнив (как "root"):

chmod a=r /etc/issue*

Вместо последней команды я мог бы отредактировать (как "root"), командный файл /etc/rc.d/rc.local и закоментировать 5 строк, используя ### таким образом, чтобы его значимая часть содержала:

# Здесь перезаписывается /etc/issue при каждой загрузке. Делаем несколько изменений
# необходимых, чтобы не потерять /etc/issue при перезагрузке
### echo "" > /etc/issue
### echo "$R" >> /etc/issue
### echo "Kernel $(uname -r) on $a $SMP$(uname -m)" >> /etc/issue
### cp -f /etc/issue /etc/issue.net
### echo >> /etc/issue

Другая хорошая мера безопасности - выключить ping. Ping - это система, отвечающая на запрос, посланный с другого компьютера. Она весьма полезна при установке и отладке сетевых соединений, чтобы проверить, что ваша машина доступна по сети. Она может так же быть использована при прощупывании и/или атаке ее перегружающими ping-запросами ("ping of death"). Для запрета ping-запросов из сети я использую IP-маскарадинг. Я взял, слегка изменив, следующие команды, вместе с пояснениями с securityfocus.com/focus/linux/articles/linux-securing2.html:

ipchains -A input -p icmp --icmp-type echo-request -i ppp0 -j REJECT -l
(1) (2) (3) (4) (5) (6) (7)
Разяснение флагов ipchains:
1. Добавим новое правило.
2. Указать сферу применения правила, в этом случае правило будет применено ко входящим пакетам.
3. Протокол, к которому будет применяться правило. В этом случае - icmp.
4. ICMP тип, в этом случае icmp эхо-ответ на запрос будет блокирован. "Эхо-ответ (ICMP echo)" значит ping.
5. Имя интерфейса. В этом случае это первое телефонное соединение, ppp0.
6. Цель,что мы будем делать с пакетами запроса.
7. Отмечать все пакеты по некоторому критерию в системном журнал-файле.

IP-маскарад более детально описан в главе "Маскарадинг" этого руководства.

Другие меры предосторожности. Я время от времени посматриваю, чтоба кто-то не установил "root kit" на моей системе. Я использую "chkrootkit" (очень маленькую, 25k, скачанную с chkrootkit.org/). После скачивания:
su [provide password]
cd /usr/local
tar xvzf /home/my_name/chkrootkit.tar.gz
cd /usr/local/chkro
make
./chrootkit

Последняя команда предназначена для поиска "root kit" в моей системе. "Rootkit" - это программы, оставляющие черный ход каждому, однажды получившему права "root", устанавливаемые в целях прослушивания, просматривания, защиты своего доступа, и т.д.