
مقدمة
ذات مرة في أوائل العقد الأول من القرن العشرين ، استمتعت كثيرات بحقيقة أنهم "قاموا" بشكل دوري بفحص شبكات موفرهم ، وأحيانًا أهداف أكثر بعدًا ، من أجل اكتشاف أجهزة Windows ومواردها (SMB) ، المتاحة للقراءة (الكتابة). كانت عملية البحث بدائية: تم تعيين مجموعة من عناوين IP أو قناع الشبكة ومن خلال أدوات مختلفة - تم فحص LANguard Network Scanner و xIntruder وما شابهها - وتم تحديد الخوادم. غالبًا ما تكون الأجهزة التي تم اكتشافها متاحة للقراءة ، وفي كثير من الأحيان للكتابة وموارد الشبكة المختلفة (الأقراص والطابعات والدلائل). من خلال جلسة مجهولة المصدر ، من خلال IPC $ والمستخدم "Guest" ، كان من الممكن نقل الموارد على الجهاز ، وأحيانًا كان هناك أعضاء في "المسؤولين" بدون كلمات مرور ، وأحيانًا بعد تأثير "نشط" أكثر على الأجهزة المكتشفة ، كان من الممكن العثور على خوادم تعمل بنظام Windows NT 4.0 أو Windows 2000 الخادم. إذا كان الحظ قد تم العثور عليه للعثور على أجهزة مع نظام التشغيل Windows 98 الذي كان واسعًا في ذلك الوقت ، فقد أصبح الأمر أكثر سهولة - في تلك الأيام كان نظام التشغيل المحدد يحتوي على العديد من نقاط الضعف المختلفة ، بما في ذلك تنفيذ العمل مع SMB ، تم تنفيذ bruteforce للوصول إلى المورد في غضون دقائق حتى عند الطلب الهاتفي الاتصالات. بالنسبة لأولئك الذين يرغبون في الانغماس في الأيام الخوالي ، تتم كتابته بالتفصيل حول "الوصول" إلى Windows 9x - القرصنة المكشوفة: أسرار وحلول أمان الشبكة. الفصل 4: القرصنة ويندوز 95/98 وأنا . لكن بقية المقال لا يتعلق بذلك.
لم أكن أعتقد مطلقًا أنه في عام 2019 ، مثل هذا "الترفيه" ممكن. يكمن التشابه في سهولة العثور على موارد الآخرين المتاحة للجميع الفضوليين. علاوة على ذلك ، لن نركز على اتجاه شائع في العامين الماضيين - البحث عن قواعد بيانات MongoDB أو Elasticsearch المفتوحة للوصول - ولكن على خدمة أكثر قليلاً.
علاوة على ذلك ، أقترح عدم تقييم الإجراء بأكمله أو القاعدة الأخلاقية ، وألاحظ أن هذا المنشور ليس دعوة لاتخاذ إجراءات يمكن عزوها إلى بعض مواد القانون الجنائي للاتحاد الروسي أو معايير مماثلة من قوانين الدول الأخرى.
نظام ملفات الشبكة (NFS)
نظام ملفات الشبكة (NFS) - بروتوكول للوصول إلى الشبكة إلى أنظمة الملفات ، يسمح لك بتوصيل (تحميل) أنظمة الملفات عن بعد عبر شبكة ، ويوفر للمستخدمين الوصول إلى الملفات ، ويسمح لك بالعمل مع هذه الملفات بالطريقة نفسها التي تستخدمها مع الملفات المحلية.
معظم وحدات التخزين المتصلة بالشبكة (NAS) المتاحة في السوق ، بطبيعة الحال ، تدعم NFS ، وتوفر الوصول إلى الموارد المحلية وكذلك على أي خادم مع نظام التشغيل الذي من الممكن نشر خدمة NFS.
إعدادات الوصول إلى موارد الخادم من أي نظام تشغيل Ubuntu وعنوان IP 192.168.1.1 مضمنة في الملف / etc / export وهي إدخالات في النموذج:
- / data / place1 192.168.1.0/255.255.255.0 (rw،no_subtree_check، noohide ،async) 192.168.101.0/255.255.255.0 (rw،no_subtree_check،nohide، async)
- data / place2 192.168.1.0/255.255.255.0 (rw،no_subtree_check، noohide، async) 192.168.101.0/255.255.255.0 (rw،no_subtree_check،nohide، async)
في هذه الحالة ، يمكن الوصول إلى NFS إلى الخادم ومورده / بياناته / place1 للعملاء الذين لديهم عناوين IP من الشبكات 192.168.1.0/255.255.255.0 ، 192.168.101.0/255.255.255.0.
قم بتركيب المورد البعيد في دليل محلي ، على سبيل المثال ، / home / user / example ، إذا كان العميل على شبكة فرعية مسموح بها ، وتم تثبيت عميل NFS ، فمن الممكن من خلال الأمر (Ubuntu):
mount -t nfs 192.168.1.1:/data/place1 /home/user/example
إذا تمت الإشارة إلى عناوين IP * أو (كل شخص) بدلاً من عناوين IP ، فغالبًا ما يمكن لأي عميل تثبيت مورد بعيد في نظامه.
يحتاج المستخدم (على سبيل المثال ، ضمن Ubuntu) فقط إلى الكتابة في الجهاز: showmount -e ip-target والحصول على معلومات حول الموارد المتاحة على الخادم (قائمة تصدير الخادم).
على سبيل المثال:
showmount -e 81.24..
Export list for 81.24..:
/home/admin 192.168.52.1/24
وبالتالي ، يتم تشكيل السيناريو التالي: للكشف عن الخوادم التي تعمل بنظام NFS ، وتحديد الموارد المتاحة على الخوادم ، ودمج النتيجة في نموذج إخراج واحد ، ثم المتابعة وفقًا للموقف.
ماذا يمكن أن يكون على الموارد - من الواضح ، أي شيء:
- الملفات الشخصية لمستخدمي الإنترنت ، على سبيل المثال ، في حالات أجهزة NAS "المفتوحة" ؛
- الدلائل مع ملفات المشاريع بأكملها ، وقواعد البيانات ، ومحفوظات قاعدة البيانات ؛
- في كثير من الأحيان الدلائل مع عناوين / الوطن / * (في بعض الأحيان مع مفاتيح في. SHS وقابلة للكتابة) ؛
- الدلائل مع ملفات أنظمة المراقبة بالفيديو ؛
- أخرى ...
الحصول على عناوين IP
فيما يتعلق باكتشاف الخوادم التي تحتوي على NFS على الإنترنت العالمي ، هناك طريقتان: بشكل مستقل ، باستخدام أدوات متنوعة ، ونتائج مسح جهة خارجية جاهزة ، وقواعد بيانات وخدمات. في الواقع ، كل ذلك يعود إلى الحصول على قائمة عناوين IP. في الشبكة المحلية ، أعتقد أن الخيار واضح - التصرف بشكل مستقل.
يمكن أن تعمل منافذ TCP المفتوحة 111 و 2049 كدليل على عمل خدمة NFS.
للحصول على قائمة عناوين IP للخادم بشكل مستقل ، يكفي فحص نطاق العناوين أو الشبكة الفرعية بالكامل لوجود المنافذ المفتوحة المشار إليها. أي أداة مناسبة لهذا: nmap ، masscan ، وهلم جرا.
على سبيل المثال ، باستخدام الأمر masscan -p111,2049 200.26.1XX.0/24 —rate=10000
سيتم فحص الشبكة 200.26.1XX.0 / 24 لعدة ثوان بحثًا عن المنافذ المفتوحة 111 ، 2049:
Scanning 256 hosts [2 ports/host]
Discovered open port 2049/tcp on 200.26.1XX.28
Discovered open port 111/tcp on 200.26.1XX.15
Discovered open port 111/tcp on 200.26.1XX.20
Discovered open port 111/tcp on 200.26.1XX.28
بالإضافة إلى كل عنوان IP تم اكتشافه ، من الممكن تطبيق الأمر:
showmount --no-headers -e 200.26.1XX.28
النتيجة:
/usr/common *
من الواضح ، أنه من الممكن مسح ملايين عناوين IP الخاصة بمساحة الإنترنت بنفسك ، لكن هذه ليست الطريقة الأسرع ، ومن ثم يمكن أن تكون خدمة Shodan الرائعة هي الحل للمهمة الفرعية ، وهناك بالطبع أخرى ، ولكن هذه مع بناء جملة و API مريحة للغاية. ليس الغرض من المقال هو الخوض في وصف إمكانات الخدمة. باختصار - توفر الخدمة بحثًا متقدمًا عن الأجهزة المتصلة بالإنترنت. يمكن أن تكون معايير البحث معرفات الشبكة وبيانات التعريف الأخرى: الأرقام التسلسلية للشهادات وما شابه. يحتوي Shodan على العديد من الميزات للبحث المستهدف ، لكنني لم أجد بحثًا منفصلاً عن NFS ، على سبيل المثال ، هناك معيار منتج يحمل اسم منتج: mongodb أو elastic أو apache. لذلك ، من خلال Web NFS ، يمكنك البحث عن الاستعلامات التالية: nfs ، tcp 2049 ، tcp 111 ، Portmap: 2049 وما إلى ذلك ، كما تريد.

أو قم بتثبيت عميل Shodan (CLI) ، قم بتهيئة KEY API الخاص بك للخدمة واستدعاء البحث من سطر الأوامر ، على سبيل المثال:
- shodan search --fields ip_str، port Portmap: 2049
- البحث عن shodan - الحقول ip_str ، منفذ - منفصلة ، NFS
النتيجة:
139.196.154.23،111،
198.27.116.37،111،
95.211.192.96،111،
80.23.66.122،111،
210.116.82.97،111،
192.198.82.3،111،
165.227.67.242،111،
116.12.48.9،111،
85.34.250.102،111،
182.75.249.197،111،
192.151.212.175،111،
119.216.107.127،111،
217.59.68.2،111،
178.159.12.97،111،
...
لذلك ، يمكن فهم كيفية الحصول على قوائم عناوين IP للأجهزة المزودة بخدمة NFS صالحة.
هناك العديد من الطرق لحل هذه المشكلة بشكل جماعي: كتابة البرامج النصية للباش ، وتنظيم خط أنابيب صعب من سلسلة من الأوامر مع دعوة لإظهار ، وخيارات أخرى - من يحب ما.
في بحثي ، قمت بحل هذه المشكلة في بايثون ، وبطريقتين مختلفتين. أول واحد هو الاتصال عبر ssh بخادم Ubuntu الشخصي الخاص بك مع عميل NFS ثم استدعاء أمر showmount عليه مع مجموعة عناوين IP المرغوبة. الحل الثاني هو في بيثون النقي.
أفترض أنه قد يتم طرح سؤال: لماذا هو صعب للغاية ، لماذا في بيثون؟
لأنه ، كما في مقالتي السابقة عن Habr ، سأستخدم أداة Lampyre ، التي نشروا عليها في 26 فبراير واجهة برمجة تطبيقات تسمح لك بكتابة الوحدات النمطية الخاصة بك إلى النظام الأساسي في Python.
Lampyreباختصار حول Lampyre - نظام أساسي لبرنامج OSINT وتحليل البيانات مع عميل "كثيف" لنظام Windows ، وهو تمثيلي للأداة المعروفة والشعبية لنفس الغرض - Maltego. كما هو الحال في Maltego ، تقدم Lampyre "خارج الصندوق" مجموعة من الطلبات للخدمات المختلفة. الاستعلامات مكافئة من الناحية النظرية للتحولات من منتج معروف. إذا كان هناك شيء مفقود ، فمن الممكن الآن كتابة طلباتك الخاصة. يتم تنفيذ الطلبات المرفقة مع Lampyre على البنية الأساسية للمنصة ، مكتوبة بشكل مستقل - على الجهاز. أي ، يجب أن يكون لدى المستخدم تثبيت Python وجميع المكتبات اللازمة المستخدمة في التعليمات البرمجية.
قررت اختبار قدرات API. النقطة الأساسية هي أن Lampyre لديه بالفعل العديد من "الطلبات" إلى Shodan ، خاصة وأن المستخدم لا يحتاج إلى الحصول على واجهة برمجة تطبيقات KEY API الخاصة به من الخدمة. وبالتالي ، مع طلب واحد ، يمكنك الحصول على قوائم عناوين IP مع رفع خدمة NFS ، ومع الطلب الثاني ، ستقوم الوحدة التي كتبتها بفحص الموارد المتاحة وتصور النتيجة مع خصائص الموارد على نفس الرسم البياني.
وهنا كوريا
أثناء البحث من Shodan واختبار الوحدة ، أصبح من المثير للاهتمام رؤية الموقف من حيث جودة وكمية نتائج المسح بواسطة خدمة Shodan في البلدان الآسيوية ، وكيف تكون الأمور بموارد غير آمنة. لقد وقع الاختيار على جمهورية كوريا ، وأعتقد أنه ليست هناك حاجة للقول إن كوريا الجنوبية بلد متقدم تقنياً للغاية ، واقترح أنه يمكنك العثور على شيء مثير للاهتمام في شبكاتها.
البحث عن طريق Shodan ، في الاستعلام: nfs ، في البلد: رمز جمهورية كوريا ، kr

لم تكن النتيجة طويلة (في الصورة أدناه ، جزء فقط من المخطط العام).

قائمة المضيفين:
- psi.kaist.ac.kr
- hulk.kaist.ac.kr
- messi.kaist.ac.kr
- marvel.kaist.ac.kr
- kaist.ac.kr
- ai1.kaist.ac.kr
- jarvis3.kaist.ac.kr
- baraddur.kaist.ac.kr
- rho.kaist.ac.kr
- jarvis.kaist.ac.kr
جميعها ، كما يتبين في كل من الرسم البياني والأسماء ، مدرجة كـ AS1781 - المعهد الكوري المتقدم للعلوم والتكنولوجيا

المعهد الكوري للتكنولوجيا المتقدمة - الجامعة الأكاديمية والبحثية الرائدة في كوريا الجنوبية الواقعة في دايجون ، في الصف الثاني من التصنيف الوطني في كوريا الجنوبية. يتم تضمين الجامعة باستمرار في 5 ٪ من المؤسسات التعليمية العليا في كوريا الجنوبية.
نستخدم عناوين IP المحددة كوسيطات إدخال إلى الوحدة النمطية المكتوبة "Explore: NFS (SSH)" ونتيجة لذلك:

قمت بسرعة بوضع مثل هذا المخطط لعرض نتائج جدول في رسم بياني (حول المخططات والمبادئ لإنشاء الرسوم البيانية لاحقًا في المقالة).

نتيجة الجمع مع مخطط شودان

عند تحليل القمم والعلاقات الخاصة بالرسم البياني ، يصبح واضحًا فيما يتعلق بالعناوين المتاحة / المصدر الرئيسي المتاحة للجميع (*).
للحصول على تصور مرئي أفضل ، قم بتغيير خصائص كائنات الرسم البياني والإعدادات الأخرى للمخطط:

بالطبع ، أخذت بالتناوب جزء من الموارد على أحد خوادمي وبدأت الدراسة. اتضح ما يقرب من نفسه في كل مكان - أدلة المستخدم: asm ، hoo ، hyshin ، jay ، jiwon ، jkhee110 ، jokangjin ، kmh603 ، ksm782 ، lee ، linus ، المفقودة + التي تم العثور عليها ، marvel_guest ، pie ، qwe ، scloud ، seokmin ، sgim ، thrlek ، yoosj ، ysha ، zinnia7.
تقريبا جميع الدلائل مع الملفات كانت القراءة والكتابة. كان بعض المستخدمين في .ssh قد أذنوا لملفات المفاتيح مع وصول الكتابة إليها.
لقد قمتُ بإنشاء مفتاحي ، ونسخه إلى المفاتيح المسموح بها لأحد المستخدمين وتوصيله بالخادم عبر ssh على المنفذ 2222 ، تلقيت رقم المنفذ من البيانات من Shodan.
المستخدمون ، إعدادات الشبكة:

المضيفين على الشبكة:

الملف / الخ / الصادرات ومحركات الأقراص:

ملف / الخ / fstab ونظام التشغيل:

أعتقد أن هذه شبكة من قسم ما لطلاب الدراسات العليا أو الطلاب ، وهم يقومون بإجراء بعض العمليات الحسابية على الخوادم ، لأن هناك العديد من مصادر Python المختلفة ، وهو ما يتعلق بوحدة GPU وتوزيع Anaconda ، وما إلى ذلك. لم أكن أدرس كل شيء وبدأت أفكر في ما يجب فعله مع كل هذا ، بالطبع ، يمكنني "المشي" في معظم الأجزاء (ربما كان بإمكاني التفكير في شيء أكثر غرابة) ، لكنه لم يسبب الكثير من الاهتمام لي. وفكرت فيما يلي: بما أن المعهد علمي ومتقدم ، يجب أن تكون هناك مجالات لأمن المعلومات. في الواقع ، حتى معمل كامل: مختبر أمان البرمجيات ورئيسه ، سانج كيل تشا
قررت أن أكتب خطابًا إليه ، لذلك يقولون ، إن السماح للجميع بتوصيل موارد NFS بأذونات القراءة والكتابة إلى الإنترنت أمر خطير للغاية ، ويبدو أنك بحاجة إلى إصلاح شيء ما ، وإرفاق لقطات الشاشة وإرسالها.
رسالة 1عزيزي سانغ كيل تشا ،
أنا أكتب إليك ، كما هو الحال في موقع kaist.ac.kr الذي يُشار إليه باسم مختبر SoftSec الرائد في KAIST ، وأعتقد أن المسألة التالية تهمك.
خلال بحثنا في مجال الأمن المعلوماتي ، عن غير قصد وبالصدفة تم اكتشاف الخوادم التالية:
143.248.247.131 - psi.kaist.ac.kr
143.248.247.4 - jarvis3.kaist.ac.kr
143248247169
143248247223
143248247235
143.248.247.251 - marvel.kaist.ac.kr
143.248.247.239 - jarvis.kaist.ac.kr
143.248.247.194 - hulk.kaist.ac.kr
143.248.2.23
جميع هذه الخوادم لديها خدمة NFS (نظام ملفات الشبكة) قيد التشغيل.
مستوى أمان الوصول إلى هذه الخوادم منخفض بشكل لا يصدق.
يمكن لأي شخص يستخدم الإنترنت الوصول إلى الدلائل الرئيسية لهذه الخوادم بجميع محتوياتها.
على سبيل المثال ، الإعدادات nfs - / etc / export 143.248.247.251 -> / home أو 143.248.247.239
showmount -e 143.248.247.239
قائمة تصدير 143.248.247.239:
/ البيانات
/ الوطن / appl
يمكن الوصول إلى أدلة المستخدم لمعظم الخوادم للقراءة والكتابة ، بما في ذلك الدلائل الفرعية ، والتي تحتوي على مفاتيح وصول ssh العامة والخاصة.
يتيح تحرير الملفات إضافة مفاتيح وصول جديدة والحصول على وصول ssh بعيد إلى الخوادم ثم - إلى بعض الشبكات الفرعية الداخلية KAIST.
تم الحصول على اختبار الوصول الضحل فقط ، ولم يتم إجراء أي تعديلات ، ولم يتم تحرير أو نسخ أو حذف أي بيانات ، ولم يحدث أي ضرر للبنية التحتية.
يرجى الاطلاع على الملفات المرفقة للحصول على نوع من الاعتراف والإثبات.
ليس لدي أي متطلبات أو مطالبات لكنني أوصي بتحسين مستوى أمان الشبكة بشكل ملحوظ.
سرعان ما أجابوا لي ، ترجمة مجانية: شكرا لك ، سوف نرسل إلى أي شخص.
الإجابة 1شكرا لإخباري! سأرسل هذه الرسالة الإلكترونية إلى شخص مسؤول عن شبكتنا وأمننا. أفضل ، سانغ كيل
قبل نشر هذه المقالة ، قررت التحقق ، ومعرفة ما الذي تغير:

في الواقع ، تم السماح بالوصول إلى الموارد فقط من الأجهزة الموجودة على الشبكة الداخلية ، ولكن ماذا عن الخادم 143.248.247.251. وفقًا للإدخالات الموجودة في الجدول ، تظل موارد المضيف في إعدادات NFS *. لقد رسمت نسخة أخرى من "تعيين" الجدول في رسم بياني:

ما هي التغييرات في "التعيين": كائنات NFS الآن "تلتصق ببعضها البعض" مع 2 سمات متطابقة - IP و NFS path. يتم إنشاء كائن الحالة فقط عندما تحتوي سمة القيمة ، التي تحتوي على محتويات عمود السجل الخام ، على القيمة " * "
ويظهر الرسم البياني على الجدول في شكل جديد:

الآن ، بالمناسبة ، أصبحت معالجة الشبكة الداخلية مرئية بشكل واضح ، وعلى الخادم 143.248.247.251 ، يمكن أيضًا تعديل محتويات دلائل المستخدم وملفاته ؛ من حيث المبدأ ، ظلت الاحتمالات كما كانت من قبل.
ولذا فإنني أكتب رسالة ثانية إلى السيد Sang Kil Cha ، مع محتوى أول مشابه ، مع الإشارة إلى أن بعض الأحداث سيتم تقديمها في مقال حول مورد habr.com الشهير:
رسالة 2عزيزي سانغ كيل تشا ، يوم جيد لك.
قررت إلقاء نظرة على ما إذا كان أي شيء قد تغير بعد إرسال بريدي الإلكتروني إليك ، وتم بالفعل تغيير إعدادات الوصول. لكن يبدو أن مهندسي الأمن استبعدوا عنوان IP الخاص بـ 143.248.247.251 ، وبقيت إعداداته كما هي. يرجى تأمين عنوان IP هذا حتى لا يتمكن أي شخص من الغرباء من الوصول إليه.
أكتب مقالاً حول موضوع أمن المعلومات وسأقوم بنشره على https://habr.com . هذا موقع مشهور جدًا في روسيا. ستتضمن المقالة بعض المقاطع المتعلقة بالجودة المنخفضة لإعدادات الوصول إلى NFS مع بعض الأمثلة عن الحالة مع الخوادم الخاصة بك. سأرسل لك الرابط لمقالتي عندما يتم نشره.
كيفية استخدام Lampyre API واكتب الوحدة الخاصة بك
سيُطلب من الوحدة النمطية قبول قائمة بعناوين IP أو قائمة بالشبكات الفرعية في شكل 192.168.0 / 24 كمدخلات - في هذه المرحلة ، سيكون من الضروري التحقق من صحة بيانات المدخلات حول مشاركة السلاسل في عناوين IP بشكل مستقل في الشفرة ، في حالة وجود شبكة فرعية - تحويل إلى قائمة IP.
سيتم الوصول إلى الخطوة التالية ، من خلال مكتبة Python paramiko ، إلى خادم ssh الشخصي والمتسلسل (هناك محاولة للتزامن في كود مفهوم الوحدة النمطية) يسمى الأمر:
timeout {timeouts} showmount --no-headers -e {ip}
سيتم تحليل ناتج النتيجة من خلال كود بايثون في هيكل المخرجات ، جدول: قائمة من القواميس في بايثون.
مفاتيح في القاموس:
- current_day - تاريخ طلب المستخدم
- host_query - IP الذي تم استلام المعلومات الخاصة به
- Shared_path - مورد NFS
- status_ip - معلومات حول الوصول إلى المورد ، إذا تم سرد عناوين IP عبر "،" ، فسيتم تكرار سلسلة القاموس داخل القائمة.
علاوة على ذلك ، وفقًا لمفهوم المفهوم ، يتم إجراء محاولة بدائية لتحليل قيمة مفتاح status_ip في الموضوع: عنوان IP أو سجل المضيف أو القيم "*" أو "الجميع"
وفقًا لوثائق واجهة برمجة التطبيقات وشروحها من الدعم Lampyre.io - يجب أن تُرجع كل وحدة بيانات إلى الجدول ، واحد أو أكثر ، ولكن يجب أن يوصف الجدول كجزء من واجهة برمجة التطبيقات (رؤوس المهام ، رأس الجدول). في الواقع ، هذه هي النتيجة الرئيسية للوحدة.
وبالتالي ، ستكون النتيجة النهائية ، مع مراعاة مفاتيح القاموس ، جدولًا:
class NFSHeader(metaclass=Header): display_name = 'Search data from NFS services' current_day = Field('Date', ValueType.Datetime) host_query = Field('Search ip', ValueType.String) shared_path = Field('NFS path', ValueType.String) ip = Field('ip address', ValueType.String) network = Field('network address', ValueType.String) host = Field('host', ValueType.String) status = Field('raw record', ValueType.String)
سيتم كتابة القيم (المعدلة قليلاً) من تحليل نتيجة الأمر showmount على الخادم إلى الجدول. تتحدث أسماء الحقول في الفصل عن نفسها ؛ في عمود السجل الخام ، سيتم تخزين معلومات حول الوصول إلى المورد. بمعنى ما ، يمكن اعتبار هذا التحليل للبيانات حول موارد NFS بمثابة OSINT ، والمعلومات المتعلقة بالوصول المحتمل من عناوين IP المختلفة تعطي فكرة عن مالكي المورد أو عنونة داخل شبكة الموارد. على سبيل المثال ، يوجد عنوان IP الخاص بالخادم المزود بـ NFS في أوكرانيا ، وعنوان IP المسموح بالوصول إليه موجود في ألمانيا:

وإذا قمت بتوسيع دراسة هذا المثال ، فسيتم على الفور تأكيد اتصال الخوادم ليس فقط من خلال NFS ، ولكن أيضًا من خلال شهادة واحدة على العناوين: 77.120.103.9 ، 138.201.202.135 والمجال * .aniart.com.ua:

كيفية نقل البيانات إلى وحدة نمطية والكتابة إلى جدول:
قم بإنشاء فئة SearchDataNFS الخاصة بك من فئة المهام:
class SearchDataNFS(Task)
في طريقة get_id
، نرجع UUID عشوائي فريد من نوعه:
def get_id(self): return 'bf51fd57-3fec-4416-9d07-905935a484b4'
في طريقة get_display_name
حدد كيفية استدعاء المهمة ، وطريقة get_description
، وفقًا للاسم ، ووصف المهمة:
def get_display_name(self): return 'Explore: NFS(SSH)' def get_description(self): return 'Explore NFS resourses'
في طريقة get_headers
حدد الجداول التي get_headers
:
def get_headers(self): return NFSHeader
ستحدد طريقة get_enter_params مظهر نافذة الإدخال. من التعليمات البرمجية ، من الواضح أنه يتم توفير قائمة من السلاسل إلى المدخلات ، والتي سيتم تحويلها لاحقًا إلى عناوين IP بشكل مستقل:
def get_enter_params(self): ep_coll = EnterParamCollection() ep_coll.add_enter_param('ips', 'IP', ValueType.String, is_array=True, value_sources=[Attributes.System.IPAddress], description='IPs, networks') return ep_coll
في طريقة التنفيذ ، يتم تنفيذ المهمة الرئيسية:
ips = [] for input_ip in set(map(lambda z: z.strip(), enter_params.ips)): ips.extend(reparse_ip_hosts(input_ip))
يتم الوصول إلى معلمات الإدخال عبر enter_params.ips. في طريقة reparse_ip_hosts
، يحدث التحقق الذاتي من تنفيذ السلاسل في عناوين IP.
targets = ((ip, port) for ip in ips for port in ports) lines = thread_async_nfs_one_client(targets) info = reparse_result_rows(lines) fields_table = NFSHeader.get_fields() for data_id in info: tmp = NFSHeader.create_empty() for field in fields_table: if field in data_id: tmp[fields_table[field]] = data_id[field] result_writer.write_line(tmp, header_class=NFSHeader)
في دالة thread_async_nfs_one_client
، يتم إجراء اتصال بالخادم باستخدام ssh (يتم تعيين عنوان IP واسم المستخدم وكلمة المرور بواسطة hardcode) ويتم تنفيذ showmount ، كما هو موضح سابقًا ، يتم تحليل النتيجة ، ثم يتم تعديلها مرة أخرى في وظيفة reparse_result_rows
. من المهم ملاحظة أن المعلومات هي قائمة تتكون من قواميس ، في كل قاموس يتم تسمية المفاتيح كحقول من فئة NFSHeader. أي أن القاموس يبدو كالتالي:
{ 'current_day': datetime.datetime(2019, 3, 6, 16, 48, 17), 'host_query': '192.168.1.1', 'shared_path': '/volume1/workspace', 'ip': '192.168.10.10', 'network': '', 'host': '', 'status': '192.168.10.10' }
من المهم مراقبة أنواع البيانات في القاموس ، ويجب أن تكون هي نفسها كما في وصف الجدول.
علاوة على ذلك في الحلقة ، يتم تكرار عناصر القائمة وكتابتها من خلال طريقة API ( result_writer.write_line ) إلى جدول NFSHeader محدد.
للحصول على وصف أكثر تفصيلاً ، يجب عليك قراءة الوثائق.
في الأساس ، الوحدة جاهزة للإضافة إلى لامبيري.
باستخدام الوحدة النمطية الخاصة بك في لامبيري
نظرًا لحقيقة استخدام ssh وتنفيذ أمر showmount ، بالطبع ، يجب أن يكون لديك حق الوصول إلى الخادم الخاص بك عبر ssh. بالنسبة لاختباراتي ، تم لعب هذا الدور بواسطة الجهاز الظاهري في Virtualbox باستخدام Ubuntu وعميل NFS المثبت عليه.
للعمل مع الوحدات النمطية الأصلية على جهاز المستخدم ، يكون Python 3.6 مطلوبًا ، ويجب أن يكون المسار إلى المترجم في متغيرات النظام ، أو يجب تحديد المسار إلى ذلك في ملف Lampyre\config\appSettings.config
. افتراضيًا ، يتم تعليق مفتاح pythonPath في الإعدادات.
يتم تحميل وحدة نمطية في Lampyre في الخطوات التالية:
- في نافذة البرامج النصية ، قم بتحميل الملف Lampyre \ user_tasks \ ontology.py (يأتي مع التطبيق)
- في نفس النافذة ، قم بتحميل الوحدة النمطية الخاصة بك ، وفي هذه الحالة nfs_via_ssh.py. إذا حدث خطأ ما ، فيجب أن يساعد زر " التفاصيل"
- بعد التحميل ، في نافذة قائمة الطلبات في علامة تبويب المهام ، سيظهر قسم المهام المحلية (في رمز الوحدة النمطية التي يمكن أن نسميها بشكل مختلف) ، له اسم استكشاف: NFS (SSH) :

نافذة قائمة الطلبات المحدثة:

- من الأفضل الحصول على عناوين IP للخوادم التي تحتوي على NFS ، كما قلت سابقًا ، وذلك أولاً عن طريق تنفيذ استعلام بحث Shodan باستخدام Query: tcp 2049 المعلمات (يمكنك ببساطة تحديد nfs ). تعني معلمة الصفحة أو النطاق ، التي يتم تعيينها افتراضيًا إلى 1 ، أنه سيتم إرجاع صفحة واحدة من الردود من خدمة Shodan ، على صفحة عادة ما تكون هناك 100 نتيجة (صف).
نتيجة إعدام شودان:

- انسخ عناوين IP من الجدول أو من الرسم التخطيطي إلى الحافظة والصقه في نافذة استكشاف IP: NFS (SSH). تشغيل ونتوقع النتيجة:

بالطبع ، يجب أن تأخذ في الاعتبار عرض النطاق الترددي من الخوادم الخاصة بك والأجنبية ، والمهلة الزمنية ، والتي تم تعيينها بشكل صارم في رمز الوحدة النمطية.
يتم الحصول على النتيجة في شكل جدول ، ولكن يمكنك متابعة ودمج نتائج الجدول مع الرسم البياني للنتائج من تنفيذ بحث Shodan. سيكون من الصعب إلى حد ما إدراكه في البداية.
التصور من الجدول مع النتيجة
لنبدأ. هناك جدول مع مجموعة من الأعمدة مع القيم من تنفيذ وحدة المستخدم. لكن إذا لاحظت زر المخطط في نافذة الطلبات - فهو غير نشط. لأنه لم يتم تعيين تعيين الجدول إلى الرسم البياني ، ويجب تعيينه.
المخطط 1 (ليس الأفضل)
مع فتح الجدول ، من نتيجة الوحدة ، يوجد في الركن الأيمن السفلي عنصر واجهة "إضافة قالب إنشاء" ، من خلال النقر على نافذة "إنشاء قالب". في هذا ، يمكنك تحديد مناظرة صفوف الجدول لكائنات الرسم البياني ، ولن أصف العملية بالتفصيل في المقالة ، يظهر الرابط على قناة النظام الأساسي في Youtube كيفية القيام بذلك ، ضمن المقالة سأقصر نفسي على صور لما يجب أن يحدث:

قالب للرسم البياني:

من المهم أن نلاحظ أن IP ، كائنات المجال موجودة في Lampyre ، وأنشأت كائنات NFS و Network. , «» . , , — «» — , — - , . , NFS – 2 , NFS path Status, — NFS path. — . «» — Schema .
:

:

«» — i2 (IBM i2 Analyst's Notebook) :

«» , : IP- IP- , , NFS , IP. ( ).
2

. — , IP- :

, , (csv) . , «» . «» , .
Shodan NFS Shodan search, add to active tab — :

:

Lampyre , ssh.
— , NFS .