보안정보

전문화된 보안 관련 자료, 보안 트렌드를 엿볼 수 있는
차세대 통합보안관리 기업 이글루코퍼레이션 보안정보입니다.

Windows live response investigation with CLI only. Part 1

2021.08.25

25,492

 

 

 

 

01. INTRO

 

보안관제, 침해사고대응, 취약점 점검, 보안컨설팅 등 정보보안 영역의 다양한 업무를 수행하다 보면 필연적으로 원하지 않는 돌발상황이 생기기 마련입니다.

특히, 보안사고에 대한 돌발 상황은 한편으론 위기이지만, 평소에 발생 가능한 다양한 변수를 얼마나 고민하고 그에 대해 본인만의 해답을 찾아내려고 노력했는지를 가감없이 알 수 있는 좋은 기회라고 생각합니다. 

하지만 “좋은 기회"라는 것은 이상적인 이야기이고, 막상 위급한 순간이 다가오면 그런 이상적인 이야기는 사치스럽게 느껴질 것입니다. 그래서 우리는 업무를 수행하며 한번쯤 최악의 순간을 상상하고, 해당 상황에 관련된 트레이닝을 평소에 해보는 것이 좋다고 생각합니다.

그래서 이러한 상황을 임의로 설정해 보았습니다.

 

◆ 보안관제 업무 수행기관 인프라 제어 시스템 단말(Windows OS)의 긴급 침해사고 발생. 

 사고 단말 중요 데이터 즉시 수집 요청. 단, 시스템 종료(서비스중단) 불가.

 외부 전문 분석도구 사용불가. OS 자체 기능만을 사용하여 분석 요청.

 

상황을 이렇게 극단적으로 설정한 이유는 다음과 같습니다.

만약 사고 단말이 인프라 제어에 사용되는 중요 단말로, 중요 데이터를 실시간 처리하고 있어 시스템 중단 또는 종료가 곤란한 경우에도 시스템을 분석해야 하는 경우가 있고, 또한 시스템 종료로 인해 발생되는 손실이 시스템을 유지하는 경우 발생되는 손실과 비교할 때 더 큰 경우가 있기 때문입니다.

그리고 기술적으로 가장 중요한 이유는 시스템 종료 시 중요한 휘발성 증거가 손실되기 때문입니다.

 

그래서 위와 같이 중요 시스템의 침해사고 증거를 수집하기 위해서는 적절한 수행과정이 중요합니다. 

일반적으로 가장 불안정한 증거(휘발성 데이터)를 먼저 수집하고 메모리를 확보 후 파일시스템 검색을 합니다. 내용 변경이 많은 부분부터 적은 부분으로 수집의 순서가 이루어지기 때문입니다.

 

디지털 포렌식의 경우 여러 카테고리가 있지만, 오랫동안 보안관제를 수행해왔던 저의 경우 초동대응의 중요성과 돌발상황의 위험성을 적지 않게 겪어왔기에 자연스럽게 Live Response investigation에 관심을 가지게 되었고, 이번 기회로 소개하게 되었습니다.

 

이제부터, 'Windows CLI만'을 이용한 Live Response Investigation의 여러가지 명령어와 쓰임에 관하여 알아보겠습니다. 

 

 

02. Windows Command Prompt Configuration

 

1) Windows Command Prompt Interface 환경설정

 

먼저 원활한 Command Prompt Interface(이하 CLI) 사용을 위해 간단한 설정을 하고 시작하겠습니다.

Window + R 키를  눌러서 cmd 입력 후  Enter 키를 눌러 CLI를 열어줍니다. 

 

 

  

[그림 1] CLI 실행

 

 

이 후, CLI 상단 테두리에 우클릭 하여 속성 메뉴를 선택하면 다음과 같은 익숙한 창이 열립니다. 

 

  

 

[그림 2] CLI 옵션창_버퍼설정

 

 

많은 옵션을 설정할 수 있지만, CLI만을 이용한 Live Response Investigation을 위한 중요한 선택은 “버퍼 크기”와 “버퍼 수“ 입니다. “버퍼크기”는 버퍼 기록에 유지되는 명령 수를 지정합니다.

기본값은 50개 명령이지만 최대 999까지 지정 가능합니다.

“버퍼 수"는 각각 고유한 기록 버퍼를 유지할 수 있는 명령 프롬프트의 동시 인스턴스 수를 지정합니다.

예를 들어 값을 10으로 변경하면, 각각 고유한 기록 버퍼가 있는 최대 10개의 명령 프롬프트 인스턴스를 열 수 있습니다. 

버퍼 수는 기본으로 설정해도 상관없지만, 버퍼 크기는 최대로 설정하고 실습하는 것을 추천 드립니다.

 

 

03. Starting live response investigation

 

1) Order of Volatility

 

현재 우리가 진행하려고 하는 것은 신속한 휘발성 데이터 수집이지만, 가장 정석의 디지털 포렌식 프로세스 증거수집 순서는 다음의 순서를 제안하므로 참고해주세요.

 

ㄱ. CPU, Registers, System cache

ㄴ. Routing table, ARP cache, Process table, Kernel statistics

ㄷ. RAM memory

ㄹ. Temporary file systems

ㅁ. Swap space 또는 Virtual memory (Window OS에서 “페이지파일”이라고 합니다)

ㅂ. Hard Drive 또는 기타 Media Storage

ㅅ. Remote logging, Monitoring data

ㅇ. Physical configuration, Network topology

ㅈ. Backup data, 인쇄물

 

참고로 프록시 서버, 라우터, 침입탐지시스템, 방화벽 등의 네트워크 장비에 존재하는 원격 데이터도 휘발성에 의한 증거수집 순서를 갖습니다. 예를 들어 네트워크 캐시(Cache)와 원격 로그(Remote logs) 등은 휘발성일 수 있습니다. 따라서 침해사고 조사자는 현재 진행중인 사건과 관련 있는 네트워크 장비의 로그수집 순서를 고려하여 수집해야 합니다.

 

 

2) Collection of Volatile data

 

그렇다면 외부 도구의 이용 없이 빠르게 수집해야 할 휘발성 데이터의 리스트를 알아보겠습니다.

물론, 수집 순서는 크게 상관 없습니다.

 

ㄱ. System Date, Time, Uptime

ㄴ. NIC configuration settings

ㄷ. Network parameters (NetBIOS name cache, Active connections, Routing table 등)

ㄹ. Logged on users

ㅁ. Running Processes

ㅂ. Running Services

ㅅ. Scheduled Jobs

ㅇ. Autostart modules

ㅈ. Shared drives and files opened remotely

 

첫번째 수집 항목은 정보수집 시작 시간 입니다. 하지만, 먼저 다음 명령어를 입력하여 실행 위치를 바꾸어 두는 것을 추천합니다.

 

 

그 이유는 우리가 앞으로 수집할 데이터는 단편적인 것들만 존재하는 것이 아닌, 텍스트 파일 형식으로 저장해야 하는 경우도 있기 때문에 되도록 저장했을 때 찾기 쉬운 위치에서 시작하는 것이 유리하기 때문입니다.

 

 

3) 시스템 일자, 시간설정 수집

 

 

  

[그림 3] 시스템 분석 표준시간 정보수집

 

 

해당 명령어를 사용할 경우 시스템 분석 일, 시를 표시해줍니다. 특히, w32tm /tz 옵션은 표준 시간대 설정을 표시하는 옵션입니다.

 

 

4) 윈도우 환경변수 설정 정보수집

 

 

  

[그림 4] 윈도우 환경변수 설정 정보수집

 

 

해당 명령어를 사용할 경우 윈도우 시스템의 기본 환경변수를 나타내 줍니다. OS 정보, 컴퓨터 이름,  Homepath 정보, 임시 디렉토리 정보 등 다양한 정보를 제공해 줍니다.

만약, 이 정보들을 따로 저장해서 파일로 다시 보고싶다면 다음 명령어를 참고해주세요.

 

 

 

프롬프트 커서가 C:> 로 되어 있다면, C드라이브 안에 “(컴퓨터이름)_set_info.txt” 파일로 저장되었을 것입니다. 이 명령어는 계속 유용하게 사용됩니다.

 

 

5) 시스템 기본 정보수집

 

 

 

[그림 5] 윈도우 기본정보 수집

 

 

이전의 set 명령어는 소프트웨어 적인 시스템의 환경을 나타낸다면 systeminfo 명령어는 시스템의 하드웨어 특징에 대한 정보를 더 많이 제공해 줍니다. 따라서, 정밀 분석 시 반드시 수집해야 할 정보이며 분석 초기에 미리 수집하는 것이 좋다고 생각합니다.

 

 

6) 기본 디스크 정보수집

 

  

  

[그림 6] 논리적 디스크 정보수집

 

 

시스템의 하드웨어 특징에 대한 정보를 얻기 위해 해야 할 다음 질문은 “증거가 저장될 수 있는 디스크의 논리적 구성은 어떻게 되어 있는가?” 입니다.

 

이 질문에 대한 답을 명확히 알기 위해, WMIC 명령을 사용하는 것이 좋습니다.

WMIC는 Windows Management Instrumentation Command의 약자이며, 주로 기능 및 정보 관리에 관련된 명령어 입니다. 이 명령어를 통해 논리 드라이브 캡션, 파일시스템, 가용 공간 등의 정보를 알 수 있습니다.

만약 사용 가능한 디스크의 구성을 더 자세히 알아보려면 diskpart 명령을 사용해야 합니다.

하지만, diskpart를 사용하면 잠재적으로 디스크가 손상되고 정보를 복구할 수 없게 될 수 있으므로 몇가지 간단한 정보만 추출해보도록 하겠습니다. 물리적 디스크 구성부터 확인합니다.

 

  

  

[그림 7] 디스크 구성정보

 

 

다음은 논리적 디스크 구성을 확인합니다.

 

 

  

[그림 8] 논리적 디스크 구성정보 수집

 

 

또한, 혹시 존재할지 모를 가상 디스크의 존재 여부도 확인해 줍니다.

 

  

  

[그림 9] 가상디스크 구성정보 수집

 

 

가상 디스크를 가지고 있지 않다면 위 이미지처럼 표시됩니다.

 

특정 디스크를 선택하여 더 자세히 알아보겠습니다.

 

  

 

[그림 10] 특정 디스크 파티션 정보 선택수집

 

 

이 명령어를 사용할 경우, 예약된 파티션, 기본 파티션 및 복구 파티션 정보가 표시됩니다. 이 시점에서 논리적 및 물리적 디스크 조회를 통해 수집한 정보의 가치가 쉽게 드러나지 않을 수 있지만, 이 정보는 시스템에 낮은 수준의 변경이 이루어진 악성코드 관련 공격을 조사할 때 유용합니다.

 

마지막으로, WMIC 명령을 이용하여 물리적 디스크 시그니처 정보를 수집 하겠습니다.

디스크관련 정보 수집은 마무리 되었습니다.

 

 

 

 

[그림 11] 물리적 디스크 시그니처 정보수집

 

 

7) 네트워크 정보수집

 

  


 

[그림 12] 네트워크 기본정보 수집

 

 

기본적인 네트워크 정보수집의 시작은 제공되는 정보가 방대한 ipconfig 명령으로 시작하는 것이 좋습니다. 우리가 업무에서 많이 사용해서 알고 있듯이, 이 명령은 단말의 이름, 인터넷 프로토콜 주소 및 MAC 주소(네트워크 인터페이스의 물리적주소), 유/무선, Bluetooth 및 가상 머신 네트워크 인터페이스에 대한 정보가 제공됩니다. 

 

  

  

[그림 13] DNS cache 정보 수집

 

 

또 다른 중요한 명령은 ipconfig /displaydns 명령입니다. 이 명령은 현재 로그인한 사용자에 대해 실행 중인 DNS의 세부 정보(시스템에 대한 DNS 변환의 확인자 캐시)가 제공 됩니다.

그리고 중요한 필드정보는 TTL(Time To Live) 입니다. 이 필드는 캐시가 저장될 때 까지의 시간(초)를 정의하며, 캐시 값은 일반적으로 짧습니다(약 3~5분). 만약 TTL 값이 몇시간과 같이 긴 경우 의심해봐야 합니다.

다음 네트워크 정보수집 명령어는 netstat 입니다. 여러가지 옵션의 활용에 따라서 다양한 정보를 수집할 수 있습니다. 주로 악성코드 분석 시 유용하게 사용 가능한 명령어 입니다.

 

  

 

[그림 14] 네트워크 상태 및 연결정보 수집

 

 

  

[그림 15] Routing table 정보 수집

 

 

그러나 지금의 목적은 최대한 신속하게 침해사고 분석에 활용가능한 정보를 수집하는 것이 목적이기 때문에, 네트워크의 활성화된 연결과 프로토콜, 주소 및 프로세스, 프로세스 ID 정보를 수집할 수 있는 옵션인 –abno 옵션을 사용하였습니다.

또한, Routing table 정보 수집을 위한 –rn 옵션을 활용하여 라우팅 경로 및 네트워크 인터페이스 정보를 수집하는 것을 추천합니다.

참고로 자주 사용되는 netstat 명령어 옵션은 다음과 같습니다.

 

 

옵션

기능

-a

모든 연결 및 수신 대기 포트를 표시합니다.

-b

각 연결 또는 수신 대기 포트 생성과 관련된 실행 파일을 표시합니다.

-n

주소 및 포트 번호를 숫자 형식으로 표시합니다.

-o

각 연결의 소유자 프로세스 ID를 표시합니다.

-p {proto}

Proto로 지정한 프로토콜의 연결을 표시합니다. Ex) TCP, UDP, ICMP

-r

라우팅 테이블을 표시합니다.

-s

프로토콜별 통계를 표시합니다.

 

[표 1] netstat 옵션 예시

 

 

다음은 NetBIOS를 사용하는 NET 명령어를 사용해 보겠습니다.

첫번째 사용할 명령어는 net session으로, 컴퓨터와 네트워크 상의 다른 컴퓨터 사이의 세션에 관련된 정보를 보여줍니다. 

 

  

  

[그림 15] 컴퓨터 세션 정보 수집

 

 

다음 명령어는 net user로, 옵션 없이 사용될 경우 컴퓨터에 있는 사용자 계정을 나열해 줍니다. 

 

  

   

[그림 16] 컴퓨터 사용자 계정 정보 수집

 

 

그리고 net share 명령어는 컴퓨터에서 공유되는 모든 리소스에 관한 정보를 보여 줍니다. 

 

  

  

[그림 17] 컴퓨터 공유 리소스 정보 수집

 

 

04. 참고자료

 

[1] Windows command-line reference

https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-xp/bb490890(v=technet.10)?redirectedfrom=MSDN

[2] Windows live response collection

https://www.brimorlabsblog.com/

[3] Building live response script

https://mgreen27.github.io/posts/2019/04/07/ILRScriptBuilder.html

[4] Live response command examples

https://docs.microsoft.com/en-us/microsoft-365/security/defender-endpoint/live-response-command-examples?view=o365-worldwide

[5] Digital Forensics and Incident Response

https://www.jaiminton.com/cheatsheet/DFIR/#

[6] Forensics : PowerShell artifacts

https://darizotas.blogspot.com/2018/10/forensics-powershell-artifacts.html