본문 바로가기

[+] Forensic

File System - Partition (6)

이번 글에서는 RAID 개념에 대해서 알아 볼 것이다.

RAID(Redundant Arrays of Inexpensive Disks)란, 성능향상을 위해 디스크 하나 대신 여러개를 사용하는 중복 디스크의 개념이다. 하드웨어 컨트롤러나 소프트웨어 드라이버가 여러 디스크들을 하나로 병합하고, 컴퓨터는 그 볼륨을 단일 디스크로 인식한다.
예전에는 RAID가 고성능 서버 컴퓨터에서만 사용되었지만, 요즘은 일반 데스크탑 컴퓨터에도 쓰이고 있다.
RAID 기술에는 여러 레벨이 있고 각 레벨 마다 신뢰성과 성능 향상등의 정도가 다르다. 총 7가지 레벨이 있으며 이제부터 그 레벨들에 대하여 알아보도록 하겠다.

[RAID 레벨]
1. RAID 레벨 0
    - RAID 레벨 0은 2개 이상의 디스크를 사용하며, 두 디스크에 데이터를 볼륨 묶음으로 교차하여 나열해 놓은 방식이다.
       해당 레벨은 읽기/쓰기 성능에 향상을 제공하지만, 데이터가 나누어져 나열되어 있는 경우이기 때문에 하나의
       디스크만 고장이 나도 데이터를 복구 할 수 없다는 점이 있다. 기본 구조는 아래 이미지와 같다.

[그림 1 - RAID Level 0]

 * 참고 : RAID Level 0은 스트라이핑 모드(Striping Mode)라고도 불린다.

2. RAID Level 1
    - RAID Level 1은 동일한 디스크가 두개 있는 것이다. 한쪽 디스크에 데이터를 입력 할 때 다른 한쪽 디스크에도 동일한
      데이터가 입력된다. 신뢰성에서는 선호되는 구조이지만, 한번의 입력 시 두번의 디스크 입력 퍼포먼스로 인해 성능이
      저하되고 디스크 구성 비용이 2배로 들기 때문에 일반적으로는 사용하지 않는 구조이다. 기본 구조는 아래와 같다.

[그림 2 - RAID Level 1]

 
 * 참고 : RAID Level 1은 미러링 모드(Mirroring Mode)라고도 불린다. 

3. RAID Level 2
    - RAID Level 2는 RAID Level 0의 장점과 신뢰성을 향상시킨 구조이다. 이 구조는 패리티 코드를 사용하여 디스크
      고장 시 데이터를 복구 할 수 없는 문제점을 해결 한다. 패리티 코드 계산 시에는 해밍코드가 사용되며 패리티 디스크의
      개수는 (저장디스크 개수 -1)이다. 아래는 기본 구조 이다.

[그림 3 - RAID Level 2]


4. RAID Level 3
    - RAID Level 3은 RAID Level 2를 개선시킨 구조로 패리티 코드를 포함하는 많은 디스크를 단 하나의 디스크를 사용하여
      동일한 효과를 볼 수 있도록 하였다. 패리티 코드 계산은 XOR 연산을 통해 계산한다. 기본 구조는 아래와 같다.

[그림 4 - RAID Level 3]


5. RAID Level 4
    - RAID Level 4의 구조는 Level 3과 별반 다를 것이 없다. 하지만 패리티 코드 계산하는데에서 차이가 있다. Level 3의
       경우 바이트 단위로 패리티 코드를 계산하는데 비해 Level 4는 미리 정해진 블록 단위로 패리티 코드를 계산한다.

[그림 5 - RAID Level 5]


6. RAID Level 5
    - RAID Level 5는 Level 4의 단점을 개선한 구조이다. 각 데이터들의 변화가 많을 경우 패리티 비트 또한 변화해야 하기
       때문에 빈번한 접근으로 인해 디스크에 부하가 발생한다. 이를 방지 하기 위해 패리티 비트 디스크를 따로 만드는 것이
       아닌 데이터 디스크 내에 패리티 비트를 저장하는 방식을 사용하였다. 아래는 기본 구조이다.

[그림 6 - RAID Level 5]


7. RAID Level 6
    - 해당 구조는 신뢰성에 기반을 둔 구조로 Level 5의 경우 두 개의 디스크에서 동시에 오류가 발생 할 시 복구하지
      못한다는 단점이 있는데 이를 해당 레벨에서 패리티 디스크를 하나 더 추가함으로써 해결 하였다. 아무래도 디스크
      하나가 더 추가 되었다 보니 구현 시 추가 비용이 발생한다.


[그림 7 - RAID Level 6]

 * 참고 : 데이터<A~E>Q가 Level 6에서 추가된 패리티 코드이다.


지금까지 알아 본 RAID 구조들은 표준 구조들이며 현재는 시스템 별로 다른 구조를 혼용하여 사용하고 있다. 

 
RAID 볼륨을 생성하는 방법으로는 하드웨어 방식과 소프트웨어 방식이 있는데 이 두가지를 지금부터 알아 볼 것이다.

[RAID 구성 방식]
1. 하드웨어 방식
    - 해당 방식은 두 가지 방식으로 나눌 수 있다.

       1) 독립된 컨트롤러 방식 : 해당 방식은 독자적인 프로세서와 메모리, 입출력장치 등을 가지고 있어 CPU
          없이도 입출력이 가능하여 최적화된 성능을 발휘 할 수 있다. 하지만 별도로 메인보드에 장착되는
          이유로 인해 가격이 비싸다. 이 방식은 볼륨 부팅 등의 경우에서 일어나는 악의적인 행위들에 대해서
          안정적이며, 독립적이어서 시스템이 고장나도 영향을 받지 않는다.

       2) 일반적인 디스크에 삽입하는 컨트롤러 :  하나의 칩(Chip)에 모든 기능이 구현되어 있는 형태이다. 다른
          하드웨어와 통합하여 사용 할 수 있고 기존 I/O 컨트롤러등과도 교체가 가능하다. 가격은 비교적 독립된
          컨트롤러 방식에서 사용하는 장치보다 저렴하다. 이 방식은 독립된 컨트롤러 방식과 얻어지는 성과물은
          대부분 같지만, 기존 하드웨어에 장착되어 있는 방식이기 때문에 다른 시스템으로 이전하여 사용하기는
          어렵다.


아래는 하드웨어 방식의 기본 구성이다.

[그림 8 - 하드웨어 RAID 방식 기본 구조]

2. 소프트웨어 방식
     -  해당 방식은 RAID 기능이 소프트웨어적으로 구현된 방식이다. 이 방식으로 RAID를 구현 할 경우 사용자는 볼륨만을
         확인 할 수 있다. 각 디스크에 직접 접근을 하기 위해서는 유닉스 수준의 저수준 장치를 이용해야만 한다. RAID
         기능을 지원하는 OS는 MS Windows NT, 2000, XP, Apple Mac OS X, Linux, Sun Solaris, HP-UX,
       IBM AIX
정도가 있다.
        소프트웨어 방식은 CPU를 사용하기 때문에 하드웨어 RAID에 비해 많은 제약이 있고 성능이 효율적이지 못하다.
        이 방식은 하드웨어 방식과 마찬가지로 두가지로 나눌 수 있다.

         1) 순수 소프트웨어 방식 : 해당 방식은 하드웨어 없이 소프트웨어로만 구현하는 방식으로 구현 비용이
                                       저렴하다. 그러나 RAID 기능이 OS에 로드되기 전인 부팅 시에 일어나는 악의
                                       적인 행위나 여러가지 에러에 대해서는 안전하지 못하다. 또 CPU를 사용하므
                                       로 해당 시스템의 성능에 영향을 주며 시스템의 에러나 고장으로 인해 얻어지는
                                       결과물에 대한 무결성을 보장하지 못한다.


         2) 하이브리드 방식 : 순수 소프트웨어 방식의 RAID기능이 OS에 로드되기 전 안전하지 못한 점을 해결
                                 하기 위해 하드웨어와 혼합하여 구현하는 방식이다. 실제로 구현하는 일은 소프트
                                 웨어고 도움을 주는 하드웨어는 메인보드에 설정된 RAID BIOS이다. 해당 방식은
                                 결국 소프트웨어 방식이기 때문에 RAID 기능이 OS에 로드된 후 에러나 악의적인
                                 행위에 대한 안전은 보장 받지 못하며, 다른 시스템으로의 이전이 쉽지 않다. 또
                                 무결성 또한 보장받지 못한다.


아래는 소프트웨어 방식의 기본 구조이다.

[그림 9 - 소프트웨어 방식의 기본 구조]



[RAID 포렌식]
RAID 볼륨을 분석 할 때에는 어떻게 이미징을 해야하는지 선택 해야 한다. 각각의 디스크를 이미징해야 해야 하는지, 아니면 각 방식에 의해 생성된 볼륨을 이미징 해야 하는지 말이다. 각 방식에 따라 선택을 어떻게 해야 하는지 한번 알아 보자.

1. 하드웨어 방식
    - 해당 방식에서 사용하는 컨트롤러의 경우 비교적 저렴한 것도 있지만, 저렴하지 않은 것들도 있어 만약에 디스크를
       개별적으로 이미징 한 경우 컨트롤러를 구입하거나 자신이 사용하고 있는 것으로 RAID 볼륨을 생성하여 분석을 해야
       할 것이다. 하지만 만약 분석해야 할 시스템에서 고가의 컨트롤러를 사용하고 자신이 가지고 있지 않은 컨트롤러라면
       해당 컨트롤러를 구입해서 사용해야 하는데 그건 쉽지 않은 일이다. 그렇기에 개별적으로 디스크를 이미징 하는 것은
       이런 경우 좋지 못한 방법이다. 그렇다고 하여 디스크 이미징을 하지 않아서는 안된다. RAID 볼륨을 만들지 않고 디스
       크 자체를 제한적인 방법들(Strings Search)로 분석을 시도해야 한다. 어떠한 방식으로 이미징을 할 것인지 선택하였
       다면 이미징 수행을 해야 하는데 어떻게 해야 할까? 다양한 방법이 있겠지만 손쉬운 방법으로는 해당 컨트롤러 드라이
       버를 갖추고 있는 Live CD(Linux) 들로 부팅하여 수집하는 것이 있다. 

2. 소프트웨어 방식
    - 해당 방식의 컨트롤러의 경우 소프트웨어이기 때문에 디스크를 이미징하여도 되고 RAID 볼륨을 이미징하여도 크게
       문제는 되지 않는다.  

위 두 방식 모두 볼륨 이미징 방식을 포함하게 되는데 볼륨을 이미징 할 때에는 비 할당 영역도 세심하게 살피고 주의해야 한다. 



 

'[+] Forensic' 카테고리의 다른 글

File System (1)  (0) 2012.01.26
File System - Partition (7)  (0) 2012.01.25
File System - Partition (5)  (0) 2012.01.22
File System - Partition (4)  (0) 2012.01.20