суббота, 18 июля 2015 г.

Усиливаем защиту системы от внешних вторжений

Операционные системы семейства Linux всегда славились своей защищённостью и надёжностью. Но по мере развития этой системы, не сидят на месте и хакеры, которые постоянно ищут дыры в ПО и пытаются обойти системы защиты. Если в Windows вы не можете даже положиться на дорогой антивирус, или даже комплекс защитных программ, то с Linux всё куда проще.


Linux, как и прочие UNIX-подобные системы, изначально спроектирован так, чтобы обеспечить достаточный уровень безопасности из коробки. По умолчанию у пользователя отсутствуют привелегии суперпользователя (root, или административные права), и обязательно устанавливается пароль (сразу вспоминается Windows, которая по умолчанию не только предоставляет учётную запись администратора, но и позволяет обойтись без пароля). Это лишь одна из многих мер защиты, которые присутствуют сразу. Вы наверняка слышали, что на Linux нет вирусов. Это не совсем так. Тут важно понимать что есть вирус. Конечно, того, что творится в Windows, вы здесь не увидите. Множество различных конфигураций, версий системного и прикладного ПО, ядра, а также различные варианты его сборки, сводят на нет попытки написать хороший, работоспособный вирус под Linux. К тому же, программы как правило устанавливаются из репозиториев, которые подписаны цифровыми ключами, и вы без труда сможете выяснить владельца репозитория.

Разумеется, если вы любитель ставить левый софт из не менее левых репозиториев - то вы вполне можете что-нибудь подхватить. Какой-нибудь весьма шаловливый, и на первый взгляд, неочевидный скрипт. Другое дело, так называемые руткиты. Сами по себе эти зловреды не наносят вредя системе. Их задача - получить права root (отсюда и название), и предоставить другим зловредам полный доступ к системе. При это руткит очень тщательно себя маскирует, и порой его очень непросто найти. Обычно, мишенью злоумышленников, становятся крупные сервера, а также рабочие станции, представляющие ценный интерес (давно прошли те времена, когда вирусы писались ради удовольствия. Теперь это очень серьёзный, прибыльный и крайне незаконный бизнес). Но и ваш домашний компьютер вполне может стать случайной жертвой, если вы используете уязвимое ПО, ставите софт из левых репозиториев и так далее.

Опять же, стоит провести параллель с Windows. Данная, с позволения сказать, операционная система, из коробки представляет из себя ведро с проржавевшим дном. По умолчанию доступен вшитый в систему фаерволл (справделивости ради сказать, не такой уж ужасный в последних виндах), защита системных файлов от удаления и....всё. Действительно, система сразу после установки дала нам учётную запись адмнистратора, а вы наверняка не указали для неё пароля. Впрочем, Майкрософт можно сказать, предусмотрела это, и ввела такую штуку, как Контроль Учётных записей пользователя (User Account Control, UAC). То самое окно, появляющиеся после запуска какой-нибудь административной утилиты или запуска любой программы от имени администратора. К сожалению, человеческая лень и порой неграмотность, неискоренимы. Многие люди просто напросто вырубают UAC. И всё, что находится в системе, получает к ней полный доступ (а также порнобаннеры, трояны, руткиты и тд). Немногие люди включают его на максимум, ставят и правильно настраивают антивирусы и фаерволл, устанавливают обновления системы. Ещё более немногие, знают какие уязвимые службы нужно отключить. Но как бы вы не старались, какие бы вы не принимали защитные меры - Windows была, есть и будет самой уязвимой и слабозащищённой операционной системой.

Вернёмся к Линуксу. Как я уже сказал, по умолчанию пользователю закрыт root доступ. Для запуска административных программ, используется sudo - утилита, предоставляющая временные права администратора на конкретную команду. Все каталоги в системе имеют своих владельцев и соответствующие права на чтение/запись. В самом ядре системы, включены многие защитные механизмы. Да и большинство популярных дистрибутивов Linux, собираются на совесть, разработчики задействуют дополнительные меры защиты. И всё это - из коробки. Никаких антивирусов, никакой боязни баннеров и троянов. Поставил, настроил, пользуйся. Но тема данной статьи, говорит о том, что это не предел защиты, которую можно обеспечить. Поэтому предлагаю вашему вниманию ряд дополнительных мер, которые помогут превратить вашу систему в непоколебимую крепость. Конечно, обсудить в подробности всё, не получится. Это тема для нескольких десятков статей (к тому же эти статьи уже существуют). Я лишь опишу то, что пригодится простому домашнему пользователю, которому не плевать на защищённость своей системы.

Пароль.


Пароль - это первая и основная линия обороны. Пароль должен, нет, обязан быть достаточно длинным и сложным, но при этом таким, чтобы вы могли его запомнить. Рекомендуется пароль длиной от 8 до 12 знаков (можно больше), состоящий из цифр, букв разного регистра и различных символов. Придумать подобный пароль иногда бывает сложно, поэтому можно его сгенерировать самому, при помощи OpenSSL. OpenSSL есть в любом дистрибутиве Linux, для генерации пароля наберите:

openssl rand -base64 6

Разумеется, такой пароль будет непросто запомнить. А если паролей много? Эту проблему решает менеджер паролей, такой как KeePassX - кроссплатформенный менеджер паролей, доступный в большинстве дистрибутивов Linux.

Если вы пользуетесь SSH, обязательно запретите в его настройках вход для root, безпарольную аутентификацию и используйте для входа шифрованный ключ. Кстати о шифровании...

Шифрование.


Шифрование - самый верный и надёжный способ защитить свои конфиденциальные данные. Способо шифрования в Linux много, все они доступны штатно. Можно зашифровать весь диск, раздел или отдельные каталоги. Шифрование поддерживают все популярные файловые системы в Linux. Шифровать диск целиком - задача долгая, и по большей части бесполезная. К примеру шифровать корневой раздел, смысла нет никакого. Там нет ничего конфиденциального. А вот домашний каталог, а также раздел подкачки (swap), уже другое дело.

Для шифрования каталогов, установим утилиты ecryptfs (на примере Debian/Ubuntu):

sudo apt-get install ecryptfs-utils

Шифруем swap-раздел:

sudo ecryptfs-setup-swap
ecryptfs-setup-private

Введите свой пароль и перезайдите в систему (ну, или перезагрузитесь). Первая команда зашифрует и перемонтирует своп, изменив нужные строки в /etc/fstab. Вторая — создаст каталоги ~/.Private и ~/Private, в которых будут храниться зашифрованные и расшифрованные файлы соответственно. При входе в систему будет срабатывать PAM-модуль pam_ecryptfs.so, который смонтирует первый каталог на второй с прозрачным шифрованием данных. После размонтирования ~/Private окажется пуст, а ~/.Private будет содержать все файлы в зашифрованном виде.

Для шифрования домашнего каталога:

sudo ecryptfs-migrate-home -u имяпользователя

Места на диске должно быть примерно в 2.5 раза больше, чем данных в вашем домашнем каталоге. После проведения данной операции, перезайдите в систему и проверьте работоспособность:

mount | grep Private



Если всё нормально - можете удалить незашифрованный домашний каталог:

sudo rm -r /home/имяпользователя.*

Обновления системы.


Всегда устанавливайте обновления безопасности в системе. Разработчики очень оперативно выпускают патчи для закрытия уязвимостей в ПО, исправления багов и так далее. В большинстве популярных дистрибутивов, есть графический менеджер обновлений, который периодически проверяет их наличие. Но вы также можете проверить их наличие и установить из терминала. Для Debian/Ubuntu:

sudo apt-get update && sudo apt-get upgrade && sudo apt-get dist-upgrade

Фаерволл.


Фаерволл (он же брандмауэр) - это программа, которая позволяет гибко настраивать доступ различных приложений к сети. В ядре Linux, есть мощный и гибкий фаерволл, под названием netfilter. Интерфейсом к нему служит консольная утилита iptables. Настройка производится посредством написания правил обработки сетевых пакетов, проходящих через определённые соединения. Для домашнего компьютера, составлять километровые списки правил не требуется. Более того, если ваше интернет соединение проходит через маршрутизатор (роутер), то настраивать лучше его (даже самые дешёвые роутеры имеют в себе фаерволл). Но если его нет, то настроим всё средствами iptables.

Существуют различные фронтенды (надстройки) над iptables, упрощающие конфигурирование фаерволла. Один из таких - UFW. Он есть в каждом дистрибутиве Linux, имеется графическая оболочка (gufw) для его настройки. Установить можно так:

sudo apt-get install ufw gufw



Интерфейс предельно простой. По умолчанию, фаерволл выключен. Правила добавляются несколькими кликами. Более детальная настройка UFW описана здесь (обязательно прочитайте).

Для быстрой настройки iptables, закрытия уязвимых портов, а также дополнительной защиты от атак типа "отказ в обсуживании" (DoS), можно воспользоваться IPkungfu. Это специальный скрипт, который автоматически запишет нужные правила iptables, а вам надо будет только чуть подправить пару конфигов. Установим:

sudo apt-get install ipkungfu

Открываем конфиг:

sudo nano /etc/ipkungfu/ipkungfu.conf

# Локальная сеть, если есть — пишем адрес сети вместе с маской, нет — пишем loopback-адрес
LOCAL_NET="127.0.0.1"

# Наша машина не является шлюзом
GATEWAY=0

# Закрываем нужные порты
FORBIDDEN_PORTS="135 137 139"

# Блокируем пинги
BLOCK_PINGS=1

# Дропаем подозрительные пакеты (разного рода флуд)
SUSPECT="DROP"

# Дропаем «неправильные» пакеты (некоторые типы DoS)
KNOWN_BAD="DROP"

# Отключаем сканирование портов
PORT_SCAN="DROP"

Далее открываем файл /etc/default/ipkungfu и меняем строку IPKFSTART = 0 на IPKFSTART = 1. 

Запускаем:

sudo ipkungfu

Осталось сделать внести несколько дополнительных настроек для ядра. Открываем /etc/sysctl.conf и прописываем:

# Дропаем ICMP-редиректы (против атак типа MITM)
net.ipv4.conf.all.accept_redirects=0
net.ipv6.conf.all.accept_redirects=0
# Включаем механизм TCP syncookies
net.ipv4.tcp_syncookies=1
# Различные твики (защита от спуфинга, увеличение очереди «полуоткрытых» TCP-соединений и так далее)
net.ipv4.tcp_timestamps=0
net.ipv4.conf.all.rp_filter=1
net.ipv4.tcp_max_syn_backlog=1280
kernel.core_uses_pid=1

Активируем изменения:

sudo sysctl -p

Теперь вы можете не бояться большинства сетевых атак.

Каталог /tmp


Это каталог для временных файлов. Но он также потенциально опасен, поскольку оттуда могут запускаться различные зловреды. Чтобы это не произошло, лучше вынести его на отдельный раздел (2-5 гигабайт), и установить параметры монтирования nodev, noexec, nosuid. Первый запретит монтирование устройств на этот каталог, второй запретит выполнение программ, а третий - запретит устанавливать на каталог бит SUID, который позволяет запускать файлы с правами root от обычного пользователя. К слову, на серверах, вынесение каталога /tmp на отдельный раздел, является обязательным.

Браузер


Как бы не была защищена система, остаётся уязвимым то, через что вы сёрфите по интернету. Это браузер. Опишу настройку стандартного для большинства дистрибутивов, браузера Mozilla Firefox (в дистрибутиве Debian он зовётся Iceweasel):

  • Установите расширение uBlock (или AdBlock, если вы привыкли к нему). Это отсеет множество рекламных баннеров, которые очень часто бывают вредоносными. В настройках расширения включите подписки RuList+EasyList, а также фильтры вредоносных программ (Malware).
  • Установите расширение NoScript, которое будет отключать расширения JavaScript, которые являются самыми опасными в плане уязвимостей. Это может нарушить функционал сайта, поэтому вы можете включить только нужные JavaScript'ы, для работы сайта.
  • В адресной строке, наберите about:config. Откроется редактор расширенных настроек браузера. Наверху будет поисковая строка. Делаем так:

browser.safebrowsing.enabled = false, browser.safebrowsing.malware.enabled = false — Отключают передачу информации о посещаемых веб-сайтах (система для борьбы с фишингом).
browser.search.suggest.enabled = false — Отключает передачу текста, набираемого в окне поиска, поисковой системе без явного подтверждения со стороны пользователя.
dom.enable_performance = false — Отключает передачу браузером информации о времени начала и окончания загрузки страницы. Анализ этих данных позволяет определить факт использования прокси-сервера.
dom.storage.enabled = false — Отключает возможность сайтов хранить некоторые настройки (нечто похожее на Cookies).
general.useragent.override = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.7) Gecko/200091221 Firefox/3.5.7" — Подмена User Agent. Если выставить наиболее распространённое значение, то это поможет снизить уникальность пользователя.
network.dns.disablePrefetch = true — Запрещает предварительное разрешение имён DNS для всех ссылок на веб-странице (пока пользователь сам не нажмёт на ссылку). Это может привести к утечке DNS-трафика при работе через анонимизирующий прокси-сервер.
network.cookie.cookieBehavior = 1 — Запрещает Cookies для сторонних сайтов.
network.http.sendRefererHeader = 0, network.http.sendSecureXSiteReferrer = false — Отключают передачу заголовка HTTP referer для обычного и зашифрованного соединения сответственно.

FlashPlayer. Самое уязвимое и опасное, что может находиться в вашем браузере. Если вы используете его только для просмотра видео на YouTube, то он вам не нужен. Можно переключиться на HTML 5 проигрыватель (который, правда, пока не позвоялет смотреть в Firefox видео в 1080p). Для этого в about:config

  • media.mediasource.enabled;true
  • media.mediasource.mp4.enabled;true
  • media.mediasource.webm.enabled;true
  • media.gstreamer.enabled;true
  • media.fragmented-mp4.exposed;true
  • media.fragmented-mp4.ffmpeg;true
  • media.fragmented-mp4.gmp;true
  • media.fragmented-mp4.use-blank-decoder;false

Далее перейдите по этому адресу и переключите проигрыватель.

Если флеш всё-таки нужен, то делаем так:

Заходим на сайт Adobe на страницу диспетчера параметров. На вкладке «Глобальные параметры хранения» сократите до минимума разрешённый объём пространства на диске для хранения информации и запретите стороннему flash содержимому сохранять данные на компьютер.

Руткиты


Если какому-то особо изощрённому хакеру удалось взломать вашу систему, и/или у вас есть подозрение на наличие руткита, воспользуйтесь утилитой rkhunter:

sudo apt-get install rkhunter
sudo rkhunter -c --sk

Утилита проверит систему на наличие руткитов, и если найдёт - укажет где он сидит, и его можно будет удалить. Подробный лог проверки находится в /var/log/rkhunter.log. Утилиту нужно периодически обновлять. Можно создать задание для cron, котрое будет ежедневно выполнять обновление утилиты и сканирование на руткиты:

sudo nano /etc/cron.daily/rkhunter.sh

#!/bin/bash

/usr/bin/rkhunter --update
/usr/bin/rkhunter -c -cronjob 2>&1 | mail -s "RKhunter Scan Results" ваш.e-mail@.ru

sudo chmod +x /etc/cron.daily/rkhunter.sh

После проверки, результат сканирования отправится на адрес электронной почты, который вы указали.

Выводы.


Выполнив рекомендации из данной статьи, вы получите суперзащищённый десктоп, имунный к большинству сетевых атак и различной сетевой заразы. Однако стоит соблюдать и элементарные меры защиты:

  • 1) Не устанавливать программы из подозрительных репозиториев, или скачивать пакеты с левых ресурсов. Используйте только официальные репозитории или источники, доверие к которым не вызывает сомнений (официальные сайты, блоги разработчика нужной вам программы).
  • 2) Не переходите по посторонним ссылкам, своевременно обновляйте браузер и его расширения.
  • 3) Всегда устанавливайте обновления безопасности для системы.
  • 4) Проверяйте подозрительный файлы на virustotal.com
  • 5) Ни в коему случае не запускайте незнакомые скрипты, назначение которых вам не понятно! Особенно будьте осторожны со скриптами на Perl.

Дополнительно:

Гайд по обеспечению безопасности Linux-систем.
Руководство по iptables (на русском)

1 комментарий: