보안정보

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

Windows live response investigation with CLI only. Part 2

2021.10.05

24,907

 

 

 



01. 개요

이번 호에서는 보안관제 및 침해사고 대응 업무 수행 시 Windows OS에서 제공하는 기본 기능을 활용한  Live response investigation에 대해서 설명하고자 합니다. Windows OS환경에서 현재 운영체제의 상태를 확인하고 침해증거를 분석하기 위해서는 시스템 명령어 인터프리터인 CLI를 이용하여 아티팩트를 확인할 수 있습니다.

본격적으로 CLI를 활용한 Live response investigation에 앞서 지난 호에서는 시스템 기본정보를 포함하여 네트워크 정보 등 휘발성데이터를 위주로 활용방법에 대해서 확인하였으며, 이번 호에서는 비휘발성데이터를 통해서 공격징후를 확인할 수 있습니다. CLI에서 제공하는 다양한 옵션들을 이용하면 GUI나 인스톨기반의 도구만큼 효과적인 분석이 가능하기 때문에 다양한 내용들을 다루고 싶으나 한정된 시간과 사고의 긴급성, 시급성을 고려하여 최대한 현실감 있는 분석상황을 전달하기 위해서 일반적인 업무 프로세스를 준영하는 범위 내에서 활용방법을 설명하고 있습니다. 

이번 호에서 살펴볼 명령어들은 방화벽, 윈도우 이벤트로그, 실행중인 프로세스 및 서비스, 윈도우 이벤트 로그 등 비휘발성 로그들을 위주로 정보를 수집해보고자 합니다.

+ Firewall Settings

+ Windows event logs

+ Running Processes

+ Running Services

+ Scheduled Jobs

+ Autostart Modules

+ Event Logs

+ Static evidences



02. live response investigation – Keep going

1) Windows 방화벽 설정 확인

윈도우 방화벽(Windows Firewall)은 운영체제 상에서 사용할 수 있는 개인용 방화벽으로 Windows XP, Windows Server 2003, Windows Vista이상 버전에는 기본적으로 포함되어 있으며, Windows 10에서는 윈도우 디펜더 방화벽(Windows Defender Firewall)로 명명되고 있습니다. 침해사고가 발생되는 경우 공격자들은 AV와 함께 윈도우 방화벽(또는 윈도우 디펜더 방화벽)을 disable하여 악성코드 설치 등을 수행하기 때문에 방화벽의 정상동작여부를 확인하는 것은 중요한 침해지표 중에 하나입니다. 

방화벽의 구동여부 및 위∙변조 여부 등을 판단하기 위해서는 현재 구동 중인 컴퓨터의 네트워크 정보를 제공하는 netsh 명령어를 사용하면 됩니다. netsh 명령어가 제공하는 컨텍스트(네트워크 서버 역할 또는 기능과 관련된 명령어 그룹) 중 ‘advfirewall’옵션을 사용하면 방화벽 정보를 확인할 수 있습니다.

 Command : netsh help​ 




[그림 1] netsh 명령어 컨텍스트 목록


netsh advfirewall 명령어를 사용하면 윈도우 방화벽의 구동여부, 방화벽정책(인바운드, 아웃바운드), 로깅설정, 정책 기본값 복원, 특정 서비스 사용 등을 설정, 확인할 수 있습니다.

 Command : netsh advfirewall​ 




[그림 2] advfirewall 컨텍스트 목록


netsh advfirewall 명령어에서 다양한 컨텐스트를 지원하고 있지만, 현재 Live response investigation관점에서 윈도우 방화벽의 동작여부를 확인하기 위해서, 프로필 속성, 도메인속성, 전역속성 등을 제공하는 show 컨텍스트를 이용하여 세부내용을 확인할 수 있습니다.

 Command : netsh advfirewall show​ 

  

 


[그림 3] advfirewall show 컨텐스트 목록


netsh advfirewall show을 사용하여 윈도우 프로파일 별 속성을 통해 현재 구동 중인 방화벽정보(Active profile)을 확인하기 위해서는 ‘netsh advfirewall show currentprofile’ 명령어를 활용하면 됩니다. 그 외에도 allprofiles, domainprofile, global, privateprofile등을 제공하고 있기 때문에 의심스러운 방화벽 속성정보에 대해서는 별도의 확인이 필요합니다.

 Command : netsh advfirewall show currentprofile​ 




[그림 4] 활성화 프로파일 방화벽 정보 보기


결과적으로 ‘netsh advfirewall show currentprofile’의 결과를 통해서 아래와 같은 정보를 확인할 수 있습니다.

 (1) 방화벽 사용 여부 : 사용

 (2) 방화벽 정책 : 모든 인바운드, 아웃바운드 트래픽 차단 설정

 (3) Firewall.log 파일의 경로 정보

 (4) 로그의 최대 파일사이즈 등



윈도우 기본명령어인 netsh명령어를 통해 운영체제의 네트워크 설정정보 및 실행정보를 확인할 수 있으며, 방화벽 구도여부 및 상세정보 등을 통해 침해사고 분석에 필요한 아티팩트를 획득할 수 있는 활용사례에 대해서 살펴보았습니다. CMD에서 제공하는 기본명령어 이외에도 Powershell에서 제공하는 Get-NetFirewallProfile, Set-NetFirewallProfile 등을 통해서도 윈도우 방화벽 정보를 제공하고 있기 때문에 분석대응의 운영체제 환경에 따라 제공하는 다양한 기본명령어 및 옵션에 대한 활용이 필요합니다.


2) Running process, Service 정보수집

침해사고가 발생한 경우 시스템 정보를 탈취하거나 외부로 정보를 유출하기 위해서는 악성 프로세스 및 서비스 등록을 통해서 공격의 연속성을 유지하는 것이 일반적입니다. 공격자가 실행 및 설정한 프로세스 및 서비스 정보를 수집하기 위해서는 어떤 명령어를 활용 할 수 있는지 자세히 살펴보고자 합니다. 본격적인 정보 수집에 앞서 프로세스 및 서비스 정보 수집 시에 가장 많이 활용되는 매개변수 목록은 [표4-1]을 참고하면 됩니다.

옵션

기능

-U

명령을 실행해야 하는 사용자 컨텍스트 지정

-M

해당 exe/dll 이름을 사용하는 모든 작업 나열. 미지정 시 로드된 모든 작업 나열

-SVC

각 프로세스에 호스트된 서비스 표시

-APPS

MS 앱과 관련된 프로세스 표시

-V

자세한 작업 정보 표시

-FI

필터에서 지정한 조건과 일치하는 작업 집합 표시

-FO

출력형식 지정. 사용가능 값 : TABLE, LIST, CSV


[표 1] tasklist 옵션 중 일부


tasklist명령어를 별도의 옵션없이 사용하는 경우 기본적으로 오름차순으로 정렬로 출력되며, 내림차순으로 출력하는 경우 ‘tasklist | sort /R’명령어를 사용하면 됩니다.

 Command : tasklist | sort​ 

 

 

 


[그림 5] 작업목록 정보수집


프로세스 목록정보를 통해서 윈도우 기본 프로세스 정보 위∙변조 및 svcshot.exe, smss.exe, wininit.exe등 윈도우 기본 프로세스명과 유사 프로세스, PID, 비인가 프로세스 실행여부 등을 확인할 수 있습니다.  Tasklist 명령어는 이미지 이름(프로세스 이름), PID(프로세스 ID), 세션이름(서비스, 콘솔), 세션#(비활성화 : 0, 활성화1), 메모리 사용(메모리 사용량)을 제공하며 악성 프로세스 실행여부는 세션이름에서 콘솔(CONSOLE)로 확인이 가능합니다.

 Command : tasklist /FI “SESSIONNAME ne CONSOLE”​ 




[그림 6] 자동실행 서비스 정보수집


“SESSIONNAME ne CONSOLE” 필터는 세션이름 중에서 콘솔을 “제외한(negative)” 결과값 제시를 위한 명령어로 TASKLIST 명령어에서 주로 사용하는 필터와 연산자는 다음과 같습니다.

- STATUS

- IMAGENAME
- PID
- SESSION
- SESSIONNAME
- CPUTIME
- MEMUSAGE
- SERVICES

- MODULES

(eq, ne)

(eq, ne)
(eq, ne, gt, lt, ge, le)
(eq, ne, gt, lt, ge, le)
(eq, ne)
(eq, ne, gt, lt, ge, le)
(eq, ne, gt, lt, ge, le)
(eq, ne)

(eq, ne)



악성코드가 항상 실행파일형태로 구동되는 것이 아니라 DLL Injection등을 통해서도 구현될 수 있기 때문에 프로세스 실행시에 사용하는 dll목록을 함께 확인할 필요가 있습니다. 이를 위해서 ALPDF.exe 관련된 DLL 매핑 시 명령어는 다음과 같습니다.

 Command : tasklist /M /FI “ImageName eq ALPDF.exe”​ 




[그림 4-7] 프로세스 DLL 정보 수집


3) Scheduled Jobs, Event Logs 정보수집

이제 운영제체에 스케줄링 된 작업 정보와 윈도우 이벤트 로그의 자세한 정보를 수집해 보도록 하겠습니다. 먼저 스케줄링 된 작업 정보를 확인하기 위해 SCHTASKS명령어를 사용하면 됩니다. 하지만 스케줄링 정보에는 호스트 이름, 로그온 모드, 실행할 작업, 시작위치 등 다양한 Description정보들이 제공되기 때문에 파일형태로 저장하는 경우에는 텍스트파일(*.txt)파일이나 CSV(명령어 : schtasks /query /v /fo csv > [filename].csv)파일로 저장하여 확인이 가능합니다.

 Command : schtasks /query /fo LIST /v >> scheduled_tasks.txt​ 




[그림 4-8] 스케줄링 작업정보 수집


명령어가 정상적으로 입력되었다면, 다음과 같은 팝업창이 생성될 것입니다.

 Command : eventvwr​ 




[그림 4-9] 이벤트로그 정보 수집


이벤트 뷰어(로컬) > Windows 로그 (드롭다운) > 시스템을 클릭하면 위 그림과 같은 화면이 나타나게 됩니다.
이때, 사고가 일어난 시점의 기간 및 수준을 필터링 하고 설정, “다른 이름으로 저장하기” 버튼을 눌러서 임의의 위치에 저장하면 마무리 됩니다. 하지만, 용량 문제가 발생 할 수 있으므로 파일 포맷 선택은 CSV 또는 XML로 저장 하는 것을 추천합니다. 


4) Static Evidences 정보수집

공격자는 타깃시스템에 악성 프로그램을 설치한 경우 숨겨진 디렉토리 또는 파일로 설정하기 때문에 숨김속성으로 설정된 디렉토리 및 파일목록을 통해 악성행위를 확인할 수 있습니다. 운영체제 정상파일 중 일부 파일들은 기본속성이 숨김속성으로 되어 있기 때문에 숨김속성이라고 해서 모든 디렉토리 및 파일이 악성 프로그램이 아니기 때문에 해당 목록을 기준으로 악성 프로그램을 발견해야 합니다.

 Command : dir /s /b /ahd "%HOMEDRIVE%" >> Hidden_dirs.txt​ 




[그림 4-10] 숨겨진 디렉토리 정보 수집


공격자는 타깃시스템에 악성 프로그램을 설치하는 경우 재부팅하는 경우를 감안하여 운영체제 시작 시에 ‘자동으로 실행되는 프로가램의 리스트’로 설정하여 악성 프로그램을 실행하는 경우가 빈번하기 때문에 시작프로그램 목록도 확인이 필요합니다.

 Command : wmic /output:Startup_wmic.txt startup list full​ 



명령어가 정상적으로 입력되었다면, 다음과 같은 텍스트 파일이 생성될 것입니다.


[그림 11] 자동실행 프로그램 정보 수집


그리고 사고 발생 단말의 폴더, 파일 구조 확인을 위해 tree 명령어를 이용하여 파일 저장을 실행할 수 있으나, tree 명령어는 감춰진 파일 또는 시스템 파일은 확인할 수 없습니다.

 Command : tree c: /F >> filesystem_tree.txt

 

 

 

 


 

[그림 12] 파일시스템 트리 정보 수집


5) Ending a Live response investigation

지금까지 2부에 걸쳐 윈도우 환경에서 기본명령어를 이용하여 침해사고 발생시에 확인할 수 있는 공격징후 아티팩트 분석에 대한 방법에 대해서 살펴보았습니다. 침해사고의 경우 분석대상의 변경을 최소화하고 무결성을 보장해야 하지만 실제 사고 인지 및 의심정황 발견 시에 가장 중요한 것은 이상행위 및 의심행위에 대한 빠른 원인분석이 중요한 경우들이 빈번하기 때문에 빠른 시간내에 운영체제에서 제공하는 기본 명령어를 이용하여 변경을 최소화 하고 휘발성데이터를 빠른 시간내에 확보하는 것이 중요합니다.

윈도우 환경에서 제공하는 기본 명령어 목록이 인스톨형태의 도구 및 GUI도구에 비해 가독성 및 활용용이성 측면에서 용이한 것은 아니나, 긴급성이 가용성보다 중요한 경우에는 가장 중요한 요소라고 할 수 있습니다. 지금까지 설명한 내용들이 침해사고 분석에 있어 모든 내용을 다루는 것은 아니나 분석이 필요한 상황에서 작은 도움이 되기를 바랍니다.

Command : echo Investigator Name : {NAME}

Command : echo Location : {ADDRESS}
Command : echo Case :{CASE NAME}
Command : echo Investigator Observed Time :{mm:hh ,DD/MM/YY}
Command : echo %date%
Command : echo %time%

Command : time/T && date/T && w32tm /tz



03. 참고자료

[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
[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
[6] Forensics : PowerShell artifacts
https://darizotas.blogspot.com/2018/10/forensics-powershell-artifacts.html