침해사고분석용 정보수집

분석 방법이 결정 되었다면 필요한 증거를 수집하게 된다. 침해사고분석에 필요한 정보는 크게 2가지 종류로 나뉜다. 보안솔루션이나 시스템에서 파일 형태로 기록하는 정보가 있고, 네트워크 통신 트래픽에서 수집되는 정보가 있다. 먼저 네트워크 통신 트래픽에서 수집되는 정보를 살펴보자.

트래픽 정보를 생각하면 우리는 단순히 패킷 캡처 파일을 떠올린다. 하지만 캡처된 파일을 좀더 자세히 살펴보면 좀더 세분화 할 수 있다.

  • 네트워크 트래픽(Network Traffic) 분석 정보

다음 표는 네트워크 트래픽을 통해 수집할 수 있는 분석 항목 이다. 개별 항목들은 상용 또는 오픈 소스 기반의 솔루션을 통해 수집 또는 자동 분석이 가능한 항목이다.

구분수집 항목주요 분석 항목
통신 패킷로우 패킷(Raw packet)페이로드(Packet Payload)헤더정보(Packet Header)
세션 정보트래픽 플로우(Traffic flow)세션 연결 시간통신량(bytes, packet counts)
애플리케이션 통신애플리케이션 파라미터애플리케이션 정보애플리케이션 변수공격 구문
표 네트워크 트래픽 수집 항목

  • 로그 파일 형태의 분석정보

로그 파일의 분석 정보는 좁은 의미로 해석하면 우리가 자주 사용하는 PC나 노트북 또는 서버 장비에서 기록하는 정보를 의미한다. 각각의 장비에는 운영체제가 동작하고 운영체제에 따라 관련 로그를 기록한다. 침해사고가 발생하면 운영체제에서 기록하는 로그를 수집해 이상 징후 분석에 활용 한다. 운영체제에는 사용자가 필요에 따라 설치한 응용프로그램이 동작한다. 개별 응용프로그램은 동작과 관련된 로그를 기록하게 되고 이 또한 위협 분석 시 수집되는 정보다.

구분수집 항목주요 분석 항목
윈도우시스템 보안 이벤트 레지스트리 정보이벤트 ID중요 레지스트리 수정 항목
리눅스운영체제 로그 애플리케이션 로그Secure 로그
애플리케이션웹 로그응답코드
표 로그수집항목

대표적인 엔드포인트 시스템으로 윈도우와 리눅스가 있다. 윈도우 로그는 크게 운영체제자체의 로그와 애플리케이션에 의해 발생되는 로그로 구분해 볼 수 있다. 윈도우에서 운영체제 로그의 가장 대표적인 로그는 이벤트로그다. 컴퓨터관리의 이벤트 뷰어를 통해 확인이 가능한데 운영체제의 보안로그와 시스템 로그를 제공한다. 이벤트 로그의 로그 형식과 종류에 대해서는 자세히 살펴보자.

  • 운영체제 정보

OS에 대한 버전 정보를 수집하자. 각 버전별 지원되는 명령이나 서비스 팩에 따른 미묘한 차이가 존재 하기 때문에 이러한 차이를 사전에 확인하고 침해사고분석 시 반영한다. 일부 경우 OS버전이나 서비스팩 등의 차이로 결과가 틀려지거나 결과나 나오지 않을 수도 있다.

운영체제 버전 확인은 점검 대상 시스템 기본 정보 수집 중 하나이다. 먼저 윈도우의 경우자제적으로 제공되는 ver명령을 이용해서 운영체제 버전을 간단하게 확인할 수 있다. cmd명령 창에서 ver명령을 입력하면 아래 그림과 같이 버전 정보를 확인 할 수 있다.

그림 윈도우 버전 확인(ver)

좀더 자세한 정보를 확인할 때는 시작->실행 winver입력을 하여 운영체제와 서비스팩 정보까지 확인 한다

버전 정보를 확인하는 이유는 시스템에 영향을 미치는 취약점을 확인하기 위해서다. 공개된 취약점 공격 도구의 경우 OS나 응용프로그램 버전에 따라 영향 여부가 틀려진다.

winver 내장 명령을 사용할 경우 GUI기반으로 결과를 확인 할 수 있다. 이 경우 텍스트 기반으로 자동 스크립트 점검을 할 경우에는 문제가 발생한다. 이때 psinfo.exe 명령을 이용해서 텍스트 기반으로 결과를 확인할 수 있다. Sysinternals에서 제작된 툴 모음에 포함된다.

psinfo 명령을 이용하면 winver에서 제공하는 명령을 CLI기반으로 확인 할 수 있다. (https://learn.microsoft.com/en-us/sysinternals/downloads/psinfo)

그림 윈도우 서비스팩 확인

리눅스에서는 ‘uname’ 명령을 이용해 시스템 정보를 확인 한다. 커널 버전과 OS정보를 확인할 수 있고, 리눅스의 경우 Exploit마다 취약한 Kernel 버전이 있기 때문에 로컬 또는 원격에서 Exploit공격을 시도할 때 버전 정보가 중요하게 쓰인다.

$uname –a Linux ubuntu 2.6.31-14-generic #48-Ubuntu SMP Fri Oct 16 14:04:26 UTC 2009 i686 GNU/Linux
  • 파일시스템정보

파일 시스템 정보는 넓은 의미에 흔히 말하는 C, D, E 등의 파티션 정보나 물리적 디스크 정보를 말한다. 단순 시스템 경로 파악하거나 할당되지 않은 디스크 공간이 있는지 등을 확인한다. 일부 악성코드의 경우 비데이터 영역에 악성코드를 삽입해 구동되는 경우도 있다. 이러한 경우는 일반적인 점검으로 확인이 어렵고, 디스크 이미지를 추출해서 별도의 분석 툴을 이용해 물리 디스크 전체에 대한 점검을 진행해야 한다.

파일 시스템 구조를 알면 직접 디스크상에서 삭제된 파일, 악성코드, 숨김 파일 등을 분석할 수 있다. 좀더 상세한 분석이 필요하거나 법적 증거로 제출하기 위해서는 디스크 이미지를 추출해 분석해야 한다. 이 작업을 위해서는 전용 분석툴이 필요하다.

윈도우는 ‘컴퓨터 관리’ 메뉴에서 논리구조인 파티션과 물리구조인 디스크 정보를 확인할 수 있다.

리눅스 시스템의 경우는 ‘df’ 명령을 이용해 파티션 정보와 물리적 디스크 정보를 확인 할 수 있다.

$df -k
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 7850996 2820552 4631632 38% /
udev 254668 224 254444 1% /dev
none 254668 216 254452 1% /dev/shm
none 254668 96 254572 1% /var/run
none 254668 0 254668 0% /var/lock
none 254668 0 254668 0% /lib/init/rw
/dev/sr0 201018 201018 0 100% /media/cdrom1

  • IP 정보

IP정보 수집은 네트워크 관련된 기본 정보를 수집하는 과정이다. IP 정보 수집을 통해 현재 시스템의 네트워크 할당 정보를 확인한다. 간혹 한 개의 시스템에 2개의 다른 IP를 부여해 사용하기도 한다. 이 경우 공격자가 접근한 경로가 2개로 나뉘게 된다. 시스템에 부여된 IP 확인해 침해발생 시 추가로 접근 시도 가능성이 있는 내부 IP대역을 확인 한다. 통상 특정 시스템에 침해사고가 발생할 경우 해당 IP의 동일 서브넷에 포함되는 시스템의 경우 일단 침해가능성에 대해 의심해봐야 한다. 수집된 물리주소(Mac Address)는 ARP 스푸핑 공격 시 공격 시스템을 확인하기 위한 용도로 사용된다.

IP정보 확인을 윈도우는 명령 창에서 ‘ipconfig’ 명령을 이용해 확인 가능하다. 리눅스 시스템에서는 ifconfig 명령을 이용해 시스템에 할당된 IP를 확인 할 수 있다.

  • 설치프로그램목록

설치 프로그램 목록은 악성코드 설치 확인이나 정상 소프트웨어 이지만 의도하지 않게 설치된 프로그램이 있는지 점검하고 침해사고와의 연관성을 확인하기 위해 점검 한다.

설치된 프로그램을 점검하는 관점은 설치된 소프트웨어 중 외부와 통신을 위해 사용하거나 시스템을 제어할 수 있는 권한을 가진 소프트웨어에 대해 살펴 보고, 해당 프로그램이 설치된 경우 설치 일자, 설치 계정, 수정일자 등을 이용해 침해사고를 분석하는데 실마리로 이용하게 된다.

윈도우에서 쉽게 확인하는 방법은 제어판의 “프로그램 추가/제거”를 실행 시켜 확인하는 것이다. 이 때 프로그램뿐만 아니라 윈도우 구성요소에 대해서도 확인이 가능하다. 이러한 방법은 GUI기반으로 이뤄지기 때문에 자동화된 스크립트로 결과를 저장하기 어렵다. 분석가가 직접 실행시켜서 눈으로 확인하는 방법이다. 프로그램 목록을 텍스트로 추출해서 일괄 분석에 사용하려면 레지스트리 정보를 이용해 추출 할 수 있다.

  • 패키지정보
그림 프로그램 추가 제거

리눅스는 rpm명령을 이용해 다음과 같이 설치된 프로그램을 확인 할 수 있다. 관리자나 사용자가 설치한적 없는 프로그램이 깔려 있다면 공격자에 의해 설치된 것인지 의심해볼 수 있다.

$rpm -qa | more
setup-2.5.25-1
………..
raidtools-1.00.3-2
hotplug-2002_04_01-17
file-3.39-9
kernel-smp-2.4.20-8
–More–

Debian 계열의 apt-get 사용시

$ls -al /var/cache/apt/archives/
total 4612
drwxr-xr-x 3 root root   4096 2014-04-27 23:10 .
drwxr-xr-x 3 root root   4096 2014-04-27 23:23 ..
-rw-r–r– 1 root root  63736 2014-05-05 02:04 autotools-dev_20140427.1_all.deb
…..
  • 시스템구동정보

윈도우의 경우 작업 스케줄러 구동 로그를 확인하여 스케줄러 작업을 통해 구동되었던 내역을 수집 할 수 있다. 해당 파일은 %SystemRoot%\tasks\SchedLgU.txt 경로에 존재한다.

작업 스케줄에 등록되어 구동을 시도하는 악성 코드나 비정상 서비스를 확인 할 수 있다.

“작업 스케줄러 서비스”
6.1.7600.16385 (win7_rtm.090713-1255)
“작업 스케줄러 서비스”
         2015-07-24 오후 4:52:26에 시작
“작업 스케줄러 서비스”
6.1.7600.16385 (win7_rtm.090713-1255)
[ ***** 이 선 위에 가장 최근 항목이 있습니다 ***** ]
그림 시스템 구동 정보

명령 창을 통해서 수집 가능한 정보는 스크립트를 제작해서 하나의 파일에 추출 가능하다. 다음 샘플은 윈도우에서 기본 정보를 수집하는데 사용할 수 있는 점검 스크립트 파일이다.

@echo off
set OUTPUT=%COMPUTERNAME%.txt
echo ################################################ > %OUTPUT%
echo ############## 작성자 송대근 ################### >> %OUTPUT%
echo ################## v1.1 ########################## >> %OUTPUT%
echo ################# %DATE% ###################### >> %OUTPUT%
echo ################################################ >> %OUTPUT%
echo ################################################ >> %OUTPUT%
echo ################ 점검시작시간 ################### >> %OUTPUT%
echo ################################################ >> %OUTPUT%
echo 시작 시간: %DATE% %TIME% >> %OUTPUT%
echo ################################################ >> %OUTPUT%
echo ################ 윈도우버전정보 ################## >> %OUTPUT%
echo ################################################ >> %OUTPUT%
systeminfo | findstr /B /C:”OS Name” /C:”OS Version” >> %OUTPUT%
echo ################################################ >> %OUTPUT%
echo ################# 윈도우SP정보 ################### >> %OUTPUT%
echo ################################################ >> %OUTPUT%
systeminfo | findstr /C:”Service Pack” >> %OUTPUT%
echo ################################################ >> %OUTPUT%
echo ################### IP정보 ###################### >> %OUTPUT%
echo ################################################ >> %OUTPUT%
ipconfig /all >> %OUTPUT%