Att välja rätt verktyg för jobbet – ett kort utlägg om Masscan
Det finns få verktyg inom säkerhetsbranschen som är så allmänt kända och som tillsynes verkar stå emot tidens tand som Nmap. Sedan dess första version från 1997 så har det varit ett stapelverktyg så fort något nätverk ska undersökas och det är ytterst sällan som dess användande inte är del av den första fasen av exempelvis ett penetrationstest. Även om många moderna sårbarhetsskanningsverktyg inte direkt längre använder Nmap för portskanning så har dess uppbyggnad i stort fungerat som inspiration även för dessa.
Just till följd av dess vedertagna status så har Nmap blivit synonymt med nätverksutforskning och få om någon brukar fundera på eventuella alternativ, detta blir än mer fallet när sårbarhetsskanningsverktyg betraktas vilket som sagt oftast inkluderar denna förmåga. Emellertid finns det ett flertal anledningar till att söka efter alternativ, framförallt när ”extrema” situationen betraktas.
Tillfällen då ett stort antal mål ska skannas är alltid en utmaning. Det är uppenbart att tidsmängden som behövs växer snabbt allteftersom antalet mål ökar, speciellt om även antalet portar som undersökts ska bibehållas sådant att inga icke-standard tjänster undkommer. I dessa fall så blir det påtagligt att Nmap är alltför långsam. En vanlig uppskattning är att en skanning av en TCP port under ordinarie förutsättningar kan ta ca 0,5-1 sekund. Om detta är fallet så blir det uppenbart att en skanning av de 10 000 vanligaste TCP portarna för 10 000 mål innebär en tidsåtgång som överstiger ett år. I praktiken så är denna uppskattning utdaterat, dock så innebär även de mest drastiska förbättringarna fortfarande en tidsåtgång som fortfarande uppgår till dagar. Fundamentalt så är tidsåtgången direkt relaterad till hur Nmap är uppbyggd och för att reducera tidsåtgången behövs ett verktyg som inte är begränsad av Nmaps användande av TCP/IP stacken hos operativsystemet.
Masscan
Ett verktyg som direkt bemöter detta är Masscan (https://github.com/robertdavidgraham/masscan) vilket implementeras sin egna TCP/IP stack och utnyttjar asynkroniserad kommunikation fullt ut. Verktyget har öppen källkod och är vad C program beträffar enkelt att installera. Fast författaren meddelar att verktyget fungerar på Windows så är en stark rekommendation att enbart köra det på Linux eller andra *nix alternativ (nätverksaspekter är generellt effektivare på *nix baserade system vilket bland annat påvisas av att Netflix historiskt har föredragit BSD och Linux, se bland annat https://www.phoronix.com/scan.php?page=news_item&px=Netflix-NUMA-FreeBSD-Optimized).
Att Masscan är ”snabbare” än Nmap är en stark underdrift. Ett vanligt citat från författaren av verktyget är att Masscan kan skanna hela Internet på 5 minuter, med ca 10 miljoner nätverkspaket per sekund. Om en större organisation och dess externa IP-rymd regelbundet ska skannas i övervaknings syfte så är Masscan således det överlägsna alternativet.
För en närmare genomgång av hur verktyget installeras och används så hänvisas läsaren till github länken ovan för Masscan, emellertid så kan det nämnas att syntax:et för verktyget medvetet liknar det för Nmap. Exempelvis så kan hela Internet skannas med kommandot nedan med en resulterande JSON formaterad rapport med namn ”test.json”. Observera att det strikt sätt inte är acceptabelt att skanna hela Internet på detta sätt.
masscan 0.0.0.0/0 -p0-65535 --max-rate 100000 -oJ test.json
Syntax:et ovan bör se någorlunda bekant ut för Nmap användare. Först specificeras IP-rymden som ska skannas, här med CIDR notation. Därefter följer ”-p” flagan som indikerar vilka portar som ska skannas, här samtliga. Notera att TCP och SYN skanning är standardval (UDP skanning fungerar men mer exotiska former av TCP skanningar gör inte det). För att kontrollera antalet paket per sekund så används antingen ”–max-rate” som ovan eller ”–rate” (där skillnaden förmodligen är att det senare aldrig anpassar sig efter förutsättningar medans det första gör det). I exemplet ovan skickas således hundratusen paket per sekund. Avslutningsvis så specificeras formatet på den resulterande rapporten. Att kunna få rapporten i JSON format ökar förmågan att kunna integrera Masscan med andra verktyg, Nmap ger just nu ingen sådan möjlighet. Eftersom verktyget konstruerar sin egna nätverksstack så behöver kommandot root eller motsvarande behörighet.
Förmågan att kunna justera antalet paket som skickas per sekund gör att Masscan kan undersöka ett stort antal system på avsevärt kortare tid än andra nätverksskanningsverktyg. Observera dock att det är möjligt att orsaka nätverksavbrott med Masscan genom att skicka en sådant mängd paket att nätverket eller det skannade målet inte kan hantera dem. Därför bör försiktighet vidtas när Masscan används, speciellt vid användande inom interna nätverk. Samtidigt bör Internet-exponerade mål kunna hantera de mer aggressiva inställningarna. Dessutom så blir en indirekt effekt att att Masscan kan användas för att simulera olika typer av DoS (tjänsteavbrott) attacker, speciellt sådana som skulle kunna iscensättas av enstaka aktörer (dvs inte sprida DDoS attacker).
Ett tips utifrån ovan är att försöka undvika att utföra skanningar från maskiner bakom brandväggar och/eller annan nätverksutrustning som har NAT/PAT funktionalitet. Trots att moderna nätverksenheter bör kunna hantera stor mängd trafik så har det observerats att skanningsresultat har påverkats av dessa. Förmodligen är det fortfarande svårt att hantera den situationen som kan uppstår när hundratusentals paket skickas samtidigt till olika destinations mål över olika portar, varav NAT-tabellen blir fylld.
Aspekten att Masscan har sin egna TCP/IP stack tar sig i uttryck i på ett flertal intressanta sätt. Bland annat så har den en uppvärmnings/uppskruvnings-period i början där stacken konstrueras. Relaterat så har den också en avsvalningsperiod när den är klar. Det här innebär att det finns situationen, om exempelvis enbart ett fåtal mål och portar skannas, där Nmap är snabbare.
Nmap vs Masscan
Avslutningsvis så går det att konstatera att det finns situationen där det traditionella verktyget Nmap inte längre är att föredra. Enkelt går det att summera följande fördelar för Masscan:
- Avsevärt snabbare på att skanna ett stort antal mål och portar
- Stödjer moderna rapportformat såsom JSON med ett renare resultat som mer rättfram kan integreras med andra verktyg.
Samtidigt så har såklart Nmap fortfarande ett antal fördelar:
- Mer flexibelt gällande typ av skanning, specificering av skanningsmål och undersökning av påträffade tjänster
- Sin egna skriptfunktion (Nmap Scripting Engine, NSE).
Slutsatsen blir således att Masscan är det självklara valet när många mål och portar vill skannas medans Nmap är det som bör gälla när färre mål vill undersökas i mer detalj. Ett möjligt tillvägagångssätt är att använda Masscan för att hitta levande/aktiva mål för att sedan skanna dessa närmare med Nmap eller en sårbarhetsskanner (såsom Nessus), vilket för ett stort antal mål innebär att mycket tid sparas. På det sättet kan en stor IP-rymd regelbundet övervakas genom skanning vilket traditionellt sätt har varit en utmaning, speciellt för de som enbart har förmedlat en IP-rymd rakt av till ett sårbarhetsskanningsverktyg. Att använda rätt verktyg för rätt situation är alltid ett bra tips, speciellt för den som värderar sin tid.