작은 메모장
프로세스 이상징후 분석 (시나리오 3) 본문
동일하게 KISA GYM으로부터 제공받아 실습을 진행하였다.
이전 시나리오와 동일하게, imageInfo를 추출한 후, pslist와 pstree, dlllist, 그리고 procdump로 프로세스 이미지를 덤프 뜬다.
정보를 전부 습득했으니, 이제 분석을 시작한다.
처음으로 분석을 시도할 곳은 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개로, 상단의 3개는 윈도우의 기본 빌트인 프로그램, 가장 하단의 프로그램은 메모리 덤프를 할 때 사용한 프로그램이다.
경로 정보에서는 별다른 이상징후가 보이지 않았다.
두 번째로, dlllist 파일에서 파라미터를 기준으로 한번 더 분석한다.
실행되어있는, 혹은 실행될 프로세스의 호출된 파라미터를 분석하여 비정상적으로 호출된 프로세스를 분석하는 것이다.
dlllist의 command line에서, svchost 프로세스의 파라미터를 분석해본다.
grep -i "command line" dlllist.txt | findstr svchost.exe |
해당 명령어를 통해 svchost의 파라미터 목록을 전부 확인했다.
통상적으로, -k 옵션을 통해 호출한 서비스가 실행되는 것이 일반적이며, 이 옵션이 존재하지 않을 시 악성코드일 가능성이 높다.
svchost 프로세스는 정상임을 알 수 있다.
powershell이나 python같은 스크립트 기반 실행 프로세스에도 적용할 수 있으며, 탐색 결과가 정상임을 확인할 수 있다.
종합적으로, 파라미터 관점에서 명령라인의 이상징후는 보이지 않았다.
다음으로는 프로세스의 부모-자식 관계를 분석해볼 것이다.
해당 분석에는 상기 추출하였던 pstree.txt 파일을 분석한다.
해당 파일의 가장 아래쪽을 살펴보면, calc.exe라는 프로세스가 실행되고 있는 것을 확인할 수 있다.
통상적으로, calc.exe 프로세스는 explorer.exe 혹은 svchost.exe 프로세스의 자식 프로세스 형태로 동작한다.
그러나, 이 calc.exe 프로세스는 PPID 값이 4020이며, 해당 프로세스는 메모링 덤프 당시 존재하지 않았다.
즉, calc.exe의 부모 프로세스는 덤프 당시 종료된 상태며, 독립적인 프로세스로 동작하고 있음을 확인할 수 있다.
이는 일반적인 calc.exe, 즉 계산기 프로그램이 실행되는 형태가 아니며, 해당 프로세스가 의심된다고 이야기할 수 있다.
다음으로, svchost.exe 프로세스의 부모-자식 관계를 확인해본다.
확인 결과, svchost.exe 파일이 전부 동일한 부모 pid, 즉 services.exe 프로세스를 부모로 두고 있는 것을 확인할 수 있다.
추가적으로, LoL(Living Off the Land) 바이너리의 유무를 확인한다.
powershell과 python의 경우, 부모 프로세스를 아무것도 가지고 있지 않은 것을 확인할 수 있다.
dllhost.exe의 부모 프로세스를 보면, pid가 508인 services.exe를 가지고 있지만, 추가적으로 pid가 636인 svchost 프로세스를 부모 프로세스로 추가로 들고 있는 것을 볼 수 있다.
dllhost.exe는 dll 파일을 제공하기 위한 호스팅 서비스를 운영하는 프로세스로, 어떤 프로그램이 실행될 때 svchost 혹은 services를 통해 간접적으로 실행한다.
따라서, 정상적이라면 svchost, services의 프로세스 pid가 부모인 dllhost.exe는 정상임을 확인할 수 있다.
종합적으로, 부모-자식 관계에서는 PID값이 4084인 calc.exe 프로세스가 의심되었다.
마지막으로, 서명정보 및 버전정보를 확인한다.
해당 정보를 바탕으로, 정보가 비어있는 프로세스는 276, 3232, 488, 956으로, 해당 프로세스의 데이터를 분석해본다.
분석에는 awk 툴을 사용할 것으로, 특정 데이터 값을 기반으로 조건에 맞게 다른 데이터를 출력할 것이다.
awk "{if($3==276 || $3==3232 || $3==488 || $3==956) print $2. $3}" pslist.txt |
이러면 버전 정보를 가지고 있지 않은 다양한 프로세스가 출력된다.
각각의 프로세스를 알아보면, 다음과 같다.
- smss.exe (272) :
Session Manager Process, 기본적으로 마스터 smss.exe 프로세스가 존재하며 세션 생성 후 해당 세션을 위한 smss.exe를 추가로 생성하는 프로세스. 생성된 smss.exe는 csrss.exe, wininit.exe, winlogon.exe등의 핵심 프로세스들을 생성하고 종료. 같은 smss.exe에 의해 생성된 프로세스는 PPID가 전부 동일.
빌트인 프로세스 - SearchIndexer (3132) :
파일 검색, 인덱싱 등의 서비스를 관리하는 책임지는 프로세스
빌트인 프로세스 - slui.exe (956) :
Software Licensing User Interface, 사용자 라이선스 입력과 관련된 UI를 제공하는 프로세스
빌트인 프로세스 - DumpIt.exe (3292) :
메모리 덤프에 사용한 프로세스
따라서, 서명정보 및 버전정보로 의심되는 프로세스는 없다.
결론적으로, 프로세스 부모-자식 관계가 일반적이지 않던 calc.exe 프로세스의 추가 조사가 필요하다.
'KISA 사이버 보안 훈련 > 멀웨어 식별' 카테고리의 다른 글
악성 오피스 문서 식별 (0) | 2024.07.23 |
---|---|
악성 문서파일의 구성요소와 포맷 (0) | 2024.07.22 |
프로세스 이상징후 분석 (시나리오 2) (0) | 2024.07.22 |
프로세스 이상징후 분석 (시나리오 1) (0) | 2024.07.21 |
윈도우 단말의 악성코드 유입 경로와 이상징후 식별 개요 (0) | 2023.06.03 |