Linux Security HOWTO: Безопасность ядра

Next Previous Contents

## 7. Безопасность ядра

Здесь описываются опции конфигурации ядра, которые относятся к безопасности, а также объясняется, что они делают, и как их использовать.

Поскольку ядро контролирует поведение вашего компьютера в сети, очень важно, чтобы ядро было само очень безопасно, и его нельзя было каким-либо образом взломать или подвергнуть риску. Чтобы предотвратить некоторые из последних известных методов сетевых атак, вы должны использовать последние стабильные версии ядра. Вы можете найти их на ftp://ftp.kernel.org

## 7.1 Опции компиляции ядра

- IP: Drop source routed frames (CONFIG_IP_NOSR)

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

- IP: Firewalling (CONFIG_IP_FIREWALL)

  Эта опция необходима если вы намереваетесь сконфигурировать вашу машину как щит (firewall), настроить маскарад (masquerading), или хотите защитить вашу станцию с комутирующимися соединениями от кого-либо, желающего проникнуть через ваш PPP dial-up интерфейс.

- IP: forwarding/gatewaying (CONFIG_IP_FORWARD)

  Если вы включили IP forwarding, ваша Linux станция в сущности стала маршрутизатором. Если ваша машина в сети, то вы можете теперь ретранслировать данные из одной сети в другую, и можете, таким образом, разрушить существующий щит, поставленный именно для того, чтобы этого не происходило. Обыкновенным dial-up пользователям лучше выключить это, а другим нужно сконцентрироваться на безопасной реализации этой опции. В компьютере-щите эту опцию нужно активировать и использовать вместе с программным обеспечением реализующим щит (firewall).

  Вы можете включить либо выключить IP forwarding динамически, используя команду для включения:

  > `

  >             root#  echo 1 > /proc/sys/net/ipv4/ip_forward

  > `

  и для выключения

  > `

  >             root#  echo 0 > /proc/sys/net/ipv4/ip_forward

  > `

  Этот файл (и много других файлов в /proc) всегда отображаются с нулевой длиной, но на самом деле это не так. Это новое свойство ядра, так что убедитесь, что ваше ядро имеет версию 2.0.33 или выше.

- IP: firewall packet logging (CONFIG_IP_FIREWALL_VERBOSE)

  Эта опция дает вам информацию о пакетах, которые приходят на ваш щит, как то отправитель, получатель, порт и т.п.

- IP: always defragment (CONFIG_IP_ALWAYS_DEFRAG)

  Обычно эта опция выключена, но если вы создаете систему-щит или настраиваете маскарад (masquerading), вам желательно включить ее. Когда данные посылаются с одной системы в другую, передача не всегда происходит одним пакетом, скорее всего данные фрагментированы на несколько частей. Проблема при этот состоит в том, что информация о номере порта, сохраняется только в первом фрагменте. Это означает, что кто-то может вставить чужеродную информацию в оставшиеся фрагменты в вашем соединении, которая вообще там не предполагалась.

- IP: syn cookies (CONFIG_SYN_COOKIES)

  SYN атака генерирует "отказ в предоставлении сервиса" (DoS), который поглощает все ресурсы вашей системы, что в результате приводит к перезагрузке. Поэтому мы не видим ни одной причины, по которой эту опцию не нужно было бы включать.

- Packet Signatures (CONFIG_NCPFS_PACKET_SIGNING)

  Эта опция доступна в ядрах серии 2.1, которая активирует подпись NCP пакетов для большей безопасности. Обычно вы можете оставить ее выключенной, но если она вам понадобиться, то она есть.

- IP: Firewall packet netlink device (CONFIG_IP_FIREWALL_NETLINK)

  Это действительно искусная опция, которая позволяет вам проанализировать первые 128 байтов в пакетах от пользовательских программ, и определить на основании их достоверности принять или отклонить пакет.

## 7.2 Устройства ядра

Существует несколько блочных и символьных устройств в Linux, которые также помогут вам в вопросах безопасности.

Два устройства, /dev/random и /dev/urandom, предоставляются ядром для получения в любой момент времени случайных чисел.

И /dev/random и /dev/urandom должны быть достаточно безопасны, чтобы использоваться в генераторах PGP ключей, SSH вызовах, и других приложениях, в которых используются случайные числа. Взломщик не должен иметь возможности предугадать следующее число, выданное любой начальной последовательностью чисел из этих генераторов. Было приложено огромное количество усилий для обеспечения того, чтобы числа, которые вы получаете от этих генераторов, были случайны в полном смысле слова "случайный".

Разница состоит только в том, что /dev/random оканчивается на случайном байте и это заставляет вас больше ждать до полного накопления. Заметьте, что в некоторых системах, это может на длительное время заблокировать ввод при генерации в системе записи о новом пользователе. Поэтому вы должны с осторожностью использовать /dev/random. (Возможно наилучшим будет использовать его, когда вы генерируете чувствительную к регистру (клавиши) информацию, и вы говорите пользователю постоянно стучать по клавишам, пока вы не выдадите "ОК, достаточно")

/dev/random является высококачественной энтропией, генерируемой из измерения времени внутренних прерываний, или чего-то в этом роде. Он блокируется до тех пор, пока не наберется достаточно бит случайных данных.

Работа /dev/urandom подобна, но когда памяти под энтропию становиться мало, он возвращает криптографически надежные случайные данные (hash) того что есть на момент останова. Это не настолько же безопасно, но достаточно для большинства приложений.

Вы можете читать с этих устройств используя что-то наподобие:

> `

>             root#  head -c 6 /dev/urandom | uuencode -

> `

Эта команда выдаст 6 случайных символов на консоль, - удобно для генерации пароля.

Если вы хотите узнать алгоритм, то загляните в /usr/src/linux/drivers/char/random.c.

Спасибо Theodore Y. Ts'o, Jon Lewis, и другим ядерщикам Linux за помощь мне (Dave) в этом вопросе.

Next Previous Contents