2013년 11월 26일 화요일

리눅스 백도어 방어(수습)하기

자료출처: http://my.way.co.kr/way-board/way-board.php?db=SECURITY&j=v&number=2&pg=1&cv=&sf=&sd=&sw=&ps=8&pe=2

먼저 언급드리고 싶은 말씀은 "백도어는 정형화되어 있지 않다."는 것입니다.

예컨대 /etc/rc.d/rc.local, /etc/inetd.conf 등의 파일에 뭐가 심어져 있다든지 /etc/passwd에 사용자가 추가되어 있다든지...

백도어는 우리가 미처 알지 못하는 다양한 방법으로 존재할 수 있습니다.



1차적인 권고로서,
서버 운영자가 침입자가 있음을 감지했더라도 그 사실을 침입자가 눈치채지 못하도록 처신해야 합니다.
노련한 사람이라면 자신의 자취만을 감추는데 필요한 로그파일들만을 지우고 사라지겠지만 자칫하면 시스템을 뽀작낼 수도 있기 때문입니다.


2차적인 권고로서,
이쁘든 밉든 백도어(들)을 찾습니다.
보통 하나의 백도어를 찾으면 끝인줄로 여기지만 제가 사태를 수습했던 몇몇 서버의 경우 최소 2가지에서 4가지 형태의 백도어가 존재하더군요.
당연한 말씀이지만 찾아서 모조리 막습니다.

제가 백도어를 찾는 방법중 일부를 소개합니다.
(이 자료는 예전에 뉴스그룹에 투고했던 글입니다.)

1.
# find /dev -type f
위와 같은 명령으로 쓸데없는 파일들(-_-)이 존재하는지 확인합니다.
보통 /dev/MAKEDEV 등과 같이 device 를 관리하고자 하는 파일 이외의 것이 검색되면 일단 의심해봐야 합니다.
그리고 습성상 디렉토리명칭을 공백 한바이트(" ")나 "..." 등과 같이 dot 3개 정도로 생성하여 쉽게 눈에 띄지 않게 하기도 하므로 이런 형태의 파일이나 디렉토리도 찾아보시기 바랍니다.

2.
# grep -v "^#" /etc/inetd.conf
위와 같은 명령으로 불필요한(또는 크래커가 추가한) 서버에 관한 설정이 추가되어 있는지 확인합니다.

3.
# netstat -an | grep LISTEN
위와 같은 명령으로 서버에 열린 포트를 확인하여 의심가는 포트가 있다면 포트를 물고 있는 데몬(lsof | grep LISTEN)을 찾아 봅니다.

4.
/etc/passwd 파일을 열어서 최근에 추가된 사용자나 얍샵하게 기존 사용자정보 사이에 숨겨둔 크래커의 일반계정이 존재하는지 확인합니다.

5.
시스템의 부트스크립트(/etc 경로 하단)에 백도어를 실행하는 등의 악성코드가 존재하는지 확인합니다.

6.
필요할 경우 다음과 같이 find 명령의 시간옵션을 주어 최근에 변경된 파일들을 찾아볼 수도 있겠습니다만, 크래커가 파일 수정일자까지도 변조했다면 별로 유익한 방법이 되지 못할 수도 있습니다.
# find / -ctime -30 -type f

7.
포트를 이용한 백도어 뿐만 아니라 루트쉘을 얻도록 구성된 백도어가 구성되어 있을 수 있으므로 시스템 내의 Set User ID(SUID) 파일들을 죄다 훑어봐서 악성코드나 악성쉘이 아닌지 확인합니다.


3차적인 권고로서,
침입자가 슈퍼유저 권한을 획득했었다면 시스템을 재설치하는 것이 필수라고 감히 말씀드리고 싶습니다.
아시듯이 유닉스 계열에서 슈퍼유저 권한은 절대적인 지위에 있습니다.
소프트웨어적인 어떠한 작업이라도 가능하다는 이야기 입니다.

고생끝에 보안구멍을 모두 막았노라고 장담하실 수도 있겠지만, /etc 디렉토리 밑에 위치한 파일이나 경로중 어느 하나라도 일반 사용자에게 쓰기권한이 부여되어 있을 경우 재수없으면 또 다시 악몽이 시작될 수 있습니다.
침입자가 앙증맞게도 일반사용자로 로그인 하여 /etc/rc.d/rc.local 파일과 같이 슈퍼유저권한으로 자동으로 실행되는 스크립트파일(/etc/sysconfig/network 등 대부분의 스크립트)에 rm -rf / 라는 줄을 삽입하게되면 아주~ 재미있는 사태가 벌어지겠지요.
그만큼 슈퍼유저권한을 한번쯤 잃은 서버라면 99%이상 신뢰할 수 없습니다.
파일의 무결성을 확인할 수 있는 tripwire 등을 사용하지 않던 서버라면 무조건 재설치하시는게 좋습니다.
참고로 무결성은 rpm -V package 명령으로도 어느정도 확인할 수 있습니다.

댓글 없음:

댓글 쓰기