Nmap.Nmap scripting engine

Izvor: SIS Wiki
Skoči na: orijentacija, traži

Sadržaj

Nmap

Nmap (eng. Network mapper) je besplatan program otvorenog koda za ispitivanje mreže i provjeru sigurnosti. Program omogućuje pregledavanje TCP i UDP portova na ciljanom računalu, otkrivanje servisa koji slušaju na otvorenim portovima, prepoznavanje operacijskog sustava i sl. Iako je Nmap najčešće korišten u sigurnosti, mnogi sistemski i mrežni administratori koriste ga i kao alat za rutinske zadatke poput sastavljanja popisa mrežnog inventara, upravljanja vremenima nadogradnje servisa i nadgledanja uptime-a računala ili servisa. Program je podržan na velikom broju operacijskih sustava (Linux, Microsoft Windows, FreeBSD, OpenBSD, Solaris, IRIX, Mac OS X, Amiga...) Tijekom godina doživio mnoga poboljšanja od kojih su samo neka: manja potrošnja memorije prilikom skeniranja portova, potpuno novi engine za skeniranje portova, interaktivnost za vrijeme izvršavanja i procjena vremena potrebnog za skeniranje. Program je objavljen pod GPL (eng. General Public License) licencom i trenutno se smatra najkvalitetnijim i najnaprednijim programom ove namjene. Iako je program primarno razvijen za Linux/Unix operacijske sustave, zbog njegove kvalitete razvijena je i Windows inačica. Posljednja verzija programa je 6.25, a objavljena je u studenom 2012.


Funkcionalnost alata

Nmap omogućava niz različitih načina pregleda portova i cijelog računala kroz mrežu - omogućavajući nevidljivost te lažiranje izvorišne adrese. Koristi IP pakete sa posebnim sadržajem i omogućava otkrivanje aktivnih/neakitvnih računala; skeniranje portova; detekcija verzije mrežnih servisa tj koji su tipovi aplikacije aktivni; koja im je radna verzija te detekciju verzije operacijskog sustava i vrste uređaja.

Razlikuje 6 različitih stanja portova:



Na stranici insecure.org stoji kako je Nmap:

Skeniranje pomoću Nmap alata

Nmap šalje „sirove“ (eng. row) TCP pakete radi čega su nam većinom potrebne administratorske ovlasti. Točnost samih podataka ovisi isključivo o povratnim informacijima koje dobiju od ciljanih računala ili vatrozida iza kojih se ta računala nalaze, a oni mogu biti i lažni kako bi zavarali Nmap i slične programe.


-sS odnosno TCP SYN pregled

Najčešće korišten tip pregleda poradi brzine, ali i zbog toga što ga je teško opaziti budući da nikad u potpunosti neuspostavlja TCP vezu, drugim riječima, ne ostvaruje se potpuno rukovanje nego se veza prekida čim se ustvrdi otvoreni port. Nmap šalje SYN paket na ciljano računalo, kao da želi uspostaviti vezu, ukoliko je port otvoren računalo će odgovoriti sa SYN/ACK paketom, a ako nije sa RST paketom. Nakon određenog vremena, ukoliko Nmap ne primi nikakav odgovor ili da primi da je nedostupan, označit će takav port kao filtriran.


-sT TCP connect pregled

Ako korisniku nije dostupan SYN pregled, koristiti će TCP connect pregled, odnosno connect () funkciju koju pozivaju aplikacije kao što su web preglednici, P2P i sl. Manje je učinkovit nego SYN pregled, ali ako je port otvoren uvijek će uspostaviti vezu u postpunosti. Zbog toga se šalje veći broj paketa pa pregled traje duže. Ovakav tip skeniranja koristi se kada korisnik nema administratorske ovlasti.


-sU UDP pregled

Prilično jedostavno skeniranje budući da nema potrebe za rukovanjem, paketi se šalju i primaju ili odbacuju. Problem ovog tipa skeniranje jest da većina TCP/IP stogova ima implementiranu kontrolu brzine primanja/slanja ICMP poruka, pa će poruke o neaktivnim portovima uzrokovati sporiji rad programa. Dakle, ako Nmap kao odgovor primi ICMP poruku „port unreachable error“ znači da je port zatvoren, ako primi „port unreachable“ grešku port je filtiran, no ako port odgovori UDP paketom – otvoren je. Da bi port bio otvoren također ne mora biti nikakvog odgovora te ga Nmap označava kao otvoren|filtriran. Za precizniji pregled koristimo –sV.


-sN, -sF, -sX TCP null, FIN i Xmas pregled

Ovi tipovi pregleda omogućuje identifikaciju samo TCP portova i pritom zahtjevaju administratorske ovlasti. Može se reći da se ovdje radi o skrivenom skeniranju jer se koriste posebno generirani paketi koji uzrokuju paket s RST zastavicom kao odgovor kada je port zatvoren ili nikakav odgovor ako na njemu postoji aktivni servis, drugim riječima ako nema odgovora port je otvoren|filtriran, a u slučaju primljenog ICMP "port unreachable" greške port je filtriran. Ovdje je gotovo nemoguće razlikovati stanje između otvorenog porta i namjerno odbačenih paketa koristeći vatrozid.


-sA TCP ACK pregled

Ova vrsta pregleda služi isključivo za mapiranje pravila vatrozida i za otkrivanje koji su portovi filtrirani. ACK pregled šalje samo ACK paket, a otvoreni i zatvoreni portovi kao odgovor šalju RST paket te ih Nmap označava kao nefiltrirane. Portovi koji ne odgovore ili odgovore nekom ICMP „port unreachable“ greškom se označavaju kao filtrirani.


-sP Ping skeniranje

Jedan od najjednostavniji tipova pregleda. Postoje samo dva razmijenjena paketa po pojedinom računalu, a oni ne služe identifikaciji portova, nego pronalaženju aktivnih računala ili uređaja po pojedinim IP adresama.

Za skeniranje portova koriste se naredbe oblika Nmap [tip skeniranja] [opcije][specifikacija mete]. Tipovi skeniranja su npr: -sP tzv ping skeniranje, -sS SYN skeniranje, -sT connect skeniranje. Opcije koje želimo skenirati mogu se odnositi samo na određeni port (-pX), različite portove (–pX-Y), najpopularnije portove (--top-portsX), da se testiraju sve moguće metode identifikacije (--version-all), detektiranje tipa operacijskog sustava (-osscan-guess), brzinu skeniranje (-TX), detekciju verzija (-a)... Mete mogu biti po hostnameu, CIDR maski, rasponu ili preko datoteke. Postoji još mnoštvo naprednijih tipova pregleda koji zahtijevaju višu razinu poznavanja TCP/IP protokola, implementacije mrežnih stogova i sl. Nedostaci ovog alata su da ga pojedini antivirusni programi smatraju malicioznim te prema tome i blokiraju ga kao npr McAfee antivirusni program; drugi nedostatak je da se prilikom SYN skeniranja mogu srušiti pojedini sustavi.

Online skener

Ukoliko netko ne želi instalirati ili analizira mrežu preko posredničkog računala ne mora preuzeti Nmap s weba nego jednostavno otići na http://nmap.online-domain-tools.com/. Nmap online skener podržava većinu funkcionalnosti Nmap sigurnosnog skenera. Može se koristiti kao jednostavan i brz port skener da se dobije informacija o servisima koji rade na računalu u mreži. Korsteći Nmap online skener, mogu se otkriti računala u mreži i detektirati na kojim operacijskim sustavima rade. Kako je Nmap sam po sebi složen alat, u online verziji postoje 3 različita načina rada. Prva dva su jednostavna za korištenje i mogu ih koristiti početnici. „Brzo“ (eng. quick) skeniranje računala brzo skenira poznate portove i daje brze informacije o portovima i uslugama dostupnih na računalu s interneta. „Cijelokupno“ (eng. full) skeniranje računala je način u kojem Nmap online skener skenira niz portova koji su navedeni u ovom načinu, a to može potrajati ukoliko se želi skenirati više od 10.000 portova. U slučaju velikog broja portova i ograničenja usluge potrebno je podijeliti skeniranje u manje opsežne zahtjeve jer online skener će pretraživati mrežu maksimalno 45 minuta. Posljednja verzija jest prilagođeni (eng. custom) način skeniranja i tu se mogu iskoristiti sve čari Nmap alata. Iako tu postoje određene granice zbog sigurnosih razloga, ukoliko su nam namjere dobre, uvjerava nas autor, trebali bi biti u mogućnosti koristiti Nmap skener za bilo što. U prilagođenom načinu rada skenera korisnik sam određuje način na koji nešto želi skenirati - slično kao da se koristi konzola. S jedne IP adrese moguće je dnevno napraviti 10 upita.

Zanimljive činjenice

Nmap je alat koji nije poznat samo u IT svijetu nego također je uvelike prepoznat i korišten u Hollywoodu za prikaz scena hakiranja. Kako piše na stranici nmap.org korištenje Nmapa u svrhu hakiranja je puno realističnije nego u poznatim „hakerskim“ filmovima gdje se probije mreža unutar 5 sekundi neprekidno udarajući po tastaturi. Jedna od takvih banalnih scena, i moj osobni favorit može se pogledati na [1]. Korištenje Nmapa prikazano je u filmovima kao što je „The Matrix Reloaded“, "Dreddu", "Bourn Ultimatumu", "Die Hard 4", te u „The Girl with the Dragon Tatto“. [2]

Jedna tastatura -2 para ruku.jpg
Slika 1. Hard core hakiranje

--Marina Grubeša 19:15, 12. siječnja 2013. (CET) 19:14, 12. siječnja 2013. (CET)

Zenmap

Zenmap je grafičko korisničko sučelje nmapa koje nudi pojednostavljene opcije mrežnog skeniranja, za razliku od nmap naredba, ponuđeni su profili skeniranja.

Preuzimanje i instalacija alata

Softver je najbolje preuzeti sa službenih stranica nmapa u .exe formatu, te uz par jednostavnih klikova program će se instalirati, ali to nije kraj. Da bi ste se mogli služiti ovim softverom na Windowsima, potrebno je instalirati WinPcap, ukoliko ga nemate, zenmap će upozoriti da ga trebate instalirati. WinPcap je alat namijenjen pristupu mrežnim uslugama na niskoj razini i u realnom vremenu te je namijenjen Windows operacijskim sustavima.

Cpap.jpg
Slika 2. WinPcap

Pokretanje softvera

Kada se pokrene softver prikaže se glavna forma kao na slici. Iz slike možemo vidjeti da je zenmap dostupan na i hrvatskom jeziku, no koliko je to zapravo korisno ovisi o svakom korisniku indvidualno. Skeniranje obavljamo na način da unesemo metu ili IP adresu i pokrenemo skeniranje. Kao u konzoli, možemo odabrati specifični rang IP adresa, bitno je samo ne ostavljati nikakav razmak, ispravno bi bilo npr. 192.168.1.36-80. Po tom je potrebno odabrati tip skeniranja, zadani (eng. defaultni) jest intezivni tip skeniranja koji daje većinu informacija o meti koju pretražujemo. Nakon što odaberemo odredišni mrežni čvor i profil skeniranja, ono se pokreće te se prikazuju rezultati. Tijekom skeniranja zenmap nam daje uvid u trenutno stanje mreže te prikazuje odgovore odredišnog računala Postoji 10 različitih načina skeniranja: intezivno skeniranje, intezivno s UDP-om, intezivno sa svim TCP portovima, intezivno bez ping skeniranja, ping skeniranje, brzo skeniranje, brzo skeniranje s detaljnijim informacijama, brzo skreniranje s traceroutom, regularno skeniranje i sporo opsežno skeniranje.

Zem.jpg
Slika 3. Zenmap

Rezultati skeniranja

Nakon što je skeniranje završeno podaci se prikazuju u obliku otvorenih servisa i njihovog stanja. U alatu postoji pet kartica koje nam daju uvid na različite ispise rezultata: nmap ispis, portovi/računala, toplogija, detalji skeniranja, te prikaz svih skeniranja koje smo napravili dosada. Nmap pomoću tracerouta broji mrežne skokove do odredišnog računala, pritom gradi sliku topologije mreže te prikazuje brzine između pojednih čvorova. S tim rezultatimo naravno možemo manipulirati. Alat dopušta pohranu na medij, ispis, usporedbu s drugim rezultatima, filtiranje i slično.

1-2-3-4.jpg
Slika 4. Rezultati detaljnog skeniranja

Ostale mogućnosti

Osim navedenih, nmap pruža i neke naprednije mogućnosti. Jedna od takvih je pokretanje skripti u programskom jeziku Lua tijekom postupka mapiranja mreže i analize čvorova. Alat nudi, ovisno o vrsti mapiranja (port scanning / host discovery), pokretanje skripti koje izvršavaju dodatne upite o sustavu, ili testiraju njegovu sigurnost. Kategorije skripti i njihov opis dao je kolega Turić. Alat uz navedene mogućnosti nudi još i usporedbu rezultata skeniranja pomoću alata ndiff - u svrhu praćenja stanja nekog mrežnog čvora, te mogućnost otkrivanja greški u mreži pomoću alata ncat (napredna implementacija alata netcat). Nmap je kreiran prije 16 godina te se konstantno razvija, od jednog običnog skenera portova prerastao je u cjelovit skup alata za ispitivanje sigurnosti te za njega ne postoji adekvatna zamjena.

--Marina Grubeša 19:16, 12. siječnja 2013. (CET)

Nmap Scripting engine (NSE)

Nmap scritpting engine (NSE) je jedna od najvažnijih i najfleksibilnijih mogućnosti Nmap-a. Spomenuta mogućnost dozvoljava svojim korisnicima da pišu svoje vlastite skripte kako bi automatizirali veliki broj mrežnih zadataka i tako pojednostavili određene zadatke za krajnje korisnike. Jedna od važnijih činjenica je ta da broj skripi neprestano raste. NSE je dizajniran tako da je u mogućnosti izvršiti razne zadatke koje su tipa:

--Mario.orsolic 12:17, 10. siječnja 2013. (CET)

--Renato Turić 17:31, 10. siječnja 2013. (CET)

Jezgra NSE-a

NMap Scripting Engine (NSE) se smatra jednom od najačih i fleksibilnijih svojstava Nmapa. Uz pomoć NSEa korisnici mogu pisati i dijeliti skripte da automatiziraju razne mrežne zadatke. Prema službenoj dokumentaciji NSE je dizajniran da bude prilagodljiv sa fokusom na sljedeće zadatke:

Jezgra NSEa se sastoji od:

--Mario.orsolic 12:17, 10. siječnja 2013. (CET)

Lua interpreter

Između raznih skriptnih jezika, Lua je izabrana iz više razloga. Prva stvar koju je tvorac NMapa htio postići jest usklađenost licenci, nakon toga lakoća samog interpretera. Pod ovim se misli na količinu resursa koje će interpreter zauzeti, te lako usklađivanje sa višedretvenosti i mutex isključivanjem pokrenutih skripti. Od svih skriptih jezika tvorcima NMapa Lua je najviše odgovarala, te uz to ima veliku zajednicu koja je konstantno održava.

Nmap API se nalazi unutar Lua namespacea nmap (što znači da pozivi prema nmap resursima sadrže nmap prefix npr. nmap.new_socket()

--Mario.orsolic 12:17, 10. siječnja 2013. (CET)

NSE biblioteke

NSE biblioteke povezuju Lua jezik i Nmap. Ovaj sloj je zadužen za inicijalizaciju interpretera, izvođenje paralelnih skripti, dohvaćanje skripti i sl. U srži on predstavlja skup biblioteka koje olakšavaju i proširuju mogućnosti Nmapa. Većina ovih biblioteka pisana je u Lua jeziku dok su neke pisane u C i C++ jeziku zbog preformansi (bit, pcre biblioteke i sl.)

--Mario.orsolic 12:17, 10. siječnja 2013. (CET)

Kategorije skripti

NSE definira nekoliko kategorija skripti, trenutačne kategorije su sljedeće:

--Renato Turić 17:31, 10. siječnja 2013. (CET)

Format skripte

Svaka NSE skripta bi trebala imat format koji je zadan po NSE standardu. Taj format se sastoji od 2 do 5 polja zajedno sa port ili host pravilom te blokom koji se naziva action. Blok action sadrži stvarne instrukcije skripte.

Polje description predstavlja polje koje sadrži opis što točno skripta testira te razna upozorenja i upute za korisnika. Ovisno o kompleksnosti skripte ovo polje može se sastojati od par rečenica ili od nekoliko paragrafa.

Polje categories definira jednu ili više kategorija u koju pripada dotična skripta. Primjer: categories = {„default“,“discovery“,“safe“}

Sljedeće polje predstavlja polje naziva author. Kao što i sama riječ kaže ovo polje sadrži naziv autora skripte. Ovo polje također može sadržavati određene kontaktne informacije.

Polje license, koje je opcionalno, omogućava da Nmap ima legalna prava da distribuira dotičnu skriptu. Kako bi to učinili morate dodati ovu liniju koda:

license = "Same as Nmap--See http://nmap.org/book/man-legal.html"

Polje dependencies sadrži niz imena skripti koje se trebaju pokrenuti rije nego se pokrene skripta. Primjer zadavanje skripti koje se trebaju pokrenuti prije dotične skripte: dependencies = {"smb-brute"}

--Renato Turić 17:31, 10. siječnja 2013. (CET)

Port i host pravila

Skripta sadrži ili port pravilo ili host pravilo. Port pravilo govori o tome koji porotvi se mogu susresti sa skripom. Host pravilo govori o tome da određena skripta može biti pokrenuta samo jednom za određenu IP adresu i to samo onda ako su zadovoljeni svi postavljeni uvjeti. Pravila su funkcije koje vračaju ili true ili false vrijednost.

--Renato Turić 17:31, 10. siječnja 2013. (CET)

Action

Actions predstavljaju srce određene NSE skripte. Actions sadrže sve instrukcije koje se trebaju izvršiti kada se aktivira port ili host pravilo. Actions su također funkcije koje vračaju vrijednosti nil (u Lua jeziku nil vrijednost predstavlja vrijednost koja obično označava da je neka važna vrijednost odsutna) ili određeni string.

--Renato Turić 17:31, 10. siječnja 2013. (CET)

Nmap API

Nmap API sprema razne informacije o stanjima portova, verzijama sustava i ostalim informacijama koje korisnik zahtjeva prilikom izvršavanja skripti. Uz to također omogućava sučelje prema Nsock biblioteci za efikasnije mrežne ulaze/izlaze.

Efikasan NSE zahtjeva više od samog Lua interpretera. Korisnici trebaju jednostavan pristup podacima koje je Nmap prikupio o ciljanim hostovima. Podaci su proslijeđeni kao argumenti za metodu action. Argumenti su port i host. Spomenuti argumenti su tablice iz programskog jezika Lua. Ako skripta odgovara određenom host pravilu onda dobiva samo host tablicu, u slučaju da odgovara port pravilu onda dobiva i host i port tablicu. Vrijednosti koje se nalaze u tim tablicama su spremljene u raznim varijablama, te varijable su sljedeće: host, host.os, host.name, host.targetname, host.directly_connected, host.mac_addr, host.mac_addr_next_hop, host.mac_addr_src, host.interface, host.bin_ip, host.bin_ip_src, host.ip, port, port.number, port.protocol, port.service, port.version

Kako bi se dopustila efikasna i paralelna mreža I/O, NSE osigurava sučelje prema Nsock-u. Nsock je Nmap biblioteka za sockete.

NSE također osigurava mehanizam za obrađivanje iznimaka koji nije zastupljen u Lua programskom jeziku.

Registri u NSE-u je prikazan kao Lua tablica (nmap.registry). Ono što treba naglasiti je to da su registri vidljivi za sve skripte. Svaka skripta može čitati i pisati u registru.

--Renato Turić 17:31, 10. siječnja 2013. (CET)

Primjeri

Kategorija default skripti će vratiti rezultate o operativnom sustavu, workgruop nazivu, informacije o netbiosu

Default.png

Skripte koje vraćaju rezultate tipa geografskog položaja , naziv organizacije i dometu mreže.

External.png

Skripte koje provjeravaju da li ciljani sustav ima određene, uobičajene, ranjivosti.

Vuln.png

--Renato Turić 17:31, 10. siječnja 2013. (CET)

Primjer vlastite skripte

Ovo je kratka i jednostavna skripta koja će nakon skeniranja mreže ispisati koliko uređaja koristi koji operativni sustav.

Skriptu možete preuzeti ovdje.


Os-sum.png


--Renato Turić 17:31, 10. siječnja 2013. (CET)

Pisanje vlastite skripte i rješavanje problema

Kao što je već navedeno većina skripti pisana za NSE je u Lua jeziku koji je dosta direktan. No osim što je potrebno poznavanje programskog jezika i samog problema kojeg programer želi riješiti postoje određene strukture kojih se mora držati prilikom pisanja skripti. Skripta se dijeli na tri dijela head , rule i action.

Head

Glava skripte služi u svrhu određenih meta informacija za korisnike skripte, sastoji se od opisa, autora, licence, kategorije u koju skripta spada i same NSEDoc tj. dokumentacije same skripte.

description= [[
Uhvati podatke od skeniranih portova i servisa te ih vraće
u obliku os.name | port.number | port.service | port.version
]]
author = "Mario Orsolic"
license = "Same as Nmap--See http://nmap.org/book/man-legal.html"
categories = {"default", "safe"}

Prije nastavka određene skripte još moramo uključiti potrebne module za izvršavanje koda ako je to potrebno, npr. za pristup stdnse biblioteci pišemo idući kod:

local stdnse = require("stdnse")

Rule

Svaka skripta tijekom svog izvršavanja mora imati pravilo kada će se izvršiti a kada će biti preskočena. Postoji nekoliko vrsta pravila:

Portrule pravila se koriste ako želimo izvršavati skriptu na temelju stanja portova, npr. ako je port 80 otvoren skripta će se izvršiti. Hostrule se za razliku od portrule pravila odnosi na stanje hosta, npr ako host postoji i odgovara tijekom pinganja izvršavamo skriptu.

Action

Akcija je dio koda skripte koji se izvršava ako je zadovoljeno pravilo. Ona inače započinje sa definiranom strukturom

action = function(host,port)
end 

Unutar ove funkcije pišemo kod koji želimo da skripta izvršava.

Prilikom pisanja skripti korisno je iskoristiti mogućnost Nmap API sučelja koje nam omogućava. Uz pomoć njega možemo pristupiti informacijama koje je određeni scan dohvatio, primjerice port.version, host.os i sl. Više o Nmap API se može pronaći u dokumentaciji .


Za problem uzeli smo ideju sa službene stranice Nmap skripti, bilo je potrebno dohvatiti podatke verzije i fingerprinta skeniranja te ih proslijediti na stranicu exploitsearch.net, te na taj način dobiti nekakve podatke o mogućim propustima koje bi bilo potrebno zatvoriti. Za ovu svrhu koristit ćemo nekoliko modula

stdnse modul: = http://nmap.org/nsedoc/lib/stdnse.html  -- Standard Nmap Scripting Engine functions
json modul:  http://nmap.org/nsedoc/lib/json.html -- rad sa JSON podacima
http modul: http://nmap.org/nsedoc/lib/http.html -- rad sa http upitima

Detaljni source kod

https://github.com/originx/SIS_repo


Skripta može primati 3 argumenta, te strukturno ispisivati rezultate u datoteke po potrebi.

U slučaju da nmap ne može detektirati OS da ispuni potrebne tablice, korisnik može ručno unijeti naziv sustava koji se nalazi na udaljenom serveru

Vrati samo rezultate koji odgovaraju oznaci exploit sa stranice exploitssearch.net

Detaljni ispis svakog exploita kojeg je skripta dohvatila Ispis zna biti velik u ovisnosti koliko je ranjivosti pronađeno pa uz upotrebu ovog argumenta poželjno je rezultate spremiti u datoteku.

Primjer rada skripte:

Naredba: nmap server_name -O -script xploitSearch.nse --script-args forcedOS="Linux 2.4.36"

Morsolic nmapXploit.png

Naredba: nmap server_name -O -script xploitSearch.nse --script-args=' detailed=true,forcedOS=Linux 2.4.36'

Morsolic nmapXploitDetailed.png

Ako želite ispisati rezultate u datoteku, primjerice XML, koristite zastavicu -oX nazivDatoteke.xml.

NmapXploitFileOutput.PNG

--Mario.orsolic 17:17, 12. siječnja 2013. (CET)

Sources:


Mario Oršolić, Renato Turić, Marina Grubeša

Osobni alati
Imenski prostori
Inačice
Radnje
Orijentacija
Traka s alatima