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.
-sCvégrehajt egy parancsfájl alapú letapogatást az alap paransfájl készlettel (egyenértékű a
--script=safe,intrusiveparamé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. Azallparamé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
nsekiterjesztésű fájlt) a könyvtárból. A fájloknaknsekiterjeszté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ájlnaknsekiterjesztéssel rendelkeznie.Alaphelyzetben az Nmap parancsfájlok az Nmap adatkönyvtárának
scriptsalkönyvtárában találhatóak. Ascripts/script.dbadatbá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ékpá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ábankulcské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-traceEz 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-updatedbFrissí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
--scriptparamé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óriamező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.
