find 명령어에 대한 보안 관점에서의 고찰

서버에 로그온 하여 일을 하는 많은 엔지니어들이 사용하는 명령어 중에 find 만큼 옵션이 다양하고 유용한 명령어도 드물다. 더군다나 보안 관련 업무를 수행한다면 find 명령어의 유용함과 필요성은 더 커질 수 밖에 없다.

자격증 시험 중에서도 이 명령어가 매우 중요하게 다루어지는 시험이 있다. 바로 “정보보안기사”다. 2012년 까지는 SIS 라고 불리던 시험이 국가공인자격증으로 업그레이드가 된 시험이 바로 정보보안기사 시험인데 1회 시험에 find 명령어가 14점 배점으로 한문제가 출제될 만큼 보안 담당자나 엔지니어라면 필수적으로 알아야 하는 명령어라고 할 수 있다.

그런 의미에서… 보안관점에서 find 명령어에 대해 정리해본다.

1. setuid/setgid 파일 찾기.

setuid와 setgid는 일반 사용자 계정에서 root 계정이나 시스템소프트웨어의 관리자 계정으로 잠시 권한을 변경할 때 사용되는 파일의 퍼미션이다.

다음과 같이 퍼미션이 설정되어 있다.

-rwsr-sr-x 1 root root     315416 Feb 27  2009 crontab

s로 설정된 부분이 setuid 비트와 setgid 비트다.(퍼미션에 대한 이해가 부족하다면 더 공부하고 오세요. ^^)

위의 crontab 파일과 같이 setuid 비트와 setgid 비트가 설정된 파일을 찾을 땐 다음의 옵션을 주어 실행하면 된다.

find 명령어에 대한 보안 관점에서의 고찰

-perm 은 퍼미션을 기준으로 찾겠다는 의미다.

-4000은 퍼미션이 최소한 ( – ) 4000 인 파일을 찾겠다는 의미다.

“4” 는 setuid를 의미하고 000 은 퍼미션을 의미한다. 즉 setuid가 설정된 모든 퍼미션의 파일을 찾겠다는 의미다. 일반적으로 퍼미션은 755 , 700, 500 등과 같이 표시하니 “4000”은 “최소한 000 보다 큰 퍼미션의 setuid 비트가 설정된 파일” 이라는 의미다.

파일퍼미션과 특수퍼미션

먼저 파일의 퍼미션 각 자리는 각각 8진수로 읽는다. 즉 퍼미션 rwx는 2진수 111로서 7로 읽는다. 즉 각자리에 r이나 w, x가 표시되어 있는 자리는 1로 – 로 표시된 자리는 0으로 대체하는 것이다.이 규칙에 따르면 rwx는 111로 7이 되고 r-x는 101이므로 5, r– 는 100 이므로 4가 된다. 따라서 어떤 파일의 소유자 퍼미션이 7, 그룹 퍼미션이 5, 어덜(other) 퍼미션이 0 이면 750 로 표시하고 rwxr-x— 로 쓴다.
여기에 setuid와 setgid 그리고 sticky 비트까지 3개의 특수한 퍼미션을 또 8진수로 표시하여 일반퍼미션의 앞에써준다. 즉 8진수를 다시 2진수로 풀어 각 비트를 표현하게 되는데 setuid는 4, setgid는 2, sticky 비트는 1의 자리를  on, off 하는 것으로 표현한다.

즉 001 이면 1의 자리만 설정된 것으로 보고 sticky bit 가 설정된 것이고
010 이면 2의 자리 즉 setgid 비트가 설정된 것으로…
100 이면 4의 자리 즉 setuid 비트가 설정된 것으로 표시한다.
111은 setgid, setuid, sticky bit가 모두 설정된 것으로 표시하고 7 이라 읽는다.

결론적으로 파일퍼미션이 755이고 setuid와 setgid가 모두 붙어 있으면… 6755 가 되고
rwsr-sr-x로 표시된다. setuid와 setgid는 실행 퍼미션과 함께 와야 하므로 x 자리에 s로 s로 표시하는 것으로 대체한다.

만약 find 명령을 이용해 setuid, setgid 두개의 비트가 설정된 파일을 찾겠다면 다음과 같은 명령을 사용하면 된다.

find 명령어에 대한 보안 관점에서의 고찰

-6000 은 setuid 4와 setgid 2 그리고 최소 퍼미션 000 으로 조합된 것으로 이해하면 된다.

그렇다면.. setuid와 setgid 중 어느 하나라도 설정된 파일을 모두 찾으려면 어찌해야 할까?

다음과 같이 -o 옵션으로  묶어주면 된다.

find 명령어에 대한 보안 관점에서의 고찰

2. 파일의 최종 수정일자 찾기

보안의 관점에서 파일이 마지막으로 수정된 날짜는 무척 중요한 의미를 갖는다. 처음 서버에 운영체제를 설치할 때 생성되고 이후에 패치를 적용한 적이 없는데 운영체제의 특정 파일이 수정되었다면 그 파일은 운영체제의 명령어를 가장한 루트킷일 가능성이 높다.  또한 운영체제의 보안에 취약한 설정파일이 최근에 변경되었다면 또한 해킹의 시도일 가능성이 높다.

이때 사용할 수 있는 옵션은 모두 세개가 있다.

-mtime  :  파일의 내용이 수정된 날의 수다. (일자)
-ctime  :  파일의 속성이 수정된 날의 수다. (퍼미션, 모드 등)
-atime  :  마지막 접근(읽기, 디렉토리에 접근 포함)한 날의 수다.

위의 옵션중에서가장 중요한 것은 -mtime 이다. 즉 파일이 언제 수정되었느냐 하는 것을 기준으로 찾는 것이다. 홈페이지 파일들에 대한 수정일자, 운영체제 파일이 마지막으로 수정된 것이 언제냐를 판단하는 것이다.

만약 오늘부터 과거 10일 이내에 수정된 파일을 찾고자 한다면 다음과 같은 명령으로 찾을 수 있다.

find 명령어에 대한 보안 관점에서의 고찰

위의 명령에서 -mtime 뒤의 숫자가 바로 “10일 이내” 라는 의미다.

-10 은 지금 현재부터 10일 이내… 즉 오늘부터 어제, 그제, 그그제~~ 해서 10일이다.

10 은 오늘부터 딱~10일 전에 수정된 것.

+10 은 10일 이전부터 더 오래전에 수정된 것 이라는 의미다.

지금까지 보안 관점에서 find 명령으로 할 수 있는 것 중 가장 대표적인 두가지, setuid 파일과 변경된 파일을 찾는 명령을 알아 보았다. 이 두가지 방법으로 운영체제의 위변조 탐지, 홈페이지 소스의 위변조 탐지, 주요 설정파일의 변경여부 등을 검증할 수 있으므로 숙지하고 있는 것이 좋겠다.

그리고 정보보안 기사 시험을 준비한다면 반드시 외우자.

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Scroll to Top