네트워크 서비스와 취약점

침해 사고 분석 시 수집하는 정보 중 가장 휘발성이 높은 정보는 네트워크 통신 정보다. 네트워크 통신 정보는 시스템을 재시작하거나 연결을 종료하면 사라지기 때문에 중요하지만 수집하기 어려운 정보다.

그림 Photo by Lars Kienle on Unsplash

기업의 보안팀이나 감사팀은 네트워크 통신 정보를 수집하기 위해 평상시 네트워크 트래픽을 수집하고 일정 기간 보관한다. 침해 사고가 언제 발생할지 모르기 때문에 보관한 정보를 사고 발생 후 원인 조사에 활용한다. 가능한 모든 정보를 확보하면 사고 원인을 파악하는 데 큰 도움이 되지만, 현실적으로 비용과 관리의 어려움이 있으므로 우선순위에 따라 휘발성 데이터를 수집하고 보관할 필요가 있다.

침해 사고가 발생하면 공격자 IP와 공격 경로를 찾기 위해 네트워크 통신 정보를 분석한다. 공격자와 연관된 정보를 분석하려면 네트워크 서비스 유형을 이해할 필요가 있다.

표 기본적인 네트워크 서비스 유형

네트워크 서비스와 연관된 애플리케이션은 TCP 또는 UDP 통신 포트를 사용한다. 우리가 많이 사용하는 서비스도 TCP 또는 UDP 통신 포트를 사용한다. 네트워크 서비스에 사용되는 포트는 세 가지 형태로 구분할 수 있다. 먼저 0번에서 1023번까지의 포트는 흔히 예약된 포트라고 한다. 시스템 통신에 사용하도록 이미 지정된 포트이므로 사용자가 임의로 사용하기 어렵다. 1024번에서 49151번까지의 포트는 등록된 포트로 사용한다. 이렇게 사용되는 포트 정보를 이용하면 어떤 서비스 프로토콜인지 파악할 수 있다. 통신 포트에 대한 자세한 정보는 위키피디아 자료를 참고할 수 있다.

그림 List of TCP and UDP port numbers

https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers

침해 사고가 발생하고 공격자 IP를 찾기 위해 네트워크 트래픽 정보를 분석한다. 수집한 네트워크 트래픽 정보를 분석할 때 가장 먼저 확인하는 정보는 통신 프로토콜과 사용된 포트 정보다. 수집한 로그에 어떤 통신이 있는지 분석하고, 의심스러운 통신이 식별되면 네트워크 통신의 페이로드를 분석한다. 네트워크 통신의 페이로드를 분석해 공격 경로와 사고 원인을 찾으려면 통신 애플리케이션에 대한 이해가 필요하다. 애플리케이션에 대한 이해가 없으면 공격자의 공격 기법이나 취약점을 식별하기 어려울 수 있다. 네트워크 통신 유형과 분석가가 공격을 식별하기 위해 활용하는 정보가 무엇인지 함께 확인해 보자.

사고 분석을 위해 수집한 네트워크 트래픽 정보를 분석하다 보면 가장 많은 통신량을 차지하는 것은 웹 관련 통신 트래픽이다. 통신량이 많은 만큼 공격도 가장 많이 발생하는 통신 유형이다. 다음 그림은 와이어샤크에서 캡처한 패킷의 통신 비율을 나타내는 그래프다. 전체 초당 패킷 비율에서 웹 통신 패킷의 비중이 어느 정도인지 그래프로 구분해 표시한 정보다.

그림 네트워크 패킷 분석 샘플

웹 기반 통신의 페이로드는 다음과 같은 구조를 갖는다. 사용자가 특정 페이지를 요청하고 서버가 이에 응답하는 것이 웹 통신 페이로드의 기본 구조다.

그림 웹 통신 요청 패킷 캡처

침해 사고를 분석하는 분석가의 관점에서 사고 원인을 찾는 데 필요한 힌트는 이러한 웹 요청과 웹 서버 응답에 포함되어 있다. 분석가가 웹 통신에서 찾으려는 침해 사고 관련 주요 지표는 다음과 같다.

• 공격자 IP / 도메인 정보
• 취약한 공격 경로 및 다운로드 파일 정보
• 사용자(클라이언트)의 웹 요청: 브라우저 정보, 웹 요청 메소드, 파라미터 정보
• 웹 서버의 응답: 웹 서버의 코드, 에러 발생 시 에러 메시지, 파일 사이즈

가장 대표적인 지표는 공격자와 관련된 IP다. 각종 로그를 분석해 공격자 IP를 식별하는 것이 분석가가 가장 먼저 찾아야 할 정보다. 공격자 IP를 식별하면 웹 서비스뿐만 아니라 다른 시스템이나 서버에 접속한 적이 있는지 전체적인 정보를 확인할 수 있다. 또한 해당 IP 자체의 후이즈 정보를 통해 어떤 IP인지, 어디에서 사용하는지 확인한다. 공격자 IP를 식별하면 해당 IP로 공격자가 요청한 웹 요청을 파악할 수 있다. 이를 통해 취약한 경로를 식별할 수 있다. 취약한 경로를 어떻게 공격했는지, 요청 메소드와 전달된 파라미터 정보, 웹 서버가 어떤 요청에 응답 코드를 보냈는지, 오류가 발생했는지, 정상적으로 처리됐는지 등을 통해 사고 관련 내역을 자세히 분석할 수 있다.

사용자의 웹 요청에 포함되는 정보 중 웹 요청 방식에 대해 살펴보자. 흔히 리퀘스트 메소드라고 한다.

그림 웹 요청 메소드

웹 요청에 가장 많이 사용되는 메소드는 GET이나 POST 방식이다. 많이 사용되고 일반적인 요청이기 때문에 웹 로그를 분석하다 보면 가장 자주 보이는 메소드이기도 하다. 분석가가 공격 경로를 식별하려면 공격자가 사용하는 다양한 메소드를 알고 있어야 한다. 공격자는 웹 서버를 공격하고 시스템을 장악하기 위해 웹셸이라는 웹 기반 백도어 프로그램을 서버에 업로드한다. 가장 많이 사용하는 방법은 파일 업로드 확장자를 우회해 서버에 웹셸을 올리는 방식이다. 하지만 대부분의 웹 애플리케이션에서는 파일 업로드를 제한하므로 공격자들은 다양한 방법으로 우회해 파일 업로드를 시도한다. 우회 방법 중 하나는 폼 메소드를 이용하는 것이다. 분석가는 공격자가 어떻게 우회했는지 식별하기 위해 웹 요청에 포함된 메소드도 다양하게 이해하고 있어야 한다.

분석가가 중요하게 봐야 할 정보 중 하나는 웹 서버의 응답 코드다. 앞서 말한 것처럼 웹 서버 응답 코드의 의미에 따라 공격이 성공했을 수도 있고 실패했을 수도 있으며, 다른 영향이 있었을 수도 있다.

그림 웹 응답코드

웹 서버 응답 코드를 분석하다 보면 200 OK나 404 페이지 없음과 같은 코드가 가장 많이 식별된다. 공격자는 웹 서버의 취약점을 찾기 위해 다양한 공격을 시도한다. 이 과정에서 취약점을 이용해 시스템을 장악하고 공격 목적에 필요한 정보를 유출하는 것이 공격자의 최종 목적이다. 공격자가 시도한 공격의 성공 여부를 판단하려면 분석가가 웹 서버 응답 코드를 통해 그 결과를 유추할 수 있다. 공격 성공 여부를 유추하려면 분석가는 각 응답 코드의 의미를 해석할 수 있어야 한다. 대표적인 예로 자주 볼 수 없는 응답 코드 중 201이 있다. 웹 서버에서 사용자의 요청에 따라 리소스가 정상적으로 생성되면 사용자에게 201 응답 코드를 돌려준다. 이러한 응답 코드는 공격자에 의해 서버에 무언가 생성됐음을 의심할 수 있는 단서가 되기도 한다. 응답 코드에 대한 자세한 정보는 링크를 참고하면 된다.

HTTP 통신은 평문 형태로 데이터를 주고받기 때문에 보안에 취약한 네트워크 통신이다. 많은 기업이 암호화 통신을 위해 HTTPS 서비스를 이용하며, 분석가가 HTTPS 통신 정보를 분석해야 하는 경우 암호화된 트래픽 때문에 분석에 어려움을 겪는 경우가 많다. 보이는 그림은 샘플로 네이버 사이트에 접속했을 때 네트워크 트래픽이 어떻게 남는지 캡처한 그림이다.

그림 네트워크 패킷 캡처 샘플

파란색으로 강조된 부분에서 네이버라는 문자열을 식별할 수 있다. 분석가 입장에서는 통신과 연관된 도메인 정보를 추측해 볼 수 있다. 하지만 해당 트래픽의 플로우를 분석해 보면 일부 문자열을 제외한 대부분의 통신은 분석가가 식별하기 어려운 형태로 저장된다. 앞서 식별한 도메인 정보 일부는 눈에 띄지만 실제 통신과 연관된 자세한 정보를 확인하기는 쉽지 않다. 대부분 HTTPS 통신에 사용되는 인증서를 이용해 네트워크에서 복호화한 트래픽을 분석에 활용하거나, 복호화가 불가능하면 웹 서버의 웹 로그를 직접 분석하는 것이 공격 관련 정보를 더 정확히 찾아내는 방법이다.