Toon posts:

[JSP-Struts] prevent DoS-attacks

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

Ik maak momenteel een werkstuk over het beveiligen van dynamische webapplicaties, met uiteraard een hoofdstuk over DoS-attacks. Ik moet in een latere fase mijn bevindingen testen op een Jakarta Struts applicatie en er oplossingen voor aanbieden. Zodus, heeft iemand een idee hoe men een JSP-applicatie kan beveiligen tegen DoS-attacks ?

Hartelijk dank bij voorbaat.

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 20:41

mulder

ik spuug op het trottoir

DDoS is meer iets wat je op server niveau aanpakt lijkt me? Bedoel je soms SQL-injection?

oogjes open, snaveltjes dicht


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 22:57

TeeDee

CQB 241

Don Facundo schreef op maandag 13 maart 2006 @ 14:37:
DDoS is meer iets wat je op server niveau aanpakt lijkt me? Bedoel je soms SQL-injection?
DDoS != DoS. :) Maar het zo zomaar ook SQL-injection kunnen zijn.

Heart..pumps blood.Has nothing to do with emotion! Bored


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 20:41

mulder

ik spuug op het trottoir

Een (D)DoS dan, komt toch wel een beetje op hetzelfde neer ;)

oogjes open, snaveltjes dicht


  • Apie!
  • Registratie: Januari 2000
  • Laatst online: 29-01 19:13

Apie!

Newer, better & confusinger

Don Facundo schreef op maandag 13 maart 2006 @ 14:47:
Een (D)DoS dan, komt toch wel een beetje op hetzelfde neer ;)
ehh nee want een DOS attack kan ook betekenen dat je door bijvoorbeeld SQL injection een DataBase om zeep helpt. Dat is net even iets anders dan een website onbereikbaar maken.

My lungs taste the air of Time
Blown past falling sands


Verwijderd

Topicstarter
Ik snap niet goed waarom je SQL injection hierbij betrekt. De Jakarta Struts applicatie heeft Hibernate 3.0 als persistentielaag, dus door de database aan te spreken via prepared statements schakel je SQL (ORM) injection uit. Easy as hell...

Met DoS-attacks bedoel ik dus gewoon de ICMP, Syn, UDP, TCP, ... floods. Een gebruiker die 1000 requests per seconde gaat zenden naar een server. Zo'n dingen

Een oplossing kan zijn: een minimale tijd tussen twee requests per ip aanhouden, en komt er na die minimale tijd nog een request, dan die minimale tijd verdubbelen... Of gewoon ip-ban van iemand die 10 requests per seconde zendt of zo.

DDoS wordt al moeilijker natuurlijk, want stop maar eens 50000 requests die allen vanop verschillende plaatsen komen.

Ik ga mij momenteel dus enkel bezig houden met de gewone DoS-attacks. En ik heb een implementatie specifiek gericht op JSP (J2EE, Struts, Servlets, enz) nodig.

Ik geef toe, 't is echt wel niet simpel om die dingen te kunnen stoppen, want er zijn een dozijn soorten attacks en Java is van nature uit zwak tegen DoS-attacks...

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 13:08

Janoz

Moderator Devschuur®

!litemod

Jezelf tegen een DDoS beveiligen moet je niet in je applicatie zelf doen. Dan is het al te laat. Dit zijn issues die je op webserver/applicatieserver of zelfs router/firewall niveau af moet vangen. Naast het feit dat Syn, ICMP en UDP al helemaal niet in je applicatie terecht komen is het bij normale requests al te laat wanneer je dat in je applicatie opvangt. De load is er dan namelijk al. Je request is al verwerkt en wordt al doorgegeven aan je struts applicatie. Eventueel zou je het met een filter op kunnen lossen, maar de servlet container is al aan de slag gegaan met het request.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • bvp
  • Registratie: Maart 2005
  • Laatst online: 23-02 12:02

bvp

Verwijderd schreef op maandag 13 maart 2006 @ 15:08:
Met DoS-attacks bedoel ik dus gewoon de ICMP, Syn, UDP, TCP, ... floods. Een gebruiker die 1000 requests per seconde gaat zenden naar een server. Zo'n dingen

Een oplossing kan zijn: een minimale tijd tussen twee requests per ip aanhouden, en komt er na die minimale tijd nog een request, dan die minimale tijd verdubbelen... Of gewoon ip-ban van iemand die 10 requests per seconde zendt of zo.
Wat hierboven door Janoz verteld wordt, geldt uiteraard ook gewoon voor DoS-attacks.
Op applicatie-niveau ben je hier zeker te laat. Zoals jij hierboven zegt, een ip-ban bij 10 requests per seconde.
Als deze persoon (na de ban) gewoon vrolijk doorgaat met zijn requests afvuren, komt elk request toch steeds op applicatie-niveau uit zodat het toch nog gewoon je applicatie plat gooit!

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 20:41

mulder

ik spuug op het trottoir

Apie! schreef op maandag 13 maart 2006 @ 14:50:
[...]
ehh nee want een DOS attack kan ook betekenen dat je door bijvoorbeeld SQL injection een DataBase om zeep helpt. Dat is net even iets anders dan een website onbereikbaar maken.
Volgens mij is een DDoS een Distributed DoS??

oogjes open, snaveltjes dicht


Verwijderd

Topicstarter
Dus het is niet mogelijk via bv. servlet filter bepaald verkeer (requests) te gaan tegenhouden of ip-adressen te blokkeren.

Hmmm, ik ga eens aan mijn stagebegeleider zijn mouw moeten gaan trekken dan, want ik heb geen idee hoe ik verder moet...

Bedankt voor je reactie, Janoz.

groeten.

Verwijderd

Topicstarter
en de anderen :)

  • bvp
  • Registratie: Maart 2005
  • Laatst online: 23-02 12:02

bvp

Verwijderd schreef op maandag 13 maart 2006 @ 15:32:
Dus het is niet mogelijk via bv. servlet filter bepaald verkeer (requests) te gaan tegenhouden of ip-adressen te blokkeren.

Hmmm, ik ga eens aan mijn stagebegeleider zijn mouw moeten gaan trekken dan, want ik heb geen idee hoe ik verder moet...

Bedankt voor je reactie, Janoz.

groeten.
Jawel, tuurlijk kun je in een servlet wel een filter bouwen die verkeer van een bepaald ip-adres tegenhoudt.
Het heeft alleen geen zin om dit te doen als bescherming tegen een DOS-attack omdat je dan al op applicatie-niveau zit en je dus nog verkeer blijft genereren in je app en zo dus nog steeds je app plat kan gaan.
IP blokken heeft bijv. zin bij weblogs, iemand op ip-adres blokken die zich raar uit in je log.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 13:08

Janoz

Moderator Devschuur®

!litemod

Natuurlijk is het mogelijk om mbv een filter een ip tegen te houden. Je kunt simpel een filter maken die iets doet als:
Java:
1
2
3
4
5
doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
  if (/* Test je request of deze aan alle toegangs eisen voldoet*/) {
    chain.doFilter(request,response);
  }
}

Maar probeer jezelf eens te bedenken waarom dat het probleem niet oplost.

@Apie & TeeDee
Het enige verschil tussen DDoS en DoS is dat bij de eerste de request van vele verschillende bronnen komen terwijl bij de 2e alle requests van 1 bron komen.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
Het probleem is, ik moet ergens, waar dan ook, een oplossing bieden tegen DoS-attacks. En ik mag niet op infrastructuurniveau gaan (firewell, SSL, proxies, ...) Ik moet binnen de applicatie blijven. De applicatie is volgens de 3-tier structuur: MVC (Struts), applicatielaag (Spring), persistentielaag (Hibernate). Ergens daarin moet ik een oplossing bieden. Maar als ik u goed begrijp, dan kan dat niet daarin. Of is het alleszins verstandiger erbuiten te gaan om te controleren op DoS.

Misschien weet mijn begeleider zelf niet goed hoe dit probleem aan te pakken, en dacht hij 'Ik laat het hem wel opzoeken' ofwel zien wij iets over het hoofd...

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 13:08

Janoz

Moderator Devschuur®

!litemod

Zorg dat je begrijpt waarom dat eventueel het probleem niet oplost, schrijf hierover een memo en leg dit voor aan je stagebegeleider. Aan een opmerking als 'het kan niet' heeft niemand iets.

Nu zul je misschien denken 'ja, maar dat zeg jij nu ook'. Klopt, maar dat komt meer omdat het jouw project is en jij uit moet zoeken waarom welke oplossing wel en niet werkt. Het is hier niet de bedoeling dat we 'je huiswerk voorkauwen'.

Bedenk je hoe een DoS werkt. Wat de gevolgen zijn. Bedenk je vervolgens hoe je die gevolgen kunt verminderen. Kortom, probeer te begrijpen wat er gebeurt.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

Verwijderd schreef op maandag 13 maart 2006 @ 15:08:
Ik snap niet goed waarom je SQL injection hierbij betrekt. De Jakarta Struts applicatie heeft Hibernate 3.0 als persistentielaag, dus door de database aan te spreken via prepared statements schakel je SQL (ORM) injection uit. Easy as hell...
Ik neem aan dat je bedoelt dat je alle variabelen als long o.i.d. in je PreparedStatement stopt, want anders helpt het feit dat je toevallig een PreparedStatement gebruikt, helemaal niks tegen SQL injection. :P

Fat Pizza's pizza, they are big and they are cheezy


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 13:08

Janoz

Moderator Devschuur®

!litemod

Jawel hoor. SQL injection is gebaseerd op het feit dat inhoud van een variabele als daadwerkelijke sql syntax wordt geinterpreteerd. Wanneer je prepared statements gebruik zal alle input op zo'n manier aan de query worden toegevoegd dat deze alleen als data kan worden geinterpreteerd, en niet als syntax.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'

Pagina: 1