الفحص بـ OpenVAS
OpenVAS أو Greenbone: فاحص ثغرات شامل للشبكة كلها، إزاي تعمل Target و Task وتختار Scan Config، وتقرا التقرير بالـ CVSS و QoD، وتعدّ الـ findings لكل جهاز بـ Python.
نص شرح المعلم والكود الذي كتبه ونتيجة تشغيله، بنفس ترتيب الدرس.
كل الأدوات اللي فاتت كانت مركّزة: Nmap NSE على ports معيّنة، و Nuclei و Nikto على الـ web. بس ساعات العميل عايز فحص شامل للشبكة كلها، بتقرير جاهز. وهنا ييجي OpenVAS.
OpenVAS فاحص ثغرات open source، والنسخة الكاملة اسمها Greenbone. فيه عشرات الآلاف من الاختبارات، اسمها NVTs. بيفحص الشبكة كلها: كل الأجهزة وكل الخدمات. وليه واجهة web بتشتغل منها. وهو البديل المجاني لأدوات تجارية زي Nessus.
الشغل فيه بيمشي كده: تعمل Target: الـ IPs أو الـ range اللي هتفحصها. تعمل Task: تربط الـ Target بـ Scan Config. الـ Scan Config الافتراضي اسمه Full and fast. تشغّل الـ Task، وتستنى، الفحص ممكن ياخد ساعات.
في التقرير، كل finding ليه رقمين مهمين. الـ CVSS: خطورة الثَغْرة، زي ما اتعلمنا. والـ QoD، يعني Quality of Detection: OpenVAS متأكد قد إيه، كنسبة مئوية. الـ QoD الواطي، زي سبعين في المِيّة أو أقل، معناه خمّن من الإصدار، فراجعه بإيدك. هنا تقرير OpenVAS متصدّر CSV، ومختصر في list. كل سطر فيه الجهاز والـ port واسم الثَغْرة والـ CVSS، وبنطبعهم زي ما هُمّا. نشغّل… خمس findings على جهازين.
# Saved, shortened OpenVAS report (exported as CSV): host, port, name, CVSS
rows = [
("10.10.10.5", "80/tcp", "Apache HTTP Server 2.4.49 Path Traversal", 7.5),
("10.10.10.5", "445/tcp", "Samba 3.0.20 Command Injection", 10.0),
("10.10.10.5", "22/tcp", "SSH Weak Encryption Algorithms", 4.3),
("10.10.10.7", "21/tcp", "vsftpd 2.3.4 Backdoor", 9.8),
("10.10.10.7", "80/tcp", "Missing X-Frame-Options Header", 2.6),
]
for host, port, name, cvss in rows:
print(f"{cvss:4} {host:11} {port:8} {name}")المخرجات
7.5 10.10.10.5 80/tcp Apache HTTP Server 2.4.49 Path Traversal 10.0 10.10.10.5 445/tcp Samba 3.0.20 Command Injection 4.3 10.10.10.5 22/tcp SSH Weak Encryption Algorithms 9.8 10.10.10.7 21/tcp vsftpd 2.3.4 Backdoor 2.6 10.10.10.7 80/tcp Missing X-Frame-Options Header
دورك: عايزين نعرف كل جهاز عليه كام ثَغْرة. اعمل dict فاضي، ولفّ على الـ rows، وزوّد العدّاد بتاع كل host بواحد، واطبع الـ dict في الآخر.
per_host = {} وبعدين جُوّه الـ loop: per_host = per_host.get(host, 0) + 1
الحل: نشغّل… الجهاز الأول عليه تلاتة، والتاني عليه اتنين.
# Saved, shortened OpenVAS report (exported as CSV): host, port, name, CVSS
rows = [
("10.10.10.5", "80/tcp", "Apache HTTP Server 2.4.49 Path Traversal", 7.5),
("10.10.10.5", "445/tcp", "Samba 3.0.20 Command Injection", 10.0),
("10.10.10.5", "22/tcp", "SSH Weak Encryption Algorithms", 4.3),
("10.10.10.7", "21/tcp", "vsftpd 2.3.4 Backdoor", 9.8),
("10.10.10.7", "80/tcp", "Missing X-Frame-Options Header", 2.6),
]
for host, port, name, cvss in rows:
print(f"{cvss:4} {host:11} {port:8} {name}")
per_host = {}
for host, port, name, cvss in rows:
per_host[host] = per_host.get(host, 0) + 1
print(per_host)المخرجات
7.5 10.10.10.5 80/tcp Apache HTTP Server 2.4.49 Path Traversal
10.0 10.10.10.5 445/tcp Samba 3.0.20 Command Injection
4.3 10.10.10.5 22/tcp SSH Weak Encryption Algorithms
9.8 10.10.10.7 21/tcp vsftpd 2.3.4 Backdoor
2.6 10.10.10.7 80/tcp Missing X-Frame-Options Header
{'10.10.10.5': 3, '10.10.10.7': 2}لحد دلوقتي كل الأدوات بتفحص الهدف من بره. بس في طريقة بتوريك أكتر بكتير: الفحص بصلاحيات، يعني من جُوّه الجهاز. وده موضوع الدرس الجاي. يلا بينا.
03 / دروس المسار (16)
- 01يعني إيه ثغرة؟ ومن الـ Recon للـ Vulnerabilities
- 02CVE و CWE: أسماء الثغرات
- 03الخطورة: CVSS و EPSS و KEV
- 04البحث في NVD
- 05Exploit-DB و searchsploit
- 06GitHub و Metasploit
- 07الفحص بـ Nmap NSE
- 08الفحص بـ Nuclei
- 09الفحص بـ Nikto
- 10الفحص بـ OpenVASانت هنا
- 11فحص بصلاحيات ومن غيرها
- 12تجميع وتنظيم النتايج
- 13False Positives والتأكد اليدوي
- 14ترتيب الأولويات
- 15أتمتة الفحص بـ Python
- 16مراجعة شاملة