취약점

공격자는 rootkit 설정 파일들을 서버 관리자가 쉽게 발견하지 못하도록 /dev 디렉터리에 device 파일인 것처럼 위장하는 수법을 많이 이용함

따라서 /dev 안에 일반 파일이 있는 지 확인한다.

 

더보기

/dev 디렉터리

: 논리적 장치 파일을 담고 있는 /dev 디렉터리는 /devices 디렉터리에
있는 물리적 장치 파일에 대한 심볼릭 링크임. 예를 들어 rmt0를 rmto로 잘못 입력한
경우 rmto 파일이 새로 생성되는 것과 같이 디바이스 이름 입력 오류 시 root 파일
시스템이 에러를 일으킬 때까지 /dev 디렉터리에 계속해서 파일을 생성함.

 

 

 

보안조치

◾ 일반 파일 존재 유무를 확인

[root@localhost dev]# find /dev -type f -exec ls -l {} \;

결과는 일반 파일이 없다! 

 

◾ major, minor number을 가지지 않는 device일 경우 삭제

일반적으로 디바이스 파일은 권한앞에 c가 붙고 5번째 인자에 Major Number와 이어서 Minor Number가 붙는다.

만약 위 넘버가 설정되어있지 않다면 비정상적인 파일이라고 볼 수 있다.

더보기

Major Number와 Minor Number

커널이 디바이스 드라이버를 식별하는 번호이며 드라이버가 개별 호출을 식별하는 번호이다.

ex) 프린터를 이용할 경우 주변장치인 프린터는 /dev에 연결되고 디바이스 드라이버에 의해 호출된다.

다만 사용자가 어떤 장치(프린터이냐 스캐너이냐)를 호출한 것인지 알려주는 것이 전자이고 프린터 내에 여러 통신 중 특정 통신을 식별하는 것이 후자이다. 

 

<참조 ssmsig.tistory.com/109 >

 

 

마무리

공격자는 해킹툴을 PC내 특정 저장소에 숨겨두고자 한다. /dev는 해커들이 찾는 피난처라고 보인다.

취약점

1. world writable은 파일의 내용을 소유자나 그룹 외 모든 사용자에 대해 쓰기가 허용된 파일이다.

시스템 파일과 같은 중요 파일에 설정이 될 경우, 악의적인 사용자가 해당 파일을 마음대로 파일을 덧붙이거나 지울 수 있게 되어 시스템의 무단 접근 및 시스템 장애를 유발할 수 있음

따라서 "world writable"파일 존재 시 사용 목적을 확실히 알고 불필요 시 삭제한.

 

2. 리눅스에서 각 사용자는 환경 변수를 가진다. 이 파일을 통해 특정 명령어의 참조 우선순위를 지정할 수 있다.

비인가자가 이 파일을 변조하여 의도되지 않은 명령어 수행이 가능하다.

따라서 관리자 또는 사용자 이외 쓰기 권한이 부여되지 않도록 한다.

 

더보기

환경변수 파일 종류

/etc/profile / (홈디렉토리).profile / .kshrc / .cshrc / .bashrc / .bash_profile / .login / .exrc / .netrc

 

 

보안조치

◾ Other에게 2(쓰기권한)이 부여된 파일을 검색

[root@localhost ~]# find / -type f -perm -2 -exec ls -l {} \;

 

◾ ls -l "환경변수 파일"

쓰기권한이 사용자 이외에 부여되어있는 지 확인

[root@localhost ~]# ls -l .bashrc 
-rw-r--r--. 1 root root 176 12월 29  2013 .bashrc

 

 

취약점

SUID, SGID 파일의 접근권한이 적절하지 않을 경우 roo권한 탈취가 발생할 수 있다.

◾ Sticky bit #

더보기

SUID와 SGID 정의

SUID : 설정된 파일 실행 시, 특정 작업 수행을 위하여 일시적으로 파일 소유자의 권한을 얻게 됨

SGID : 파일 소유 그룹의 권한을 얻게 됨

 

 

실습

일반 유저가 shadow파일을 열람할 수 없다. 하지만 파일의 소유자가 root이면서 SetUID설정이 되면

열람이 가능해진다. 이것은 일시적으로 root의 권한을 부여받기 때문이다.

[test@localhost /]$ cat /etc/shadow
cat: /etc/shadow: 허가 거부
[root@localhost /]# su root
[root@localhost /]# ls -l /usr/bin/cat
-rwxr-xr-x. 1 root root 54080  8월 20  2019 /usr/bin/cat

[root@localhost /]# chmod 4755 /usr/bin/cat
[root@localhost /]# ls -l /usr/bin/cat
-rwsr-xr-x. 1 root root 54080  8월 20  2019 /usr/bin/cat

[root@localhost /]# su test
[test@localhost /]$ cat /etc/shadow
root:$6$kZXbeAFq$bpGsWrBsetT5c5DYgmhQWV3bd3siNkf2dGd6wAd3G.HIthFTVBFoReYd.UUUE47eSi70D5qEuKnAgF81:18712:1:60:7:::

 

 

보안조치

◾ SetUID(4000)와 SetGID(2000)가 설정된 파일을 조회하는 명령어(-4000는 4000 이상을 의미)

[root@localhost ~]# find / -user root -type f \( -perm -4000 -o -perm -2000 \) -exec ls -al {} \;

 

◾ SetUID, SetGID 제거 명령어

[root@localhost ~]# ls -l /usr/bin/vi
-rwsr-xr-x. 1 root root 928056 10월 14 01:13 /usr/bin/vi
[root@localhost ~]# chmod -s /usr/bin/vi
[root@localhost ~]# ls -l /usr/bin/vi
-rwxr-xr-x. 1 root root 928056 10월 14 01:13 /usr/bin/vi

 

 

마무리

SetUID는 권한을 다루기때문에 꼭 확인해주어야 하고 주기적인 검사를 위한 cron을 이용하는 것이 좋다.

 

 

+ Recent posts