
steghide
steghide는 데이터를 이미지나 오디오 파일에 숨길 수 있는 스테가노그래피 툴이다. steghide를 사용하면 간단한 텍스트부터 exe 같은 실행 파일까지 명령어 한줄로 손쉽게 숨길 수 있다. steghide는 AES 암호화 + 압축 기능을 제공해 단순히 데이터를 은닉하는 것을 넘어서 다른 사람이 은닉된 데이터를 탐지하기 매우 어렵게 만들 수도 있다.
mimikatz.exe 이미지에 숨기기
mimikatz는 메모리에서 패스워드, 해시, kerberos 티켓, 인증서 등을 추출할 수 있는 윈도우용 크리덴셜 덤핑 툴이다. 실제로 mimikatz를 사용해서 해킹한 사례들도 매우 많다. 너무 유명한 툴이기 때문에 웬만한 anti-virus 프로그램은 mimikatz를 악성 파일로 인식한다. steghide를 사용해서 mimikatz를 이미지 파일 안에 숨겨보자.
steghide embed -ef <은닉하려는 데이터/파일> -cf <데이터/파일을 숨길 이미지/오디오>
-ef 은닉하려는 데이터나 파일
-cf 데이터나 파일을 숨길 이미지, 오디오 파일
mimikatz를 숨길 이미지 파일:

용량: 14MB
md5: 8eacbf08770df93637a704edc69410ee
┌─[solo@parrot]─[~/Desktop/blog/tool/steghide]
└──╼ $steghide embed -ef mimikatz.zip -cf cover_image_upscale.jpg

mimikatz가 숨겨진 이미지 파일:

용량: 16MB
md5: 0da200099191dcb24488c0df13620263
용량이 2MB만큼 늘어나고 md5 해시값도 변했다. 이미지 파일의 픽셀 일부분이 분명히 변했지만 사람의 눈으로 포착할 수 없다. 해당 이미지 파일은 압축된 mimikatz를 포함하고 있다. 다만, steghide를 사용해서 은닉할 수 있는 데이터의 용량이 매우 제한적이기 때문에 mimikatz를 압축하고 이미지 파일을 업스케일링 해서 일부로 용량을 늘리는 과정을 거쳐야 했다.
mimikatz를 암호화 해서 이미지에 숨기기
steghide를 사용해 이미지에 파일이나 데이터를 숨기면 방화벽이나 anti-virus 프로그램을 우회할 수 있다. 하지만 만약에 누군가 binwalk 같은 툴을 사용해 해당 이미지 파일을 검사하면 손쉽게 숨겨진 파일이나 데이터를 포착할 수 있다. (binwalk는 firmware 이미지를 검사하는 툴이지만 해당 기능을 사용해서 바이너리 파일에 숨겨진 데이터를 포착할 수도 있다) steghide는 데이터를 AES로 암호화 해서 은닉할 수 있는 기능을 제공한다. steghide의 암호화 기능을 사용해서 데이터를 은닉하면 binwalk 같은 포렌직 툴을 사용해도 은닉된 데이터를 포착할 수 없다. 혹시라도 이렇게 암호화 된 데이터를 은닉해도 포착 가능한 기법이 있다면 댓글로 알려주면 매우 매우 고마울 것 같다...!
steghide embed -ef <은닉하려는 데이터/파일> -cf <데이터/파일을 숨길 이미지/오디오> -p <비밀번호>
방식은 매우 간단하다. 비밀번호만 지정해 주면 steghide가 알아서 AES로 데이터를 암호화 한다.
┌─[solo@parrot]─[~/Desktop/blog/tool/steghide]
└──╼ $steghide embed -ef mimikatz.zip -cf cover_image_upscale_aes.jpg -p "solo"


용량: 16MB
md5: 2092e3263ab64d706a043438de7c7eb0
은닉에 사용한 이미지 파일은 위에 사용한 cover_image.jpg와 이름만 다른 똑같은 파일이다. 용량은 변함없이 2MB만큼 늘어났지만 md5 해시값은 전혀 다른 값이 되었다. 이를 통해서 똑같이 mimikatz.zip 파일을 은닉했지만 AES 암호화로 인해 비트가 변경된 데이터가 저장됐다는 것을 알 수 있다.
은닉된 데이터 추출하기
은닉한 데이터는 steghide를 사용해서 간단히 추출할 수 있다. 물론 음흉(?)하게 데이터를 숨기고 즐기는 성향이라면 추출할 필요하지 않을 수도 있다;;
steghide extract -sf <데이터/파일이 숨겨진 이미지/오디오> -xf <추출한 데이터/파일명>
┌─[solo@parrot]─[~/Desktop/blog/tool/steghide/extract]
└──╼ $steghide extract -sf cover_image_upscale.jpg -xf mimikatz.zip

AES를 사용해서 은닉한 데이터나 파일은 암호화할 때 지정한 비밀번호를 사용해서 추출하면 된다.
┌─[solo@parrot]─[~/Desktop/blog/tool/steghide/extract]
└──╼ $steghide extract -sf cover_image_upscale_aes.jpg -xf mimikatz.zip -p solo

결론
steghide는 명령어 한줄로 데이터를 쉽게 은닉할 수 있는 리눅스 스테가노그래피 툴이다. 하지만 steghide를 사용하기 전 유의해야 될 점이 몇가지 있다.
1.
steghide는 오직 이미지/오디오 파일에만 데이터를 숨길 수 있다. 만약 비디오 파일처럼 이미지/오디오 외 다른 파일에 데이터를 은닉하고 싶으면 다른 스테가노그래피 툴을 사용하던가 사용자 본이이 직접 코드를 짜서 데이터를 은닉해야 한다.
2.
steghide를 사용해서 은닉할 수 있는 데이터의 용량은 매우 제한적이다. 단순한 메세지나 데이터를 은닉하는 것은 문제가 되지 않지만 exe 같은 실행 파일은 은닉하기 위해선 아주 큰 용량의 파일이 필요하던가 steghide가 아닌 다른 방법을 찾아야 한다.
steghide를 사용하면 간단한 명령어를 통해서 쉽게 데이터를 은닉할 수 있다. CTF 같이 간단한 스테가노그래피 기법을 사용해야 될 경우 steghide를 사용해면 아주 간단하게 데이터를 은닉하거나 은닉된 데이터를 추출할 수 있다.
(mimikatz.zip이 숨겨진 이미지 파일들이다. 궁금하면 다운로드해서 은닉된 mimikatz.zip을 직접 확인할 수 있다.)
스테가노그래피
[해킹 기법] 스테가노그래피 - 파일 속에 데이터 숨기기
스테가노그래피 (Steganography)스테가노그래피 (Steganography)는 파일 안에 데이터를 삽입해서 은닉하는 기법이다. 스테가노그래피를 통해 사용자는 비디오, 오디오, 이미지 파일 등의 바이트를 조작
solo-infosec.tistory.com