Как отслеживать действия суперпользователя

21

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

В частности, я ищу эти функции:

  • А) Регистрация нажатий клавиш на защищенном сервере системного журнала
  • Б) Возможность воспроизведения сессий оболочки (что-то вроде сценария воспроизведения)
  • C) В идеале это должно быть что-то невозможное (или довольно сложное), чтобы обойтись без физического доступа к серверу.

Подумайте об этом с точки зрения безопасности / аудита, в среде, где разным системным администраторам (или даже третьим лицам) необходимо разрешать выполнять привилегированные операции на сервере.

Каждый администратор будет иметь свою собственную номинальную учетную запись, и каждый интерактивный сеанс должен быть полностью зарегистрирован, с возможностью его повторного воспроизведения в случае необходимости (например, если кто-то использует mc для удаления или изменения критических файлов, этого будет недостаточно для знать, что этот человек выполнил команду mc; должен быть способ точно увидеть, что было сделано после запуска mc).

Дополнительные примечания :

  1. Как указывает Womble, возможно, лучшим вариантом будет не входить в систему с правами суперпользователя для внесения изменений на серверах, а делать это через систему управления конфигурацией. Итак, давайте предположим ситуацию, когда у нас нет такой системы, и нам нужно предоставить доступ на уровне root разным людям на одном сервере .
  2. Я совершенно не заинтересован в том, чтобы делать это тайно: каждый, кто входит в систему на сервере с привилегиями root, будет полностью осведомлен о том, что сеанс будет записан (так же, как, например, операторы центра обработки вызовов знают, что их разговоры записывается)
  3. Никто не будет использовать общую учетную запись суперпользователя («root»)
  4. Я знаю о ttyrpld, и он, кажется, делает то, что я ищу. Но прежде чем идти по этому пути, я хотел бы знать, можно ли решить эту проблему с помощью неизмененного ядра. Я хочу знать, существуют ли какие-либо инструменты для Debian в частности (или для Linux в целом), которые позволяют проводить полный аудит учетных записей суперпользователя без исправления оболочки или ядра.
mfriedman
источник
2
(берет стул и попкорн) это должно быть хорошо ...
Эйвери Пейн
+1 ... думал точно так же. LOL
KPWINC
Также обратите внимание на этот связанный вопрос: serverfault.com/questions/46614/…
sleske
Я все еще думаю, что вы должны использовать систему управления конфигурацией. (кукольный / cfengine / chef / systemimager / chef / etc ...)
KevinRae,
Кевин, я согласен с тобой. См. Например мой комментарий к ответу womble: serverfault.com/questions/50710/… . К сожалению, это не вариант в этой среде, и поэтому я попросил предположить сценарий, когда система управления конфигурацией недоступна. В любом случае, я хотел бы поблагодарить вас за ваш отзыв на эту тему.
mfriedman

Ответы:

8

Для сред с несколькими администраторами просто не используйте root - никогда, если это возможно.

Используйте sudo для всего - sudo чрезвычайно легко настраивается и легко регистрируется.

Регистрируйте любые / все логины или su для получения root-прав и исследуйте их, как кто-то затем нарушает ваши установленные правила.

DisabledLeopard
источник
3
Да, Судо получили большое протоколирование - весь этот «Уомбл RAN / бен / ш , как корень» запись в режиме реальная полезна. Без управления конфигурацией люди всегда будут становиться суперпользователем для выполнения задач администратора, а тот, кто хотел сделать что-то гнусное, мог просто сделать свое дело в том же сеансе root, что и выполнение правильной задачи. Идеальное покрытие.
womble
Политика должна не поощрять простое указание в качестве root, чтобы это было хорошо, конечно, и вы не сможете узнать, что они сделали после того, как покинули резервацию, но это сузит список подозреваемых ...
dmckee
2
Политика: "sudo / bin / sh" = уволен / расследован. Довольно понятное, довольно простое решение.
Карл Кацке
5
Есть так много способов получить оболочку из программ, которые законно должны будут запускать люди (например, из sudo vi), поэтому нет смысла просто блокировать 'sudo /bin/sh'... Если вы не уверены, что вы заблокировав все возможные методы, вы просто должны были бросить вызов, чтобы найти более непонятные способы. в любом случае: а) иногда требуется sudo / bin / sh, и б) это проблема управления, а не технология.
Cas
Крис подчеркивает: проблема управления, а не технология.
Карл Кацке
2

Во-первых, какой тип доступа пользователя root вы хотите отслеживать? Глупые админские ошибки или злой инсайдер? Первый - вам понадобится хорошее решение для управления конфигурацией, как уже было предложено. Последнее - если они знают, что делают, вы можете только надеяться, что поймаете достаточно, чтобы указать, что что-то произошло, заслуживающее расследования. Вам просто нужно знать, что началась какая-то форма несанкционированной деятельности, и быть предупрежденным об этом. Если они сообразительны, они отключат большую часть логирования, которое вы встраиваете (изменяя состояние сервера или привлекая их собственные инструменты), но, надеюсь, вы сможете поймать начало инцидента.

При этом я предлагаю несколько инструментов, которые вы можете использовать. Во-первых, начните с хорошей политики sudo (которая уже была предложена). Во-вторых, проверьте sudoshell, если вам нужно предоставить этим администраторам доступ к корневой оболочке. В-третьих, возможно, ваша лучшая ставка (хотя и самая интенсивная) - изучить аудит ядра Linux.

romandas
источник
+1 Спасибо за предложение sudoshell и специально за упоминание системы аудита ядра Linux - это может стать отличным дополнением к тому, чего я пытаюсь достичь.
Мфридман
2

То, что вы могли бы сделать, это использовать эту библиотеку для sudo, дать каждому свой useraccount и поместить sudo -i в профиль everyones. Таким образом, они получают мгновенный root-доступ, и каждая команда, которую они используют, регистрируется.

blauwblaatje
источник
+1 Я не знал об этой библиотеке. Спасибо, что поделились!
mfriedman
1

У них есть root. Лучшее, на что вы можете надеяться, это, по крайней мере, увидеть, когда они решили вырваться из вашей маленькой контрольной утопии, но кроме того, что они сделали, никто не догадывается.

«Лучший» вариант, который я могу придумать, - это обязать использовать повсеместную автоматизацию и управление конфигурацией, а также управлять своими манифестами с помощью системы контроля версий и развертывать обновления через нее. Затем предотвратите фактический вход root на серверы. (Экстренный доступ «о боже, я что-то сломал» может быть предоставлен с помощью пароля или ключа SSH, который не распространяется и изменяется после каждого использования, и каждый может наблюдать за сисадмином, который облажался, чтобы убедиться, что он этого не делает. изменить что угодно).

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

romble
источник
Я согласен с вами. Лучшим вариантом было бы не иметь людей, выполняющих вход с правами root для выполнения изменений на серверах, а вместо этого делать это через систему управления конфигурацией. Я считаю ваши комментарии полезными для уточнения и уточнения моего вопроса.
mfriedman
1

Как уже говорили другие, практически нет возможности регистрировать пользователей с полным доступом к root так, как они не могут отключить, но если вы используете Debian / Ubuntu, взгляните на Snoopy , который довольно близок к тому, что вы хотите

snoopy - это просто разделяемая библиотека, которая используется в качестве оболочки для функции execve (), предоставляемой libc, чтобы регистрировать каждый вызов syslog (authpriv). Системные администраторы могут найти Snoopy полезным в таких задачах, как легкий / тяжелый мониторинг системы, отслеживание действий других администраторов, а также хорошее представление о том, что происходит в системе (например, Apache запускает сценарии CGI).

theotherreceive
источник
Спасибо за ответ. Поддерживает ли это запись нажатий клавиш или просто ввод команд?
mfriedman
0

Я согласен с комментариями disabledleopard об использовании sudo для всего. Это, безусловно, делает вещи немного проще для входа.

Я также периодически добавляю резервное копирование файла истории bash. Казалось бы, часто упускают из виду, но иногда могут быть отличным источником информации ... просто спросите Goldman Sachs. ;-)

http://www.guardian.co.uk/business/2009/jul/12/goldman-sachs-sergey-aleynikov

KPWINC
источник
2
у меня есть сценарий .bash_logout, который делает копию истории с отметкой времени в /var/lib/history/$user.$tty-or-IP.$yymmddhhss, если бы я заботился больше, я бы настроил учет процессов или инструменты аудита ... но на самом деле это не ради безопасности, поэтому я могу выяснить, кто сделал что-то глупое, и сказать им: а) не делать это снова и б) как это сделать правильно. повышение уровня подсказки юниоров - гораздо более важная проблема, чем доверие.
Cas
1
Напоминает мне историю о том, как молодой продавец-распродажа обанкротился. Он ожидает, что босс уволит его, а босс говорит: «Черт возьми, это просто стоило мне миллион долларов, чтобы обучить вас!» Я чувствую, как «уровень подсказки» юниоров растет, когда мы говорим. ;-)
KPWINC
0

Это было бы сложно ...

root может запускать тщательно проверенные сценарии, которые могут нарушить все меры безопасности (убить процессы мониторинга), уничтожить файлы журнала / обрезать их и т. д. ... Но все же ...

Предполагая, что несколько администраторов, которым предоставлены привилегии root, работают как команда. И root может убить любой процесс мониторинга. И, к сожалению, этот логин / пароль становится публичным. Или они получают нежелательную компанию.

Создание нескольких учетных записей root с UID 0, хотя это и не рекомендуется, может быть применимо здесь.

В / etc / ssh / sshd_config Изменение строки на: PermitRootLogin no

Рекомендовано. Таким образом, здесь пользователь входит в систему, используя свою обычную учетную запись (отметка даты и времени регистрируется вместе с (возможно, подделка IP-адреса)), а затем переключается на root. используя команду su

И прямой вход в систему как root предотвращен, как это.

Мы должны думать, что корень не может сделать здесь.

Судо должно быть хорошо. Резервное копирование файлов конфигурации каталога / etc должно быть хорошим. / var / directory Файлы журнала должны периодически отправляться по электронной почте или храниться в отдельной NFS.

Как насчет написания сценариев, которые интегрируют API-интерфейсы от компаний Mobile Gateway, которые группируют SMS-сообщения на все мобильные телефоны корневых пользователей, что один из них не дома для работы. Я знаю, что это будет раздражать, но все же.

О взломе SSH в основном не может быть и речи.

Сиддхарт Бхаттачарья
источник
0

У нас есть следующие настройки на сайте клиента:

  • Аналогично - открыть для аутентификации с помощью Kerberos в AD (личные учетные записи)
  • Авторизация только для определенных групп AD администраторов Unix
  • группа sudoers == группа AD
  • Агенты OSSEC HIDS на каждом сервере и менеджер на защищенном сервере
  • OSSEC Web UI
  • Splunk 3 с Splunk-для-OSSEC

Он будет регистрировать каждое использование sudo на серверах, а также отслеживать любые изменения в файлах, установку пакетов, подозрительные процессы и т. Д.

chmeee
источник
0

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

Sshd на терминальных серверах исправлен с помощью http://www.kdvelectronics.eu/ssh-logging/ssh-logging.html , отлично работает, но долгое время не обновлялся. Я немного изменил его для работы с openssh 4.7, но не смог сделать это с 5.1. Пропатчены sshd segfaults, и пока у меня нет достаточно времени, чтобы это исправить, я почти переключился на ttyrpld.

Дима медведев
источник
0

Пока это то, что у меня есть:

  • sudosh : кажется, поддерживает A и B (хотя не совсем уверен насчет A)
  • Sudoscript : кажется, поддерживает B (Sudoscript имеет компонент, называемый sudoshell, и если это то, что предложил romandas, спасибо за подсказку)
  • Snoopy Logger или sudo_exetrace : не совсем то, что я ищу, но может быть хорошим дополнением (спасибо theotherreceive и blauwblaatje за эти ссылки)

Знаете ли вы какие-либо другие подобные инструменты, которые не включают исправления ядра или других компонентов системы?

mfriedman
источник