Linux security hardering
1. Открываем конфиг /etc/ssh/sshd_config
P.S. Предварительно зайдите на сервер из удалённой или локальной консоли
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 находим файл .bashlogout и записываем туда следующие строки:
history -c
/bin/rm -rf ~/.bashhistory''
3. Теперь у нас для каждого пользователя, у которого будет этот файл, будет затираться история его команд, после того как он выйдет из оболочки.
P.S. В свой .bash_logout который находится в вашем «хомяке», тоже не забываем это добавить.
===== PAM =====
https://bom-bom.nadejnei.net/doku.php?id=pam
===== rsyslog =====
===== sudo =====
1. После установки утилиты sudo вам необходимо отредактировать конфиг /etc/sudoers. Для этого вводим команду visudo:
<file bash visudo>
Defaults envkeep += «HOME» #У каждого пользователя по дефолту будет своя домашняя директория а не /root
Defaults logfile=/var/log/sudo.log, logyear #Вести запись тех, кто выполнил команду или повысил свои привилегии через sudo. Хранить логи в течении года
Defaults mailto=admin@domain.com, mailbadpass, mailnouser, mailnoperms #отправлять по почте уведомления о тем, кто ввёл неправильный пароль, либо неизвестный пользователь пытался выполнить команду/заход из под sudo
Defaults editor=/usr/bin/vim #При использовании visudo будет задействован этот редактор
Defaults timestamptimeout = 0 #В дальнейшем не запоминать удачный ввод пароля для пользователя.
Defaults securepath=«/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 разрешено без ввода пароля использовать эту команду (удобно когда нужно дать определённые привилегии для какого-нибудь демона)
</file>
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]] просматривать изменения
===== 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 либо качаем отсюда 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 ====