악성코드 분석

맬웨어 식별 훈련 :: 정보추출 이후 프로세스 이상징후 분석 실습

이둥둥 2025. 2. 12. 15:14

이전 실습 요약: 
이전 실습에서는 침해사고 발생한 아티팩트, 메모리 덤프파일(memory.raw)을 수집했음. 

여기서 프로세스 관련 정보들(ex 생성시간, 종료시간, PID, DLL 등)을 추출했음 

 

→ 이번 실습에서는 추출내용을 분석하겠음


1. dlllist.txt 분석하기

 

: 메모리의 로드된 실행파일 자체와 dll 파일의 경로정보

 

파일 내용 중 command line 을 추출하면 실행파일 경로, 파라미터 정보를 추출할 수 있음

-i: 대소문자 구분 X

-v: 문자열 제외

 

대부분의 일반적 프로세스 경로는 

C:\Windows

C:\Programs Files

C:\Programs Files (x86)

에서 실행되므로 이외의 경로를 찾으면 된다

 

E:~W) grep -i "command line" dlllist.txt | grep -v -i "c:\*windows" | grep -v -i "c:\*program files" | grep -v -i "systemroot"
=> 일반적이지 않은 경로 정보에 대해서만 출력

 

 

grep -i “command line” dlllist.txt → dlllist.txt 파일에서 해당 문자열 찾기

grep -v -i ‘’c:\\windows”~ → 일반적인 경로 3개를 제외한 이상 정보만 찾아내기

 

 

2. svchost.exe 파라미터 유무 분석하기

 

svchost.exe는 -k 옵션과 함께 파라미터가 꼭 있어야 하기 때문에

-k 옵션이 없다면 악성코드일 확률이 있는 이상징후이다

 

grep -i "command line" dlllist.txt

 

 

이 중에서 svchost.exe만 나오도록 더 추려보자

 

grep -i "command line" dlllist.txt | findstr svchost.exe

 

여기서는 svchost.exe 에서 이상징후가 발견되지 않는다

 

3. pstree.txt 분석하기

 

cat pstree.txt

 

 

여기서 . 개수는 부모자식 관계를 알 수 있는데 ...은 ..의 하위프로세스이다

 

 

.services.exe가 부모 프로세스 / .. svchost.exe는 자식 프로세스

좀 더 편하게 보기위해 pslist를 대신 사용하고 svchost.exe만 필터링해보자

 

cat pslist.txt | findstr svchost.exe

 

svchost.exe들의 PPID가 모두 504이다

이제 부모 프로세스인 services.exe의 PID를 확인해 보자

 

cat pslist.txt | findstr service.exe

 

services.exe의 PID 역시 504 이므로 여기도 이상징후 없음!

 

 


 

 

 

LOL Binary(Living off the Land Binaries)란?

악성코드 공격 실행을 위해서 os에 미리 설치된 파일, 도구들을 활용하는 ms 실행파일

cat pslist.txt | findstr dllhost.exe

 

→ dllhost.exe 역시 PPID가 504로 확인됨

→프로세스 부모자식 관계 측면에서는 이상징후 X

 

 

4. sigcheck.csv 분석하기

 

MS 실행파일 내부에는 헤더, 섹션들이 있는데 그 중 .rsrc 섹션에는 

아이콘, 인증서, 리소스(version info)처럼 실행파일 우클릭해서

속성보기/자세히 탭을 보면 나오는 내용들임

→ 악성코드 제작자들이 제너레이터(생성기)를 사용할 때 누락하기 쉬운 내용

 

이전 실습에서 추출한 sigcheck.csv 파일을 분석해 보겠음

 

 

n/a가 있는 항목들은 의심해 볼 만하므로 n/a가 있는 PID넘버를 넣어서 추출해 보자

executable.PID숫자.exe 이런 형식임( executable.512.exe → PID가 512 )

 

4-1. awk 명령어 사용해서 추출

 

awk: 선택된 레코드에 포함된 값을 조작 및 데이터화

awk "if($3==1280|| $3==2668||$3==3292||$3==512||$3==520) print $2, $3" pslist.txt

 

 

  • $2: name 프로세스 이름
  • $3: 프로세스 PID

실행하면 결과가 이렇게 나온다

 

lsass.exe 512
lsm.exe 520
spoolsv.exe 1280
svcnet.exe 2668
SearchIndexer.2948
DumpIt.exe 3292

 

각 프로세스에 대해 알아보면

lsass.exe  Local Security Authority Service의 줄임말로, 사용자나 그룹에 대한 로그인(인증), 패스워드 변경, 보안 로그를 작성합니다.
lsm.exe Local Session Manager Service의 줄임말로, 시스템의 로그인 세션 연결을 관리합니다.
spoolsv.exe 프린터 스풀러 서비스
SearchIndexer 파일 검색 및 인덱싱 서비스
DumpIt 메모리 덤프 용도

 

모두 윈도우 빌트인 프로세스 들인데 서명값이 n/a인 이유는

메모리에 올라가면서 자료구조가 바뀌어서 그렇다

 

 

반면에 svcnet.exe의 경우 윈도우의 빌트인 프로세스가 아닌데

부모 프로세스가 explorer.exe이고 파일 버전 등의 정보도 없다

→ 악성프로세스일 가능성 있다!