프로세스 활동과 시스템 변화를 확인했다면, 이제 악성코드가 외부와 어떻게 통신하는지 확인할 차례다.
이번 편에서는 동적 분석 단계에서 사용하는 CPort, SmartSniff, Wireshark를 정리했다.
동적 분석의 앞 편들에서는 프로세스 활동과 시스템 변화를 확인했다. 어떤 프로세스가 생기는지, 자동 실행에 등록되는지, 파일·레지스트리에 어떤 변화가 생기고 누가 그 변화를 만들었는지까지 추적했다.
하지만 아직 확인하지 못한 게 하나 남아 있다. 악성코드가 외부 서버와 통신을 하는지다. 악성코드는 대부분 혼자 동작하지 않는다. 공격자의 서버에서 명령을 받아오거나, 감염된 PC의 정보를 외부로 보내거나, 추가 악성 파일을 다운로드하기 위해 외부 서버와 통신하는 경우가 많다. 이번 편에서 그 마지막 조각을 확인한다.
이번 편에서 다룰 도구는 CPort, SmartSniff, Wireshark 세 가지다. CPort로 연결 상태를 확인하고, SmartSniff로 통신 내용을 훑어보고, Wireshark로 패킷을 상세하게 분석하는 흐름이다.
이 단계에서 확인할 것은 크게 세 가지다. 악성코드가 외부 서버와 통신을 시도하는지, 어디로 통신하는지(IP, 도메인, 포트), 그리고 어떤 내용을 주고받는지다.
세 도구는 각각 다른 깊이에서 네트워크를 본다.
| 도구 | 역할 |
|---|---|
| CPort | 지금 어디랑 연결되어 있는지 (연결 상태) |
| SmartSniff | 뭘 주고받고 있는지 (통신 내용을 텍스트로 빠르게 확인) |
| Wireshark | 패킷 단위로 정확히 뭐가 오가는지 (프로토콜 상세 분석) |
2편 VirusTotal의 Relations 탭에서 연결되는 IP나 도메인을 미리 확인한 적이 있다. 이번 단계에서는 그 정보가 실제 실행 시에도 나타나는지 크로스체크할 수 있다. 정적 분석(BinText)에서 발견한 URL이나 도메인도 마찬가지다.
그리고 여기서 확인한 IP, 도메인, 포트, 프로토콜 정보는 IOC로 정리할 수 있을 뿐만 아니라, Snort 탐지 룰을 작성하는 데 가장 직접적으로 활용되는 정보이기도 하다.
현재 열려 있는 네트워크 포트와 연결 상태를 보여주는 도구다. "지금 이 PC가 어디랑 연결되어 있는지"를 한눈에 확인할 수 있다.
실행하면 현재 시스템의 네트워크 연결 목록이 바로 표시된다. 악성코드를 실행하기 전에 먼저 열어둔 상태에서 실행해야 새로 생기는 연결을 놓치지 않는다.

목록에서 확인할 수 있는 주요 컬럼은 아래와 같다.
| 컬럼 | 설명 |
|---|---|
| Process Name | 어떤 프로세스가 이 연결을 열었는지 |
| Local Port | 이 PC에서 사용하는 포트 |
| Remote Address | 연결된 상대방 IP |
| Remote Port | 상대방 포트 |
| Protocol | TCP 또는 UDP |
| State | 연결 상태 |
악성코드를 실행한 뒤 목록을 새로고침하면서 새로 생기는 연결을 관찰하면 된다. 연결이 바로 나타나지 않을 수도 있다. 악성코드에 따라 일정 시간이 지난 뒤에 통신을 시작하는 경우도 있기 때문에, 실행 후 바로 닫지 말고 여유를 두고 지켜보는 게 좋다.
① 악성코드 프로세스의 연결
5편 Process Explorer에서 확인한 프로세스 이름을 기준으로, 해당 프로세스가 외부 연결을 만들었는지 확인한다. 원격 IP와 포트는 IOC 후보로 메모해둔다.
② 연결 상태
State 컬럼에 표시되는 값은 연결의 현재 상태를 뜻한다.
| 상태 | 의미 |
|---|---|
| ESTABLISHED | 연결이 성립된 상태. 실제로 통신 중이거나 통신 가능 |
| LISTENING | 외부 연결을 기다리고 있는 상태 |
이 외에도 CLOSE_WAIT, TIME_WAIT 같은 상태가 보일 수 있는데, 연결이 종료되는 과정에서 나타나는 값이라 크게 신경 쓰지 않아도 된다.
악성코드 프로세스에서 ESTABLISHED 상태의 연결이 보인다면, 외부 서버와 실제로 통신이 이루어지고 있다는 뜻이다.
③ 수상한 연결 판단 기준
모든 연결이 악성인 건 아니다. 아래 기준으로 수상한 연결을 골라낼 수 있다.
| 확인 항목 | 수상한 경우 |
|---|---|
| 원격 포트 | 80(HTTP), 443(HTTPS) 같은 표준 포트가 아닌 비표준 포트를 사용하는 경우 |
| 프로세스 이름 | 시스템 프로세스(svchost.exe 등)인데 낯선 외부 IP로 연결하고 있는 경우. 단, svchost.exe는 윈도우 업데이트 등으로 정상 연결을 하기도 하므로 IP를 함께 확인해야 한다 |
| 반복 연결 | 같은 IP로 짧은 간격으로 반복 연결이 보이는 경우. C2 서버와의 통신일 수 있다 |
| IP 일치 여부 | VT Relations 탭에서 확인했던 IP와 같은 IP가 나타나는 경우 |
💡 C2(Command & Control) 서버란 악성코드에게 명령을 내리는 공격자의 서버다. 악성코드는 주기적으로 C2 서버에 접속해서 명령을 받아오는 경우가 많다.
네트워크 패킷을 캡처해서 통신 내용을 텍스트로 보여주는 도구다. CPort가 "어디랑 연결됐는지"를 보여준다면, SmartSniff는 "그 연결로 뭘 주고받았는지"를 보여준다. Wireshark보다 가볍고, 패킷 구조를 몰라도 내용을 바로 읽을 수 있어서 통신 내용을 빠르게 훑어보는 데 적합하다.
악성코드를 실행하기 전에 먼저 캡처를 시작해둬야 한다. 캡처를 시작한 뒤 악성코드를 실행하고, 충분한 시간이 지나면 캡처를 중지한다. 캡처가 끝나면 화면이 상하로 나뉘어 표시된다. 상단에서 연결 항목을 클릭하면, 하단에 해당 연결의 통신 내용이 텍스트로 표시된다. 단, 암호화되지 않은 통신(HTTP 등)에 한해서다. HTTPS처럼 암호화된 통신은 내용이 깨져 보이기 때문에 텍스트로 읽을 수 없다.
캡처가 끝나면 화면이 상하로 나뉘어 표시된다.
| 영역 | 설명 |
|---|---|
| 상단 | 캡처된 연결 목록. 출발지/목적지 IP, 포트, 프로토콜, 데이터 크기 등 |
| 하단 | 상단에서 선택한 연결의 통신 내용. 텍스트 형태로 바로 읽을 수 있다 |

SmartSniff의 강점은 통신 내용이 텍스트로 바로 읽힌다는 점이다. 패킷 구조를 몰라도 내용을 확인할 수 있다.
① HTTP 요청 확인
하단 패널에 GET /path HTTP/1.1이나 POST /path HTTP/1.1 같은 텍스트가 보이면, 악성코드가 HTTP로 통신하고 있다는 뜻이다. Host: 헤더에 도메인이 적혀 있는 경우가 많으니 함께 확인한다.
② 수상한 문자열
통신 내용에 수상한 텍스트가 섞여 있을 수 있다. 예를 들어 컴퓨터 이름, OS 버전, 사용자 이름 같은 시스템 정보가 보인다면, 악성코드가 감염된 PC의 정보를 외부로 보내고 있을 가능성이 있다. 의미를 알 수 없는 긴 문자열이 보인다면 인코딩되거나 암호화된 데이터일 수 있다.
③ 정적 분석 결과와 크로스체크
BinText에서 발견했던 URL이나 도메인이 실제 통신에서도 나타나는지 확인한다. 나타난다면 정적 분석의 힌트가 맞았다는 걸 확인하는 셈이다.
⚠️ HTTPS(암호화된 통신)는 내용이 암호화되어 있어서 텍스트로 읽을 수 없다. 내용이 깨져 보인다면 암호화된 통신일 가능성이 있다.
네트워크 트래픽을 패킷 단위로 캡처하고 분석할 수 있는 도구다. 세 도구 중 가장 강력하지만 가장 복잡하다.
SmartSniff가 "뭘 주고받았는지"를 빠르게 훑어보는 도구라면, Wireshark는 "그 통신이 어떤 과정으로 이루어졌는지"까지 들여다볼 수 있는 도구다. 악성코드가 어떤 도메인을 조회했는지(DNS), 연결이 어떤 단계로 진행됐는지(TCP), 요청 구조가 어떻게 생겼는지(HTTP) 같은 것들을 확인할 수 있다.
실행하면 네트워크 인터페이스 목록이 나온다. 사용 중인 인터페이스를 선택하고 캡처를 시작한 뒤, 악성코드를 실행하고, 충분한 시간이 지나면 캡처를 중지한다.

캡처가 끝나면 화면이 세 영역으로 나뉘어 표시된다.
| 영역 | 설명 |
|---|---|
| 상단 | 패킷 목록. 시간, 출발지/목적지 IP, 프로토콜, 요약 정보 |
| 중단 | 선택한 패킷의 프로토콜 상세 정보. 계층별로 분해되어 표시 |
| 하단 | 원시 데이터(Hex dump) |

패킷이 수천~수만 개씩 쌓이기 때문에, 디스플레이 필터를 걸어서 필요한 것만 골라봐야 한다. 자주 쓰는 기본 필터만 알아두면 충분하다.
| 필터 | 용도 |
|---|---|
dns | DNS 쿼리만 보기 |
http | HTTP 트래픽만 보기 |
ip.addr == 1.2.3.4 | 특정 IP와 관련된 패킷만 보기 |
tcp.port == 4444 | 특정 포트를 사용하는 패킷만 보기 |
💡 필터 문법이나 고급 사용법은 별도 글에서 정리할 예정이다. 여기서는 위 네 가지 정도만 알아도 분석에 필요한 패킷을 골라볼 수 있다.
① DNS 쿼리
dns 필터를 걸면 악성코드가 어떤 도메인을 조회했는지 확인할 수 있다. 악성코드는 C2 서버에 접속할 때 IP 주소가 아닌 도메인을 사용하는 경우가 많은데, 이때 도메인을 IP로 변환하기 위해 DNS 쿼리를 먼저 보낸다. 이 쿼리에서 나오는 도메인은 IOC 후보로, VT Relations 탭에서 확인했던 도메인과 일치하는지 크로스체크할 수 있다.
② TCP 연결
ip.addr 필터로 CPort에서 확인한 원격 IP를 지정하면, 해당 IP와 주고받은 패킷만 볼 수 있다. 어떤 포트로 연결했는지, 연결이 성공했는지, 데이터가 오갔는지를 확인할 수 있다.
③ HTTP 트래픽
http 필터를 걸면 HTTP 요청과 응답을 볼 수 있다. 요청 메서드(GET/POST), URL 경로, User-Agent 같은 정보를 확인할 수 있다. SmartSniff에서 텍스트로 훑어봤던 내용이 있다면, 여기서 요청 구조를 더 정확하게 확인할 수 있다.
④ Follow TCP Stream
수상한 연결을 찾았을 때, 해당 패킷을 우클릭하고 Follow → TCP Stream을 선택하면 그 연결의 전체 대화 내용을 한 화면에서 볼 수 있다. 클라이언트가 보낸 내용과 서버가 응답한 내용이 색으로 구분되어 표시된다. 전체 흐름을 한눈에 파악할 때 유용하다.


⚠️ Wireshark는 기능이 방대하지만, 악성코드 분석 목적이라면 위 네 가지만 활용해도 충분하다. 필터 문법이나 고급 분석 기능은 별도 글에서 정리할 예정이다.
네트워크 분석은 동적 분석의 마지막 영역이다. 세 도구의 역할을 다시 정리하면 이렇다.
| 도구 | 역할 |
|---|---|
| CPort | 어디랑 연결되어 있는지 확인 |
| SmartSniff | 뭘 주고받고 있는지 빠르게 확인 |
| Wireshark | 패킷 단위로 상세하게 분석 |
실전에서는 CPort로 연결 상태를 먼저 확인하고, SmartSniff로 통신 내용을 빠르게 훑어본 뒤, Wireshark로 필요한 부분을 상세하게 뜯어보는 흐름이 자연스럽다.
동적 분석 전체 흐름도 정리하면 이렇다.
| 영역 | 확인한 것 |
|---|---|
| 프로세스 활동 + 지속성 확보 | 어떤 프로세스가 생기고, 자동 실행에 등록하는지 |
| 시스템 변화 | 파일·레지스트리에 어떤 변화가 생기고, 누가 그 변화를 만들었는지 |
| 네트워크 활동 | 외부 서버와 통신하는지, 어디로 어떻게 통신하는지 |