의심스러운 프로세스의 이상징후 분석 방법
1. 경로 및 이름 분석
- 일반적이지 않은 경로와 이름을 사용하여 실행되는 프로세스가 존재하는가?
2. 리니지 분석 (=프로세스 혈통 분석)
- 프로세스 부모자식 관계가 일반적이지 않은가?
3. 프로세스의 명령라인 파라미터 분석
- 파라미터가 지정되어 있어야 하는데 없는 경우?
- 파라미터의 길이가 비정상적으로 긴 경우?
4. 프로세스 이미지의 버전정보 분석
- 리소스 섹션의 "version info" 리소스 정보가 존재하는지? (오리지널 이름, 벤더, 버전, 프로덕트 이름 등의 정보가 존재)
프로세스의 이상징후 분석을 위한 정보 추출
1) 메모리 덤프 프로필 정보 확인
2) 프로세스 목록 추출
3) 프로세스 트리 정보 추출
4) 로드된 DLL 몰골 및 경로 정보 추출
5) 프로세스 이미지 덤프 및 버전 정보 추출
분석 전반적인 과정 요약
Acquisition -> Extraction -> InterPretation
Acquisition
Process info, Memory Dump, Registry hive, Event Log, Prefetch ...수집
Extraction
binary raw data에서 읽을 수 있는 데이터로 추출
Interpretation
악성 실팽파일이 무엇인지?
감염된 코드는 무엇인지?
1. Extraction
아래는 자동 아티팩트 수집 툴을 이용해 추출한 포렌식 이미지 덤프 파일들이다.
1) Profile 정보 확인
-f : 이미지 지정 옵션
imageinfo : 이미지 파일에서 프로필 정보를 확인하는 지시 옵션
현재 덤프 이미지는 1기가이므로 빠르게 결과가 나왔다
프로필은 Win7SP0x86로 확인 된다.
2) Process List 추출
이제 --profile 옵션을 주어 프로필을 지정하고 해당 메모리 덤프의 프로세스 리스트들을 pslist.txt에 따로 추출해보자.
프로세스들의 생성시간과 PID, PPID 등의 정보들을 확인할 수 있다.
User단에 실행되고있는 프로세스마다 각각의 _EPROCESS라는 자료구조가 생성되며, _EPROCESS마다 해당 프로세스의 PID,PPID,time 등의 많은 정보를 담고있다. Volatility의 pslist는 커널단의 _EPROCESS들을 분석해 출력해주는 옵션이다.
각 _EPROCESS는 포인터를 사용해 링크드리스트로 연결된다.
3) Process 혈통 추출
프로세스의 부모자식 관계 출력할 수 있다.
4) DLL 목록 추출
dlllist를 통해 프로세스에 등록된 DLL list들을 추출
실행파일은 여러 DLL 목록들을 가져오는데 이 옵션을 통해서 DLL 목록 뿐만 아니라 실행 파일의 커맨드라인정보와 파라미터 정보가 있다.
하나의 실행 파일 프로세스 안에는 수십개의 DLL이 로딩이 되어있을 탠데, 그것들은 모두 자료구조를 추적하는 것이다.
dlllist 명령어는 _EPROCESS 안에 있는 DLL 목록들을 추출하는 것이다.
하여 이것으로 프로세스를 다각적으로 분석할 수 있다.
5) 실행파일 덤프
procdump는 실행파일을 추출하는.
메모리 덤프 안에는 결국엔 프로세스 실행파일이 올라가있을탠데, 이 실행파일을 덤프하는 것이다.
이 안에 버전이나 자료구조들을 추출해서 분석해낼 수 있다. 혹은 문자열을 추출해 문자열 분석을 통해서 악성코드를 인식할 수 있다.
dump될 이미지파일들이 존재할 덤프 폴더를 지정한다. 우선 dumpdir 폴더를 만들고 아래 명령어를 실행한다.
6) 실행파일 버전정보 덤프
SysInternalSuite의 sigcheck 툴을 사용해서 실행파일들을 덤프 할 수 있다.
-a 옵션은 버전정보, 인증서 정보 등등의 모든 정보들을 추출하겠다는 것이다.
-c 는 csv 포멧으로 추출
명령어 : sigcheck64 -a -c .\dumpdir > sigcheck.scv
그러면 sigcheck 안에는 여러가지 실행파일들의 버전 정보들이 추출된다.
2. 이상징후 분석
1) 실행 경로 분석
대부분의 사용자 프로세스는 아래의 세가지 경로에서 실행된다.
C:\windows
C:\program files 혹은 C:\program files(x86)
그래서 이 보통의 실행 경로를 제외한 곳에서 실행한 흔적을 찾기 위해 해당 명령어 필터를 사용한다.
systemroot는 Windows의 홈디렉터리 경로이다.
경로가 지정되어있지 않은 커맨드라인은 C:\Windows\System32 안에 들어가있어 PATH가 설정되어 있기 때문에 절대경로를 안해도 실행이 되는 것이다. 그래서 해당 커맨드라인들은 정상이라고 볼 수 있다.
또, 마지막의 DumpIt은 그동안 덤프를 뜨기위해 실행됐던 프로세스이기 때문에 정상 프로그램이다.
즉 해당 메모리 덤프 분석 결과 커맨드라인에서는 이상징후가 보이지 않았다.
2) 실행 파라미터 분석
svchost.exe라는 실행파일은 반드시 서비스를 책임지고있어야 하며, -k 옵션을 사용해서 서비스를 지정하게 된다.
그래서 -k 옵션이 없다면 악성프로세스일 가능성이 높다.
svchost만 따로 추출을 해봤을 때 악성프로세스는 보이지 않았다.
3) 혈통 분석
svchost.exe는 무조건 services.exe의 자식 프로세스여야 한다.
pslist에서 svchost만 따로 추출해봤을 때 PPID의 값이 504로 동일한 것을 볼 수 있다.
즉, 모든 svchost.exe의 부모 프로세스 아이디는 504인 services.exe인 것이다.
그래서 분석결과 svchost.exe에서는 악성 프로세스가 보이지 않았다.
4) LoLBins 분석
LoLBins (Living off the Land Binaries)는 공격자에게 악용될 수 있는 윈도우 빌트인 라이브러리다.
악성 프로그램을 실행시키기위해 주입시킬 때 탐지가 되는 것을 피하기 위해 윈도우에 기본으로 빌트인되어있는 정상적인 라이브러리를 사용하여 악성행위를 하기위한 공격이다.
대표적으로 dllhost.exe, python.exe .. 등이 있는데, 해당 빌트인 실행 프로세스의 부모가 504로 정상적인 부모 프로세스가 아니라면 악성 프로세스로 의심할 수 있다. 하지만 현재 LoLBins 분석으로는 정상으로 보인다.
5) 버전정보 누락 프로세스 분석
이전에 SysinternalSuite의 Sigcheck 툴을 사용해 메모리에서 덤프된 실행파일들의 버전 정보를 추출했었다.
Windows의 실행파일에는 헤더를 제외한 여러 섹션이 존재하는데 이 섹션들은 모두 비슷한 정보를 가지고 있다.
.rsrc 섹션에 여러 리소스들이 있고, 이 리소스들에는 실행파일의 아이콘 이미지, 인증서 등등의 정보가 있다.
특히 리소스 중 version info 라는 리소스에는 실행파일의 설명, 제품 버전, 파일 버전 등의 정보들이 담겨있는데,
공격자가 악성코드를 생성할 때 해당 버전 정보들을 누락하는 경우가 종종 있기 때문에 이 논리를 가지고 이 부분을 분석해보면 된다.
참고로 이 부분은 실행파일 우클릭 후 자세히 보기 탭에 보면 나오는 정보들이다.
그래서 sigcheck로 실행파일들의 버전 정보들 중에서 이 섹션에 정보들이 누락된 것들을 추출해봤다.
sigcheck로 추출한 버전 정보들 중에서 n/a로 null값이 들어간 파일들을 볼 수 있다. 이것은 즉 파일의 버전과 벤더 정보들이 누락됐다는 것이다.
여기서 버전 정보가 누락된 실행파일들의 PID를 모두 나열해보면, 2668, 2948, 2392, 512, 520 이다.
이것들을 pslist.txt에서 필터링해보자.
awk를 통해서 해당 프로세스를 필터링했다.
pslist.txt에서 3번째 열이 PID값이고, 2번째 열은 프로세스 이름이므로 3번째열의 PID값이 특정 PID값들과 부합하다면 2,3 열을 출력하도록 필터링했다.
해당 프로세스들의 개념들을 이해해보자.
lsass.exe - PID 512 (built-in Process)
Local Security Authority Service
사용자나 그룹에 대한 로그인(인증) 패스워드 변경, 보안로그 증적 등을 총괄
로그인 할 때 이것들을 책임지고 통제하는 프로세스다.
lsm.exe - PID 520 (built-in Process)
Local Session Manager Service.
로그인 했을 때 유지되는 세션들을 관리하는 프로세스
spoolsv.exe - PID 1280 (built-in Process)
프린트와 관련된 프린터 스풀러 서비스를 관리하는 프로세스
SearchIndexer.exe - PID 2948 (build-in Process)
파일 검색, 인덱싱 등의 서비스를 책임짐
DumpIt.exe - PID 3292
메모리 덤프 용도로 사용됨
svcnet.exe - PID 2668
빌트인 프로세스가 아니며 버전 정보가 없기 때문에 충분히 의심할 만한 프로세스다.
모두 정상적인 프로그램인데 왜 모두 버전 정보가 누락되어있을까?
실행파일은 메모리에 올라갈 때 구조가 변형되는데 sigcheck로 덤프 떴던 실행파일들은 메모리에 올라가기 전의 실행파일 이미지를 덤프 뜬 것이기 때문에 그 정보를 null값으로 유지 시켜둔것이다.
결론
리니지 분석, 버전정보 분석을 통해 악성 프로세스라고 유추되는 것은 svcnet.exe 2668 이다.
'침해사고분석' 카테고리의 다른 글
악성 프로세스 행위 분석 (2) | 2023.11.26 |
---|---|
MFT 파일시스템 분석 (0) | 2023.11.26 |
침해사고분석 - 0x4 CTF 예제를 통한 이상징후 분석하기 (4) | 2023.11.24 |
침해사고분석 - 0x3 피해시스템 분석 최종정리 (4) | 2023.11.24 |
침해사고분석 - 0x2 침투경로 추적 (2) | 2023.11.24 |
IT/보안