Povoleni directed broadcastu

Dan Lukes dan at obluda.cz
Sat Jul 9 15:51:05 CEST 2005


Rosicky Petr napsal/wrote, On 07/09/05 13:35:
> Primo z routeru odeslu treba ping na 192.168.28.255 ( - broadcast adresa pripojene site), echo reply se vrati mnohonasobne, coz je ocekavane chovani.

	To, mimochodem, neni ocekavane chovani, protoze na ping zasilany na 
broadcast by nikdo rozumny odpovidat nemel. Dokonce ani Windows to 
vetsinou nedelaji ...


> Problem vznikne, kdyz poslu paket na takovou adresu odjinud "pred" routerem. Tcpdump zaznamena prichod pingu na vstupni interface, ale uz to neodejde do cilove site 192.168.28.0/24 na druhem interfacu, nevraci ani zadnej icmp error, proste ho zahodi. Je to logicka obrana před smurf utoky a z toho co se mi povedlo najit je to defaultni chovani FreeBSD od verze 2.4.cosi. Na vetsine systemu se to musi explicitne povolovat (Cisco...), tady jsem nenasel jak, a zjevne to samo neprojde. (pouzivam FreeBSD 5.3, ripd ze zebry)

	Aha - to je byla utajena informace, ze se ten paket nepokousis odeslat 
primo, ale problem mas s jeho routovanim ...

	Tak to s hledanim zacinas v sys/netinet/ip_input.c:ip_input.c() kousek 
pod komentarem "Check for broadcast addresses". Tam se pise, ze tyto 
pakety prochazeji ip_forward(), coz se skutecne deje - a to je preda 
ip_output(). Tady nas zajima komentar "Look for broadcast address and 
verify user is allowed to send such a packet". Kousek pod nim je videt, 
ze moznost odeslat paket je vazana na podminku ( flags & 
IP_ALLOWBROADCAST ). Hodnota flags ovsem byla predana v ramci volani 
ip_output() z ip_forward() a behem zpracovani se nemenila. To nas vraci 
zpet k ip_forward, ve ktere vidime, ze ip_output se vola s 
flags=IP_FORWARDING (=0x01) ktere se ani priblizne nerovna 
IP_ALLOWBROADCAST (=0x20).

	Je zrejme, ze paket prochazejici z ip_forward do ip_output nemuze drive 
zminenou podminku za zadnych okolnosti splnit a tedy bude zamitnut 
(EACCESS).

	Nevidim v kodu moznost jak toto chovani zmenit (bez zmeny kodu).

	Na pakety odmitnute s EACCESS behem forwardu nejde zpet zadna odpoved - 
coz je nakonec v poradku, protoze na pakety odesilane na broadcast se 
chybove odpovedi nezasilaji.

> Zkusim najit blokaci v /usr/sys/netinet/*, ale snad je mnohem elegantnejsi a cistejsi zpusob. :-)

	Ne, coz ale s ohledem na to o jakou cunarnu se pokousis neni zas az tak 
prekvapive ... ;-)

	No, dobra - pripoustim - melo by to jit. Alespon na vyzadani. Ale 
FreeBSD melo k broadcastum odjakziva problematicky vztah. Uz od doby, 
kdy to jeste vubec ani FreeBSD nebylo a bylo to teprve 386BSD ...

						Dan


-- 
Dan Lukes                                   SISAL MFF UK
AKA: dan at obluda.cz, dan at freebsd.cz,dan at kolej.mff.cuni.cz





More information about the Users-l mailing list