
Apple Silicon हाइपरवाइज़र पर आधारित AArch64 फ़ज़र
HYPERPOM
Apple Silicon हाइपरवाइज़र पर आधारित AArch64 फ़ज़िंग लाइब्रेरी
Hyperpom, Apple Silicon हाइपरवाइज़र के शीर्ष पर निर्मित एक कवरेज-निर्देशित म्यूटेशन-आधारित फ़ज़िंग फ्रेमवर्क है। इसे AArch64 userland बाइनरीज़ को आसानी से इंस्ट्रूमेंट और फ़ज़ करने के लिए डिज़ाइन किया गया है।
इस परियोजना के पीछे का विचार एक कुशल और तेज़ फ़ज़र बनाना था जो Apple Silicon की सुविधाओं का लाभ उठाए। हालाँकि, इस चरण में, जबकि फ़ज़र काम करता है, यह अभी भी अधिकतर एक proof of concept है और बेहतर सुविधाएँ, उपयोगिता और प्रदर्शन प्रदान करने के लिए बहुत अधिक संवर्द्धन की आवश्यकता है।
यह आपके उपयोग के मामलों के लिए पर्याप्त हो सकता है, लेकिन ध्यान रखें कि आपको ऐसी सीमाएँ मिल सकती हैं जिन्हें परियोजना डिज़ाइन करते समय ध्यान में नहीं रखा गया था। किसी भी स्थिति में, बेझिझक एक issue खोलें और हम आपकी समस्या का समाधान करने का प्रयास करेंगे।
rustup स्थापित करें।rustup toolchain install nightly
संकलन करते समय इस चैनल का उपयोग करने के लिए आप या तो:
rustup default nightly का उपयोग करके इसे डिफ़ॉल्ट के रूप में सेट करें;cargo के साथ एक बाइनरी संकलित करें तो +nightly जोड़ें।Cmake स्थापित करें, उदाहरण के लिए brew का उपयोग करके:
brew install cmake
हाइपरवाइज़र फ्रेमवर्क तक पहुँचने में सक्षम होने के लिए, एक बाइनरी executable को हाइपरवाइज़र एंटाइटलमेंट प्रदान किया गया होना चाहिए।
आप 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
बाइनरी पर हस्ताक्षर करें और हाइपरवाइज़र एंटाइटलमेंट प्रदान करें।
codesign --sign - --entitlements entitlements.xml --deep --force target/release/${PROJECT_NAME}
बाइनरी चलाएं।
target/release/${PROJECT_NAME}
दस्तावेज़ीकरण निम्नलिखित पते पर ऑनलाइन उपलब्ध है: https://docs.rs/hyperpom
वैकल्पिक रूप से, आप इसे cargo का उपयोग करके उत्पन्न कर सकते हैं:
cargo doc --open
दस्तावेज़ीकरण में फ्रेमवर्क और इसके आंतरिक भागों के उपयोग की जानकारी शामिल है। गहन मार्गदर्शिका के लिए, Loader अध्याय देखें, जो फ़ज़र का उपयोग करने और अपने लक्ष्यों को harness करने के उदाहरण प्रदान करता है।
फ्रेमवर्क कैसे संचालित होता है, इसकी बेहतर समझ देने और आपको आरंभ करने के लिए चार उदाहरण प्रदान किए गए हैं:
Executor का उपयोग करके VM में arbitrary कोड चलाने का तरीका दिखाता है।आप tests पर भी नज़र डाल सकते हैं।
प्रोजेक्ट के साथ प्रदान किए गए Makefile का उपयोग करके परीक्षण चलाने के लिए, आपको पहले jq स्थापित करना होगा। आप इसे brew का उपयोग करके कर सकते हैं:
brew install jq
फिर आप निम्न कमांड का उपयोग करके प्रदान किए गए Makefile के साथ परीक्षण चला सकते हैं:
make tests