Digital Forensics/Linux2010. 3. 15. 22:04
반응형

iii.  삭제된 inode 복구하기

1.   지워진 inode , 한번이라도 쓴 inode 찾기


 
*
복구의 조건 :

· st_alloc(2번째 필드) : data block의 상태를 표시해준다.
                          
f free (사용가능) 이어야 복구 가능

                 c.f) st_alloc a (allocated)인 경우는 inode가 이미 새로운 data 저장을 위해 할당되어있는 상태임을 의미하므로 복구가 불가능하다.

· st_size(11번째 필드) : 0보다 클 것 (data 가 있음을 의미)

· 주의 : 필드는 1번부터 세고, 0은 전체를 나타낸다.



ils
awk로 복구가능한 파일만 보게 조건을 걸고 그런 파일이 나오면 첫번째 필드를 출력하라고 명령을 내린 것이다. 다음과 같은 결과가 나온다.


c.f)
' ' :
쿼팅제한! 필드구분자 -F '|'

 

awk(자동화툴)  : 필드를 처리하는 툴 중 하나다. -F Field Separater를 뜻한다. 여기에서 필드를 구분해주는 것이 |이므로 '|'로 나타낸다. 두번째 필드가 f이고, 11번째 필드의 값이 0보다 커야 하므로 (왜냐하면 virgin inode가 아닌, 한번이라도 쓴 inode를 찾아서 빼기 위해서이다.)

<awk의 사용법>

     awk [옵션] '스크립트' [변수=] [파일()]

    or

  awk [옵션] -f 스크립트 파일 [변수=] [파일()]

 

ils 명령어(숨겨진 데이터를 찾기) : ils는 마운트 되어 있는 디바이스의 inode 정보를 리스트로 만들어주며, 또한 삭제된 inode 정보를 확인할 수 있다.

  <ils 옵션>

  -e : 파일 시스템의 모든 inode 정보를 리스트로 만들어 준다.

-f : 파일시스템 타입을 정의한다. 거의 모든 UNIX 시스템의 기본 파일 시스템은 ffs(Berkeley fast file system)이며, 리눅스는 기본적으로 ext2fs(second extended file system)을 사용하고 있다.

-o : 아직 열려있거나 실행중인 삭제된 파일들의 inode 정보를 만들어준다.(-aL과 동일)

-r : 삭제된 파일들의 inode 정보를 만들어 준다.(-LZ와 동일)

-v : 상세 모드 출력(stderr)

-V : 상세 모드 출력(stdout)



2.   icat 을 사용하여 해당 inode를 파일로 복구하기

 

2-1.  icat honeypot.hda5.dd 2254 > a
        
: 2254 inode a란 파일로 복구



c.f) icat : inode 숫자에 해당되는 내용을 파일로 복사하기 위해서(보통 삭제된 파일의 inode 번호 사용) icat을 사용한다. 여기서 2254는 확인된 삭제된 inode 번호이다.
 

2-2.  icat honeypot.hda5.dd 140839 > 140839
         : 140839 번 inode를 원래의 것으로 복구





                  2-3.
위처럼 inode 번호를 일일이 커맨드에 대입하는 것이 아니라, Shell script를 써서 모든 파일을 복구해보자.


                   2-4.  r을 실행해보자. 실행권한이 없다고 표시될 것이다.


                       2-5.  chmod u+x ./r : r명령의 실행 Permission을 받는다.

 

                       2-6. r 명령을 실행하면 복구가 완료됨을 볼 수 있다.



반응형
Posted by CCIBOMB
Digital Forensics/Linux2010. 3. 15. 15:45
반응형

3. 실습 삭제된 파일 복구하기



*. 실습시 사용하는 이미지 다운로드 주소 : http://old.honeynet.org/challenge/images.html

       (challenge-images.tar 압축을 풀어, 다음 이미지를 모두 마운트시킨다.
honeypot.hda1.dd, ~~.hda5.dd, ~~.hda6.dd, ~~..hda7.dd, ~~.hda8.dd )

 

파일을 삭제할 때는 Data는 그대로 두고 inode table에 해당 inode를 안 쓴다는 표시만 한다. (성능상의 이유로 모든 파일시스템이 동일하다.) index block에서 inode와 연결 부분 삭제하는 것이다. 따라서 이를 이용하면, 삭제된 파일의 복구가 가능하다!

 

3-1.  Bitmap 에서 inode 를 사용한다(1) 표시된 경우

-> 해당 inode 를 따라가서 data 덤프하면 파일 복구

 

3-1-1. Bell FS


boot record

super block

inode table

data block

* bitmap super block 위치.

 

3-1-2. EXT3 방식

Cylinder Group 구조 : 앞에 깨지면 뒤의 것을 가져다 복구. 퍼포먼스를 위한 구조이다.

 

3-1-3. EXT2 방식

앞서 “2-4. EXT2 파일시스템 구조 분석에서 다룸



3-2.  Bitmap 에서 inode를 사용하지 않는다(2) 표시된 경우

 

3-2-1. 한 번도 사용하지 않은 inode (Vergin inode) -> 복구할 필요 X
             
사용했다가 지워진 inode -> index를 따라가 해당 data block dump 떠서 복구함

 

3-2-2. 실습을 따라하며 원리를 익혀보자.

i. ls -ali 명령을 통해 inode와 기타 부가정보를 볼 수 있다.

-a : all의 뜻으로 시스템에 숨겨져 일반 사용자에게 나타나지 않는 파일을 포함한 모든 파일과 디렉토리 이름들을 화면에 표준출력

-l : long이라는 뜻으로 파일 및 디렉토리의 표시, 접근(access)에 대한 허가 사항, 링크수, 사용자, 등록명(홈디렉토리) 그리고 파일의 생성 및 최종적으로 수정된 시간과 파일 및 디렉토리 이름을 세부적으로 나열하여 사용자는 보다 더 많은 파일 및 디렉토리에 대한 정보 확인 가능

-i : i-node 번호를 파일 또는 디렉토리 이름 앞에 표준출력

 

  

ii. 삭제된 inode 보기



   이렇게 입력하면 결과화면은 다음과 같이 honeypot.hda5.dd (삭제된 파일이 있는 상태에서 그대로 디스크를 dump한 이미지)에 들어있는 inode들 중 삭제된 inode들을 볼 수 있다.


 

수많은 결과가 나온다. 이 중, 복구 가능한 inode를 선별할 필요가 있다. 다음에서 복구의 조건을 살펴보도록 한다.

 

 

  

c.f) 삭제된inode를 살필 때 사용한, ils 명령어를 살펴보자.

1. ils : ils는 마운트 되어 있는 디바이스의 inode 정보를 리스트로 만들어준다.


2. -r 옵션 : 삭제된 파일들의 inode 정보를 만들어준다.

3. Inode 번호, allocation, size, … 등 여러가지 필드가 있다.

  

반응형
Posted by CCIBOMB
Digital Forensics/Linux2010. 3. 15. 15:22
반응형

2-4-5. EXT2 파일 시스템에서 파일 찾기


     리눅스 파일 이름은 다른 유닉스의 파일 이름과 같은 형식으로 되어 있다
. 이름은 앞에 슬래시('/')가 붙은 디렉토리 이름이 이어지고 마지막에 파일 이름이 오는 형태이다. 예를 들어, 파일 이름이 /home/rusling/.cshrc이라면, /home /rusling은 디렉토리 이름이고 파일 이름은 .cshrc이다. 다른 모든 유닉스 시스템과 마찬가지로 리눅스는 파일 이름 자체의 형식은 신경쓰지 않는다. 길이 제한도 없고, 인쇄 가능한 아무런 문자로 구성된다. 이 파일을 나타내는 inode EXT2 파일 시스템 안에서 찾기 위해, 시스템은 파일 이름을 해석해서 한 디렉토리씩 처리하여 파일 자체를 얻게 된다.


     처음 필요한
inode는 파일 시스템의 루트의 inode, inode 숫자값은 파일 시스템의 수퍼 블럭에서 얻는다. EXT2 inode를 읽기 위해서는 해당하는 블럭 그룹의 inode 테이블에서 찾아야 한다. 예를 들어 루트 inode의 번호가 42라면 우리는 블럭 그룹 0 inode 테이블의 42번 째 inode가 필요한 것이다. 루트 inode EXT2 디렉토리를 위한 것이다. 다시 말해서 루트 inode의 모드는 루트 inode가 디렉토리임을 나타내며 데이터 블럭에는 EXT2 디렉토리 엔트리가 들어 있다.


     home
은 여러 디렉토리 엔트리 중의 하나일 뿐 이며 /home 디렉토리를 나타내는 inode의 번호를 알려준다. 이 디렉토리를 읽어서 (디렉토리를 읽으려면 우선 inode를 읽고 그 inode 가 가리키는 데이터 블럭으로부터 디렉토리 엔트리를 읽어야 한다.) rusling 엔트리를 찾으면 그 엔트리는 /home/rusling 디렉토리를 나타내는 inode의 번호를 알려줄 것이다. 마침내 우리는 /home/rusling 디렉토리를 나타내는 inode가 가리키는 디렉토리 엔트리를 읽어서 .cshrc 파일의 inode 번호를 찾은 다음, 이 번호를 이용하여 파일의 내용을 갖고 있는 데이터 블럭을 가져오게 된다.

 

“ /dir/file.txt “ inode를 이용해 찾아가기!

1 루트 디렉토리의 inode 번호는 2 (ext)

2 루트 inode index block을 통해 Dir inode를 알아냄

3 dir inode index block을 통해 file inode를 알아냄

4 file inode index block을 통해 DATA를 찾음!

반응형
Posted by CCIBOMB