해커에 의해 시스템을 공격 받게 되면 그 흔적이 남게 된다. 운영체제와 네트워크 트래픽에 남아 있는 공격자의 흔적이 무엇인지 살펴 보자. 공격 흔적을 찾기 위해서 특정 툴이나, 내장 명령, 스크립트 등을 이용해 시스템에서 정보를 추출 할 것이다. 정보 추출을 위해 필요한 옵션과 분석 시 도움되는 정보들을 살펴보자.
운영체제 메모리에 올라와 있는 정보나 네트워크 통신 정보들은 시간이 지나면 사라지는 정보다. 휘발성 정보가 무엇이고, 어떤 흔적이 남아 있는지 살펴보자.
- 세션 정보 수집
시스템에 남아 있는 정보 중 네트워크 통신 정보는 연결이 종료되면 사라진다. 키로깅 프로그램이나 백도어 프로그램은 피해 시스템에서 수집한 정보를 전송 하기 위해 외부와 통신을 해야 한다. 외부와 통신하기 위해 피해 시스템에 설치된 악의적인 프로그램은 프로세스를 생성한다. 백도어가 사용하는 프로세스를 확인하면 사용되는 파일과 통신 대상 정보를 알아 낼 수 있다.
정보를 수집할 때는 시스템의 내장 명령이 조작되었을 가능성이 있기 때문에 점검에 사용할 실행 프로그램을 따로 준비하는 게 좋다.
시스템간에 연결된 통신을 세션이라고 부른다. 이 세션 정보를 수집하기 위해 ‘netstat.exe’ 명령을 이용한다. 명령 옵션은 다음과 같다.
-a: 모든 연결 및 수신 대기 포트를 표시합니다. -o: 각 연결의 소유자 프로세스 ID를 표시합니다. -n 주소 및 포트 번호를 숫자 형식으로 표시합니다. |
‘ao’ 옵션과 함께 명령을 실행 시키면 다음과 같은 결과 화면이 출력 된다. 현재 시스템에서 연결된 모든 세션 정보가 화면에 출력된다.

확인된 전체 세션 목록을 점검하여 비정상 세션이나 사용하지 않는 세션을 추출하고, 해당되는 PID(프로세스ID)를 통해 의심되는 프로세스를 점검한다. 이 경우 순간적으로 통신을 맺고 바로 세션을 끊는 경우 확인이 어려울 수 있다.
일부 악성코드는 히든프로세스로 시스템에서 대기 하고 있다 일정 주기나 특정 조건에 의해 세션을 연결하여 통신을 시도하고, 통신이 완료되면 세션을 종료한다.
일회성으로 연결을 맺고 금방 사라지는 세션을 점검하기 위해 실시간 모니터링 프로그램을 이용한다. 실시간 프로세스 모니터링은 TCPVIew , Seem(구Ekinx) 프로그램을 이용하여 확인 할 수 있다. 자동스크립트를 이용해 주기적으로 세션 정보를 저장해 일괄 확인하는 방법도 가능하다.
GUI 기반의 모티터링 프로그램을 실행시키면 다음 그림처럼 현재 시스템에 형성된 세션 정보를 출력한다. 세션 정보는 1초마다 자동 업데이트 된다. 업데이트 주기는 사용자가 메뉴에서 변경 할 수 있다.

실시간 모니터링 프로그램을 이용하면 외부로 연결을 시도하거나 내부로 연결을 시도하는 IP 정보를 확인하여 연관된 프로세스를 추출 할 수 있다. 윈도우처럼 리눅스도 동일하게 확인 가능하다. 필요에 따라 옵션항목을 조절해 사용 할 수 있다.
리눅스 분석 시 유용한 프로그램을 추천한다. LSOF[1]라는 오픈 소스 프로그램이다.
프로그램을 실행 시키면 현재 프로세스들에 의해 열려진 세션과 사용 중인 파일을 확인 할 수 있다. 다음은 그림은 프로그램을 실행한 화면이다.
[1] https://ko.wikipedia.org/wiki/Lsof

생성된 세션이 비정상이거나 시스템과 관련이 없을 경우 해당 프로세스에 대해 좀더 자세히 점검하고, 실제로 프로세스가 사용중인 파일에 대해 점검한다. 다음으로 세션을 유발 시킨 실행 파일을 확인하는 방법을 살펴보자.
- 세션별 실행파일
윈도우 실행파일 별로 PID번호와 현재 연결 상태, Local&Remote IP, Port정보를 점검 한다. 프로세스정보와 함께 분석한다. 악성 코드에 의한 연결 인지 정상 통신인지 확인한다. 점검은 윈도우 내장 명령이 아닌 별도의 무료 프로그램을 이용해 점검 할 수 있다.
tcpvcon을 다운받아 윈도우 명령 창에서 다음과 같이 실행 한다.
tcpvcon -n /accepteula |
프로그램을 실행시키면 아래처럼 실행 파일별 PID정보와 연결 상태 및 상세 정보를 확인 할 수 있다.
[TCP] jqs.exe PID: 2508 State: CLOSE_WAIT Local: 127.0.0.1:5152 Remote: 127.0.0.1:1188 |
세션 정보를 수집하는 방법을 살펴 봤다. 이번에는 여러분이 수집한 통신 연결 정보와 상세 실행 파일 정보를 활용하는 방법을 살펴 보자.
침해사고 분석에 어떻게 활용될 수 있는지 다음 사례를 같이 살펴 보자.
- 사례 분석
스팸 메일이 유포되었던 시스템을 분석했던 사례다.
침해가 발생한 시스템에서 특정 수신인을 대상으로 스팸 메일이 발송 되었다. 침해사고가 발생한 시스템이 중간 경유 시스템으로 이용되었는지 여부에 대한 분석을 진행 했다.
점검 대상 시스템은 윈도우 운영체제가 사용되고 있었다. 네트워크 방화벽에서 웹 서비스를 제외한 원격 접근은 불가능 하였다. 서비스 확인 시 웹 서비스 외 추가 서비스는 구동하지 않았다.
스팸 메일이 발송된 원인을 조사하기 위해 침입탐지시스템(Intrusion Detection System) 탐지 로그를 확인 하던 중 의심스런 통신 내역이 확인 되었다. 사용하지 않는 암호화 통신(SSL, Secure Sockets Layer)통신이 발생된 것이 확인 되었다. 상세 분석 시 점검 대상 시스템을 통해 해외 웹 메일 사이트에 접근 내역이 확인 됐다. HTTPS 통신을 통해 외부 웹 메일 서비스를 이용하였다.
프록시 설정이 의심되었고, 점검 결과 스팸 메일이 발송된 시스템을 거쳐 웹 메일 사이트에 접속하였고, 웹 서비스에서는 스팸 발송자를 해당 IP로 지목했던 것이다.
익명 웹 프록시 설정이 활성화 돼있을 경우 해당 시스템을 통해 타 사이트로 접근이 가능하게 되고, 이 경우 아래와 같은 구조로 중간(B Server)에서 중계 역할을 한다.
공격자 -> 중간 경유 서버(프록시서버) -> 웹 사이트 |
분석한 시스템은 중간 경우 서버에 해당 된다. 웹 사이트에는 공격자 IP가 아니라 중간 경유 서버 정보가 남는다. 참고로 익명 프록시 설정이 열리게 되면 해당 정보는 익명 프록시 서버 목록에 올라간다. 이 정보는 관리자가 의도하지 않은 피해를 유발할게 될 수 있다.

스팸 발송 IP로 의심된 서버는 익명 프록시 허용으로 피해가 발생한 것이다. 자 그럼 프록시 서버로 이용된 사실을 어떻게 확인했는지 살펴 보자.
점검항목 | 분석 결과 |
세션 정보 | 다수의 웹 서비스 세션이 확인80번 출발지 포트 아웃바운드 연결불특정 다수 사용자가 경유를 통해 타 사이트로 접근 |
취약 경로 분석 | 익명 프록시 접근 허용 |
로그점검 | 제공하지 않는 서비스 로그 확인경유로 인한 외부 서비스 URL 제공 로그 |
세션 분석 결과 다수의 아웃바운드 통신이 확인 됐다. 다수의 FIN_WAIT_2 상태가 확인 됐다.
TCP 192.168.0.1:80 95.XXX.XXX.12:13502 FIN_WAIT_2 TCP 192.168.0.1:80 95.XXX.XXX.12:13506 FIN_WAIT_2 TCP 192.168.0.1:80 95.XXX.XXX.12:13512 FIN_WAIT_2 TCP 192.168.0.1:80 95.XXX.XXX.12:13534 FIN_WAIT_2 TCP 192.168.0.1:80 95.XXX.XXX.12:13541 FIN_WAIT_2 <중략> |
FIN_WAIT_2 상태는 통신을 종료하는 과정에서 FIN 패킷을 전송하고 상대방에서 ACK를 수신하지 못해 기다리고 있는 상태를 의미 한다. 다음 그림에서 FIN을 보내고 두 번째 단계로 ACK와 FIN요청을 받아야 되는데 ACK 응답이 오지 않아 기다리고 있는 상태가 FIN_WAIT_2다.

일반적으로 웹 서버는 클라이언트에서 FIN 요청을 보내면 ACK 응답을 보낸다.
하지만 이 경우 웹 서버가 마치 클라이언트처럼 웹 서버에 FIN 요청을 보내고 또 다른 웹 서버의 응답을 기다리고 있었다(FIN_WAIT_2). 통신을 주고 받는 주체가 반대로 보였다. 이 정보를 기반으로 프록시 설정을 의심했다.
이후 확인한 웹 로그에도 시스템에 없는 웹 서비스 경로가 남아 있었다.
127.0.0.1 – – [00/XXX/2010:00:00:00 +0900] “GET http://XXX.XXX.XXX.XXX/ HTTP/1.0” 200 220 127.0.0.1 – – [00/XXX/2010:00:00:00 +0900] “GET http://XXX.XXX.XXX.XXX/ HTTP/1.0” 200 220 |
웹 로그 분석을 통해 메일 관련 사이트와 IRC 사이트 접속 내역이 확인 되었고, 피해 원인이 웹 프록시에 의한 타 사이트 접근으로 분석 되었고, 최초 원인이 되었던 메일 유포는 프록시 설정을 통해 외부 메일 사이트에 접속하여 발송한 것으로 분석 되었다.
- 세션테이블리스트
시스템의 세션 정보를 확인 한다. 확인은 윈도우에서 제공하는 명령을 이용하여 진행하기로 하자.
D:\>nbtstat –S -S (Sessions) Lists sessions table with the destination IP addresses |
NBT명령을 이용하면 현재 연결된 넷바이오스 연결 정보를 확인할 수 있다. 윈도우 명령 창에서 명령을 실행 시키고 각각의 인터페이스에 연결된 상태 정보를 점검 한다.
다음에 그림은 특정 인터페이스(로컬 영역 연결)에 연결정보가 남아 있을 때의 결과다. 현재 연결 상태와 방향성, 원격 호스트 정보 등을 확인할 수 있다.
