리눅스 PAM을 이용한 백도어

PAM을 악용하여 backdoor 설치하기

By Hong

머신 침투에 성공하고 나면 다음번 접속을 원활하게 하기 위해 백도어를 만들어두는 경우가 있다.

보통 ssh에 내 공개키를 등록하는 방법도 있지만 이번 포스팅에서는 리눅스의 PAM을 이용한 백도어 방법을 적어보겠다.

Hacktricks를 보던 중 흥미로워보였기 때문에 실제로 재현해봤다.

PAM

리눅스에 PAM이라는 서비스가 있는데 유저가 서비스에 접근할 때 인증하는 역할을 하는 것 같다.

예를들어 외부에서 ssh로 리눅스 머신에 로그인하면 PAM의 common-auth라는 설정 내용을 바탕으로 인증이 이루어진다.

이처럼 인증을 요하는 대부분의 서비스는 common-auth 파일을 통한다.

/etc/pam.d에 common-auth파일이 있는데 내용물을 확인해보면 다음과 같다.

common-auth

auth 부분에 pam_unix.so라는 파일을 참조하고 있는 것을 알 수 있다.

그럼 pam_unix.so 파일에 백도어를 심으면 인증할 때 악용할 수 있지 않을까? 라는 아이디어.

조건으로는 root권한의 파일을 수정해야하기 때문에 root 권한을 획득해둘 필요가 있다.

백도어를 위한 코드 수정

실패편

대충 아이디어는 알았기 때문에 직접 소스코드를 수정한다.

pam_unix.so 파일은 c파일을 컴파일해야 만들어지기 때문에 c 소스코드를 수정 할 필요가 있다.

그러려면 pam_unix_auth.c를 수정해야 하는데 리눅스 안에서 c 소스코드를 찾을 수 없었다. 그래서 직접 웹에서 다운받아 오기로 했다.

auth

소스코드를 받아온 후 위와 같이 비밀번호로 hong이 입력되면 무조건 인증에 성공하도록 수정했다.

이제 위의 코드를 컴파일해서 원래 놓여있는 파일과 바꿔치기하면 백도어가 작동할 터.

하지만 컴파일에 필요한 다른 파일들이 많이 필요했다.

컴파일 에러.

https://github.com/coreutils/gnulib/tree/master 파일들 추가

컴파일 에러.

https://salsa.debian.org/josch/pam/-/tree/1.1.8-3.2ubuntu2/m4 추가.

컴파일 에러.

https://github.com/python/cpython/blob/main/aclocal.m4

이것도 추가.

이렇게 하나하나 추가하면 끝이 없을 것 같아서 중도포기.

성공편

컴파일만 성공하면 될 것 같았기 때문에 다른 깃허브 코드들도 찾아봤다.

그러다가 컴파일에 필요한 모든 소스가 준비되어 있는 리포지토리를 발견했다.

깃 클론 후 다시 소스코드 내용 바꾸고 컴파일.

compiled

이번엔 성공! pam_unix.so 파일이 만들어졌다.

이것을 원래 파일이 있던 /usr/lib/x86_64-linux-gnu/security/에 옮겼다.

결과

테스트를 위해 윈도우 머신에서 kali로 ssh접속 해봤다. ssh

비밀번호를 hong으로 했더니 올바른 비밀번호가 아님에도 불구하고 로그인 성공!

log

로그 파일에 hong이라는 비밀번호가 적혀있는 것을 확인.

모든 유저에게 통용되는지 확인하기 위해 새로운 유저를 만들고 다시 해봤다. testuser / testpassword

testuser

이번에도 hong으로 성공!

어떤 유저든 상관없이 비밀번호가 hong이면 무조건 로그인에 성공할 수 있었다.

다만 root로는 로그인 할 수 없었다. 역시 root는 또 다른 설정에 영향을 받는걸까?

아무튼 이렇게 해서 PAM을 이용한 백도어를 검증해봤다.

Share: X (Twitter) Facebook LinkedIn