일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- Suninatas
- logstash
- 인시큐어뱅크
- Reflected XSS
- igoat
- MFT
- beebox
- lord of sql injection
- kibana
- ctf
- InsecureBank
- otter
- frida
- XSS
- ESXi
- Strings
- elasticsearch
- diva
- SQL Injection
- 2018
- Docker
- base64
- foremost
- Volatility
- CTF-d
- Openstack
- 파이썬
- NTFS
- 안드로이드
- vulnhub
- Today
- Total
Information Security
Stuxnet 분석 본문
Stuxnet
- 2008년 발견
- 이란 등 국가의 가스 파이프라인이나 발전소 같은 특정 산업 제어 시스템 위협
- 그들이 원하는 의도를 수행하게끔 PLC(Prgramming Logic Contoller)를 재구성함으로써 기능을 방해
Stuxnet 특징
- 네트워크 쉐어를 통하여 원격 컴퓨터로 복사 및 실행
- LAN 구간을 통하여 업데이트
- MS 취약점을 통한 권한 상승
- 윈도우 루트킷 포함
- 보안 제품 우회 시도
- PLC 조작
① configuration data의 유효성을 검사한다.
② 다음 레지스트리 키의 NTVDM TRACE 값을 검사한다.
HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ MS-DOS Emulation. 이 값은 감염 여부를 기록하는 값으로 값이
19790509이면 감염된 시스템을 의미한다. 1979년 5월 9일을 의미하며, 관련 내용은 다음 주소를 참고하기 바란다.
http://en.wikipedia.org/wiki/Habib_Elghanian
③ configuration data의 날짜를 검사한다.
④ global mutex를 생성한다.
⑤ stuxnet의 .stub 섹션으로부터 아래와 같이 암호화된 파일을 생성한다.
1) main stuxnet payload .dll 파일을 Oem7a.PNF로 저장
2) %SystemDrive%\inf\mdmeric3.PNF
3) %SystemDrive%\inf\mdmcpq3.PNF(configuration data)
4) %SystemDrive%\inf\oem6C.PNF(log file)
⑥ 현재 날짜가 2012년 6월 24일 이전인지 검사. 또한 최신 버전 여부 검사
⑦ 201, 241 resource를 디스크에 Mrxnet.sys, Mrxcls.sys로 저장하며, 각각 Load Point와 Rootkit으로 동작한다.
⑧ .dll 파일을 services.exe에 injection 후 export 32를 호출하여 연결되는 이동식 디스크 감염과 RPC Server를 시작한다.
⑨ Step 7 project 감염을 위해 .dll 파일을 Step 7 프로세스(S7tgtopx.exe)에 injection 후 2번 export 함수를 호출
imageinfo를 통해 WinXPSP2x86 서비스 팩 하고 2011-06-03 04:31:36 날짜 생성된 것을 알 수 있다.
pstree를 통해 프로세스를 확인했다.
lsass.exe 인증에 관련된 프로세스라 의심스럽다. Winlogo.exe 밑에 service.exe와 lsass.exe 동등하게 실행되는 게 정상적인 프로세스지만 하위에서 실행되는 것을 알 수 있다.
psxview 다른 프로세스 플러그인을 확인했다.
수상한 프로세스는 없지만 Procmon.exe는 악성코드 분석가가 사용하는 도구를 확인할 수 있다.
외부 네트워크와 연결되었는지 확인을 위해 connections, connscan을 사용했지만 연결된 네트워크는 없는 것을 알 수 있다.
PID 1928,868,680의 메모리 덤프를 만들었다.
dlllist를 정상적인 프로세스를 확인했다.
PID 1928 비정상적인 프로세스는 KERNER32.DLL를 확인할 수 있다.
malfind를 통해 데이터를 찾았다.
PAGE에 대한 EXECUTE권한과 READWRITE 권한을 가지고 있다.
문자열 ZwMapViewOfSection 네이티브 함수의 미러링 함수를 확인할 수 있다. 윈도우 제공하지 않는 함수는 위치를 복제한 것처럼 보면 된다.
악성으로 추측되는 파일인 것 같다.
0x80000, 0x1000000, 0x870000 주소의 vadinfo를 보면 파일 핸들이 조회되지 않아 보통 파일에서 핸들을 가져온다. 없는 것으로 보아 정상적으로 호출이 된 DLL 파일이 아닌 것 같다.
ldrmodules를 보면 VirtualAlloc과 WriteProcessMemory로 주입된 듯 보이는 메모리를 확인할 수 있다.
원본 lsass.exe 파일이 올라오는 메모리 경로를 확인할 수 없어 수상한 것 같다.
v옵션을 통해 경로를 확인했다.
정상적인 프로세스 같지 않는 것을 알 수 있다.
유령 프로세스
- 정상적인 프로세스를 시스템에 로드하는 몇 멀웨어가 사용하는 기술
- 적대감 있는 코드를 포함시켜 동작
- 정상적인 코드는 악의적인 코드에 의해서 교체되어 실행되지 않음
- 정상적인 프로세스들처럼 이 프로세스가 숨도록 도움
- 정상적인 프로세스처럼 정상적인 API 등을 임포트
- PEB는 훼손시키지 않지만 프로세스 내의 실제 코드와 데이터는 바뀌어 실행
두 개 주소에 대해 메모리 덤프를 만들었다.
apihooks를 해보면 NT Syscall Hooktype이고 네이티브 후킹을 하고 있고 Vicitim과 Hooking ntdll.dll, ntdll.dll인 것으로 보아 자기 자신을 후킹 하는 것을 보아 변조된 것을 알 수 있다.
Function 함수만 보면 네이티브 함수에 관련된 미러링 함수를 확인할 수 있다.
volshell를 통해 후킹 된 코드를 보면 0x7c90050은 변조된 코드이고 0x7ffe0300은 코드 섹션을 호출하는 것으로 보아 정상적인 코드인 것을 알 수 있다.
해당 파일의 메모리 덤프를 만들었다.
HookedSSDT를 통해 커널 다이브를 보면 PROCMON인 것을 알 수 있다. 프로세스 모니터링하기 때문에 조회되는 것 같다.
callbacks를 보면 너무 많은 정보를 확인할 수 있다. 의심스러운 것은 구글 통해 어떤 모듈인지 알 수 있다.
mrxnet.sys 모듈을 검색하면 stuxnet 관련된 모듈인 것을 알 수 있다.
modules 플러그인을 통해 mrx base address 알 수 있다.
Base Address의 메모리 덤프를 만들었다.
devicetree를 통해 드라이브와 객체의 관계 및 연결된 장치를 확인했다.
FILE_DEVICE에 MRxNet에 많은 관여된 것을 볼 수 있다.
Ntfs FILE_DEVICE에 많은 관여된 것을 볼 수 있다.
print key를 통해 레지스트리 정보를 보면 mrxney.sys 위치를 알 수 있다.
mftparser를 통해 프로세스 위치와 시간을 알 수 있고 filescan을 통해 mrx 종류에 대해 알 수 있다.
userassist를 통해 프로그램 목록을 확인할 수 있다.
'포렌식 > 리눅스 포렌식' 카테고리의 다른 글
Volatility BlackEnergy 분석 (0) | 2020.12.28 |
---|---|
백도어 시나리오 (0) | 2020.12.25 |
DC3 Challange (0) | 2020.12.24 |
Volatility (0) | 2020.12.23 |