***글의 시작에 앞서 해당 내용은 인프런 "디지털포렌식 입문자를 위한 디지털포렌식 전문가 2급 실기 시험대비"
강의를 듣고 정리한 내용입니다. 혹시 관심이 있으신 분들은 아래 링크를 참조해 주시기 바랍니다.***
https://inf.run/SRMh
정말 오랜만에 글을 적어 봅니다...
요즘 이것 저것 준비하느라 올린다고 한 것도 올리지 못하고 있네요 하하...(죄송합니다)
오늘은 강의를 들으면서 공부한 내용을 공유해 볼까 합니다.
이번에 들은 강의의 주제로는 포렌식을 본격적으로 시작하기에 앞서 기본적으로 알아둬야 할 내용들에 대해 배웠습니다.
그럼 시작하겠습니다!
1. 데이터 크기의 표현
우리가 실생활에서 사용하는 단위들이 여러 가지가 있는데요 예를 들어 길이를 표현하는 단위인 cm 혹은 km 등
그리고 무게를 나타내는 kg 등 여러가지 단위들을 사용하고 있습니다.
이렇게 실생활에서 많은 단위들을 사용하는데 저희는 특히 컴퓨터에서 파일이나 게임 등의 크기를 표현하는 데이터의
단위에 대해서 자세히 알아보겠습니다.
| Bit (비트) | 8 Bits = 1 Byte |
| Byte (바이트) | 1024 Bytes = 1 KB |
| KB (킬로바이트) | 1024 KB = 1 MB |
| MB (메가바이트) | 1024 MB = 1 GB |
| GB (기가바이트) | 1024 GB = 1 TB |
| TB (테라바이트) | 1024 TB = 1 PB |
| PB (페타바이트) | 1024 PB = 1 EB |
| EB (엑사바이트) | 1024 EB = 1 ZB |
| ZB (제타바이트) | 1024 ZB = 1 YB |
| YB (요타바이트) |
컴퓨터 파일 용량의 크기 단위는 위 테이블에 있는 단위들을 사용하며 맨 위 가장 작은 단위부터 아래로 내려갈수록
단위가 점점 커지게 됩니다.
단위 별 변환 방법은 Bit -> Byte로 변환할 때 빼고는 동일하게 1024를 기준으로 단위가 바뀌게 되어서 이 점만
기억해 주신다면 좋을 것 같습니다.
한번 예제를 통해서 알아봅시다.

위와 같이 32bit를 byte로 변환하고자 합니다.
위 표를 보시면 알 수 있듯이 8bit 하나 당 1byte인 것을 알 수 있습니다.
그럼 결국 8로 32를 나누어야 하니 32 / 8 = 4 즉, 답은 4byte인 것을 알 수 있습니다.

위의 예제는 GB를 2 단계 (KB -> Byte) 더 낮은 단위로 표현을 해보라는 것이기 때문에
위 테이블을 봤을 때 1GB = 1024KB이고 1KB = 1024Byte이기 때문에
결국 1024를 2번 곱해야 한다는 것을 알 수 있습니다.
결론적으로는 3 * 1024 * 1024 = 3145728Byte 가 되는 것을 알 수 있습니다.
2. 무결성
무결성의 사전적 정의는 아래와 같습니다.
"신뢰할 수 있는 서비스 제공을 위해서 의도하지 않은 요인에 의해 데이터, 소프트웨어, 시스템 등이 변경되거나 손상되지 않고 완전성, 정확성, 일관성을 유지함을 보장하는 특성."
TTA정보통신용어사전
https://terms.tta.or.kr/dictionary/dictionaryView.do?subject=%EB%AC%B4%EA%B2%B0%EC%84%B1
TTA정보통신용어사전
한국정보통신기술협회(TTA)는 정보통신 기술 발전과 타 분야와의 기술 융합에 따라 무수히 생성되는 정보통신용어를 해설하고 표준화하여, 전문가뿐만 아니라 비전문가들도 올바르게 활용할 수
terms.tta.or.kr
간단히 정리하자면 "어떤 요인으로 인해 내부에 저장되어있는 데이터에 결함(변경, 삭제 등)이 생기지 않게 유지하는 것"
이라고 볼 수 있다 생각합니다.
디지털포렌식 입장에서 바라봤을 때 무결성이 정말 중요한 이유는 바로 법정에 제출할 증거이기 때문입니다.
만약에 증거를 현장에서 취득하고 분석하는 과정 중에서 데이터가 변형이 일어나 나중에 법원에서 기존에 있는 원본과
비교했을 때 다르다는 사실이 밝혀진다면 증거능력이 사라져버려서 지금까지 한 모든 과정의 의미 자체가
사라져 버리게 됩니다.
위와 같이 변형이 일어났다는 사실이 밝혀지면 이러한 의문을 들 수 있습니다.
"고의적으로 뭔가 만들어 놓고 증거라고 말하는거 아니야?"
그렇다면 저희는 어떻게 "이 증거는 저희가 고의적으로 만든 것이 아니라 원래 그 컴퓨터에 있었습니다."를 증명할 수
있을까요?
아래의 두 가지 방식을 가지고 증명을 할 수 있습니다.
1. 해시(Hash)를 이용한 방법
해시는 단방향성 암호화를 하는 방식인데 이 해시의 특성은 값이 아주 조금이라도 변경이 된다면 완전히 다른 암호화된 문자열을 반환한다는 점이 있습니다. (MD5, SHA1 등을 사용합니다.)
그래서 맨 처음 증거를 수집하는 과정 중에서 수집한 증거를 해싱을 해서 그때 나온 문자열을 피압수자에게 보여주고 서명을 받고 나중에 가져온 증거를 조사를 하여 증거물을 취득하고 다시 해싱을 하여 나온 값이 이전에 나온 해시 값이랑
다른 것이 없다는 것을 증거물과 함께 보냄으로써 증거의 무결성을 증명할 수 있습니다.
2. 증거를 수집 및 봉인 이송과정이 적법한 방식으로 진행되었는지 증명
이건 부가적으로 하는 행위인데 정보 수집 부터 법원에 제출하기까지의 모든 과정이 법을 잘 따르면서 진행이 되었다는 것을 문서, 사진, 영상 등으로 남겨두는 것을 의미합니다.
원래 증거를 취득하는 것 부터 법원에 제출하기까지의 모든 과정 중 하나라도 법에 따라 진행되지 않았다면 그 증거능력이 사라지게 되어서 이러한 모든 과정이 다 법을 따라 진행된 것이 증명되면 무결성을 증명할 수 있습니다.
3. 쓰기 방지
쓰기 방지는 말 그대로 USB나 하드 디스크 등이 연결이 되는 순간 의도치 않게 변형이 일어날 수 있기 때문에 원본매체가 읽기만 가능하고 쓰기 기능은 불가능하게 하기 위해서 하는 작업입니다.
***그래서 이거는 정말 가장 먼저 무조건 해야하는 작업입니다!!***
4. 파일시스템
파일시스템은 컴퓨터에 있는 파일이나 자료를 쉽게 찾고 접근할 수 있도록 하는 체계입니다.
쉽게 말해서 운영체제가 하드디스크에 데이터를 어떻게 기록하고 어떻게 읽어 들이며 어떻게 삭제할 것인지에 대한 약속을 의미합니다.
그래서 각 운영체제에서 사용하는 파일시스템의 종류도 다 다릅니다.
Windows : FAT, NTFS, exFAT 등
MacOS : APFS
Linux : EXT
5. 레지스트리
레지스트리는 윈도우 운영체제의 설정(파일 확장명 보기 기능, 환경변수 등)과 선택 항목, 그리고 응용프로그램이
동작하기 위해 사용되는 데이터 등에 대한 정보가 담겨 있는 계층형(폴더 구조) 데이터베이스입니다.
사용자가 제어판 설정, 파일연결, 시스템 정책, 또는 설치된 소프트웨어를 변경하면 변경 사항이 레지스트리에 반영이
되어서 디지털포렌식에서 정말 중요한 부분이자 많은 정보를 얻을 수 있는 공간이라고 생각합니다.
레지스트리에서 얻을 수 있는 정보들로는 아래와 같은 것들이 있습니다.
1. 윈도우 설치정보와 계정 정보
2. 부팅할 때 자동실행되는 프로그램 정보
3. 최근 사용한 파일, 실행 프로그램 등의 사용자 활동 내역
4. 시스템에 사용한 하드웨어 정보(USB 등의 연결 흔적)
위 값들은 레지스트리 편집기를 통해서 확인이 가능합니다.
6. 타임라인
분석을 해야 하는 기기에서 무슨 일이 일어났는지 시간별로 표현하여 앞에 무슨일이 있었고 후에 무슨일이 있었는지에 대해 쉽게 파악하기 위한 포렌식 분석 방법입니다.
7. 와이핑 & 디가우징
위 두 가지는 하드디스크를 사용하지 못하게 하거나 복구를 못하게 하는 기법들입니다.
1. 와이핑
하드디스크와 같은 저장매체에 다른 데이터를 계속 덮어써서 삭제된 파일을 복구할 수 없게끔 만드는 방식입니다.
만약 분석을 하는 중에 'wipe'나 Eraser 등의 단어가 포함된 프로그램이 있다면 이러한 행위를 시도하려고 했거나
이미 했다고 볼 수 있습니다.
2. 디가우징
디가우징은 하드디스크가 자기장을 사용하여 기록하는 특성을 이용하여 일정 수준 이상의 자기장에 하드디스크를
노출시켜 사용할 수 없는 상태로 만드는 방식을 의미합니다.
8. 2진수와 16진수
일반적으로 우리가 사용하는 숫자 표현법은 0 ~ 9까지의 숫자를 조합하여 표현하는 10진법을 사용합니다.
이와 같이 위 두 가지는 숫자를 표현하는 방식들을 의미합니다.
1. 2진수
아래와 같이 2진수는 0과 1 두 가지로 모든 숫자를 표현하는 방식을 의미합니다.
00 = 0
01 = 1
10 = 2
11 = 3
이제 예시를 통해서 2진수를 우리가 사용하는 10진수로 변형하는 방법을 알려드리겠습니다.
시작하기에 앞서 아래의 사진을 한번 봐주시기 바랍니다.

우리는 10진수인 365를 표현할 때 위 사진과 같이 표현이 가능합니다.
1의 자리 숫자면 10의 0승, 10의 자리 숫자면 10의 1승, 100의 자리 숫자면 10의 2승
위 방식을 봤을 때 두 가지 규칙을 발견할 수 있습니다.
- 자릿수가 늘어날수록 제곱 부분이 0부터 시작하여 1씩 커지는 것을 볼 수 있습니다.
- 10진수라서 10을 기준으로 합니다
진법 변환의 핵심이 되는 위 두 규칙을 잘 기억해 두시기 바랍니다.

위 예제를 가지고 2진수를 10진수 형태로 변형해 보겠습니다.
앞서 말씀드린 방법을 사용해서 표현하자면 아래와 같을 것입니다.
1010 = 2^3 * 1 + 2^2 * 0 + 2^1 * 1 + 2^0 * 0
그렇다면 결론적으로 8 + 0 + 2 + 0가 되는 것이니 답은 10이 됩니다.
컴퓨터에서 0 혹은 1 하나의 크기는 1Bit 임을 기억해 주시기 바랍니다.
2. 16진수
16진수는 0 ~ 9 그리고 A ~ F까지 총 16개로 모든 숫자를 표현하는 방식입니다.
여기서 유의할 점은 A = 10, B = 11, C = 12, D = 13, E = 14, F = 15 임을 기억해야 합니다.
그리고 16진수는 표현할 때 맨 앞에 0x를 붙여서 "이것은 16진수이다"라는 것을 표현합니다.
이번에도 예제를 보고 16진수를 10진수로 변환해 보겠습니다.

위 예제도 앞서 말씀드린 규칙들을 대입해 보면 아래와 같이 나오게 됩니다.
0x13F = 16^2 * 1 + 16^1 * 3 + 16^0 * 15 = (256 * 1) + (16 * 3) + (1 * 15)
그럼 결국 256 + 48 + 15가 되므로 답은 319가 답이 되는 것을 알 수 있습니다.
컴퓨터에서 16진수 한 글자의 크기는 4bit임을 기억해 주셨으면 좋겠습니다.
16진수 한 글자가 표현할 수 있는 수 = 0 ~ F = 0 ~ 15 즉 16가지
2진수 4 자릿수가 표현할 수 있는 수 = 0000 ~ 1111 = 0 ~ 15 즉 16가지 = 4bit
표현범위
16진수 한 글자 = 2진수 4자릿수
9. 엔디안
엔디안은 데이터를 컴퓨터에 기록하는 방식을 의미합니다. 엔디안의 종류로는 빅 엔디안, 리틀 엔디안이 있습니다.
1. 빅 엔디안
빅 엔디안은 큰 단위부터 컴퓨터에 기록하는 방식으로 사람이 읽는 방식과 동일합니다.

가장 앞에 있는 숫자가 가장 큰 자릿수라서 가장 큰 단위가 됩니다.
RAM 같은 경우 1byte 단위로 저장 공간이 나뉘어 있어서 16진수 2 글자씩 하나의 세트가 되어 저장된다 생각하시면
됩니다. 그래서 결과적으로 0x12ABCD5F가 빅 엔디안 방식으로 저장되면 0x12ABCD5F 모양 그대로 저장이 됩니다.
2. 리틀 엔디안
리틀 엔디안은 빅 엔디안과 다르게 작은 단위부터 컴퓨터에 기록하는 방식으로 컴퓨터(인텔, AMD CPU)에서 주로 사용하는 방식입니다.

가장 뒤에 있는 자릿수가 가장 작은 값이므로 가장 뒤에부터 저장이 됩니다.
그럼 결과적으로 0x12ABCD5F가 리틀 엔디안 방식으로 저장이 된다면 0x5FCDAB12로 저장이 되는겁니다.
10. 물리와 논리
포렌식에서 물리와 논리라는 표현은 다음과 같이 구분하면 됩니다.
1. 물리 : 하드웨어적인 느낌으로 해석하면 된다.
2. 논리 : 실제 하드웨어가 아닌 실체가 없는 가상의 구분 정도로 해석하면 된다.
아래 예제를 보면 더 이해하기 쉬울 것입니다.
1500GB 용량의 하드디스크가 있는데 이를 500GB씩 C드라이브, D드라이브, E드라이브로 나눴다고 하면
- 1500GB 용량의 하드디스크 = 물리 드라이브
- C, D, E 드라이브 : 각각 논리 드라이브 (뭔가 실제로 하드를 물리적으로 나눈 것이 아니라 컴퓨터가 구분지어 놓은 것)
파일 또한 물리 용량, 논리 용량 이런 것이 있습니다.
위 두 용량을 확인하고 싶다면 아무 파일 하나만 오른쪽 클릭을 후 속성을 확인해보면 됩니다.

위 그림에서 봤을 때 "크기"와 "디스크 할당 크기" 두 가지가 있는 것을 볼 수 있는데요 크기와 디스크 할당 크기는
아래와 같은 의미를 가지고 있습니다.
- 크기 = 실제 용량 = 논리 용량
- 디스크 할당 크기 = 하드디스크에서 저장되면 차지하는 용량 = 물리 용량
그럼 파일은 하나인데 크기, 디스크 할당 크기가 왜 나뉘고 이 둘은 어떤게 다를까요?
이것은 아래 섹터와 클러스터 이야기를 할때 마저 설명 드리겠습니다.
11. 이미징
이미징은 컴퓨터의 상태를 그대로 파일 형태로 복제해서 저장해 놓는 방식을 말합니다.
그럼 해당 이미징 파일 안에는 컴퓨터에 깔려 있던 프로그램들 그 안에 있었던 모든 기록들이 저장되어 있는 것입니다.
그리고 복사와 복제의 차이점을 확실히 하셔야 하는데요 복사와 복제의 의미는 아래와 같습니다.
- 복사 : 원본 데이터(파일, 프로그램 등)만 가져다가 다른 저장장치에 옳겨진 상태
- 복제 : 원본 데이터가 저장되어 있는 위치와 동일한 위치(하드디스크 상 저장된 위치) 그대로 다른 저장장치에 옳겨진 상태

복제와 이미징의 차이는 파일형태로 저장되느냐 아니면 물리적으로 저장되느냐의 차이입니다.
12. 섹터와 클러스터
저장 매체 하면 또 섹터와 클러스터를 빼놓을 순 없죠
섹터와 클러스터는 저장되는 단위에 대한 것인데 밑에서 자세히 이야기 해보겠습니다.
1. 섹터
섹터는 저장매체에서 사용하는 최소 저장 단위이고 그 크기는 일반적으로 512bytes 입니다.
해당 섹터의 크기는 변경이 가능하지만 웬만한 경우에서는 변경하지 않는다고 합니다.
2. 클러스터
클러스터는 원형 그대로 해석하자면 "무리", "군집"등의 의미를 가지고 있습니다. 즉 클러스터는 섹터들이 여러개 모여있는 것을 의미합니다.
Windows에서는 파일을 저장매체에 저장할 때 클러스터 단위로 저장을 하게끔 지정해 놓았습니다.
앞서 말씀 드린 크기, 디스크 할당 크기로 나뉘는 이유와 이 둘 사이에는 무슨 차이가 있는지 예시를 들어가며
설명 드리겠습니다.
만약 600Bytes의 크기의 파일이 저장된다 생각을 해보면 섹터 2개가 파일을 저장하는데 필요할 것입니다.
이것을 그림으로 표현하자면 아래와 같습니다.

실제 파일의 크기는 600Bytes인데 하드디스크 상에서 차지된 공간은 1024bytes가 됩니다.
앞서 보여드렸던 사진을 예로 들자면(디지털포렌식 공부 5.txt) 텍스트 파일의 실제 크기는 3.73KB이지만 해당 파일을
저장하기 위해서 디스크에 할당한 크기는 4KB 즉 섹터 8개가 모인 클러스터 한개가 사용된 것입니다.
마지막으로 할당 되었지만 빈 공간은 다른 파일이 할당될 수 없게 운영체제에서 막아놓습니다.
13. UTC
UTC는 협정 세계시의 약자로 세계가 표준으로 사용하는 기준 시간입니다.
시간 이야기가 나온 이유는 디지털포렌식을 할 때 외국에 위치한 컴퓨터를 한국으로 가져와 분석을 한다면 시간 기준이 다르기 때문에 우리나라 기준으로 바꿔줘야 할 필요성이 있고 뿐만 아니라 시간이 정확하지 않을 수 있어서 이는 증거의 신뢰성을 낮게 만들 뿐만 아니라 증거능력을 인정받지 못할 수 있기 때문에 시간차 확인은 꼭 해줘야 합니다.
UTC + n 혹은 UTC - n 이라고 표기가 되며 의미는 기준 시간(UTC+0)으로 부터 n시간 더해주거나 빼주면 된다.
14. 로그
로그는 컴퓨터 시스템이 프로그램이나 운영체제를 사용한 것을 시간별로 기록한 파일을 의미합니다.
어떤 이벤트가 발생을 했을 때 무엇이 언제 발생 되었는지 자동으로 기록을 하게 됩니다.
이러한 로그가 중요한 이유는 사용자가 무슨 일을 했는지 알 수 있고 뿐만 아니라 증거 능력이 있기 때문에 로그는 정말로 중요한 정보입니다.
15. (Creation, Access, Modify) Time
위 세 가지 시간은 어떤 파일이나 프로그램이 언제 생성이 되었고, 언제 열렸고, 언제 수정되었는지에 대한 시간 정보를
의미합니다.
일반적으로 Creation Time이 Access나 Modify Time 보다 더 빠른 시간으로 기록된다 생각합니다.
물론 이 말도 맞지만 예외적으로 더 늦은 시간으로 기록되는 경우가 있는데 그 경우는 아래와 같습니다.
- 파일이 다른 디스크로 복사 되었을 경우 : C:에서 D:로 옮겨졌을 때 A, M Time은 보존이 되나 D드라이브에 없던게
생긴 것 이므로 C Time은 변경 됩니다.
- 파일 압축 해제 : 압축되기 전 A, M Time은 보존이 되지만 압축을 풀면 새로 생성이 되는 것이니까
C Time은 변경이 됩니다.
- 파일 다운로드 : 파일을 올린 게시자가 수정하거나 열었을 때의 시간은 보존이 되지만 다운로드를 하면 없던게
생긴거니까 C Time은 변경 됩니다.
16. EXIF(Exchangeable Image File Format)
디지털 기기를 사용해서 사진을 찍었을 때의 시간, 기종, 위치 등의 정보들을 담고 있는 포맷입니다.
사진과 함께 있는 정보라서 위와 같은 정보들은 포렌식 분석에 도움이 됩니다.
휴대폰으로는 사진의 상세 정보를 통해 해당 정보를 볼 수 있습니다.
17. 스테가노그래피
스테가노그래피는 정말 간단하게 사진 안에 또 다른 사진, 파일, 프로그램 등등을 숨겨놓는 기술을 의미합니다.
겉으로 봤을 때는 그냥 평범한 사진처럼 생겨서 속을 수 있습니다.
18. 안티 포렌식
안티 포렌식은 간단히 말해서 포렌식을 하기 힘들게 만드는 행위입니다.
주로 저장 매체를 망가뜨리거나 변조나 은닉 혹은 삭제 덮어쓰기 등의 행위들이 있습니다.
앞서 설명드린 와이핑, 디가우징, 스테가노그래피도 이에 해당하며 0의 값으로 저장장치를 덮어 버리는 제로필 등의
공격도 있습니다.
19. Windows Artifact
Windows Artifact는 윈도우에서 운영체제나 애플리케이션을 사용하면서 생성되는 흔적들을 의미합니다.
이는 시스템이 자동으로 생성하는 것이기 때문에 증거 능력이 있으며 앞서 말씀 드린 로그가 이에 해당합니다.
종류로는 아래와 같은 것들이 있습니다.
- 레지스트리
- 이벤트 로그
- LNK파일
- Jumplist 등
'디지털포렌식' 카테고리의 다른 글
| 부팅 과정과 MBR, VBR (0) | 2024.09.23 |
|---|---|
| 디스크, 파티션, 볼륨의 구분 (0) | 2024.09.21 |
| 디지털포렌식전문가 2급 자격증 후기 (0) | 2023.10.25 |
| 1. 디지털포렌식의 시작 (0) | 2023.10.25 |