Το προφίλ μας στο Google Plus
0

Το nmap πέρα από τα βασικά

Μετά την πρώτη γνωριμία με το θαυμαστό nmap παραμένουμε στο άνετο περιβάλλον του Kali Linux και συνεχίζουμε τους πειραματισμούς στο πλαίσιο του εικονικού μας εργαστηρίου. Έχει φτάσει η ώρα να δούμε κάποιες πιο προχωρημένες δυνατότητες του nmap και να εκμεταλλευτούμε την πανίσχυρη scripting engine του προγράμματος. Τι λέτε, παίζουμε;

Σε όσα video tutorials ασχολούμαστε με το pen-testing, σίγουρα θα έχετε παρατηρήσει ότι σκανάρουμε το τοπικό δίκτυο για υποψήφιους στόχους πληκτρολογώντας κάτι τέτοιο:

root@kali:~# nmap -sS -Pn -T4 -A 10.10.10.0/24

Σε σχέση με όσα έχουμε δει στο εισαγωγικό μας άρθρο, στην παραπάνω εντολή υπάρχουν δύο νέες επιλογές: -A και -T4. Επίσης, αν και κάθε φορά που τρέχουμε το nmap ως root η επιλογή -sS υπονοείται, παραπάνω τη συμπεριλάβαμε σκόπιμα διότι θέλουμε να συζητήσουμε για ορισμένες μεθόδους port scanning. Ας αρχίσουμε λοιπόν απ’ αυτό το τελευταίο: την επιλογή -sS και τη σημασία της.

Κάθε φορά που πρόκειται να εγκαθιδρυθεί μια σύνδεση TCP μεταξύ δύο hosts Α και Β, λαμβάνει χώρα μια προκαταρκτική διαδικασία που ονομάζεται 3-way handshake. Ας υποθέσουμε ότι, για κάποιο λόγο, ο host Α θέλει να συνδεθεί στον host Β. Μπορούμε, π.χ., να φανταζόμαστε τον Α ως τον client και τον Β ως τον server. Παρακολουθήστε τη διαδικασία του 3-way handshake:

  1. Ο Α στέλνει σε κάποιο port του Β ένα πακέτο TCP SYN (το SYN προέρχεται από το SYNchronize). Ο Β λαμβάνει το πακέτο.
  2. Ο Β στέλνει στον Α ένα πακέτο SYN/ACK (το ACK προέρχεται από το ACKnowledge). Ο Α λαμβάνει το πακέτο SYN/ACK.
  3. Ο Α στέλνει στον Β ένα πακέτο ACK. Ο Β λαμβάνει το πακέτο ACK.

Μετά και το βήμα 3 εγκαθιδρύεται μια σύνδεση μεταξύ των Α και Β. Κοιτάξτε τώρα τι συμβαίνει όποτε δίνουμε στο nmap την επιλογή -sS: Για κάθε port που ελέγχουμε, το nmap ξεκινά ένα 3-way handshake αλλά δεν το ολοκληρώνει ποτέ. Αντίθετα, φτάνει μέχρι το βήμα 2 κι εξετάζει την απάντηση του στόχου. Αναλυτικότερα:

  • αν λάβει ένα πακέτο SYN/ACK, τότε το υπό εξέταση port είναι ανοικτό
  • το port θεωρείται ως ανοικτό και στη σπάνια περίπτωση μιας σύνδεσης split handshake, κατά την οποία ο client αντί για SYN/ACK λαμβάνει ένα πακέτο SYN (βλ. και http://nmap.org/misc/split-handshake.pdf)
  • αν το nmap λάβει ένα πακέτο RST (από το reset) τότε το port είναι μάλλον κλειστό, δηλαδή δεν υπάρχει κάποια υπηρεσία που να το χρησιμοποιεί
  • αν μετά από αρκετές προσπάθειες το nmap δεν λάβει κάποια απάντηση, τότε το port χαρακτηρίζεται ως filtered
  • ως filtered χαρακτηρίζεται κι όποτε συμβαίνει ένα λάθος τύπου ICMP unreachable.

Ακριβώς επειδή η συγκεκριμένη τεχνική σάρωσης του nmap σταματάει πάντα στο βήμα 2 του 3-way handshake, ονομάζεται half-open scanning. Αποτελεί δε την πλέον δημοφιλή τεχνική, αφού είναι σχετικά γρήγορη κι αυτό που θα λέγαμε “stealthy”, ενώ το μόνο που απαιτείται για να δουλέψει είναι μια τυπική στοίβα TCP/IP — το λειτουργικό που τρέχει ο στόχος δεν έχει σημασία!

Όταν δεν είναι δυνατή η ενεργοποίηση του half-open scanning, π.χ., επειδή το nmap δεν τρέχει από το λογαριασμό του υπερχρήστη, τότε εξ ορισμού χρησιμοποιείται το λεγόμενο TCP connect scan (επιλογή -sT). Με αυτή την τεχνική το nmap εγκαθιδρύει κανονικές, πλήρεις συνδέσεις προς τα ports του στόχου, και με βάση τα πακέτα που λαμβάνει επιχειρεί να συναγάγει τις όποιες πληροφορίες του έχουμε ζητήσει (π.χ., εκδόσεις ενεργών υπηρεσιών). Ένα TCP connect scan είναι πιο αργό σε σύγκριση με ένα TCP SYN scan προς το ίδιο μηχάνημα. Επίσης, ακόμη κι αν ο στόχος δεν τρέχει κάποιο IDS, η ίδια η πράξη του σαρώματος είναι πολύ πιθανό να αποθηκευτεί στα σχετικά αρχεία καταγραφής (log files).

Υπάρχουν κι άλλες τεχνικές σάρωσης που υποστηρίζει το nmap, όπως, π.χ., οι TCP Window scan (-sW) και TCP Maimon scan (-sM), οι οποίες αμφότερες εκμεταλλεύονται λεπτομέρειες υλοποίησης της στοίβας TCP/IP στα λειτουργικά των στόχων. Να σημειώσουμε τέλος ότι το nmap επιτρέπει στο χρήστη να καθορίζει ο ίδιος τις τιμές των flags στα TCP packets που αποστέλλονται στους στόχους (επιλογή –scanflags). Σίγουρα πρόκειται για προχωρημένη δυνατότητα που ενδιαφέρει όσους έχουν εμβαθύνει στο πρωτόκολλο TCP και ξέρουν πολύ καλά τι κάνουν.

Ανεξαρτήτως του τύπου σάρωσης και του πόσο εξειδικευμένα scans θέλετε να δοκιμάσετε, το man page του nmap είναι αρκετά καλογραμμένο και μάλλον περιλαμβάνει περισσότερες πληροφορίες απ’ όσες θα περιμένατε ;) Πληκτρολογήστε

root@kali:~# man nmap

για περισσότερα.

Ζητήματα χρόνου
Ο παράγοντας της ταχύτητας είναι μεγίστης σημασίας για το nmap. Όπως πιθανώς έχετε διαπιστώσει σκανάροντας κάποια hosts στο τοπικό σας δίκτυο, όταν, π.χ., ελέγχετε ένα μόνο μηχάνημα τότε η σάρωση συχνά ολοκληρώνεται σε κλάσματα του δευτερολέπτου. Τα πράγματα όμως αλλάζουν δραμματικά όποτε χρειάζεται να σαρώνουμε εκαταντάδες ή χιλιάδες hosts. Επίσης, ένα UDP scan είναι από τη φύση του πολύ πιο αργό σε σύγκριση με ένα TCP scan. Σημαντικά επηρεάζει την ταχύτητα σάρωσης και το τι ζητάμε από το nmap. Τις φορές, π.χ., που ενεργοποιούμε το μηχανισμό εντοπισμού της έκδοσης των υπηρεσιών, ο χρόνος ολοκλήρωσης αυξάνει σημαντικά.

Αν και το nmap υλοποιεί έξυπνα τρικ και τεχνικές προκειμένου να επιταχύνει τις σαρώσεις, την ίδια στιγμή προσφέρει στο χρήστη και τη δυνατότητα παρέμβασης στον τρόπο κατά τον οποίο το πρόγραμμα λειτουργεί. Υπάρχει μια πληθώρα επιλογών γι’ αυτό το σκοπό (–min-hostgroup, –max-hostgroup, –min-parallelism, –max-parallelism, –max-retries, –host-timeout κ.ά.) κι ο ενδιαφερόμενος χρήστης καλείται να πειραματιστεί με την ησυχία του, ώστε να δει τι αποτελέσματα μπορεί να έχει σε διαφορετικά περιβάλλοντα. Όμως με όλες αυτές τις –δεκατέσσερις στο πλήθος– διαφορετικές επιλογές, υπάρχουν και δύο θέματα:

  • είναι πολλές και συχνά μπερδεύουν
  • δύσκολα αξιολογούνται οι επιδράσεις τους στην πράξη, ειδικά όταν ο pen-tester ούτως ή άλλως έχει περιορισμένο χρόνο για να κάνει την εργασία του.

Ευτυχώς, το nmap παρέχει έξι διαφορετικά πρότυπα χρονισμού (timing templates). Ουσιαστικά πρόκειται για έξι διαφορετικά σύνολα προεπιλογών, τα οποία τίθενται σε ισχύ με τη βοήθεια της επιλογής -Tx, όπου το x είναι μεταξύ των 0 και 5 συμπεριλαμβανομένων. Εναλλακτικά, ο χρήστης μπορεί να δίνει κάτι σαν -T χαρακτηρισμός, όπου ο χαρακτηρισμός είναι ένας από τους paranoid, sneaky, polite, normal, aggressive και insane. Ας δούμε για τι σενάριο/περιβάλλον προορίζεται καθένα από τα διαθέσιμα timing templates.

  • paranoid (0) και sneaky (1). Πρότυπα κατάλληλα για την αποφυγή συστημάτων intrusion detection. Δεν επιτρέπουν στο nmap να διεξάγει παράλληλους ελέγχους και τα ports των στόχων δοκιμάζονται ένα προς ένα. Με το πρότυπο paranoid παρεμβάλλονται 5 λεπτά μεταξύ δύο διαδοχικών ελέγχων, ενώ με το sneaky 15 δευτερόλεπτα.
  • polite (2). Αργό scanning ώστε να χρησιμοποιείται λιγότερο bandwidth, λιγότεροι πόροι των υπό εξέταση μηχανημάτων, καθώς και να ελαχιστοποιείται –πρακτικά να μηδενίζεται– η πιθανότητα για κάποιο crash. Με το πρότυπο polite οι έλεγχοι γίνονται επίσης εν σειρά (όχι παράλληλα) και μεταξύ τους παρεμβάλλονται 400 χιλιοστά του δευτερολέπτου.
  • normal (3). Πρόκειται για τις προκαθορισμένες επιλογές timing που λαμβάνονται υπόψη σε κάθε σάρωση, εκτός κι αν επιλεγεί άλλο πρότυπο χρονισμού. Ένα normal scan επιτρέπει τον παραλληλισμό των ελέγχων και είναι πολύ πιθανό να ολοκληρώνεται ως και δέκα φορές γρηγορότερα, σε σύγκριση με ένα polite scan (διατηρώντας, βεβαίως, όλες τις άλλες παραμέτρους σταθερές κι επιχειρώντας εντός του ίδιου δικτύου).
  • aggressive (4). Επιτάχυνση της διαδικασίας σάρωσης, προϋποθέτοντας ότι δουλεύουμε σ’ ένα γρήγορο κι αξιόπιστο δίκτυο. Το εν λόγω timing template προτείνεται για σύγχρονα LANs αλλά και για όσους διαθέτουν μια σχετικά γρήγορη σύνδεση στο Internet, όπως, π.χ., μια αξιοπρεπή γραμμή ADSL.
  • insane (5). Θεωρώντας ότι βρισκόμαστε σ’ ένα εξαιρετικά γρήγορο δίκτυο, η επιλογή του συγκεκριμένου προτύπου συντελεί σ’ ένα ταχύτατο scanning κατά το οποίο, όμως, ενδέχεται να αντληθούν λιγότερες πληροφορίες σε σύγκριση μ’ αυτές που θα αντλούνταν αν είχε επιλεγεί κάποιο λιγότερο “αισιόδοξο” πρότυπο.

Έχετε υπόψη ότι τα πρότυπα χρονισμού επιτρέπεται να συνδυάζονται με επιλογές που επηρεάζουν λεπτομερώς τον τρόπο λειτουργίας του nmap (fine-grained control options). Σ’ αυτές τις περιπτώσεις, οι επιλογές που κάνουμε εμείς προηγούνται σε σχέση με εκείνες που πιθανώς υπαγορεύονται από το εκάστοτε timing template. Περισσότερα θα διαβάσετε στο man page του nmap.

Επιλογή-υπερόπλο
Πάμε τώρα στην επιλογή -A, την οποία τόσες φορές έχουμε χρησιμοποιήσει στα video tutorials του περιοδικού. Ουσιαστικά, αυτό το -A δεν είναι τίποτε άλλο από μια συντόμευση για την ενεργοποίηση τεσσάρων λειτουργιών:

-O – αναγνώριση λειτουργικού συστήματος
-sV – αναγνώριση εκδόσεων υπηρεσιών
-sC – script scanning, θα πούμε περισσότερα σε λίγο
–traceroute – “χαρτογράφηση” διαδρομών από το μηχάνημα με το nmap έως τους στόχους

Λόγω της ενεργοποίησης του προκαθορισμένου συνόλου scripts (-sC), η επιλογή -A καλό είναι να μη χρησιμοποιείται σε συστήματα που δεν είναι δικά μας, τουλάχιστον όχι πριν πάρουμε άδεια για να προχωρήσουμε. Πάντως για το scanme.nmap.org όλοι έχουν άδεια σάρωσης, οπότε δείτε τι επιστρέφει η επιλογή -A:

root@kali:~# nmap -A -T4 scanme.nmap.org
Starting Nmap 6.47 ( http://nmap.org ) at 2014-08-30 09:32 EEST
Nmap scan report for scanme.nmap.org (74.207.244.221)
Host is up (0.21s latency).
Not shown: 997 closed ports
PORT     STATE SERVICE    VERSION
22/tcp   open  ssh        OpenSSH 5.3p1 Debian 3ubuntu7.1 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   1024 8d:60:f1:7c:ca:b7:3d:0a:d6:67:54:9d:69:d9:b9:dd (DSA)
|_  2048 79:f8:09:ac:d4:e2:32:42:10:49:d3:bd:20:82:85:ec (RSA)
80/tcp   open  http       Apache httpd 2.2.14 ((Ubuntu))
|_http-title: Go ahead and ScanMe!
9929/tcp open  nping-echo Nping echo
Device type: general purpose|phone|firewall
Running (JUST GUESSING): Linux 2.6.X|3.X (95%), Fortinet Linux 2.6.X (87%), IPFire Linux 2.6.X (86%)
OS CPE: cpe:/o:linux:linux_kernel:2.6 cpe:/o:linux:linux_kernel:3 cpe:/o:fortinet:linux_kernel:2.6 cpe:/o:ipfire:linux:2.6.32
Aggressive OS guesses: Linux 2.6.32 - 2.6.39 (95%), 2.6.32 (94%), Linux 2.6.38 (93%), Linux 2.6.32 - 2.6.35 (92%), Linux 2.6.30 (91%), Linux 2.6.37 (91%), Linux 2.6.39 (91%), Linux 2.6.32 - 3.0 (91%), Linux 3.2 - 3.8 (90%), Linux 3.8 (90%)
No exact OS matches for host (test conditions non-ideal).
Network Distance: 17 hops
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE (using port 139/tcp)
HOP RTT       ADDRESS
1   14.48 ms  37.x.x.x
2   21.78 ms  78.x.x.x
3   14.88 ms  gi0-3.vxr2.skg.synapsecom.gr (78.108.32.70)
4   22.48 ms  gi0-0-0-2.rcr11.skg01.atlas.cogentco.com (149.11.72.21)
5   26.36 ms  be2297.ccr21.sof02.atlas.cogentco.com (130.117.2.41)
6   48.71 ms  be2046.ccr21.vie01.atlas.cogentco.com (130.117.1.22)
7   44.15 ms  be2200.ccr21.muc01.atlas.cogentco.com (130.117.49.1)
8   56.58 ms  be2229.ccr42.fra03.atlas.cogentco.com (154.54.38.57)
9   57.82 ms  be2188.agr21.fra03.atlas.cogentco.com (130.117.48.113)
10  48.13 ms  telia.fra03.atlas.cogentco.com (130.117.14.90)
11  50.46 ms  ffm-bb2-link.telia.net (213.155.136.198)
12  134.79 ms nyk-bb1-link.telia.net (213.155.131.145)
13  221.58 ms sjo-bb1-link.telia.net (80.91.245.96)
14  217.72 ms hurricane-ic-138359-sjo-bb1.c.telia.net (213.248.67.106)
15  211.98 ms 10ge3-2.core3.fmt2.he.net (184.105.222.13)
16  212.23 ms router3-fmt.linode.com (65.49.10.218)
17  206.52 ms scanme.nmap.org (74.207.244.221)

OS and Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 23.89 seconds
root@kali:~#

Χωρίς αμφιβολία, η πλέον ενδιαφέρουσα επιλογή που ενεργοποιεί η -A είναι εκείνη για το script scanning. Συνεχίστε το διάβασμα.

Τα πολύτιμα scripts
Το nmap έχει ικανότητες για εκτέλεση scripts, μέσω της σχετικής μηχανής που ενσωματώνει. Πρόκειται για τη λεγόμενη Nmap Scripting Engine (NSE), η οποία διερμηνεύει scripts γραμμένα στη γλώσσα Lua. Αρχικά τα scripts του nmap προορίζονταν για εργασίες όπως network discovery, προχωρημένο version detection κι ανίχνευση ευπαθειών (vulnerabilities ή αλλιώς vulns). Σήμερα ο βιότοπος των NSE scripts έχει επεκταθεί σημαντικά. Αρκεί ν’ αναλογιστούμε ότι μόνο τα επίσημα scripts εμπίπτουν στις ακόλουθες 13 κατηγορίες: auth, broadcast, default, discovery, dos, exploit, external, fuzzer, intrusive, malware, safe, version και vuln.

Πριν αρχίσουμε να παίζουμε με τα NSE scripts, αξίζει να υπογραμμίσουμε ότι δεν εκτελούνται εντός κάποιου προστατευμένου περιβάλλοντος (sandbox). Έτσι, δεν είναι απίθανο να προκαλέσουν ζημιά στο σύστημα ή/και να υπονομεύσουν την ασφάλειά του. Αναφερόμαστε βεβαίως στα ανεπίσημα scripts, τα οποία καλό είναι να μη χρησιμοποιούμε αν δεν εμπιστευόμαστε απόλυτα την πηγή ή/και δεν έχουμε εξετάσει τον κώδικά τους.

Νομίζουμε πως ο καλύτερος τρόπος για να κάνουμε την πρώτη μας γνωριμία με τα scripts, αλλά και για ν’ αποκτήσουμε μια καλή ιδέα περί των δυνατοτήτων που προσφέρουν στο χρήστη του nmap, είναι μέσα από μερικά παραδείγματα.

Παράδειγμα 1. Υπάρχουν μηχανήματα στο δίκτυο που προσφέρουν υπηρεσίες DHCP; Αν ναι, ποια είναι;

root@kali:~# nmap --script broadcast-dhcp-discover
Starting Nmap 6.47 ( http://nmap.org ) at 2014-09-01 07:19 EEST
Pre-scan script results:
| broadcast-dhcp-discover:
|   IP Offered: 10.10.10.167
|   DHCP Message Type: DHCPOFFER
|   Server Identifier: 10.10.10.254
|   IP Address Lease Time: 0 days, 0:05:00
|   Subnet Mask: 255.255.255.0
|   Router: 10.10.10.254
|   Domain Name Server: 10.10.10.254
|_  Domain Name: parabing.net
WARNING: No targets were specified, so 0 hosts scanned.
Nmap done: 0 IP addresses (0 hosts up) scanned in 1.22 seconds
root@kali:~#

Παράδειγμα 2. Υπάρχουν μηχανήματα στο δίκτυο που τρέχουν το Dropbox;

root@kali:~# nmap --script broadcast-dropbox-listener
Starting Nmap 6.47 ( http://nmap.org ) at 2014-09-01 07:22 EEST
Pre-scan script results:
| broadcast-dropbox-listener:
| displayname  ip           port   version  host_int   namespaces
|_             10.10.10.10  17500  1.8      107032736  684376, 24259886, 36249577, 40213408, 64654762, 98453486, 98453596, 229234128, 273431026, 273709344, 273719352, 588724142
WARNING: No targets were specified, so 0 hosts scanned.
Nmap done: 0 IP addresses (0 hosts up) scanned in 17.31 seconds
root@kali:~#

Παράδειγμα 3. Το μηχάνημα 10.10.10.162 τρέχει SAMBA. Δεν έχουμε πρόσβαση στα shares, ωστόσο μπορούμε να δοκιμάσουμε την τύχη μας εξαπολύοντας μια επίθεση brute force:

root@kali:~# nmap --script smb-brute -p445 10.10.10.162
Starting Nmap 6.47 ( http://nmap.org ) at 2014-09-01 08:11 EEST
Nmap scan report for 10.10.10.162
Host is up (0.00056s latency).
PORT    STATE SERVICE
445/tcp open  microsoft-ds
MAC Address: 08:00:27:EC:48:E4 (Cadmus Computer Systems)

Host script results:
| smb-brute:
|   msfadmin:msfadmin => Valid credentials
|_  user:user => Valid credentials

Nmap done: 1 IP address (1 host up) scanned in 200.76 seconds
root@kali:~#

Παράδειγμα 4. Διάφορα μηχανήματα στο τοπικό δίκτυο τρέχουν υπηρεσίες file sharing. Δεν είναι κακή ιδέα να ελέγξουμε για γνωστές αδυναμίες που αφορούν στις αντίστοιχες υπηρεσίες:

root@kali:~# nmap --script smb-check-vulns --script-args unsafe=1 -p445 10.10.10.0/24
...
Nmap scan report for JoePC.parabing.net (10.10.10.164)
Host is up (0.0022s latency).
PORT    STATE SERVICE
445/tcp open  microsoft-ds
MAC Address: 08:00:27:79:37:C5 (Cadmus Computer Systems)

Host script results:
| smb-check-vulns:
|   Conficker: Likely CLEAN; access was denied.
|   |  If you have a login, try using --script-args=smbuser=xxx,smbpass=yyy
|   |  (replace xxx and yyy with your username and password). Also try
|   |_ smbdomain=zzz if you know the domain. (Error NT_STATUS_ACCESS_DENIED)
|   SMBv2 DoS (CVE-2009-3103): NOT VULNERABLE
|   MS06-025: NO SERVICE (the Ras RPC service is inactive)
|_  MS07-029: NO SERVICE (the Dns Server RPC service is inactive)
...
Nmap scan report for secdesk.parabing.net (10.10.10.165)
Host is up (0.0020s latency).
PORT    STATE SERVICE
445/tcp open  microsoft-ds
MAC Address: 08:00:27:67:0E:3D (Cadmus Computer Systems)

Host script results:
| smb-check-vulns:
|   MS08-067: LIKELY VULNERABLE (host stopped responding)
|   Conficker: Likely CLEAN
|   SMBv2 DoS (CVE-2009-3103): NOT VULNERABLE
|   MS06-025: NO SERVICE (the Ras RPC service is inactive)
|_  MS07-029: NO SERVICE (the Dns Server RPC service is inactive)
...
root@kali:~#

Παράδειγμα 5. Υπάρχει ένα μηχάνημα στο δίκτυο, το 10.10.10.162, το οποίο δείχνει εντελώς απροστάτευτο. Με βάση την πληθώρα των υπηρεσιών που τρέχει, είναι πολύ πιθανό να ‘χει κι αδυναμίες πέρα από τις εύκολα αναγνωρίσιμες. Ας κάνουμε πρώτα ένα port scan, ελέγχοντας τις 2000 πιο δημοφιλείς θύρες (εξ ορισμού ελέγχονται οι 1000 πιο δημοφιλείς):

root@kali:~# nmap -sV --top-ports 2000 10.10.10.162
Starting Nmap 6.47 ( http://nmap.org ) at 2014-09-01 10:10 EEST
Nmap scan report for 10.10.10.162
Host is up (0.00060s latency).
Not shown: 1976 closed ports
PORT     STATE SERVICE     VERSION
21/tcp   open  ftp         vsftpd 2.3.4
22/tcp   open  ssh         OpenSSH 4.7p1 Debian 8ubuntu1 (protocol 2.0)
...
3632/tcp open  distccd     distccd v1 ((GNU) 4.2.4 (Ubuntu 4.2.4-1ubuntu4))
...
6667/tcp open  irc         Unreal ircd
8009/tcp open  ajp13       Apache Jserv (Protocol v1.3)
8180/tcp open  http        Apache Tomcat/Coyote JSP engine 1.1
...
Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 78.32 seconds
root@kali:~#

Εστιάζουμε την προσοχή μας στις υπηρεσίες ονόματι distccd και ircd. Ξεκινάμε με την πρώτη:

root@kali:~# nmap --script distcc* -p 3632 10.10.10.162
Starting Nmap 6.47 ( http://nmap.org ) at 2014-09-01 10:17 EEST
Nmap scan report for 10.10.10.162
Host is up (0.00054s latency).
PORT     STATE SERVICE
3632/tcp open  distccd
| distcc-cve2004-2687:
|   VULNERABLE:
|   distcc Daemon Command Execution
|     State: VULNERABLE (Exploitable)
|     IDs:  CVE:CVE-2004-2687
|     Risk factor: High  CVSSv2: 9.3 (HIGH) (AV:N/AC:M/Au:N/C:C/I:C/A:C)
|     Description:
|       Allows executing of arbitrary commands on systems running distccd 3.1 and
|       earlier. The vulnerability is the consequence of weak service configuration.
|
|     Disclosure date: 2002-02-01
|     Extra information:
|
|     uid=1(daemon) gid=1(daemon) groups=1(daemon)
|
|     References:
|       http://http://www.osvdb.org/13378
|       http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2004-2687
|       http://distcc.googlecode.com/svn/trunk/doc/web/security.html
|_      http://http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2004-2687
MAC Address: 08:00:27:EC:48:E4 (Cadmus Computer Systems)

Nmap done: 1 IP address (1 host up) scanned in 13.52 seconds
root@kali:~#

Σημειώστε ότι το πλήρες όνομα του script που μόλις χρησιμοποιήσαμε είναι “distcc-cve2004-2687”. Το nmap όμως δεν μας υποχρεώνει να θυμόμαστε τα ονόματα των scripts. Γι’ αυτό κι εμείς απλά γράψαμε “distcc” και μετά έναν αστερίσκο (χαρακτήρας-μπαλαντέρ). Σ’ αυτές τις περιπτώσεις, το nmap ψάχνει για scripts που να ταιριάζουν στο μοτίβο που έχει ορίσει ο χρήστης. Αν βρει κάποια, τα εκτελεί. (Στο παράδειγμα με την υπηρεσία distcc, υπάρχει ακριβώς ένα script.) Σειρά τώρα έχει η υπηρεσία ircd:

root@kali:~# nmap --script irc*unreal* -p 6667 10.10.10.162
Starting Nmap 6.47 ( http://nmap.org ) at 2014-09-01 10:46 EEST
Nmap scan report for 10.10.10.162
Host is up (0.0013s latency).
PORT     STATE SERVICE
6667/tcp open  irc
|_irc-unrealircd-backdoor: Looks like trojaned version of unrealircd. See http://seclists.org/fulldisclosure/2010/Jun/277
MAC Address: 08:00:27:EC:48:E4 (Cadmus Computer Systems)

Nmap done: 1 IP address (1 host up) scanned in 21.39 seconds
root@kali:~#

Παράδειγμα 6. Προσφάτως διαβάσαμε ότι, παρά τη μεγάλη έκταση που είχε πάρει η ιστορία με το Heartbleed bug (βλ. σχετικό άρθρο στο deltaHacker 031), υπάρχει ένα σημαντικό ποσοστό servers Εκεί Έξω (TM) οι οποίοι παραμένουν unpatched. Χάρη στο script ονόματι ssl-heartbleed είναι εύκολο να εντοπίσουμε τέτοια μηχανήματα. (Το πώς ακριβώς δεν σας το λέμε, αν όμως διαβάσετε προσεκτικά το εισαγωγικό μας άρθρο θα το καταλάβετε πανεύκολα.) Ιδού τα αποτελέσματα της εκτέλεσης του ssl-heartbleed, σε ένα ευπαθές μηχάνημα κάπου στο Internet:

root@kali:~# nmap --script ssl-heartbleed -p 443 xxxyyyzzz.alshamil.abc.ae
Starting Nmap 6.47 ( http://nmap.org ) at 2014-09-01 09:19 EEST
Nmap scan report for xxxyyyzzz.alshamil.abc.ae (217.p.q.r)
Host is up (0.17s latency).
PORT    STATE SERVICE
443/tcp open  https
| ssl-heartbleed:
|   VULNERABLE:
|   The Heartbleed Bug is a serious vulnerability in the popular OpenSSL cryptographic software library. It allows for stealing information intended to be protected by SSL/TLS encryption.
|     State: VULNERABLE
|     Risk factor: High
|     Description:
|       OpenSSL versions 1.0.1 and 1.0.2-beta releases (including 1.0.1f and 1.0.2-beta1) of OpenSSL are affected by the Heartbleed bug. The bug allows for reading memory of systems protected by the vulnerable OpenSSL versions and could allow for disclosure of otherwise encrypted confidential information as well as the encryption keys themselves.
|
|     References:
|       http://cvedetails.com/cve/2014-0160/
|       http://www.openssl.org/news/secadv_20140407.txt
|_      https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-0160

Nmap done: 1 IP address (1 host up) scanned in 1.84 seconds
root@kali:~#

Αλήθεια, πού στον πλανήτη είναι αυτός ο –μάλλον ξεχασμένος– server; Υπάρχουν ορισμένα scripts του nmap, με χρήση των οποίων είναι δυνατόν να παίρνουμε χρήσιμες απαντήσεις σε παρόμοια ερωτήματα:

root@kali:~# nmap --script ip-geolocation-* xxxyyyzzz.alshamil.abc.ae
Starting Nmap 6.47 ( http://nmap.org ) at 2014-09-01 09:23 EEST
Nmap scan report for xxxyyyzzz.alshamil.abc.ae (217.p.q.r)
Host is up (0.18s latency).
Not shown: 996 filtered ports
PORT     STATE  SERVICE
113/tcp  closed ident
443/tcp  open   https
8000/tcp closed http-alt
8009/tcp open   ajp13

Host script results:
| ip-geolocation-geobytes:
|   latitude: 25.23
|   longitude: 55.28
|   city: Dubai
|   region: Dubayy
|_  country: United Arab Emirates
| ip-geolocation-geoplugin:
| 217.p.q.r (xxxyyyzzz.alshamil.abc.ae)
|   coordinates (lat,lon): 24.4667,54.366699
|_  state: Ab\xC5\xAB Z\xCC\xA7aby, United Arab Emirates
|_ip-geolocation-maxmind: ERROR: Script execution failed (use -d to debug)

Nmap done: 1 IP address (1 host up) scanned in 12.04 seconds
root@kali:~#

Χρήση των scripts
Όπως έγινε φανερό στα προηγούμενα παραδείγματα, προκειμένου να εκτελέσουμε ένα script δίνουμε κάτι σαν

nmap --script όνομα_script στόχος

ή, ισοδύναμα, κάτι σαν

nmap --script=όνομα_script στόχος

(Η διαφορά στις δύο γραμμές είναι στην απουσία ή όχι του “ίσον”, στα δεξιά του “–script”.) Γενικότερα, στη θέση του όνομα_script μπορούμε να βάζουμε μια λίστα με ονόματα scripts ή/και ονόματα καταλόγων (οι οποίοι περιλαμβάνουν scripts) ή/και κατηγορίες scripts. Τα στοιχεία της λίστας χωρίζονται με κόμματα.

Να σημειώσουμε εδώ ότι η δημοφιλής επιλογή -A εμπεριέχει την -sC, η οποία με τη σειρά της σημαίνει “–script default”, δηλαδή εκτέλεση όλων των scripts που ανήκουν στην κατηγορία default. Αν, π.χ., σκανάρουμε το VM με το Metasploitable (10.10.10.162) πληκτρολογώντας

root@kali:~# nmap --script default 10.10.10.162

τότε θα εκτελεστούν όλα τα scripts της κατηγορίας default. Μεταξύ αυτών είναι και το script ονόματι ssh-hostkey, το οποίο επιστρέφει το δημόσιο ή τα δημόσια κλειδιά ενός SSH server. Όποτε ψάχνουμε για μία συγκεκριμένη πληροφορία, καλό είναι να σκανάρουμε πιο στοχευμένα. Παράδειγμα:

root@kali:~# nmap --script ssh-hostkey -p 22 10.10.10.162
Starting Nmap 6.47 ( http://nmap.org ) at 2014-09-01 13:06 EEST
Nmap scan report for 10.10.10.162
Host is up (0.00047s latency).
PORT   STATE SERVICE
22/tcp open  ssh
| ssh-hostkey:
|   1024 60:0f:cf:e1:c0:5f:6a:74:d6:90:24:fa:c4:d5:6c:cd (DSA)
|_  2048 56:56:24:0f:21:1d:de:a7:2b:ae:61:b1:24:3d:e8:f3 (RSA)
MAC Address: 08:00:27:EC:48:E4 (Cadmus Computer Systems)

Nmap done: 1 IP address (1 host up) scanned in 13.47 seconds
root@kali:~#

Η δε επιλογή –script-help δέχεται ως παράμετρο μια λίστα με ονόματα scripts, καταλόγων ή κατηγοριών, και κάνει αυτό που υποδηλώνει το όνομά της. Δείτε:

root@kali:~# nmap --script-help ssh-hostkey
Starting Nmap 6.47 ( http://nmap.org ) at 2014-09-01 13:19 EEST
ssh-hostkey
Categories: safe default discovery
http://nmap.org/nsedoc/scripts/ssh-hostkey.html
  Shows SSH hostkeys.

  Shows the target SSH server's key fingerprint and (with high enough
  verbosity level) the public key itself.  It records the discovered host keys
  in <code>nmap.registry</code> for use by other scripts.  Output can be
  controlled with the <code>ssh_hostkey</code> script argument.

  You may also compare the retrieved key with the keys in your known-hosts
  file using the <code>known-hosts</code> argument.

  The script also includes a postrule that check for duplicate hosts using the
  gathered keys.
root@kali:~#

Να κι άλλο ένα παράδειγμα, όπου παίρνουμε βοήθεια για όλα τα scripts της κατηγορίας ονόματι “dos” (Denial of Service):

root@kali:~# nmap --script-help dos|less

(Πατήστε το [Q] για να βγείτε από το less.) Δοκιμάστε τώρα να πληκτρολογήσετε αυτό:

root@kali:~# nmap --script-help all|less

Θα πάρετε μια μακροσκελή λίστα με όλα τα διαθέσιμα scripts, αλφαβητικά ταξινομημένα. Ίσως έχετε ήδη παρατηρήσει ότι ένα script επιτρέπεται να ανήκει σε περισσότερες από μία κατηγορίες. Πολύ εύκολα, μπορούμε να ζητάμε την εκτέλεση scripts που ανήκουν σε τουλάχιστον μία κατηγορία από ένα σύνολο προκαθορισμένων. Εναλλακτικά, έχουμε τη δυνατότητα εκτέλεσης scripts που ανήκουν σε δύο ή περισσότερες κατηγορίες ταυτόχρονα. Κι επειδή φανταζόμαστε ότι δεν είναι όλοι οι αναγνώστες του περιοδικού εξεικοιωμένοι με τη Μαθηματική Θεωρία Συνόλων, ας προσέξουμε τα παραδείγματα που ακολουθούν.

Γράφοντας κάτι σαν

nmap --script "default or safe" the_target 

λέμε στο nmap να σκανάρει το στόχο the_target τρέχοντας όλα τα scripts που ανήκουν στην κατηγορία default ή στην κατηγορία safe ή και στις δύο ταυτόχρονα. Από την άλλη, πληκτρολογώντας κάτι σαν

nmap --script "default and safe" the_target

σκανάρουμε τον στόχο the_target ενεργοποιώντας τα scripts που ανήκουν στις κατηγορίες default και safe ταυτόχρονα. Η –script καταλαβαίνει τον τελεστή της άρνησης (not) και λαμβάνει υπόψη τις παρενθέσεις, επομένως έχουμε τεράστια ευελιξία ως προς την επιλογή scripts προς εκτέλεση. Δείτε:

nmap --script "(intrusive or exploit or vuln or dos) and not mysql*"

Τέλος, όπως θα παρατηρήσατε και στο παράδειγμα 4 της προηγούμενης ενότητας, τα scripts επιδέχονται παραμέτρους με τη βοήθεια της επιλογής –script-args. Παροτρύνεστε να πειραματιστείτε με την ησυχία σας με τα NSE scripts, στο δικό σας (εικονικό) εργαστήριο. Θα διαπιστώσετε ότι η σχετική τεκμηρίωση που παρέχεται από τον επίσημο δικτυακό τόπο του nmap είναι ποιοτική κι εξαιρετικά χρήσιμη. Για όλες τις κατηγορίες των scripts πηγαίνετε απευθείας στο http://nmap.org/book/nse-usage.html#nse-categories, ενώ για γρήγορη πρόσβαση στις κατηγορίες ή/και σε μεμονωμένα scripts δείτε το http://nmap.org/nsedoc. Εναλλακτικά, εξετάστε όλα τα διαθέσιμα scripts, διαβάστε τι κάνει το καθένα αλλά δείτε και πολύτιμα παραδείγματα χρήσης, μέσα από το περιβάλλον του Zenmap: Επιλέξτε Profile –> New Profile or Command και στο νέο παράθυρο που θα εμφανιστεί κάντε κλικ στην καρτέλα “Scripting”.

Βάζουμε εδώ μια άνω τελεία, να σας αφήσουμε κι εσάς να παίξετε με την ησυχία σας. Επιφυλασσόμεθα να επανέλθουμε σύντομα στο nmap, με περισσότερα σενάρια χρήσης και πρακτικές εφαρμογές. Προς το παρόν έχουμε κατά νου κάποια άρθρα, τα οποία κατά πάσα πιθανότητα θα δημοσιεύσουμε στο site του περιοδικού. Έως τότε, καλή σας διασκέδαση!

Κάποια NSE scripts είναι πιθανό να προκαλέσουν κρασαρίσματα στα μηχανήματα που σκανάρουμε. Στο screenshot βλέπουμε τα αποτελέσματα του smb-check-vulns σε ένα host με Windows XP.

Κάποια NSE scripts είναι πιθανό να προκαλέσουν κρασαρίσματα στα μηχανήματα που σκανάρουμε. Στο screenshot βλέπουμε τα αποτελέσματα του smb-check-vulns σε ένα host με Windows XP.

Από το φιλικό περιβάλλον του Zenmap έχουμε την ευκαιρία να εξετάσουμε άνετα όλα τα διαθέσιμα NSE scripts, να μάθουμε λεπτομέρειες για την αποστολή τους αλλά και να δούμε πώς ακριβώς τα χρησιμοποιούμε στα δικά μας scans.

Από το φιλικό περιβάλλον του Zenmap έχουμε την ευκαιρία να εξετάσουμε άνετα όλα τα διαθέσιμα NSE scripts, να μάθουμε λεπτομέρειες για την αποστολή τους αλλά και να δούμε πώς ακριβώς τα χρησιμοποιούμε στα δικά μας scans.

Σας άρεσε το άρθρο; Αν ναι, τι θα λέγατε για ένα tip στο PayPal;

Leave a Reply

You must be logged in to post a comment.

Σύνδεση

Αρχείο δημοσιεύσεων