
Если вредоносная программа без прав root пытается взломать пароль пользователя, к каким файлам паролей или даже к какой части памяти она имеет доступ? Как я могу отслеживать и определять, получает ли вредоносная программа доступ к файлам паролей?
решение1
Большинство дистрибутивов хранят пароли пользователей для входа в /etc/shadow
файл, владельцем которого является root
и 0600
для которого установлены разрешения, то есть только root
он может читать или записывать в этот файл.
При этом некоторые дистрибутивы предоставляют пользователям/программам «брелки». Брелки по сути являются секретной базой данных или файлом для хранения, например, KDE предоставляет KWallet, а такие программы, как Chromium, используют KWallet для хранения паролей и т. д.
Эти связки ключей обычно управляются для каждого пользователя и хранятся с разрешениями 0600, так что только пользователь, которому принадлежит связка ключей, может ее прочитать. Так что если вы беспокоитесь о вредоносном ПО без прав root, пока оно не запущено от имени вашего пользователя, вы в этом отношении в безопасности.
К сожалению, я не могу дать вам исчерпывающий список файлов для мониторинга, поскольку каждый дистрибутив использует свое собственное секретное решение для управления (например, GNOME3 использует Seahorse вместо KWallet). Но я бы обычно следил за изменениями в:
~/.ssh/authorized keys # List of keys accepted during SSH logins
~/.profile # File sourced by your login shell
~/.bash_profile # File sourced by your login shell
~/.bashrc # File sourced by your login shell
Что касается мониторинга, то, пожалуй, самый простой способ его настройки — это использование фреймворка аудита через auditctl
.
Например, это будет контролировать весь доступ к файлу базы данных KWallet Боба: (временное правило, очищается при перезагрузке, если не добавлено в /etc/audit/audit.rules
)
sudo auditctl -w /home/bob/.local/share/kwalletd/kdewallet.kwl -p rwxa
И для проверки доступа:
sudo less /var/log/audit/audit.log
Здесьесть документация, которая может помочь вам создать свои собственные правила
решение2
Если программное обеспечение без прав root пытается изменить пользователей, вы можете проверить это с помощью lastb
команды:
$ sudo lastb -a | more
user pts/2 Mon Aug 10 08:17 - 08:17 (00:00)
root ssh:notty Mon Aug 10 08:17 - 08:17 (00:00) 46.148.201.206
root ssh:notty Mon Aug 10 08:17 - 08:17 (00:00) 161.35.32.43
root ssh:notty Mon Aug 10 08:16 - 08:16 (00:00) 13.68.137.194
root ssh:notty Mon Aug 10 08:16 - 08:16 (00:00) 115.196.179.138
В этом случае я вошел как user
с неверным паролем, используя su
. Вы можете увидеть это в журнале. Вы также можете увидеть, что случайные IP постоянно пытаются угадать мой пароль root через ssh.
Если вы хотите настроить путь inotify или systemd для отслеживания доступа к файлам, то файл для отслеживания — /var/log/btmp
. lastb
использует этот файл.
Если вы хотите проверить успешные входы, то используйте last
. Это отслеживает /var/log/wtmp
:
$ last -a
usera pts/5 Fri Jul 31 03:00 - 03:17 (00:16) 54.36.10.77
usera pts/5 Thu Jul 30 21:36 - 21:37 (00:01) 54.36.10.77
usera pts/5 Wed Jul 29 08:54 - 08:54 (00:00) 127.0.0.1
userb tty7 Tue Jul 21 11:29 still logged in :0
userb tty7 Tue Jul 21 10:59 - 11:29 (00:30) :0
userb tty7 Tue Jul 21 07:27 - 10:58 (03:31) :0
reboot system boot Tue Jul 21 09:27 still running 5.7.0-1-amd64
...
решение3
В Linux вы можете использовать фреймворк inotify и связанные с ним инструменты командной строки для отслеживания доступа к файлам, осуществляемого другим процессом.
Вот страницы руководства для справки
Если вам нужно более сложное поведение, то для этого фреймворка есть привязка к большинству языков сценариев (python, lua и т. д.)