침해사고에 대한 충분한 근거 자료를 확보하고 원인에 대한 분석이 완료되었다면 원인과 근거 자료를 기반으로 향후 대응 방안을 수립한다. 수립된 대응 방안에 필요한 할 일(액션 아이템)을 가능한 상세하게 구분하여 침해사고가 재발되지 않도록 방안을 제시한다.
종합적인 분석 결과를 기반으로 조직의 의사결정권자는 필요한 조치를 수행할 리소스를 확보하고 정해진 기한에 따라 이행 사항을 실행 한다.
분석 결과 보고
보고 대상을 고려해 적절한 단어와 표현 방법을 사용해 핵심 사항을 전달하는 것이 보고서 작성의 기본이다.
그렇다면 보안 위협 분석 보고서의 작성 시 가장 중요한 부분은 무엇일까? 이슈에 대한 핵심과 적절한 대응 전략이 포함되는 것은 물론 적정한 시기에 보고서가 전달 되는 것도 중요하다. 모든 주요 이슈에 대한 의사 결정이 끝나고 난 후에는 아무리 완벽한 보고서도 그 빛을 잃는다.
상황정의나 침해단계 정의 내용을 전달하여 상황 요약 전달
대응에 필요한 충분한 정보가 제공되었는가?
보고서 제공시기와 횟수가 적절한가?
보고서를 구성하는 항목은 다음과 같다. 기본적인 핵심 정보를 전달하기 위해 공통 항목에 대해 조직의 내부 정책에 따라 유형을 분류하고 보고서 작성 시 판단 기준에 따라 해당 항목을 기입한다.
분석 방법이 결정 되었다면 필요한 증거를 수집하게 된다. 침해사고분석에 필요한 정보는 크게 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에서 제작된 툴 모음에 포함된다.
리눅스에서는 ‘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’ 명령을 이용해 파티션 정보와 물리적 디스크 정보를 확인 할 수 있다.
IP정보 수집은 네트워크 관련된 기본 정보를 수집하는 과정이다. IP 정보 수집을 통해 현재 시스템의 네트워크 할당 정보를 확인한다. 간혹 한 개의 시스템에 2개의 다른 IP를 부여해 사용하기도 한다. 이 경우 공격자가 접근한 경로가 2개로 나뉘게 된다. 시스템에 부여된 IP 확인해 침해발생 시 추가로 접근 시도 가능성이 있는 내부 IP대역을 확인 한다. 통상 특정 시스템에 침해사고가 발생할 경우 해당 IP의 동일 서브넷에 포함되는 시스템의 경우 일단 침해가능성에 대해 의심해봐야 한다. 수집된 물리주소(Mac Address)는 ARP 스푸핑 공격 시 공격 시스템을 확인하기 위한 용도로 사용된다.
IP정보 확인을 윈도우는 명령 창에서 ‘ipconfig’ 명령을 이용해 확인 가능하다. 리눅스 시스템에서는 ifconfig 명령을 이용해 시스템에 할당된 IP를 확인 할 수 있다.
설치프로그램목록
설치 프로그램 목록은 악성코드 설치 확인이나 정상 소프트웨어 이지만 의도하지 않게 설치된 프로그램이 있는지 점검하고 침해사고와의 연관성을 확인하기 위해 점검 한다.
설치된 프로그램을 점검하는 관점은 설치된 소프트웨어 중 외부와 통신을 위해 사용하거나 시스템을 제어할 수 있는 권한을 가진 소프트웨어에 대해 살펴 보고, 해당 프로그램이 설치된 경우 설치 일자, 설치 계정, 수정일자 등을 이용해 침해사고를 분석하는데 실마리로 이용하게 된다.
윈도우에서 쉽게 확인하는 방법은 제어판의 “프로그램 추가/제거”를 실행 시켜 확인하는 것이다. 이 때 프로그램뿐만 아니라 윈도우 구성요소에 대해서도 확인이 가능하다. 이러한 방법은 GUI기반으로 이뤄지기 때문에 자동화된 스크립트로 결과를 저장하기 어렵다. 분석가가 직접 실행시켜서 눈으로 확인하는 방법이다. 프로그램 목록을 텍스트로 추출해서 일괄 분석에 사용하려면 레지스트리 정보를 이용해 추출 할 수 있다.
패키지정보
그림 프로그램 추가 제거
리눅스는 rpm명령을 이용해 다음과 같이 설치된 프로그램을 확인 할 수 있다. 관리자나 사용자가 설치한적 없는 프로그램이 깔려 있다면 공격자에 의해 설치된 것인지 의심해볼 수 있다.
윈도우의 경우 작업 스케줄러 구동 로그를 확인하여 스케줄러 작업을 통해 구동되었던 내역을 수집 할 수 있다. 해당 파일은 %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) [ ***** 이 선 위에 가장 최근 항목이 있습니다 ***** ]
그림 시스템 구동 정보
명령 창을 통해서 수집 가능한 정보는 스크립트를 제작해서 하나의 파일에 추출 가능하다. 다음 샘플은 윈도우에서 기본 정보를 수집하는데 사용할 수 있는 점검 스크립트 파일이다.
이번에는 시그니처를 기반으로 공격을 찾아내는 방법에 대해서 살펴보자. 사실 시그니처가 있는 공격은 좀더 찾기가 쉽다. 앞서 비정상 상황을 구분하는 방식은 제로데이 공격과 같이 시그니처가 없거나 어떤 공격으로 들어 왔는지 모르는 경우에 접근하는 방법이다.
상대적으로 탐지 솔루션에서 패턴 매칭을 통해 정의된 시그니처명으로 이벤트가 탐지 되기 때문에 탐지된 이벤트만 확인하면 된다. 주로 해킹과 연관된 특징으로 검색 한다. 백도어와 연관된 경우 파일 명으로 접근이 가능하고, 명령을 실행할 경우에는 공격자가 자주 사용하는 명령어를 위주로 접근 한다.
그림 시그니처 기반
다음은 침해사고가 발생한 과정을 기술한 내용이다.
톰캣 서버에 접속하여 톰캣 서버의 관리자 페이지에 ‘job.war’라는 백도어 프로그램을 올렸다.올린 백도어 프로그램에 접속한 다음 1) ‘ipconfig’, ‘arp’, ‘netview’라는 명령어를 실행하여 IP 주소 등 시스템 정보를 획득하고, 2) ‘FX.EXE’라는 명령어를 실행하여 3389 포트(port)의 터미널 서비스를 기동하고, 3)’LCX.EXE’라는 명령어를 실행하여….……생략…..
공격자가 어떻게 접근했고, 어떤 명령을 실행했는지 기술되어 있다. 실제 침해가 발생 했을 때 앞서 언급된 ‘LCX.EXE’, ‘arp’ 등이 우리가 시그니처 기반으로 침해 흔적을 분석할 때 사용되는 키워드가 된다. 해당 키워드로 수집된 정보에서 일치하는 로그를 찾아낸다.
시그니처를 기반으로 탐지된 로그를 보면서 같이 분석해 보자. 다음은 시스템 명령 실행과 관련된 침입탐지시스템 로그다.
탐지시간
2015-11-05 11:27:28 KST
시그니처명
Microsoft_Windows_Shell_Banner
탐지건수
1
출발지IP
10.10.10.1
출발지포트
14072
도착지IP
172.16.20.114
도착지포트
53
프로토콜
Domain
배너
Microsoft Windows [Version 5.2.3790]..(C) Copyright 1985-2003 Microsoft Corp…..C:\WINDOWS\ime>
표 침입탐지시스템 로그 1
탐지시간
2015-11-05 11:27:47 KST
시그니처명
Microsoft_Windows_Shell_Banner
탐지건수
1
출발지IP
10.10.10.1
출발지포트
14073
도착지IP
172.16.20.114
도착지포트
80
프로토콜
http
배너
Microsoft Windows [Version 5.2.3790]..(C) Copyright 1985-2003 Microsoft Corp…..C:\WINDOWS\ime>
표 침입탐지시스템 로그 2
윈도우 환경에서 텔넷과 같은 서비스에 접속하게 되면 다음 그림과 같은 명령창이 생긴다.
그림 윈도우 쉘
탐지된 시그니처는 네트워크 통신 패킷에 윈도우 명령창이 발생하면 탐지된다.
탐지된 로그에 어떤 숨은 의미가 있을지 생각해보자. 탐지 로그를 분석하기 위해서는 먼저 로그 분석에 앞서 탐지된 시그니처에 대한 이해가 필요하다.
예제로 사용한 침입탐지로그는 공격자가 백도어 통신을 할 때 탐지되기도 하지만 텔넷과 같은 정상 통신 과정에서도 탐지된다. 그렇다면 예제로 설명한 탐지 로그에 차이점이 무엇인지 생각해보다.
탐지 로그를 자세히 살펴 보자. 탐지된 로그의 도착지 통신 포트가 80번 포트와 53번 포트다. 일반적으로 80번 포트는 웹 서비스에 사용되는 포트이고, 53번 포트는 도메인 네임 서비스(DNS)에 사용된다. 만약 정상 통신이라고 한다면 23번 텔넷 표준 포트를 이용했을 것이다. 공격자는 방화벽과 같은 접근 제어 시스템을 우회하기 위해 통신이 자유로운 80번과 53번 포트를 이용했을 가능성이 높다.
침해사고분석에 증거가 되는 확실한 정황을 찾았다면 실마리를 푸는 열쇠가 되기도 한다. 사례를 하나 더 살펴보자.
그림 SMB실행접근
탐지된 로그는 넷바이오스 통신을 통해 시스템 명령이 실행 되면 탐지 된다. 일반적으로 윈도우 서버를 서비스 목적으로 사용하는 기업에서 배치 작업을 실행하거나 일괄 명령 실행을 수행하는 경우 탐지될 수 있다.
이벤트 탐지 내역을 살펴보자. 접근한 통신 포트는 넷바이오스 통신에 사용되는 TCP 포트이고, 사용자 administrator도 특별한 이상한 점을 발견하지 못했다. 그렇다면 어떻게 위협을 구분할 수 있을까?
이번에는 실행된 파일명을 살펴보자. psexe.exe 파일이 실행되었다. 앞서 2장에서도 소개 했던 윈도우용 명령 실행 프로그램 이다. 넷바이오스 연결을 통해 배치 파일을 실행 시키거나 예약작업에 사용할 파일에 접근하는 경우는 있어도 명령을 실행 시키는 일은 드물다.
일반적인 사용 형태가 아니라면 상세하게 확인해 볼 필요가 있다.
그림 넷바이오스명령실행
해킹을 시도하는 공격자는 한번에 자기가 필요한 정보를 피해 시스템에서 훔쳐가지 않는다. 많은 과정과 여러 명령어를 실행하면서 정보 수집을 하고, 필요한 정보를 훔쳐간다.
이 과정에서 많은 명령이 실행되고 파일들이 생성되거나 실행된다. 여러분이 분석하는 로그에 공격자의 흔적이 분명히 남게 된다.
위협 분석 방법론은 쉽게 얘기해서 어떻게 분석을 할지 정의 하는 것이다. 가장 대표적인 분석 방법론으로 블랙리스트 방식과 화이트리스트 방식이 있다. 먼저 블랙리스트 방식은 기존에 위험하다고 알려져 있는 키워드나 이벤트를 중심으로 수집된 정보를 분석하는 방법이다. 방대한 정보에서 정해진 정보만을 검색하기 때문에 상대적으로 분석 소요 시간이 짧다. 하지만 알려진 정보를 가지고 검색하기 때문에 언노운[1] 공격은 찾아내기 어렵다. 반대로 화이트 리스트 방식은 확인된 정상 범주의 정보를 제외한 모든 정보를 분석하는 방법이다. 블랙리스트 방식에 비해 분석할 양도 많고 분석 시간도 많이 소요 된다. 하지만 언노운 공격도 분석이 가능한 방법이다.
분석한 이벤트가 왜 공격인가에 대해서 정의하기 위해서는 먼저 왜 공격이 아닌지 알고 있어야 한다. 다시 말해 정상 통신이나 정상 행위가 무엇인지 알고 있어야 한다. 보안을 입문하는 사람들에게 기본을 강조하는 이유이기도 하다. 애플리케이션이나 네트워크 통신이 어떻게 이뤄지는지 알고 있다면 정상 통신과 비정상 통신을 구분할 수 있다.
텔넷이나 SSH, 원격데스크탑 연결 등 사용자 대화 방식(user interaction) 기반 통신은 해킹에 자주 사용되는 통신 방식이다.
다음 표는 침입탐지시스템에서 추출한 침입탐지 이벤트에 대한 정보를 요약한 표다.
탐지항목
탐지정보
이벤트 수집 기간
3개월
탐지 시그니처 이름
TCP_Invalid_SACK
출발지 IP
10.0.0.1
출발지 포트
랜덤
도착지 IP
랜덤
도착지 포트
랜덤
총합
1441 건
표 IDS 이벤트 분석 정보 요약
TCP_Invalid_SACK 라는 침입탐지시스템 시그니처는 비정상 SYN 패킷과 ACK 패킷에 의해 발생된다. 일반적으로 TCP 통신은 프로토콜에 정해진 방법으로 필요한 통신 패킷을 주고 받는다. 하지만 통신에 사용되는 프로그램이나 네트워크 특성에 따라 정해진 프로토콜과 다른 방식으로 통신하는 현상이 발생한다. TCP_Invalid_SACK 시그니처는 이러한 현상을 기록한다.
이러한 이유로 공격자가 비표준 방식의 프로그램을 사용할 때도 통신 내역이 탐지된다. 물론 탐지된 정보에는 공격자의 통신만 기록되진 않는다. 탐지된 1441건의 이벤트에 공격자가 통신한 횟수는 소수일 것이다. 보안 분석가는 이벤트 분석을 통해 소수의 공격 탐지 건수를 찾아야 한다.
정상 통신과 비정상 통신을 구분하기 위해 먼저 전체 통신 내역을 하나의 큰 그림으로 정리할 필요가 있다. 각각의 날짜에 어떤 포트들이 사용됐고, 사용된 횟수를 누적한 정보를 표로 정리할 수 있다.
포트 통신 통계
표를 작성하는 과정은 유튜브 영상을 참고 할 수 있다.
이제 추출한 로그에서 어떤 공격이 발생했는지 같이 분석해 보자.
정상 통신과 비정상 통신의 차이가 무엇 일까?
그 차이를 구분하기 위해서는 여러분들은 정상 통신과 비정상 통신의 기준을 만들어야 한다. 정상과 비정상 통신의 차이를 접속횟수라는 기준으로 가정해 보자. 좀더 구체적으로 이전보다 갑자기 접속횟수가 4배 이상 증가된 경우 비정상 통신으로 가정해 보자.
앞서 표로 만들었던 통신 포트 통계를 다시 살펴보면 이상한 현상이 눈에 들어 올 것이다.
포트 통계 표에 22, 1501, 8002번 포트의 접속 횟수가 비정상적으로 증가 하거나 감소한 것으로 알 수 있다. 여기까지는 분석하는 사람의 가설에 의한 의심이고 정확한 분석을 위해서는 상세한 내역을 보고 판단하자.
각각의 통신 내역을 상세하게 살펴보자.
먼저 22번 포트의 통신 내역을 살펴보자. 의심스러운 통신 내용 중 어느 것을 먼저 볼지는 분석하는 사람들의 의도에 따라 적절히 판단하자.
이번 경우에는 사용자가 시스템에 명령(user interaction)을 주고 받을 수 있는 SSH통신이 위험도가 높기 때문에 SSH접근 내역에 대한 분석을 먼저 진행 했다.
엑셀로 추출한 로그를 분석할 때는 원본 정보가 변경되는 것을 막기 위해 파일을 복사해서 작업하거나 파일에 새로운 시트를 추가하고 복사한 정보를 가공하자.
분석할 정보가 22번 포트 통신에 대한 내용이기 때문에 나머지 통신에 대해서는 일단 제외 처리한다. 엑셀의 필터 메뉴를 이용해서 22번을 제외하고 모든 숨긴 후 탐지로그를 복사한다.
그림 SSH 탐지 로그 분석
도착지 포트(Target Port) 22번 포트에 대해서만 별도로 추출했기 때문에 이제 날짜별로 공격대상이 어떻게 이뤄지는지 살펴 보자.
날짜와 도착지 IP 컬럼만 선택해서 새로운 시트에 복사하고, 피벗 테이블을 작성한다.
그림 공격대상 분석
22번 포트로 통신한 도착지 IP에 대한 현황 정리가 완료 되었다. 하나의 출발지 IP에서 여러 도착지 IP에 접근을 했고, 접근을 시도했던 날짜도 19일에 집중되어 있다.
19일 날짜에 접속된 통신 내역을 다시 한번 상세하게 살펴본다.
19일에 발생된 침입탐지 로그만 선택해서 새로운 시트에 복사 한다. 복사한 로그를 다시 한번 피벗 테이블을 이용해서 시간대별 통신한 도착지 IP를 정리한다.
피벗 테이블을 만드는 방법은 다음 순서로 진행 한다.
피벗 테이블을 생성하고 행 필드에 시간을 끌어서 이동
열 필드에 Target IP를 끌어서 이동
값 필드에 Target IP를 끌어서 이동
그림 시간대별 통신 분석 1그림 시간대별 통신 분석 2
완성된 테이블을 살펴보자. 새벽 4시를 시작으로 서로 다른 시스템에 1~2회씩 통신이 약 30초에서 1분 간격으로 이뤄졌다.
이렇게 통신이 발생될 수 있는 유형은 대표적으로 다음 2가지 형태가 있다.
예약된 작업에 의해 정기 점검
스캐닝 프로그램에 의한 네트워크 포트 스캔 시도
예약된 작업의 경우는 매주 지정 요일이나 매달 지정날짜에 발생하기 때문에 해당되지 않는다. 스캐닝에 의한 접근 시도일 가능 성이 높다. 내부 시스템간에 스캐닝이 발생했다는 것은 출발지 IP가 공격자에 장악됐을 가능성이 매우 높다. 공격에 사용된 내부 시스템을 찾아낸 것이다.
공격자는 백도어가 설치된 내부 시스템(10.0.0.1)을 경유해 2차 공격을 수행했다.
사전에 수집했던 로그인 정보를 이용해 단순 스캔이 아닌 시스템 로그인에 성공했고, 접속한 시스템에 공격 스크립트를 실행했다.
공격자는 공격 스크립트를 통해 하드디스크에 ‘PRINCIPES’ 문자열로 채워서 디스크를 못쓰게 만드는 명령을 실행했다.
많은 탐지 로그 중에서 이전 대비 급격한 통신 횟수의 변화가 생긴 로그를 의심 행위로 간주했다. 짧은 시간(수초 간격)에 다수의 시스템에 접속한 시스템 로그를 추출했고, 상세 분석을 통해 공격자에 의한 시스템 피해를 확인했다.
특정 문구가 아닌 횟수 변화를 이용해 공격을 구분하는 방법이 임계치 기반의 분석 방법이다.
임계치 기반의 상관 분석을 위해서는 기본 프로파일 정보가 필요하다. 프로파일을 정의 하는 방법은 정상 상황을 정의하고 이에 벗어나는 상황을 분리한다.
앞서 살펴본 예제에서는 정상 상황의 통신은 꾸준하게 통신이 발생한다라는 프로파일을 정의 한 것이다. 이를 기준으로 꾸준하기 않은, 즉 “접속횟수가 이전보다 N배 이상 차이가 나는 것”을 의심스런 통신으로 정의 했다.
프로파일 정의에 사용될 수 있는 정보
매시간 외부와 주고 받는 최대 트래픽 수치
매일 외부와 주고 받는 최대 트래픽 수치
비업무 시간 외부와 통신하는 내부 시스템 수
외부로 중요한 데이터가 유출되었다고 가정해 보자. 해당 데이터는 일반적으로 주고 받는 파일보다 매우 큰 파일이라고 했을 때, 아래 그래프와 같이 평상 시 트래픽을 벗어나 급증한 그래프는 해당 가설을 입증하는 데이터가 될 수 있다.
그림 임계치 기반 분석
통계학적인 관점에서 접근하는 방법으로 침입탐지시스템 로그를 이용해 다음과 같이 이상 통신에 대한 기준을 정의할 수 있다.
공격자/피해자 분석
시스템에 이상이 발생하거나 악성코드가 설치된 시점을 기준으로 관련 이벤트를 검색하고 검색한 이벤트를 이용해 공격 대상을 추출한다. 특정 사건이 발생된 시간이 확인되면 이전에 발생한 이벤트를 분석한다. 침해사고가 발생되면 공격자에 대해 역추적하는 과정이다.
최초 공격을 위해 사전 공격 시점이 언제인지 분석을 하고, 이 후 취약점을 이용해 공격이 성공한 시점을 찾는다.
예제를 살펴보자. 침입탐지시스템 로그에서 공격을 시도한 IP와 공격자가 사용한 취약점을 분석하는 과정이다.
피해를 받은 대상 시스템을 구분하기 위해 침입탐지시스템 로그에서 공격 대상별로 이벤트 발생 시간을 목록화 한다. 단순 스캔 시도한 탐지 로그를 제외하고 대상 시스템을 목록화 한다.
다음 표처럼 대상 시스템 목록과 각각의 대상 시스템이 8월 한달 동안 공격 받았던 취약점 종류(탐지수), 공격자 IP 종류를 목록화 한다.
대상시스템
탐지수
공격자IP 종류
최초 이벤트 발생 시간
최종 이벤트 발생 시간
타켓시스템1
9994
4550
2015-08-01 0:00
2015-08-30 15:00
타켓시스템2
6519
2433
2015-08-01 0:00
2015-08-30 15:00
타켓시스템3
75
1
2015-08-01 0:00
2015-08-30 14:00
타켓시스템4
74
1
2015-08-01 0:00
2015-08-30 14:00
타켓시스템5
9878
1495
2015-08-01 0:00
2015-08-30 15:00
타켓시스템8
128426
8277
2015-08-01 0:00
2015-08-30 15:00
타켓시스템6
79
12
2015-08-02 0:00
2015-08-29 0:00
타켓시스템9
107
2
2015-08-03 13:00
2015-08-27 15:00
타켓시스템7
1
1
2015-08-05 15:00
2015-08-05 15:00
타켓시스템12
7
1
2015-08-06 0:00
2015-08-27 23:00
타켓시스템10
16
4
2015-08-06 16:00
2015-08-29 19:00
타켓시스템11
9
1
2015-08-07 19:00
2015-08-25 10:00
표 공격 대상 시스템 목록
반대로 공격을 시도했던 공격자 IP를 목록화 하고, 침해사고 원인을 역추적하는 방법도 있다.
앞서 보안 위협 분석을 위해 어떠한 정보가 필요한지와 필요한 정보를 수집하는 방법을 살펴 봤다. 이번 장에서는 수집한 정보를 분석해 위협이 되는 이벤트와 그렇지 않은 이벤트를 구분하는 방법을 살펴 볼 것이다.
일반적으로 보안분석가가 보안 위협을 구분하는 과정은 다음과 같다. 보안 위협이나 피해 형태에 따라 필요한 방법론을 정의 하고, 방법론에 적합한 증거를 수집한다. 수집한 증거는 가공 과정을 거쳐 분석에 필요한 정보를 찾아낸다. 분석된 결과는 업무프로세스에 따라 보고 과정을 거쳐 최종적으로 의사 결정자에 의해 결론을 정의 한다.
분석에 사용될 방법론은 위협을 구분하고, 식별하기 위해 어떤 방법을 사용할지 정의 하는 것이다. 공격과 관련된 알려진 특징을 이용할 수도 있고, 수집된 정보를 가공해 통계적인 수치를 이용해 위협을 식별할 수도 있다.
필요한 분석 방법에 따라 수집되는 정보도 차이가 난다. 공격의 특징을 이용해 위협을 분석하기 위해서는 시그니처 기반의 탐지 정보가 필요하지만 통계정보를 이용하기 위해서는 수치화된 정보가 필요 하다.
필요한 정보가 수집이 완료되면 데이터를 가공해서 불필요하거나 분석 우선 순위가 낮은 데이터를 제외한다. 처음부터 끝까지 모든 정보를 분석하면 좋겠지만 제한된 시간과 자원을 가지고 분석하기 때문에 효율적으로 작업 해야 한다.
데이터가공까지 완료되면 위협을 식별하고 식별된 위협 결과에 따라 피해범위와 대응방안을 수립한다. 분석가에게 중요한 역량은 IT보안사고와 연관된 원인을 정확히 규명하고 사고로 인한 피해 범위를 정확히 파악하는 것이다. 분석가의 결론으로 기업이나 조직에 미치는 피해 범위를 정의한다.
분석된 내용은 보고서로 작성해서 대응방안과 함께 의사결정자에게 제공한다. 분석 결과는 의사 결정에 필요한 필수 정보로 사용된다.
사이버 보안 침해사고가 발생하면 기업은 내부적으로 침해사고분석을 통해 공격자의 흔적을 찾아내고, 공격 당시 사건을 재구성하여 시스템에 발생한 피해를 파악 합니다.
시스템에 침해가 발생하기 까지는 많은 일들이 발생 합니다. 공격자가 시스템을 공격하고 장악하기 위해 정보 수집 과정을 거치게 됩니다. 이 과정에서 공격자는 대상 시스템의 서비스 종류, 시스템 현황, OS종류, IP대역, 포트정보, 취약점 정보 등 많은 정보를 수집하게 됩니다.
외부의 공격자가 정보 수집을 통해 충분히 공략할 대상 시스템의 약점을 파악했으면 취약점을 이용해 공격에 들어가게 됩니다. 보통 이 과정에서 많은 수의 공격이 탐지되고 차단이 됩니다. 공격자는 가능한 모든 방법을 동원해 탐지되지 않기 위해 우회 시도를 하고, 100번의 공격 중 1번의 공격이 성공하게 되면 공격 성공 단계에 이르게 됩니다. 바로 이 단계가 침해가 발생되는 시점 입니다.
시스템 장악에 성공하면 공격자는 자신의 목적에 따라 시스템에 악성코드를 설치하거나 시스템의 정보를 유출하는 행위가 이뤄지고, 많은 경우 침해사고 발생에 대한 인지는 정보 유출 또는 시스템 변조가 발생되고 이뤄지게 됩니다.
보안팀은 공격을 탐지하고 예방하기 위해 다양한 방법을 이용해 침입시도에 대해 모니터 합니다. 주로 네트워크에서 발생되는 정보를 활용하게 됩니다. 가장 많이 사용되는 정보는 침입탐지시스템에서 제공하는 정보 입니다. 시스템에 가해지는 공격시도나 공격행위에 대해 네트워크 레벨에서 사전에 분석해 파악하고, 차단하면 시스템 침해를 예방할 수 있습니다.
최근 보안 사고가 연속적으로 발생하고 이로 인한 개인정보유출과 랜섬웨어로 인한 피해가 발생 하였습니다. 공격자가 공격 대상의 약점을 악용해서 큰 피해로 이어지게 만들었던 사례입니다.
개인정보 유출 사례의 경우 공격자는 제로데이 공격이 아닌 이미 알려진 악성코드를 사용했던 것으로 확인되었고, 공격자가 취약한 시스템을 알려진 악성코드를 이용해 공격이 성공하였습니다.
보안 사고 사례: BPFDoor 유즈케이스
개인정보 유출 시 사용된 공격 프로그램은 BPFDoor라 불리는 리눅스 운영체제 기반의 백도어 프로그램 입니다. 해당 공격에 사용된 악성코드는 Elastic 보안 연구소에서 2022년 보안 블로그를 통해 동작 방식 및 예방 방법에 대해 공유 하였습니다.
BPFDoor 는 Linux용으로 특별히 제작된 백도어 입니다. 이 백도어의 목적은 공격 대상 환경에 반복적으로 재진입하기 위해 장기간 시스템에 숨겨진 백도어 역할을 수행 합니다. 특히 BPF를 비롯한 여러 기술을 활용하여 최대한 은밀하게 작동하도록 설계 되어 있습니다.
패시브 형태로 백도어가 동작하기 때문에 평상시 가동 시간이 높은 서버나 기기, IoT/SCADA, 또는 인터넷에 접속 가능한 클라우드 시스템에 설치되도록 설계되었습니다. 특히 서비스 특성 상 메인터넌스나 재부팅이 어려운 시스템에 지속적으로 상주하여 공격자의 백도어 역할을 수행 합니다. 공격 프로그램에서 사용하는 파일은 임시 폴더에 저장되므로 서버가 재부팅 되거나 종료될 경우 백도어가 손실됩니다.
이 악성코드가 시스템에서 발견될 경우, 초기 접근(1단계) 또는 사후 공격(2단계) 페이로드가 여전히 존재하고 환경의 다른 곳에서 활성화되어 있을 가능성이 높다고 가정해야 합니다. 이 백도어는 은밀하게 침투하여 탐지되지 않을 모든 기회를 포착합니다. 샘플 코드를 통해 확인된 BPFDoor의 동작 과정 입니다.
예외 샘플 분석
주목할 점은 1~4단계가 나타나지 않는 샘플이 하나 있다는 것입니다 . 이 샘플은 초기 이름을 하드코딩된 값으로 변경하지 않고, 배치된 위치에서 실행하며, 그 외에는 동일한 동작을 모델링합니다.
실행 시 바이너리는 자신을 /dev/shm/에 복사합니다. 임시 파일 시스템인 /dev/shm은 공유 메모리를 의미하며, 프로세스 간 효율적인 통신 수단으로 사용되는 임시 파일 저장 공간입니다.
프로세스 이름을 하드코딩된 프로세스 이름인 kdmtmpflush로 변경합니다.
-init 플래그로 자신을 초기화하고 자신을 fork합니다. Linux에서 fork는 호출 프로세스를 복제하여 새 프로세스를 생성하는 것을 의미합니다.
자신을 위한 새로운 프로세스 환경을 생성하고 기존 프로세스를 제거하며, 새 프로세스 이름을 설정(스푸핑)합니다. 마치 마스크를 쓴 것처럼 시스템에 나타나는 방식을 변경합니다. 프로세스는 여전히 kdmtmpflush이지만, ps를 실행하면 설정된 값을 볼 수 있습니다.
/var/run에 프로세스 ID(PID) 파일을 생성합니다. PID 파일은 연관된 프로그램의 프로세스 정보를 담고 있는 텍스트 파일로, 다중 시작을 방지하고, 상주 상태를 표시하며, 프로그램이 스스로를 중지하는 데 사용됩니다. 이 파일은 또 다른 임시 파일 저장 공간인 /var/run에 있습니다.
원시 네트워크 소켓을 생성합니다. Linux에서 소켓은 네트워크 통신의 엔드포인트로, 패킷의 모든 섹션을 세부적으로 지정할 수 있도록 하여 사용자가 인터넷(IP) 수준에서 자체 전송 계층 프로토콜을 구현할 수 있도록 합니다.
원시 소켓에 BPF 필터를 설정합니다. BPF를 사용하면 사용자 공간 프로그램이 모든 소켓에 필터를 연결하여 특정 유형의 데이터가 소켓을 통해 들어오도록 허용하거나 거부할 수 있습니다.
들어오는 패킷을 관찰합니다
BPF 필터와 일치하고 필요한 데이터를 포함하는 패킷이 관찰되면 처리를 위해 백도어로 전달됩니다.
현재 프로세스를 다시 포크합니다.
포크된 프로세스의 작업 디렉토리를 /로 변경합니다.
포크된 프로세스의 이름을 하드코딩된 값으로 변경(스푸핑)합니다.
“매직 패킷”에 전송된 비밀번호 또는 비밀번호의 존재 여부에 따라 백도어는 역방향 셸을 제공하거나 바인드 셸을 설정하거나 ping을 다시 보냅니다.
아래에서 Elastic의 Analyzer View를 활용하여 BPFDoor 프로세스 트리를 시각적으로 확인할 수 있습니다. 첫 번째 이미지는 백도어(즉, 리버스 셸, 바인드 셸 또는 핑백)가 실제로 사용되기 전의 트리를 보여주고, 두 번째 이미지는 리버스 셸이 연결되고 익스플로잇 후 활동을 수행한 후의 트리를 보여줍니다.
그림 BPFDoor 초기 호출 프로세스 트리의 Elastic Analyzer 뷰
그림 Reverse Shell연결 및 공격 성공 후 BPFDoor의 Elastic Analyzer 뷰
원격 스캔 방식: TCP, UDP, ICMP 혼합 방식으로 포트 연결 시도 (예: 68/UDP → 53/UDP)
포트리스닝 없는 역접속 방식: 백도어는 포트를 열지 않고 “매직 패킷” 수신 시명령 실행
은폐 기법: 프로세스 이름 위장, 표준 스트림 닫기, 루트 권한으로 메모리 상 실행
Elastic Security Team은 BPFDoor 맬웨어를 분석하는 데 도움이 되는 몇 가지 도구를 만들었습니다. BPFDoor 스캐너를 사용하면 BPFDoor 맬웨어에 감염된 호스트를 스캔할 수 있으며, BPFDoor 구성 추출기를 사용하면 맬웨어의 구성이나 하드코딩된 값을 추론하여 추가 분석, 추가 시그니처 개발 또는 클라이언트를 활용한 백도어 연결에 사용할 수 있는 추가 관찰 결과를 얻을 수 있습니다.
BPFDoor 백도어가 왜 그렇게 오랫동안 사용되면서 숨겨진 채로 남아 있었는지를 알기 위해 동작 방식을 설명 했습니다. Linux 운영체제의 이상 프로세스 대해 잘 모르거나 자세히 살펴보지 않았다면 쉽게 탐지되지 않을 것입니다. 탐지를 피하기 위해 은밀하게 동작하지만, 행위 기반 탐지 방식과 시그니처 기반 탐지 방식을 통해 충분히 탐지와 차단이 가능 합니다.
Elastic Endpoint 제품인 Elastic Defend에서 대응 과정을 살펴 보겠습니다.
악성코드 초기 실행 시 관찰된 동작에 주목 합니다. 특히 이상행위는 공유 메모리 위치인 /dev/shm 디렉터리에서 발견 되었습니다. 이 디렉터리는 Linux의 기본 임시 파일 시스템 위치로, RAM을 저장 공간으로 사용하며, 이 디렉터리에서 바이너리가 실행되거나 네트워크 연결을 생성하는 것은 실제로 매우 드뭅니다.
두 번째로 /var/run에 특정 PID 파일이 생성을 통해 악성코드 탐지 및 예방 입니다. Osquery 통합 기능을 통해 /var/run 디렉터리에 드랍된 PID 파일이 완전히 비어있는 것을 발견했습니다. 드랍 파일 자체가 악의적인 것은 아니지만, PID 파일 크기가 0이거나 10바이트 정도인 경우는 드물기 때문에 이러한 비정상적인 동작을 탐지하기 위한 추가 탐지 Rule을 만들었습니다.
침해사고 분석 시 시스템에 동작 중인 프로세스를 확인하는 과정이다. 침해사고에서 발견되는 공통점 중 하나가 악성코드다. 이 악성코드는 별도로 실행되기도 하지만 많은 수의 악성코드가 시스템에 구동중인 기존 프로세스를 감염시킨다. 시스템에서 구동중인 프로세스가 정상인지 비정상인지를 판단해야 한다. 점검 방법은 운영체제에서 제공하는 기본적인 프로세스에 대한 정보를 활용할 수도 있고, 백신프로그램을 이용해 검사를 해볼 수도 있다.
감염된 프로세스에서 사용중인 파일을 찾는 작업이 쉽지는 않다. 프로세스에서 사용하고 있는 파일들이 생각보가 많을 것이다. 프로세스에서 참조하는 많은 파일들이 정상 파일인지 확인해야 하고, 감염된 프로세스가 외부로 통신을 하고 있으면 통신목적을 확인해야 한다. 프로세스를 뜯어보기 위해 어떤 과정이 필요하고, 어떤 툴을 사용하는지 방법을 소개하고자 한다. 물론 책에서 소개한 방법이나 프로그램 외에도 많은 방법이 있다. 자신의 스타일에 맞는 방법이나 프로그램을 이용할 것을 추천 한다.
악성코드에 감염된 시스템에서 채증 또는 확보한 파일은 분석 전용 시스템으로 이동해 분석하자.
프로세스 정보 수집
침해사고 분석 시 프로세스 정보를 수집하기 전에 전반적인 시스템 정보를 다시 한번 확인한다. PSINFO 프로그램을 이용해 시스템 기본 정보를 확인한다.
기본 정보를 확인하는 목적은 단순한 정보에 침해의 중요한 실마리가 되는 정보들이 숨어 있기 때문이다. 예를 들어 업타임(Uptime) 정보는 시스템이 기동된지 얼마의 시간이 지났는지 정보를 제공 한다. 일부 악성코드의 경우 시스템에서 프로세스를 감염시키는 과정에서 얘상치못한 프로세스 또는 시스템 오류를 발생시키곤 한다. 이때 장비가 재부팅되기도 한다.
최초 악성코드 감염은 시스템이 기동되고 운영중인 상태에서 발생한다. 이 경우 다른 프로세스들과 기동 시간을 비교해보면 중간에 시작된 프로세스들이 생기는되 이러한 프로세스를 먼저 살펴볼 필요가 있다.
업타임 정보외에도 응용프로그램들의 버전 정보나 운영체제의 버전 정보도 확인할 필요가 있다. 기본에서 시작하면 복잡한 침해사고도 의외로 쉽게 풀린다.
리눅스에서는 ‘uptime’ 명령을 실행해서 윈도우에서와 동일한 정보를 수집 할 수 있다. 다음은 ‘uptime’ 명령을 실행한 예제이다.
이제 본격적으로 프로세스 리스트를 확인해 보자. PSLIST 툴을 이용해 점검 대상 시스템에 구동 중인 프로세스 리스트를 수집하자. PSLIST 툴은 각 프로세스의 PID, Elapsed Time(프로세스가 시작되어 현재까지 경과된 시간), CPU Time(CPU 사용 시간) 정보등을 확인할 수 있다. 다음은 툴을 실행시켰을 때 보여지는 각각의 항목에 대한 설명이니 참고하자.
항목
설명
Pri
우선순위
Thd
쓰레드수
Hnd
핸들수
VM
가상메모리
WS
워킹셋
Priv
Private 가상메모리
Priv Pk
Private 가상메모리 최대치
Faults
Page Faults
NonP
Non-Paged 풀
Page
Paged 풀
Cswtch
Context Switches
표 PSLIST 점검 항목
Elapsed Time은 해당 프로세스가 시작된 시점에 따라 차이가 발생된다. 일반적으로 주요 프로세스는 윈도우 시작 시 구동되기 때문에 윈도우 시작 시간과 거의 동일하다. 운영체제 업타임과 비교해서 시작 시 실행된 프로세스와 운영체제 구동 후 중간에 실행된 프로세스 정보 할 수 있다. 프로세스 PID의 경우도 시스템 시작 후 시간이 지날수록 실행되는 프로세스의 PID번호가 높아진다.
그림 PSLIST 실행
악성코드에 의해 생성된 프로세스 또는 감염된 프로세스 확인을 위해서는 프로세스에 대한 정보를 알고 있어야 한다. 하지만 프로세스는 구동 중인 환경에 따라 사용되는 종류도 다양하고, 특정 시스템에만 존재하는 프로세스도 있기 때문에 모든 프로세스에 대한 정보를 알고 있기는 힘든 것이 사실이다.
윈도우의 경우 다 음표와 같이 사이트를 통해 기본적인 프로세스에 대한 정보를 제공한다. 프로세스 점검 시 활용하면 도움이 될 것이다. 표는 윈도우를 기준으로 한 기본 프로세스에 대한 정보이다.
프로세스 이름
설명
Csrss.exe (작업관리자에서 종료 불가)
Win32.sys가 Win32 subsystem의 커널모드 부분인데 비해서 Csrss.exe는 사용자모드 부분이다. Csrss는 Client/Server Run-time SubSystem의 약자로 항상 돌고 있어야 하는 필수 subsystem 중 하나이다. 콘솔 창, 쓰레드 생성 및 제거 및 16비드 가상 도스 환경의 일부를 관리한다.
Explorer.exe (작업관리자에서 종료 가능)
작업관리줄, 바탕화면 등과 같은 사용자 셸로서 Windows의 작동에 있어 필수적인 요소가 아니며 시스템에서 아무런 부작용 없이 작업관리자에서 종료 및 재시작이 가능하다.
Internat.exe (작업관리자에서 종료 가능)
시스템 시작과 함께 구동되는 프로세스로 사용자가 지정한 여러가지 입력 로케일 (HKEY_USERS.DEFAULTKeyboard LayoutPreload키에서 뽑아낸다)을 구동한다. 시스템 트레이에 “EN” 아이콘을 띄움으로써 사용자가 입력로케일간에 변환을 손쉽게 할 수 있도록 한다. 작업관리자를 통해 이 프로세스를 종료하면 “EN” 아이콘도 disable되는 것처럼 보이지만 제어판을 통해 입력로케일간의 변환이 가능하다.
Lsass.exe(작업관리자에서 종료 불가)
로컬 보안 인증 서버로서 Winlogon 서비스가 사용자를 인증하는데 필요한 프로세스를 만들어 내고 이 프로세스는 Msgina.dll과 같은 인증 패키지를 이용함으로써 수행된다. 인증이 성공하면 Lsass는 해당 사용자의 Access Token을 생성하고 이를 이용해 초기 셸이 구동된다. 동 사용자가 초기화하는 다른 프로세스들은 이 Access Token의 지위/속성을 승계한다.
Mstask.exe (작업관리자에서 종료 불가)
사용자가 미리 지정한 시간에 작업을 실행시키는 Task Scheduler Service
Smss.exe (작업관리자에서 종료 불가)
사용자 세션을 시작시키는 세션 관리자 subsystem으로서 시스템 쓰레드에 의해 초기화되며 Winlogon 및 Win32 (Csrss.exe) 프로세스를 구동하고 시스템 변수를 설정하는 등의 다양한 활동을 담당한다. 이들 프로세스를 구동시킨 다음 Winlogon이나 Csrss가 종료할 때까지 대기하되, 종료가 정상적으로 이루어지는 경우엔 시스템이 종료하고 그렇지 않은 경우엔 시스템을 반응없음(Hang)상태로 만든다.
Spoolsrv.exe (작업관리자에서 종료 불가)
스풀된 프린트/팩스 작업을 책임지는 spooler service
Svchost.exe (작업관리자에서 종료 불가)
DLL로부터 구동되는 다른 프로세스들에 대한 호스트로서 작동하는 generic process이기 때문에 2개 이상이 생길 수도 있다. Svchost.exe를 이용하는 프로세스들의 명세를 확인하려면 윈2000 CD에 있는 Tlist.exe를 이용하면 되고 구문은 명령 프롬프트에서 tlist -s 이다.
Services.exe (작업관리자에서 종료 불가)
시스템 서비스들을 시작/종료/상호작용하는 역할을 담당하는 Service Control Manager
System (작업관리자에서 종료 불가)
대부분의 시스템 커널모드 쓰레드들이 System 프로세스로서 실행된다.
System Idle Process (작업관리자에서 종료 불가)
각각의 프로세서(CPU)에서 돌고 있는 단일 쓰레드로서 시스템이 다른 쓰레드들을 프로세싱하지 않을 때 프로세서 타임을 관리하는 역할을 수행한다. 작업관리자에서 이 프로세스가 프로세서 타임의 대부분을 차지해야 시스템이 빠른 속도를 낼 수 있다.
Taskmgr.exe(작업관리자에서 종료 가능)
작업관리자를 위한 프로세스
Winlogon.exe(작업관리자에서 종료 불가)
사용자 로그온 및 로그오프를 관리하는 프로세스로서 사용자가 Ctrl+Alt+Del를 눌러서 보안 대화상자를 띄울 때만 활성화된다.
Winmgmt.exe(작업관리자에서 종료 불가)
윈2000에서 클라이언트 관리의 핵심 구성요소로서 클라이언트 응용프로그램이 처음 연결될 경우 또는 관리 응용프로그램이 서비스를 요청할 때 초기화된다. 작업관리자에서 종료할 수 없는 프로세스들의 대부분은 Resource Kit 유틸인 Kill.exe를 이용하여 종료가 가능하지만 system failure나 기타 다른 부작용을 야기할 수 있다.
표 기본 프로세스 정보
한가지 분석 팁은 점검 대상과 동일한 버전의 깨끗한 상태의 운영체제를 설치해 프로세스 리스트를 점검 대상 시스템과 비교하는 방법이 있다. 설치하기가 어렵다면 기존의 설치된 시스템을 활용할 수도 있다.
프로세스 리스트를 좀더 유기적으로 분석하기 위해서는 앞서 PSLIST실행 결과를 의존관계에 따라 확인하는 방법이 있다. 방법은 PSLIST 실행 시 옵션 선택을 통해 가능하다. –t 옵션을 이용하면 단순 리스트업이 아닌 자식과 부모 프로세스로 구분해 트리형태로 표시한다. 악성코드가 어떤 프로세스를 만들었고, 악성코드에 의해 생성된 하위 프로세스를 확인 할 수 있다. 다음이 실제 확인해본 결과다.
그림 PSLIST 실행 옵션
필요에 따라 PSLIST에서 제공하는 옵션을 확인해 적절히 사용하면 프로세스 정보 분석에 도움이 된다. 윈도우의 경우에 프로세스 분석 시 GUI형태로 제공되는 툴도 있다. PSLIST를 통해 확인이 어려운 부분은 추가로 툴을 이용해 분석 시 활용한다.
윈도우에서 “pslist –t”를 이용해 확인한 결과와 동일한 결과를 리눅스에서 ‘pstree’ 명령을 통해 얻을 수 있다. PS명령의 옵션을 이용하여 확인도 가능 하다. (ps –ejH, ps axjf)
‘pstree’ 명령을 이용해 히든프로세스 정보까지 확인 가능하다. 명령 실행 시 h옵션을 이용해 확인한다. 다음은 히든프로세스를 확인한 결과 화면 이다. 동일한 시스템에서 명령을 실행 시켰지만 옵션에 따라 결과를 다르게 나타난다. 그림의 왼쪽은 pstree 명령을 실행 시킨 결과이고 오른쪽은 ‘-h’ 옵션을 사용한 결과다. 동일한 bash 프로세스도 보여지는 결과가 다른다.
그림 pstree 실행 비교
w명령은 현재 로그인한 정보와 함께 사용자별 실행 중인 프로세스 정보까지 확인이 가능 하다.
다음은 w명령이 표시하는 목록에 대한 설명 이다
항목
설명
User
로그인한 사용자 이름
TTY
teletype – TTY는 타자기 형태의 키보드와 부착형 프린터 등을 갖춘 장치를 의미, tty값이 0또는 양수인 경우 콘솔을 통해 로그을한 것을 의미, tty항목이 pts로 표기 또는 ttyp#일 경우 네트워크를 통한 로그온이다.
From
네트워크를 통한 연결일 경우 원격지 IP주소, 콘솔을 통한 로그인일 경우는 표기하지 않음
Login@
최종 로그인 시간 표기
Idle
마지막으로 행위 후 활동을 얼마나 멈추고 있는지 나타낸다. 예를 들어 “w”명령을 입력한 후 5초 동안 아무런 입력이나 출력을 하지 않았다면 해당 시간이 5초로 표기된다. 2:14pm 5.00s 0.00s 0.00s -bash
JCPU
TTY항목에 나열된 각각의 로그인(네트워크 또는 콘솔)에서 사용한 CPU사용 시간 합이다. 지나간 백그라운드 잡은 포함하지 않고, 현재 걸려있는 백그라운드 잡은 합산 시간에 포함된다.