
Apple Silicon 하이퍼바이저 기반 AArch64 퍼저
HYPERPOM
Apple Silicon Hypervisor 기반 AArch64 퍼징 라이브러리
Hyperpom은 Apple Silicon Hypervisor 위에 구축된 커버리지 기반 변이 퍼징 프레임워크입니다. AArch64 유저랜드 바이너리를 쉽게 계측하고 퍼징할 수 있도록 설계되었습니다.
이 프로젝트의 아이디어는 Apple Silicon의 기능을 활용하는 효율적이고 빠른 퍼저를 만드는 것이었습니다. 그러나 현재 단계에서 퍼저는 동작하지만 여전히 개념 증명(proof of concept) 수준에 가깝고, 더 나은 기능, 사용성, 성능을 제공하려면 많은 개선이 필요합니다.
사용 사례에 충분할 수도 있지만, 프로젝트 설계 시 고려되지 않은 제한 사항을 만날 수 있다는 점을 유의하세요. 어떤 경우든 이슈를 열어 주시면 문제를 해결하기 위해 노력하겠습니다.
rustup을 설치하세요.rustup toolchain install nightly
컴파일 시 이 채널을 사용하려면 다음 중 하나를 선택할 수 있습니다:
rustup default nightly를 사용해 기본값으로 설정하거나;cargo로 바이너리를 컴파일할 때마다 +nightly를 추가합니다.예를 들어 brew를 사용해 Cmake를 설치하세요:
brew install cmake
Hypervisor Framework에 접근하려면 바이너리 실행 파일에 hypervisor 자격이 부여되어 있어야 합니다.
Hyperpom 저장소 루트에 있는 entitlements.xml 파일과 다음 명령을 사용하여 /path/to/binary에 있는 바이너리에 이 자격을 추가할 수 있습니다:
codesign --sign - --entitlements entitlements.xml --deep --force /path/to/binary
Rust 프로젝트를 만들고 Cargo.toml에 Hyperpom을 의존성으로 추가하세요. crates.io에서 가져오거나 ...
# Check which version is the latest, this part of the README might not be updated
# in future releases.
hyperpom = "0.1.0"
... 또는 GitHub 저장소에서 직접 가져올 수 있습니다.
hyperpom = { git="https://github.com/impalabs/hyperpom", branch="master" }
프로젝트 루트 디렉터리에 entitlements.txt 파일을 만들고 다음 내용을 추가하세요:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.hypervisor</key>
<true/>
</dict>
</plist>
코드를 작성한 다음 프로젝트를 빌드하세요.
cargo build --release
바이너리에 서명하고 hypervisor 자격을 부여하세요.
codesign --sign - --entitlements entitlements.xml --deep --force target/release/${PROJECT_NAME}
바이너리를 실행하세요.
target/release/${PROJECT_NAME}
문서는 다음 주소에서 온라인으로 볼 수 있습니다: https://docs.rs/hyperpom
또는 cargo를 사용해 직접 생성할 수 있습니다:
cargo doc --open
문서에는 프레임워크 사용법과 내부 동작에 대한 정보가 포함되어 있습니다. 심층 가이드는 Loader 챕터를 참조하세요. 이 챕터에는 퍼저를 사용하고 타깃을 하니스하는 방법에 대한 예제가 있습니다.
프레임워크가 어떻게 동작하는지 더 잘 이해하고 시작할 수 있도록 네 가지 예제가 제공됩니다:
Executor를 사용해 VM에서 임의의 코드를 실행하는 방법을 보여줍니다.또한 tests를 살펴볼 수 있습니다.
프로젝트에 제공된 Makefile을 사용해 테스트를 실행하려면 먼저 jq를 설치해야 합니다. brew를 사용해 설치할 수 있습니다:
brew install jq
그런 다음 다음 명령으로 제공된 Makefile을 사용해 테스트를 실행할 수 있습니다:
make tests