Во времена динозавров, мне удалось поработать в профильных компаниях, которые занимаются информационной безопасностью и тестированием инфраструктуры клиентов на проникновение.
Однажды обратился клиент, которому злые лоси вынесли инфраструктуру. И когда мы полезли разбирать инцидент, на серверах отсутствовали логи, их просто не было. Их не удалили, их отключили. Тогда еще никто не парился со всякими ELK, да и может таких решений и не существовало вовсе.
В общем тут мои глаза и раскрылись, а зачем отключают логи? Правильно, чтобы что-то скрыть. Вектор атаки простой - заимел рута, отключил логи, зачистил то что было и делай свои грязные делишки.
И мне стало интересно, а как это провернуть? А если появился интерес, надо тыкать палкой.
Сейчас будем решать эту задачу. Как именно, понятия не имею. Будем экспериментировать.
Отключаем логирование
Цель - папка var/log всегда должна быть пустая и чтобы Linux машина не встала раком. Дополнительно обуздаем journald и history от bash.
Первое, что я проверил, удалил все и запретил вообще любую запись в var/log через chmod 000, но после перезагрузки сервера, всё вернулось на свои места. Права на папку стали 755. Однако…
Теперь попробуем установить на папку специальный атрибут:
Перезагружаемся. Хе! Сработало. В папке пустота! На этом можно двигать задачу в done.
После установки этого атрибута, у тебя начнет сыпать ошибками apt, но пакеты оно будет ставить, так что имей это ввиду. Это фиксится добавлением строчки Dir::Log "/путь"; в apt.conf.d.
НО, не все так просто. Если ввести:
Мы снова видим логи. Но теперь уже на экране. А раз они на экране, значит они где-то лежат и на диске. Давай искать.
Зачищаем этот системный журнал:
Ага, на экране видим путь, то что оно зачистило, это /run/log/journal/.
Зачистка это хорошо, но логи все равно будут писаться. Надо отключить эту шляпу на глобальном уровне.
Открываем файл /etc/systemd/journald.conf и добавляем:
Перезагружаем службу и удаляем остатки:
Теперь если ввести:
Получим такое сообщение: No journal files were found. Прекрасно!
Так, если в системе установлен rsyslog или подобное, то дизейблим и его:
Основное сделали. Осталось логирование в .bash_history. Зачищаем и накидываем атрибут на запрет записи:
Либо добавляем в .bashrc строчку: HISTSIZE=0, с ней будет нативнее и без костылей с атрибутом.
Делаем финальную перезагрузку. Ну вот и всё, задача выполнена. Система зачищена от логирования. По любому я что-то упустил, поэтому жду с нетерпением твои комментарии.
Вообще все эти способы очень грубые и топорные. Было бы намного изящнее сделать решение, которое удаляет из логов только то, что нужно удалить. Логирование работает в штатном режиме, но критичные данные в логи не попадают.
Всех обнимаю, хорошего дня!
Прошу отметить, что предоставленная здесь информация предназначена исключительно для образовательных и информационных целей. Я не призываю и не одобряю незаконные действия, и использование этой информации для незаконных целей запрещено. Читатели должны соблюдать законы своей страны и использовать свои навыки с уважением к этическим нормам и законам.
tags: #bash #linux
—
💩 @bashdays
Однажды обратился клиент, которому злые лоси вынесли инфраструктуру. И когда мы полезли разбирать инцидент, на серверах отсутствовали логи, их просто не было. Их не удалили, их отключили. Тогда еще никто не парился со всякими ELK, да и может таких решений и не существовало вовсе.
В общем тут мои глаза и раскрылись, а зачем отключают логи? Правильно, чтобы что-то скрыть. Вектор атаки простой - заимел рута, отключил логи, зачистил то что было и делай свои грязные делишки.
И мне стало интересно, а как это провернуть? А если появился интерес, надо тыкать палкой.
Сейчас будем решать эту задачу. Как именно, понятия не имею. Будем экспериментировать.
Отключаем логирование
Цель - папка var/log всегда должна быть пустая и чтобы Linux машина не встала раком. Дополнительно обуздаем journald и history от bash.
Первое, что я проверил, удалил все и запретил вообще любую запись в var/log через chmod 000, но после перезагрузки сервера, всё вернулось на свои места. Права на папку стали 755. Однако…
Теперь попробуем установить на папку специальный атрибут:
sudo chattr +i /var/log
Перезагружаемся. Хе! Сработало. В папке пустота! На этом можно двигать задачу в done.
После установки этого атрибута, у тебя начнет сыпать ошибками apt, но пакеты оно будет ставить, так что имей это ввиду. Это фиксится добавлением строчки Dir::Log "/путь"; в apt.conf.d.
НО, не все так просто. Если ввести:
jorunalctl -f
Мы снова видим логи. Но теперь уже на экране. А раз они на экране, значит они где-то лежат и на диске. Давай искать.
Зачищаем этот системный журнал:
sudo journalctl --rotate && sudo journalctl --vacuum-time=1s
Ага, на экране видим путь, то что оно зачистило, это /run/log/journal/.
Зачистка это хорошо, но логи все равно будут писаться. Надо отключить эту шляпу на глобальном уровне.
Открываем файл /etc/systemd/journald.conf и добавляем:
Storage=none
Перезагружаем службу и удаляем остатки:
sudo systemctl restart systemd-journald
rm -R /run/log/journal/*
Теперь если ввести:
jorunalctl -f
Получим такое сообщение: No journal files were found. Прекрасно!
Так, если в системе установлен rsyslog или подобное, то дизейблим и его:
systemctl stop rsyslog
systemctl disable rsyslog
Основное сделали. Осталось логирование в .bash_history. Зачищаем и накидываем атрибут на запрет записи:
cat /dev/null > ~/.bash_history
sudo chattr +i ~/.bash_history
history -c && history -w``
Либо добавляем в .bashrc строчку: HISTSIZE=0, с ней будет нативнее и без костылей с атрибутом.
Делаем финальную перезагрузку. Ну вот и всё, задача выполнена. Система зачищена от логирования. По любому я что-то упустил, поэтому жду с нетерпением твои комментарии.
Вообще все эти способы очень грубые и топорные. Было бы намного изящнее сделать решение, которое удаляет из логов только то, что нужно удалить. Логирование работает в штатном режиме, но критичные данные в логи не попадают.
Всех обнимаю, хорошего дня!
Прошу отметить, что предоставленная здесь информация предназначена исключительно для образовательных и информационных целей. Я не призываю и не одобряю незаконные действия, и использование этой информации для незаконных целей запрещено. Читатели должны соблюдать законы своей страны и использовать свои навыки с уважением к этическим нормам и законам.
tags: #bash #linux
—