프로세스 분석을 하는 이유 : 라이브 포렌식에서 증거 수집의 대부분이 “메모리”에 올라가있음
→ 메모리를 덤프(dump)받기
메모리에 올라간 정보 중 프로세스 정보
”모든 프로그램” : 메모리에 올라가는 순간부터 → “프로세스”가 됨
ex) 실행 중인 프로세스 정보 == 아래 한글, 웹메일, 엣지 등
범죄자가 이 컴퓨터를 통해 “어떤 걸 실행했는지?” 알 수 있음
→ (메모리에 올라가있는) 프로세스의 정보 및 목록 보기
(1) “어떤 프로세스(Process)”를 “언제 or 어떤 경로”로 접속해서
(2) 메모리에 올라가 실행해서
(3) 내 컴퓨터를 뭘 실행시켰는지 등을 알아야만
(4) 보고서를 만들고 법정에 제출 가능해짐
(악성 프로그램이 만든) Process
→ (1) 정상적인 Process의 이름 그대로 모방하는 경우 대부분 or (2) 살짝 바꾸는 경우 존재
Service : 원래, (앱 Process를 실행하기 위해서) 보조적으로 실행해야 하는 Window Process
= **운영체제(OS)가 실행시키기 때문에, OS의 커널 프로세스**
Window Process : 특정 어플리케이션을 돌아가게 하기 위해 알아서 작동시키는 환경
→ 시계, 날짜, 네트워크 연결 등
| service | 프로세스에 해당 = 일종의 Process | | --- | --- | | svchost | 프로세스 해당 가능할 수도 or 불가능할 수도 | | handle | Resource ID - Resource마다 고유 ID 존재 마이크를 키기 위해, 디바이스의 이름을 부르는 것이 아닌, **“고유한 Res ID”**를 부름 |
| service.exe | 시스템 프로그램 관리 제어 (위주의 역할) → 여러 Component 제어 및 관리 | | --- | --- | | svchost.exe | 서비스 실행 환경 (위주의 역할) |
“Window” & “Process” - “PID”만 구별할 뿐, Process 이름으로 구별하지 않음
⇒ 여러 프로세스 중 의심이 가는 것 찾으려면, ‘프로세스 이름’ 이외에도 + ‘다른 정보’ 추가해야 함
→ 여러 도구 or 명령어 사용하기
Svchost.exe
<aside>
모든 Service : “DLL(다이나믹 링크 라이브러리) 형태”로 구성되어 있음
(1) 여러 라이브러리(Library)를 합쳐서 컴파일하면, Size가 커져서 문제 발생
= (일부분이 아닌) 전체 Code에 대해 다시 컴파일을 해야 함
→ 컴파일한 버전을 불러다가 or 그 자리에서 사용 가능해짐 = (일부) 대상만 수정하면 됨
= Main 코드가 아닌 **다른 곳**에 존재
= Main 어플리케이션에서 사용할 **보조적인 Process**
→ Active X, .com, EJB : Component 혹은 Container로 패키징해놓은 것
</aside>
= (동시에 실행되는) 다수의 Process 가짐
= DLL(일부 대상만 수정하는 형식)에 대한 Container 제공
explorer.exe (나를 만들었던 부모(userinit)가 사라지면, 고아 프로세스)
<aside>
: Window 상에서, “폴더” 및 “파일”을 찾고, 관리하는 일
→ ”system32 폴더”에 위치 안 함
App을 더블 클릭해서 실행시킬 때, explorer.exe 존재해야 실행 가능
= 윈도우 탐색기를 통한 파일 및 폴더 → 접근 제어
→ 없으면, Window 상에서 파일 및 폴더 못 찾음
(1) 윈도우 탐색기(= 파일 탐색기**) 생성 & (2) User와의 상호작용 처리 담당**
</aside>
Session : (작업의) 시작부터 끝까지 의미
<aside>
DOS 명령창 (cmd.exe) : Window에게 어떤 프로그램을 실행시키라고 명령하는 용도
Service 프로그램 : (내가 아닌) OS 자체에서 알아서 실행시키는 용도
⇒ SO, Dos 명령창을 통해 실행된다면, 누가 원격으로 심어놓은 것이므로 의심할 것!
</aside>
⇒ 대부분 system32 폴더에서 실행되어야 함
부팅 시, “smss.exe” & “Winlogon.exe(로그인 화면)”가 가장 먼저 실행되어야 함
system.exe & csrss.exe & wininit.exe & winlogon.exe & explorer.exe & app
: (Tree 상에서) 하나의 Level(같은 레벨)로 보여짐
service.exe & lsass.exe & wininit.exe(처음 부팅 시, 초기화)
: 오직, 한 개의 프로세스만 갖기
smss.exe & userinit.exe
: 존재하다가, 자기 역할 수행 후 사라지는 프로세스
csrss.exe & lsass.exe
: 자식 프로세스 필요없음
<aside>
- 부모 프로세스가 누구인지?
- 다음 중 instance가 여러 개 or 한 개만 존재해야 하는 것은?
- 이 Process가 어느 폴더에 존재해야 하는지?
</aside>
→ 이것을 수행한 후, 돋보기 창에 “명령 프롬프트”를 입력하기
→ 오른쪽 버튼 클릭하여, “관리자 권한으로 실행”시키기
procexp
각각의 Process마다 → CPU 사용량 & 메모리 크기 & Process ID & 어떤 프로세스인지 등 설명 존재
- 공신력 있는 회사에서는 Description 줌
sysinternals proc explorer에서 오른쪽 마우스 버튼을 클릭해서
→ dump, kill, virustotal 등의 메뉴 사용해보기
**의심스러운 Process**를 **dump, kill, virustotal 후 확인 가능**
공격자의 주요 먹잇감 : svchost.exe
(procexp에 없는) Image Path : 실행 파일이 어느 폴더에 들어가 있는지 확인 가능
→ 대부분 system32 폴더에 존재 (explorer.exe 제외)
<aside>
procmon : 프로세스 & 쓰레드 정보, 프로세스 Tree 정보
procexp : (사용 중인 파일 / 쓰레드를 포함한) 상세한 프로세스 정보
autoruns : 컴퓨터를 키면, 자동으로 실행되는 프로세스
→ explorer.exe에서 실행되어야 하는데, Dos 명령창에서 실행된다면 의심하기 (외부에서 원격 접속한 것일 수도 있음)
listdlls : 실행 중인 Process의 기본 정보 = 모든 Process와 관련된 list
pslist : 명령창에서 볼 수 있는 간략한 정보
psloggedon : 현재, 로그온하고 있는 사용자 정보
→ 모든 행위들이 log 형태로 남기 때문에, 출력하라는 의미
psloglist : Windows의 이벤트 로그 정보 → 흔적으로 남음
psinfo : 컴퓨터에서 깔린 Windows system 기본 정보
psservice : Windows 서비스 프로세스 정보
sigcheck -a : 시그너쳐 정보 check
tcpview : 네트워크 정보 - 누가가 IP 주소로 어떤 Port를 타고 어떤 일들을 하고 있는지 Data 얻기 가능 ⇒ 프로세스 이름까지 나와있어 Netstat보다 편함
ntfsinfo c : (C 드라이브의) NTFS 정보
ipconfig / all : (IP주소와 Mapping이 된) MAC주소
- ping : 컴퓨터가 살아있는지 (생존 여부) 신호를 날려 응답 체크
- tracert : 가는 길을 router(라우터)가 정해줌 == 경로 추적
- → **여러 경로 거쳐서 나한테 옴**
</aside>
→ 정보들 찾기 위해 명령어 사용한 것
모든 행동이 Window 상에서 “흔적”으로 남음 → 흔적 못 없앰
→ 이러한 정보들을 “보고서”에 넣기 때문에, 중요
레지스트리 : 윈도우(Window) 상에서 → 모든 시스템 정보들을 저장해두는 데이터베이스
→ 데이터베이스(DB) 또한 저장되어 있는 것 확인 가능
<aside>
- 부모 - 자식 프로세스의 관계 → 탐색
- instance의 수 (한 개 or 여러 개)?
- (공신력있는 회사에서 만든) description 보기 (+ 컴파일)
</aside>
프리페치 파일 : 모든 실행파일 모음집
Console(콘솔)을 통해 → (접속한 사용자 이외에) 원격에서 접속한 외부 사용자 조사
Net Session : **외부에서 loggedon(로그온)한 사용자들의 List(목록)**을 보는 가장 간단한 방법
→ **~~로컬(local)에서 로그인한 사용자에 대한 정보**는 안 보여줌~~
C:\>net [ session | Computer | User ]
라이브포렌식에서 해야 하는 일들
1. 보고서 개요
→ 작성자, 작성일, 분석 대상, 사건 발생 일자
2. 목적 및 범위
→ 목적 : 이 보고서는 잠재적 보안침해에 대한 실시간 분석 수행 결과를 포함한다.
→ 악성 활동 증거의 수집, 문제의 원인과 영향 파악
→ 범위 : 메모리 덤프(dump), 네트워크 연결, (실행 중인) 프로세스, 시스템 log 등
3. 시스템 정보
→ OS 버전
→ 시스템 - CPU 몇 개?
→ IP 주소 - IP 주소가 뭔지?
4. 분석 항목
(1) 프로세스 목록
→ 사용 명령어 : “procmon”
→ (그에 대한) 결과 : malware.exe(PID 3367) - 비정상적인 CPU 사용률 - ex) CPU 사용률이 너무 많음
XXX.exe(PID 2754) - 자동적으로 실행하는 서비스에 등록되어 있음 (autoruns)
(2) 네트워크 연결
→ 사용 명령어 : Netstat -nao
→ (그에 대한) 결과 : 외부와의 연결이 비정상적인 것들이 대부분 - ex) IP주소, 연결 프로세스, 연결 상태 (→ 이것들을 한꺼번에 볼 수 있는 명령어 : tcpview)
5. 분석 요약
: 분석 항목들을 요약
→ **의심 프로세스(Process)**가 외부에서 → (IP 접속을 통해서) 연결됨을 확인
→ 다수의 로그(Log) 기록 존재 확인
→ 시스템 권한 상승 (= root 권한 탈취 등)
6. 조치 사항
→ 프로세스(Process) 차단 및 제거 필요
→ 네트워크(Network) 차단
→ 시스템(System) 복구
→ 비밀번호(password) 변경 및 접근 제어 강화 필요
⇒ 이렇게 정리해야만, ”법정 제출” 가능 (판사 & 변호사의 이해 위한 것)
→ 보고서 작성을 위해, 명령어 이용해서 정보를 수집 & 해석이 필요했던 것!
프로세스 분석을 하는 이유 : 라이브 포렌식에서 증거 수집의 대부분이 “메모리”에 올라가있음
→ 메모리를 덤프(dump)받기
메모리에 올라간 정보 중 프로세스 정보
”모든 프로그램” : 메모리에 올라가는 순간부터 → “프로세스”가 됨
ex) 실행 중인 프로세스 정보 == 아래 한글, 웹메일, 엣지 등
범죄자가 이 컴퓨터를 통해 “어떤 걸 실행했는지?” 알 수 있음
→ (메모리에 올라가있는) 프로세스의 정보 및 목록 보기
(1) “어떤 프로세스(Process)”를 “언제 or 어떤 경로”로 접속해서
(2) 메모리에 올라가 실행해서
(3) 내 컴퓨터를 뭘 실행시켰는지 등을 알아야만
(4) 보고서를 만들고 법정에 제출 가능해짐
(악성 프로그램이 만든) Process
→ (1) 정상적인 Process의 이름 그대로 모방하는 경우 대부분 or (2) 살짝 바꾸는 경우 존재
Service : 원래, (앱 Process를 실행하기 위해서) 보조적으로 실행해야 하는 Window Process
= **운영체제(OS)가 실행시키기 때문에, OS의 커널 프로세스**
Window Process : 특정 어플리케이션을 돌아가게 하기 위해 알아서 작동시키는 환경
→ 시계, 날짜, 네트워크 연결 등
| service | 프로세스에 해당 = 일종의 Process | | --- | --- | | svchost | 프로세스 해당 가능할 수도 or 불가능할 수도 | | handle | Resource ID - Resource마다 고유 ID 존재 마이크를 키기 위해, 디바이스의 이름을 부르는 것이 아닌, **“고유한 Res ID”**를 부름 |
| service.exe | 시스템 프로그램 관리 제어 (위주의 역할) → 여러 Component 제어 및 관리 | | --- | --- | | svchost.exe | 서비스 실행 환경 (위주의 역할) |
“Window” & “Process” - “PID”만 구별할 뿐, Process 이름으로 구별하지 않음
⇒ 여러 프로세스 중 의심이 가는 것 찾으려면, ‘프로세스 이름’ 이외에도 + ‘다른 정보’ 추가해야 함
→ 여러 도구 or 명령어 사용하기
Svchost.exe
<aside>
모든 Service : “DLL(다이나믹 링크 라이브러리) 형태”로 구성되어 있음
(1) 여러 라이브러리(Library)를 합쳐서 컴파일하면, Size가 커져서 문제 발생
= (일부분이 아닌) 전체 Code에 대해 다시 컴파일을 해야 함
→ 컴파일한 버전을 불러다가 or 그 자리에서 사용 가능해짐 = (일부) 대상만 수정하면 됨
= Main 코드가 아닌 **다른 곳**에 존재
= Main 어플리케이션에서 사용할 **보조적인 Process**
→ Active X, .com, EJB : Component 혹은 Container로 패키징해놓은 것
</aside>
= (동시에 실행되는) 다수의 Process 가짐
= DLL(일부 대상만 수정하는 형식)에 대한 Container 제공
explorer.exe (나를 만들었던 부모(userinit)가 사라지면, 고아 프로세스)
<aside>
: Window 상에서, “폴더” 및 “파일”을 찾고, 관리하는 일
→ ”system32 폴더”에 위치 안 함
App을 더블 클릭해서 실행시킬 때, explorer.exe 존재해야 실행 가능
= 윈도우 탐색기를 통한 파일 및 폴더 → 접근 제어
→ 없으면, Window 상에서 파일 및 폴더 못 찾음
(1) 윈도우 탐색기(= 파일 탐색기**) 생성 & (2) User와의 상호작용 처리 담당**
</aside>
Session : (작업의) 시작부터 끝까지 의미
<aside>
DOS 명령창 (cmd.exe) : Window에게 어떤 프로그램을 실행시키라고 명령하는 용도
Service 프로그램 : (내가 아닌) OS 자체에서 알아서 실행시키는 용도
⇒ SO, Dos 명령창을 통해 실행된다면, 누가 원격으로 심어놓은 것이므로 의심할 것!
</aside>
⇒ 대부분 system32 폴더에서 실행되어야 함
부팅 시, “smss.exe” & “Winlogon.exe(로그인 화면)”가 가장 먼저 실행되어야 함
system.exe & csrss.exe & wininit.exe & winlogon.exe & explorer.exe & app
: (Tree 상에서) 하나의 Level(같은 레벨)로 보여짐
service.exe & lsass.exe & wininit.exe(처음 부팅 시, 초기화)
: 오직, 한 개의 프로세스만 갖기
smss.exe & userinit.exe
: 존재하다가, 자기 역할 수행 후 사라지는 프로세스
csrss.exe & lsass.exe
: 자식 프로세스 필요없음
<aside>
- 부모 프로세스가 누구인지?
- 다음 중 instance가 여러 개 or 한 개만 존재해야 하는 것은?
- 이 Process가 어느 폴더에 존재해야 하는지?
</aside>
→ 이것을 수행한 후, 돋보기 창에 “명령 프롬프트”를 입력하기
→ 오른쪽 버튼 클릭하여, “관리자 권한으로 실행”시키기
procexp
각각의 Process마다 → CPU 사용량 & 메모리 크기 & Process ID & 어떤 프로세스인지 등 설명 존재
- 공신력 있는 회사에서는 Description 줌
sysinternals proc explorer에서 오른쪽 마우스 버튼을 클릭해서
→ dump, kill, virustotal 등의 메뉴 사용해보기
**의심스러운 Process**를 **dump, kill, virustotal 후 확인 가능**
공격자의 주요 먹잇감 : svchost.exe
(procexp에 없는) Image Path : 실행 파일이 어느 폴더에 들어가 있는지 확인 가능
→ 대부분 system32 폴더에 존재 (explorer.exe 제외)
<aside>
procmon : 프로세스 & 쓰레드 정보, 프로세스 Tree 정보
procexp : (사용 중인 파일 / 쓰레드를 포함한) 상세한 프로세스 정보
autoruns : 컴퓨터를 키면, 자동으로 실행되는 프로세스
→ explorer.exe에서 실행되어야 하는데, Dos 명령창에서 실행된다면 의심하기 (외부에서 원격 접속한 것일 수도 있음)
listdlls : 실행 중인 Process의 기본 정보 = 모든 Process와 관련된 list
pslist : 명령창에서 볼 수 있는 간략한 정보
psloggedon : 현재, 로그온하고 있는 사용자 정보
→ 모든 행위들이 log 형태로 남기 때문에, 출력하라는 의미
psloglist : Windows의 이벤트 로그 정보 → 흔적으로 남음
psinfo : 컴퓨터에서 깔린 Windows system 기본 정보
psservice : Windows 서비스 프로세스 정보
sigcheck -a : 시그너쳐 정보 check
tcpview : 네트워크 정보 - 누가가 IP 주소로 어떤 Port를 타고 어떤 일들을 하고 있는지 Data 얻기 가능 ⇒ 프로세스 이름까지 나와있어 Netstat보다 편함
ntfsinfo c : (C 드라이브의) NTFS 정보
ipconfig / all : (IP주소와 Mapping이 된) MAC주소
- ping : 컴퓨터가 살아있는지 (생존 여부) 신호를 날려 응답 체크
- tracert : 가는 길을 router(라우터)가 정해줌 == 경로 추적
- → **여러 경로 거쳐서 나한테 옴**
</aside>
→ 정보들 찾기 위해 명령어 사용한 것
모든 행동이 Window 상에서 “흔적”으로 남음 → 흔적 못 없앰
→ 이러한 정보들을 “보고서”에 넣기 때문에, 중요
레지스트리 : 윈도우(Window) 상에서 → 모든 시스템 정보들을 저장해두는 데이터베이스
→ 데이터베이스(DB) 또한 저장되어 있는 것 확인 가능
<aside>
- 부모 - 자식 프로세스의 관계 → 탐색
- instance의 수 (한 개 or 여러 개)?
- (공신력있는 회사에서 만든) description 보기 (+ 컴파일)
</aside>
프리페치 파일 : 모든 실행파일 모음집
Console(콘솔)을 통해 → (접속한 사용자 이외에) 원격에서 접속한 외부 사용자 조사
Net Session : **외부에서 loggedon(로그온)한 사용자들의 List(목록)**을 보는 가장 간단한 방법
→ **~~로컬(local)에서 로그인한 사용자에 대한 정보**는 안 보여줌~~
C:\>net [ session | Computer | User ]
라이브포렌식에서 해야 하는 일들
1. 보고서 개요
→ 작성자, 작성일, 분석 대상, 사건 발생 일자
2. 목적 및 범위
→ 목적 : 이 보고서는 잠재적 보안침해에 대한 실시간 분석 수행 결과를 포함한다.
→ 악성 활동 증거의 수집, 문제의 원인과 영향 파악
→ 범위 : 메모리 덤프(dump), 네트워크 연결, (실행 중인) 프로세스, 시스템 log 등
3. 시스템 정보
→ OS 버전
→ 시스템 - CPU 몇 개?
→ IP 주소 - IP 주소가 뭔지?
4. 분석 항목
(1) 프로세스 목록
→ 사용 명령어 : “procmon”
→ (그에 대한) 결과 : malware.exe(PID 3367) - 비정상적인 CPU 사용률 - ex) CPU 사용률이 너무 많음
XXX.exe(PID 2754) - 자동적으로 실행하는 서비스에 등록되어 있음 (autoruns)
(2) 네트워크 연결
→ 사용 명령어 : Netstat -nao
→ (그에 대한) 결과 : 외부와의 연결이 비정상적인 것들이 대부분 - ex) IP주소, 연결 프로세스, 연결 상태 (→ 이것들을 한꺼번에 볼 수 있는 명령어 : tcpview)
5. 분석 요약
: 분석 항목들을 요약
→ **의심 프로세스(Process)**가 외부에서 → (IP 접속을 통해서) 연결됨을 확인
→ 다수의 로그(Log) 기록 존재 확인
→ 시스템 권한 상승 (= root 권한 탈취 등)
6. 조치 사항
→ 프로세스(Process) 차단 및 제거 필요
→ 네트워크(Network) 차단
→ 시스템(System) 복구
→ 비밀번호(password) 변경 및 접근 제어 강화 필요
⇒ 이렇게 정리해야만, ”법정 제출” 가능 (판사 & 변호사의 이해 위한 것)
→ 보고서 작성을 위해, 명령어 이용해서 정보를 수집 & 해석이 필요했던 것!
'디지털포렌직스 스터디' 카테고리의 다른 글
| [디지털포렌직스] 12주차 (0) | 2024.12.01 |
|---|---|
| [디지털포렌직스] 11주차 (0) | 2024.11.24 |
| [디지털포렌직스] 9주차 (0) | 2024.11.10 |
| [디지털포렌직스] 7주차 (0) | 2024.10.26 |
| [디지털포렌직스] 6주차 (0) | 2024.10.18 |