Digital Forensics/Linux2010. 3. 16. 02:30
반응형

3-3.  inode 가 남아있지 않는 경우 (Data Carving)

 

위의 3-2처럼 ils icat 가지고 복구할 수 없는 경우가 있다. inode table 자체가 깨진 경우이다. 이에 해당하는 경우에 사용할수 있는 방법이 있다.

바로 carving 기법이다. carving 이란 inode 가 남아있지 않아 복구가 복잡해졌을 때 쓰는 방식으로, 여러가지 기술이 있다.

예를 들자면, 파일의 signature를 통해 파일의 시작점을 찾을 수 있다.  jpeg의 경우 처음이 FF D8이고 끝부분(trailer) FF D9이다. 파일의 끝점까지 찾아서 해당 부분을 dump를 뜨는 것이 가장 완벽한 방법이나, 끝점을 찾는 것은 매우 힘들다. Jpeg과 같이 끝점에도 signature가 있는 경우는 거의 없기 때문이다. 따라서 size 정보 또는 파일의 최대 size를 이용하여 시멘트 카빙을 한 후 유의미한 data만 추출하는 방법을 사용한다.

시멘트 카빙의 경우 data가 연속배열 되어 있지 않으면 유의미한 결과를 얻을 수 없으나, 최근 hdd 용량의 대량화로 대부분 연속배열 되어있기 때문에 유용하게 사용가능하다.

 

이해를 돕기 위해, 직접 file 형태로 된 shell script 를 모두 복구해보는 예제를 들어보겠다. 위에서 실습을 위해 다운로드 받았던 이미지 파일 5(honeypot.hda5.dd )로부터, 로그 파일을 조작한 후 삭제된 shell script를 복구해보겠다.

따라해보며 개념을 익히기 바란다.

 

 

 

3-3-1. Data Carving 시 사용할 Tool 설명


        i. fsstat : Block
사이즈 살펴보기


       ii. sigfind : 디스크 상에서 signature를 포함한 Block을 찾는 툴

<사용법>  sigfind -o (offset) -b (block size) signature image위치

 

eg. sigfind BR 찾기 (BR signature 511, 512 번째에 '55 AA')


     iii. blkcat :
해당 Block Dump 하는 툴

(script 가 한 개 블록임을 가정한다. 넘어가면 짤린다.)

eg. blkcat honeypot.hda5.dd 3698    // 3698Block 스크립트를 보여준다.



iv. sigfind blkcat 툴을 사용하기 위해서는 sleuthkit 을 설치해야한다.

1.    Sleuthkit Tool download 받는다.



 

            2. 압축을 풀어 INSTALL.txt 파일을 열어본다.

 

3.    그대로 따라하며 설치한다.

 



 
3-3-2.
로그파일 수정한 Shell Script 복구하기

(Sleuthkit SIGFIND, BLKCAT Tool을 활용)

 

*. sigfind, blkcat 툴을 사용하여 shell script 파일을 싹 다 복구한 후, 로그파일을 수정한 script만 찾아내보도록 하겠다.

-> 만약 이 방법으로 나오지 않는다면, script 가 파일로 존재 하지 않는 것이므로 keyword searching 을 하는 수밖에 없다.

 

i. 각 이미지의 Block Size를 추출하는 쉘코드 작성 (Sigfind Tool 사용시 Block Size를 알아야 하기 때문)



 

ii. 추출한 fsstatdata Block Size 확인


//   honeypot.hda1.dd Block Size : 1024
      honeypot.hda5.dd Block Size : 4096

      honeypot.hda6.dd Block Size : 4096
     
honeypot.hda7.dd Block Size : 1024
      honeypot.hda8.dd Block Size : 1024 

  

iii. honeypot.hda1.dd 등에 있는 모든 script 파일을 dump

             (sript 파일의 사이즈가 하나의 Block을 넘어가지 않는다고 가정하며,
              Sleuthkit sigfind blkcat Tool을 사용하도록 한다.)


 


 

script 여부 확인 방법 : sigfind를 통해 script 파일의 맨앞 (#!/bin/sh or #!/bin/bash) 4byte 23212f62('#!/b'16진수 변환.)까지를 시그너춰로 보자. (sigfind signature 4 byte까지밖에 못준다.)

c.f) 16진수 변환 방법 : echo '문자' | xxd : 출력 중 0A는 엔터임

 

 

 

iv. 파일 복구 Shell Script 완성본!!

 쉘스크립트 파일이면서 var/log/message (로그파일 저장) 문자열을 포함하는 파일을 추려서 저장하는 기능 추가

<shell script>

#!/bin/sh

 

for i in 1 5 6 7 8            //  honeypot.hda$i.dd 로 파일 다섯개를 한번에 처리하기 위한 i 변수 지정

do

mkdir dumphda$i       //  dump shell script 를 저장할 폴더만들기

fsstat honeypot.hda$i.dd | egrep "Block Size" | awk -F ': ' '(1){print $2}'|\

//  fsstat으로 이미지 파일마다 다른 block size의 확인 후 해당부분 추출 (sigfind에서 써야함)

while read blocksize

//  변수 blocksize fsstat을 통해 추출한 이미지 별 block size 정보 넘김

do

sigfind -b $blocksize 23212f62 honeypot.hda$i.dd | awk -F ' ' '(1){print $2}' |\

while read blocknum

//  sigfind tool signature '#!/b'로 설정하여 찾은 block number 를 변수 blocknum에 넘김

do

blkcat honeypot.hda$i.dd $blocknum >> dumphda$i/$blocknum.txt

//  blkcat tool로 해당 이미지의 script가 위치한 block blocknum.txt dump

if cat dumphda$i/$blocknum.txt | grep '/var/log/message' ;then

cp dumphda$i/$blocknum.txt realhda$i/$blocknum.txt

//  blocknum.txt 파일 중 '/var/log/messages' 내용이 있는 파일을 찾아서 추출

fi

done

done

done

<그림 27. /var/log/message 문자열 포함 Shell Script 추출>

 

v. iv Shell Script 실행 결과 :


         hda5(/usr) 이미지에 일치하는 파일 1개 존재 확인


 
    hda8(/ : root) 이미지에도 일치하는 파일이 1개 확인

 

 

  

vi. 찾은 공격 스크립트 (1 block 에 해당하는 script 만 찾음)

 

반응형
Posted by CCIBOMB