
CVE-2021-27211용 익스플로잇 스크립트
Stegcrack은 Steghide의 취약점(특히 CVE-2021-27211)을 악용하기 위한 오픈소스 프로그램입니다.
Stegcrack은 주어진 파일에 Steghide로 숨겨진 데이터가 포함되어 있는지 감지하며, 때로는 비밀번호 없이 숨겨진 데이터를 완전히 추출할 수 있습니다.
이 저장소를 클론하세요
git clone https://github.com/b4shfire/stegcrack
소스 디렉터리로 이동하세요
cd stegcrack/src
프로그램을 컴파일하세요
clang++ main.cc utils.cc file_handling.cc ui.cc Extractor.cc -ljpeg -pthread -lz -std=c++11 -O2 -o ../stegcrack
소스 디렉터리에서 나오세요
cd ..
./stegcrack <파일 경로> <스레드 수> (기본값: 4)
./stegcrack flowers.jpg
./stegcrack ../images/rocket.jpg 8
커버 파일 내부에 데이터를 숨기기 위해 Steghide는 먼저 제공된 비밀번호를 32비트 시드(seed)로 변환합니다.
시드는 다음과 같이 생성됩니다:
그런 다음 이 시드는 데이터가 숨겨질 파일 내 위치 시퀀스를 생성하는 데 사용됩니다.
이 방법의 결함은 비밀번호가 아무리 복잡하더라도 2^32개의 가능한 시드 중 하나를 생성해야 한다는 것입니다. 즉, 시드 변수를 무차별 대입(brute-force)하여 비밀번호를 완전히 우회할 수 있습니다.
시드가 생성되면 Steghide는 먼저 메타데이터(매직 바이트, Steghide 버전, 데이터 크기 등)를 커버 파일에 삽입합니다.
이 메타데이터는 각 시드가 데이터를 숨기는 데 사용되었는지 여부를 판별하는 데 사용할 수 있습니다. 예를 들어, 삽입된 처음 3바이트는 항상 0x73 0x68 0x8d입니다(아스키 문자열 "shm" - StegHide Magic에 매우 가깝습니다). 주어진 시드가 이 바이트들을 생성하지 않는다면, 데이터를 숨기는 데 사용되지 않았음이 확실하므로 폐기할 수 있습니다. 모든 시드가 폐기되거나 유효한 시드가 발견될 때까지 이 과정이 계속됩니다. 유효한 시드는 숨겨진 데이터가 있음을 나타냅니다.
기본적으로 Steghide는 데이터를 삽입하기 전에 전체 비밀번호를 사용하여 암호화합니다. 즉, 대부분의 경우 Stegcrack은 이 암호화된 데이터만 추출할 수 있습니다. 그러나 삽입 중에 암호화가 비활성화된 경우 Stegcrack은 숨겨진 데이터를 평문으로 완전히 추출할 수 있습니다.