작은 메모장
프로세스 이상징후 분석 (시나리오 1) 본문
KISA GYM으로부터 제공받은 환경은 다음과 같다.
해당 환경은 아티팩트 수집을 통해 가져온 환경이다.
해당 폴더 내에는 메모리 덤프를 해 놓은 파일이 있는데, 이를 분석할 것이다.
해당 경로로 CMD를 실행한다.
해당 메모리 파일 분석에는 Volatility 포랜식 툴을 사용할 것이다.
이 프로그램을 사용하여 분석할 첫 번째 행동은 어떤 환경 정보를 가지고 있는지 확인할 것이다.
즉, 분석을 시작하기 앞서 해당 메모리 파일의 프로필 정보를 확인하는 것이다.
다음의 명령을 사용한다.
volatility25 -f memory.raw imageinfo |
상기 명령어를 통해 해당 프로파일이 Windows7 ServicePack0, Windows7 ServicePack1을 사용하고 있고, x86 아키텍쳐를 사용하고 있음을 확인할 수 있다.
즉, 해당 피해 환경은 Windows7 환경이었던 것.
이로인해 volatility 툴에게 --profile=Win7SP1x86 옵션을 통해 해당 환경을 알려줄 수 있고, 이제 분석할 준비가 끝났다.
첫 번째로 분석할 것은 pslist, 즉 프로세스 목록이다.
다음의 명령을 사용한다.
volatility25 -f memory.raw --profile=Win7SP1x86 pslist > pslist.txt |
해당 정보를 추출하는데 성공했다면, 도움이 되는 다른 정보도 추출해보자.
프로세스의 트리관계를 텍스트로 보여주는 pstree 옵션과,
프로세스의 로드된 dll 목록을 확인하기 위한 dlllist 옵션을 사용하여 다시 추출한다.
volatility25 -f memory.raw --profile=Win7SP1x86 pstree > pstree.txt volatility25 -f memory.raw --profile=Win7SP1x86 dlllist > dlllist.txt |
마지막으로 procdump 옵션을 사용하여 프로세스의 이미지를 덤프할 것이다.
말 그대로 덤프를 뜬 메모리에 올라가 있는 프로세스를 그대로 가져오는 것이다.
해당 과정을 통해 동작하는 프로세스의 자료구조화 되어있는 버전정보 등을 추출하여 분석하는 것이다.
덤프 후에는 추출한 프로세스의 서명 확인 과정을 진행한다.
해당 과정에는 SysinternalsSuite 분석 도구의 기능 중 하나인 sigcheck라는 툴을 이용하는데, 프로그램 서명 정보를 조사하고 이를 csv 파일로 저장하도록 명령한다.
mkdir dumpdir volatility25 -f memory.raw --profile=Win7SP1x86 procdump -D dumpdir sigcheck64 -a -c .\dumpdir > sigcheck.csv |
정보를 전부 습득했으니, 이제 분석할 시간이다.
처음으로 분석을 시도할 곳은 dlllist 파일이다.
dlllist 파일은 단순히 프로세스와 관련된 dll 파일만을 적어두는 공간이 아니다.
해당 프로세스가 어떤 위치에서 실행되고 있는지, 어떤 pid 값을 가지고 있는지를 확인할 수 있다.
해당 파일에서 주목해야하는 부분은 바로 Command line으로, 해당 프로세스가 어떤 환경으로 실행되고 있는지 알려주는 정보다.
해당 정보를 가지고 분석하기 위해, grep 명령어를 사용하여 dlllist 파일에서 해당 정보를 전부 가져온다.
이 때, 원할한 분석을 위해 windows 폴더, programs files 폴더, systemroot를 제외한 위치의 정보를 가져오게 한다.
쉽게말해 정상적인 위치가 아닌 이상한 위치에 설치되어 실행된 프로세스를 정보를 출력하라는 것이다.
grep -i "command line" dlllist.txt | grep -v -i "c:\\windows" | grep -v -i "c:\\program files" | grep -v -i "systemroot" |
해당 프로그램의 4개는 윈도우의 기본 프로그램이다.
대상 프로그램들이 왜 이상한 경로로 실행되었는가하면, 상대 경로로 호출되기 때문이다.
환경 변수에서, 해당 프로그램들은 그냥 상대 경로로 호출할 수 있게 설정되어 있다.
마지막 파일은 메모리 덤프를 할 때 사용한 프로그램으로, usb에 담겨져 프로그램이 실행된 것을 확인할 수 있다.
즉, 해당 과정으로는 이상징후가 보이지 않았다. 다른 방법으로 분석을 시도해보자.
dlllist 파일에서 파라미터를 기준으로 한번 더 분석한다.
실행되어있는, 혹은 실행될 프로세스의 호출된 파라미터를 분석하여 비정상적으로 호출된 프로세스를 분석하는 것이다.
dlllist의 command line에서, svchost 프로세스의 파라미터를 분석해본다.
grep -i "command line" dlllist.txt | findstr svchost.exe |
해당 명령어를 통해 svchost의 파라미터 목록을 전부 확인했다.
통상적으로, -k 옵션을 통해 호출한 서비스가 실행되는 것이 일반적이며, 이 옵션이 존재하지 않을 시 악성코드일 가능성이 높다.
svchost 프로세스는 정상임을 알 수 있다.
이는 악용될 여지가 있는 powershell이나 python같은 스크립트 기반 실행 프로세스에도 적용할 수 있으며, 탐색 결과가 정상임을 확인할 수 있다.
grep -i "command line" dlllist.txt | findstr powershell.exe grep -i "command line" dlllist.txt | findstr python.exe |
종합적으로, 파라미터 관점에서 명령라인의 이상징후는 보이지 않았다.
다음으로는 프로세스의 부모-자식 관계를 분석해볼 것이다.
상기 획득한 pstree 파일을 열어본다.
cat pstree.txt |
부모-자식 프로세스 간에는 정해져있는 규칙이 존재한다.
정상적인 윈도우 환경에서 반드시 이루어져야하는 형태를 의미한다.
이를 확인하여 비정상적인 패턴을 확인하는 방법으로 분석을 진행한다.
먼저, svchost.exe 프로세스를 분석한다.
해당 프로세스는 반드시 sevices.exe 프로세스 하위로 속해있어야 한다.
만약, 부모 프로세스가 다르다면, 이를 의심해봐야한다.
확인 결과, svchost.exe 파일이 전부 동일한 부모 pid, 즉 services.exe 프로세스를 부모로 두고 있는 것을 확인할 수 있다.
또 하나 확인해야할 것은 LoL(Living Off the Land) 바이너리의 유무를 확인해야한다.
즉, dllhost.exe, powershell.exe, python.exe 같은 스크립트 실행 가능한 프로세스를 확인해보아야 한다는 것이다.
확인 결과, 결과가 나오지 않거나 부모로 services.exe를 두어 정상 범주에 든 결과만 출력되었다.
따라서, 부모-자식 관계에서는 이상징후가 보이지 않았다.
마지막으로, 서명정보 및 버전정보를 확인하는 방법으로 분석한다.
상기 덤프 뜬 프로세스들과, sigcheck.exe 툴을 사용하여 추출한 "sigchesck.csv"를 가지고 분석한다.
윈도우 프로그램은 헤더와 함께 여러 세션을 가지고 있다.
세션에도 여러 종류가 있는데, 그 중 해당 프로그램의 다양한 정보를 담고 있는 rsrc 세션이 존재한다.
해당 세션에는 설명, 제품 정보, 배포 버전, 파일 버전 등 [더보기]를 눌렀을 때 나오는 정보들이 존재하고 있다.
해커들은 보통 자동화 프로그램을 사용하여 악성 프로그램을 제작하기 때문에, 해당 정보들이 누락되어 있는 경우가 있다.
이런 특징을 기준으로 확인해본다.
해당 데이터에서 회사, 설명, 제작 프로그램 등의 정보가 N/A로 비어있는 프로그램이 몇몇 존재한다.
해당 정보를 바탕으로, 정보가 비어있는 프로세스는 1280, 2668, 2948, 3292, 512, 520으로, 해당 프로세스의 데이터를 분석해본다.
분석에는 awk 툴을 사용할 것으로, 특정 데이터 값을 기반으로 조건에 맞게 다른 데이터를 출력할 것이다.
awk "{if($3==1280 || $3==2668 || $3==2948 || $3==3292 || $3==512 || $3==520) print $2. $3}" pslist.txt |
그러면 pid 값에 따른 프로세스 이름이 나오게 된다.
즉, 버전 정보를 가지고 있지 않았거나, 자료구조가 문제가 생겼던 다양한 이유로 N/A로 표현된 파일이 해당 6개 파일이다.
메모리에 올라가면서 자료 구조가 변경되어 정보를 불러올 수 없었던 이유. 대부분 빌트인 프로세스가 이에 해당된다.
해당 프로세스는 어떤 역할을 하는 것인가?
- lsass.exe (512) :
Local Security Authority Service, 사용자나 그룹에 대한 로그인(인증), 패스워드 변경, 보안 로그 증적에 사용한다.
빌트인 프로세스 - lsm.exe (520) :
Local Security Manager Service, 시스템의 로그인 세션 연결(로컬, 원격)을 관리하는 프로세스.
빌트인 프로세스 - spoolsv.exe (2668) :
프린터 스풀러 서비스
빌트인 프로세스 - SearchIndexer (2948) :
파일 검색, 인덱싱 등의 서비스를 관리하는 책임지는 프로세스.
빌트인 프로세스 - DumpIt.exe (3292) :
메모리 덤프에 사용한 프로세스. - svcnet.exe (2668) :
빌드인 프로세스가 아님.
버전 정보도 없는 의심할만한 프로세스.
따라서, 2668 pid 값을 가진 svcnet.exe라는 프로세스가 의심된다고 탐지되었다.
'KISA 사이버 보안 훈련 > 멀웨어 식별' 카테고리의 다른 글
프로세스 이상징후 분석 (시나리오 3) (0) | 2024.07.22 |
---|---|
프로세스 이상징후 분석 (시나리오 2) (0) | 2024.07.22 |
윈도우 단말의 악성코드 유입 경로와 이상징후 식별 개요 (0) | 2023.06.03 |
윈도우 아티팩트 수집(실습) (0) | 2023.06.03 |
윈도우 아티팩트 수집(이론) (0) | 2023.06.03 |