⚓ Обнаружение вторжения с помощью git |

⚓ Обнаружение вторжения с помощью git

Мануал

Как убедиться, что все наши системные бинарники и файлы конфигурации не были взломаны злоумышленником?

Наверняка вы скажете, что можно регулярно запускать rkhunter или AIDE или через cron, но это лишь покажет вам, что контрольная сумма MD5 была изменена.

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

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

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

В этой серии статей я покажу вам возможности git, sudo и gpg для создания нескольких уровней защиты, а также полностью автоматизированной и понятной системной документации.

Предостережения

Прежде чем вы соберетесь сделать git проект всей вашей файловой системы, необходимо учесть несколько важных аспектов.

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

Во-вторых, вы наверняка захотите отслеживать только важные вещи и не хотите, чтобы вас беспокоили файлы истории vim или shell или даже быстро растущие файлы логов.

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

Примечание о совместимости

В примере будет использоваться CentOS.

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

Git-репозиторий

Прежде всего: Создайте новый git-репозиторий в самом корне вашей файловой системы.

cd /
git init
touch /.gitignore

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

chown root:root /.git
chown root:root /.gitignore
chmod 700 /.git
chmod 600 /.gitignore

Перед тем как добавить все в git, необходимо заполнить .~/gitignore.

Здесь представлена очень базовая настройка, которая все еще доступна для новичков:

#######################################################################
# User defined wants
#######################################################################

# Comment this line out if you want to see sudo activity
/var/db/sudo/*


#######################################################################
# Standard Excludes
#######################################################################

######## 1.0) base ########
#/bin
/dev/
/home/
/lib
/lib64
/lost+found/
/media/
/mnt/
/opt/
/proc/
/run/
#/sbin
/shared/
/srv/
/sys/
/tmp/

######## 2.0) /boot ########
/boot/vmlinuz*
/boot/*.img
/boot/*.hmac
/boot/*.gz

######## 3.0) /etc ########
/etc/selinux/targeted/modules/active/modules/*.pp

######## 4.0) /root ########
/root/.bash_history
/root/.viminfo

######## 5.0) /usr ########
#/usr/bin/
/usr/games/
/usr/include/
/usr/lib/
/usr/lib64/
/usr/libexec/
#/usr/sbin/
/usr/share/
/usr/src/
/usr/tmp

######## 5.1) /usr/local ########
#/usr/local/bin/
/usr/local/games/
/usr/local/include/
/usr/local/lib/
/usr/local/lib64/
/usr/local/libexec/
#/usr/local/sbin/
/usr/local/share/
/usr/local/src/

######## 6.0) /var ########
/var/cache/
/var/log/
/var/mail/
/var/spool/
/var/tmp/
/var/www/

######## 6.1) /var/lib ########
/var/lib/git*
/var/lib/pear/
/var/lib/logrotate.status
/var/lib/mysql/
/var/lib/ntp/drift
/var/lib/plymouth/boot-duration
/var/lib/php/session
/var/lib/postfix/master.lock
/var/lib/rpm/
/var/lib/systemd/random-seed
/var/lib/tripwire/*
/var/lib/yum/history/
/var/lib/yum/yumdb/
/var/lib/NetworkManager/

Примечание:

  • Удалите комментарий из каталогов */bin и */sbin, если вы хотите отслеживать только изменения конфигурации и не добавлять системные бинарники в индекс.
  • Если вы хотите отслеживать и разделяемые библиотеки, вам необходимо настроить различные секции lib.
  • Далее настройте gitconfig в соответствии с вашими потребностями, а затем добавьте файлы и сделайте первый коммит.
git add .
git commit -am 'Initial commit'

Проверьте репозиторий

Поскольку это ваш первый коммит, вы должны тщательно проверить все проиндексированные файлы, чтобы увидеть, не пропущено ли что-то:

git ls-tree --name-only -r HEAD

Также выполните обратную проверку и посмотрите все игнорируемые файлы:

git ls-files -o -i --exclude-standard

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

Обнаружение аномалий

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

  • Станьте root
  • Перейдите в корень файловой системы
  • Проверьте статус git и журнал git

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

Ежедневная работа

Что бы вы ни делали, будь то обновление или просто изменение конфигурации, старайтесь быть строгими к себе: Делайте одну задачу за другой и фиксируйте каждую отдельную задачу (например, добавление нового vhost или обновление php) в индекс отдельно.

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

Устранение неполадок

Если вы добавили новые файлы или папки в gitignore и они не распознаются после коммита, вам, вероятно, придется перестроить индекс.

Просто удалите все кэшированные файлы и добавьте их заново:

git rm -r -f --cached .
git add .
git commit -am 'Meaningful commit message'

см. также:

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий