글쓴이 보관물: bigrootno1@gmail.com

네트워크 정보 수집

방화벽 허용 로그에는 4계층 기반의 통신 정보 활용이 가능 하다. 네트워크 통신을 주고 받은 IP 주소와 서비스 포트, 프로토콜, 통신량(byte) 등 활용이 가능 하다.

앞서 로그와 프로세스 정보 분석을 통해 공격 받은 시스템을 분석하는 방법을 살펴 보았다. 공격이 발생한 시스템이 확인되면 사고가 발생한 시간과 사고 발생 IP 주소를 키워드로 네트워크 통신 내역을 추적한다. 방화벽 허용 로그 검색을 통해서 공격 경로를 분석 한다. 다음은 네트워크 방화벽 허용 로그다.

Sep 25 19:02:42 192.168.0.1 %ASA-6-302015: Built outbound UDP connection 35484054 for outside:10.0.1.127/137 (10.0.1.127/137) to inside:10.0.1.124/137 (10.0.1.124/137)
Sep 25 19:04:45 192.168.0.1 %ASA-6-302016: Teardown UDP connection 35484054 for outside:10.0.1.127/137 to inside:10.0.1.124/137 duration 0:02:02 bytes 150
Sep 25 19:10:20 192.168.0.1 %ASA-6-302015: Built outbound UDP connection 35484817 for outside:10.0.1.127/138 (10.0.1.127/138) to inside:10.0.1.124/138 (10.0.1.124/138)
Sep 25 19:12:22 192.168.0.1 %ASA-6-302016: Teardown UDP connection 35484817 for outside:10.0.1.127/138 to inside:10.0.1.124/138 duration 0:02:01 bytes 201
Sep 25 19:13:02 192.168.0.1 %ASA-6-302013: Built inbound TCP connection 35485033 for outside:192.168.0.118/51879 (192.168.0.118/51879) to inside:10.0.1.124/80 (10.0.1.124/80)
Sep 25 19:13:02 192.168.0.1 %ASA-6-302014: Teardown TCP connection 35485033 for outside:192.168.0.118/51879 to inside:10.0.1.124/80 duration 0:00:00 bytes 0 TCP Reset-I
Sep 25 19:13:02 192.168.0.1 %ASA-6-302013: Built inbound TCP connection 35485035 for outside:192.168.0.118/51879 (192.168.0.118/51879) to inside:10.0.1.124/80 (10.0.1.124/80)
Sep 25 19:13:02 192.168.0.1 %ASA-6-302014: Teardown TCP connection 35485035 for outside:192.168.0.118/51879 to inside:10.0.1.124/80 duration 0:00:00 bytes 0 TCP Reset-I
Sep 25 19:13:03 192.168.0.1 %ASA-6-302013: Built inbound TCP connection 35485036 for outside:192.168.0.118/51879 (192.168.0.118/51879) to inside:10.0.1.124/80 (10.0.1.124/80)

수집한 방화벽 허용 로그에서 공격자 IP정보를 검색 후 접근한 시간과 통신 내역을 확인한다. 방화벽 로그에서 통신에 사용된 포트와 통신 시간, 통신량(byte) 정보를 확인한 수 있다. 이 정보는 공격자가 얼마나 많은 데이터 통신을 했는지 추축하는데 사용된다. 만약 FTP 통신을 통해 대용량의 통신을 주고 받았다면 자료 유출이 발생했을 가능성이 있다.

공격자가 현재 활동을 하고 있다면 방화벽 세션 정보를 확인해서 통신을 시도하고 있는 모든 시스템 IP 주소도 확인해 볼 수 있다. 다음은 시스코 방화벽에서 확인한 현재 접속한 세션 정보다.

TCP out 172.18.0.175:1861 in 10.0.0.34:80 idle 0:00:30 Bytes 815 flags UIOB
TCP out 172.19.0.68:33059 in 10.0.0.48:80 idle 0:17:23 Bytes 238 flags UfIB
TCP out 172.20.0.151:1049 in 10.0.0.48:80 idle 0:20:34 Bytes 206 flags UfIB
TCP out 172.21.0.103:23132 in 10.0.0.48:80 idle 0:02:08 Bytes 238 flags UfIB
TCP out 172.16.0.188:3375 in 10.0.0.22:80 idle 0:01:04 Bytes 4564 flags UIOB
TCP out 172.16.0.188:3374 in 10.0.0.22:80 idle 0:01:04 Bytes 24638 flags UIOB
TCP out 172.16.0.188:3373 in 10.0.0.22:80 idle 0:01:04 Bytes 9557 flags UIOB
TCP out 172.17.0.230:25 in 10.0.0.33:4232 idle 0:00:52 Bytes 0 flags saA
TCP out 172.22.0.47:1080 in 10.0.0.48:80 idle 0:02:38 Bytes 256 flags UfIB
TCP out 172.23.0.36:36474 in 10.0.0.48:80 idle 0:29:44 Bytes 256 flags UfIB

공격자의 침투 경로를 분석하다 보면 방화벽에 남아 있는 정보로는 정보가 부족하다. 예를 들어 앞서 FTP 통신을 통해서 데이터를 보냈다는 사실은 방화벽 로그를 이용해 확인 할 수 있다. 하지만 어떤 파일이 전송되었는지, 공격자가 접속한 계정 정보가 무엇인지, 몇 개의 파일을 가져갔는지 정보는 알 수 없다.

특히 웹 서버처럼 다양한 변수를 사용하는 경우에는 공격 경로 파악하는데 상세 통신 내역이 반드시 필요하다.

분석에 필요한 정보는 웹 어플리케이션 방화벽이나 침입탐지 시스템에서 일부 확인이 가능하지만 전체 통신 내역을 확인하려면 모든 세션 정보를 수집해야 한다. 이 경우 패킷 수집 솔루션을 활용하지만 전체 패킷을 수집하기 때문에 분석할 정보가 상당히 많다.

전체 패킷을 수집하지 않아도 세션 정보로도 공격자의 경로 추적은 가능하다. Bro-IDS 프로그램은 오픈 소스 기반으로 네트워크 통신 분석 프로그램이다. 오픈 소스 프로그램에 대한 설명과 간단한 설치 가이드는 별첨 문서를 참고 하자.

세션[1] 분석 솔루션은 어플리케이션 통신 내역을 모두 수집할 수 있다. 분석가가 공격 경로를 파악하는데 필요한 정보를 제공한다. 다음은 웹 통신 내역을 수집 분석한 로그 샘플이다. URI를 포함해 웹 링크 횟수 및 참조 정보 등 분석에 유용한 다양한 정보를 제공한다.

그림 웹 통신 분석

다음은 웹 통신 내역을 수집한 후 엑셀을 이용해 URL 접근 내역을 통계로 작성한 결과다.

그림 URL 접근 통계

공격자 IP가 식별이 되었다면 공격자 IP를 검색 키워드로 URL 목록을 추출하고 접근한 통신 내역을 확인할 수 있다. 추출한 정보는 시간 순서대로 정리한 후 공격자 동선을 파악하는데 사용한다.

세션 분석 솔루션에서 제공하는 정보 중 통신 내역에 대한 통계 정보도 유용하게 활용된다. 해킹에 의해 비정상적으로 발생되는 어플리케이션이나 IP 주소를 찾아내는데 활용할 수 있다. 다음 그림을 보자.

그림 네트워크 통신 통계

공격자 IP가 식별 되었다면 좀더 쉽게 통신 내역을 분석할 수 있지만 공격자 IP를 식별해야 하는 경우에는 이러한 통계 정보를 활용하면 도움이 된다.

주로 많이 사용되는 통신 포트나 IP 주소를 제외하고 의도하지 않게 사용되고 있는 통신 포트에 주목하자. 악성코드 감염에 의한 현상일 수 있다.

주기적으로 해당 정보를 가공 활용한다면 내부에서 트래픽을 많이 사용하는 IP나 서비스에 대해 식별이 가능하고, 어떤 IP로 사용자 요청이 집중되는지 수치를 통해 확인 가능하다.

용도에 따라 다양하게 활용이 가능하다.

  • 내부 서비스 포트 사용 현황
  • 가장 많이 접근하는 도착지
  • 가장 적게 접근하는 도착지
  • 서비스 통계 현황
  • 프로토콜 비율
  • 패킷 flag별 비율

세션 분석 기반의 솔루션에서 수집할 수 있는 정보를 살펴 봤다. 상세한 통신 정보를 수집하고 공격 경로 분석에 활용하는 것이 핵심이다.

네트워크 기반의 상용 보안 제품도 애플리케이션 분석을 기반으로 이상 행위에 대한 탐지 및 차단 기능을 제공한다.

경우에 따라서 네트워크 상에 주고 받은 모든 패킷을 수집해 위협과 관련된 이상 행위를 찾아내야 할 경우가 있다. 풀 패킷(Full Packet) 파일을 분석하려고 하면 먼저 그 양에 한번 놀라고, 어디서 부터 시작해야 할지에 한번 더 막막함을 느끼게 된다. 이는 어마어마한 양의 네트워크 패킷을 처음부터 끝까지 모두 보려 하기 때문이다. 풀 패킷 분석을 한다고 해서 모든 패킷을 하나하나 다 분석할 필요 없다. 앞서 이벤트 분석 방법론에서 언급했던 것과 마찬가지로 필요한 패킷을 선별적으로 분석하면 된다. 필요한 경우 추가 분석을 진행하면 된다. 모든 패킷을 분석하는 부담감을 버리길 바란다.

선별적으로 이벤트를 분석하기 위해서는 먼저 분석 대상과 분석 범위에 대해서 정의해야 한다. 분석 범위의 기준은 여러가지가 있다. 우리는 이번 장에서 분석 범위의 기준을 비 정상 범위의 대상으로 지정하여 분석하는 방법을 살펴 볼 것이다.


[1] 세션(session)  [IT용어] ① 망 환경에서 사용자 간 또는 컴퓨터 간의 대화를 위한 논리적 연결. (출처 네이버)

생성형 AI 기반 보안 대응 업무 활용

인공지능(AI)을 활용하면 보안 경보 분석 업무를 더 효율적이고 쉽게 만들 수 있습니다. 보안 경보 분석에서는 방대한 양의 데이터가 실시간으로 생성되며, 이를 일일이 사람이 분석하기에는 한계가 있습니다. AI 기술을 적용하면 경보 분석에서 발생하는 주요 문제를 해결하고 자동화할 수 있습니다.

다음은 AI를 통해 보안 경보 분석 업무를 쉽게 하는 몇 가지 방법입니다:

1. 이상 탐지(Anomaly Detection)

AI 기반 이상 탐지 알고리즘은 정상적인 활동 패턴을 학습하고 비정상적인 활동을 실시간으로 탐지할 수 있습니다. 머신러닝 모델을 사용하여 평소의 네트워크 트래픽과 행동을 학습한 후, 이와 다른 활동이 나타날 경우 자동으로 경보를 생성하거나 분석 팀에 알림을 보냅니다.

활용 기술:

  • 머신러닝 (예: SVM, 랜덤 포레스트)
  • 딥러닝 (예: RNN, LSTM)

2. 경보 우선순위 지정

보안 시스템에서는 수많은 경보가 발생하므로 모든 경보를 동일하게 처리하는 것은 비효율적입니다. AI를 통해 경보의 심각도와 우선순위를 자동으로 평가하여 중요한 경보를 먼저 처리할 수 있게 합니다. 이는 경보의 과거 기록, 발생 시간대, 공격 패턴 등을 바탕으로 이루어집니다.

활용 기술:

  • 자연어 처리(NLP)를 통한 로그 분석
  • 기계 학습 기반의 경보 분류 시스템

3. 오탐지 감소

AI를 활용해 오탐(false positive) 경보를 줄일 수 있습니다. 기계 학습 모델은 반복적인 학습을 통해 오탐 경보의 패턴을 인식하고 이러한 경보가 다시 발생할 때 우선순위를 낮추거나 무시할 수 있게 됩니다. 이렇게 하면 보안팀이 중요한 경보에 더 집중할 수 있게 됩니다.

활용 기술:

  • 오탐과 실제 경고 데이터 학습
  • 딥러닝을 통한 패턴 인식

4. 자동화된 위협 인텔리전스 통합

AI는 다양한 보안 위협 정보(Threat Intelligence) 소스에서 자동으로 데이터를 수집하고 분석할 수 있습니다. 이를 통해 새로운 위협에 대한 정보를 경보 분석에 통합하여 보다 정확하고 최신의 경보 분석이 가능해집니다.

활용 기술:

  • 위협 인텔리전스 플랫폼과의 API 연동
  • 빅데이터 분석

5. 보안 이벤트 상관관계 분석

여러 개의 보안 이벤트가 동시에 발생할 때, AI는 이를 상관관계 분석하여 서로 관련 있는 이벤트를 그룹화하거나 특정 공격 시나리오를 식별할 수 있습니다. 이를 통해 개별적으로는 무해해 보이는 이벤트들이 합쳐져 큰 보안 위협을 의미할 수 있음을 탐지할 수 있습니다.

활용 기술:

  • 상관관계 분석 알고리즘
  • 그래프 분석 및 패턴 매칭

6. 자동 대응 시스템

AI가 경보를 분석하는 동시에 자동 대응을 수행하도록 설정할 수 있습니다. 예를 들어, 의심스러운 활동이 탐지되면 AI가 자동으로 방화벽 규칙을 수정하거나 특정 사용자의 접근 권한을 일시적으로 제한할 수 있습니다.

활용 기술:

  • SOAR(Security Orchestration, Automation, and Response) 플랫폼
  • 자동화된 정책 실행 엔진

AI 기반 보안 경보 분석 도입의 장점

  • 시간 절약: 반복적이고 수작업이 많은 분석 과정을 AI가 자동화하여 보안 팀의 시간을 절약.
  • 정확도 향상: AI는 더 많은 데이터를 빠르게 분석하여 사람보다 더 일관되게 정확한 분석을 수행.
  • 위협 대응 속도 향상: 실시간 분석 및 자동화된 대응을 통해 위협에 신속히 대처.

이와 같은 AI 활용을 통해 보안 경보 분석의 효율성을 크게 높일 수 있습니다

Elastic 머신 러닝 활용 이상 탐지(Anomaly Detection)

1. Elastic 머신 러닝 소개

Elastic Stack에 통합된 Elastic Machine Learning (ML) 기능은 대규모 데이터를 기반으로 자동화된 통찰력과 예측을 제공하는 강력한 도구입니다. 복잡한 기계 학습 알고리즘을 사용자가 쉽게 적용할 수 있도록 설계되어, 로그, 메트릭, 보안 이벤트 등 다양한 시계열 데이터에서 이상 징후(Anomaly)를 탐지하고 추세(Trend)를 예측하는 데 탁월한 성능을 발휘합니다.

Elastic ML은 크게 비지도 학습(Unsupervised Learning)과 지도 학습(Supervised Learning) 두 가지 유형의 분석을 지원합니다. 옵저버빌리티(observability)와 보안(security) 목적으로 사용되는 경우 비지도 학습을 통해 이상 행위를 분석 합니다. 비지도 학습은 Elastic ML의 핵심 기능으로, 레이블링된 훈련 데이터 없이 데이터 내의 정상적인 행동 패턴을 스스로 학습하여 비정상적인 이벤트를 식별합니다.

비지도 학습 기반의 탐지 방식은 다음과 같습니다.

시계열 기반 이상 징후 탐지 (Anomaly Detection)

  • 시계열 기반 이상 징후 탐지 (Anomaly Detection) 방식: 로그, 메트릭 등 시간에 따라 변화하는 데이터에서 비정상적인 패턴을 실시간으로 식별합니다.
      • Elasticsearch로 수집된 시계열 데이터에서 정상 상태의 통계적 모델을 자동 생성합니다.새로운 데이터 포인트가 모델에서 예측한 범위를 벗어날 경우, 이를 이상 징후로 플래그하고 **이상 징후 점수(Anomaly Score)**를 부여합니다.
      • 이를 통해 시스템 성능 저하, 보안 위협, 애플리케이션 오류 등의 근본 원인을 신속하게 파악할 수 있습니다.
  • 활용 사례: 서버의 CPU 사용률 급증, 웹 요청 응답 시간 지연, 네트워크 트래픽의 비정상적인 증가 등을 모니터링합니다.

예측 (Forecasting) 방식

  • 예측 (Forecasting) 방식: 과거의 데이터 패턴을 기반으로 미래의 데이터 동작을 예측합니다.
  • 활용 사례: 향후 리소스 요구 사항(예: 스토리지, 서버 부하)을 예측하여 용량 계획(Capacity Planning)에 활용하거나, 이상 징후가 발생하기 전에 선제적으로 대응합니다.

이상값 탐지 (Outlier Detection)

  • 이상값 탐지 (Outlier Detection) 방식: 시계열 데이터가 아닌 정적인 데이터 세트에서 다른 데이터 포인트와 크게 동떨어진 개별 데이터 포인트를 식별합니다.
  • 활용 사례: 사기 거래 탐지, 비정상적인 사용자 행동 분석 등에 사용됩니다.

지도 학습은 레이블링된 훈련 데이터 세트를 사용하여 모델을 구축하고, 이를 통해 새로운 데이터의 범주(분류)나 연속적인 값(회귀)을 예측합니다.

지도 학습 기반의 탐지 방식은 다음과 같습니다.

분류 (Classification)

  • 분류 (Classification) 방식: 데이터 포인트를 이산적인 범주형 값으로 예측합니다 (예: 악성/정상, 스팸/비 스팸).
  • 활용 사례: 보안 분야에서 잠재적인 악성 도메인 요청을 분류하거나, 사용자 피드백을 긍정/부정으로 분류합니다.

회귀 (Regression)

  • 분류 (Classification) 방식: 데이터 포인트를 이산적인 범주형 값으로 예측합니다 (예: 악성/정상, 스팸/비 스팸).
  • 활용 사례: 보안 분야에서 잠재적인 악성 도메인 요청을 분류하거나, 사용자 피드백을 긍정/부정으로 분류합니다.

2. 머신 러닝 유즈케이스: 네트워크 이상 통신 분석

인프라팀과 보안팀에서는 네트워크 기반의 이상 행위 또는 이상 트래픽을 모니터하기 위해 다양한 장비의 로그를 수집해서 분석 합니다. 네트워크 기반의 로그의 경우 TCP/IP 기반의 네트워크 프로토콜 정보를 제공 합니다.

보안 위협을 식별하는 방법은 다양하며, 문자열로 된 공격 특징을 패턴으로 정의하여 공격을 식별하거나 특정 파일명 또는 IP 주소, 시스템 명령이 포함되지 않은 통신에서 관련 명령어 실행 여부 검색 등을 통해 보안 위협을 식별할 수 있습니다. 패턴 기반 식별 방법은 공격을 빠르게 구분하고 식별할 수 있어 가장 많이 사용되지만 공격과 관련된 패턴을 모르는 경우에는 탐지할 수 없거나 위협을 놓칠 수 있는 단점이 있습니다.

이러한 단점을 극복하고, 탐지 패턴을 알 수 없거나 제로데이 공격 위협을 식별하기 위해 이상 행위 분석(Anomaly Detection) 방법이 사용됩니다. 이상 행위 분석은 공격 특징을 가진 정형화된 공격이 아닌 비정형화된 공격을 탐지하기 위해 행위 분석을 통해 보안 위협을 식별하는 방식입니다.

네트워크 TCP/IP 기반의 로그 정보를 이용해 보안 위협 관점에서 이상 행위 분석 과정을 상세히 살펴봅니다. 보안 솔루션의 탐지 로그(CSV 형식, 구분자 쉼표)를 사용하며, 총 8개의 컬럼(탐지 시간, 이벤트 탐지 카운트, 출발지 IP/PORT, 도착지 IP/포트, 오브젝트 타입, 프로토콜 유형)을 가진 로그입니다.

그림. 테스트 로그

Kibana의 Visualize 기능을 사용하여 날짜별 통신 통계 정보를 표(Table)로 작성할 수 있습니다. 간단하게 통신 내역 통계를 확인할 수 있습니다.

그림. 통신 포트별 통신량

하지만 실제 이상 행위에 대한 분석과 이상 행위에 대한 근거를 찾기는 어렵습니다. 수동 분석은 분석가의 역량에 따라 결과의 차이가 발생할 수 있기 때문에 분석 역량 편차를 극복하기 위해 머신러닝을 활용 할 수 있습니다.  앞서 표에 사용했던 포트 통신 정보를 머신 러닝 학습에 사용할 수 있습니다.

분석 과정은 다음과 같습니다. 통신 로그 분석을 통해 이상 행위에 대한 식별이 가능 합니다. 머신러닝을 이용한 이상 행위 분석은 Analytics 메뉴의 Anomaly Detection 기능을 사용하여 수행됩니다.

IDS 로그를 대상으로 도착지 IP, 도착지 포트, 이벤트 탐지 카운트를 선택하여 멀티 메트릭 분석을 진행 합니다.

그림. Multi-metric 머신 러닝

분석 완료 후 결과 보기를 통해 의심 행위를 확인할 수 있으며, 이상 행위가 식별된 타임라인은 빨간색으로 표기됩니다.

그림. Anomaly Explorer

분석 그래프를 보면 3월 18일부터 그래프가 갑자기 증가된 것이 확인되며, 자세한 시간 정보에서는 이상 행위에 대한 스코어와 근거를 확인할 수 있습니다.

그림. Anomaly Explorer

대상 IP 기준으로 분석된 내용을 보면 평소 1회 탐지되던 패턴이 11배로 증가하여 평소와 비정상적인 이상 현상이 발생했으며, 도착지 포트 탐지 횟수도 3월 19일 증가된 것을 확인했습니다. 통신 시간을 상세 분석한 결과, 새벽 05시에 통신이 집중되었으며, 몇 초 간격으로 서로 다른 도착지 IP로 통신이 이루어진 것을 확인했습니다. 이는 시스템 관리자가 SSH 통신을 하는 일반적인 간격(몇 분 이상)과 달리 아주 짧은 간격으로 발생했고3월 19일 하루만 갑자기 발생했다는 점에서 비정상적인 행위로 판단되었습니다.

결과적으로, 머신러닝을 통해 분석가의 편차와 상관없이22번 도착지 포트의 이상 행위와 대상 IP에 대한 이상 현상을 정확하게 식별할 수 있었습니다.

영상: https://youtu.be/EKV1gZjxPkU?si=iyigokW4TafX09ob

3. 머신 러닝 유즈케이스: 이상 ISP 식별

Elastic 머신 러닝 기능을 활용하여 네트워크 로그에서 잠재적인 보안 위협을 탐지하는 기술적 접근 방식은 조직의 보안 운영을 강화하는 핵심 유즈케이스 입니다.

특히 평소 네트워크 활동에서 관찰되지 않던 희귀한 ISP(Internet Service Provider) 정보나 새로운 ASN(Autonomous System Number)을 가진 대상과의 통신 패턴을 탐지하는 것은 무단 액세스나 데이터 유출 시도를 식별하는 매우 중요한 방법 중 하나입니다. 이러한 통신은 일반적인 비즈니스 트래픽이나 내부 사용자 활동에서는 전혀 예상되지 않는 주체와의 연결을 의미하며, 공격자가 숨겨진 인프라를 사용하고 있을 때 나타나는 의심스러운 징후가 됩니다.

이러한 유즈케이스를 탐지하기 위해 우리는 Elastic ML의 비지도 학습 기능(Unsupervised Learning)을 사용하여 네트워크 데이터의 정상적인 패턴을 학습하고 이 패턴에서 벗어나는 행위, 즉 희귀 이벤트(Rare Events)를 자동으로 찾아냅니다. 사용되는 ML Job은 RARE 디텍터를 이용합니다.

그림. 희귀(rare) 디텍터 기반의 머신 러닝 탐지

시간이 지남에 따라 각 대상의 ISP/ASN 정보별로 관찰되는 네트워크 활동의 정상 범위를 모델링하고 이 범위를 벗어나는 희귀한 활동을 이상 징후로 탐지합니다.

이 ML Job은 특정 대상의 ISP 또는 ASN 필드를 분석하고, 네트워크 트래픽 건수(count 함수)를 측정 지표로 사용합니다. 시간에 따른 각 대상 주체별 트래픽 패턴을 개별적으로 분석하여 평소 거의 혹은 전혀 트래픽이 발생하지 않던 ISP와 갑자기 통신이 증가하는 경우에 높은 이상 징후 점수(Anomaly Score)를 부여합니다.

  • 한국 ISP 출발지
  • 도착지 국가 정보가 한국
  • 로그 필터 : source.geo.country_name: “South Korea” and network.transport: “TCP”

탐지된 이상 징후는 Kibana의 Anomaly Explorer에서 시각화되어 보안 담당자가 쉽게 확인하고 영향 요인(Influencers)을 분석할 수 있으며, 이때 대상 ISP 또는 ASN 필드와 트래픽 건수가 주요 영향 요인으로 표시되어 이상 활동의 근본 원인을 빠르게 파악할 수 있습니다.

특히 취약한 보안으로 해킹 중간 경유지로 사용되는 경우 대학/개인공유기/특정기관에서 사용하는 IP 정보와 연관되는 경우가 있습니다.

이를 통해 보안 팀은 공격자가 사용하는 희귀한 C2(Command and Control) 인프라와의 통신을 자동화된 방식으로 식별하고 신속하게 대응함으로써 조직의 민감한 정보를 보호할 수 있습니다.

4. 머신 러닝 유즈케이스: 알려지지 않은 신규 보안 위협 탐지

다수의 보안 장비에서 수집되는 공격 이벤트(알람)에는 고유의 이벤트(알람) 이름을 가지고 있습니다. 다음은 한달 동안 IPS에서 탐지된 이벤트 목록을 테이블로 정리한 예제 입니다.

그림. IPS 탐지 통계 사례

탐지되는 공격 유형은 다양하고 하루에도 똑같은 이벤트가 수천 건 이상 탐지되고 이벤트를 발생 시킵니다. 반복적으로 발생되는 이벤트(알람)은 예외 처리를 통해 최적화 하고 이벤트 탐지 건수를 최적화해야 합니다. 이를 통해 공격과 연관된 이벤트에 집중할 수 있어야 합니다.

하지만 실제 운영 과정에서 모든 보안 이벤트를 최적화하는 작업은 쉽지 않습니다. 새로운 보안 위협을 식별하고 공격자에 의해 새롭게 발생하는 공격 탐지 이벤트(알람)를 식별하는 것은 기업 인프라를 보호하는 데 매우 중요한 유즈케이스 입니다.

머신 러닝을 통해 반복적으로 발생하는 이벤트를 제외하고 특정 기간 동안 탐지 되지 않은 보안 이벤트(알람)가 발생할 경우 보안팀에서 인지할 수 있다면 새로운 공격 위협이나 심각한 공격 행위를 구분하는데 매우 효율적으로 대응할 수 있습니다.

머신 러닝을 이용해 희귀(Rare) 조건의 데이터를 학습하고 자동으로 새로운 위험을 구분 합니다. Elastic Security로 수집된 인덱스에서 목적에 맞는 데이터를 추출하여 별도의 데이터셋을 생성한 후 ML학습을 수행할 수 있으며 운영자는 학습 결과를 스코어링(또는 그래프)와 같이 직관적으로 확인할 수 있도록 기능을 제공하고 있습니다. (※ ML Job 생성 및 확인). 아래는 실제 보안솔루션(IPS / 웹방화벽 / DDoS 대응 솔루션)에서 탐지된 이벤트를 추출하여 Rare 함수 기반 ML학습을 수행한 결과 일부입니다.

Elastic Security는 생성된 ML Job 의 스코어링 값(1~ 99)을 기준으로 ML 룰을 작성할 수 있습니다. 아래는 작성된 ML룰에 의해 탐지된 Alerts입니다. 보안 장비(DDoS/WAF/IPS) 이벤트(알람)를 기준으로 최근 한달 동안 탐지되지 않던 이벤트(알람)이 발생하면 머신 러닝 학습을 통해 경보를 발생 합니다.

5. 머신 러닝 유즈케이스: 네트워크 이상 트래픽 모니터

비정상적으로 크게 급증하는 패턴을 탐지하는 것은 서비스 가용성을 확보하는데 가장 중요한 방법 중 하나입니다. 일반적인 비즈니스 흐름이나 네트워크 운영에서 전혀 예상되지 않는 트래픽이 발생할 때 더욱 의심스러운 징후가 됩니다. 이는 내부 시스템에서 외부의 악의적인 대상으로 대량의 데이터가 전송될 수 있으며, 외부에서 내부로 비정상적인 네트워크 연결 증가나 실패는 서비스 제공에 심각한 문제가 발생한 징후일 수 있습니다.

이러한 유즈케이스를 탐지하기 위해 우리는 Elastic ML의 비지도 학습 기능을 사용하여 네트워크 데이터의 정상적인 패턴을 학습하고 이 패턴에서 벗어나는 행위를 자동으로 찾아냅니다. 사용되는 ML Job high_count와 같은 형태로 정의될 수 있는데, 이는 네트워크 활동의 정상 범위를 모델링하고 이 범위를 벗어나는 활동을 이상 징후로 탐지합니다.

실제 국내 운영 사례로 다음과 같이 프토토콜에 따른 트래픽을 학습하고 이상 징후를 선제적으로 대응에 활용되는 사례를 설명 합니다.

유즈케이스: TCP/UDP/ICMP/TLS 기반 High Count 머신 러닝 룰

Job/Rule 명분석 목적필드 데이터
protocol_pps_rcvdPPS/수신 바이트 급증pps.packets_pps : 수집 트래픽 내 유입량 정보(패킷 수 기반)
protocol_udp_bytesUDP 트래픽 급증수집 트래픽 내 유입량 정보(Inbound 기반)
protocol_tcp_bytesTCP 트래픽 급증procotol.*.bytes : 수집 트래픽 내 각 프로토콜 별 유입량 정보
http_bytes웹 트래픽(HTTP) 급증procotol.*.bytes : 수집 트래픽 내 각 프로토콜 별 유입량 정보
anomaly_outbound아웃바운드 의심 트래픽tx_rx.sent_bytes : 수집 트래픽 내 유입량 정보(Outbound 기반)
표. 네트워크 트래픽 모니터용 머신러닝

유즈케이스: TCP/UDP/ICMP/TLS 기반 High Count 머신 러닝 운영 팁

  • Bucket Span 조정 목표: 단발성 트래픽 스파이크로 인한 오탐(False Positive)을 줄이고, 이상 트래픽이 지속되는 패턴을 더 명확하게 식별하여 탐지 명확도를 높이는 데 중점을 두었으며, 이를 통해 최적화 튜닝을 진행했습니다.
  • 룰의 민감도 및 정확도 개선을 위해 주요 ML 룰의 Bucket Span 설정을 기존 1분에서 10분 단위로 조정하여 탐지 성능 개선
  • 기존 1분 단위로 판단을 진행하고 있으며, 이로 인해 단기간에 1회성으로 발생한 통신에 대해서도 높은 점수로 평가되는 경향을 보여 5~10분 단위로 분석 주기를 늘려 탐지 프로필의 정교함을 증가 시킵니다.
  • 트래픽 유입량(bps) 및 패킷 건수(pps)를 기반으로 분석을 수행해 데이터 값이 평시대비 커지긴 하였으나, 절대적인 수치는 낮은 경우(몇 백 kbits)가 높은 점수로 평가되는 경향을 보여 다수의 탐지 사례가 발생하기 때문에 출발지 IP의 Unique Count를 분석 데이터에 포함하여, 출발지 IP가 함께 상승하는 경우를 탐지(DDoS의 특징을 고려)

유즈케이스 탐지 예제: 머신 러닝을 통해서 아웃바운드 통신 급증 경보 발생

  • @timestamp: Aug 27, 2024 @ 14:53:06.221
  • 출발지 IP: 192.168.221.128
  • 도착지 IP: 185.125.190.36 / Country GB, Continent EU, Network 185.125.190.0/24
  • kibana.alert.rule.type: machine_learning

탐지된 정보를 활용해 대시보드를 구성할 수 있습니다. 보안 유즈케이스와 인프라 모니터 유즈케이스 모두 해당 합니다. 다음은 샘플 화면 사례 입니다.

그림. SOC 대시보드 예제

탐지된 정보를 기반으로 의심 국가나 지리정보를 기반으로 심층 분석 진행으로 이어 집니다.

그림. SOC 대시보드 개별 분석 예제

6. 머신 러닝 유즈케이스: 개인업무 고객정보조회 모니터

개인정보 유출 사고가 발생하면 기업 입장에서 중요한 비지니스 영향을 받습니다. 사고 조사 과정에서 개인정보 유출 시점에 일반적인 업무 절차와 다른 다양한 이상 징후가 확인 됩니다. 대표적인 개인정보 유출 사례를 다음과 같습니다.

  • 권한 오남용: 고객 정보에 접근 권한을 가진 내부자가 권한을 악용하여 비정상적으로 다량의 정보를 조회(예: 비정상적인 조회 패턴)하는 행위를 식별합니다.
  • 보안 사고: 개인정보 유출 사고 발생 시 대량의 정보 유출로 인한 이상 트래픽 발생이나 의심스러운 네트워크 통신을 통해 정보 유출 행위를 식별 합니다.

Elastic 머신 러닝을 활용해 정보 유출 의심 사례를 탐지한 사례를 살펴 보겠습니다. Elastic 머신 러닝은 다양한 조건을 이용해 정보 유출 행위를 탐지 합니다. 평소 정상 활동에 대한 패턴 학습을 통해 비정상적인 활동에 대한 임계치를 자동으로 생성 하고 임계치를 초과할 경우 경보를 통해 자동으로 알람을 발생 시킵니다.

머신러닝(ML) 학습유형설명ML 설정 요소
단일 메트릭 이상 탐지 (Single Metric Anomaly Detection)평소 조회 건수의 시간별/일별 패턴을 학습하여, 갑작스러운 조회 건수의 급증을 탐지합니다.Detector: high_count (조회 건수)
다중 메트릭 이상 탐지 (Multi-Metric Anomaly Detection)전체 조직의 조회 건수 패턴을 학습하는 동시에, 각 사용자(user.id) 별로 메트릭을 분리(Split by)하여 개별 사용자의 비정상적인 행동을 정교하게 탐지합니다.Detector: high_count (조회 건수) Split by: user.id (직원 계정)
모집단 이상 탐지 (Population)조직 내 다수의 직원이 특정 시점에 공통적으로 비정상적인 시간대에 조회하는 경우(예: 주말 새벽) 또는 평소 사용하지 않던 **희귀한 애플리케이션(application.name)**을 통해 조회하는 행위를 탐지합니다.Detector: high_non_zero_count Influencer Field: user.id, application.name
표 머신 러닝(ML) 탐지 유형

개인업무 고객정보조회 건수 모니터 사례

  • 직원정보, 고객 정보 조회 대응

영업점에서 근무하는 직원들의 고객정보화면 조회 건수를 학습하여, 타 직원에 비하여 많은 고객정보조회를 하는 직원 식별 목적의 머신 러닝 적용 사례를 소개 합니다.

그림. 임직원 고객 정보 조회 건수 머신 러닝 분석 결과

권한 없는 사용자가 특정 날짜에 고객정보 조회를 과도하게 조회할 경우 다음과 같이 기존 학습한 개인 정보 조회 건수를 기반으로 이상 행위를 탐지 합니다. 급격히 개인정보 조회건수가 증가하여 개인정보 유출 징후를 식별 할 수 있습니다.

실제 정보 유출에 연관되지 않았지만 가맹점에서 마케팅 목적으로 회원 정보에 대한 조회가 평소 대비 급증하였고, 개인 정보 유출 상황에 대해 적극적으로 탐지/대응이 가능 합니다.

그림.  개인 정보 조회 탐지 내역 분석

퇴직자 또는 퇴직 예정자의 업무 시스템별 이상 행위 모니터

  • 퇴직자 또는 퇴직 예정자의 업무시스템별 사용량 패턴 및 이상행위를 탐지

퇴직자 또는 퇴직 예정자의 평소 업무 시스템별 사용량을 기반으로 퇴직 전후의 이상 사용량 패턴을 분석 합니다.

징후 유형상세 설명머신 러닝 (ML) 학습 방식
비업무 시간 접근직원의 일반적인 근무 시간이 아닌 새벽, 주말, 공휴일에 고객 정보를 조회하는 행위.Time Series Anomaly Detection, time_of_day 함수
특정 기간 급증단기간(예: 1시간, 1일) 동안 조회량이 이전 30일 평균 대비 임계치를 초과하여 폭발적으로 증가하는 경우.high_count Detector, Influencer로 time 필드 사용
희귀한 대상 접근해당 직원이 평소 업무와 무관한 특정 고객군(예: VIP 고객 명단, 파산 고객 명단)의 정보를 조회한 경우.rare Detector, Partition Field로 customer.type 사용
표. 퇴직자 또는 퇴직 예정자 이상 행위 모니터 방식

다양한 개인정보 또는 정보보호 솔루션을 이용해 평소 학습량을 분석 합니다. 아래는 샘플로 복합기/정보보호 프라이버시 솔루션/자료반출승인 관련 시스템의 로그 정보를 학습해 평소 대비 이상 징후와 연관된 사용자를 식별할 수 있습니다.

7. 머신 러닝 유즈케이스: 이상거래탐지

금융 거래 중 보이스 피싱 또는 최근 보이스피싱과 피싱 사기는 갈수록 지능화되고 있으며, 범죄 수익금을 은닉하고 세탁하기 위해 대포통장 활용이 급증하고 있습니다. 금융기관의 기존 FDS(Fraud Detection System)는 주로 단순 임계값이나 미리 정의된 규칙(Rule-based)에 의존하기 때문에, 범죄자들이 이 규칙을 우회하는 새롭고 미묘한 이상 패턴을 실시간으로 포착하는 데 한계가 있습니다.

사기거래 탐지 유즈케이스 한계

  • 정적 규칙 의존: 규칙 기반 시스템은 알려진 공격 패턴에만 효과적이며, 신종 수법이나 변형된 패턴에 취약합니다.
  • 오탐(False Positive) 증가: 민감도를 높이기 위해 규칙을 강화할 경우 정상 거래까지 이상 거래로 분류하여 사용자 불편과 분석가의 피로도를 증가시킵니다.
  • 탐지 지연: 사기 행위가 완료된 후, 데이터를 사후 분석(Post-process)하는 경우가 많아 실시간 대응이 어렵고 피해 확산을 막기 어렵습니다.

Elastic 머신러닝(ML) FDS의 역할

Elastic Machine Learning 기반 FDS는 거래 데이터의 정상적인 행동 패턴을 스스로 학습하고, 정상 범위를 벗어나는 모든 비정상적인 행위(이상 징후, Anomaly)를 실시간으로 식별하여 이러한 한계를 극복합니다. 이는 대포통장을 통한 자금 이동의 특이성과 연속적인 행위를 포착하는 데 필수적입니다.

대포통장이 보이스피싱에 연루될 경우, 범죄자들은 피해금을 신속하게 분산시키거나 인출하기 위해 일련의 비정상적인 거래 시퀀스를 발생시킵니다. Elastic 머신러닝(ML)은 이러한 점검/테스트 행위와 “대량 인출 행위”의 연관성을 탐지하는 데 집중합니다.

사례 1: 미사용 계좌의 갑작스러운 고액 거래 및 시간대 이탈

시나리오: 오랫동안 사용되지 않던 계좌(대포통장)가 평소 거래가 전혀 없던 시간대에 활성화되어 소액(1,000원)을 입금한 후, 30분 뒤 고액(1,200만 원)을 인출하는 행위.

이상 징후:

  • 범인이 4시에 A 통장의 거래 가능 상태 여부를 확인하기 위해 1천원을 입금했다.
  • 30분 뒤 범인 E가 A 통장에서 1,200만원을 인출했다.
그림. 테스트 목적의 이상 거래 샘플 거래 로그(더미로그)

이상 행위 발생 순서

  1. 범인이 4시에 A 통장의 거래 가능 상태 여부를 확인하기 위해 1천원을 입금했다.
    • 한번도 거래 한적이 없던 계좌를 통해 거래 확인
    • 시간대 이탈: 계좌 주인(혹은 피해자)의 평소 입출금 활동 시간대가 아닌 희귀한 시간대에 거래 발생.
  2. 범인이 30분 뒤A 통장에서 1,200만원을 인출했다.
    • 최초 거래 주체: 거래 내역이 없던 **새로운 계좌(범인 계좌)**를 통해 거래 확인
    • 한번도 거래 한적이 없던 계좌를 통해, 평소 입출금이 발생하는 시간이 아닌 시간에 처음 거래 발생

Elastic Machine Learning 적용 방안

대포통장 연관 이상 행위 탐지를 위해 Elastic Stack은 비지도 학습(Unsupervised ML) 기반의 이상 징후 탐지를 사용합니다.

  • 비지도 학습: 희귀 패턴 탐지 (Rare Function): 대포통장 활성화는 전체 거래 모집단에서 매우 드문 이벤트이므로, Rare 함수를 활용하여 새로운 조합의 행위를 탐지합니다.
  • ML Job 유형: Anomaly Detection – Rare (희귀 함수)
  • 탐지 필드: Transaction_time (거래 시간)과 Withdrawal_Account (출금 계좌) 조합.
그림. 이상 거래 탐지 테스트

작동 원리: 평소 특정 시간대에 특정 계좌를 통해 거래가 이루어질 확률을 모델링하고, 새로운 계좌가 비정상적인 시간대에 거래하는 행위를 높은 이상 징후 점수로 식별합니다.

  • 이상 징후 시간: 2023년 3월 26일 04:00 (Severity: Warning)
  • 탐지 이유: rare by Transaction_time (거래 시간 기준 희귀 이벤트)
  • 영향 요인 (Influencers):
    • Transaction_time: 04:00 (접속한 적 없는 비정상적인 시간대)
    • Withdrawal_Account: 5161-3185-197 (한 번도 거래한 적 없던 계좌)

Elastic 머신러닝(ML) 기반 FDS는 실시간으로 진화하는 보이스피싱 및 대포통장 사기 수법에 효과적으로 대응할 수 있는 필수적인 기술입니다. 단순 규칙 기반 탐지에서 벗어나 데이터의 본질적인 특이성과 복합적인 거래 시퀀스를 학습하고 분석함으로써, 금융기관은 사기 피해를 최소화하고 고객의 자산을 보호할 수 있습니다.

8. 머신 러닝 유즈케이스: 악성코드 배포 탐지

도메인 생성 알고리즘(Domain Generation Algorithm, DGA)은 악성코드 제작자가 감염된 클라이언트 컴퓨터와 명령 및 제어(C2) 서버 간의 통신을 숨기기 위해 사용하는 기술입니다.

DGA는 수백 또는 수천 개의 무작위로 생성된 도메인 이름을 동적으로 생성하며, 이 중 하나만이 C2 서버의 IP 주소로 확인됩니다. 이는 방어 시스템이 단순한 도메인 차단 목록(Blocklist)으로 악성 도메인을 차단하는 것을 불가능하게 만들어, 멀웨어의 지속성을 높이는 핵심 요소입니다.

그림. 도메인 생성 알고리즘 앱

DGA 탐지 패키지는 다음 핵심 요소를 포함합니다.

  • 지도 머신러닝 모델 (Trained Model): DGA 패턴을 학습한 분류 모델로, DNS 쿼리 데이터가 악성(DGA)일 확률을 예측합니다.
  • 수집 파이프라인 구성 (Ingest Pipeline): 수집 시점(Ingest Time)에 모델을 적용하여 들어오는 DNS 로그를 즉시 보강하는 프로세스를 정의합니다.
  • 추론 프로세서 (Inference Processor): 수집 파이프라인 내에서 지도 학습 모델(ml_dga_inference_pipeline)을 호출하여 DNS 쿼리 필드에 대해 DGA 확률 점수를 부여합니다.
  • 이상 징후 탐색 Job (Anomaly Detection Jobs): ML 모델의 예측 결과(확률 점수)를 기반으로 비지도 학습을 수행하여 이상 징후를 탐지합니다.
  • 탐지 규칙 (Detection Rules): Kibana의 규칙 엔진에서 이상 징후 Job의 결과를 참조하여 최종 경보를 발생시킵니다.

Elastic Security의 DGA 탐지 통합 패키지는 지도 학습 모델을 Kibana 내에 통합하여, 방어 시스템이 피하기 어려웠던 DGA 기반 C2 통신을 효율적으로 식별할 수 있는 강력한 방어 메커니즘을 제공합니다. 이는 수집 시점의 데이터 보강과 ML 기반의 행동 분석을 결합함으로써, 최신 멀웨어 위협에 대한 선제적 보안 대응 능력을 대폭 강화합니다.

9. Elastic 머신 러닝 기술 자료

실전사례: 웹 애플리케이션 로그 분석

로그 가공 작업은 분석되지 않거나 불필요한 정보를 치워서 좀더 효율적으로 이벤트를 분석하기 위한 작업 이다. 다음과 같은 가정을 해보자.

“일반적인 네트워크 트래픽엔 공격 패킷이나, 악성코드가 없다.”

하지만 이러한 트래픽은 짚더미처럼 수 없이 많다. 짚더미에 숨어 있는 바늘 같은 공격 트래픽을 찾는 일은 결코 쉬운 일이 아니다. 불필요한 정보들을 치워 보자.

웹 로그를 이용해 짚더미를 치우는 방법을 같이 살펴보자

로그 파서를 설치하고 실행 시키면 로그를 분석하기 위해서는 로그 타입을 “ IISW3CLOG” 형식으로 지정 한다.

<짚더미 1단계 – 메소드 점검>

먼저 분석할 웹 로그에서 응답 코드 현황에 대한 통계를 추출한다.

먼저 샘플 로그를 저장하고 해당 로그 위치를 경로로 지정해 다음과 같은 쿼리 문은 로그 파서 쿼리창에 입력하고 실행 버튼()을 클릭 하면 다음 그림처럼 응답코드 통계를 추출할 수 있다.

SELECT sc-status AS Status,
         COUNT(*) AS Total
FROM ‘C:\(로그파일 경로 지정)\ex*.log’
GROUP BY Status
ORDER BY Total DESC
그림 응답 통계 추출

<짚더미 치우기 2단계 – 정상으로 보이는 짚더미를 치운다>

일반적으로 웹 응답과정에서 자주 발생하는(흔히 정상 범주에 해당하는) 응답코드를 제외하고 나머지 코드를 살펴 보자. 정상 범주에 대한 기준은 다음과 같이 정의 하자.

응답코드설명
200 클라이언트 요청이 성공했습니다.
302 개체 이동
304 수정되지 않았습니다.
404 찾을 수 없습니다.

4개 응답코드를 제외하고 500(에러), 401(거부), 201(파일생성), 206(일부응답)와 같이 잘 발생하지 않는 응답코드 위주로 분석을 진행 하자. 동일하게 로그 파서 쿼리 창에 다음과 같이 입력하고 실행 한다.

SELECT sc-status AS Status, cs-method, cs-uri-stem, c-ip
FROM ‘C:\(로그파일 경로 지정)\ex*.log’
WHERE (Status = 500) or (Status = 401) or (Status = 201) or (Status = 206)
그림 로그쿼리(정상범주제외)

총 25개의 결과물이 검색되었다. 25개 정도면 충분히 하나씩 전수 분석이 가능한 범위다. 응답코드를 정렬해서 하나씩 살펴보자.

먼저 201 응답 코드로 응답된 URL을 보면 /test.txt, /da.txt URL에 대해 3가지 메소드(PUT, COPY, MOVE)가 사용되었다.

Statuscs-methodcs-uri-stemc-ip
201PUT/test.txt192.168.20.20
201COPY/test.txt192.168.20.20
201PUT/da.txt192.168.20.37
201MOVE/da.txt192.168.20.37

<짚더미 치우기 3단계 – 공격자 상세 분석>

이제 공격자로 의심되는 IP에 대해 상세하게 분석해 보자.

다음 그림 처럼 쿼리문을 입력하고 결과를 확인해 보자.

SELECT TO_TIMESTAMP(date,time) as Datetime, sc-status, cs-method, cs-uri-stem, c-ip
FROM ‘C:\(로그파일 경로 지정)\ex*.log’
WHERE c-ip like ‘192.168.20.37’
ORDER BY Datetime
그림 로그쿼리(공격자분석)

웹 로그를 분석해 보면 192.168.20.37 IP에서 PUT메소드를 이용해 da.txt파일을 업로드 하였고, 성공적으로(201 응답코드) 웹 서버에 파일이 업로드 된것을 알 수 있다. 이후 공격자는 MOVE메소드를 이용해서 업로드한 da.txt 파일을 fuck.asp 파일로 변경하였다.

해당 파일은 IIS 환경에서 동작하는 웹 쉘 파일로 공격자는 웹쉘을 이용해 웹 서버를 장악했다.

정상 범주의 데이터를 제거한 것만으로 공격자의 공격 경로를 찾아 낸 것이다.

응용프로그램 로그

다음 표는 윈도우에서 제공하는 애플리케이션별 로그 저장 위치에 대한 정보를 표로 정리한 것이다. 각각의 애플리케이션의 자세한 옵션항목은 속성에서 확인할 수 있다.

구분경로
IIS 웹로그c:\WINDOWS\system32\LogFile\W3SVCX\exyymmdd.log
FTP로그C:\WINDOWS\system32\LogFiles\MSFTPSVCX\exyymmdd.log
SMTP로그C:\WINDOWS\System32\LogFiles\SmtpSvc1\exyymmdd.log
DHCP 로그C:\WINDOWS\System32\dhcp
DNS로그이벤트 뷰어를 통해 확인 가능 합니다.
표 애플리케이션별 로그 위치

로깅 속성에 따라 로그 보관 기관과 로그 파일 관리 방식을 설정할 수 있다. 간혹 침해사고분석을 하다보면 로그 파일 크기를 제한해서 분석에 필요한 로그가 없는 경우가 있다. 이런 경우는 로깅 옵션에 파일 크기를 작게 설정해 두어서 그렇다.

그림 로깅 속성

웹 로그 형식은 웹 서버의 종류(아파치, 톰캣, IIS, Resin)에 따라 다양한 형태로 기록된다. 이는 로그에 기록되는 항목과 옵션 항목의 기록 순서가 틀릴 수도 있다는 의미이다. 로그 형식의 대표적인 종류는 아파치 로그 형식인 Common Log Format와 앞서 여러분이 살펴본 윈도우의 W3C 형식이 있고, 이외에도 로그를 기록하는 형식은 다양하다. (IISW3C, NCSA, IIS, IISODBC, BIN, IISMSID, HTTPERR, URLSCAN, CSV 등)

애플리케이션로그 샘플
아파치 Common Log Format127.0.0.1 – frank [10/Oct/2000:13:55:36 -0700] “GET /apache_pb.gif HTTP/1.0” 200 2326
윈도우 IISW3C2010-11-05 08:34:29 W3SVC1 192.168.0.100 PUT /test.txt – 80 – X9.XX.XXX.8X – – 201 0 0

표 웹 애플리케이션 로그 샘플

윈도우 시스템 경로에 있는 Temp 디렉터리에 애플리케이션이나 기타 프로그램 관련 임시 파일 및 로그가 저장 된다. 일부 악성코드는 설치 로그를 Temp 폴더에 저장하기 때문에 로그 점검 시 system.tmp 파일도 점검하는 것을 놓치면 안된다.

백도어 프로그램 중 하나인 HKDOOR는 공격 대상 시스템에 악성코드를 감염 시키는 과정이 system.tmp 파일에 기록된다. 다음 로그가 실제 악성코드를 시스템에 설치하면서 발생한 로그다.

C:\WINNT\temp>type system.tmp
2/27/2012 21:21:59 l=0
Modth.Flag=2,Modth.ModifyModth=1,Modth.StartModth=1,
Param[0]=C:\WINNT\system32\services.exe,Param[1]=hkdoordll.dll,Param[2]=DllRegisterServer
2/27/2012 21:21:59 l=0
Freeing ‘hkdoordll.dll’:
2/27/2012 21:21:59 l=0
Couldn’t free
 
…..
 
2/27/2012 21:22:1 l=0
Start hacker’s door successfully!
2/27/2012 21:22:2 l=0
The backdoor is installed successfully!
C:\WINNT\temp>

윈도우에서 제공되는 방화벽은 로깅이 가능하다. 다음은 윈도우에서 자체 방화벽 로그를 설정하는 방법이다. 허용 로그를 기록하여 침해사고가 발생했을 때 네트워크 통신 내역을 분석 정보로 활용 할 수 있다.

그림 윈도우 방화벽 로깅

네트워크 통신 정보는 재부팅 되거나 통신이 종료되면 사리지는 정보다. 하지만 방화벽 로깅을 통해서 분석에 활용할 수 있게 된다.

침해사고사례 사전식 대입 공격 로그인 성공 로그 검색

사전식 대입공격이라 함은 흔히 무작위 대입공격, 또는 패스워드 추측공격으로 침입탐지 시스템이나 패킷 분석 시 자주 나타나는 공격 유형 중 하나 이다.

자주 보이는 만큼 대비를 많이 하여 실제 위험도는 낮지만 방심하면 언제든지 공격을 당할 수 있다.

이번에 소개할 사례도 잠깐의 방심으로 침해가 발생한 사례다. 해당 침해사고는 시스템 침입이 발생되고 CERT팀으로 시스템 점검 의뢰가 접수 되었다.

확인된 증상으로는 시스템에서 아웃바운드로 비정상 트래픽이 발생하고, 시스템에 파일들이 생성되었다는 내용 이다.

시스템 분석을 위해 IDC로 이동하였고, 이동 후 시스템 관리자를 통해 시스템 운영현황과 구성을 파악하였다.

특정 Application 관련 서버로 사용하기 위해 시스템을 재설치 하였고 재설치 후 인터넷 연결 1시간 만에 이상 증상이 발생 되었음을 전달 받았다. 침해가 발생한 시스템이 설치된 네트워크에는 F/W등의 네트워크 보안 장비가 설치 되지 않았었다.

시스템 점검을 위해 침해사고가 발생된 것으로 의심되는 시스템 하드를 별도의 서버에 마운트하여 분석을 시작하였다.

시스템을 마운트 하고 가장 먼저 점검 시스템의 실행 명령 내역을 점검 하였다. 확인 결과 여러 사이트에서 파일을 다운로드 하였고, 파일을 다운로드 후 피해 시스템에서 실행 시킨 흔적이 확인 되었다.

실행된 명령 내역을 살펴 보니 특정 사이트의 URL을 통해 압축된 프로그램을 다운받아 압축을 풀고 파일에 포함된 스크립트 파일을 실행 시키는 행위가 반복적으로 나타났다.

스크립트를 실행 시키면서 IP 대역을 인자값으로 사용하는 것도 확인 할 수 있었다.

실행된 명령내역을 점검하며 다운로드 한 파일들은 별도로 다운로드 하여 시스템 점검과 툴분석을 병행 하였다.

시스템 침해 경로는 시스템로그를 통해 쉽게 찾을 수 있었다.

침해시스템에 구동중인 SSH 서비스를 대상으로 특정 IP에서 사전식 대입공격이 이뤄졌고, 단 4번만의 시도로 접속이 성공된 것이 확인 되었다.

다음은 실제 침해발생 시스템의 secure 로그다. 사전식 대입공격을 시도한지 4번만에 로그인 패스워드 획득에 성공한다. “Accepted password” 로그는 성공적으로 로그인이 이뤄지면 남는 로그다.

XXX XX XX:XX:18 [HOSTNAME] sshd[13015]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=123.xxx.xxx.68  user=root
XXX XX XX:XX:20 [HOSTNAME] sshd[13015]: Failed password for root from 123.xxx.xxx.68 port 47277 ssh2
XXX XX XX:XX:20 [HOSTNAME] sshd[13016]: Received disconnect from 123.xxx.xxx.68: 11: Bye Bye
<중략>
XXX XX XX:XX:30 [HOSTNAME] sshd[13021]: Accepted password for root from 123.xxx.xxx.68 port 48306 ssh2
XXX XX XX:XX:30 [HOSTNAME] sshd[13021]: pam_unix(sshd:session): session opened for user root by (uid=0)

총 15회 대입공격을 시도 하였다.

공격 성공은 4번째 시도에 이뤄졌고, 사전식 대입 공격툴은 준비한 사전파일의 모든 계정 패스워드를 시도하고 공격을 종료 하였다.

분석 과정에서 피해 시스템을 공격한 툴이 공격자에 의해 피해 시스템에도 다운로드 한 것을 분석과정에서 확인 하였다. 공격자는 동일한 방식으로 시스템을 공격하고 성공하면 동일한 프로그램을 다운로드 하고 또 다른 시스템을 공격하는 방식으로 공격을 진행하고 있는 것으로 추정 되었다.

해당 프로그램의 사전파일의 4번째 패스워드가 실제로 피해시스템에서 설치 시 설정된 패스워드와 동일한 것으로 확인 되었다. 침해사고가 발생된 시스템에 초기 패스워드가 쉬운 패스워드로 설정되었고, 이 상태에서 인터넷에 연결되어 “흔히” 발생하는 사전식 대입 공격에 의해 시스템 침해가 발생된 것이.

해당 시스템은 점검 후 재포맷을 하고, 패스워드에 대해서도 강화된 패스워드로 변경하여 설정 되었다. 실제 필드에서 침해사고로 시스템을 분석하다 보면 금번 사례와 같이 사소한 실수로 시스템이 공격자에 의해 장악되는 경우를 자주 보게 된다.

항상 공격은 어렵고 복잡한 경로를 통해 이뤄지는 것보다 허술하거나 관리가 소홀한 곳을 통해 이뤄진다.

로그인 성공 로그 검색

시스템 로그 중 secure로그나 auth.log로그에는 로그인 성공, 실패 내역이 기록된다. 사전식 대입공격이 발생하면 시스템에 다량의 로그인 실패가 발생되기 때문에 공격을 시도한 내역에 대해 확인이 가능하다. 실제로 사전식 대입 공격으로 침해가 발생되었던 시스템의 로그를 함께 살펴보자.

사전식 대입 공격으로 침해가 발생되었고, 해당 로그가 secure로그를 통해 확인 되었다. 로그를 살펴보면 특정 IP(123.xxx.xxx.68)에서 tty타입이 SSH(SSH접속 시도)로 인증이 실패되었다. 인증을 시도한 사용자는 root였다. 해당 IP에서 몇차례의 인증 실패 후 굵게 표시된 부분을 보면 ‘Accepted password for root’ 구문이 로그에 기록된 것을 확인 할 수 있다. 해당 구문이 root유저의 패스워드 인증이 성공되었다는 로그다. 공격자는 사전식 대입 공격을 통해 여러 번의 패스워드 대입 시도를 통해 root계정으로 로그인이 성공했다. 참고로 사전식 대입 공격 시 정해진 사전파일의 모든 계정정보를 대입하고 프로그램이 종료되기 때문에 아래 로그와 같이 인증이 성공한 후에도 인증 실패된 로그가 계속 남아 있다.

XXX XX XX:XX:25 [HOSTNAME] sshd[13019]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=123.xxx.xxx.68  user=root
XXX XX XX:XX:28 [HOSTNAME] sshd[13019]: Failed password for root from 123.xxx.xxx.68 port 47935 ssh2
XXX XX XX:XX:28 [HOSTNAME] sshd[13020]: Received disconnect from 123.xxx.xxx.68: 11: Bye Bye
XXX XX XX:XX:30 [HOSTNAME] sshd[13021]: Accepted password for root from 123.xxx.xxx.68 port 48306 ssh2
XXX XX XX:XX:30 [HOSTNAME] sshd[13021]: pam_unix(sshd:session): session opened for user root by (uid=0)
XXX XX XX:XX:37 [HOSTNAME] sshd[13051]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=123.xxx.xxx.68  user=root
XXX XX XX:XX:40 [HOSTNAME] sshd[13051]: Failed password for root from 123.xxx.xxx.68 port 48985 ssh2
XXX XX XX:XX:40 [HOSTNAME] sshd[13052]: Received disconnect from 123.xxx.xxx.68: 11: Bye Bye

다음은 우분투에 기록된 SSH로그인 로그다. 동일하게 인증을 시도한 계정과 원격 IP, 인증 성공 여부를 확인 할 수 있다.

May 20 20:03:58 ubuntu sshd[6439]: Accepted password for root from 192.168.68.1 port 2763 ssh2
May 20 20:03:58 ubuntu sshd[6439]: pam_unix(sshd:session): session opened for user root by (uid=0)
May 20 20:04:05 ubuntu sshd[6439]: pam_unix(sshd:session): session closed for user root
May 20 20:05:55 ubuntu su[6529]: Successful su for sectest by root
May 20 20:05:55 ubuntu su[6529]: + /dev/pts/0 root:sectest
May 20 20:05:55 ubuntu su[6529]: pam_unix(su:session): session opened for user sectest by root(uid=0)
May 20 20:07:47 ubuntu su[6529]: pam_unix(su:session): session closed for user sectest
May 20 20:09:01 ubuntu CRON[6616]: pam_unix(cron:session): session opened for user root by (uid=0)
May 20 20:09:01 ubuntu CRON[6616]: pam_unix(cron:session): session closed for user root

운영체제에서 남기는 시스템 로그 중 로그인 내역과 로그인 시도가 실패 했을 때, 성공했을 때 로그 기록을 예제로 살펴 보았다.

로그 종류 및 설명은 다음을 참고 하기 바란다.

경로설명
/var/logbtmp/loginlog/failedlogin로그인 실패에 대한 기록
wtmp사용자들의 로그인 로그아웃 정보 누적 기록
secure운영체제 및 응용프로그램의 주요 동작 상태
messagesu, 특정 데몬 및 부팅 시 발생된 에러 기록
lastlog모든 사용자에 대한 접속 정보
/var/log/httpdaccess_log접속 요청 및 시도에 대한 로그(web)
error_log접속 요청 및 에러에 대한 로그(web)
/var/runutmp현재 로그인한 사용자들에 대한 상태를 기록
표 리눅스 주요 로그

윈도우 이벤트 로그 분석 사례

보안로그를 이용해 컴퓨터 사용 시간 계산하기

앞서 설명한 보안 로그에서 로그온 이벤트와 로그오프 이벤트(이벤트 ID 528, 551)를 이용해 컴퓨터에 로그인해 사용한 시간을 추측이 가능해 진다. 아래 표는 사용자가 컴퓨터에 로그인 후 로그오프한 감사 로그다.

이벤트 ID이벤트 설명
로그온(이벤트 ID 528/4624)이벤트 형식: 성공 감사
이벤트 원본: Security
이벤트 범주: 로그온/로그오프
이벤트 ID: 528
날짜: 2014-03-05
시간: 오전 12:28:13
사용자: SONG\BigRoot
컴퓨터: SONG
로그오프(이벤트 ID 551/4634)이벤트 형식: 성공 감사
이벤트 원본: Security
이벤트 범주: 로그온/로그오프
이벤트 ID: 551
날짜: 2014-03-05
시간: 오전 12:37:20
사용자: SONG\BigRoot
컴퓨터: SONG
표 로그인/로그오프 이벤트

로그를 통해 최초 2014-03-05 오전 12:28:13에 BigRoot사용자가 로그인해 2014-03-05 오전 12:37:20에 로그오프 한 것을 확인 할 수 있다. 사용자는 대략 10분 가량 시스템을 사용한 것을 확인 할 수 있다.

프로그램 실행 추적

이번에는 보안 로그에 기록되는 프로세스 정보를 이용해 실행된 코드를 확인하는 방법이다. 보안 로그 중에 이벤트 ID 593 로그는 특정 사용자가 정상적으로 종료한 프로세스 정보를 기록 한다.

이벤트 ID: 593 (0x0251)
종류: 성공 감사
설명: 프로세스를 끝냈습니다.
프로세스 ID: %1 사용자 이름: %2
도메인: %3 로그온 ID: %4

이벤트 ID 593 로그에는 종료한 프로세스 ID와 사용자 이름, 도메인 정보, 로그온 ID가 기록된다. 실제 로그 샘플을 보면 다음과 같다

이벤트 종류 : 성공 감사
이벤트 원본 : Security
이벤트 범주 : 세부 추적
이벤트 ID : 593
날짜 : 2013/02/05
시간 : 13:43:42
사용자 : NT AUTHORITY \ SYSTEM
컴퓨터 : ADMIN – DB
설명 :
과정 종료 :
프로세스 ID : 3456
이미지 파일 이름 : C : \ WINDOWS \ ime \ sl.exe
사용자 이름 : ADMIN – DB $
도메인 : WORKGROUP
로그온 ID : (0x0, 0x3E7)

이벤트 ID 593 샘플 로그에 기록된 정보는 넷바이오스 연결을 통해 프로그램이 실행된 내역이 기록되었다. 프로세스 ID는 3456이고, 이미지 파일로 “C:\WINDOWS\IME\sl.exe” 파일이 사용되었다. 일반적으로 IME폴더에는 sl.exe 실행파일이 존재하지 않는다. 해당 파일은 침해시스템에 공격자가 저장해둔 악성 코드이고, 시스템에 침입한 공격자가 넷바이오스 연결을 통해 sl.exe파일을 실행한 것이다. 실제로 해당 사례는 넷바이오스 연결 후 pstool을 이용해 시스템 명령을 실행했던 사례다.

다음 이벤트 로그는 cmd.exe를 이용해 프로세스 ID 4580이 관리자 계정에 의해 실행된 로그다. 앞선 로그와 차이점은 sl.exe를 실행시킨 사용자는 “ADMIN-DB$”이고, “cmd.exe”를 실행시킨 사용자는 administrator다. 사용자에 “ADMIN-DB$”라고 기록되는 것은 공유목록 이름이며, 넷바이로스 연결을 통해 프로그램이 실행되었다는 의미다.

이벤트 종류 : 성공 감사
이벤트 원본 : Security
이벤트 범주 : 세부 추적
이벤트 ID : 593
날짜 : 2013/02/19
시간 : 16:57:00
사용자 : ADMIN – DB \ Administrator
컴퓨터 : ADMIN – DB
설명 :
과정 종료 :
프로세스 ID : 4580
이미지 파일 이름 : C : \ WINDOWS \ system32 \ cmd.exe
사용자 이름 : Administrator
도메인 : ADMIN – DB
로그온 ID : (0x0, 0x75B64A)

넷바이오스 연결 보안로그

이벤트ID보안로그
이벤트ID: 680이벤트 형식:    성공 감사
이벤트 원본:    Security
이벤트 범주:    계정 로그온
이벤트 ID:       680
날짜:             2014-02-20
시간:             오후 4:20:37
사용자:          SVCTAG-F5C9HBX\Administrator
컴퓨터: SVCTAG-F5C9HBX
설명:
로그온 시도:    MICROSOFT_AUTHENTICATION_PACKAGE_V1_0
 로그온 계정:   administrator
 워크스테이션:  DGSONG
 오류 코드:      0x0
이벤트ID: 576이벤트 형식:    성공 감사
이벤트 원본:    Security
이벤트 범주:    로그온/로그오프
이벤트 ID:       576
날짜:             2014-02-20
시간:             오후 4:20:37
사용자:          SVCTAG-F5C9HBX\Administrator
컴퓨터: SVCTAG-F5C9HBX
설명:
새로운 로그온에 지정된 특수 권한
         사용자 이름:    Administrator
         도메인:          SVCTAG-F5C9HBX
         로그온 ID:                (0x0,0xD512F86)
         권한:    SeSecurityPrivilege
                  SeBackupPrivilege
                  SeRestorePrivilege
                  SeTakeOwnershipPrivilege
                  SeDebugPrivilege
                  SeSystemEnvironmentPrivilege
                  SeLoadDriverPrivilege
                  SeImpersonatePrivilege
이벤트ID: 540이벤트 형식:    성공 감사
이벤트 원본:    Security
이벤트 범주:    로그온/로그오프
이벤트 ID:       540
날짜:             2014-02-20
시간:             오후 4:20:37
사용자:          SVCTAG-F5C9HBX\Administrator
컴퓨터: SVCTAG-F5C9HBX
설명:
성공적 네트워크 로그온:
         사용자 이름:    Administrator
         도메인:          SVCTAG-F5C9HBX
         로그온 ID:                (0x0,0xD512F86)
         로그온 유형:    3
         로그온 프로세스:        NtLmSsp
         인증 패키지:    NTLM
         워크스테이션 이름:      DGSONG
         로그온 GUID:   –
         호출자 사용자 이름:     –
         호출자 도메인:  –
         호출자 로그온 ID:       –
         호출자 프로세스 ID: –
         전송된 서비스: –
         원본 네트워크 주소:     192.168.10.123
         원본 포트:       0

일반적으로 넷바이오스 연결을 하면 3가지 유형의 보안 로그가 발생 된다. 공통점은 로그온 유형이 3번이고 출발지 IP정보와 컴퓨터 이름이 포함된 로그가 기록 된다는 것이다.

del 옵션을 이용해 연결을 끊게 되면 로그오프(ID 538) 로그가 기록된다.

실행한 명령: net use \\IP /del

이벤트ID보안로그
이벤트ID: 538이벤트 형식:    성공 감사
이벤트 원본:    Security
이벤트 범주:    로그온/로그오프
이벤트 ID:       538
날짜:             2014-02-20
시간:             오후 4:20:09
사용자:          SVCTAG-F5C9HBX\Administrator
컴퓨터: SVCTAG-F5C9HBX
설명:
사용자 로그오프:
         사용자 이름:    Administrator
         도메인:          SVCTAG-F5C9HBX
         로그온 ID:       (0x0,0xD50845F)
         로그온 유형:    3

원격 명령 실행 로그

넷바이오스(netbiois) 연결을 통해 시스템 명령을 실행하면 윈도우 이벤트 로그에 기록된다. sysinternals 패키지에 있는 프로그램을 이용해서 확인해 보자.

다음은 ‘psexec’ 명령을 실행한 후 이벤트 로그를 확인한 내용 이다.

이벤트 형식:    정보
이벤트 원본:    Service Control Manager
이벤트 범주:    없음
이벤트 ID:       7036
날짜:             2015-01-31
시간:             오후 1:05:57
사용자:          N/A
컴퓨터: [컴퓨터이름]
설명:
PsExec 서비스가 실행 상태로 들어갔습니다.

설명 부분에 “PsExec 서비스가 실행 상태로 들어갔습니다.” 구문이 기록 되는데 이는 pstool 툴에 포함된 ‘psexec’ 명령을 이용해 원격 시스템에 명령을 실행한 것이다.

이벤트 삭제 로그

간혹 공격자가 추적을 방해하기 위해 로그를 삭제 하기도 한다. 로그를 삭제한 행위도 보안로그에 기록되기 때문에 로그가 삭제 되었는지 여부를 점검 할 수 있다.

Event ID: 517
Type: Success Audit
Description: The audit log was cleared
             Primary User Name: %1      Primary Domain: %2
             Primary Logon ID: %3       Client User Name: %4
             Client Domain: %5          Client Logon ID: %6
 
이벤트 형식:    성공 감사
이벤트 원본:    Security
이벤트 범주:    시스템 이벤트
이벤트 ID:       517
날짜:             2014-07-18
시간:             오후 12:33:45
사용자:          NT AUTHORITY\SYSTEM
컴퓨터: SONGT60
설명:
감사 로그가 지워졌습니다.
         기본 사용자 이름:       SYSTEM
         기본 도메인:    NT AUTHORITY
         기본 로그온  ID:         (0x0,0x3E7)
         클라이언트 사용자 이름:         songdg
         클라이언트 도메인:      SONGT60
         클라이언트 로그온 ID:  (0x0,0x157AF)

윈도우 이벤트 ID와 로그온 로그 점검

침해사고나 시스템분석 시 가장 많은 정보를 가지고 있는 항목이 로그다. 실제 시스템 분석 시 가장 많은 시간을 사용하는 부분이 로그를 분석하는 작업이다.

윈도우 시스템에서 발생되는 모든 로그는 이벤트 로그에 남는다. 윈도우의 이벤트 로그를 통해 공격자가 원격으로 접속한 IP 주소나 중요한 접근 정보가 발견되기도 한다. 해킹 흔적이 남기 때문에 공격자에 의해 삭제되기도 한다.

Appendix L: Events to monitor

https://learn.microsoft.com/en-us/windows-server/identity/ad-ds/plan/appendix-l–events-to-monitor

리눅스에서는 ‘logs’ 폴더 및에 기록되는 시스템 로그에 모든 사용자의 행적이 남는다. 시스템 명령 실행에서부터 인증 내역까지 분석에 필요한 정보를 확인한 수 있다.

시스템에 침입하기 위해 어플리케이션을 대상으로 취약점을 공격한다. 최근에는 FTP, Telenet, SMTP등의 애플리케이션이 아닌 HTTP를 대상으로 공격이 가장 많이 발생하고, 실제로도 HTTP를 통해 침해가 많이 발생된다. 그래서 침해사고분석의 해결실마리가 웹 로그를 통해 많이 발견된다.

시스템에서 제공되는 로그 종류를 알아야 분석 시 시스템에서 제공되는 로그를 활용할 수 있다.

보안로그에 기록되는 이벤트는 각각 로그 유형에 따라 이벤트 ID 가 부여 된다. 이 이벤트 ID는 시스템의 보안과 관련있는 설정 변경이나 계정 로그인 실패/성공 등의 정보를 구분 한다.

실제 침해사고가 발생해 시스템을 점검할 경우 보안 로그 분석 시 엄청난 양의 보안 로그를 분석해야 하는 경우가 대부분 이다. 이런 경우 이벤트 ID를 이용해 필요한 데이터를 따로 추출해 로그를 분석 한다. 분석 시에는 앞서 소개한 로그 분석 프로그램을 이용해 이벤트 ID별로 필터링 하여 검색한다.

마이크로소프트에서 제공되는 윈도우 이벤트 ID를 잠깐 살펴보자. 500번대와 관련된 이벤트 로그는 대부분이 로그온과 관련된 로그다. 다음이 간단하게 이벤트 ID와 해당 이벤트에 대한 설명이다. 추가로 이벤트 ID별로 자세한 설명을 책의 마지막에 추가 하였으니 좀더 많은 내용을 검색하고자 하면 참고하기 바란다.

이벤트 ID설명
528로그온 성공
529로그온 실패 원인: 알 수 없는 사용자 이름 또는 잘못된 암호
530로그온 실패 원인: 계정 로그온 제한 시간 위반
531로그온 실패 원인: 현재 사용할 수 없는 계정
532로그온 실패 원인: 지정한 사용자 계정이 만료되었습니다.
533로그온 실패 원인: 사용자는 이 시스템에 로그온이 허용되지 않았습니다.
534로그온 실패 원인: 사용자는 이 시스템에 요구한 로그온 유형의 권한이 없습니다.
535로그온 실패 원인: 지정한 계정의 암호가 만료되었습니다.
536로그온 실패 원인: NetLogon 구성 요소가 활성화되어 있지 않습니다.
537로그온 실패 원인: 로그온 중 예기치 않은 오류가 발생했습니다.
538사용자 로그오프
539로그온 실패 원인: 계정이 잠겼습니다.
644성공 감사 설명: 사용자 계정이 잠겼습니다
표 윈도우 2003기반 주요 이벤트 ID설명

이벤트 ID설명
4720사용자 계정을 만들었습니다.
4722사용자 계정이 활성화 되었습니다.
4723계정의 암호를 변경 하려고 했습니다.
4724계정의 암호를 다시 설정 하려고 했습니다.
4725사용자 계정을 비활성화 되었습니다.
4726사용자 계정이 삭제 되었습니다.
4738사용자 계정이 변경 되었습니다.
4740사용자 계정이 잠겨.
4765계정의 SID 기록은 추가 되었습니다.
4766계정에 SID 기록을 추가할 수 없습니다.
4767사용자 계정 잠금이 해제 되었습니다.
4780ACL은 관리자 그룹의 구성원 인 계정에 설정 되었습니다.
4781계정 이름이 변경 되었습니다.
표 윈도우 2008 기반 주요 이벤트 ID설명

이벤트 ID에 대한 추가 자료는 별첨을 참고하자.

좀더 이벤트 아이디에 대해 자세히 살펴보자. 이벤트 ID중 538번(사용자 로그오프) 로그를 자세히 살펴보자. 해당 이벤트 로그의 이벤트 범주는 다음과 같이 로그온/로그오프 유형에 해당된다. 해당 항목의 경우 로그온 유형이 기록이 된다. 로그온 유형은 시스템에 사용자가 접근한 방식을 의미 하는데 방식을 구분해 보면 크게 시스템에 연결된 키보드와 마우스를 통해 시작화면에서 로그인 하거나 네트워크 연결을 통해 원격으로 시스템에 로그인 하는 경우를 의미한다.

이벤트 형식: 성공 감사
이벤트 원본: Security
이벤트 범주: 로그온/로그오프
이벤트 ID: 538
날짜: 2014-02-20
시간: 오후 4:20:09
사용자: SVCTAG-F5C9HBX\Administrator
컴퓨터: SVCTAG-F5C9HBX
설명:
사용자 로그오프:
사용자 이름: Administrator
도메인: SVCTAG-F5C9HBX
로그온 ID: (0x0,0xD50845F)
로그온 유형: 3

로그온 유형에 표기된 숫자는 각각이 다른 의미를 갖는다. 숫자에 따라 시스템에 로그온/로그오프한 유형이 정의되어 있다. 아래 표가 로그온 유형에 대한 설명 이다.

로그온 유형설명
2(Interactive)시스템에 연결된 키보드와 마우스를 통해 시작화면에서 로그인한 형태 입니다.
3(Network)사용자나 컴퓨터가 네트워크 연결을 통해 컴퓨터에 로그인한 유형 입니다. 주로 파일 공유(net use)를 통한 로그온 입니다.
<예제>
사용자 이름:
도메인:
로그온 ID: (0x0,0x2DE744C)
로그온 유형: 3
로그온 프로세스: NtLmSsp
인증 패키지: NTLM
워크스테이션 이름: SONGT60
로그온 GUID: –
호출자 사용자 이름: –
호출자 도메인: –
호출자 로그온 ID: –
호출자 프로세스 ID: –
전송된 서비스: –
원본 네트워크 주소: 192.168.10.123
원본 포트: 0
4(Batch)애플리케이션에 의해 배치잡 형태로 구동되는 로그온 유형 입니다.
5(Service)서비스 로그온 유형(Service logon)
6(Proxy)지원되지 않음(Not supported)
7(Unlock)사용자가 워크스테이션의 잠금을 해제한 유형 입니다.
8(NetworkClearText)사용자가 네트워크 연결을 통해 로그인 하고 사용자 정보가 평문으로 전달 되었습니다.
9(NewCredentials)프로세스나 쓰레드 복제에 의한 로그온 유형으로 아웃바운드 통신용
10(RemoteInteractive)터미널 서비스나 원격데스크탑을 통해 시스템에 로그인한 유형 입니다.
<예제>
사용자 이름: Administrator
도메인: CERT-SONG
로그온 ID: (0x0,0x2DAE56F)
로그온 유형: 10
로그온 프로세스: User32
인증 패키지: Negotiate
워크스테이션 이름: CERT-SONG
로그온 GUID: –
호출자 사용자 이름: CERT-SONG$
호출자 도메인: WORKGROUP
호출자 로그온 ID: (0x0,0x3E7)
호출자 프로세스 ID: 716
전송된 서비스: –
원본 네트워크 주소: 192.168.10.123
원본 포트: 2655
표 로그온 유형

보안 이벤트를 분석하는 방법도 앞서 소개한 애플리케이션 로그분석과 마찬가지로 로그 형식에 대한 사전 지식이 필요하다. 이벤트로그 각 항목에 대해 의미를 알지 못하고는 정확한 로그 분석이 어렵다.

악성코드 프로세스 분석 사례

프로세스 분석을 통해 악성코드를 식별한 사례를 살펴 보자.

백도어 통신이 확인되었고, 통신 연결에 사용된 백도어 프로그램을 찾기 위해 프로세스 점검을 수행 하였다.

악성코드에 감염된 프로세스를 찾기 위해 프로세스 점검을 진행 하였다. 프로세스 중 시스템 부팅 시간과 차이가 발생하는 프로세스를 확인했다. 프로세스 이름은 ‘svchost’ 이고 프로세스 번호는 836번으로 확인됐다.

C:\WINDOWS\System32\svchost.exe [836]
C:\WINDOWS\System32\svchost.exe -k netsvcs

윈도우에서 svchost 프로세스는 시스템 프로세스다. 윈도우의 여러 서비스를 관리하는 프로세스다. 대부분 윈도우 부팅 시 프로세스가가 올라오기 때문에 부팅 시간과 차이가 나지 않는다. 하지만 중간에 실행된 경우 시간 차이가 발생한다.

프로세스 점검을 통해 의심스러운 프로세스를 확인 하였다. 프로세스 번호가 836번인 프로세스가 악성코드에 감염된 것으로 의심 되었고, 이를 확인하게 상세한 분석작업을 진행 했다.

836 프로세스에서 사용중인 파일을 점검 했다. 다음은 836번 프로세스에서 사용하던 파일 목록 이다.

svchost.exe pid: 836 NT AUTHORITY\SYSTEM
18: File (RW-) C:\WINDOWS\system32
1C4: Section \RPC Control\DSEC344
224: File (RW-) C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_5.82.3790.3959_x-ww_78FCF8D0
23C: File (RW-) C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.3790.3959_x-ww_D8713E55
244: File (RW-) C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.3790.3959_x-ww_D8713E55
250: File (RW-) C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.3790.3959_x-ww_D8713E55
280: File (RW-) C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.3790.3959_x-ww_D8713E55
2F0: File (R–) C:\WINDOWS\Registration\R00000000000a.clb
360: File (R–) C:\WINDOWS\Tasks\SchedLgU.Txt
3A0: File (R–) C:\WINDOWS\system32\kbd101a.dll
3A8: File (R–) C:\WINDOWS\system32\kbd103.dll
418: File (RWD) C:\WINDOWS\Tasks
464: Section \BaseNamedObjects\mmGlobalPnpInfo
56C: File (RWD) C:\WINDOWS\PCHealth\HelpCtr\BATCH
5D0: File (RW-) C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.3790.3959_x-ww_D8713E55
830: File (RW-) C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.3790.3959_x-ww_D8713E55
874: File (RWD) E:\$Extend\$ObjId
87C: Section \BaseNamedObjects\SENS Information Cache
8C8: File (—) E:
928: File (RWD) C:\WINDOWS\system32\wbem\mof
988: File (R–) C:\WINDOWS\system32\tcpipt.dll
A6C: File (R–) E:\System Volume Information\tracking.log
AF4: File (R–) C:\WINDOWS\system32\wbem\Repository\FS\MAPPING1.MAP
AF8: File (R–) C:\WINDOWS\system32\wbem\Repository\FS\MAPPING2.MAP
AFC: File (R–) C:\WINDOWS\system32\wbem\Repository\FS\MAPPING.VER
B00: File (R–) C:\WINDOWS\system32\wbem\Repository\FS\OBJECTS.DATA
B04: File (R–) C:\WINDOWS\system32\wbem\Repository\FS\INDEX.BTR
B20: Section \BaseNamedObjects\Wmi Provider Sub System Counters
C6C: Section \BaseNamedObjects\Debug.Memory.344

동적 링크 라이브러리(DLL) 파일 중 의심스러운 파일이 확인 되었다. 파일명은 ‘tcpipt.dll’ 이다.

svchost.exe pid: 836 NT AUTHORITY\SYSTEM
18: File (RW-) C:\WINDOWS\system32
…..중략…..
988: File (R–) C:\WINDOWS\system32\tcpipt.dll
C6C: Section \BaseNamedObjects\Debug.Memory.344

‘system32’ 폴더에는 ‘tcpipt.dll’ 파일이 존재 하지 않는다. DLL 파일에 대해 좀더 확인하기 위해 추가 분석을 수행 하였다.

어떤 목적으로 프로세스에 로드되었는지 확인해야 한다. 그러기 위해서는 해당 코드가 어떤 기능을 하는지 확인해야 하는데 이는 코드상의 API 사용내역을 통해 대략적으로 확인할 수 있다. PEiD 프로그램을 이용해 API를 확인 할 수 있다.

그림 PEiD 실행

사용중인 API는 사용자 계정을 컨트롤 하거나 FTP통신에 필요한 API, 레지스트리 수정에 필요한 API 등이 확인 되었다.

API 이름용도
NetUserDel사용자 삭제
SHFileOperationA파일 시스템 오브젝트 복사 파일 시스템 오브젝트 이동 파일 시스템 오브젝트 이름변경 파일 시스템 오브젝트 삭제
SHDeleteKeyA레지스트리 값 삭제
FtpOpenFileAFTP를 통해 파일 open
표 API 용도

사용된 API를 통해 기능을 유추해 보면 사용자 컨트롤이 가능하고, 레지스트리와 파일에 대한 제어 그리고 FTP 통신으로 데이터 전송이 가능하다.

여기까지만 봐도 전형적인 백도어 프로그램들이 제공하는 기능이다. 백도어 파일이 확실시 되고 좀더 정확한 시그니처를 찾기 위해 문자열을 확인 해보자.

많은 수의 악성코드가 파일명만 바꿔 사용하기 때문에 파일에서 악성코드를 확인할 수 있는 특징을 찾아낼 경우 해당 파일의 기능에 대해 좀더 정확히 파악할 수 있다. 주로 확인되는 정보는 프로그램 정보, 제작자 정보, 공격대상, C&C 서버 IP 등을 확인 할 수 있다.

문자열 추출은 ‘Bin Text’ 라는 프로그램을 이용해 확인할 수 있다. 문자열 추출 과정은 악성코드에 하드코딩 형태로 입력된 값을 확인한다.

tcpipt.dll 파일에 포함된 문자열 검색에서 ZXSHELL 구문이 확인 되었다. ZXSHELL은 중국에서 제작된 백도어 프로그램으로 C&C및 원격터미널 등 다양한 기능을 제공하는 툴이다.

그림 문자열 검색

분석 결과 공격자는 ZXSHELL 파일을 시스템에 실행 시켰다. 감염된 프로세스를 이용해 중국 IP를 사용하는 공격자와 통신을 연결 하고 감염 시스템 정보를 전송 하였다. 다음은 백도어 파일이 전송한 피해 시스템의 운영체제 정보다. 윈도우 버전 정보와 시스템 IP 정보, CPU 및 메모리 용량 정보를 전송했다.

0000 52 54 00 12 35 02 08 00 27 7c d0 b5 08 00 45 00 RT..5…’|….E.
0010 00 78 b5 ba 40 00 80 06 bb 98 0a 00 02 0f 3d bf .x..@………=.
0020 3f 5f 05 20 1e 61 51 b6 95 cf 2b 8d 6a 22 50 18 ?_. .aQ…+.j”P.
0030 fa d0 48 0e 00 00 77 69 6e 78 70 2d 76 62 6f 78 ..H…winxp-vbox
0040 40 4e 4f 4e 45 2d 57 69 6e 58 50 40 31 30 2e 30 @NONE-WinXP@10.0
0050 2e 32 2e 31 35 20 4f 53 3a 20 57 69 6e 58 50 20 .2.15 OS: WinXP
0060 50 72 6f 20 53 50 32 2e 30 28 32 36 30 30 29 20 Pro SP2.0(2600)
0070 43 50 55 3a 31 38 32 38 20 4d 48 7a 2c 52 41 4d CPU:1828 MHz,RAM
0080 3a 35 31 31 4d 42 :511MB

공격자가 시스템 리소스 정보까지 수집하는 이유는 대규모 서비스 거부 공격(DDoS)을 수행할 때 시스템 사양이 높은 좀비 PC를 활용하기 위해서다.