본문 바로가기
보안/포렌식

솔라리스 메모리 덤프 생성 & 분석

by ITPro 2012. 10. 8.

솔라리스에서는 메모리 덤프를 위해 dumpadm, savecore 와 같은 명령을 제공하고 있으며 코어 덤프 형태로 덤프 이미지를 생성합니다.


1. 덤프 설정

메모리 덤프를하기에 앞서 dumpadm 명령을 통해 현재 덤프와 관련된 설정 확인 및 수정이 가능합니다.


-주요 옵션

옵션

 

설명

-c

contents

덤프할 내용을 설정한다.

-kernel : 커널 페이지

-curproc : 커널 페이지 + 최근 실행된 프로세스 페이지

-all : 모든 페이지

-d

device

덤프에 사용할 장치를 설정한다.

-n

no

savecore 사용을 비활성화 한다.

-y

expert

savecore 사용을 활성화 한다.


아무런 옵션을 주지 않으면 아래와 같이 현재 설정된 내용을 출력해줍니다.

 # dumpadm
      덤프 컨텐트: 커널페이지
       덤프 장치: /dev/dsk/c0d1s1(스왑)
Savecore 디렉토리: /var/crash/unknown
  Savecore 사용: 예
   Save compressed: 켜기


기존적으로 덤프 장치는 스왑 영역이 설정되어있는데 스왑 영역 크기가 작은 경우 모든 메모리 페이지를 덤프하려고 시도하면 아래와 같이 용량 부족 에러가 발생합니다.


 # dumpadm -c all

dumpadm: 덤프 장치 /dev/dsk/c0d1s1이(가) 너무 작아서 시스템 덤프를 보관할 수 없습니다.

덤프 크기 782004224바이트, 장치 크기 551093760바이트


따라서 좀 더 사이즈가 큰 장치로 변경해주어야 하는데 해당 장치는 다음과 같은 조건을 만족해야 합니다.


 -해당 장치는 시스템에 의해 사용되고 있지 않아야 합니다. (유휴 장치)

 -덤프 크기보다 장치 크기가 커야합니다.


※ 주의 : Backup slice 영역을 덤프 장치로 지정할 경우 boot 영역을 포함한 디스크 영역들을 덮어써 데이터가 파괴되기 때문에 주의가 요구됩니다.


 


 

 


 

2. 덤프 생성

덤프 설정이 완료되면 savecore 명령을 통해 쉽게 덤프가 가능합니다.


-주요 옵션

옵션

 

설명

-L

Live

Live 시스템을 덤프한다.

-f

dumpfile

vmdump.* 파일의 압축을 해제하여 vmcore.* unix.* 파일을 생성한다.



# savecore -L /mnt/dump
dumping to /dev/dsk/c2t0d0s0, offset 65536, content: all
 1:04 100% done
100% done: 383887 pages dumped, dump succeeded
savecore: System dump time: Thu Oct  4 18:00:12 2012

savecore: Saving compressed system crash dump in /mnt/dump/vmdump.0
savecore: Decompress the crash dump with
'savecore -vf /mnt/dump/vmdump.0'



3. 덤프 분석


coredump의 분석은 mdb를 이용하여 진행됩니다.

vmdump.* 파일은 unix.*, vmcore.* 두 파일을 압축한 파일이기 때문에 savecore의 -vf 옵션을 이용해 압축을 해제해주어야 mdb에서 정상적으로 인식이 가능합니다.

압축을 해제한 뒤 mdb의 인자로 해당 dump 번호를 입력해주면 됩니다.


# ls

bounds    vmdump.0

# savecore -vf vmdump.0

savecore: System dump time: Fri Oct  5 23:30:33 2012


savecore: saving system crash dump in /var/crash/unknown/{unix,vmcore}.0

Constructing namelist /var/crash/unknown/unix.0

Constructing corefile /var/crash/unknown/vmcore.0

 1:28 100% done: 383887 of 383887 pages saved

7527 (1%) zero pages were not written

1:28 dump decompress is done

# ls

bounds    unix.0    vmcore.0  vmdump.0

# mdb 0

mdb: failed to read panicbuf and panic_reg -- current register set will be unavailable

Loading modules: [ unix krtld genunix specfs dtrace uppc pcplusmp cpu.generic ufs sockfs ip hook neti sctp arp usba uhci fcp fctl nca lofs audiosup md mpt cpc random crypto zfs fcip logindmux ptm sppp nfs ipc ]


mdb는 수 많은 명령을 제공해주는데 유용하게 사용 가능한 명령은 아래와 같습니다.


명령

설명

::statusdump 파일의 간략한 정보를 출력해줍니다. 
::netstat네트워크 정보를 출력해줍니다. 
::ps 프로세스 정보를 출력해줍니다. 
::ptree 프로세스 트리를 출력해줍니다. 
[address]::pmep해당 프로세스의 프로세스 맵을 출력해줍니다.
::fsinfo 마운트된 파일시스템 정보를 출력해줍니다. 
::dcmds 사용가능한 dcmd 목록을 출력해줍니다. 
::help [command name] 명령 사용법을 출력해줍니다. 


반응형