Гайд по обеспечению безопасности Linux-системы. Опасные уязвимости Linux Зашифруем файловую систему в Linux для более полной безопасности Linux

На ежегодной конференции LinuxCon в 2015 году создатель ядра GNU/Linux Линус Торвальдс поделился своим мнением по поводу безопасности системы. Он подчеркнул необходимость смягчения эффекта от наличия тех или иных багов грамотной защитой, чтобы при нарушении работы одного компонента следующий слой перекрывал проблему.

В этом материале мы постараемся раскрыть эту тему с практической точки зрения:

7. Установить сетевые экраны

Недавно была новая уязвимость, позволяющая проводить DDoS-атаки на сервера под управлением Linux. Баг в ядре системы появился с версии 3.6 в конце 2012 года. Уязвимость даёт возможность хакерам внедрять вирусы в файлы загрузки, веб-страницы и раскрывать Tor-соединения, причём для взлома не нужно прилагать много усилий - сработает метод IP-спуфинга.

Максимум вреда для зашифрованных соединений HTTPS или SSH - прерывание соединения, а вот в незащищённый трафик злоумышленник может поместить новое содержимое, в том числе вредоносные программы. Для защиты от подобных атак подойдёт firewall.

Блокировать доступ с помощью Firewall

Firewall - это один из самых важных инструментов блокирования нежелательного входящего трафика. Мы рекомендуем пропускать только действительно нужный трафик и полностью запретить весь остальной.

Для фильтрации пакетов в большинстве дистрибутивов Linux есть контроллер iptables. Обычно им пользуются опытные пользователи, а для упрощённой настройки можно использовать утилиты UFW в Debian/Ubuntu или FirewallD в Fedora.

8. Отключить ненужные сервисы

Специалисты из Университета Виргинии рекомендуют отключить все сервисы, которые вы не используете. Некоторые фоновые процессы установлены на автозагрузку и работают до отключения системы. Для настройки этих программ нужно проверить скрипты инициализации. Запуск сервисов может осуществляться через inetd или xinetd.

Если ваша система настроена через inetd, то в файле /etc/inetd.conf вы сможете отредактировать список фоновых программ «демонов», для отключения загрузки сервиса достаточно поставить в начале строки знак «#», превратив её из исполняемой в комментарий.

Если система использует xinetd, то её конфигурация будет в директории /etc/xinetd.d. Каждый файл директории определяет сервис, который можно отключить, указав пункт disable = yes, как в этом примере:

Service finger { socket_type = stream wait = no user = nobody server = /usr/sbin/in.fingerd disable = yes }
Также стоит проверить постоянные процессы, которые не управляются inetd или xinetd. Настроить скрипты запуска можно в директориях /etc/init.d или /etc/inittab. После проделанных изменений запустите команду под root-аккаунтом.

/etc/rc.d/init.d/inet restart

9. Защитить сервер физически

Невозможно полностью защититься от атак злоумышленника с физическим доступом к серверу. Поэтому необходимо обезопасить помещение, где расположена ваша система. Дата-центры серьёзно следят за безопасностью, ограничивают доступ к серверам, устанавливают камеры слежения и назначают постоянную охрану.

Для входа в дата-центр все посетители должны проходить определенные этапы аутентификации. Также настоятельно рекомендуется использовать датчики движения во всех помещениях центра.

10. Защитить сервер от неавторизованного доступа

Система неавторизованного доступа или IDS собирает данные о конфигурации системы и файлах и в дальнейшем сравнивает эти данные с новыми изменениями, чтобы определить, вредны ли они для системы.

Например, инструменты Tripwire и Aide собирают базу данных о системных файлах и защищают их с помощью набора ключей. Psad используется для отслеживания подозрительной активности с помощью отчётов firewall.

Bro создан для мониторинга сети, отслеживания подозрительных схем действия, сбора статистики, выполнения системных команд и генерация оповещений. RKHunter можно использовать для защиты от вирусов, чаще всего руткитов. Эта утилита проверяет вашу систему по базе известных уязвимостей и может определять небезопасные настройки в приложениях.

Заключение

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

Безусловно, можно сказать, что Linux более безопасен (защищен), чем Windows. Безопасность в Linux встроенная, а не прикрученная где то сбоку, как это реализовано в Windows. Безопасность системы Linux охватывает область от ядра до рабочего стола, но есть шансы для хакеров навредить вашему домашнему каталогу (/home).

Ваши байты с фотографиями, домашним видео, документами и данными кредитных карточек или кошельков — самая дорогая часть информации, содержащаяся на компьютере. Конечно, Linux не восприимчив ко всяким там интернет — червям и вирусам для Windows. Но злоумышленники могут найти способ для доступа к вашим данным на домашнем каталоге.

Подготовив свой старенький компьютер или жесткий диск перед продажей форматированием, вы думаете будет достаточно? Найдется куча современных инструментов для восстановления данных. Хакер с легкостью восстановит ваши данные с жесткого диска, не взирая на ОС в которой вы работали.

На эту тему вспоминается опыт одной компании по перекупке подержанных компьютеров и дисков. По ходу своей деятельности они вынесли вердикт, что 90% прежних хозяев своего компьютера перед продажей не позаботились должным образом об очистке своих носителей информации. И они извлекали очень щепетильные байты данных. Даже и представить страшно, что где — то в закромах вашего жесткого диска найдется информация для входа в ваш интернет банк или он — лайн кошелек.

Начните с основ безопасности Linux

Шагнем к основам (), которые подойдут почти к любым
дистрибутивам Linux.

Зашифруем файловую систему в Linux для более полной безопасности Linux

Пользовательские пароли не решат проблему, если вы хотите чтобы действительно никто не смог прочитать ваш домашний каталог (/home) или определенный размер байтов. Можно его так, чтобы даже пользователь с высшими привилегиями root не сможет сунуть свой нос.

Удаляйте щепетильные файлы так, чтобы их больше никто не восстановил

Если вы решили продать или подарить свой компьютер или носитель информации, не думайте, что простое форматирование безвозвратно удалит ваши файлы. Можно на ваш Linux установить инструмент secure-delete, в который входит утилита srm, предназначенная для безопасного удаления файлов.

Также не стоит забывать об имеющемся в ядре Linux брандмауэре. В состав всех дистрибутивов Linux входит lptables, которая является частью ядра. Lptables позволяет фильтровать сетевые пакеты. Конечно же, в терминале можно настроить эту утилиту. Но этот способ непосилен многим, в том числе и мне. Поэтому я устанавливаю, и произвожу настройку, с такой легкостью как будто играю в игру.

Как и все операционные системы, Linux склонен к накоплению всякого хлама при работе различных приложений. И это не его вина Linux, так как различные приложения, например, браузеры текстовые редакторы и даже видео плееры, работают не на уровне ядра и накапливают временные файлы. Можно установить утилиту BleachBit по универсальному удалению мусора.

Анонимный серфинг, скрываем свой IP — очень важно для безопасности вашей личности под ос Linux


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

Атакующим будет сложно до вас добраться, если они не могут определить ваше место нахождения. Заметаем следы не сложной настройкой совместно работающих двух утилит под названием privoxy и tor.

По моему мнению, соблюдение и настройка всех этих правил обезопасит вас и ваш компьютер на 90%.

P.S. Я пользуясь облаком под названием dropbox. Храню в нем свои старые и новые, ещё не опубликованные статьи. Удобно иметь доступ к своим файлам с любой точки земли и на любом компьютере. При написании статей для сайта в текстовом редакторе, сохраняю свои текстовые документы с паролем и только после этого закачиваю на сервер dropbox. Никогда не стоит пренебрегать лишней безопасностью, которая сыграет вам только на руку.

Всем нам известно, что операционная система Linux намного безопаснее Windows благодаря своей архитектуре и особой системе распределения доступа между пользователями. Но программисты тоже люди, как бы нам это ненравилось они тоже ошибаются. И из-за этих ошибок в системе появляются дыры, через которые злоумышленники могут обойти системы защиты.

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

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

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

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

Также все уязвимости можно поделить на локальные, которые работают только если у хакера есть доступ к локальному компьютеру и удаленные, когда достаточно доступа через интернет. А теперь перейдем к списку уязвимостей.

1. Dirty COW

Первой в нашем списке будет свежая уязвимость, которая была обнаружена этой осенью. Название Dirty COW расшифровывается как Copy on Write. Ошибка возникает в файловой системе во время копирования при записи. Это локальная уязвимость, которая позволяет получить полный доступ к системе любому непривилегированному пользователю.

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

Уязвимость была в ядре около 10 лет, но после обнаружения была быстро устранена, хотя остались еще миллионы устройств Andoid в которых ядро не обновлялось и не думает и где эту уязвимость можно эксплуатировать. Уязвимость получила код CVE-2016-5195.

2. Уязвимость Glibc

Уязвимость получила код CVE-2015-7547. Это была одна из наиболее обсуждаемых уязвимостей среди проектов с открытым исходным кодом. В феврале 2016 выяснилось, что библиотека Glibc имеет очень серьезную уязвимость, которая позволяет злоумышленнику выполнить свой код на удаленной системе.

Важно заметить что Glibc - это реализация стандартной библиотеки Си и С++, которая используется в большинстве программ Linux, в том числе сервисов и языков программирования таких как PHP, Python, Perl.

Ошибка была допущена в коде разбора ответа DNS сервера. Таким образом, уязвимость могли использовать хакеры, к DNS которых обращались уязвимые машины, а также выполняющие MITM атаку. Но уязвимость давала полный контроль над системой

Уязвимость была в библиотеке еще с 2008 года, но после обнаружения достаточно быстро были выпущены патчи.

3. Heartbleed

В 2014 году была обнаружена одна из самых серьезных по масштабу и последствиям уязвимость. Она была вызвана ошибкой в модуле heartdead программы OpenSSL, отсюда и название Heartbleed. Уязвимость позволяла злоумышленникам получить прямой доступ к 64 килобайтам оперативной памяти сервера, атаку можно было повторять, пока вся память не будет прочитана.

Несмотря на то, что исправление было выпущено очень быстро, пострадало очень много сайтов и приложений. Фактически уязвимыми были все сайты, использующие HTTPS для защиты трафика. Злоумышленники могли получить пароли пользователей, их личные данные и все что находилось в памяти в момент атаки. Уязвимость получила код CVE-2014-0160.

4. Stagefright

Если уязвимость получила кодовое имя, это однозначно означает, что она заслуживает внимания. Уязвимость Stagerfight не исключение. Правда, это не совсем проблема Linux. Stagefright - это библиотека для обработки мультимедийных форматов в Android.

Она реализована на C++, а значит обходит все защитные механизмы Java. В 2015 году было обнаружено целую группу уязвимостей, которые позволяли выполнить удаленно произвольный код в системе. Вот они CVE-2015-1538, CVE-2015-1539, CVE-2015-3824, CVE-2015-3826, CVE-2015-3827, CVE-2015-3828 и CVE-2015-3829.

Злоумышленнику было достаточно отправить MMS на уязвимый смартфон со специально модифицированным медиафайлом, и он получал полный контроль над устройством с возможностью записывать и читать данные с карты памяти. Уязвимость была исправлена разработчиками Android но до сих пор миллионы устройств остаются уязвимыми.

5. Уязвимость нулевого дня ядра

Это локальная уязвимость, которая позволяет повысить права текущего пользователя до root из-за ошибки в системе работы с криптографическими данными ядра, которые хранятся в памяти. Она была обнаружена в феврале 2016 года и охватывала все ядра начиная от 3.8, а это значит что уязвимость существовала 4 года.

Ошибка могла использоваться хакерами или вредоносным программным обеспечением для повышения своих полномочий в системе, но очень быстро была исправлена.

6. Уязвимость в MySQL

Эта уязвимость получила код CVE-2016-6662 и затронула все доступные версии сервера баз данных MySQL (5.7.15, 5.6.33 и 5.5.52), базы данных Oracle и клоны MariaDB и PerconaDB.

Злоумышленники могли получить полный доступ к системе через SQL запрос передавался код, который позволял заменить my.conf на свою версию и перезагрузить сервер. Также была возможность выполнить вредоносный код с правами суперпользователя.

Решения MariaDB и PerconaDB выпустили патчи достаточно оперативно, Oracle отреагировал, но намного позже.

7. Shellshock

Эта уязвимость была обнаружена в 2014 году перед тем как просуществовала 22 года. Ей был присвоен код CVE-2014-6271 и кодовое имя Shellshock. Эта уязвимость сравнима по опасности с уже известной нам Heartbleed. Она вызвана ошибкой в интерпретаторе команд Bash, который используется по умолчанию в большинстве дистрибутивов Linux.

Bash позволяет объявлять переменные окружения без аутентификации пользователя, а вместе в ними можно выполнить любую команду. Особой опасности это набирает в CGI скриптах, которые поддерживаются большинством сайтов. Уязвимы не только серверы, но и персональные компьютеры пользователей, маршрутизаторы и другие устройства. По сути, злоумышленник может выполнить удаленно любую команду, это полноценное удаленное управление без аутентификации.

Уязвимости были подвержены все версии Bash, включая и 4.3, правда после обнаружения проблемы разработчики очень быстро выпустили исправление.

8. Quadrooter

Это целая серия уязвимостей в Android, которая была обнаружена в августе 2016. Они получили коды CVE-2016-5340, CVE-2016-2059, CVE-2016-2504, CVE-2016-2503. Ошибке подвержены более 900 миллионов Android устройств. Все уязвимости были обнаружены в драйвере ARM процессора Qualcomm и все они могут использоваться для получения root доступа к устройству.

Как и DirtyCOW здесь не нужно никаких полномочий, достаточно установить вредоносное приложение и оно сможет получить все ваши данные и передать их злоумышленнику.

9. Уязвимость в OpenJDK

Это очень серьезная уязвимость linux 2016 в Java машине OpenJDK с кодом CVE-2016-0636, она затрагивает всех пользователей, работающих с Oracle Java SE 7 Update 97 и 8 Update 73 и 74 для Windows, Solaris, Linux и Mac OS X. Эта уязвимость позволяет злоумышленнику выполнить произвольный код за пределами Java машины, если вы откроете специальную страницу в браузере с уязвимой версией Java.

Это позволяло злоумышленнику получить доступ к вашим паролям, личным данным, а также запускать программы на вашем компьютере. Во всех версиях Java ошибка была очень оперативно исправлена, она просуществовала с 2013 года.

10. Уязвимость протокола HTTP/2

Это целая серия уязвимостей, которая была обнаружена в 2016 году в протоколе HTTP/2. Они получили коды CVE-2015-8659, CVE-2016-0150, CVE-2016-1546, CVE-2016-2525, CVE-2016-1544. Уязвимостям были подвержены все реализации этого протокола в Apache, Nginx Microsoft, Jetty и nghttp2.

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

А вы в безопасности?

В этой статье мы рассмотрели самые опасные уязвимости Linux 2016, 2015 и 2014 годов. Большинство из них могли причинить серьезный вред системам если бы не были вовремя исправлены. Благодаря открытому исходному коду такие уязвимости Linux эффективно обнаруживается и быстро исправляются. Только не забывайте обновлять свою систему. Проблема остается только с Android. Некоторые устройства уже не получают обновлений и этой проблеме пока нет решения.


Многие пользователи считают Ubuntu попсовой, а Ubuntu Server не серьёзным. Многие забывают, что Ubuntu Server поддерживается 5 лет, а папа Debian 5.0 был на рынке 3 года - с 2009 по 2012 г.

По ценам поддержки - Ubuntu Server по сравнению с Red Hat можно и нужно сказать - достался вам даром, даже если вы закажете круглосуточную поддержку 24х7х365.

Посмотрите какие решения в плане безопасности внедрены во все версии Ubuntu и делают её безопасной и надёжной.

Возможности

Матрица возможностей безопасности

Возможность 8.04 LTS (Hardy Heron) 10.04 LTS (Lucid Lynx) 11.04 (Natty Narwhal) 11.10 (Oneiric Ocelot) 12.04 LTS (Precise Pangolin) 12.10 (Quantal Quetzal)
Нет открытых портов policy policy policy policy policy policy
Хеш пароля md5 sha512 sha512 sha512 sha512 sha512
SYN cookies -- kernel & sysctl kernel & sysctl kernel & sysctl kernel & sysctl kernel & sysctl
Возможности файловой системы -- kernel kernel kernel kernel kernel
Конфигурируемый файрвол ufw ufw ufw ufw ufw ufw
PR_SET_SECCOMP kernel kernel kernel kernel kernel kernel
AppArmor 2.1 2.5 2.6.1 2.7.0~beta1 2.7.0 2.7.0
SELinux universe universe universe universe universe universe
SMACK -- kernel kernel kernel kernel kernel
Шифрованный LVM alt installer alt installer alt installer alt installer alt installer alt installer
eCryptfs -- ~/Private or ~, filenames ~/Private or ~, filenames ~/Private or ~, filenames ~/Private or ~, filenames ~/Private or ~, filenames
Защита стека gcc patch gcc patch gcc patch gcc patch gcc patch gcc patch
Защита кучи glibc glibc glibc glibc glibc glibc
Обфусцированный указатель glibc glibc glibc glibc glibc glibc
Стек ASLR kernel kernel kernel kernel kernel kernel
Libs/mmap ASLR kernel kernel kernel kernel kernel kernel
Exec ASLR kernel (-mm patch) kernel kernel kernel kernel kernel
brk ASLR kernel (exec ASLR) kernel kernel kernel kernel kernel
VDSO ASLR kernel kernel kernel kernel kernel kernel
Сборка с PIE -- package list package list package list package list package list
-- gcc patch gcc patch gcc patch gcc patch gcc patch
Сборка с RELRO -- gcc patch gcc patch gcc patch gcc patch gcc patch
Сборка с BIND_NOW -- package list package list package list package list package list
Non-Executable Memory PAE only PAE, ia32 partial-NX-emulation PAE, ia32 partial-NX-emulation PAE, ia32 partial-NX-emulation PAE, ia32 partial-NX-emulation
Защита /proc/$pid/maps kernel & sysctl kernel kernel kernel kernel kernel
Ограничения символьных ссылок -- -- kernel kernel kernel kernel
Ограничения жёстких ссылок -- -- kernel kernel kernel kernel
ptrace scope -- -- kernel kernel kernel kernel
Защита 0-address kernel & sysctl kernel kernel kernel kernel kernel
Защита /dev/mem kernel (-mm patch) kernel kernel kernel kernel kernel
Отключён /dev/kmem kernel (-mm patch) kernel kernel kernel kernel kernel
Блокировка загрузки модулей drop CAP_SYS_MODULES sysctl sysctl sysctl sysctl sysctl
kernel kernel kernel kernel kernel kernel
Защита стека ядра -- kernel kernel kernel kernel kernel
Модуль RO/NX -- -- kernel kernel kernel kernel
-- -- kernel kernel kernel kernel
-- -- kernel kernel kernel kernel
Фильтрация системных вызовов -- -- -- kernel kernel kernel

Нет открытых портов

Установленная по умолчанию Ubuntu не имеет открытых портов, доступных извне в сети. Исключение из этого правила только для сервисов сетевой инфраструктуры, такие как DHCP клиент и mDNS (Avahi/ZeroConf).

Когда устанавливается Ubuntu Server, администратор может установить дополнительные сетевые сервисы, например веб-сервер Apache. Но по умолчанию, на только что установленной системе, если сделать netstat -an --inet | grep LISTEN | grep -v 127.0.0.1 , то можно легко убедиться, что в Ubuntu без надобности не открываются порты для доступа из сетей к системе.

Хеш пароля

Системный пароль, используемый для входа в Ubuntu сохраняется в /etc/shadow. Давным-давно хеш пароля в DES сохранялся в /etc/passwd. Но современные Linux уже с давних пор хранят хеши в /etc/shadow и первое время использовался хеш основанный на MD5 с солью (salted MD5-based hashes crypt id 1). Так как у одинаковых паролей были одинаковые хеши без применения соли, то внедрение соли позволяло улучшить безопасность и усложнить взлом паролей множества пользователей системы.

Сейчас MD5 считается не надёжным и с ростом вычислительных возможностей компьютеров, с Ubuntu 8.10 применяется хеш SHA-512 с солью (salted SHA-512 based password hashes crypt id 6). Это делает взлом грубой силой с помощью перебора всех вариантов - невероятно сложным и долгим.

Подробнее man crypt.

Используйте test-glibc-security.py для тестов.

SYN cookies

Когда систему переполняют новыми сетевыми соединениями, механизм SYN cookie помогает снизить урон от SYN-flood атак.

Возможности файловой системы

Необходимость в setuid приложениях, которые работают с правами выше, чем тот кто их запустил, может быть уменьшена с применением возможностей файловых систем, таких как xattrs. Такие возможности снижают риск злоупотреблений над потенциально опасными setuid приложениями.

Ядро Linux поддерживает поддержку и есть инструментарий libcap2-bin для использования файловых возможностей типа xattrs для усиления безопасности setuid приложений.

Используйте для тестов test-kernel-security.py.

Конфигурируемый файрвол

ufw это фронтенд для iptables, который установлен и используется в Ubuntu, но включить его пользователь должен самостоятельно. UFW призван обеспечить лёгкий в использовании интерфейс для людей не знакомых с концепциями файрвола iptables, с его цепочками и таблицами.

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

UFW является помощником и основой уже для графических фронтендов.

Используйте для тестов ufw tests.

PR_SET_SECCOMP

AppArmor

SELinux

SELinux - система мандатного управления доступом, основанная на понятие inode - индексного дескриптора файловой системы.

Установка пакета selinux сделает нужные изменения и корректировки во время загрузки ПК.

Используйте для тестов test-kernel-security.py.

SMACK

SMACK - гибкая система мандатного управления доступом, основанная на понятие inode - индексного дескриптора файловой системы.

Используйте для тестов test-kernel-security.py.

Шифрование файловых систем

Шифрование LVM

Пользователи с помощью Alternate установщика могут установить Ubuntu на шифрованный LVM (Logical Volume Manage - Менеджер логических томов), который все разделы зашифрует, включая раздел подкачки swap.

eCryptfs

Шифрованные папки были впервые реализованы в Ubuntu 8.10 как безопасное место хранения важной информации пользователя.

Установщик диска Alternate и Server позволяет настроить шифрованные папки для первого пользователя.

В Ubuntu 9.04 поддержка шифрования папок была расширена и пользователь мог зашифровать всю домашнюю папку. Шифрование домашней папки поддерживается в Alternate установщике и Desktop установщике через параметр user-setup/encrypt-home=true.

Усиление безопасности пользовательского пространства

Множество возможностей по безопасности реализуются через флаги компиляции при построении пакетов программ и ядра.

Защита стека

Флаг gcc -fstack-protector обеспечивает защиту от переполнения стека, помещая маленькое случайное число в качестве маркера. Этот метод усложняет переполнение стека различными эксплойтами.

Не большое количество программ плохо работают, если собраны с данным параметром и для них -fstack-protector отключен.

Используйте для тестов test-gcc-security.py.

Защита кучи

GNU C Library защита кучи (автоматически ptmalloc и в ручную) обеспечивает защиту corrupted-list/unlink/double-free/overflow в менеджере памяти glibc.

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

Эта защита развивалась со временем, добавляя всё больше и больше вариантов защиты. В текущем состоянии glibc 2.10 успешно противостоит даже трудно уловимым условиям атаки.

Обфусцированный указатель

Некоторые указатели glibc обфусцированны через PTR_MANGLE/PTR_UNMANGLE макросы внутри в glibc, предотвращая от перезаписи указатели во время исполнения.

Используйте тесты test-glibc-security.py.

Случайное размещение в адресном пространстве. Address Space Layout Randomisation (ASLR)

ASLR реализован в ядре и загрузчик ELF размещает в случайных адресах важнейшие структуры: стек, кучу, общие библиотеки и другое.

Это усложняет предсказание адресов, когда злоумышленник пытается использовать эксплойты.

ASLR изменяется глобально через /proc/sys/kernel/randomize_va_space. До Ubuntu 8.10 значение было "1" (включено). В поздних релиза, который включает brk ASLR, значение выставлено в "2" (включено с brk ASLR).

Стек ASLR

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

Libs/mmap ASLR

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

Защита доступна с ядра 2.6.15 (Ubuntu 6.06).

Exec ASLR

Программы, собранные с параметром "-fPIE -pie", загружаются в разные участки памяти. Это усложняет атаку или прыжок по адресу для проведения атаки, приводящей к изменению памяти.

Защита доступна с ядра 2.6.25 (Ubuntu 8.04 LTS).

brk ASLR

Подобно exec ASLR, brk ASLR регулирует адреса памяти между exec и brk для маленьких запросов на выделение памяти. Рандомизация brk смещения exec памяти была добавлена в ядро 2.6.26 (Ubuntu 8.10).

VDSO ASLR

Каждый раз запуск программы размещает результаты в различных vdso. Впервые появилось в ядре 2.6.18 (x86, PPC) и 2.6.22 (x86_64), но не был включён в Ubuntu 6.10 из-за COMPAT_VDSO, который удалили в Ubuntu 8.04 LTS.

Защищает от jump-into-syscall атак.

Только x86 поддерживалось glibc 2.6. glibc 2.7 (Ubuntu 8.04 LTS) уже поддерживало x86_64 ASLR vdso.

Тем кому необходимо древнее статичное pre-libc6 vdso могут использовать "vdso=2" как параметр ядра и получить снова COMPAT_VDSO.

Сборка с PIE

Все программы, которые собраны с Position Independent Executables (PIE) параметром "-fPIE -pie" могут воспользоваться защитой exec ASLR.

Это защищает от "return-to-text" атак и делает бесполезными обычные атаки, рассчитанные на изменение памяти.

Из-за PIE наблюдается большое падение производительности (5-10%) на архитектурах с небольшим количеством регистров общего назначения (типа x86).

Поэтому PIE используется для небольшого количества критически важных в плане безопасности пакетов.

PIE для x86_64 не имеет проблем с падением производительности, поэтому используется для всех пакетов, но требует лучшего тестирования.

Пакет 8.04 LTS 9.04 9.10 10.04 LTS 10.10 11.04 11.10
openssh да да да да да да да
apache2 -- да да да да да да
bind9 -- да да да да да да
openldap -- да да да да да да
postfix -- да да да да да да
cups -- да да да да да да
postgresql-8.3 -- да да да да да да
samba -- да да да да да да
dovecot -- да да да да да да
dhcp3 -- да да да да да да
ntp -- -- да да да да да
amavisd-new -- -- да да да да да
squid -- -- да да да да да
cyrus-sasl2 -- -- да да да да да
exim4 -- -- да да да да да
nagios3 -- -- да да да да да
nagios-plugins -- -- да да да да да
xinetd -- -- да да да да да
ipsec-tools -- -- да да да да да
mysql-dfsg-5.1 -- -- да да да да да
evince -- -- -- да да да да
firefox -- -- -- да да да да
gnome-control-center -- -- -- -- -- да да
tiff -- -- -- -- -- да да
totem -- -- -- -- -- да да
qemu-kvm -- -- -- -- -- -- да
pidgin -- -- -- -- -- -- да

Сборка с Fortify Source

Программы, собранные с параметром "-D_FORTIFY_SOURCE=2" (и -O1 или выше), включают несколько защит в режиме компиляции и исполнения в glibc:

  • заменяются вызовы "sprintf", "strcpy" с их неопределёнными границами на родственные функции с ограниченным N, когда размер буфера известен заранее. Это защищает от переполнения памяти (memory overflows).
  • прекращение атаки через формат строки "%n", когда строка находится в сегменте памяти с доступом на запись.
  • требуют проверку кодов возврата важнейших функций и аргументов (например для system, write, open).
  • требуют явного указания маски при создании файла.

Сборка с RELRO

Ужесточение для ELF программ по борьбе с перезаписью памяти загрузчика. Уменьшает вероятность атаки GOT-overwrite-style.

Используйте тесты test-gcc-security.py.

Сборка с BIND_NOW

Помечает ELF программы для разрешения динамических символов на этапе старта, вместо по требованию (on-demand), так же известное как "immediate binding".

Это делает GOT полностью доступной только для чтения, в сочетании с параметром RELRO.

Используйте тесты test-built-binaries.py.

Non-Executable Memory

Современные процессоры защищают от исполнения кода области памяти данных (кучу, стек).

Эта технология известна как Non-eXecute (NX) или eXecute-Disable (XD). Защита уменьшает возможности злоумышленника по размещению произвольного кода.

Защита требует "PAE", которая так же позволяет адресовать выше 3 Гб ОЗУ. 64битные и 32битные -server и -generic-pae ядра уже собраны с PAE.

Начиная с Ubuntu 9.10, защита частично эмулируется на 32битных ядрах для процессоров, которые не поддерживают аппаратно NX.

После загрузки можно увидеть степень поддержки NX защиты:

  • Аппаратная: [ 0.000000] NX (Execute Disable) protection: active
  • Эмуляция:
    [ 0.000000] Using x86 segment limits to approximate NX protection

Если вы не видите упоминаний о NX, то проверьте свои BIOS настройки. Начиная с Ubuntu 11.04, BIOS настройки для NX игнорируются ядром.

Ubuntu 9.04 и ранее
CPU поддерживает NX CPU не поддерживает NX
В BIOS включён NX В BIOS отключён NX
i386 -386, -generic ядро (non-PAE) nx не поддерживается nx не поддерживается nx не поддерживается
-server ядро (PAE) настоящий nx nx не поддерживается nx не поддерживается
amd64 любое ядро (PAE) настоящий nx nx не поддерживается nx не поддерживается

Используйте тесты test-kernel-security.py.

Защита /proc/$pid/maps

Когда работает ASLR, текущие карты памяти процессов становятся очень ценными для атакующего. Файл карт доступен на чтение только самому процессу и владельцу процесса.

Доступно, начиная с ядра 2.6.22.

Используйте тесты test-kernel-security.py.

Ограничения символьных ссылок

Наиболее распространённый способ использования данного дефекта, вынудить root"а использовать символьную ссылку, созданную злоумышленником, чтобы с правами root выполнить злонамеренное действие.

Начиная с Ubuntu 10.10, по символическим ссылкам в каталогах типа /tmp нельзя пройти, если "идущий по ссылке" и владелец каталога не совпадают с владельцем символической ссылки.

Данный механизм контролируется механизмом Yama /proc/sys/kernel/yama/protected_sticky_symlinks. Yama разработана в Canonical.

Используйте тесты test-kernel-security.py.

Ограничения жёстких ссылок

Если /etc/ и /home/ каталоги располагаются на одном разделе, обычный пользователь может создать жёсткую ссылку на файл с хешами паролей /etc/shadow в своей домашней папке. Разумеется, если некоторый файл недоступен на чтение либо запись для какого-либо пользователя, жесткая ссылка на данный файл будет иметь те же права и поэтому также будет недоступна этому пользователю. Однако, используя жесткие ссылки, злоумышленник может "подсунуть" такой файл приложению, которое имеет права на доступ к нему.

Yama позволяет заблокировать эту атаку, запретив создание жестких ссылок пользователям, не имеющим прав на доступ к исходным файлам.

Поведение контролируется /proc/sys/kernel/yama/protected_nonaccess_hardlinks Yama.

ptrace scope

Без использования соответствующей защиты Yama, любой процесс с привилегией CAP_SYS_PTRACE может обращаться к памяти всех процессов с тем же UID"ом. При использовании Yama, можно ограничить область доступа только памятью, принадлежащей потомкам такого процесса.

В Ubuntu 10.10 и старше, пользователи не могут отлаживать процессы с помощью ptrace, если они не его потомки.

Поведение контролируется /proc/sys/kernel/yama/ptrace_scope Yama.

Используйте тесты test-kernel-security.py.

Усиление защиты ядра

Включённые защитные механизмы ядра для усложнения атак.

Защита 0-address

Так как ядро и пользовательское пространство делят виртуальные адреса памяти, "NULL" память должна быть защищена и "пользовательская" память не может начинаться с адреса 0, тем самым предотвращая разыменование адресов ядра - атака "NULL dereference".

Защита доступна с ядра 2.6.22 через параметр sysctl "mmap_min_addr". С Ubuntu 9.04 mmap_min_addr встроен в ядро - адрес 64k для x86, 32k для ARM.

Используйте тесты test-kernel-security.py.

Защита /dev/mem

Некоторым приложениям, типа Xorg, требуется прямой доступ к физической памяти в пользовательском пространстве. Специальный файл /dev/mem обеспечивает такой доступ.

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

Опция CONFIG_STRICT_DEVMEM была введена, чтобы блокировать такие попытки (первоначально опция назвалась CONFIG_NONPROMISC_DEVMEM).

Используйте тесты test-kernel-security.py.

Отключён /dev/kmem

Для современного пользователя /dev/kmem не актуален, так как в большинстве своём использовался злоумышленниками для загрузки руткитов.

Теперь CONFIG_DEVKMEM установлен "n".

Файл /dev/kmem существует в релизах от Ubuntu 8.04 LTS до Ubuntu 9.04, но в ядре ни с чем не был связан и не используется.

Используйте тесты test-kernel-security.py.

Блокировка загрузки модулей

В Ubuntu 8.04 LTS и ранее, можно было удалить возможность CAP_SYS_MODULES и тем самым запретить загрузку новых модулей ядра.

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

В ядре 2.6.25 (Ubuntu 8.10) этот функционал исчез. Начиная с Ubuntu 9.10, теперь снова можно блокировать модули, установив в "1" /proc/sys/kernel/modules_disabled.

Используйте тесты test-kernel-security.py.

Секция данных только для чтения

Пометка секции данных ядра меткой "только для чтения" гарантирует блокировку изменений. Это помогает защититься от некоторых руткитов. Включается через опцию CONFIG_DEBUG_RODATA.

Используйте тесты test-kernel-security.py.

Защита стека ядра

Как и защита ELF программ в пользовательском пространстве, ядро может защитить свой внутренний стек через параметр CONFIG_CC_STACKPROTECTOR.

Используйте тесты test-kernel-security.py.

Модуль RO/NX

Эта возможность расширяет CONFIG_DEBUG_RODATA, включая ограничения для загруженных модулей ядра. Это помогает противостоять эксплойтам. Включается через параметр CONFIG_DEBUG_MODULE_RONX.

Используйте тесты test-kernel-security.py.

Kernel Address Display Restriction

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

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

Начиная с Ubuntu 11.04, /proc/sys/kernel/kptr_restrict выставлен в "1" и блокирует утечки информации об адресах ядра.

Кроме того, различные файлы и каталоги сделаны для чтения только для root
/boot/vmlinuz*, /boot/System.map*, /sys/kernel/debug/, /proc/slabinfo

Используйте тесты test-kernel-security.py.

Чёрных список редких протоколов

Обычно ядро позволяет всем сетевым протоколам автоматически загружаться по требованию через MODULE_ALIAS_NETPROTO(PF_...) макросы.

Поскольку многие из этих протоколов устаревшие, редкостные, да и малопригодные для обычного пользователя Ubuntu и могут содержать неизвестные уязвимости, то они в чёрном списке, начиная с Ubuntu 11.04.

В чёрном списке: ax25, netrom, x25, rose, decnet, econet, rds и af_802154.

Если любой из этих протоколов нужен, то может быть загружен через modprobe или редактируя /etc/modprobe.d/blacklist-rare-network.conf.

Используйте тесты test-kernel-security.py.

Фильтрация системных вызовов

Программы могут фильтровать вызовы ядра, используя seccomp_filter.

Это делается в контейнерах или песочницах, чтобы ещё больше ограничить потенциально ненадёжное ПО.

Используйте тесты test-kernel-security.py.

Итог

После прочитанного, видно, что в Canonical к безопасности Ubuntu относятся серьёзно . Два проекта, AppArmor и Yama, уже давно связаны с Ubuntu и помогают усилить защиту. Ubuntu по умолчанию не открывает лишние порты-двери в сети и не ждёт подключений-приключений на свою голову. Для ключевых программ, работающих с сетью, созданы профили AppArmor, которые держат программы в узде.

Ваш компьютер будет в безопасности с Ubuntu!

Установка и настройка инструментов администрирования, настройка сети

После того как мы установили базовую операционную систему ubuntu14.04 с минимального дистрибутива, первым делом нужно озаботится тем как ей комфортно управлять. В основном для конфигурирования и управления серверами на базе *nix используют ssh/telnet, но в последнее время для этого также появились вполне годные инструменты на базе web-интерфейсов. Я использую бесплатные решения Webmin и Ajenti . Oбе эти панели заслуживают внимания и не смотря на то что они по отдельности могут всё, для чего-то каждая из них подходит лучше, по этому лучше иметь их обе. Я должен заметить, что на боевых продакшн-серверах подобные решения не ставят исходя из безопасности. Всё-таки чем больше управляющих систем, тем больше вероятность найти в них уязвимость. По этому если ваши требования безопасности находятся на уровне «паранойя», то просто примите тот факт, что вам придётся работать с сервером только через ssh (через консоль).

Настройка сети в ubuntu 14.04

Чтобы связываться с нашим сервером по сети, для начала её нужно настроить. По умолчанию, при установке сеть настроилась автоматически и если инсталлятор обнаружил в сети DHCP-сервер, то скорее всего он уже настроил всё как нужно. Если в сети нет DHCP-сервера, то установщик всё равно настроил всё исходя из опроса маршрутизатора к которому подключена сетевая карта. Для того что-бы посмотреть, каким образом сейчас настроена сеть, достаточно в терминале набрать:

Что же мы тут видим:

У нас два сетевых интерфейса eth0 и lo где lo — это «интерфейс обратной петли loopback» а eth0 — это имя нашей сетевой карточки, и если lo — это неизменный сетевой интерфейс, то все остальные интерфейсы могут отличатся по имени. Если в системном блоке установлены две сетевые карты то их интерфейсы скорее всего будут выглядеть как eth0 и eth1 и так далее. Вид имени интерфейса зависит от типа сетевой карты, так например если сетевая карта работает по протоколу WiFi то скорее всего имя у неё будет wlan0.

Что-бы настроить сеть, отредактируем следующий файл:

sudo nano /etc/network/interfaces

Приведём его к такому виду:

iface eth0 inet static
address 192.168.0.184
netmask 255.255.255.0
gateway 192.168.0.1
auto eth0
dns-nameservers 8.8.8.8 8.8.4.4

Где: iface eth0 inet static — указывает, что интерфейс (iface eth0) находится в диапазоне адресов IPv4 (inet) со статическим ip (static);
address 192.168.0.184 — указывает что IP адрес (address) нашей сетевой карты 192.168.0.184;
netmask 255.255.255.0 — указывает что наша маска подсети (netmask) имеет значение 255.255.255.0;
gateway 192.168.0.1 — адрес шлюза (gateway) по умолчанию 192.168.0.254;
auto eth0 — указывет системе что интерфейс eth0 необходимо включать автоматически при загрузке системы с вышеуказанными параметрами.
eth0 — имя подключаемого своего интерфейса. Список интерфейсов можно посмотреть набрав ifconfig
dns-nameservers — DNS-сервера, пишутся через пробел.

Как видно в моём случае я решил задать статический ip 192.168.0.184

перезагружаем сервер командой

Пингуем наш сервер из сети и убеждаемся что он виден. Теперь пришла пора установить с ним связь по SSH, для этого собственно установим ssh-сервер:

sudo apt-get install ssh

Теперь можно подключится к нашему серверу по ssh через программу putty например, теперь можно вводить команды не в ручную, а копируя и вставляя нужные нам строки в клиент ssh, ибо в дальнейшем это удивительно облегчит настройку, в чём вы вскоре убедитесь сами:

ВСЕ КОМАНДЫ НИЖЕ ЭТОЙ СТРОЧКИ ВВОДЯТСЯ ОТ ИМЕНИ СУПЕРПОЛЬЗОВАТЕЛЯ , а для того что-бы войти в режим суперпользователя, нужно набрать:

Установка webmin

echo "deb https://download.webmin.com/download/repository sarge contrib" >> /etc/apt/sources.list echo "deb https://webmin.mirror.somersettechsolutions.co.uk/repository sarge contrib" >> /etc/apt/sources.list wget https://www.webmin.com/jcameron-key.asc apt-key add jcameron-key.asc apt-get update apt-get install -y webmin

echo "deb https://download.webmin.com/download/repository sarge contrib" >>

echo "deb https://webmin.mirror.somersettechsolutions.co.uk/repository sarge contrib" >> / etc / apt / sources . list

wget https : //www.webmin.com/jcameron-key.asc

apt - key add jcameron - key . asc

apt - get update

apt - get install - y webmin

Всё! 6 последовательно введённых команд и webmin установлен и настроен. Теперь можно зайти через браузер по адресу:

https://192.168.0.184:10000

По умолчанию webmin выглядит минималистично, интерфейс по умолчанию отображается на английском языке, но всё настраивается!

Делаем вот так:

Получается вот так:

mob_info