Как защититься
От подбора пароля
От атаки подбором пароля есть следующие методы защиты:
Смена стандартного логина и пароля на надежную комбинацию. В рамках курса мы будем менять пароли роутеров, пароли доступа по RDP и разберем сам принцип создания надежного пароля и его безопасного хранения. Программа CrowdShield сменит пароли на ваших VPN и proxy-серверах.
Смена порта SSH и RDP. Это исключит большинство попыток подбора пароля, так как сканеры ищут стандартные порты. Менять порт RDP мы вас научим в главе, посвященной удаленным рабочим местам, а порт SSH у ваших VPN и proxy поменяет CrowdShield.
Блокировка при попытке подбора пароля. Мы уже говорили про fail2ban – это эффективное решение, пресекающее целенаправленный подбор пароля. Подобные решения есть и у некоторых Wi-Fi роутеров.
От эксплуатирования уязвимостей
Основное средство защиты от эксплуатирования уязвимостей – своевременное обновление. Мы будем учить вас обновлять все: от Wi-Fi роутеров до прошивок веб-камер. Вам необходимо быть в курсе всех текущих уязвимостей, особенно если они касаются используемых вами устройств.
Помимо обновления, мы проведем комплексную настройку безопасности устройств. Например, закроем доступ из внешней сети к управлению Wi-Fi роутером, отключим RDP и SMB, настроим firewall, тем самым заблокировав потенциально опасные пути атаки.
4. Как скачать исходный код сайтов с сервера
Ах да, зачем я вдруг кинулся искать папку с правом на запись? Дело в том, что мне надо скачать файлы с исходным кодом — для дальнейшего анализа «в спокойной обстановке». Этих файлов много и скачивать их все по одному займёт много времени. Поэтому у меня план такой — запаковать все файлы в архив, а архив скачать.
Само собой, можно воспользоваться услугами папки /tmp, которая всегда открыта на запись для всех желающих. Но из папки /tmp я могу скачать только с помощью Weevely. Но если мне удастся сохранить архив в папку веб-сервера, то я могу скачать его прямо из веб-браузера или любой файловой качалкой. Это особенно актуально, если файл очень большой — может пригодиться докачка файла после разрыва соединения, что в командной строке с Weevely сделать не получится.
Понятно, что если мы в папке /var/www/XX1/tmp, то папкой веб-сервера является /var/www/. Посмотрим что там в ней:
ls -l /var/www/
А в ней папки других сайтов — в общей сложности 14 штук, но показать их я уже не могу.
Смотрим в шпаргалку, чтобы сохранить файлы в архив командой zip дополнительно нужно использовать опцию -r для рекурсивного добавления всего, что находится в папках, запускается следующим образом:
zip -r имя_нового_архива.zip каталог_для_архивации
Каталогом для архивации является /var/www/, архив я пока сохраню в директорию /tmp (а не в папку с сайтами, так как получится, что мы попытаемся сохранить архив в папке, которая добавляется в этот архив — возможно, это вызовет ошибку).
Запускаем команду:
zip -r /tmp/archive.zip /var/www/
На что мне возвращается сообщение:
sh: 1: zip: not found
Чёрт, на этом сервере не установлена программа zip. Можно воспользоваться встроенным эмулятором архивирования Weevely, но попробую ещё другую программу:
tar czf /tmp/archive.tgz /var/www/
А вот программа tar оказалась на сервере. Внутренние команды означают:
- c — создать архив
- z — алгоритм сжатия
- f — после этой опции указывается путь до архива и имя файла
Переносим архив в папку веб-сервера, где он теперь доступен для скачивания даже с помощью браузера:
mv /tmp/archive.tgz /var/www/XX1/tmp
Чтобы узнать размер всех подпапок в папке /var/www/:
du -sh /var/www/*
Если нужно скачать только некоторые папки, то это делается командой вида:
tar czf архив.tgz папка_в_архив_1 папка_в_архив_2 папка_в_архив_3 папка_в_архив_4
7. Анализ добытых паролей
База данных раскрыла много интересной информации. Но самая интересная — это список пользователей с паролями.
Это важно — пользователь имеет тенденцию использовать одинаковые пароли — это отдельная уязвимость, между прочим.
Но ещё интереснее анализ всех паролей пользователей — почти все они шестизначные числа! Видимо, учётные данные генерировал и выдавал администратор. У администратора склонность создавать однотипные пароли — учтём это. То есть если придётся брут-форсить службы на этом сервисе (а нам придётся ), то я уже знаю, каким будет словарь — это будет полный список чисел из шести цифр.
Ну и вообще — если пароли одинаковые, то есть смысл поискать другие службы — вдруг туда тоже подойдут уже имеющиеся у нас логины и пароли.
Общие принципы взлома сайтов
По структуре сайты делятся на три больших класса:
- самописные (сделанные вручную на HTML, произведенные статическим генератором типа Jekyll или собранные в программе-конструкторе типа Adobe Dreamweaver);
- сделанные в онлайновых конструкторах (в основном это сайты-визитки без каких-либо баз данных и передаваемых полей);
- работающие на готовых CMS (Content Management System, системах управления контентом).
Встречаются еще самодельные CMS, созданные для конкретного сайта, но это сейчас стало редкостью — позволить себе поддержку своей системы могут только самые крупные ресурсы, и оправдать связанные с этим затраты непросто.
В основе большинства современных сайтов — готовые движки. Например, Xakep.ru не исключение: он работает на популярной системе WordPress (по крайней мере сейчас, в 2020 году).
С точки зрения атакующего, движки сайтов ничем не отличаются от других сервисов и служб. Их исходный код обычно находится в общем доступе, и любой исследователь может проанализировать его на ошибки, в том числе бреши в безопасности. Поэтому сайты на CMS редко становятся жертвами целевой атаки. Чаще их ломают массово.
Такой взлом автоматизирован и обычно протекает по следующей схеме: злоумышленник находит уязвимость (самостоятельно или просто гуглит что-то свежее). Затем он делает эксплоит или берет готовый и пишет специализированный бот. Этот бот ищет указанную дыру на всех сайтах подряд в заданном диапазоне и пытается эксплуатировать ее.
Казалось бы, для защиты от автоматических атак надо всего-то поддерживать программное обеспечение в актуальном состоянии, но в реальности CMS обрастает разными дополнениями, и уследить за всеми становится сложно.
При пентесте стоит несколько иная задача — проверить конкретный сайт на уязвимости. Об этом мы и поговорим.
Защита Windows Server
Рассмотрим самые популярные способы защиты виртуального сервера на основе Windows Server.
Настройка Firewall
Онлайн-серверы Windows не имеют дополнительных шлюзов безопасности. За это отвечает только брандмауэр, обеспечивающий защиту подключений. С его помощью можно отключить неиспользуемые порты.
Самому обычному VPS потребуются только порты 80 и 443. А для неиспользуемых портов необходимо ограничить источники подключений, установив пользовательский список IP, для которых оно возможно. Для этого настраиваются правила входящих подключений.
Следующие порты должны быть доступны пользователям, чей IP надежен:
- 3389 — стандартный порт RDP;
- 1433-1434 — стандартные порты SQL;
- 53 — DNS;
- 80, 443 — веб-сервер;
- 990 — FTPS.
Изменение имени администратора и создание нескольких аккаунтов
После смены имени получить несанкционированный доступ будет сложнее. Для этого:
- Переходим по «Редактор локальной политики безопасности» — «Локальные политики» — «Параметры безопасности» — «Учетные записи» — «Переименование учетной записи администратора».
- Устанавливаем имя, которое известно только вам.
Если сервер администрирует несколько человек, для каждого нужно создать отдельную учетную запись. Это позволит отслеживать чужие действия через системный журнал. Для систем Unix специалисты рекомендуют вообще не использовать учетную запись root.
Ограничение прав учетной записи
По возможности все операции, которые не требуют прав администратора, должны выполняться с другой учетной записи. Это повышает безопасность, когда речь идет о случайном запуске зараженной вирусом программы.
Например, защита почтового сервера часто включает в себя мониторинг спама, которым нередко пользуются взломщики. В таком случае вредоносное ПО не сможет навредить системе, так как у учетной записи ограничены права.
Общий доступ с паролем
Защита терминального сервера основывается на установке паролей для папок с общим доступом. Это обезопасит систему, так как даже через файлы, которые не представляют собой никакой ценности, можно получить к ней лазейку.
Следует ограничить права пользователей без полного доступа. Такая защита сервера намного проще, чем следить за безопасностью всех учетных записей.
Автоотключение сессий
Когда пользователь случайно забывает закрыть RDP-клиент на чужом компьютере, наличие опции автоотключения при бездействии спасет систему от несанкционированного доступа. Тогда после истечения определенного времени придется вводить пароль для повторного входа. Настроить функцию можно в «Конфигурации узла сеансов удаленных рабочих столов».
Мастер настройки безопасности
Утилита Microsoft Security Configuration Wizard (SCW) создает файлы безопасности для дублирования на все серверы инфраструктуры. Они состоят из правил работы с сервисами, настройки параметров ОС и брандмауэра.
Локальная и групповая политика безопасности
При использовании групповых политик (например, в Active Directory) понадобится периодически проводить проверки и повторную конфигурацию. Это один из самых эффективных инструментов, гарантирующих обеспечение безопасности ОС.
Локальная политика безопасности затрагивает локальные аккаунты, поэтому ее тоже необходимо использовать, чтобы обезопасить сервер.
Удаленные рабочие столы
Доступ к ним осуществляется через протокол RDP, который считается безопасным. Но есть возможность усилить защиту. Для этого существуют:
- Блокировка подключения для учетных записей с пустым паролем. Она осуществляется через «Локальные политики безопасности» и параметр «Учетные записи: Разрешить использование пустых паролей только при консольном входе».
- Изменение стандартного порта RDP. С этой целью в реестре изменяется параметр HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Terminal Server/WinStations/RDP-Tcp Port Number. После необходимо добавить для него правило в брандмауэре и перезагрузить сервер. Чтобы подключить затем к порту через этот сервер, понадобится добавить его вручную в «Подключение к удаленному рабочему столу».
Защита RDP-сессий через SSL/TLS
Если при подключении не используется VPN, защита RDP-сервера от перебора паролей обеспечивается SSL/TLS-соединением туннелированного типа. Чтобы настроить этот параметр, нужно задействовать запрос определенного уровня безопасности, указав SSL (TLS 1.0).
Журнал событий сервера
Логи веб сервера могут содержать информацию или дать подсказку о том, как сайт был взломан.
Логи находятся на хостинг панели, в зависимости от используемого софта они могут называться по-разному: «Логи», «Журнал событий», «Метрики» или что-нибудь в этом роде. Обычно в этом разделе находятся 2 журнала: «Логи ошибок» и «Логи доступа». Лог ошибок сервера короче, поэтому начать можно с них, но они не показывают успешные попытки доступа.
Логи доступа содержат информацию об успешных попытках доступа, здесь больше вероятность найти следы взлома.
Записи в журнале хранятся на сервере определенное количество дней, после чего они автоматически удаляются. Скопируйте их на компьютер, пока они не были удалены с сервера.
Сохраните файлы на компьютер из хостинг панели или напрямую с сервера, и откройте в любой текстовой программе, например Notepad++ или Brackets.
Стенд для бесплатного взлома сайта под управлением Drupal
Чтобы воспроизвести уязвимость, нам понадобятся два контейнера Docker. Первый — для сервера базы данных.
Второй — официальный, от разработчиков Drupal, с последней уязвимой к обоим багам версией — 8.6.5.
Теперь нужно пройти несложную процедуру инсталляции.
Установка Drupal 8.6.5
Если требуется отладка, то я по-прежнему рекомендую использовать PhpStorm и расширение Xdebug helper для браузера. Эта связка работает быстро и стабильно. Чтобы иметь возможность дебага, я дополнительно установлю PHP-расширение Xdebug.
Не забудь поменять IP-адрес 192.168.99.1 на свой и обрати внимание на путь до скомпилированной библиотеки. Далее нужно скачать исходники Drupal, и после перезагрузки конфигов Apache можно запускать отладчик
После завершения установки CMS необходимо будет создать тестовую страницу или запись.
Создание тестовой записи в Drupal
Помимо этого, для тестирования XSS понадобится любой пользователь, который сможет загружать файлы и оставлять комментарии. В дефолтной инсталляции это можно делать после прохождения регистрации. Как вариант, можешь просто создать юзера в админке.
Что делать при взломе VPS на Windows\Linux?
Если взломали сервер, это станет заметно сразу. Причиной может оказаться как банальная невнимательность пользователей, так и методичный подбор паролей злоумышленниками
В таком случае необходимо обратить внимание на возможные признаки взлома, устроить проверку безопасности сервера и определиться, что делать на основании источника проблемы
Признаки взлома сервера
- Нестабильная работа и блокировка VPS.
- Отсутствие доступа к root и другим правам пользователя.
- Заметный рост трафика на сервере.
- Странная сетевая активность (рассылка почты в отсутствие пользователя, передача файлов через SSH и т.д.).
- Рассылка спама с VPS.
Обнаружение любого из упомянутых признаков требует тщательной проверки сервера и системы. В некоторых случаях сбои в работе могут не иметь отношения ко взлому, например, являясь следствием технических или программных проблем, прерывающегося интернет-соединения.
Проверка сервера
- Определения времени входа в систему. Если он осуществлялся в отсутствие пользователя, необходимо уточнить, кто еще имел доступ в этот период.
- История команд. Не лишним будет знать, какие команды вводились в системе\сервере, какие операции к ним привязаны. Сопоставление даты их активации с временем входа поможет определить источник проблем.
- Проверка IP-адресов. Если в списке есть незнакомые адреса, которым точно никто не давал доступ, сервером пользуются несанкционированно.
- Подозрительные процессы. Такими могут быть многие фоновые операции, неожиданно появившиеся в списке и забирающие большое количество ресурсов. Обычно они заметны сразу.
Порядок действий при взломе
- Проверка сайта на наличие вирусов и уязвимостей. Необходимо регулярно обновлять пакеты и скрипты сайты, следить за производительностью и логом файлов сервера. Выявить вирусы можно с помощью скрипта Al-bolit и любого другого.
- Последние измененные файлы. Проверка файлов, которые изменялись за последние 10 дней, проводится с помощью команды:
find /home/user/data/www/site.com/ -type f -mtime -10
- Проверка почтовой очереди на наличие спама. При поиске необходимо искать строку команды X-PHP-Script, чтобы выявить скрипт, выполняющий рассылку.
- Проверка файлов во временных и загрузочных директориях. Если там будут найдены скрипты, хранение которых во временных папках не допускается, с большой вероятности именно они являются источником проблемы. Для проверки нужно воспользоваться командой:
find /home/user/data/www/site.com/ -type d \( -iname '*upload*' -o -iname '*tmp*' \) file /home/user/data/www/site.com/uploads/* | grep -i php
- Проверка VPS на наличие шеллов — кода, с помощью которого хакер получает доступ к серверу. Все найденные шеллы необходимо удалить. Проверка:
egrep -ril “base64_decode|auth_pass|shell_exec” /home/user/site.com
- Проверка устаревшего ПО на сервере и подключенных CMS.
Восстановление работоспособности
Многие специалисты рекомендует при выявлении взлома переустанавливать систему, но это требуется не всегда. Если точно известна причина и она уже была устранена, можно выполнить действия по данному ниже алгоритму.
- Ограничить права доступа к панели отдельным IP.
- Закрыть ненужные порты в Firewall.
- Обновить пароли и SSH-ключи.
- Провести комплексное обновление ПО.
- Очистить сервер от чужеродных скриптов — бэкдоры и шеллы.
Путь к XSS уязвимости
Добавление картинок в форме комментирования записи в Drupal
Причем картинка загружается с компьютера пользователя. Имена загружаемых файлов могут представлять опасность, одна из последних уязвимостей в WordPress тому пример.
За сохранение загруженных файлов отвечает функция .
core/modules/file/file.module
Обрати внимание на аргумент. Он отвечает за ситуацию, когда в директории уже присутствует файл с таким же именем, как у загружаемого
По дефолту новый файл переименовывается.
core/includes/file.inc
Функция генерирует новое имя для загружаемого файла. Но перед этим производится санитизация названия. Убираются все нежелательные символы.
core/includes/file.inc
Функция заменяет на символ подчеркивания () все символы с ASCII-кодом до 31 (1F). И все бы ничего, если бы не PCRE-модификатор (PCRE_UTF8). Он интерпретирует входные данные как строку UTF-8. Допустимая длина символа UTF-8 — от одного до четырех байт. UTF-8 спроектирован с учетом обратной совместимости с набором символов ASCII. Поэтому в диапазоне однобайтовых кодов (0x00—0x7F) ASCII и UTF-8 пересекаются.
При работе функций с этой кодировкой есть небольшая особенность: если переданная строка имеет некорректный формат, то результатом работы будет NULL, а выполнение кода продолжится. Об этом четко написано в документации — см. справку по модификатору .
Чтобы понять, как сделать строку невалидной, обратимся к спецификации по UTF-8 — . Согласно этому документу, байты , , никогда не должны присутствовать в корректной строке в кодировке UTF-8.
Спецификация по UTF-8. Некорректные байты
Вооружившись этой информацией, я накидал тестовый скрипт, чтобы проверить особенность обработки невалидных строк.
test.php
Особенность обработки некорректных строк UTF-8 функцией preg_replace
Теперь посмотрим, что произойдет, когда мы передадим некорректную строку UTF-8. Для этого нам нужно сначала загрузить файл с кодом символа в качестве названия и одним из разрешенных расширений, я использовал .
Загрузка файла, содержащего символы UTF-8
Я поставил брейк-пойнт на функцию и повторил запрос. В самом начале происходит вызов , после которого переменная становится .
Повторная загрузка файла, содержащего те же символы UTF-8
core/includes/file.inc
Дальше формируется полный путь до загруженного файла (), а так как у нас пустая, то путь будет указывать просто на папку с загруженными файлами. Разумеется, эта директория существует, поэтому дальше мы попадаем в тело условия.
Формирование пути, по которому будет сохранен загруженный файл
core/includes/file.inc
Тут к имени файла добавляется суффикс, по сути, это просто счетчик.
core/includes/file.inc
Добавление суффикса к имени загружаемого файла
В итоге получается путь . По нему и сохраняется содержимое файла.
Содержимое загруженного файла
Как хакеры взламывают сайты
Обычно хакеры используют ботов для обхода десятков тысяч сайтов с целью найти в них уязвимости по спискам известных уязвимостей, которые находятся в открытом доступе. Когда боты находят такие сайты, они взламывают их по известному алгоритму и отправляют сообщение хакеру.
Иногда хакеры взламывают сайты вручную, когда хотят получить доступ к какому-то определенному сайту, но по сравнению с автоматическим способом это происходит очень редко.
Основные способы, которыми хакеры проникают на сайты:
- Перебор паролей (взлом грубой силой) — Хакер просто пытается угадать ваш логин и пароль. Если вы используете простые логины, например, Admin или Administrator, это дает хакерам половину данных для доступа к вашему сайту. Если вы используете простые пароли, то это еще более ускоряет проникновение на ваш сайт.
- Уязвимости софта — Когда хакеры определяют, что вы используете устаревший софт, по спискам известных уязвимостей, находящимся в открытом доступе, они находят уязвимость в вашей устаревшей версии Вордпресс, плагина, темы или скрипта, и, например, внедряют свой скрипт для проникновения на ваш сайт.
- Бэкдоры — Хакер внедряет файл в файловую структуру сайта. В файле находится скрипт, который позволяет хакеру получить доступ к сайту, оставаясь при этом незамеченным. Бэкдоры.
- Небезопасный сервер — Сервер, на котором расположен ваш сайт, должен быть безопасным. Если он небезопасен, хакеры могут использовать уязвимости в ПО сервера для проникновения на ваш сайт.
- Неверные права доступа — Права доступа к файлам и папкам определяют, кто может читать, записывать и исполнять файлы. Если вы установите слишком низкие права доступа, хакеры смогут редактировать ваши файлы, внедрять скрипты, например, бэкдоры, и в итоге получат контроль над сайтом.
- XML-RPC эксплоиты — XML-RPC используется для трекбэков и пингбэков. Это позволяет делать несколько удаленных вызовов по одному HTTP запросу. Например, сайт может отправлять пингбеки на другие сайты и получать их от других сайтов. Проблема в том, что хакеры могут использовать эту функцию для выполнения удаленных автоматических атак с перебором паролей, когда они без ограничения с высокой частотой перебирают разные варианты логина и пароля. Подробнее.
- Вредоносное ПО и вирусы — Если у вас на компьютере есть вредоносное ПО или вирусы, хакеры могут их использовать для проникновения на сайт.
- Фишинг — Хакеры могут захватить или создать похожий на оригинальный сайт. На захваченном или похожем сайте хакеры создают похожую на оригинальную форму авторизации, чтобы похитить персональные данные пользователей, когда они авторизуются на сайте.
- XSS-атаки (Cross-site Scripting) — Это код, написанный определенным образом, который позволяет хакеру записывать и выполнять вредоносный JavaScript, который сохраняет данные браузера пользователя. Хакеры отправляют ссылку пользователям сайта, чтобы похитить любую информацию, введенную пользователями при просмотре сайта.
- CSRF (Cross-site request forgery) — Подделка межсайтового запроса. Хакер вносит изменение в оригинальный запрос пользователя, создавая свой вредоносный запрос. У хакера нет прав администратора, поэтому он обманным путем заставляет пользователя совершать действия, которые дают хакеру разрешение на выполнение этого вредоносного запроса. Такой тип атак используется для того, чтобы заставить пользователя делать нужные действия, например, предоставить свои логин и пароль для входа на сайт.
Это основные типы атак, которые используют хакеры, но кроме этих существуют и другие, поэтому практически невозможно угадать, каким именно путем хакер проник на сайт.
Вы можете попробовать что-то сделать, например, поменять пароли, но если вы видите, что хакер все равно продолжает проникать на сайт, значит, проблема еще не решена.
Единственный способ вылечить сайт — это выяснить, как хакер на него попадает, и устранить эту уязвимость.
5. Как узнать, какие сайты работают на сервере
Исходный код — это очень ценный трофей и он нам ещё во многом поможет. Но, как я уже сказал, на этом сервере много папок с сайтами — то есть и сайтов здесь много.
Список всех загруженных настроек и обработанных виртуальных хостов можно узнать опцией -S. А с помощью -t -D DUMP_INCLUDES можно увидеть все используемые файлы конфигурации. Правда есть проблема — исполнимый файл веб-сервера может называться или httpd, или apache2 в зависимости от системы. На производных Debian файл будет называться apache2. А на производных Arch Linux — httpd. В принципе, проблемы никакой нет попробовать обе команды и посмотреть, какая из них сработает:
httpd -S httpd -t -D DUMP_INCLUDES
И:
apache2 -S apache2 -t -D DUMP_INCLUDES
Как я уже сказал, в нормальных условиях эти опции должны показывать все конфигурационные файлы и все виртуальные хосты. Но, видимо, тот горе программист, который писал код для сайта, ещё взялся и за настройку веб-сервера — у меня вместо ожидаемой информации только выводится сообщение об ошибке в одном из конфигурационных файлов — не хватает SSL сертификата. Кстати, ведь это означает, что при перезапуске компьютера или только веб-сервера, — Apache, по идее, не запустится, так как это (вроде) фатальная ошибка.
Ладно, проверим вручную. Если бинарный файл называется apache2, значит конфигурационные файлы хранятся в /etc/apache2/.
Главным конфигурационным файлом Apache является /etc/apache2/apache2.conf.
В папке /etc/apache2/conf-available собраны другие конфигурационные файлы, а в папке /etc/apache2/conf-enabled можно узнать, какие из них подключены.
В папке /etc/apache2/mods-enabled можно посмотреть, какие модули Apache включены.
В папке /etc/apache2/sites-available можно узнать, настройки для каких сайтов предусмотрены, а в папке /etc/apache2/sites-enabled — какие из них активны в данный момент.
К сожалению, не могу вам показать содержимое, могу только сказать, в sites-available оказалось 18 конфигурационных файлов. В этих файлах для каждого сайта как минимум 2 обязательных директивы:
- ServerName — здесь имя хоста, фактически, домен сайта (иногда субдомен)
- DocumentRoot — путь до файлов на этом сервере для данного хоста
С помощью этой техники можно узнать, какие другие сайты хостит этот сервер, и где на сервере находится исходный код каждого из них.
Да чё уж там, берём всё, «дома разберёмся»:
tar czf /var/www/XX1/upload/apache_archive.tgz /etc/apache2/
Безопасность Linux
Политика безопасности в Linux при работе сервера основывается на следующих способах защиты:
Активация брандмауэра
Для Linux существует несколько вариантов:
- UFW — простой брандмауэр, с которым может справиться и новичок;
- IPTables — используется для управления NetFilter, который входит в ядро Linux;
- NFTables — брандмауэр, использующий более простой синтаксис и объединяющий поддержку IPv4 и IPv6 в один инструмент.
Это основные инструменты, отвечающие за безопасность системы и, следовательно, подключенных к ней VPS. Настроив их параметры, можно сильно снизить риск взлома.
Перенос портов
Изменение стандартного SSH дает возможность повысить уровень защиты. Чтобы выполнить такой перенос, необходимо:
1. В настройках SSH прописать:
sudo nano /etc/ssh/sshd_config
2. Сохранить изменения и перезапустить:
sudo service ssh restart
3. Чтобы совершить вход, понадобится указать новый порт (в примере — 49681):
ssh user@host -p 49681
Замену нужно делать в пользу более сложного и многозначного порта. Лучше всего выбрать значение в диапазоне от 49152 до 65535.
Блокировка портов
Для повышения безопасности можно заблокировать все порты, кроме HTTP, HTTPS, SSH. Их вполне достаточно для полноценной работы сервера.
Для этого нужно:
1. Располагать файлом настройки iptables
sudo touch /etc/iptables.firewall-rules
2. Для того, чтобы система после каждого перезапуска использовала обновленные настройки, создать скрипт через исполняемый файл:
sudo touch /etc/network/if-pre-up.d/firewall sudo chmod +x /etc/network/if-pre-up.d/firewall
3. В него добавить:
#!/bin/sh /sbin/iptables-restore < /etc/iptables.firewall-rules
Применение FAIL2BAN
Этот способ включает в себя применение утилиты, которая не входит в стандартную комплектацию системы. Для ее установки воспользуйтесь командой
sudo apt-get install fail2ban
Перед внесением любых изменений в настройки, необходимо создать резервную копию их файла, чтобы не потерять установки по умолчанию. Изначально утилита располагает несколькими фильтрами для сервера Apache. При ее установке рекомендуется создавать свои на основе требований к безопасности используемого веб-сервера.
Утилита может отслеживать журнал входов, благодаря чему можно пометить те IP-адреса, с которых осуществлялось большое количество неудачных авторизаций. Предположительно, в это время с таких IP пытаются подобрать нужную комбинацию для входа. FAIL2BAN автоматически создает правило брандмауэра, которое временно блокирует их.
Общие принципы безопасности
Безопасность сервера — это комплекс операций, поэтому полагаться исключительно на конкретную меру не имеет смысла. Ниже представлены основные моменты, которые позволяют повысить безопасность как для Windows, так и для Linux.
Регулярное обновление ПО
Своевременное обновление, согласно системным требованиям, устраняет уязвимости, которые выявлены разработчиками, но еще неизвестны хакерам.
- В случае с Linux для систем CentOS можно использовать пакет yum-cron, автоматически скачивающий и устанавливающий обновления. ОС на Ubuntu обновляются через unattended-upgrades.
- Для любой версии Windows рекомендуется настроить автоматическое обновление в «Центре обновления» системы.
- Для систем FreeBSD можно настроить регулярную проверку и скачивание патчей безопасности через freebsd-update (параметр — cron). Команда проверяет и скачивает нужные обновления, но не устанавливает их. После загрузки на почту пользователя придет уведомление. Он сможет просмотреть список загрузок и установить нужное с помощью freebsd-update install.
Перед установкой обновлений в рабочей среде их необходимо проверять на тестовом сервере. Это позволит отследить влияние скачанных пакетов на поведение некоторых программ, которое может быть нарушено.
Проверенное ПО
В сети достаточно open-source продуктов, которые далеко не всегда отвечают нормам безопасности. Перед установкой необходимо обязательно убедиться в надежности разработчиков и ресурса.
Скачивать такое ПО можно только из официальных источников, поскольку любые сторонние сайты могут содержать вредоносные скрипты. Это касается даже ресурсов с первых страниц поисковой выдачи.
Ограничение серверов
Деактивируйте неработающие серверы и демоны (фоновые программы). Это сильно повысит безопасность, поскольку взломать неработающую службу нельзя. Возможно настроить брандмауэр, чтобы доступ к различным службам, не использующимся постоянно, осуществлялся исключительно с безопасных IP, выбранных пользователем.
Политика безопасности пользователей и привилегии
Нужно отключить те учетные записи, которые больше не должны иметь доступ к системе. Рекомендуется для каждого пользователя создавать уникальную учетную запись, чтобы защитить большее число служб от несанкционированного доступа.
Привилегии для файлов, которые доступны через интернет, должны быть минимальными. Права доступа к ним могут быть только у ограниченного круга пользователей. Это повысит безопасность ОС.
Резервное копирование
Для виртуальной машины должно быть включено резервное копирование. После того, как сервер взломан, восстановить копию в безопасной среде без интернет-подключения достаточно легко. При этом сохранятся все данные и можно будет устранить уязвимость самостоятельно.
Безопасные протоколы
FTP считается небезопасным протоколом, так как данные через него пересылаются обычным текстом, то есть хакер может увидеть логин и пароль подключающегося пользователя. Вместо него рекомендуется использовать SFTP или SCP, которые защищены SSH.