
إطار عمل Wi-Fi لإنشاء نماذج مفاهيمية، تجارب تلقائية، مجموعات اختبار، أدوات التشويش، والمزيد.
نقدم إطار عمل لتسهيل إجراء تجارب Wi-Fi. يمكن استخدامه لإنشاء أدوات اختبار التشويش (fuzzers)، وتنفيذ هجمات جديدة، وإنشاء نماذج إثبات المفهوم لاختبار الثغرات، وأتمتة التجارب، وتنفيذ مجموعات اختبار، وهكذا.
الميزة الرئيسية للإطار هي أنه يتيح لك إعادة استخدام وظائف Wi-Fi في Linux لتنفيذ الهجمات و/أو الاختبارات بسهولة أكبر. على سبيل المثال، يمكن للإطار الاتصال بشبكات Wi-Fi (المحمية) نيابة عنك، ويمكنه بث إشارات المنارة (beacons) نيابة عنك عند اختبار الأجهزة العميلة. بشكل عام، يمكن إعادة استخدام أي وظيفة Wi-Fi في Linux لتنفيذ الهجمات/الاختبارات بشكل أسرع. يحقق الإطار ذلك عن طريق تنفيذ حالات اختبار فوق خدمة hostap في مساحة المستخدم.
نظرة عامة على مكونات خدمة Wi-Fi والإطار.
إذا كنت جديدًا في إجراء تجارب Wi-Fi على Linux، فمن المستحسن بشدة قراءة البرنامج التعليمي libwifi Linux أولاً. عند تنفيذ هجمات Wi-Fi أساسية دون الحاجة إلى إعادة استخدام وظائف Linux، فإن الإطار يوفر مزايا محدودة، ويمكنك بدلاً من ذلك التفكير في تنفيذ الهجمات مباشرة في Scapy واستخدام مكتبة libwifi اختياريًا.
لاستخدام الإطار:
قم بتثبيته عن طريق تشغيل ./setup.sh. راجع setup لمعرفة ما يفعله هذا البرنامج النصي.
لنفترض أنك تريد اختبار ما إذا كان جهاز عميل يقوم أبدًا بتشفير الإطارات باستخدام مفتاح كله أصفار. يمكن أن يحدث هذا أثناء هجوم إعادة تثبيت المفتاح. باستخدام الإطار، لا تحتاج إلى إعادة تنفيذ جميع وظائف نقطة الوصول، بل تحتاج فقط إلى كتابة حالة الاختبار التالية:
class ExampleKrackZerokey(Test):
name = "example-krack-zero-key"
kind = Test.Authenticator
def __init__(self):
super().__init__([
# Replay 4-Way Handshake Message 3/4.
Action( trigger=Trigger.Connected, action=Action.Function ),
# Receive all frames and search for one encrypted with an all-zero key.
Action( trigger=Trigger.NoTrigger, action=Action.Receive ),
# When we receive such a frame, we can terminate the test.
Action( trigger=Trigger.Received, action=Action.Terminate )
])
def resend(self, station):
# Resend 4-Way Handshake Message 3/4.
station.wpaspy_command("RESEND_M3 " + station.clientmac )
def receive(self, station, frame):
if frame[Dot11].addr2 != station.clientmac or not frame.haslayer(Dot11CCMP):
return False
# Check if CCMP-encrypted frame can be decrypted using an all-zero key
plaintext = decrypt_ccmp(frame.getlayer(Dot11), tk=b"\x00"*16)
if plaintext is None: return False
# We received a valid plaintext frame!
log(STATUS,'Client encrypted a frame with an all-zero key!', color="green")
return True
حالة الاختبار أعلاه ستنشئ نقطة وصول يمكن للأجهزة العميلة الاتصال بها. بعد اتصال العميل، سيتم إرسال رسالة ثالثة جديدة من المصافحة الرباعية إلى العميل. سيبدأ العميل الضعيف بعدها في استخدام مفتاح تشفير كله أصفار، وهو ما تكتشفه حالة الاختبار تلقائيًا.
يمكنك تشغيل حالة الاختبار أعلاه باستخدام أجهزة راديو Wi-Fi محاكية كما يلي:
./setup/setup-hwsim.sh 4
source setup/venv/bin/activate
./run.py wlan1 example-krack-zero-key
يمكنك الاتصال بنقطة الوصول المنشأة لاختبارها (الشبكة testnetwork بكلمة مرور passphrase):
./hostap.py wlan2
من خلال تغيير تكوين الشبكة يمكن تهيئة نقطة الوصول هذه بسهولة لاستخدام WPA2 أو WPA3 و/أو يمكن تكوينها لاستخدام المصادقة المؤسسية، دون إجراء أي تغييرات على حالة الاختبار التي كتبناها! المزايا الإضافية لاستخدام الإطار في هذا المثال هي:
راجع وصفًا مفصلاً لجميع أمثلتنا لمزيد من الأمثلة.
نُشر هذا العمل في مؤتمر ACM للأمن والخصوصية في الشبكات اللاسلكية والمتنقلة (WiSec '21):
الأعمال التي استخدمت هذا الإطار أو إطارًا مشابهًا: