
إطار عمل التعرف على أدوات الأمن السلبية
هل تساءلت يومًا عن طريقة بسيطة وسهلة ومتخفية لتجاوز عدة فئات من منتجات الأمان؟ pstf^2 (تُلفظ pstf-squared) هو تطبيق لخادم HTTP قادر على التعرف على بصمات المتصفح بشكل سلبي - وقد يكون بالضبط ما تبحث عنه. عندما يحاول المهاجمون توصيل حمولة عبر الإنترنت، يحتاجون إلى التغلب على أدوات متعددة قادرة على فحص الروابط الواردة. عوامل تصفية البريد الإلكتروني، ومحركات الفحص، وحتى الإرسال إلى صندوق الرمل عبر URL - يمكن تجاوزها جميعًا بمجرد أن يكتشفها pstf2 بطريقة سلبية. بمجرد الكشف، تسمح الأداة بالتفريق بين خدمات الأمان والضحايا المحتملين، وتقديم استجابة خبيثة أو غير ضارة.
تم إصدار هذه الأداة خلال BlackHat EU 2020: https://www.blackhat.com/eu-20/arsenal/schedule/#pstf2-link-scanners-evasion-made-easy-21763
تفاصيل البحث متاحة في منشور المدونة هذا: https://blogs.akamai.com/sitr/2020/12/evading-link-scanning-security-services-with-passive-fingerprinting.html
السؤال الحقيقي هو - كيف تعمل أدوات فحص الروابط؟ فحص رابط ضار هو إجراء يتضمن عميل ويب يرسل طلب HTTP GET. كل بائع يستخدم تطبيقًا داخليًا مختلفًا - يحاول معظمهم محاكاة تفاعل مستخدم حقيقي إلى حد ما. pstf^2 هو خادم HTTP بسيط مبني على Python يطبق تكتيكات معروفة لاكتشاف البوتات لتحديد ما إذا كان الطلب الوارد من أداة أمان آلية. يمكن لمشغل الخادم تخصيص الاستجابات، على سبيل المثال - إذا تم اكتشاف ماسح ضوئي، يتم إعادة توجيهه إلى Google، وإلا يتم إرسال محتوى خبيث.
فيما يلي التكتيكات الرئيسية المطبقة كجزء من pstf^2:
تحاول أدوات الأمان التخفي كعملاء شرعيين، وانتحال شخصية متصفحات حقيقية، ومع ذلك - عادةً لا يكون هذا هو الحال. من الشائع رؤية أدوات لا تتم صيانتها بشكل صحيح تستخدم رؤوس وكيل مستخدم مزيفة لإصدارات متصفح قديمة بعشر سنوات. يتيح لك pstf^2 تعيين حد أدنى لما تعتبره إصدارًا حقيقيًا غير قديم.
هناك العديد من أنواع التطبيقات الغريبة التي تستطيع الأداة اكتشافها. بعض الأمثلة التي تم عرضها في محادثة BlackHat كانت:
via: يكشف عن طبيعة المضيف الافتراضي المستخدم لصندوق الرمل.referer: الذي يشير إلى أن الرابط تم الوصول إليه من Google، على سبيل المثال referer: google.com/search?q=specific.site.com.
في السيناريوهات التي اختبرناها، لم يكن ذلك منطقيًا لأن هذا المنتج يفحص رسائل البريد الإلكتروني، وعندما ينقر شخص ما على بريد إلكتروني (ليس من واجهة ويب) يكون هذا الرأس غائبًا.يمكن أن تشير معلمات TCP متعددة إلى إصدار معين من نظام التشغيل أو نكهة معينة. بعض العملاء يزيفون رأس وكيل المستخدم ولكنهم يعملون فوق نظام تشغيل مختلف عن الذي يصرحون به.
العملاء المستضافون على شبكات مزودي خدمات سحابية معينة لديهم MTU مختلف عن القيمة القياسية البالغة 1500 بايت.
في بعض الحالات، يتم إرسال الطلب من ASN مرتبط بشكل صريح ببائع أمان معين. في حالات أخرى، يكون أصل الطلب مزود استضافة سحابية، وعلى الرغم من أنه لا يدين بائعًا معينًا، فمن غير المرجح أن يكون مستخدمًا نموذجيًا.
في حالات نادرة، يكون لعنوان IP الخاص بالعميل سجل PTR يربطه بعنوان URL متعلق ببائع أمان.
بافتراض أن Docker مثبت لديك بالفعل، الأمر بسيط كما يلي:
docker-compose up
إذا كنت ترغب في تجنب Docker، اتبع هذه الخطوات.
شغّل:
pip install requirements.txt
سيؤدي هذا إلى تثبيت أي وحدات Python خارجية مطلوبة.
قبل نشر pstf^2، قم بتنزيل وتثبيت p0f. وهو متاح حاليًا على:
https://lcamtuf.coredump.cx/p0f3/
الآن، قم بتكوين lib/servers/server_config.yml بشكل صحيح للإشارة إلى المسار الصحيح، أي:
p0f_config:
# غيّر اسم المستخدم الخاص بك على الأقل، تذكر التغيير في كلا المسارين
p0f_bin_path: '/Users/$your_user_name/$more_folders/web_fp/p0f-3.09b/p0f'
p0f_fp_path: '/Users/$your_user_name/$more_folders/web_fp/p0f-3.09b/p0f.fp'
iface: 'lo0'
p0f_named_socket: '/tmp/p0f_socket'
تأكد أيضًا من أن iface هي نفس الواجهة التي تشغل خادم HTTP الخاص بـ Python. في المثال أعلاه، هي واجهة الحلقة المحلية.
بمجرد استيفاء المتطلبات، شغّل:
python driver.py
يمكنك استخدام أي من العلامات التالية:
--p0f_bin_path P0F_BIN_PATH
--p0f_fp_path P0F_FP_PATH
--p0f_iface P0F_IFACE
جميعها تُستخدم لضبط المعلمات المتعلقة بـ p0f: الملف الثنائي نفسه، ملف البصمة، والواجهة التي نستخدمها والتي تكون افتراضيًا eth0.
يجب أن ترى مخرجًا مشابهًا لما يلي:
2020-04-15 17:37:06,896 - pstf2_logger - INFO - Starting p0f...
2020-04-15 17:37:06,896 - pstf2_logger - INFO - Running command:
/Users/gbitensk/work/web_fp/p0f-3.09b/p0f -i lo0 -s /tmp/p0f_socket -f /Users/gbitensk/work/web_fp/p0f-3.09b/p0f.fp
2020-04-15 17:37:06,898 - pstf2_logger - INFO - p0f started!
2020-04-15 17:37:06,898 - pstf2_logger - INFO - Starting HTTP server...
2020-04-15 17:37:06,898 - pstf2_logger - INFO - HTTP server started!
2020-04-15 17:37:06,899 - pstf2_logger - INFO - If you wish to terminate the server press CTRL+C
قم بإنهاء الخادم بالضغط على Ctrl+C، سيؤدي ذلك إلى قتل كل من مثيلات HTTP و p0f. يجب أن ترى شيئًا مشابهًا أيضًا:
2020-04-15 17:37:48,263 - pstf2_logger - INFO - HTTP server stopped!
2020-04-15 17:37:48,263 - pstf2_logger - INFO - Killing p0f...
2020-04-15 17:37:48,263 - pstf2_logger - INFO - p0f killed!
2020-04-15 17:37:48,263 - pstf2_logger - INFO - exiting...
لاحظ أن إعداد سجل DNS يشير إلى عنوان URL لخادمك هو خارج نطاق pstf^2 وعلى مسؤوليتك الخاصة.
لدى pstf^2 حمولات افتراضية معرفة داخل server_config.yml ويمكن تخصيصها بسهولة.
هناك وضعان، يتم التبديل بينهما بتغيير متغير rickroll_mode إما إلى YES أو NO.
إذا تم تمكينه، سيتم إعادة توجيه أداة الأمان إلى صفحة YouTube تحتوي على فيديو ريكرولينغ الشهير، وإلا فستقدم سلسلة نصية معرفة في نفس ملف YAML.
افتراضيًا - تم تعيين الاستجابة "الخبيثة" إلى سلسلة اختبار EICAR القياسية.
اخترت إصدار هذه الأداة علنًا كمشروع مفتوح المصدر للأسباب التالية:
كجزء من بناء الأداة، تم اختبارها ضد 15 منتجًا مختلفًا، وفشلت جميعها. بينما قمت بالإفصاح المسؤول عن تفاصيل الهجوم، لا يزال أمامنا طريق طويل، وآمل أنه من خلال جعل الأداة عامة سنرفع الوعي بتلك الأساليب التي يتم إساءة استخدامها بالفعل من قبل "الأشرار".
@Den1al لتقديم النصائح عند بناء هذه الأداة تحديدًا، وكتابة Python بشكل صحيح بشكل عام، وكذلك المساعدة في إنشائها كصورة Docker.