디지털 포렌식과 해시(Hash)
DFIR/기타 개념

디지털 포렌식과 해시(Hash)

디지털 포렌식에서 매우 중요한 역할을 하고 있는 해시(Hash)는 무엇인지, 디지털 포렌식에서의 역할은 무엇인지 알아보겠습니다.


해시 함수

해시 함수에 데이터를 넣었을 때 나오는 결과 값을 해시 값, 해시, 해시 코드 등으로 부릅니다.

그렇다면 해시 함수는 무엇일까요?

해시 함수는 임의의 길이의 데이터를 고정된 길이의 데이터로 매핑하는 함수입니다.

쉽게 말해서 어떤 데이터를 넣어도 해시 함수의 종류에 따라 정해진 길이의 결과 값으로 반환하는 함수입니다.

해시 함수의 종류에는 MD5, SHA1, SHA256, SHA512 등 많은 종류가 있습니다.

 

"hello"의 MD5 Hash 값

MD5 해시 함수는 항상 128bit 의 결과 값을 반환합니다. 하지만 위 사진을 보면 32char 인 것을 알 수 있습니다.

128bit = 16byte 인데 32char가 나오는 이유는 MD5의 결과 값이 16진수라서 4bit에 1char씩 표현하여 32자가 나오는 것이라고 합니다.

 

"i am present4n6"의 MD5 Hash 값

위 사진을 보면 역시 32char의 결과 값을 보이고 있습니다. 해시 함수는 어떤 입력 값이 들어와도 고정된 길이의 결과물을 반환하는 것을 알 수 있습니다.

 


 

해시 함수의 안전성을 갖추기 위한 3가지 성질

 

제 1 역상 저항성(Pre-image resistance)

 

제 1 역상 저항성

제 1 역상 저항성은 해시 값 y를 알고 있을 때, 입력 값 x가 무엇인지 알아내기 힘든 성질입니다. 이를 일방향성이라고도 합니다.

 

제 2 역상 저항성(2nd Pre-image resistance)

 

제 2 역상 저항성

제 2 역상 저항성은 주어진 x1과 y의 값을 알고 있을 때 같은 값 y가 나오는 x2를 찾기 어려운 성질입니다.

 

충돌 저항성(Collision resistance)

 

충돌 저항성

충돌 저항성은 같은 결과값 y가 나오는 입력값 x1과 x2를 찾아내기 어려운 성질입니다.

 


 

해시 값이 충돌하는 경우?

 

위에서 3가지 성질을 이야기할 때 왜 찾아내기 어려운 성질이라고 했을까요? 사실 해시 함수는 같은 결과 값이 나오는 또 다른 입력 값이 전혀 존재하지 않는 것이 아닙니다. 해시 함수는 정해진 크기 안에서 계산이 되는 것이기 때문에 성능이 뛰어난 컴퓨터들을 사용하여 수 많은 데이터들을 넣다 보면 언젠가는 충돌 쌍을 찾을 수 있기 마련입니다. 그래서 이러한 점을 해결하기 위해 해시 함수의 공간을 더 크게 잡아서 충돌 쌍을 찾는데 걸리는 시간을 매우 오래 걸리게 하는 방법이 있습니다.

 

SHA1 해시 값이 같은 파일 쌍

위 사진을 보면 shattered-1.pdf 파일과 shattered-2.pdf 파일의 내용(좌측 이미지)이 다름에도 불구하고 같은 SHA1 값을 가지는 것을 알 수 있습니다. 이렇게 해시 값은 어떤 고유한 파일만이 가지는 절대적인 값이 아니라는 것을 알고 있어야 합니다. SHA1과 MD5 해시 함수는 실제로 이미 충돌하는 쌍을 구할 수 있기 때문에 안전하지 않다고 판단하여 새로운 시스템에서는 사용을 자제하도록 권고하고 있으며 SHA2나 SHA3과 같은 해시 함수를 권장하고 있습니다.

그렇다면 MD5와 SHA1 해시 함수는 전혀 쓸모 없는 함수가 되어버린걸까요? 또 그렇지는 않습니다. 충돌하는 쌍을 찾아내는 것은 가능하지만 원하는 데이터를 유지하면서 같은 해시 값을 만들도록 하는 것은 매우 어려운 문제이기 때문입니다. 그래서 아직까지도 기존 시스템에서는 MD5나 SHA1과 같은 해시 함수를 사용하고 있는 것입니다.

 


 

해시 값을 구하는 방법

 

1. HashCalc 프로그램

hashcalc 프로그램

https://www.slavasoft.com/hashcalc/ 에서 hashCalc 프로그램을 다운로드 받을 수 있습니다. HashCalc는 입력 값으로 텍스트나 파일을 넣을 수 있습니다.

 

2. Windows PowerShell

PowerShell

윈도우즈 파워쉘에서 Get-FileHash 명령어를 통해 파일의 해시 값을 구할 수 있습니다.

리눅스에서는 md5sum [FileName] 과 같은 방법으로 해시 값을 구할 수 있습니다.

 

3. HashTab

HashTab

http://implbits.com/products/hashtab/ 경로에서 HashTab을 설치하면 파일의 속성에서 해시 값을 확인할 수 있습니다. 설정을 통해 다양한 해시 함수들을 사용할 수 있으며 다른 파일과 해시 값을 비교하는 것도 가능합니다.

 


 

디지털 포렌식과 해시

 

이제 해시에 대해서 이해가 되었을것이라 보고 디지털 포렌식에서의 해시가 가지는 의미를 알아보겠습니다.

디지털 포렌식에서 가장 중요하게 여기는 것 중 하나는 무결성입니다. 무결성은 쉽게 얘기해서 데이터가 변조되지 않았음을 의미합니다.

디지털 포렌식 과정에서 증거를 수집하였는데 이 증거가 나중에 변조가 되었다면 변호인 측에서 납득하기 어려운 것이 사실입니다. 변호인측에서 수사관이 범죄를 입증하기 위해 데이터를 조작했다고 주장할 수 있게 되는 것입니다.

아날로그 증거물은 사진을 찍어놓는 방식 등을 통해 변조된 사실을 손쉽게 파악이 가능합니다. 하지만 저장매체 속의 데이터는 눈에 보이지 않기 때문에 변조되었는지 알기가 어렵습니다. 그래서 이 증거 데이터가 증거 수집 단계에서 법정 제출까지의 과정 중 변조가 되지 않았음을 증명하기 위해 사용하는 것이 바로 해시 값입니다.

증거 수집 단계에서 일차적으로 해시 값을 구하고, 추후 법정에서 증거의 해시 값과 수집 단계에서 기록한 해시 값이 일치하다는 것을 보일 수 있다면 그 증거의 무결성을 입증할 수 있게 되는 것입니다.

위와 같은 이유 때문에 해시를 사용해서 증거의 무결성을 보장할 수 있다고 말할 수 있습니다.

해시 값을 통해서 디지털 증거가 변조되지 않았음을 입증받은 첫 판례나 증거 수집 단계 이후로 해시 값이 바뀌었지만 증거로 인정받은 판례 같은 것들이 있는데 이에 대해서는 추후 판례 리뷰를 통해서 포스팅 하겠습니다.

'DFIR > 기타 개념' 카테고리의 다른 글

VMware Drag and Drop File 경로  (0) 2022.05.27
Falcon NEO 디스크 이미징 수행 과정  (0) 2022.01.10
디지털 포렌식 맛보기#2  (0) 2021.07.06
디지털 포렌식 맛보기#1  (0) 2021.06.27
클러스터(Cluster)  (0) 2021.06.22