Книга: Linux глазами хакера
4.8. Получение прав root
4.8. Получение прав root
Теперь у нас есть достаточно информации о доступе, и мы можем рассмотреть типичный метод взломщика для получения прав root и способы маскировки в системе.
Допустим, что злоумышленник приобрел возможность выполнять какие-либо системные команды от имени (с правами) root. Сидеть под этой учетной записью будет слишком опасно и вызывающе. К тому же изменять пароль root нельзя.
Как же тогда входить под другим именем и в то же время использовать максимальные права? Давайте вспомним, как Linux работает с правами. В файле /etc/passwd хранятся записи пользователей в следующем виде:
robert:x:501:501::/home/robert:/bin/bash
Третий и четвертый параметры — это идентификаторы пользователя и группы соответственно. Когда на объекты выделяются права, то система сохраняет только идентификаторы. Что это значит? Допустим, что у вас есть пользователь robert с идентификатором 501. Вы создали еще одного пользователя Dan и дали ему такой же идентификатор. Теперь обе учетные записи с одинаковыми ID будут разделять владение одними и теми же объектами.
Что это нам дает? Посмотрите на идентификатор пользователя root — он равен нулю. Именно нулевой ID, а не имя root указывает на максимальные права. Давайте попробуем учетной записи robert, которую мы создали ранее, поставить вручную идентификаторы пользователя и группы, равные 0. В файле /etc/passwd должна получиться строка:
robert:x:0:0::/home/robert:/bin/bash
Теперь войдите в систему под этой учетной записью и попробуйте снова открыть файл /etc/passwd и внести изменения или просто добавить пользователя. Все пройдет успешно, хотя файл /etc/passwd может изменять только root. Так что система проверяет наши права по идентификатору, который в данном случае нулевой и соответствует максимуму.
Так как имя пользователя ничего не значит, я рекомендую удалить пользователя root в файлах /etc/passwd и /etc/shadow, создать новую запись с другим именем, но идентификатором, равным 0. Злоумышленники, которые попытаются взломать ваш сервер, будут пытаться подобрать пароль для администратора root, но т.к. пользователя с таким именем нет, то их действия окажутся безуспешными.
С другой стороны, пользователя root можно оставить, но установить ему идентификатор больше нуля. Я иногда создаю учетную запись root с UID=501 или выше. Увидев эту запись, взломщик думает, что он обладает всеми правами, но в реальности оказывается простым пользователем.
Каждая удачная попытка ввести злоумышленника в заблуждение увеличивает вероятность паники со стороны хакера. Даже профессиональный взломщик, находясь в системе, испытывает большую психологическую нагрузку и боится оказаться замеченным. Среди взломщиков немало людей с неустойчивой психикой. Только не думайте, что это сумасшедшие, все хакеры здоровые люди, просто в момент взлома испытывают перенапряжение, и когда что- либо идет не так, как планировалось, хакер может запаниковать.
Итак, злоумышленник, проникнув в систему, может не пользоваться учетной записью root, а отредактировать любую другую или добавить еще одну с нулевым идентификатором пользователя и получить максимальные права в системе. Если вы являетесь администратором сервера, то должны отслеживать подобные трансформации и останавливать любые попытки изменения идентификаторов.
Команда id
позволяет узнать идентификаторы пользователя. Если она вызывается без параметров, то на экран будут выведены идентификаторы текущего пользователя. Чтобы получить информацию о конкретной учетной записи, нужно выполнить команду:
id имя
Например, давайте посмотрим параметры пользователя robert. Для этого выполним команду:
id robert
Результатом будет строка:
uid=501(robert) gid=501(robert) group=501(robert)
Таким образом в любой момент можно определить идентификатор пользователя и его реальные права.
- 4.1. Права доступа
- 4.2. Управление группами
- 4.3. Управление пользователями
- 4.4. Типичные ошибки распределения прав
- 4.5. Привилегированные программы
- 4.6. Дополнительные возможности защиты
- 4.7. Защита служб
- 4.8. Получение прав root
- 4.9. Расширение прав
- 4.10. Сетевой экран
- 4.11. ipchains
- 4.12. iptables
- 4.13. Замечания по работе Firewall
- 4.14. Запрет и разрешение хостов
- 4.15. Советы по конфигурированию Firewall
- 4.16. Повышение привилегий
- Working As Root
- 6.2. Временное получение полномочий пользователя root
- Глава 11 Права доступа и ID пользователей и групп
- 6.1.5. Получение сведений о часовом поясе
- 11.8. Пересечение минного поля безопасности: setuid root
- Глава 4 Корневой раздел HKEY_CLASSES_ROOT
- Получение данных от серверной программы
- Глава 4 Управление доступом
- Определение, получение и изменение данных
- 9.5.3. Получение платежной ведомости
- 1.1.3.7. Пароль root
- 22.2.2. Получение вспомогательной программы