Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
ScareCrow — ScareCrow - EDR 우회를 중심으로 설계된 페이로드 생성 프레임워크 | Kitploit
도구/GitHubGitHub/optiv/scarecrow
Exploit FrameworksPayload GenerationShellcodePenetration TestingRed TeamingPayload DevelopmentArchived
GitHuboptiv/scarecrow

ScareCrow

ScareCrow - EDR 우회를 중심으로 설계된 페이로드 생성 프레임워크

저장소 보기
2.9k529213년 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

이 저장소는 보관되었습니다

ScareCrow의 최신 버전을 확인하거나 이슈를 제출하려면 https://github.com/Tylous/ScareCrow를 참조하십시오.



ScareCrow

추가 정보

이 프레임워크에서 사용된 기술에 대해 더 자세히 알고 싶다면 Part 1 및 Part 2를 참조하십시오.

설명

ScareCrow는 합법적인 Windows 프로세스에 사이드 로딩(주입이 아닌)을 위한 페이로드 생성 프레임워크입니다(애플리케이션 허용 목록 제어 우회). DLL 로더가 메모리에 로드되면, 프로세스 메모리에서 실행 중인 시스템 DLL에서 EDR의 후크를 제거하는 기술을 활용합니다. 이는 EDR의 후크가 프로세스가 생성될 때 배치된다는 사실을 이용하기 때문에 작동합니다.

ScareCrow는 이러한 DLL을 대상으로 하여 API 함수 VirtualProtect를 사용하여 메모리 내에서 조작할 수 있습니다. VirtualProtect는 프로세스 메모리의 특정 섹션 권한을 다른 값, 특히 Execute–Read에서 Read-Write-Execute로 변경합니다.

ScareCrow는 후크 해제를 위해 2가지 방법 중 하나를 사용합니다.

Disk

실행되면 ScareCrow는 C:\Windows\System32\에 디스크에 저장된 시스템 DLL의 바이트를 복사합니다. 이러한 DLL은 프로세스가 생성될 때 변경되지 않은 복사본을 새 프로세스에 로드하는 데 사용되기 때문에 디스크에 EDR 후크가 없는 상태로 저장됩니다. EDR은 메모리 내에서만 이러한 프로세스를 후킹하므로 디스크의 DLL은 변경되지 않습니다. ScareCrow는 전체 DLL 파일을 복사하지 않고 DLL의 .text 섹션에만 집중합니다. DLL의 이 섹션에는 실행 가능한 어셈블리가 포함되어 있으며, 이렇게 함으로써 ScareCrow는 전체 파일을 다시 읽으면 EDR이 시스템 리소스의 수정을 감지할 수 있기 때문에 탐지 가능성을 줄이는 데 도움이 됩니다. 그런 다음 각 함수의 오프셋을 사용하여 데이터를 올바른 메모리 영역에 복사합니다. 각 함수에는 함수가 위치한 기본 주소로부터의 정확한 바이트 수를 나타내는 오프셋이 있으며, 이를 통해 스택에서 함수의 위치를 제공합니다.

이를 위해 ScareCrow는 VirtualProtect를 사용하여 .text 메모리 영역의 권한을 변경합니다. 이는 시스템 DLL이지만 제어하는 프로세스에 로드되었으므로 상승된 권한 없이도 메모리 권한을 변경할 수 있습니다.

간접 시스템 호출(Indirect Syscalls)

ScareCrow는 먼저 세 가지 암호화 방법(아래 설명) 중 하나로 암호화된 셸코드를 복호화한 후 메모리에 로드합니다. 복호화되어 로드되면 셸코드가 실행됩니다. 지정된 로더 옵션에 따라 ScareCrow는 DLL에 대해 다른 내보내기 함수를 설정합니다. 로드된 DLL에는 일반적으로 모든 DLL이 작동하는 데 필요한 표준 DLLMain 함수도 포함되어 있지 않습니다. DLL은 여전히 문제없이 실행됩니다. 로드되는 프로세스가 해당 내보내기 함수를 찾고 DLLMain의 존재 여부는 신경 쓰지 않기 때문입니다.

바이너리 샘플

이후

KnownDLLs

KnownDLLs는 Windows가 시스템 시작 프로세스 중에 로드하는 DLL 목록입니다. 이러한 DLL은 운영 체제 기능에 필수적인 것으로 간주되므로 애플리케이션 시작 시 로드 시간을 줄이고 성능을 향상시키기 위해 캐시됩니다. KnownDLLs에는 kernel32.dll, kernelbase.dll 및 ntdll.dll과 같은 DLL이 포함됩니다.

이러한 KnownDlls를 활용하여 ScareCrow는 NtOpenSection과 NtMapViewOfSection의 조합을 사용하여 \KnownDlls\<dllname>에서 DLL의 복사본을 매핑하여 프로세스 메모리에 로드합니다. ScareCrow는 전체 DLL을 로드하지 않고 DLL의 .text 섹션만 로드합니다(이 섹션에는 모든 시스템 호출이 포함되어 있음). 그런 다음 ScareCrow는 간접 시스템 호출을 사용하여 NtProtectVirtualMemory를 호출하고 DLL의 .text 메모리 섹션 권한을 변경하여 ScareCrow가 EDR의 후크를 덮어쓴 후 권한을 복원할 수 있도록 합니다.

자세한 내용은 modexp의 상세 article를 읽을 수 있습니다.

후크가 제거되면 ScareCrow는 사용자 지정 시스템 호출을 사용하여 셸코드를 메모리에 로드하고 실행합니다. ScareCrow는 EDR 후크가 제거된 후에도 이 작업을 수행하여 Event Tracing for Windows (ETW) 또는 기타 이벤트 로깅 메커니즘과 같은 사용자 영역이 아닌 후크 기반 텔레메트리 수집 도구에 의한 탐지를 피하는 데 도움을 줍니다. 이러한 사용자 지정 시스템 호출은 위에서 설명한 EDR이 배치한 후크를 제거하기 위한 VirtualProtect 호출을 수행하는 데에도 사용되며, EDR의 변조 방지 제어에 의한 탐지를 피합니다. 이는 VirtualProtect 시스템 호출의 사용자 지정 버전인 NtProtectVirtualMemory를 호출하여 수행됩니다. ScareCrow는 Golang을 사용하여 이러한 로더를 생성한 다음 어셈블리를 사용하여 이러한 사용자 지정 시스템 호출 함수를 생성합니다.

로더 생성 과정에서 ScareCrow는 비콘이 홈 콜백한 후 백그라운드에 혼합되기 위한 라이브러리를 사용합니다. 이 라이브러리는 두 가지 작업을 수행합니다:

  • 코드 서명 인증서로 서명된 파일은 일반적으로 덜 조사되므로 도전받지 않고 실행되기 더 쉽습니다. 신뢰할 수 있는 이름으로 서명된 파일은 다른 파일보다 의심을 덜 받기 때문입니다. 대부분의 맬웨어 방지 제품은 이러한 인증서를 검증하고 확인할 시간이 없습니다(지금은 일부 제품이 하지만 일반적으로 일반적인 공급업체 이름은 허용 목록에 포함됩니다). ScareCrow는 도구 limelighter의 go 패키지 버전을 사용하여 pfx12 파일을 생성함으로써 이러한 인증서를 만듭니다. 이 패키지는 사용자가 지정한 도메인 이름을 입력받아 해당 도메인에 대한 코드 서명 인증서를 생성합니다. 필요한 경우 valid 명령줄 옵션을 사용하여 자체 코드 서명 인증서가 있는 경우 사용할 수도 있습니다.

OpSec 고려 사항:

  로더를 microsoft.com으로 서명할 때 WINDOWS DEFENDER ATP 제품에 대해 사용하면 인증서가 Microsoft에 속하므로 검증할 수 있기 때문에 효과적이지 않을 수 있습니다. Windows 제품에 대해 로더를 사용하는 경우 다른 도메인을 사용하십시오.
  • 로더의 속성 스푸핑: 이는 syso 파일을 사용하여 수행됩니다. syso 파일은 임베디드 리소스 파일의 한 형태로, 로더와 함께 컴파일되면 컴파일된 코드의 속성 부분을 수정합니다. syso 파일을 생성하기 전에 ScareCrow는 (로더 유형에 따라) 임의의 파일 이름을 생성하여 사용합니다. 선택되면 이 파일 이름은 해당 파일 이름에 대한 관련 속성에 매핑되어 올바른 값이 할당되도록 합니다.

파일 속성 샘플

이러한 파일과 go 코드를 사용하여 ScareCrow는 c-shared 라이브러리 옵션을 사용하여 DLL로 교차 컴파일합니다. DLL이 컴파일되면 깨진 base64 문자열로 난독화되어 파일에 임베드됩니다. 이를 통해 파일을 원격으로 가져오고, 액세스하고, 프로그래밍 방식으로 실행할 수 있습니다.

사용자 정의 속성 파일

ScareCrow에는 광범위한 파일 속성 목록이 있지만 사용자 정의(환경별) 속성 집합이 필요한 경우도 있습니다. 이를 수용하기 위해 ScareCrow는 속성이 포함된 JSON 파일 입력을 허용합니다. -configfile 명령줄 옵션을 사용하면 ScareCrow는 기존 속성 대신 이러한 속성과 파일 이름을 사용합니다. main.json 파일에는 JSON 구조가 올바르게 작동하기 위해 필요한 샘플 템플릿이 포함되어 있습니다. "InternalName"으로 사용하는 것이 파일 이름이 됩니다.

요구 사항

ScareCrow는 이제 로더를 컴파일하기 위해 golang 1.19.1 이상이 필요합니다. 이전 버전을 실행 중인 경우 버전 1.19.1 이상을 사용하십시오.

새 버전은 https://golang.org/dl/에서 확인하십시오.

설치

첫 번째 단계는 항상 그렇듯이 저장소를 클론하는 것입니다. ScareCrow를 컴파일하기 전에 종속성을 설치해야 합니다.

설치하려면 다음 명령어를 실행하십시오:``` go get github.com/fatih/color go get github.com/yeka/zip go get github.com/josephspurrier/goversioninfo go get github.com/Binject/debug/pe go get github.com/awgh/rawreader

운영 체제에 다음 항목들이 설치되어 있는지 확인하세요:```
openssl
osslsigncode
mingw-w64

그런 다음 빌드하세요.``` go build ScareCrow.go

또한, ScareCrow는 모든 로더를 난독화하기 위해 [Garble](https://github.com/burrowers/garble)을 사용합니다.

참고: 여러 종속성이 Windows에서 컴파일 시 제대로 작동하지 않습니다. 따라서 OSX 또는 Linux에서 로더를 컴파일하는 것이 좋습니다.

## 도움말```

./ScareCrow -h

  _________                           _________                       
 /   _____/ ____ _____ _______   ____ \_   ___ \_______  ______  _  __
 \_____  \_/ ___\\__  \\_  __ \_/ __ \/    \  \/\_  __ \/  _ \ \/ \/ /
 /        \  \___ / __ \|  | \/\  ___/\     \____|  | \(  <_> )     / 
/_______  /\___  >____  /__|    \___  >\______  /|__|   \____/ \/\_/  
        \/     \/     \/            \/        \/                      
                                                        (@Tyl0us)
        “Fear, you must understand is more than a mere obstacle. 
        Fear is a TEACHER. the first one you ever had.”
도구 다운로드