Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
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 29 30
Tags
more
Archives
Today
Total
관리 메뉴

TH3 6R3@T H@CK

Collecting volatile information 본문

Study/Incident Response

Collecting volatile information

vvh0am1 2024. 5. 22. 16:09

※ 작성 중

 

휘발성 정보 수집

 

· 휘발성 정보 수집 개요

- 사고 대상 시스템에는 분석 당시에만 존재하고, 시스템 재시작 시 삭제될 수 있는 다양한 휘발성(volatile) 정보가 존재

- 사고 분석 단계에서는 휘발성 정보에 대한 우선적 수집 및 분석 필요

* 휘발성 정보: 프로세스 상태, 네트워크 연결 상태, 사용자 로그인 상태

 

· 프로세스 상태 확인하기

- "ps -efl" 명령을 통해 프로세스 상태 확인 → 의심스러운 PID 식별

 

- "ps" (Process Status) 명령어: 현재 실행 중인 프로세서 정보 출력- ps 명령어 주요 옵션* -e: 모든 사용자가 실행 중인 프로세스 정보 출력* -f: -e 옵션보다 상세한 정보 출력(Full format)* -l: -f 옵션보다 상세한 정보 출력(Long format)

 

- ps 출력 결과의 각 필드 의미

 

(1) F (프로세스 플래그)

- 4: Used super-user privileges

- 1: forked but didn't exec

- 5: 4 & 1 플래그 모두 해당

- 0: 어떤 플래그에도 해당되지 않음

 

(2) S (프로세스 상태 코드)

- R: 실행 중

- S: 대기(20초 이하)

- I: 대기(20초 이상)

- D: 디스크 관련 대기

- Z: 좀비

 

(3) UID (사용자 ID)

- 프로세스를 실행시킨 사용자 ID

 

(4) PID (프로세스 ID)

- 프로세스에 부여된 ID

 

(5) PPID (Parent PID)

- 프로세스의 부모 프로세스 ID

 

(6) C (CPU 사용량 %)

 

(7) PRI (우선순위)

- 프로세스의 실행 우선순위

 

(8) NI (Nice)

- 프로세스 우선 순위 결정에 계산되는 Nice 값

 

(9) ADDR (Address)

- 프로세스의 메모리 주소 (보안상 이유로 항상 "-" 출력)

 

(10) SZ

- 프로세스에 할당된 가상 메모리 총 크기

 

(11) WCHAN (Wait CHANel)

- 대기 중인 프로세스의 커널 지점(함수)

 

(12) STIME

- 프로세스 시작 시간(날짜)

 

(13) TTY

- 프로세스와 연결된 터미널(?의 경우 Background 실행 의미)

 

(14) TIME

- 총 CPU 사용 시간

 

 

· 사용 중인 파일 정보 확인하기

- "lsof" (List Open File) 명령어

: 모든 프로세스들에 의해 Open된 파일 정보 출력

 

- "lsof" 출력 결과

(1) COMMAND

(2) PID

(3) TID

(4) TASKCMD

(5) USER

(6) FD

(7) TYPE

(8) DEVICE

(9) SIZE/OFF

(10) NODE

(11) NAME

 

* 교수님) 프로세스들이 어떤 파일을 엑세스하는지 파악하는 것이 중요

 

· 대상 시스템에서 "ps" 출력 결과가 변조되어 있을 경우, "lsof" 명령어를 통해 확인 가능

 

* 교수님) 하나의 명령어에만 의존하지 않는 것이 중요

 

 

실습 #1) "ps" 출력 결과 위조하기

 

· LD_PRELOAD 환경 변수를 활용한 함수 후킹(Hooking)

- 프로세스는 실행 전 LD_PRELOAD 환경 변수에 설정된 경로에서 라이브러리를 로딩

* LD_PRELOAD에 경로 설정 시 Dynamic Linker가 해당 경로의 공유 라이브러리(so 파일)를 무조건 로딩

- LD_PRELOAD에 공격자가 .so 파일을 삽입하고, ps 명령이 해당 so 파일을 로드하면 프로세스 내에서 사용되는 함수를 바꿔치기 가능

* SetUID가 설정된 파일은 보안상 이유로 LD_PRELOAD를 이용한 후킹 불가 

 

(1) 후킹을 위한 공유 라이브러리 코드 작성

· ps 프로세스는 /proc/PID/status 파일을 읽어 프로세스 이름 확인 → read() 호출

hook_read.c

 

(2) 컴파일 및 후킹 여부 확인

 

(3) ps 명령어 교체

 


 

· 네트워크 연결 상태 확인하기

- netstat 명령어

: 현재 시스템의 네트워크 연결 상태를 출력

: 공격자가 현재 시스템에 연결되어 있을 경우, 공격자 발신지 IP, 연결 port 등 확인 가능

 

- netstat 명령 주요 실행 옵션

* -a: 모든 소켓 정보(tcp, udp, tcp6, raw, unix, ...)를 출력

* -n: 네트워크 주소를 숫자로 표현(IP Address)

* -t: TCP 프로토콜만 출력

* -l: Listening PORT 출력

* -p: 프로그램 이름 출력

 

- netstat 명령어 출력 결과 

 

(1)

(2)

(3)

(4)

(5)

(6)

(7)

 

- 공격 징후 예시("netstat-anp" 결과)

* 공격자는 TCP 포트 (~1000)을 대상으로 만든 포트 스캐닝 수행

 

- 공격 징후 예시("lsof -i TCP" 결과)

 

 

· PORT Open/Close 여부 확인하기

- 포트 스캐닝 도구를 활용하여 침해에 악용된 서비스 PORT 및 공격자의 Backdoor PORT 확인

- Nmap (Network Mapper)

* 대규모 네트워크를 고속으로 스캐닝 할 수 있는 대표적인 스캐닝 도구

* 호스트 정보 및 데몬 버전 식별, 스텔스 스캔 등 다양한 기능 포함

 

- Nmap 실행 결과: "sudo nmap -sV -O -p 22 localhost"

 

- Nmap 스캔 옵션(기법)

* Full Scan/Open Scan (-sT)

: 완전한 tcp 연결을 맺어서 포트의 Open 여부를 판단 (공격 대상에 로그를 남김)

: 정상적인 3-way Handshaking 과정을 통해 신뢰성 있는 결과물을 보장, 단 속도가 느림

 

- Half Open Scan/SYN Scan (-sS)

 

 

 

 

 

 

'Study > Incident Response' 카테고리의 다른 글

Snort  (0) 2024.06.05
침사대  (0) 2024.04.23