→ Настройка сетевой безопасности в ubuntu. Гайд по обеспечению безопасности Linux-системы

Настройка сетевой безопасности в ubuntu. Гайд по обеспечению безопасности Linux-системы

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

Существует множество видов подключений к интернету, но в этой статье будут рассмотрены самые популярные: проводная сеть, PPPoE и DIAL-UP. Также будет рассказано про отдельную настройку DNS-сервера.

Подготовительные мероприятия

Перед тем как приступать к установке соединения, стоит убедиться, что ваша система готова к этому. Сразу же надо уточнить, что команды, выполняемые в «Терминале» , делятся на два вида: требующие права пользователя (перед ними будет стоять символ $ ) и требующие права суперпользователя (в начале стоит символ # ). Обращайте на это внимание, так как без нужных прав большинство команд попросту откажутся выполняться. Также стоит уточнить, что сами символы в «Терминал» вписывать не нужно.

Вам необходимо будет выполнить ряд пунктов:


Помимо прочего, нужно обязательно знать наименование сетевого адаптера. Чтобы это выяснить, введите в «Терминале» эту строку:

$ sudo lshw -C network

По итогу вы увидите примерно следующее:

Имя вашего сетевого адаптера будет располагаться напротив слова «логическое имя» . В данном случае «enp3s0» . Именно это название и будет фигурировать в статье, у вас оно может быть другим.

Примечание: если в вашем компьютере установлено несколько сетевых адаптеров, то они будут пронумерованы соответственно (enp3s0, enp3s1, enp3s2 и так далее). Определитесь, с каким вы будете работать, и используйте его в последующих настройках.

Способ 1: Терминал

«Терминал» — это универсальное средство по настройке всего в Ubuntu. С его помощью можно будет установить интернет-соединение всех типов, о чем и пойдет сейчас речь.

Настройка проводной сети

Настройка проводной сети в Ubuntu выполняется путем внесения новых параметров в конфигурационный файл «interfaces» . Поэтому для начала нужно открыть этот самый файл:

Примечание: в команде для открытия файла настройки используется текстовый редактор Gedit, вы же можете прописать в соответствующей части любой другой редактор, например, vi.

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

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

iface [имя интерфейса] inet dhcp
auto [имя интерфейса]

  • iface [имя интерфейса] inet dhcp - ссылается на выбранный интерфейс, который имеет динамический IP-адрес (dhcp);
  • auto [имя интерфейса] - при входе в систему делает автоматическое подключение к указанному интерфейсу со всеми заданными параметрами.

После ввода у вас должно получиться примерно так:

Статический IP настраивать несколько сложнее. Главное - знать все переменные. В конфигурационном файле вам нужно ввести следующие строки:

iface [имя интерфейса] inet static
address [адрес]
netmask [адрес]
gateway [адрес]
dns-nameservers [адрес]
auto [имя интерфейса]


После ввода всех параметров вы увидите примерно следующее:

Не забудьте перед закрытием текстового редактора сохранить все внесенные параметры.

Помимо прочего, в ОС Ubuntu можно совершить временную настройку подключения к интернету. Отличается она тем, что указанные данные никак не изменяют конфигурационные файлы, а после перезапуска ПК все ранее указанные настройки сбросятся. Если вы впервые пытаетесь установить проводное соединение на Ubuntu, то для начала рекомендуется использовать этот способ.

Все параметры задаются с помощью одной команды:

$ sudo ip addr add 10.2.119.116/24 dev enp3s0

  • 10.2.119.116 - IP-адрес сетевой карты (у вас он может быть другим);
  • /24 - количество бит в префиксной части адреса;
  • enp3s0 - интерфейс сети, к которой подключен кабель провайдера.

Введя все необходимые данные и выполнив команду в «Терминале» , вы сможете проверить их корректность. Если интернет на ПК появился, то все переменные верны, и их можно вносить в конфигурационный файл.

Настройка DNS

Настройка DNS-подключения в разных версиях Ubuntu выполняется по-разному. В версиях ОС начиная с 12.04 — один способ, в более ранних — другой. Рассматривать мы будем только статический интерфейс подключения, так как динамический подразумевает автоматическое определение DNS-серверов.

Настройка в версиях ОС выше 12.04 происходит в уже известном файле «interfaces» . В нем необходимо ввести строку «dns-nameservers» и через пробел перечислить значения.

Итак, сначала откройте через «Терминал» конфигурационный файл «interfaces» :

$ sudo gedit /etc/network/interfaces

dns-nameservers [адрес]

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

Если вы хотите настроить DNS в Ubuntu более ранней версии, то конфигурационный файл будет другим. Откроем его через «Терминал» :

$ sudo gedit /etc/resolv.conf

После в нем можно задать необходимые адреса DNS. Стоит взять в учет то, что в отличии от ввода параметров в «interfaces» , в «resolv.conf» адреса пишутся каждый раз с абзаца, перед значением используется префикс «nameserver» (без кавычек).

Настройка соединения PPPoE

Настройка PPPoE через «Терминал» не подразумевает внесение множества параметров в различные конфигурационные файлы на компьютере. Наоборот, использована будет всего одна команда.

Итак, чтобы совершить подключение типа «точка-точка» (PPPoE), вам необходимо выполнить следующие действия:


После всех проделанных действий ваш компьютер установит соединение с интернетом, если вы все сделали верно.

Обратите внимание, что по умолчанию утилита pppoeconf называет созданное подключение dsl-provider . Если вам нужно будет разорвать соединение, то выполните в «Терминале» команду:

$ sudo poff dsl-provider

Чтобы соединение установилось снова, введите:

$ sudo pon dsl-provider

Примечание: если вы подключаетесь к сети, используя утилиту pppoeconf, то управление сетью через Network Manager будет невозможным, ввиду внесения параметров в конфигурационный файл «interfaces». Чтобы сбросить все настройки и передать управление Network Manager, вам необходимо открыть файл «interfaces» и заменить все содержимое на текст, указанный ниже. После ввода сохраните изменения и перезапустите сеть командой «$ sudo /etc/init.d/networking restart» (без кавычек). Также перезапустите утилиту Network Manager, выполнив «$ sudo /etc/init.d/NetworkManager restart» (без кавычек).

Настройка соединения DIAL-UP

Чтобы совершить настройку DIAL-UP, можно воспользоваться двумя консольными утилитами: pppconfig и wvdial .

Настроить подключение с помощью pppconfig достаточно просто. В целом данный способ очень похож на предыдущий (pppoeconf ): вам точно так же будут заданы вопросы, отвечая на которые по итогу вы установите соединение с интернетом. Сперва запустите саму утилиту:

$ sudo pppconfig

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

Что касается настройки с помощью wvdial , то она происходит немного сложнее. Для начала необходимо установить сам пакет через «Терминал» . Для этого выполните следующую команду:

$ sudo apt install wvdial

В его состав входит утилита, предназначенная для автоматической конфигурации всех параметров. Называется она «wvdialconf» . Запустите ее:

$ sudo wvdialconf

После ее выполнения в «Терминале» будет отображено множество параметров и характеристик — в них разбираться не нужно. Следует лишь знать, что утилита создала специальный файл «wvdial.conf» , в который автоматически внесла необходимые параметры, считав их с модема. Далее надо отредактировать созданный файл «wvdial.conf» , откроем его через «Терминал» :

$ sudo gedit /etc/wvdial.conf

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

  • Idle Seconds = 0 - соединение не будет разорвано даже при долгом бездействии за компьютером;
  • Dial Attempts = 0 - совершает бесконечные попытки установить соединение;
  • Dial Command = ATDP - набор номера будет осуществляться импульсным способом.

По итогу файл конфигураций будет иметь такой вид:

Обратите внимание, что настройки разбиты на два блока, озаглавленные названиями в скобках. Это необходимо для создания двух версий использования параметров. Так, параметры, находящиеся под «» , будут выполняться всегда, а под «» — при указании соответствующей опции в команде.

После проведения всех настроек, чтобы установить соединение DIAL-UP, вам необходимо выполнить эту команду:

Если же вы хотите установить импульсное соединение, то пропишите следующее:

$ sudo wvdial pulse

Для того чтобы разорвать установленное соединение, в «Терминале» нужно нажать комбинацию клавиш Ctrl+C .

Способ 2: Network Manager

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

Настройка проводной сети

Начнем мы точно так же с настройки проводной сети. Для начала необходимо открыть саму утилиту. Для этого кликните по ее иконке и нажмите «Изменить соединения» в контекстном меню. Далее в появившемся окне нужно сделать следующее:


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

Настройка DNS

Для установки соединения может понадобиться ручная настройка DNS-серверов. Для этого выполните следующее:


Настройка PPPoE

Настройка соединения по протоколу PPPoE в Network Manager выполняется так же просто, как и в «Терминале» . По сути, вам надо будет указать только логин и пароль, полученные от провайдера. Но рассмотрим все более детальней.


Теперь в меню Network Manager появилось новое DSL-соединение, выбрав которое вы получите доступ в интернет. Напомним, что иногда нужно перезагрузить компьютер, чтобы изменения вступили в силу.

Заключение

По итогу можно сказать, что в операционной системе Ubuntu есть множество инструментов, для осуществления настройки необходимого интернет-соединения. Утилита Network Manager обладает графическим интерфейсом, что в разы упрощает работу, особенно для новичков. Однако «Терминал» позволяет осуществить более гибкую настройку, вводя те параметры, которых в утилите нет.

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

Мы решили начать цикл статей посвященных сетевой безопасности с Ubuntu Server, так как решения на данной платформе вызывают большой интерес у наших читателей и так как многие считают, что Linux решения безопасны сами по себе.

В тоже время роутер с выделенным IP-адресом является "воротами" к локальной сети и только от администратора будет зависеть будут эти ворота надежной преградой или окажутся дачной калиткой закрытой на гвоздик.

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

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

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

С чего начинается безопасность?

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

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

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

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

К опасной зоне следует отнести устройства непосредственно доступные извне, в идеальном случае это должен быть один роутер.

По возможности потенциально опасную зону следует вынести в отдельную подсеть - демилитаризованную зону (DMZ), которая отделена от основной сети дополнительным брандмауэром.

Устройства локальной сети должны иметь доступ только к тем службам в DMZ, которые им необходимы, например SMTP, POP3, HTTP, остальные соединения должны блокироваться. Это позволит надежно изолировать злоумышленника или вредоносное ПО, воспользовавшихся уязвимостью в отдельном сервисе, демилитаризованной зоной, закрыв им доступ к основной сети.

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

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

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

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

Неплохо завести практику менять пароли раз в 30-40 дней. Понятно, что подобная политика способна вызвать неприятие со стороны пользователей, но вы должны всегда помнить, что пароли типа 123 или qwerty равносильны ключу оставленному под ковриком.

Безопасность сервера - ничего лишнего.

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

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

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

Хорошим помощником в деле обеспечения безопасности будет сканер уязвимостей, которым следует просканировать внешний интерфейс сервера. Мы использовали демо-версию одного из самых известных продуктов - XSpider 7.7.

Сканер показывает открытые порты, пытается определить тип работающей службы и, если это удалось, уязвимости для нее. Как видим - правильно сконфигурированная система вполне безопасна, однако не стоит оставлять ключ под ковриком, наличие на роутере открытых портов 1723 (VPN) и 3389 (RDP, проброшен на терминальный сервер) хороший повод подумать о политике паролей.

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

PermitRootLogin no

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

Стоит явно указать список разрешенных пользователей, при этом можно использовать записи типа user@host , которая разрешает указанному пользователю подключаться только с указанного хоста. Например чтобы разрешить пользователю ivanov подключаться из дома (IP 1.2.3.4) следует добавить следующую запись:

AllowUser [email protected]

Также запретите использование устаревшего и менее безопасного протокола SSH1, разрешив только вторую версию протокола, для этого приведите следующую строку к виду:

Protocol 2

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

Sudo apt-get install fail2ban

Данная утилита готова к работе сразу после установки, однако мы бы советовали сразу изменить некоторые параметры, для этого внесите изменения в файл /etc/fail2ban/jail.conf . По умолчанию контролируется только доступ к SSH и время бана составляет 10 минут (600 секунд), на наш взгляд стоит его увеличить, изменив следующую опцию:

Bantime = 6000

После чего пролистайте файл и включите секции для работающих в вашей системе служб, установив после имени соответствующей секции параметр enabled в состояние true , например для службы proftpd это будет выглядеть так:


enabled = true

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

Sudo /etc/init.d/fail2ban restart

Лог работы утилиты вы можете посмотреть в /var/log/fail2ban.log .

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

Введение

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

Когда я потерял смартфон, мне сильно повезло, что установленный на него антивор оказался работоспособным и позволил удаленно стереть все данные из памяти девайса. Когда я по невнимательности открыл SSH-порт на домашней машине с юзером без пароля (!) во внешний мир (!!), мне сильно повезло, что на машину пробрались скрипт-кидди, которые кроме смешной истории шелла не оставили никаких серьезных следов своего пребывания в системе. Когда я случайно опубликовал в интернете листинг со своим паролем от Gmail, мне сильно повезло, что нашелся добрый человек, который предупредил меня об этом.

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

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

Пароль!

Все начинается с паролей. Они везде: в окне логина в Linux-дистрибутиве, в формах регистрации на интернет-сайтах, на FTP- и SSH-серверах и на экране блокировки смартфона. Стандарт для паролей сегодня - это 8–12 символов в разном регистре с включением цифр. Генерировать такие пароли своим собственным умом довольно утомительно, но есть простой способ сделать это автоматически:

$ openssl rand -base64 6

Никаких внешних приложений, никаких расширений для веб-браузеров, OpenSSL есть на любой машине. Хотя, если кому-то будет удобней, он может установить и использовать для этих целей pwgen (поговаривают, пароль получится более стойким):

$ pwgen -Bs 8 1

Где хранить пароли? Сегодня у каждого юзера их так много, что хранить все в голове просто невозможно. Довериться системе автосохранения браузера? Можно, но кто знает, как Google или Mozilla будет к ним относиться. Сноуден рассказывал, что не очень хорошо. Поэтому пароли надо хранить на самой машине в зашифрованном контейнере. Отцы-основатели рекомендуют использовать для этого KeePassX. Штука графическая, что не сильно нравится самим отцам-основателям, но зато работает везде, включая известный гугль-зонд Android (KeePassDroid). Останется лишь перекинуть базу с паролями куда надо.

Шифруемся

Шифрование - как много в этом слове... Сегодня шифрование везде и нигде одновременно. Нас заставляют пользоваться HTTPS-версиями сайтов, а нам все равно. Нам говорят: «Шифруй домашний каталог», а мы говорим: «Потом настрою». Нам говорят: «Любимое занятие сотрудников Dropbox - это ржать над личными фотками юзеров», а мы: «Пусть ржут». Между тем шифрование - это единственное абсолютное средство защиты на сегодняшний день. А еще оно очень доступно и сглаживает морщины.

В Linux можно найти тонны средств шифрования всего и вся, от разделов на жестком диске до одиночных файлов. Три наиболее известных и проверенных временем инструмента - это dm-crypt/LUKS, ecryptfs и encfs. Первый шифрует целые диски и разделы, второй и третий - каталоги с важной информацией, каждый файл в отдельности, что очень удобно, если потребуется делать инкрементальные бэкапы или использовать в связке с Dropbox. Также есть несколько менее известных инструментов, включая TrueCrypt например.

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

$ sudo apt-get install ecryptfs-utils

И, собственно, включить шифрование:

$ sudo ecryptfs-setup-swap $ ecryptfs-setup-private

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

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

# ecryptfs-migrate-home -u vasya

Кстати, места на диске должно быть в 2,5 раза больше, чем данных у vasya, так что рекомендую заранее почиститься. После завершения операции следует сразу войти под юзером vasya и проверить работоспособность:

$ mount | grep Private /home/vasya/.Private on /home/vasya type ecryptfs ...

Если все ок, незашифрованную копию данных можно затереть:

$ sudo rm -r /home/vasya.*

Заметаем следы

ОK, пароли в надежном месте, личные файлы тоже, что теперь? А теперь мы должны позаботиться о том, чтобы какие-то куски наших личных данных не попали в чужие руки. Ни для кого не секрет, что при удалении файла его актуальное содержимое остается на носителе даже в том случае, если после этого произвести форматирование. Наши зашифрованные данные будут в сохранности даже после стирания, но как быть с флешками и прочими картами памяти? Здесь нам пригодится утилита srm, которая не просто удаляет файл, но и заполняет оставшиеся после него блоки данных мусором:

$ sudo apt-get install secure-delete $ srm секретный-файл.txt home-video.mpg

# dd if=/dev/zero of=/dev/sdb

Эта команда сотрет все данные на флешке sdb. Далее останется создать таблицу разделов (с одним разделом) и отформатировать в нужную ФС. Использовать для этого рекомендуется fdisk и mkfs.vfat, но можно обойтись и графическим gparted.

Предотвращение BruteForce-атак

Fail2ban - демон, который просматривает логи на предмет попыток подобрать пароли к сетевым сервисам. Если такие попытки найдены, то подозрительный IP-адрес блокируется средствами iptables или TCP Wrappers. Сервис способен оповещать владельца хоста об инциденте по email и сбрасывать блокировку через заданное время. Изначально Fail2ban разрабатывался для защиты SSH, сегодня предлагаются готовые примеры для Apache, lighttpd, Postfix, exim, Cyrus IMAP, named и так далее. Причем один процесс Fail2ban может защищать сразу несколько сервисов.

В Ubuntu/Debian для установки набираем:

# apt-get install fail2ban

Конфиги находятся в каталоге /etc/fail2ban. После изменения конфигурации следует перезапускать fail2ban командой:

# /etc/init.d/fail2ban restart

Угроза извне

Теперь позаботимся об угрозах, исходящих из недр всемирной паутины. Здесь я должен был бы начать рассказ об iptables и pf, запущенном на выделенной машине под управлением OpenBSD, но все это излишне, когда есть ipkungfu. Что это такое? Это скрипт, который произведет за нас всю грязную работу по конфигурированию брандмауэра, без необходимости составлять километровые списки правил. Устанавливаем:

$ sudo apt-get install ipkungfu

Правим конфиг:

$ sudo vi /etc/ipkungfu/ipkungfu.conf # Локальная сеть, если есть - пишем адрес сети вместе с маской, нет - пишем loopback-адрес LOCAL_NET="127.0.0.1" # Наша машина не является шлюзом GATEWAY=0 # Закрываем нужные порты FORBIDDEN_PORTS="135 137 139" # Блокируем пинги, 90% киддисов отвалится на этом этапе BLOCK_PINGS=1 # Дропаем подозрительные пакеты (разного рода флуд) SUSPECT="DROP" # Дропаем «неправильные» пакеты (некоторые типы DoS) KNOWN_BAD="DROP" # Сканирование портов? В трэш! PORT_SCAN="DROP"

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

$ sudo ipkungfu

Дополнительно внесем правки в /etc/sysctl.conf:

$ sudo vi /etc/systcl.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

Выявляем вторжения

Snort - один из любимейших инструментов админов и главный фигурант всех руководств по безопасности. Штука с долгой историей и колоссальными возможностями, которой посвящены целые книги. Что он делает в нашем гайде по быстрой настройке безопасной системы? А здесь ему самое место, Snort можно и не конфигурировать:

$ sudo apt-get install snort $ snort -D

Все! Я не шучу, стандартных настроек Snort более чем достаточно для защиты типовых сетевых сервисов, если, конечно, они у тебя есть. Нужно только время от времени просматривать лог. А в нем можно обнаружить строки типа этих:

[**] MS-SQL probe response overflow attempt [**] http://www.securityfocus.com/bid/9407]

Упс. Кто-то пытался вызвать переполнение буфера в MySQL. Тут сразу есть и ссылочка на страницу с детальным описанием проблемы. Красота.

Кто-то наследил…

Кто-то особенно умный смог обойти наш брандмауэр, пройти мимо Snort, получить права root в системе и теперь ходит в систему регулярно, используя установленный бэкдор. Нехорошо, бэкдор надо найти, удалить, а систему обновить. Для поиска руткитов и бэкдоров используем rkhunter:

$ sudo apt-get install rkhunter

Запускаем:

$ sudo rkhunter -c --sk

Софтина проверит всю систему на наличие руткитов и выведет на экран результаты. Если зловред все-таки найдется, rkhunter укажет на место и его можно будет затереть. Более детальный лог располагается здесь: /var/log/rkhunter.log. Запускать rkhunter лучше в качестве cron-задания ежедневно:

$ sudo vi /etc/cron.daily/rkhunter.sh #!/bin/bash /usr/bin/rkhunter -c --cronjob 2>&1 | mail -s "RKhunter Scan Results" [email protected]

Заменяем email-адрес Васи на свой и делаем скрипт исполняемым:

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

$ sudo rkhunter --update

Ее, кстати, можно добавить перед командой проверки в cron-сценарий. Еще два инструмента поиска руткитов:

$ sudo apt-get install tiger $ sudo tiger $ sudo apt-get install lynis $ sudo lynis -c

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

$ sudo apt-get install debsums

Запускаем проверку:

$ sudo debsums -ac

Как всегда? запуск можно добавить в задания cron.



За пределами

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

Чтобы спокойно ходить по сайтам и только в случае необходимости включать прокси, можно воспользоваться одним из множества расширений для Chrome и Firefox, которые легко находятся в каталоге по запросу proxy switcher. Устанавливаем, вбиваем список нужных прокси и переключаемся на нужный, увидев вместо страницы табличку «Доступ к странице ограничен по требованию господина Скумбриевича».

В тех ситуациях, когда под фильтр попал весь сайт и его адрес внесли в черный список на стороне DNS-серверов провайдеров, можно воспользоваться свободными DNS-серверами, адреса которых опубликованы . Просто берем два любых понравившихся адреса и добавляем в /etc/resolv.conf:

Nameserver 156.154.70.22 nameserver 156.154.71.22

Чтобы разного рода DHCP-клиенты и NetworkManager’ы не перезаписали файл адресами, полученными от провайдера или роутера, делаем файл неперезаписываемым с помощью расширенных атрибутов:

$ sudo chattr +i /etc/resolv.conf

После этого файл станет защищен от записи для всех, включая root.

Чтобы еще более анонимизировать свое пребывание в Сети, можно воспользоваться также демоном dnscrypt, который будет шифровать все запросы к DNS-серверу в дополнение к прокси-серверу, используемому для соединения с самим сайтом. Устанавливаем:

$ wget http://download.dnscrypt.org/dnscrypt-proxy/dnscrypt-proxy-1.3.2.tar.bz2 $ bunzip2 -cd dnscrypt-proxy-*.tar.bz2 | tar xvf - $ cd dnscrypt-proxy-* $ sudo apt-get install build-essential $ ./configure && make -j2 $ sudo make install

Указываем в /etc/resolv.conf loopback-адрес:

$ vi /etc/resolv.conf nameserver 127.0.0.1

Запускаем демон:

$ sudo dnscrypt-proxy --daemonize

Кстати, версии dnscrypt есть для Windows, iOS и Android.

Луковая маршрутизация

Что такое луковая маршрутизация? Это Tor. А Tor, в свою очередь, - это система, которая позволяет создать полностью анонимную сеть с выходом в интернет. Термин «луковый» здесь применен относительно модели работы, при которой любой сетевой пакет будет «обернут» в три слоя шифрования и пройдет на пути к адресату через три ноды, каждая из которых будет снимать свой слой и передавать результат дальше. Все, конечно, сложнее, но для нас важно только то, что это один из немногих типов организации сети, который позволяет сохранить полную анонимность.

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

Тем не менее Tor очень легко установить и использовать:

$ sudo apt-get install tor

Все, теперь на локальной машине будет прокси-сервер, ведущий в сеть Tor. Адрес: 127.0.0.1:9050, вбить в браузер можно с помощью все того же расширения, ну или добавить через настройки. Имей в виду, что это SOCKS, а не HTTP-прокси.


INFO

Версия Tor для Android называется Orbot.

Чтобы введенный в командной строке пароль не был сохранен в истории, можно использовать хитрый трюк под названием «добавь в начале команды пробел».

Именно ecryptfs используется для шифрования домашнего каталога в Ubuntu.

Борьба с флудом

Приведу несколько команд, которые могут помочь при флуде твоего хоста.

Подсчет количества коннектов на определенный порт:

$ netstat -na | grep ":порт\ " | wc -l

Подсчет числа «полуоткрытых» TCP-соединений:

$ netstat -na | grep ":порт\ " | grep SYN_RCVD | wc -l

Просмотр списка IP-адресов, с которых идут запросы на подключение:

$ netstat -na | grep ":порт\ " | sort | uniq -c | sort -nr | less

Анализ подозрительных пакетов с помощью tcpdump:

# tcpdump -n -i eth0 -s 0 -w output.txt dst port порт and host IP-сервера

Дропаем подключения атакующего:

# iptables -A INPUT -s IP-атакующего -p tcp --destination-port порт -j DROP

Ограничиваем максимальное число «полуоткрытых» соединений с одного IP к конкретному порту:

# iptables -I INPUT -p tcp --syn --dport порт -m iplimit --iplimit-above 10 -j DROP

Отключаем ответы на запросы ICMP ECHO:

# iptables -A INPUT -p icmp -j DROP --icmp-type 8

Выводы

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

По данным cvedetails.com, с 1999 года в ядре Linux найдено 1305 уязвимостей, из которых 68 - в 2015-м. Большинство из них не несут особых проблем, помечены как Local и Low, а некоторые можно вызвать только с привязкой к определенным приложениям или настройкам ОС. В принципе, цифры небольшие, но ядро - это не вся ОС. Уязвимости находят и в GNU Coreutils, Binutils, glibs и, конечно же, в пользовательских приложениях. Разберем самые интересные.

УЯЗВИМОСТИ В ЯДРЕ LINUX

ОС: Linux
Уровень: Medium, Low
Вектор: Remote
CVE: CVE-2015-3331, CVE-2015-4001, CVE-2015-4002, CVE-2015-4003
Exploit: концепт, https://lkml.org/lkml/2015/5/13/740 , https://lkml.org/lkml/2015/5/13/744

Уязвимость, найденная в июне в ядре Linux до 3.19.3, в функции __driver_rfc4106_decrypt в файле arch/x86/crypto/aesni-intel_glue.c связана с тем, что реализация RFC4106 для процессоров x86, поддерживающих расширение системы команд AES AES-NI (предложена Intel, Intel Advanced Encryption Standard Instructions), в некоторых случаях неправильно вычисляет адреса буферов. Если IPsec-туннель настроен на использование этого режима (алгоритм AES - CONFIG_CRYPTO_AES_NI_INTEL), уязвимость может приводить к повреждению содержимого памяти, аварийным остановкам и потенциально к удаленному выполнению кода CryptoAPI. Причем самое интересное, что проблема может возникнуть сама по себе, на вполне легальном трафике, без вмешательства извне. На момент публикации проблема была устранена.

В драйвере Linux 4.0.5 ozwpan, имеющем статус экспериментального, выявлено пять уязвимостей, четыре из них позволяют организовать DoS-атаку через крах ядра, отправив специально оформленные пакеты. Проблема связана с выходом за границы буфера из-за некорректной обработки знаковых целых чисел, при котором вычисление в memcpy между required_size и offset возвращало отрицательное число, в итоге данные копируются в кучу.

Находится в функции oz_hcd_get_desc_cnf в drivers/staging/ozwpan/ozhcd.c и в функциях oz_usb_rx и oz_usb_handle_ep_data файла drivers/staging/ozwpan/ozusbsvc1.c. В других уязвимостях возникала ситуация возможного деления на 0, зацикливания системы или возможность чтения из областей вне границ выделенного буфера.

Драйвер ozwpan, одна из новинок Linux, может быть сопряжен с существующими беспроводными устройствами, совместимыми с технологией Ozmo Devices (Wi-Fi Direct). Предоставляет реализацию хост-контроллера USB, но фишка в том, что вместо физического подключения периферия взаимодействует через Wi-Fi. Драйвер принимает сетевые пакеты c типом (ethertype) 0x892e, затем разбирает их и переводит в различную функциональность USB. Пока используется в редких случаях, поэтому его можно отключить, выгрузив модуль ozwpan.ko.

LINUX UBUNTU

ОС: Linux Ubuntu 12.04–15.04 (ядро до 15 июня 2015 года)
Уровень: Critical
Вектор: Local
CVE: CVE-2015-1328
Exploit: https://www.exploit-db.com/exploits/37292/

Критическая уязвимость в файловой системе OverlayFS позволяет получить права root в системах Ubuntu, в которых разрешено монтирование разделов OverlayFS непривилегированным пользователем. Настройки по умолчанию, необходимые для эксплуатации уязвимости, используются во всех ветках Ubuntu 12.04–15.04. Сама OverlayFS появилась в ядре Linux относительно недавно - начиная с 3.18-rc2 (2014 год), это разработка SUSE для замены UnionFS и AUFS. OverlayFS позволяет создать виртуальную многослойную файловую систему, объединяющую несколько частей других файловых систем.

ФС создается из нижнего и верхнего слоев, каждый из которых прикрепляется к отдельным каталогам. Нижний слой используется только для чтения в каталогах любых поддерживаемых в Linux ФС, включая сетевые. Верхний слой обычно доступен на запись и перекрывает данные нижнего слоя, если файлы дублируются. Востребована в Live-дистрибутивах, системах контейнерной виртуализации и для организации работы контейнеров некоторых настольных приложений. Пространства имен для пользователей (user namespaces) позволяют создавать в контейнерах свои наборы идентификаторов пользователей и групп. Уязвимость вызвана некорректной проверкой прав доступа при создании новых файлов в каталоге нижележащей ФС.

Если ядро собрано с параметром CONFIG_USER_NS=y (включение пользовательского пространства имен), а при монтировании указан флаг FS_USERNS_MOUNT, OverlayFS может быть смонтирована обычным пользователем в другом пространстве имен, в том числе там, где допускаются операции с правами root. При этом операции с файлами с правами root, выполненные в таком namespaces, получают те же привилегии и при выполнении действий с нижележащей ФС. Поэтому можно смонтировать любой раздел ФС и просмотреть или модифицировать любой файл или каталог.

На момент публикации уже было доступно обновление ядра с исправленным модулем OverlayFS от Ubuntu. И если система обновлена, проблем быть не должно. В том же случае, когда обновление невозможно, в качестве временной меры следует отказаться от использования OverlayFS, удалив модуль overlayfs.ko.

УЯЗВИМОСТИ В ОСНОВНЫХ ПРИЛОЖЕНИЯХ

ОС: Linux
Уровень: Critical
Вектор: локальная, удаленная
CVE: CVE-2015-0235
Exploit: https://www.qualys.com/research/security-advisories/exim_ghost_bof.rb

Опасная уязвимость в стандартной библиотеке GNU glibc, которая является основной частью ОС Linux, и в некоторых версиях Oracle Communications Applications и Oracle Pillar Axiom, обнаруженная во время аудита кода хакерами из Qualys. Получила кодовое имя GHOST. Заключается в переполнении буфера внутри функции __nss_hostname_digits_dots(), которую используют для получения имени узла такие функции glibc, как gethostbyname() и gethostbyname2() (отсюда и название GetHOST). Для эксплуатации уязвимости нужно вызвать переполнение буфера при помощи недопустимого аргумента имени хоста приложению, выполняющему разрешение имени через DNS. То есть теоретически эту уязвимость можно применить для любого приложения, использующего в той или иной мере сеть. Может быть вызвано локально и удаленно, позволяет выполнить произвольный код.

Самое интересное, что ошибка была исправлена еще в мае 2013 года, между релизами glibc 2.17 и 2.18 был представлен патч, но проблему не классифицировали как патч безопасности, поэтому на нее внимания не обратили. В итоге многие дистрибутивы оказались уязвимы. Вначале сообщалось, что самая первая уязвимая версия - 2.2 от 10 ноября 2000 года, но есть вероятность ее появления вплоть до 2.0. Среди прочих уязвимости были подвержены дистрибутивы RHEL/CentOS 5.x–7.x, Debian 7 и Ubuntu 12.04 LTS. В настоящее время доступны исправления. Сами хакеры предложили утилиту, поясняющую суть уязвимости и позволяющую проверить свою систему. В Ubuntu 12.04.4 LTS все нормально:

$ wget https : //goo.gl/RuunlE

$ gcc gistfile1 . c - o CVE - 2015 - 0235

$ . / CVE - 2015 - 0235

not vulnerable

Проверяем систему на GHOST

Практически сразу был выпущен модуль к , позволяющий удаленно выполнить код на x86 и x86_64 Linux с работающим почтовым сервером Exim (с включенным параметром helo_try_verify_hosts или helo_verify_hosts). Позже появились и другие реализации, например модуль Metasploit для проверки блога на WordPress.

Чуть позже, в 2015 году, в GNU glibc были обнаружены еще три уязвимости, позволяющие удаленному пользователю произвести DoS-атаку или переписать ячейки памяти за пределами границы стека: CVE-2015-1472, CVE-2015-1473, CVE-2015-1781.

ОС: Linux (GNU Coreutils)
Уровень: Low
Вектор: Local, Remote
CVE: CVE-2014-9471
Exploit: нет

GNU Сoreutils - один из основных пакетов *nix, включающий практически все базовые утилиты (cat, ls, rm, date…). Проблема найдена в date. Ошибка в функции parse_datetime позволяет удаленному атакующему, не имеющему учетной записи в системе, вызвать отказ в обслуживании и, возможно, выполнить произвольный код, используя специально сформированную строку даты с использованием timezone. Уязвимость выглядит так:

$ touch ‘-- date = TZ = ”123 ”345 ”@ 1 ’

Segmentation fault

$ date - d ‘TZ = ”Europe / Moscow ”“00 : 00 + 1 hour ”’

Segmentation fault

$ date ‘-- date = TZ = ”123 ”345 ”@ 1 ’

* * * Error in ` date ’: free () : invalid pointer : 0xbfc11414 * * *

Уязвимость в GNU Сoreutils

Если уязвимости нет, получим сообщение о неверном формате даты. О наличии уязвимости отчитались практически все разработчики дистрибутивов Linux. В настоящее время доступно обновление.


Нормальный вывод патченного GNU Сoreutils

ОС: Linux (grep 2.19–2.21)
Уровень: Low
Вектор: Local
CVE: CVE-2015-1345
Exploit: нет

В утилите grep, которая используется для поиска текста по шаблону, редко находят уязвимости. Но эту утилиту часто вызывают другие программы, в том числе и системные, поэтому наличие уязвимостей гораздо проблематичнее, чем кажется на первый взгляд. Ошибка в bmexec_trans function в kwset.c может привести к чтению неинициализированных данных из области за пределами выделенного буфера или краху приложения. Этим может воспользоваться хакер, создав специальный набор данных, подаваемых на вход приложения при помощи grep -F. В настоящее время доступны обновления. Эксплоитов, использующих уязвимость, или модуля к Metasploit нет.

УЯЗВИМОСТЬ В FREEBSD

ОС: FreeBSD
Уровень: Low
Вектор: Local, Remote
CVE: CVE-2014-0998, CVE-2014-8612, CVE-2014-8613
Exploit: https://www.exploit-db.com/exploits/35938/

В базе CVE за 2015 год не так уж много уязвимостей, если точнее - всего шесть. Сразу три уязвимости были найдены в FreeBSD 8.4–10.х в конце января 2015-го исследователями из Core Exploit Writers Team. CVE-2014-0998 связана с реализацией драйвера консоли VT (Newcons), который предоставляет несколько виртуальных терминалов, включаемых параметром kern.vty=vt в /boot/loader.conf.
CVE-2014-8612 проявлялась при использовании протокола SCTP и вызвана ошибкой в коде проверки идентификатора потока SCTP, реализующего SCTP-сокеты (локальный порт 4444). Суть в ошибке выхода за пределы памяти в функции sctp_setopt() (sys/netinet/sctp_userreq.c). Это дает локальному непривилегированному пользователю возможность записать или прочитать 16 бит данных памяти ядра и повысить свои привилегии в системе, раскрыть конфиденциальные данные или положить систему.

CVE-2014-8613 позволяет инициировать разыменование нулевого указателя при обработке полученного извне SCTP-пакета, при установке SCTP_SS_VALUE опции сокета SCTP. В отличие от предыдущих, CVE-2014-8613 может быть использована для удаленного вызова краха ядра через отправку специально оформленных пакетов. В FreeBSD 10.1 защититься можно, установив переменную net.inet.sctp.reconfig_enable в 0, тем самым запретив обработку блоков RE_CONFIG. Или просто запретить использовать SCTP-соединения приложениям (браузерам, почтовым клиентам и так далее). Хотя на момент публикации разработчики уже выпустили обновление.


Статистика уязвимостей в FreeBSD

УЯЗВИМОСТЬ В OPENSSL

ОС: OpenSSL
Уровень: Remote
Вектор: Local
CVE: CVE-2015-1793
Exploit: нет

В 2014 году в OpenSSL, широко используемом криптографическом пакете для работы с SSL/TLS, была найдена критическая уязвимость Heartbleed. Инцидент в свое время вызвал массовую критику качества кода, и, с одной стороны, это привело к появлению альтернатив вроде LibreSSL, с другой - сами разработчики наконец взялись за дело.

Топ вендоров по уязвимостям

Критическая уязвимость обнаружена Адамом Лэнгли из Google и Дэвидом Бенджамином из BoringSSL. Изменения, внесенные в OpenSSL версий 1.0.1n и 1.0.2b, привели к тому, что OpenSSL пытается найти альтернативную цепочку верификации сертификата, если первая попытка построить цепочку подтверждения доверия не увенчалась успехом. Это позволяет обойти процедуру проверки сертификата и организовать подтвержденное соединение с использованием подставного сертификата, говоря другими словами - спокойно заманивать пользователя на поддельные сайты или сервер электронной почты или реализовать любую MITM-атаку там, где используется сертификат.

После обнаружения уязвимости разработчики 9 июля выпустили релизы 1.0.1p и 1.0.2d, в которых эта проблема устранена. В версиях 0.9.8 или 1.0.0 этой уязвимости нет.

Linux.Encoder

Конец осени ознаменовался появлением целого ряда вирусов-шифровальщи ков, вначале Linux.Encoder.0, затем последовали модификации Linux.Encoder.1 и Linux.Encoder.2, заразивших более 2500 сайтов. По данным антивирусных компаний, атаке подвергаются серверы на Linux и FreeBSD с веб-сайтами, работающими с использованием различных CMS - WordPress, Magento CMS, Joomla и других. Хакеры используют неустановленную уязвимость. Далее размещался шелл-скрипт (файл error.php), при помощи которого и выполнялись любые дальнейшие действия (через браузер). В частности, запускался троян-энкодер Linux.

Encoder, который определял архитектуру ОС и запускал шифровальщик. Энкодер запускался с правами веб-сервера (Ubuntu - www-data), чего вполне достаточно, чтобы зашифровать файлы в каталоге, в котором хранятся файлы и компоненты CMS. Зашифрованные файлы получают новое расширение.encrypted.

Также шифровальщик пытается обойти и другие каталоги ОС, если права настроены неправильно, то он вполне мог выйти за границы веб-сайта. Далее в каталоге сохранялся файл README_FOR_DECRYPT.txt, содержащий инструкции по расшифровке файлов и требования хакера. На данный момент антивирусные компании представили утилиты, позволяющие расшифровать каталоги. Например, набор от Bitdefender. Но нужно помнить, что все утилиты, предназначенные для расшифровки файлов, не удаляют шелл-код и все может повториться.

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

ВЫВОД

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

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

После того как мы установили базовую операционную систему 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 выглядит минималистично, интерфейс по умолчанию отображается на английском языке, но всё настраивается!

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

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

 

 

Это интересно: