Как я могу защитить от вторжений и вредоносных программ, прежде чем подключать их к Интернету (особенно по общедоступному IP-адресу)?

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

Что можно сделать для смягчения этого?

Хорошо известно, что нужно изменить пароль для пользователя «pi» (Debian) и «root» (Arch.). Но как насчет других системных учетных записей (например, «tli», «pnd»?) из них есть универсальные пароли, которые предположительно одинаковы для всех единиц?

И есть ли какие-либо известные уязвимости в других пакетах, которые установлены в SD-изображениях, доступных для Pi (например, из-за ограничений оборудования или сокращенных версий этих пакетов?)

В частности, меня беспокоит ssh, mysql и любые другие службы, которые могут выполняться на вновь установленном изображении.

58 голосов | спросил finnw 19 J0000006Europe/Moscow 2012, 18:13:17

3 ответа


22

Вещи, которые я заметил до сих пор о запасе Debian Squeeze:

  • /etc /shadow содержит кучу хэшей паролей для учетных записей, которые не являются учетной записью pi (buildbot и т. д.). Измените пароль на учетной записи pi, естественно, если вы еще этого не сделали (или создайте новую учетную запись пользователя для себя и удалите учетную запись pi), но также отредактируйте другие записи и замените хэши на * s. Примечание /etc /passwd содержит повторяющиеся записи для учетной записи pi, которая путает ад из adduser /deluser, просто удалите его.

  • конфигурация демона по умолчанию ssh разрешает удаленный вход root. Это должно быть отключено.

  • стоит использовать netstat для проверки множества вещей, прослушивающих подключения; удивительное количество вещей работает по сравнению с типичным минимальным Netinst Debian. Как правило, рекомендуется уменьшить воздействие только на то, что вам нужно , поэтому сначала отключите или отключите брандмауэр все , а затем выпустите только те сервисы, которые вы намеренно хотите видеть на публике Интернет (обычно просто ssh или ssh + http).

  • вы хотите изменить ключи хоста ssh, а не использовать те, что на изображении (AIUI последнее изображение на самом деле восстанавливает их при первой загрузке)

ответил moonshadow 20 J0000006Europe/Moscow 2012, 03:10:36
39

Существует множество способов устранения уязвимостей, однако первое, что вы должны знать, это то, что Linux не так восприимчив к вторжению, как другие операционные системы. В основном это связано с отсутствием вредоносного ПО, которое нацелено на NIX. Тем не менее, вы хотите знать о способах доступа к вашей системе.

Пароли

Во-первых, вы должны изменить пароль по умолчанию для всех пользователей, которые могут войти в систему. Для Debian это только пользователь по умолчанию Pi . Для Arch Linux это суперпользователь root . Пароли изменяются при входе в систему как пользователь, набрав passwd в командной строке.

Рекомендуется защищенная политика паролей, так как было бы довольно просто запускать атаки словаря грубой силы на пользователя по умолчанию. Выберите достойный пароль средней длины.

Неизвестность

Удаленный доступ, вероятно, является самым важным ядром безопасности. То, что мы можем использовать здесь, называется безопасностью по неизвестности . Общим методом атаки является сканирование диапазона IP-адресов для открытых портов. Поэтому одной из простейших контрмер, которую мы можем предпринять, является пользователь, который не использует порты по умолчанию .

Все, что нужно сделать, это изменить порты по умолчанию для часто используемых протоколов. Например, по умолчанию SSH-порт равен 22, а FTP равен 21. В моей системе SSH использует 222 и FTP 221, которые должны скрывать эти протоколы от любой автоматической атаки.

Безопасность подключения

Во-первых, самая важная проблема безопасности заключается в том, что учетная запись root должна not регистрироваться через SSH. Вы можете отключить вход root в файле /etc /ssh /sshd_config, комментируя или удаляя эту строку:

PermitRootLogin yes

По умолчанию он должен быть установлен на нет, но лучше всего убедиться.


Если вы используете SSH много, и беспокоитесь о мужчине в средних атаках, словарные атаки против вашего пароля, то вы можете использовать SSH Keys.

Аутентификация на основе ключа имеет несколько преимуществ перед аутентификацией паролей, например, значения ключа значительно сложнее, чем простые пароли.

Чтобы настроить аутентификацию ключа SSH, вам нужно сначала создать пару ключей. Это проще всего сделать на вашей клиентской машине (машине, с которой вы хотите получить доступ к Pi).

# ssh-keygen -t rsa
Создание пары ключей public /private rsa.
Введите файл для сохранения ключа (/home/pi/.ssh/id_rsa):

Введите парольную фразу (пустая для кодовой фразы):
Введите еще одну кодовую фразу:
Ваша идентификация сохранена в /home/pi/.ssh/id_rsa.
Ваш открытый ключ был сохранен в /home/pi/.ssh/id_rsa.pub.

Как вы можете видеть, это создало два файла, закрытый ключ id_rsa и открытый ключ id_rsa.pub.

Частный ключ известен только вам, и он должен быть безопасно защищен . Напротив, открытый ключ можно свободно использовать на любом SSH-сервере, к которому вы хотите подключиться.

Итак, что бы мы хотели сделать, это скопировать общедоступный ключ на малиновый пи. Мы можем сделать это очень легко:

ssh-copy-id pi @ address

Где pi - имя пользователя Raspberry Pi, а address - IP-адрес Pi.

Повторю, мы распространяем общедоступный ключ. Частный ключ принадлежит вам. Держитесь крепко, чтобы освободить этот ключ, нарушает безопасность системы.

Arch wiki имеет отличное описание того, как это работает:

  

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

Для получения дополнительной информации о безопасности аутентификации с открытым ключом Wikipedia содержит подробное объяснение .

Благодаря безопасности SSH вы можете совершить ужасное количество зашифрованных безопасных передач данных. Практически каждое другое соединение порта может быть маршрутизировано через SSH, если это необходимо. Вы даже можете переслать сеанс X через SSH, чтобы он появился на другом компьютере.

В качестве интересного примера, вчера я запускал Eclipse на своем рабочем столе, просматривая его на моей малине Pi и управляя мышью и клавиатурой из моего нетбука. Такова силаSSH.

Разрешения

Разрешения для файлов - это суть системы безопасности Linux. Они влияют на то, кто может видеть ваши файлы и папки, и может быть очень важным для защиты ваших данных. Например, войдите в Raspberry Pi как обычный пользователь и запустите:

cat /etc /shadow

Файл shadow содержит зашифрованные пароли для пользователей в системе, поэтому мы не хотим, чтобы кто-нибудь мог взглянуть на него! Итак, вы должны увидеть этот ответ:

cat: /etc /shadow: разрешение отклонено

Мы можем понять, почему это, взглянув на права доступа к файлу:

ls -l /etc /shadow
-rw ------- 1 корень root 821 11 июня 22:13 /etc /shadow

Это говорит нам, что файл принадлежит root, и только владелец имеет права на чтение /запись. Давайте разложим этот вывод.

-rw -------

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

drwxrwxrwx 10 root root 280 Jun 20 11:40 tmp /

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

Следующая важная часть - это два имени. В нашем случае root root. Первым пользователем является владелец файла. Вторая - группа пользователей . Например, было бы общим:

drwxr-xr-x 10 пользователей pi 280 Jun 20 11:40 home /pi

Это позволит доступ для чтения /записи для пользователя pi в его домашнем каталоге и доступ для чтения для всех других пользователей.

Разрешения, которые чаще всего упоминаются и контролируются с использованием восьмеричных значений. Например, если мы хотим установить rw только для владельца, мы бы набрали:

chmod 600 /path /to /file

Это общий обзор, для получения более подробной информации о разрешениях файлов Linux, вот хорошая статья .


Это понимание важно при защите файлов и папок. Например, скажем, мы только что установили ключи SSH. Мы определенно не хотим, чтобы другие пользователи видели внутри нашего каталога ~ /.ssh, или они могли бы воспользоваться нашим закрытым ключом. Таким образом, мы удаляем их привилегии чтения:

chmod 700 ~ /.ssh
ls -la ~ /.ssh
drwx ------ 2 james users 4096 18 июн 03:05.

Я надеюсь, что это устранит некоторые из ваших проблем с обеспечением Linux. Из этого вы должны убедиться, что это довольно безопасная система, и если вы осторожны, у вас не должно быть проблем с безопасностью.

ответил Jivings 20 J0000006Europe/Moscow 2012, 14:18:22
5

Чтобы предотвратить атаки с помощью bruteforce, вы можете установить и настроить fail2ban. Он будет анализировать файлы журнала (например, /var/log/auth.log) и попытаться определить, не удалось ли несколько попыток входа в систему. Затем он автоматически запретит исходные IP-адреса с помощью iptables.

В Интернете есть куча хаутов.

ответил Morgan Courbet 12 +04002012-10-12T16:30:13+04:00312012bEurope/MoscowFri, 12 Oct 2012 16:30:13 +0400 2012, 16:30:13

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132