사이트 내 전체검색
침입자 로그 추적
로빈아빠
https://cmd.kr/server/891 URL이 복사되었습니다.

본문

◇> 서두.
'침입자 로그추적' 문서는 binish에 의해 작성된 보안관련 문서입니다.
널리씌여 인간을 이롭게하자는 홍익인간 정신에 근거,
GNU 정신으로 샤워한 이 문서로 아무쪼록 작게나마 도움이 되셨으면 좋겠습니다. B)
(유닉스를 바탕으로 설명합니다)

◇> 침입자들의 발자국 지우기.
침입자들이 쉘을 얻어내서 루트 권한을 따내면 일을 마치고 그들의 자취를 감추기 마련이다.
이때 그들이 하는 분명한 짓을 알아보자.

/etc/syslog.conf 에서 로그상태를 분석해서 로그를 찾아나간다.
/var/adm/messages 에서 자신의 흔적을 지운다.
/var/adm/sulog 에서 su 명령어를 쓴 자신의 흔적을 지운다.
/.history 에서 자신이 쳤던 명령어 리스트를 지운다.
/var/log/syslog 에서 자신의 흔적을 지운다.
/var/log/authlog 에서 자신의 흔적을 지운다.
/var/adm/utmp 에서 자신의 흔적을 지운다.
/var/adm/wtmp 에서 자신의 흔적을 지운다.
/tmp/ 에서 자신의 흔적을 지운다.
.
.
.
.

위의 내용은 보통 로그에서 자신의 흔적을 살며시 지우는 행위입니다.
zap3 을 이용해서 utmp와 wtmp에서 자신을 훔치고 로그를 조작한답니다.

◇> 침입자들의 발자국 살리기.
chkwtmp(www.packetstormsecurity.nl)을 이용해서 지워진 로그를 되살릴 수가 있습니다.
물론 침입자가 zap3을 이용해서 '어떻게' 지웠느냐에 따라 결과는 달라질 수가 있습니다.
자세한 사항은 www.wowhacker.org에서 Webzine 1호를 참고하세요.

만약 침입자가 위에서 언급했던 로그를 지우는 행위중에 하나라도 빼먹는다면,
큰 코 다칠 염려가 분명 있습니다.
우리는 그 코에 비수를 꽂는 셈이죠.
꼼꼼히 로그를 하나하나 체크해서 발자국을 살려내면 됩니다.

◇> 침입자들의 발자국 살리기 위한 사전준비.
만약의 침입자를 대비해서 아래와 같은 사전준비를 할 것을 추천합니다.

> 로그서버 운영
로그서버를 운영하는 이유는,
침해자가 자신의 흔적을 지우기 위해서는 로그서버의 로그까지 건들여야 하는 고통이 따르기 때문입니다.
보통 로그서버는 불필요한 서비스를 모두 막고 취약점을 최대한 줄여 최상의 보안상태로 유지합니다.
이런 로그서버를 뚫기위한 침입자의 노력에 눈물이 나는군요.
로그서버를 여러개를 두면 피눈물이 나지 않을까 싶군요.

로그서버 운영을 위한 과정을 알아보겠습니다.
/etc/syslog.conf에는 서버의 로그가 어떻게 운영될 것인지에 대한 정의가 내려져 있습니다.

*.err;kern.notice;auth.notice;user.none /dev/console
*.err;kern.debug;daemon.notice;mail.crit;user.none /var/adm/messages

위의 예는 UNIX에서 기본으로 채택하고 있는 로그 정의 부분입니다.
syslog.conf에 대한 문서는 www.wowsecurity.net에서 구하실 수 있습니다.

먼저 /etc/hosts에 로그서버로 운영할 서버의 IP를 정의합니다.

210.176.1.1 logserver

그리고 알아볼 것은 로그서버로 이동될 메세지는 514번 포트를 통해서 이동됩니다.
그렇기때문에 /etc/services에 아래와 같은 정의가 내려져 있어야 합니다.

syslog 514/udp

다음으로는 /etc/syslog.conf에 아래와 같이 입력합니다.

*.debug @logserver

이렇게하면 debug위험도의 모든 메시지가 logserver(210.176.1.1)로 복사되어 집니다.

여기서 제가 궁금했던 사항을 말씀드리면,
로그서버의 어디로 복사되는가가 제 의문이었는데 그 답을 말씀드리자면,
로그서버의 /var/adm/messages의 내용에 추가된다는 것입니다.

예로 mainserver에서 로그서버를 운영했다면,
로그서버의 messages에는 아래와 같은 형식이 추가되어 저장됩니다.

Sep 23 15:26:59 mainserver last message repeated 534 times
Sep 23 15:27:34 mainserver unix: sf0: write cnt c al_pa 0xe2

설정을 모두 마쳤으면,
#ps -ef | grep syslog로 PID를 확인해서 재실행시키면 됩니다.

리눅스에서는 한가지 더 해주어야 할 작업이 있습니다.

리눅스에서는 로그서버를 운영하기위해서 옵션을 필요로 하는데,
-r 옵션입니다.

/etc/rc.d/init.d/syslog에서,
daemon syslogd $SYSLOGD_OPTIONS 부분을 daemon syslogd -r $SYSLOGD_OPTIONS로
고쳐주면 됩니다. (vangelis님 감사)

> cron을 이용한 로그 몰래 복사
침입자가 cron에 대해서 무지하다면 발자국을 충분히 잡을 수 있습니다.

우선 쉘을 하나 짭니다.

[rcboot.sh의 내용]
cd /
cd /var/adm
cp lastlog /usr3/testR/babo
cp messages* /usr3/testR/babo
cp sulog /usr3/testR/babo
cd ..
cd log
cp syslog* /usr3/testR/babo

로그화일들을 위의 쉘에서는 /usr3/testR/babo 폴더로 복사하는겁니다.
이 rcboot.sh을 cron을 이용해서 실시간으로 실행시켜줍니다.

0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57 * * * * rcboot.sh

한가지 더 트릭을 쓴다면,
.babo 처럼해서 안보이는 폴더로 만들어도 됩니다. (별거 아닌가..)

> .history을 이용한 명령어 경로 확인
.history를 모르는 침입자가 있을까싶다마는,
신난 마음에 가장 기본적인 점을 잠시 까먹는 침입자가 있을지도 모릅니다.

.cshrc에,

set history=32
set savehist=100

를 지정해주고 각 유저의 홈디렉토리(침입자는 보통 root에서 로그를 조작하기 때문에 ~/가 적합하겠군요)에
.history를 생성해놓으면 해당유저가 입력했던 명령어가 기록됩니다.
여기서 침입자가 입력했던 명령어를 발견하면 대처법도 생길겁니다.

한가지 트릭을 말씀드리자면,
침입자가 입력했던 명령어가 의외로 평범(?)할 경우 구분이 안갈 수 있습니다.

만약 루트에 .history를 설정했고 자신이 루트로 작업을 했다면,
종료시에 아래와 같이해서 구분을 지어 주면 편할겁니다.

# exit ; echo "여기까지는 내가 쓴거얌"

◇> 맺음말
로그에 대한 관심과 준비는 아무리 지나쳐도 해롭지 않습니다.
흡연은 폐암 등 각종 질병의 원인이 되며, 특히 임신부와 청소년의 건강에 해롭다하지만,
로그관심은 그 어느것에도 해롭지 않다는.. B)

댓글목록

등록된 댓글이 없습니다.

1,139 (17/23P)

Search

Copyright © Cmd 명령어 3.16.75.156