Nmap parancsfájl motor (Nmap Scripting Engine (NSE))
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 http://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 http://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 a scripts/
alkönyvtár is ki lesz próbálva. Az all 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ájloknak nse 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ájlnak nse
kiterjesztéssel rendelkeznie.
Alaphelyzetben az Nmap parancsfájlok az Nmap adatkönyvtárának scripts
alkönyvtárában találhatóak. A scripts/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 a paramé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, és
anonFTP={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ájl azonosí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ájl kategória
mezője, ha új parancsfájlokat adott hozzá a készlethez, vagy
ha eltávolított néhány parancsfájlt a scripts/
könyvtárból.