Sokat nem értek a hálózatokhoz, nem is nagyon foglalkozom velük, viszont azt el szoktam várni, hogy az otthoni hálózat stabil legyen. Egészen sokáig csak a telekom VDSL és optikával volt tapasztalatom. Előbbinek voltak hátrányai, de működött, ahogy kellett. Az utóbbi pedig az abszolút etalon eddig számomra. Sokak a PPPoE-t említik meg itt is gyenge pontként, de nekem azzal sincs különösebb problémám. Az a kevés elveszett MTU zavar ugyan, illetve a 7 naponta reconnect, de ezzel egész jól együtt lehet élni.
Azonban nemrég átkényszerültem a DOCSIS hálózatok minden előnyeire és hátrányaira (bár inkább az utóbbira). Kezdve azzal, hogy közel fél évig nem volt internet, mivel a szolgáltató nem volt képes megtalálni az alacsony jelszint okát. Bár ez a történet is megérne egy misét, ezen írásnak nem célja a panaszkodás, így ez most nem kerül kifejtésre. Ugyanezen okból kifolyólag nem tervezem megnevezni a szolgáltatót sem.
A kezdeti viszontagságok ellenére úgy tűnt, végre stabilizálódott az internet, mióta megcsinálták rendesen, nincsenek jelszint gondok sem. Az egyetlen gyakran tapasztalt jelenség a szolgáltatói DNS szerver elérhetetlensége volt. Ilyenkor egyszerűen nem lehetett megnyitni a weboldalakat, csak IP címekkel rákeresve, vagy kliens oldalt beállított egyedi DNS beállításokkal. Sajnos a gyárilag szolgáltatott HGW egyedi DNS szerver beállítását nem támogatja, így be kellett ruháznom egy saját routerre, majd a szolgáltatói router bridge módban továbbra is remekül tette a dolgát. Igaz, hogy így az IPv6 címről le kellett mondjak, mivel CGNAT mellett tudnak csak IPv6-ot is adni, ami kizárólag a saját eszközükkel működik. De IPv4-en remekül teljesít a hálózat és stabilan hozza az elvárt sebességet.
Azonban a bekötés után nem sokkal feltűnt, hogy az általam vásárolt router wan portján a státuszjelző LED folyamatosan hevesen villog. Nyilván ez azt jelzi, hogy forgalom van a routerem és a szolgáltatói HGW között. Igen ám, de ekkor még nem volt egyetlen kliens sem a hálózatomon és PPPoE alatt az volt számomra a megszokott, hogy csak ténylegesen indokolt esetben látom villogni ezt az indikátort.
Egy kis fejvakarást követően indítottam egy tcpdumpot a routerről, hogy lássam, pontosan milyen forgalomról lehet szó. Kb 1 percig hagytam futni a tcpdumpot és az alatt 3000+ ARP kérést fogadott az eszköz.
Hogy mi az az ARP? Vélhetően a wikipédia jobban el tudja magyarázni, mint én, de én úgy értettem meg, hogy valahányszor egy gép egy adott hálózatban szeretne elérni egy másik gépet az IP címe alapján és még nem tudja, mi az adott gép MAC címe, akkor küld egy ilyen ARP kérést, hogy "ki rendelkezik ezzel az iP címmel?". Ezt a hálózat összes gépe megkapja és a megcélzott IP-jű gép válaszolhat a feladónak, hogy az én MAC címem az XY. És ezzel A MAC címmel már létrejöhet a kapcsolat a két gép között.
Jobban átnézve a logokat feltűnt, hogy az összes ARP kérés egy bizonyos MAC címről érkezett, ami a CMTS hosztnévre hallgat. Ha jól értem, akkor ebben a felállásban a CMTS jelenti a szolgáltatói eszközt, ahova a kliensek be vannak kötve, mi kliensek pedig a CM névre hallgatunk.
Nos ez tiszta, de a mai napig nem sikerült megértenem, hogy pontosan mi szükség van az ARP-ra ebben a felállásban. Azt még érteném, hogy az én HGW-m a hálózatra rákötve nem fogja tudni, hogy hol keresse ezt a CMTS-t ARP nélkül, azonban a CMTS minek kérdezget mindenkit folyamatosan. Eleve úgy indul az átlag user HGW-je, hogy indít egy DHCP klienst és kér egy IP-t a CMTS-től. Így a CMTS pontosan tudni fogja, hogy melyik MAC addressnek milyen IP címet adott. Minek ARP-pal kérdezgetni a klienseket?
No mindegy, úgy voltam vele, hogy idegesít a tény, hogy a routerem "felesleges" ARP üzenetek fogadásával tölti az idejét, nálam okosabbak tanácsára ignoráltam a jelenséget, mivel állítólag ez normális jelenség DOCSIS hálózatokon. Ettől függetlenül egyszer érdekelne egy értelmes magyarázat, hogy ne legyek vakon. Biztos van valami oka.
Ezt tehát leszámítva egy teljes éven át remekül működött a szolgáltatás, soha nem volt vele gond és plusz pontként a külső IP címem sem változott egészen addig, míg nem voltak hosszabb áramszünetek és kiosztották másnak.
Azonban úgy két hónapja egy érdekes új jelenségre lettem figyelmes. Az internet egyik pillanatról a másikra, eltérő időközönként megszűnt működni. Pedig a szolgáltatói router és az én routerem is azt jelezte, hogy a kapcsolat ki van épülve, a DCHP-n kapott IP pedig messze volt még a lejárattól.
Feltűnt, hogy ilyen esetekben a szolgáltatói HGW-re másik routert/PC-t kötve az rendben kapott IP címet és tudta böngészni az internetet. Kizárólag az állandóra bekötött routerrel voltak gondok. A DHCP-re kezdtem gyanakodni, így eldobattam a jelenlegi IP címet amit a CMTS pár napja kiosztott nekem és láss csodát, valóban új IP címet kaptam utána. Ilyen csak áramszünetkor állt fenn normális körülmények között, amúgy mindig a régi IP címem kaptam meg ismét pár napra.
Elkezdtem gondolkodni, hogy ez mégis hogy lehetséges. Két esetet találtam elképzelhetőnek. Az egyik, hogy a szolgáltató indítja újra a CMTS-t, ami az IP cím listákat elveszti a gyorsítótárából, ha újraindítják. Azt pedig korábban észrevettem, hogyha a DHCP szerver nem osztja ki az adott MAC cím számára az adott IP címet, akkor a CMTS nem engedi tovább a forgalmat. Tehát simán lehet, hogy rebootolják a CMTS-t, az elfelejti, hogy nekem adta az XY címet és újraindulva nem fogja engedni, hogy én az XY címet használjam.
Igen ám, de ez a jelenség nem jelentkezett előtte soha. Hirtelen elkezdték buzgón frissíteni a rendszereiket?
Ekkor azt találtam ki, hogy két routert is kötök a szolgáltatói HGW-re, majd ezekről folyamatosan pingelek egy távoli szervert. Ha elmegy a kapcsolat, akkor pedig logolom, hogy ez pontosan mikor történt. Ha valóban a CMTS kerül újraindításra, akkor közel azonos időben kell, hogy mindkét routeren elszálljon az internet. Ha nem, akkor vélhetően a második elképzelésemről lehet szó. Mégpedig arról, hogy valaki szándékosan szabotálja a netezőket.
Nos az eredmény magáért beszélt. Percek teltek el, mire a másik kliens ki lett dobva.
Ezen a ponton elkezdtem gyanakodni, hogy valóban a második lehetőséggel állok szemben. Körbekérdeztem a szomszédságban, hogy én vagyok-e az egyedüli, aki hasonló jelenséget tapasztal és nem meglepő módon nem. Azonban a többi szomszéd számára az általános megoldás a HGW teljes resetelése volt ilyenkor. Ez nyilván megoldás, mivel a DHCP leaset is elfelejti az eszköz, de számomra kényelmetlen, mert HGW reset után újból be kéne állítani a bridge módot.
Ezek után átgondoltam, hogy pontosan hogyan működhet a támadás. Arról lehet szó, hogy valaki begyűjti a szomszédok MAC címeit, majd ezekkel a MAC címekkel egyesével küldenek egy DHCP release-t a CMTS felé, aki boldogan ad egy új IP címet az adott MAC cím számára. Igen ám, de a tényleges birtoklója az adott MAC címnek ezáltal ki lesz zárva az internetről, hiszen a CMTS már az új IP-t társította a MAC címhez, de a kliens oldalt kihelyezett HGW még a régi címről tud. Viszonylag egyszerű és aljas támadási módnak tűnik.
Azonban honnan szerzi meg a támadó a MAC címeket? Az ARP kérések a CMTS felől kizárólag IP címeket tartalmaznak. Ezeket logolhatja, de önmagában nem megy velük semmire...
És ekkor kértem meg egy szomszéd engedélyét arra, hogy megpingeljem az IP címét a routeremről. Nos egészen meglepő módon a ping sikeres volt és a router ARP táblájában megtaláltam az ő HGW-jéhez tartozó MAC címet is.
Bingó, minden adott ahhoz, hogy bárki, aki ugyanarra a CMTS-re csatlakozik ellehetetlenítse a többiek internetezését.
És ezen a ponton teljesen tanácstalan vagyok, mivel a szolgáltatónak hiába magyarázom a jelenséget, nem értik a problémát, bizonyítani a jelenség megtörténtét pedig igencsak nehéz, mivel az internet mindig más időpontokban megy el.
Egyelőre azt a félmegoldást eszeltem ki, hogy egy szkript segítségével folyamatosan pingelek egy távoli szervert, ami ha nem válaszol bizonyos mennyiségű ping kérést követően sem, azonnal cseréli a MAC címet és indít egy DHCP releaset. Nagyon nem szép megoldás, de nem láttam szebb kiutat.
Hát így sikerült tünetileg kezelni egy olyan hibát, ami hónapok óta okozott napi szintű fejfájást és aminek ilyen egyszerű magyarázat lett a vége.
Végszó:
Szeretném még egyszer hangsúlyozni, hogy az írásban szándékosan nincs megemlítve az ISP, mivel nem célom savazni a szolgáltatást. Bízom benne, hogy másoknak hasonló helyzetben támpontot adhat ezen leírás, ez minden.
Illetve lezárásképp egy érdekesség: 32 napja megy a router és jelenleg 152 342 664 ARP kérést fogadott a CMTS-től. Egész jól kijön a matek azzal a ~3000 ARP kéréssel per perc.
Köszönöm, hogy elolvastad!