TH3 6R3@T H@CK
Collecting volatile information 본문
※ 작성 중
휘발성 정보 수집
· 휘발성 정보 수집 개요
- 사고 대상 시스템에는 분석 당시에만 존재하고, 시스템 재시작 시 삭제될 수 있는 다양한 휘발성(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() 호출
(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 |