Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
uafuzz — UAFuzz: Use-After-Free भेद्यताओं के लिए बाइनरी-स्तरीय निर्देशित फ़ज़िंग | Kitploit
उपकरण/GitHubGitHub/strongcourage/uafuzz
मेमोरी फोरेंसिकभेद्यता विश्लेषणशोषणफज़िंगबाइनरी विश्लेषण
GitHubstrongcourage/uafuzz

uafuzz

UAFuzz: Use-After-Free भेद्यताओं के लिए बाइनरी-स्तरीय निर्देशित फ़ज़िंग

रिपॉजिटरी देखें
351562 साल पहलेKitploit द्वारा समीक्षित

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

UAFuzz: उपयोग-के-बाद-मुक्त कमजोरियों के लिए बाइनरी-स्तरीय निर्देशित फ़ज़िंग

निर्देशित ग्रेबॉक्स फ़ज़िंग (DGF) जैसे AFLGo का उद्देश्य पूर्व-चयनित संभावित रूप से कमजोर लक्ष्य स्थानों पर स्ट्रेस टेस्टिंग करना है, जिसमें विभिन्न सुरक्षा संदर्भों में अनुप्रयोग हैं: (1) बग पुनरुत्पादन, (2) पैच परीक्षण या (3) स्थैतिक विश्लेषण रिपोर्ट सत्यापन। हाल ही में और अधिक शोध कार्य हुए हैं जिन्होंने निर्देशित फ़ज़िंग की प्रभावशीलता और दक्षता में सुधार किया है (देखें awesome-directed-fuzzing)।

हम UAFuzz प्रस्तावित करते हैं जो एक बाइनरी-स्तर पर उपयोग-के-बाद-मुक्त (UAF) बगों के लिए समर्पित निर्देशित फ़ज़र है, जो इस बग वर्ग की विशिष्ट विशेषताओं को पूरा करने के लिए निर्देशित फ़ज़िंग के प्रमुख घटकों को सावधानीपूर्वक ट्यून करता है। UAF बग तब प्रकट होते हैं जब किसी हीप तत्व का उपयोग मुक्त किए जाने के बाद किया जाता है। UAF बग का पता लगाना कठिन है: (1) जटिलता क्योंकि एक प्रूफ-ऑफ-कॉन्सेप्ट (PoC) इनपुट को एक ही मेमोरी स्थान पर तीन घटनाओं – आवंटन, मुक्ति और उपयोग – के अनुक्रम को ट्रिगर करने की आवश्यकता होती है, जो परीक्षण किए गए प्रोग्राम के कई फ़ंक्शनों में फैली हुई होती है, और (2) मौनता जिसमें कोई सेग्मेंटेशन फॉल्ट नहीं होता।

कुल मिलाकर, UAFuzz का कार्यप्रवाह निर्देशित फ़ज़र्स के समान है, जिसमें हमारे संशोधनों को पूरे फ़ज़िंग प्रक्रिया के दौरान नारंगी रंग में हाइलाइट किया गया है, जैसा कि निम्नलिखित चित्र में दिखाया गया है। चूंकि हम (1) बग पुनरुत्पादन और (2) पैच परीक्षण अनुप्रयोगों पर ध्यान केंद्रित करते हैं, इसलिए हमारे पास सभी मेमोरी-संबंधित UAF घटनाओं के (अधिकतर) पूर्ण स्टैक ट्रेस होने की अधिक संभावना है। मौजूदा सामान्य निर्देशित दृष्टिकोणों के विपरीत जहां लक्ष्यों को स्वतंत्र रूप से चुना जा सकता है, हम निर्देशितता में सुधार के लिए लक्ष्यों के बीच संबंध (जैसे, ऑर्डरिंग जो UAF के लिए आवश्यक है) को ध्यान में रखते हैं। पहला, UAFuzz की स्थैतिक पूर्व-गणना बाइनरी स्तर पर तेज़ है। दूसरा, हम रनटाइम पर फ़ज़र को लक्ष्यों की ओर मार्गदर्शन करने के लिए नए ऑर्डर-जागरूक इनपुट मीट्रिक पेश करते हैं। अंत में, हम अपेक्षित ट्रेस में सभी लक्ष्यों को कवर करने वाले केवल संभावित इनपुट का त्रिदोषीकरण करते हैं और उन इनपुट के लिए प्री-फ़िल्टर करते हैं जो बग को ट्रिगर करने की संभावना कम हैं।

हमारे पेपर में RAID'20 और हमारे टॉक में Black Hat USA'20 में अधिक विवरण। Sébastien Bardin, Matthieu Lemerre, Prof. Roland Groz और विशेष रूप से Richard Bonichon (@rbonichon) को Ocaml पर उनकी मदद के लिए धन्यवाद।

स्थापना

  • IDA Pro v6.9 और v7.6 (32-बिट) और Python v2.7 (हम भविष्य में Radare जैसे अधिक ओपन-सोर्स बाइनरी डिस्सेम्बलर का समर्थन करने का लक्ष्य रखते हैं)।
  • Graph-Easy v0.7.6 IDA के कॉल ग्राफ को डॉट फ़ॉर्मेट में बदलने के लिए।
  • प्रोफाइलिंग टूल Valgrind।
  • बाइनरी विश्लेषण फ्रेमवर्क BINSEC।
  • कवरेज-निर्देशित ग्रेबॉक्स फ़ज़र AFL v2.52b QEMU मोड में।

हमारा परीक्षण किया गया वातावरण Ubuntu 16.04 64-बिट है।

root@kitploit:~
# Install Ocaml and prerequisite packages for BINSEC via OPAM
sudo apt update
sudo apt update
sudo apt install ocaml ocaml-native-compilers camlp4-extra opam emacs llvm-6.0-dev pkg-config protobuf-compiler libgmp-dev libzmq3-dev cmake valgrind
opam init
opam switch 4.05.0
opam depext conf-m4.1
opam install merlin ocp-indent caml-mode tuareg menhir ocamlgraph ocamlfind piqi zmq.5.0.0 zarith llvm.6.0.0
eval `opam config env`

# Install Python's packages (Python 2 for IDA's scripts)
sudo python -m pip install networkx pydot
sudo apt install graphviz

# Install Graph Easy
wget https://cpan.metacpan.org/authors/id/S/SH/SHLOMIF/Graph-Easy-0.76.tar.gz 
tar xzf Graph-Easy-0.76.tar.gz
cd Graph-Easy-0.76
perl Makefile.PL; make test; sudo make install
export GRAPH_EASY_PATH=/usr/local/bin/graph-easy

# Checkout source code
git clone https://github.com/strongcourage/uafuzz.git

# Environment variables
export IDA_PATH = /path/to/ida-6.9/idaq
export GRAPH_EASY_PATH=/path/to/graph-easy
cd uafuzz; export UAFUZZ_PATH=`pwd`

# Compile source code
./scripts/build.sh uafuzz

# Help for IDA/UAFuzz interface
./binsec/src/binsec -ida-help
./binsec/src/binsec -uafuzz-help

कोड संरचना

हमारा फ़ज़र AFL v2.52b पर आधारित है जो फ़ज़िंग के लिए QEMU मोड में काम करता है और हल्के स्थैतिक विश्लेषण के लिए BINSEC का उपयोग करता है (देखें uafuzz/README.md)। वर्तमान में हम परीक्षण किए गए बाइनरी के कंट्रोल फ्लो ग्राफ़ (CFG) और कॉल ग्राफ़ निकालने के लिए IDA Pro v6.9 का उपयोग करते हैं (देखें ida/README.md)।

root@kitploit:~
uafuzz
├── binsec/src
│   └── ida: IDA के CFG और कॉल ग्राफ़ को आयात और प्रोसेस करने के लिए एक प्लगइन
│   └── uafuzz: फ़ज़िंग कोड
│   │   └── afl-2.52b: AFL-QEMU के ऊपर निर्मित कोर फ़ज़िंग
│   │   └── uafuzz_*.ml(i): स्थैतिक जानकारी की गणना करने और AFL-QEMU के साथ संवाद करने के लिए एक प्लगइन
└── scripts: बिल्डिंग और बग त्रिदोषीकरण के लिए कुछ स्क्रिप्ट

अनुप्रयोग 1: बग पुनरुत्पादन

हम पहले एक सरल UAF बग पर विचार करते हैं। AFL-QEMU और यहां तक कि स्रोत-स्तर पर लक्ष्यों के साथ निर्देशित फ़ज़र AFLGo भी इस बग का 6 घंटे के भीतर पता नहीं लगा सकते, जबकि UAFuzz Valgrind की UAF रिपोर्ट की मदद से इसे मिनटों के भीतर पता लगा सकता है।

root@kitploit:~
# Run AFL-QEMU
$UAFUZZ_PATH/tests/example.sh aflqemu 360
# Run AFLGo given targets at source-level
$UAFUZZ_PATH/tests/example.sh aflgo 360
# Run UAFuzz
$UAFUZZ_PATH/tests/example.sh uafuzz 360 $UAFUZZ_PATH/tests/example/example.valgrind

वास्तविक दुनिया के प्रोग्रामों के लिए, हम अपने मूल्यांकन के लिए UAF Fuzzing Benchmark का उपयोग करते हैं।

root@kitploit:~
# Checkout the benchmark
git clone https://github.com/strongcourage/uafbench.git
cd uafbench; export UAFBENCH_PATH=`pwd`

हम विस्तार से दिखाते हैं कि readelf (Binutils) के CVE-2018-20623 के बग पुनरुत्पादन अनुप्रयोग के लिए UAFuzz कैसे चलाया जाए। Valgrind द्वारा प्राप्त इस UAF बग के स्टैक ट्रेस निम्नलिखित हैं:

root@kitploit:~
    // stack trace for the bad Use
    ==5358== Invalid read of size 1
    ==5358==    at 0x40A9393: vfprintf (vfprintf.c:1632)
    ==5358==    by 0x40A9680: buffered_vfprintf (vfprintf.c:2320)
    ==5358==    by 0x40A72E0: vfprintf (vfprintf.c:1293)
[6] ==5358==    by 0x80AB881: error (elfcomm.c:43)
[5] ==5358==    by 0x8086217: process_archive (readelf.c:19409)
[1] ==5358==    by 0x80868EA: process_file (readelf.c:19588)
[0] ==5358==    by 0x8086B01: main (readelf.c:19664)
    
    // stack trace for the Free
    ==5358==  Address 0x4221dc0 is 0 bytes inside a block of size 80 free'd
    ==5358==    at 0x402D358: free (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
[4] ==5358==    by 0x8086647: process_archive (readelf.c:19524)
[1] ==5358==    by 0x80868EA: process_file (readelf.c:19588)
[0] ==5358==    by 0x8086B01: main (readelf.c:19664)
  
    // stack trace for the Alloc
    ==5358==  Block was alloc'd at
    ==5358==    at 0x402C17C: malloc (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
[3] ==5358==    by 0x80AD97E: make_qualified_name (elfcomm.c:906)
[2] ==5358==    by 0x8086350: process_archive (readelf.c:19435)
[1] ==5358==    by 0x80868EA: process_file (readelf.c:19588)
[0] ==5358==    by 0x8086B01: main (readelf.c:19664)

1. पूर्व-प्रसंस्करण

पूर्व-प्रसंस्करण स्क्रिप्ट x86 में परीक्षण किए गए बाइनरी और Valgrind के स्टैक ट्रेस को इनपुट के रूप में लेती है, फिर UAF बग ट्रेस उत्पन्न करती है जो (basic_block_address,function_name) फ़ॉर्मेट में लक्ष्य स्थानों का एक अनुक्रम है, जैसे:

root@kitploit:~
[0] (0x8086ae1,main) -> [1] (0x80868de,process_file) -> [2] (0x808632c,process_archive) -> 
[3, alloc] (0x80ad974,make_qualified_name) -> [4, free] (0x808663a,process_archive) -> 
[5] (0x808620b,process_archive) -> [6, use] (0x80ab86a,error)

2. फ़ज़िंग

हम कई इनपुट पैरामीटरों के साथ एक फ़ज़िंग स्क्रिप्ट का टेम्पलेट प्रदान करते हैं, उदाहरण के लिए हम जिस फ़ज़र को चलाना चाहते हैं, मिनटों में टाइमआउट और पूर्वनिर्धारित लक्ष्य (जैसे, बग रिपोर्ट से निकाले गए)। ऊपर दिए गए उदाहरण के लिए, हम स्क्रिप्ट CVE-2018-20623.sh का उपयोग करते हैं और UAFuzz को इस प्रकार चलाते हैं:

root@kitploit:~
# Run UAFuzz with timeout 60 minutes
$UAFBENCH_PATH/CVE-2018-20623.sh uafuzz 60 $UAFBENCH_PATH/valgrind/CVE-2018-20623.valgrind

3. त्रिदोषीकरण

फ़ज़िंग टाइमआउट के बाद, UAFuzz पहचान सकता है कि कौन से इनपुट अपेक्षित UAF बग ट्रेस के सभी लक्ष्य स्थानों को क्रम में कवर करते हैं (जैसे, इनपुट नाम जो ',all' के साथ समाप्त होता है)। इस प्रकार, UAFuzz मौजूदा प्रोफाइलिंग टूल जैसे Valgrind या AddressSanitizer का उपयोग करके केवल उस प्रकार के इनपुट का त्रिदोषीकरण करता है जो वांछित बग को ट्रिगर करने की संभावना रखते हैं।

अनुप्रयोग 2: पैच परीक्षण

हम मरम्मत प्रक्रिया को बढ़ावा देने के लिए विभिन्न अद्वितीय बग-ट्रिगरिंग इनपुट उत्पन्न करने के महत्व को दर्शाने के लिए GNU Patch के CVE-2018-6952 का उपयोग करते हैं। GNU Patch में एक डबल फ्री था जिसे डेवलपर्स द्वारा ठीक किया गया है (कमिट 9c98635)। हालांकि, CVE-2018-6952 के स्टैक ट्रेस का उपयोग करके, UAFuzz ने नवीनतम संस्करण 2.7.6 (कमिट 76e7758) का एक अपूर्ण बग फिक्स CVE-2019-20633 खोजा, जिसमें बग ट्रेस में थोड़ा अंतर है। कुल मिलाकर, प्रक्रिया बग पुनरुत्पादन अनुप्रयोग के समान है, सिवाय इसके कि लक्ष्य UAF बग ट्रेस की पहचान करने में कुछ मैन्युअल कार्य की आवश्यकता हो सकती है। हम मौजूदा बगों के PoC इनपुट और fuzzing-corpus में मान्य फ़ाइलों का उपयोग उच्च गुणवत्ता वाले सीड्स के रूप में करते हैं।

root@kitploit:~
# Fuzz patched version of CVE-2018-6952
$UAFBENCH_PATH/CVE-2019-20633.sh uafuzz 360 $UAFBENCH_PATH/valgrind/CVE-2018-6952.valgrind

अनुप्रयोग 3: स्थैतिक विश्लेषण रिपोर्ट सत्यापन

एक संभावित हाइब्रिड दृष्टिकोण UAFuzz को GUEB के साथ संयोजित करना है, जो UAF के लिए Ocaml में लिखा गया एकमात्र बाइनरी-स्तरीय स्थैतिक विश्लेषक है। हालांकि, GUEB कई झूठी सकारात्मकताएं उत्पन्न करता है और वर्तमान में जटिल बाइनरी के साथ ठीक से काम करने में सक्षम नहीं है। इसलिए हम वर्तमान में GUEB में सुधार कर रहे हैं और इसे BINSEC में एकीकृत कर रहे हैं, फिर UAFuzz को मार्गदर्शन करने के लिए GUEB की रिपोर्ट से निकाले गए लक्ष्यों का उपयोग करते हैं। जुड़े रहें!

टूल डाउनलोड करें