Az Nmap parancsfájl motor (NSE) egyesíti az Nmap hatékony hálózatkezelését
a Lua könnyűsúlyú parancsnyelv
sokoldalúságával, így kínálva számtalan lehetőséget. A https://nmap.org/nse/
címen bőséges dokumentációt talál az NSE-ről (beleértve a programozói
felületet is). Az NSE célja, hogy hatékony környezetet biztosítson az
Nmap képességeinek kiterjesztéséhez és a felhasználók számára egyszerűbbé
tegye testreszabott tesztek létrehozását. Az NSE felhasználási területei:
Kiterjesztett változat érzékelés (kategória
version
) — Bár az Nmap rendelkezik egy saját
szolgáltatás- és változatérzékelő rendszerrel, mely hatékonyságában és működési
körében páratlan, egy bonyolultabb próbákat igénylő szolgáltatás felderítésekor
ez az erő nem használható ki. Például a Skype-Protocol 2-es változatának
azonosításához két független próbacsomagot kell elküldeni, melyre a beépített
rendszer nem képes. Egy egyszerű NSE parancsfájl végre tudja hajtani ezt a feladatot
és frissíteni tudja a kapukhoz tartozó szolgáltatások információit.
Károkozó érzékelés (kategóriák
malware
és backdoors
)
- Mind a támadók, mind a féregprogramok gyakran hagynak maguk után hátsó
bejáratokat - például a levélszemetek küldői gyakran használnak szokatlan kapukon
működő SMTP kiszolgálókat a leveleik továbbítására, vagy a betörők egyfajta
FTP kiszolgálót használva próbálnak meg hozzáférni kritikus adatokhoz. Pár sor
Lua kóddal ezek a rések könnyen felderíthetők.
Sebezhetőség érzékelés (kategória
vulnerability
)- Az NSE képességeinek kihasználásával
könnyen azonosíthat olyan veszélyeket, mint például az alapértelmezett jelszavak,
vagy az SMTP kiszolgálók levél-átjátszási képessége tetszőleges tartományokból.
Hálózati felderítés és Információgyújtés
(kategóriák safe
, intrusive
és
discovery
) — Egyrészt a parancsnyelv és
a hatékony aszinkron hálózati programfelület, másrészt a korábbi letapogatások
során begyűjtött információk segítségével az NSE lehetőséget nyújt ara, hogy
a célgépen futó szolgáltatásokhoz ügyfélprogramokat készítsen. Ezekkel az ügyfelekkel
olyan információkat is begyűjthet, mint például az elérhető NFS/SMB/RPC megosztások,
egy IRC hálózaton lévő csatornák vagy az éppen bejelentkezett felhasználók száma.
A különböző felhasználási formák miatt és a megfelelő parancsfájl kiválasztásának
leegyszerűsítése érdekében minden parancsfájl tartalmaz egy mezőt, mellyel a
fenti kategóriák bármelyikébe (akár több kategóriába is) besorolható. A kategóriák
és parancsfájlok kapcsolatának nyilvántartására egy script.db
nevű fájl is telepítésre kerül a parancsfájlok mellett. Így például ha egy
gépről szeretné megállapítani, hogy fertőzött-e valamilyen féregprogrammal, az
Nmap által biztosított egyik parancsfájl segítségével és az nmap --script=malware [célpont]
parancs lefuttatásával ezt könnyen kiderítheti. A version
kategóriába sorolt parancsfájlok mindig lefutnak, beleértve a parancsfájl letapogatás
kiválasztását is. A script.db
fájl maga
is egy Lua parancsfájl és a --script-updatedb
paraméteren
keresztül frissíthető.
Minden NSE parancsfájl egy darab Lua kód, mely két szakaszból áll: egy teszt,
hogy az adott parancsfájl lefuttatható-e egy megadott állomáson vagy kapun
(ezek neve hostrule
vagy portrule
)
és egy action
szakasz, mely akkor fut le,
ha az előző teszt visszatérési értéke igaz. A parancsfájlok az Nmap által
korábban összegyűjtött legtöbb információhoz hozzáférnek. Ezek minden állomásnál
az IP cím, az állomás neve (ha elérhető) és az operációs rendszer. Ha a parancsfájl
célja egy kapu, akkor hozzáfér a kapu számához, a protokollhoz (tcp
,
udp
vagy ssl
),
a kapu mögött futó szolgáltatás nevéhez és feltételesen a változat érzékeléssel
megszerzett információkhoz. Az NSE parancsfájlok hagyományosan rendelkeznek
egy nse
kiterjesztéssel. Bár jelenleg nem
szükséges követnie ezt a szokást, ez a jövőben változhat. Az Nmap figyelmeztetni
fogja, ha egy fájlnak más a kiterjesztése. Az NSE-ről további bőséges dokumentációt
találhat (beleértve a programozói felület leírását) a https://nmap.org/nse/
címen.
-sC
végrehajt egy parancsfájl alapú letapogatást az alap paransfájl készlettel (egyenértékű a
--script=safe,intrusive
paraméterrel--script <paransfájl kategória|könyvtár|fájlnév|all>
Lefuttat egy parancsfájl alapú letapogatást (mint az
-sC
) a kiválasztott parancsfájlokkal. A paraméterek lehetnek parancsfájl kategóriák, meghatározott parancsfájlok, parancsfájlokat tartalmazó könyvtárak, melyek a célpont ellen lesznek kipróbálva. Az Nmap a paramétereket először kategóriáknak próbálja értelmezni, azután fájloknak vagy könyvtáraknak. Abszolút útvonalak használata egyértelmű, a relatív útvonalak keresési sorrendje az első találatig:--datadir/
;$(NMAPDIR)/
;~user/nmap/
(Windows alatt nem);NMAPDATADIR/
vagy./
. Ezen könyvtárak mindegyikében ascripts/
alkönyvtár is ki lesz próbálva. Azall
paraméter megadásával az Nmap adatbázisában lévő valamennyi parancsfájl végrehajtódik.Ha egy megadott könyvtárat megtalál, az Nmap betölti az összes NSE parancsfájlt (minden
nse
kiterjesztésű fájlt) a könyvtárból. A fájloknaknse
kiterjesztéssel kell rendelkezniük. Az Nmap a parancsfájlok keresésekor nem vizsgálja meg az alkönyvtárakat. Ha egyedi fájlnevet adott meg, akkor nem kötelező a fájlnaknse
kiterjesztéssel rendelkeznie.Alaphelyzetben az Nmap parancsfájlok az Nmap adatkönyvtárának
scripts
alkönyvtárában találhatóak. Ascripts/script.db
adatbázisban tárolt paranscfájlok indexeltek. Az adatbázis tartalmazza az összes kategóriához tartozó összes parancsfájlt. Egy parancsfájl több kategóriához is tartozhat.--script-args=<név1=érték1,név2={név3=érték3},név4=érték4>
Paramétereket adhat át az NSE parancsfájloknak. A paraméterek
név=érték
párokban kerülnek át a parancsfájlokhoz. Az átadott paraméterek egy Lua táblázatban lesznek tárolva és feldolgozva, melyhez valamennyi parancsfájl hozzáfér. A nevek karakterláncként lesznek kezelve (melyeknek alfanumerikus értékeknek kell lenniük) és aparaméter táblában
kulcsként lesznek használva. Az értékek lehetnek karakterláncok vagy maguk is táblázatok (‘{
’ és ‘}
’ közé zárva. Az altáblázatok segítségével egyes parancsfájloknál felülbírálhatók a paraméterek (mondjuk ha minden parancsfájlhoz más felhasználói név/jelszó párost akar használni). Például átadhatók a következő, vesszővel elválasztott paraméterek:user=bar
,password=foo
, ésanonFTP={password=nobody@foobar.com}
. Ha egy parancsfájl paramétereit felül akarja bírálni, használja az altáblázat indexelésére a parancsfájlazonosítóját (id)
, mivel a parancsfájlok csak így szerezhetnek tudomást a különleges paramétereikről.--script-trace
Ez a paraméter ugyanazt teszi, mint a
--packet-trace
, csak egy ISO szinttel feljebb. Ha megadja ezt a aparamétert, akkor az összes, parancsfájl által generált kimenő és bejövő forgalom nyomtatásra kerül. A megjelenített információ tartalmazza a kommunikációs protokollt, a forrást, a célt és az átvitt adatot. Ha az átvitt adatok több, mint 5%-a nem nyomtatható, akkor a kimenet hexadecimális alakban jelenik meg.--script-updatedb
Frissíti a parancsfájl adatbázist, mely a kategória-cimkék és a fájlnevek közti kapcsolatokat tárolja. Az adatbázis egy Lua parancsfájl, mely akkor lesz értelmezve, amikor a
--script
paraméterben megadott kategóriák közül ki kell választani a szükséges parancsfájl készletet. Akkor kell lefutatni, amikor megváltozik egy parancsfájlkategória
mezője, ha új parancsfájlokat adott hozzá a készlethez, vagy ha eltávolított néhány parancsfájlt ascripts/
könyvtárból.