| |
백도어는 정형화되어 있지 않습니다.
예컨대 /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 명령으로도 어느정도 확인할 수 있습니다
|