Linux security hardering ====== Общие рекомендации по безопасности ====== ===== OpenSSH ===== 1. Открываем конфиг **/etc/ssh/sshd_config**\\ P.S. Предварительно зайдите на сервер из удалённой или локальной консоли \\ 2. Заносим данные параметры: \\ **Port 65343 ** <- Выбираем порт из верхнего диапазона\\ **ListenAddress 158.16.6.7** <- Указываем на каком адресе будет слушаться наш демон (можно указать несколько параметров **ListenAddress**)\\ **Protocol 2** <- Использование только протокола SSH2\\ **UsePrivilegeSeparation yes** <- Подключившийся пользователь может создать только процессы от своих привилегий \\ **Ciphers aes256-ctr,aes192-ctr** <- Используюм только CTR, вместо CBC и более старых версий как 3des-cbc(перед тем как это использовать, убедитесь что вам ssh клиент поддерживает данный набор шифров)\\ **MACs hmac-sha2-256,hmac-sha2-512-96** <- Так же как и для шифров, используем более криптостойкие алгоритмы\\ **KeyRegenerationInterval 3600** <- Время (в секундах) автоматической генерации серверного ключа\\ **ServerKeyBits 2048** <- Увеличиваем битность серверного ключа\\ **PermitEmptyPasswords no** <- Запрещяем заход с путым паролем\\ **StrictModes yes** <- Жесткий режим\\ **PubkeyAuthentication yes** <- Переходим на авторизацию по открытым ключам\\ **AuthorizedKeysFile %h/.ssh/authorized_keys** <- Указываем путь, где должны храниться публичные ключи пользователей\\ **IgnoreRhosts yes** <- Отключаем rhost\\ **HostbasedAuthentication no** <- Отключаем авторизацию по хосту\\ **PasswordAuthentication no** <- Отключаем аутентификацию по паролю\\ **KerberosAuthentication no** <- Отключаем поддержку Kerberos\\ **GSSAPIAuthentication no** <- Отключаем поддержку GSSAPI\\ **AllowTcpForwarding no** <- Запрещаем проброс порта\\ **AllowAgentForwarding no** <- Запрещаем проброс через ssh-agent\\ **X11Forwarding no** <- Отключаем проброс иксов.\\ **UsePAM yes** <- Включаем поддежку PAM\\ **AllowUsers user3@10.20.30.0/24** <- Указываем пользователей и src. net. из которой можно авторизоваться на сервере\\ ===== Cron ===== 1. Переходим в директорию **/etc** и вводим **ls -l | grep cron**\\ 2. Меняем права у файла **crontab**. Делаем его доступным для чтения и записи только для пользователя __root__ **chmod 0600 crontab**\\ 3. Далее разрешаем создавать "кроны" только руту: создаём файл **touch cron.allow && echo "root" > cron.allow && /etc/init.d/cron restart**\\ ===== SHELLS ===== 1. Открываем файл **/etc/shells** и убираем от туда все лишние шеллы, кроме __bash__ и __sh__\\ 2. В директории **/etc/skell** находим файл **.bash_logout** и записываем туда следующие строки:\\ ''history -c'' \\ ''/bin/rm -rf ~/.bash_history'' \\ 3. Теперь у нас для каждого пользователя, у которого будет этот файл, будет затираться история его команд, после того как он выйдет из оболочки. \\ P.S. В свой **.bash_logout** который находится в вашем "хомяке", тоже не забываем это добавить. \\ ===== PAM ===== [[https://bom-bom.nadejnei.net/doku.php?id=pam]] ===== rsyslog ===== ===== sudo ===== 1. После установки утилиты **sudo** вам необходимо отредактировать конфиг __/etc/sudoers__. Для этого вводим команду **visudo**:\\ Defaults env_keep += "HOME" #У каждого пользователя по дефолту будет своя домашняя директория а не /root Defaults logfile=/var/log/sudo.log, log_year #Вести запись тех, кто выполнил команду или повысил свои привилегии через sudo. Хранить логи в течении года Defaults mailto=admin@domain.com, mail_badpass, mail_no_user, mail_no_perms #отправлять по почте уведомления о тем, кто ввёл неправильный пароль, либо неизвестный пользователь пытался выполнить команду/заход из под sudo Defaults editor=/usr/bin/vim #При использовании visudo будет задействован этот редактор Defaults timestamp_timeout = 0 #В дальнейшем не запоминать удачный ввод пароля для пользователя. Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" #Инициализируем переменную PATH User_Alias ADMINS=user1,user3,mydak #Перечисляем в переменной ADMINS пользователей, которые будут иметь наивысшие привилегии root ALL=(ALL:ALL) ALL ADMINS ALL=(ALL) ALL #Собственно прописываем то, что у пользователей из ADMINS будет максимальные привилегии. user3 ALL=(ALL:ALL) NOPASSWD:/sbin/iptables -vnL #Пользователю user3 разрешено без ввода пароля использовать эту команду (удобно когда нужно дать определённые привилегии для какого-нибудь демона) 2. Далее убедитесь в том, что в конфиге не присутствует никаких лишних строк, которые открывают дополнительные привилегии для пользователей. \\ ====== Контроль изменений в файловой системе ====== ===== etckeeper ===== 1. **etckeeper** - это аналоги системы контроля версий для всей директории __/etc__, которая позволяет нам локально, при помощи **git**, **bzr** или **darcs** отслеживать изменения.\\ 2. Скачиваем из дефолтных репозиториев apt-get install etckeeper \\ **WARNING**: Предварительно убедитесь, что ни в одной из директорий в __/etc__, нет локальных репозиториев с git`ом. А иначе будет масса проблем в работе etckeeper, из-за того, что он устанавливает свой репозиторий прямо в __/etc/.git__\\ 3. После установки. Мы теперь можем просто зайти в директорию __/etc__ и при помощи [[http://task.struct.su/doku.php?id=%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B_%D1%81_git|git]] просматривать изменения 4. Для CentOS 5 создавать репозиторий надо самостоятельно после установки:# **cd /etc && etckeeper init && git commit -am "init /etc"** ===== changetrack ===== 1. Устанавливаем утилиту: **apt-get install changetrack**\\ 2. В конфиге **/etc/changetrack.conf** перечисляем файлы и директории для контроля изменений. Например:\\ /etc/aliases\\ /etc/init.d/*\\ /etc/cron.daily/*\\ /etc/passwd\\ ...\\ /etc/sysctl.conf\\ 3. В конфиге **/etc/default/changetrack** в поле **PARAMS=** редактируем опции: \\ **-o root** <- Указываем на чей почтовый ящик присылать письмо с уведомлением об изменениях\\ **-f changetrack@`/bin/hostname -f`** <- Указываем данные отправителя(Поле FROM)\\ 4. Проверки происходят раз в час, смотри скрипт **/etc/cron.hourly/changetrack**.\\ ===== tripwire ===== ====== Антивирусы ====== ===== clamav/clamd ===== ===== rkhunter/chkrootkit ===== http://rkhunter.sourceforge.net/ Программа предназначена для обнаружения руткитов и уязвимых мест в вашей системе. \\ Все примеры указаны для дистрибутива Debian 8 \\ 1. Установливаем rkhunter: **# apt-get install rkhunter** \\ 2. Редактируем основной конфиг **/etc/rkhunter.conf**: \\ **UPDATE_MIRRORS=1** <- Ибновляем список зеркал\\ **MIRRORS_MODE=0** <- Использовать любой вид зеркал (локальный и удалённый)\\ **MAIL-ON-WARNING=admin@example.com** <- Вписываем свой почтовый ящик, куда будут складироваться письма о том, что на хосте обнаружены уязвимости\\ **MAIL_CMD=mail -s "[rkhunter] Warnings found for ${HOST_NAME}"** <- Комманда использующаяся для отправки писем\\ **TMPDIR=/var/lib/rkhunter/tmp** <- Директория для увременных файлов rkhunter\\ **DBDIR=/var/lib/rkhunter/db** <- Директория с базами rkhunter\\ **SCRIPTDIR=/usr/share/rkhunter/scripts** <- Директория для скриптов rkhunter\\ **BINDIR=/bin /usr/bin /sbin /usr/sbin /usr/local/bin +/usr/local/sbin** <- Указываем директории с бинарными программами\\ **LANGUAGE=en** <- Указываем язык\\ **UPDATE_LANG="en"** <- Указываем какой язык будет обновляться\\ **LOGFILE=/var/log/rkhunter.log** <- Указываем путь к лог файлу rkhunter\\ **AUTO_X_DETECT=1** <- Указываем стоит ли обнаружать X сеансы и приложения\\ **WHITELISTED_IS_WHITE=1** <- Подсвечивать белым цветом исключения при запуске в списке сканирования\\ **ALLOW_SSH_ROOT_USER=no** <- Указываем должен ли логиниться root пользователь в систему через SSH\\ **ALLOW_SSH_PROT_V1=0** <- Разрешено ли использование SSH версии 1\\ **SSH_CONFIG_DIR=/etc/ssh** <- Директория с конфигами OpenSSH\\ **ENABLE_TESTS=ALL** <- Использовать все тесты\\ **DISABLE_TESTS=hidden_procs deleted_files packet_cap_apps** <- Список не нужных нам тестов\\ **HASH_CMD=SHA512** <- Выбираем хэш функцию для контрольных сумм\\ **PKGMGR=DPKG** <- Указываем дефолтный низкоуровневых пакетный менеджер\\ **SCRIPTWHITELIST=/usr/sbin/adduser** <- Добавляем скрипт в исключение (орёт на то когда в директории для бинарей лежат скрипты)\\ **ALLOWHIDDENDIR=/etc/.git** <- Указываем разрешённые скрытые директории\\ **ALLOWHIDDENFILE=/etc/.gitignore** <- Указываем разрешённые скрытые файлы\\ **SCAN_MODE_DEV=THOROUGH** <- "Грубый" режим сканирования\\ **ALLOWPROMISCIF=eth0** <- Указываем сетевые интерфейсы на которых разрешено использовать Promisc режим\\ **PHALANX2_DIRTEST=1** <- Сканировать все директории в **/etc** и **/usr**\\ **STARTUP_PATHS=/etc/init.d /etc/rc.local** <- Директории с init скриптами и скриптами автозапуска\\ **PASSWORD_FILE=/etc/shadow** <- Файл с паролями\\ **UID0_ACCOUNTS=toor** <- Указываем пользователей с выставленным нулевым UID, если такие есть в системе\\ **SYSLOG_CONFIG_FILE=/etc/rsyslog.conf** <- Путь к syslog конфигу\\ **ALLOW_SYSLOG_REMOTE_LOGGING=0** <- Разрешена ли удалённая пересылка сислог сообщений\\ **SUSPSCAN_DIRS=/tmp /var/tmp** <- Директории разрешённые для записи всем пользователям\\ **SUSPSCAN_TEMP=/dev/shm** <- Разрешённые временные файлы для SUSPSCAN проверки\\ **OS_VERSION_FILE=/etc/debian_version** <- Файл с названием и версией дистрибутива\\ **PORT_WHITELIST=TCP:33433 UDP:44444** <- Список разрешённых портов в режиме прослушки из верхнего диапазона\\ **WARN_ON_OS_CHANGE=1** <- Высылать предупреждения об изменении версии операционной системы\\ **UPDT_ON_OS_CHANGE=0** <- Обновлять базы изменений, если произошло обновление системы\\ **SHARED_LIB_WHITELIST=/lib/snoopy.so** <- Разрешённые динамически подгружаемые библиотеки \\ **SCANROOTKITMODE=THOROUGH** <- Грубый режим антируткит проверки\\ **UNHIDE_TESTS=sys** <- Режим unhide проверки\\ **DISABLE_UNHIDE=1** <- Отключить ли UNHIDE сканирование (я отключаю из-за частеньких ложных срабатываний)\\ **INSTALLDIR=/usr** <- Основная директория для установки новых программ в системе\\ 3. Теперь открываем файл **/etc/default/rkhunter**\\ **CRON_DAILY_RUN="true"** <- Запускать ли rkhunter каждый день\\ **CRON_DB_UPDATE="true"** <- Автозапуск обновлений баз\\ **DB_UPDATE_EMAIL="false"** <- Высылать уведомления о статусе обновления баз\\ **REPORT_EMAIL="admin@domain.com"** <- Указываем почтовый ящик на который будут приходить уведомления от ужудневного сканирования\\ **NICE="0"** <- Сказываем nice приоритет для rkhunter\\ 4. Теперь нам необнодимо одновить определения rkhunter введя комманду: **rkhunter --propupd**\\ 5. Список полезных файлов и основных комманд: \\ Файлы: \\ **/etc/cron.daily/rkhunter** <- Основной скрипт автозапуска\\ **/var/lib/rkhunter/db/mirrors.dat** <- Файл где указан путь к зеркалам rkhunter\\ **/var/lib/rkhunter/db/rkhunter.dat** <- Основной файл где копится информация о состоянии фашей системы\\ **/var/lib/rkhunter/db/backdoorports.dat** <- Список подозрительных портов\\ **/var/lib/rkhunter/db/programs_bad.dat** <- Список старых версий программ\\ Комманды: \\ **rkhunter --update** <- Ручное обновление баз\\ **rkhunter --propupd** <- Обновление определений\\ **rkhunter --check --sk** <- Подробный вывод о сканировании\\ **rkhunter --check --sk --nomow --rwo** <- Запустить сканирование без отправки уведомления на почту и вывести только информацию о warning\\ **rkhunter --list tests** <- Список доступных тестов\\ ====== KeyLogger`s ====== ===== snoopy ===== 1. Устанавливаем snoopy: \\ 2. **apt-get install snoopy** либо качаем отсюда [[http://sourceforge.net/projects/snoopylogger/|repo]] \\ 3. После установки у вас в __/etc__ появится новый файл __ld.so.preload__ в котором будет прописан путь в данной библиотеке. И теперь все действия наших пользователей будут логироваться в __/var/log/auth.log__ (deb) или __/var/log/secure__ (rpm)\\ 4. Snoopy работает как динамически подгружаемая библиотека, что бы увидеть её, мы можем в текущем сеансе ввести **lsof | grep snoopy**\\ ===== auditd ===== ====== Фаерволы ====== ===== iptables ===== ===== pf (FreeBSD) ===== ===== ipfw (FreeBSD) ===== https://bom-bom.nadejnei.net/doku.php?id=ipfw ===== shorewall ===== ====== HIDS/IDS ====== ===== OSSEC ===== Про OSSEC будет отдельная статья, так как OSSEC это куда более "глобальный" инструмент, чем локальное отслеживание изменений.\\ ===== SNORT ===== Про Snort будет отдельная статья \\ ====== Шифрование ====== ===== GPG ===== ===== cryptsetup ===== https://bom-bom.nadejnei.net/doku.php?id=luks_and_nuke ===== tcplay ===== https://github.com/bwalex/tc-play Программа для шифрования базирующаяся на TrueCrypt \\ ===== veracrypt ===== http://veracrypt.codeplex.com/ ===== truecrypt ===== http://truecrypt.sourceforge.net/ ===== Стеганография ===== ==== snowdrop ==== http://community.linuxmint.com/software/view/snowdrop http://lcamtuf.coredump.cx/ ==== steghide ====