DoS na router/stanici malymi datagramy (2.4.21-15.0.3.EL aka RHEL3)

Dalibor Straka dast na panelnet.cz
Čtvrtek Červenec 8 16:51:47 CEST 2004


On Thu, Jul 08, 2004 at 02:50:23PM +0200, Milan Keršláger wrote:
> Dobry den,
> 
> mam router, ktery je pripojen 100Mbps linkoui (FD). Pokud nekdo zacne
> delat DoS malymi datagramy na stanici schovanou za routerem, system po
> dobu utoku zmrzne tak, ze skrz prochazi asi 5% datagramu a nelze se
> prihlasit ani nic delat na konzoli.
> 
> V dmesg pak vydim spousty radku:
> 
> eth0: Too much work at interrupt, IntrStatus=0x0001.
> 

Na to mi umirala desticka s realtekem. 

> Vymena RTL-8139 za 3C905 nepomaha.
> 

Zkuste inteli sitovku a treba to pujde samo.

U realteka jsem to vyresil nejdrive softwarove nastavenim max_interrupts_work
na 64. Je tam takovyto kousek kodu

/* Maximum events (Rx packets, etc.) to handle at each interrupt. */
 static int max_interrupt_work = 32;
 
MODULE_PARM(max_interrupt_work, "i");
 
MODULE_PARM_DESC(max_interrupt_work, 
                 "3c59x maximum events handled per interrupt");

int work_done = max_interrupt_work;
	if (--work_done < 0) {
		printk(KERN_WARNING "%s: Too much work in interrupt, status "
			"%4.4x.\n", dev->name, status);

Jinymi slovy, v driveru je built-in mechanismus, ktery zabranuje
neustalemu drzeni procesoru sitovym ovladacem behem preruseni. Coz se
muze stat na pomalych masinach s rychlou a zatizenou sitovkou (a nebo
pro denial-of-service attack). Zvysenim max_interrupt_work se ale muze
stat, ze procesor bude zanedbavat ostatni ulohy. 

Preji hezke ladeni.
-- Dalibor Straka


Další informace o konferenci Linux