## Introduction
SSD(Solid State Drive)는 기존 하드 디스크 드라이브(HDD)에 비해 다양한 이점을 제공하기 때문에 컴퓨팅 분야에서 점점 더 인기를 끌고 있다.
SSD는 더 빠르고, 내구성이 뛰어나며, 전력 소모량이 적어 많은 사용자가 선호하는 제품이다.
그러나 모든 전자 장치와 마찬가지로 SSD도 수명과 최적의 성능을 보장하기 위해 유지보수가 필요하다.
이러한 유지관리 기술 중 하나는 TRIM을 사용하는 것이다.
우리는 이번 글에서 TRIM 기술이 어떤 식으로 동작하는지 학습할 것이고
디지털 포렌식을 접함에 있어 TRIM 이 설정되어 있는 경우 분석 방식에 대한 이해를 돕고자 한다.
## What is Media Storage?
TRIM을 설명함에 있어 저장 매체에 대한 개념이 선행되어야 한다.
저장 매체를 사용함에 있어 반도체 방식과 자기 방식을 포함하는 모든 방식에 있어서 고려되어야 하는 것은 뭘까?
이는 저장매체의 발달사를 알아본다면 쉽게 이해할 수 있다.
초기 저장매체는 흔히 말하는 테이프였다. 사진 촬영도 테이프 형태의 필름으로 이루어졌다.
다음 등장한 저장 매체는 바로 광학 저장 방식인 CD이다. CD는 디스크 영역을 빛으로 각인하여 높낮이를 이용하는 저장 방식이다.
위 두 방식의 공통점은, 일회성이라는 것이다. 한번 작성하여 저장한다면, 읽는 것에는 문제가 없지만 기존 파일을 수정하거나 남는 공간에 새로운 파일을 저장하는 것이 아니라, 꽉찬 공간에 새 파일을 작성할 때 문제가 된다.
그렇다면 현재 우리가 사용하는 저장 매체는 어떤 방식으로 이루어져 있는가?
하드디스크에 파일을 쓸때 우리는 크게 3가지의 기능을 갖는다.
1. 생성
2. 삭제
3. 수정
위에서 설명한 CD나 테이프의 경우 생성은 가능하지만, 수정과 삭제가 불가능 경우라고 생각하면 된다.
그렇다면 다시 한번 생각을 해 보자. 과연 삭제와 수정을 염두에 두지 않고 만든 것일까?
그건 아니다. 기술적인 한계로 인해 해당 기능을 구현하지 못했을 뿐 기술력이 해결된 뒤에는 수정과 삭제가 가능하기 때문이다. 여전히 CD / 테이프와 같은 저장 매체에서는 파일에 대한 삭제나 수정을 수행할 수 없다.
이제 점점 메인 주제로 흐름이 오고 있다.
삭제와 수정은 어떻게 이루어지는가? HDD의 경우 자기 방식을 활용하기 때문이 N-S 자기장을 S-N 방향으로 전환하거나 새로 작성하는 헤드가 존재한다.
즉 기존에 있던 데이터는 초기 상태로 되돌리거나, 수정할 수 있는 것이다.
( 테이프나 CD는 각인시키는거라 다시 회복시킬 수 없다.)
SSD는 어떤 방식으로 삭제와 수정을 하는가?
SSD는 플래시 메모리를 사용하고 있기 때문에 특정 영역을 컨트롤러가 전자기적 행위를 통해 기록한다. 특정 영역을 0으로 통일하면 삭제, 변경된 데이터로 수정하면 수정기능이 되는 것이다.
여기서 “영역” 이라는 말을 의미갚게 가져가야 한다.
## How Does TRIM Work?
SSD의 구조는 3단계로 구성되어 있다.
하나의 비트 신호를 저장하는 “셀”
셀들의 집합으로 구성된 “페이지”
페이지들의 집합으로 구성되는 “블록”이다.
실제로 SSD 의 동작은 셀 단위가 아닌 페이지 단위로 이루어지며 바이트 단위의 읽기/쓰기를 요청하더라도 하나의 페이지를 읽은 뒤 페이지 내의 바이트를 반환하는 형식이다.
작은 크기를 읽을때는 비효율적으로 보일 수 있으나, 대부분 파일 단위로 넘어가게 되면 이와 같이 페이지 단위로 I/O를 처리하는 것이 효율적이다.
즉 페이지 단위로 삭제도 수행되기 때문에 일반적으로 삭제하더라도 마킹만 해놓을 뿐 실질적으로 삭제하지는 않는다. 왜냐하면 SSD는 쓰기 읽기 속도에 비해 지우는 속도가 느리기 때문이다.
대표적으로 삼성전자의 최신 SSD를 가져와서 볼 때 스펙은 아래 사진과 같다.
![[%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA_2023-05-31_%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE_8.59.43.png]]
그치만 Block Erase 에 걸리는 시간은 3.5ms로 한 블록이 512kb라는 점을 감안할 때
한 150mb/s 정도의 속도이다.
따라서 매번 수요에 따라 삭제를 할 경우 처리 속도가 매우 느려지게 될 것이고, 미리 삭제 과정을 해놓는 것이 효율적이다. 일반적으로는 GC(Garbage Collection)과 같은 기능인데 TRIM이 미리 빈 영역을 만들어 GC와 같은 기능을 하는 것이다.
그렇다면 TRIM이 설정되어 있는지는 어떻게 확인할까?
다음 명령어를 이용하면 된다.
결과가 0인경우 활성화, 1인경우 비활성화 이다.
```
fsutil behavior query DisableDeleteNotify
```
그렇다면 TRIM이 해제되어 있는 경우 활성화 시키는 방법은 뭘까?
다음 명령어를 사용하면 된다.
```
fsutil behavior set DisableDeleteNotify 0
```
## Benefits of TRIM
TRIM의 기능을 설명하며 이야기했듯
TRIM은 미리 쓰기가 가능한 공간을 생성하여 삭제/수정 과정에서 필요로 하는 높은 작업량을 미리 덜어놓는 방식이다. 따라서 전체적인 읽기/쓰기 성능이 향상되는 효과가 있다.
이런 점은 컴퓨터 상식 영역에서 필요한 지식이고, 우리는 디지털 포렌식 관점에서 TRIM을 바라볼 것이다.
## Drawbacks of TRIM
디지털 포렌식 관점에서 TRIM을 바라봐 보자.미리 데이터를 사용가능한 상태로 세팅해 놓는다는 것은 데이터를 미리 삭제한다는 점이다. 즉 데이터를 복원해야 하는 디지털 포렌식 입장에서는 TRIM을 하나의 안티포렌식 행위로 규정할 수 있을 것이다. 하지만 법률상으로 문제가 되는 것은 아니다. 사용자가 고의적으로 삭제한 것은 아니기 때문이다.
그렇지만 위에서 소개한 TRIM을 실행하는 명령어를 EventLog 내의 명령어 기록에서 찾거나, TRIM 강제 실행 흔적을 찾는다면 이는 안티 포렌식 행위로 규정할 수 있을 것이다.
또한 RAID로 구성된 SSD의 모음이나, 특정 운영체제에서는 TRIM이 사용 불가능하다는 점도 단점이 될 수 있겠다. 물론 이때의 단점은 사용 성능상에서의 단점이지만, 디지털 포렌식 관점에서는 이득이 될 수도 있다고 생각한다.
TRIM을 지원하는 운영체제는 다음과 같다.
- Windows 7 이후
- macOS
- Linux
Windows 7 이전 버전의 운영체제를 제외한다면 대부분의 운영체제는 TRIM을 지원한다고 생각하면 편리하겠다.
## Conclusion
SSD의 구성, TRIM의 동작 원리, 실행 방법과 장/단점들에 대해서 알아보았다.
TRIM기능으로 인해 SSD에서는 영구적으로 삭제된 데이터를 찾을 수 없다는 생각을 가지는 사람들이 많을 것이다.
틀린 사실은 아니지만, 정확히 어떤 환경에서 SSD가 사용되며 백업된 데이터는 없는지 찾아보는 과정이 수행된다면 SSD 내에서도 삭제된 데이터를 충분히 복구할 수 있을 것이다.