
얼마 전에 우리 서버로 특정 IP에서 지속적으로 요청을 보내오는 일이 있었다.
방화벽으로 막혀있지 않는 0번 Port로 UDP 요청을 보냈었는데, 이 때 IP는 특정 되었지만 해당 IP에서 지금도 UDP 요청을 보내고 있는지를 확인하고 싶었다.
범인IP라 칭하겠다.범인IP가 요청을 보낸 Port는 0번 Port였다.
범인IP:0 → 서버IP:0 으로 요청이 들어왔다.내가 어떤 순서대로 범인IP의 요청을 잡으려고 시도했는지 아래의 순서와 함께 알아보자.
먼저 서버IP의 0번 Port로 UDP 요청이 들어오고 있는지 확인할 수 있는 방법이 필요했다.
이 때 나는 tcpdump라는 명령어를 사용하였는데, tcpdump는 주어진 조건식을 만족하는 네트워크 인터페이스를 거치는 패킷들의 헤더들을 출력해주는 프로그램이다.
본인 서버의 네트워크 인터페이스를 확인 하기 위해서는 ifconfig 명령어를 사용하면 된다.
아래 명령어를 통해 서버의 0번 Port에서 오고 가는 UDP 프로토콜의 패킷을 확인할 수 있다.
tcpdump -nni [네트워크 인터페이스] udp and port 0
nn: 이 옵션은 주소 및 포트를 숫자 형식으로 표시한다. 호스트 이름을 해결하지 않고 IP 주소를 숫자로 표시한다. 또한, 포트 번호를 숫자로 표시한다.i <인터페이스>: 이 옵션은 패킷을 캡처할 네트워크 인터페이스를 지정한다. <인터페이스>는 캡처할 네트워크 인터페이스의 이름이다.위와 같이 확인을 했을 때 아무런 패킷이 검측되지 않았다.
그래도 혹시 모르니 dst. src 키워드로 목적지, 출발지를 직접 작성해서 범인IP에서 서버IP로 보내는 요청이 있는지를 확인했다.
tcpdump dst 서버IP and src 범인IP
이 때도 아무런 범인IP가 나타나지 않았다…
그래서 나는 다른 방법을 사용하고자 하였다.
만약 위 방법들을 거쳤는데도 어떠한 트래픽이 확인되지 않으면 TCP, UDP 프로토콜이 아닌 ICMP(핑)처럼 포트라는 개념 자체가 없는 프로토콜이거나, TCP/UDP 패킷 헤더가 손상되어 포트 정보가 사라진 경우 0번 포트로 나타날 수 있다.
아니면 현재 요청을 보내고있지 않더라거나…
즉, 모니터링 툴에 0번 포트로 나오는 것은 ICMP 패킷이거나, 이상하게 조작된 TCP/UDP 패킷일 가능성이 높다.
0번 포트는 보통 TCP/UDP 패킷 헤더가 손상되어 포트 정보가 사라진 경우, 또는 ICMP(핑)처럼 포트라는 개념 자체가 없는 프로토콜인 경우에 사용한다고 한다.
현재 Ping을 통한 ICMP를 보내고 있는 중일 수 있기에 ICMP를 확인해보자.
tcpdump -nni [네트워크 인터페이스] icmp
사실 바라던 답은 아니었지만, 아무런 패킷도 검출되지 않았다.
그렇기에 현재는 범인IP가 어떠한 요청을 보내고 있지 않다고 생각했다.
다음번에 또 요청이 모니터링에 걸리면, 위의 방법으로 빠르게 범인을 검거하고자 한다!