Research and Development 1/^Archief/2007-2008/projecten/Beveiliging van websites/Onderzoeksfase 2

Uit Werkplaats
Ga naar: navigatie, zoeken

Inleiding

In deze onderzoeksfase hebben we onder andere een begin aan ons prototype gemaakt. We hebben de basis gemaakt en een paar belangrijke functies, die nodig zijn om de hackmethodes toe te passen.

Aanpak

We hebben op checkophack.nl een begin gemaakt aan een online applicatie (ons prototype). Hiervoor hebben we eerst het domein checkophack.nl aangevraagd en een design voor het prototype gemaakt. Voor het ontwikkelen van de applicatie hebben we gebruik gemaakt van HTML, PHP, SQL, CSS en Javascript. Het is een object georiënteerd systeem gebaseerd op het MVC-principe. Hiervoor hebben we eerst onderzoek gedaan naar hoe de meeste sites in elkaar zitten en hoe de broncode (html) opgebouwd is. Met deze informatie hebben we al wat belangrijke functies geschreven, die belangrijk zijn voor het onderzoeken of hackmethodes toepasbaar zijn op een bepaalde site.

Onderzoeken van broncode van een website

We zijn begonnen met het onderzoeken van de broncode, we hebben hiervoor de broncode van een aantal websites naast elkaar gelegd en ook de specificatie van verschillende HTML versies bekeken. Wat opviel bij het onderzoeken van de broncode was dat links, op een aantal uitzonderingen na, altijd omgegeven zijn door een <a>-tag. Een voorbeeld van een link is:

<a href="contact.php">Contact</a>

Er zijn nog twee veel gebruikte manieren om deze link te schrijven:

<a href=contact.php>Contact</a> en <a href='contact.php'>Contact</a>

We moesten er dus voor zorgen dat onze applicatie het href attribuut uit alle <a>-tags in de broncode uitleest. We wilden ook nog alle invoervelden uit op een pagina uitlezen. Invoervelden zijn te herkennen aan de <input>-tag. Door het uitlezen van het 'type' attribuut kwamen we erachter welk type input het betrof. (zoals een tekstveld, verzendbutton, verborgen veld) Met het uitlezen van het attribuut 'name' hadden we zowel de naam van het inputveld, als de unieke referentie naar het invoerveld. Voorbeeld van inputveld:

<input type=text name="naam">

Het indexeren van pagina's

Zoekboom van links

Op de beginpagina van de opgegeven website, worden alle links uitgelezen. Hieruit filteren we de interne links (een webpagina op hetzelfde domein als de beginpagina van de website). Voor alle interne links die worden gevonden, herhalen we ditzelfde principe. Zo kunnen we dus recursief alle interne links op het domein uitlezen. Uiteindelijk leidt dit tot een boomstructuur zoals weergegeven in de afbeelding hiernaast.

Resultaat

Inlogscherm
Gevonden links
Gevonden inputvelden

Als resultaat van deze fase hebben we een begin van ons prototype ontwikkeld. Het is een online applicatie te vinden op checkophack.nl. Het bevat tot nu toe de volgende onderdelen:

  • Inlogscherm (zie bijbehorende afbeelding)
  • Keuzescherm (de functies zijn echter nog niet ontwikkeld)
  • De functie van het doorzoeken van alle interne links van een website (zie bijbehorende afbeelding)
  • De functie van het doorzoeken van alle inputvelden op elke gevonden webpagina (zie bijbehorende afbeelding)

Conclusie

We hadden in fase 1 de volgende onderzoeksvraag en deelvragen opgesteld:

Onderzoeksvraag

  • Welk percentage van de websites is onveilig?

Deelvragen

  1. Hoe kan een website beschermd worden tegen de 5 hackmethodes?
  2. Kunnen wij zelf in een website inbreken?
  3. Kunnen wij een programma ontwikkelen dat beveiligingsfouten in de website van een relatief grote organisatie opspoort?
  4. Kunnen wij gevoelige informatie achterhalen van relatief grote organisaties?

Onze voorlopige antwoorden

  • Dit hopen we in fase 3 te kunnen onderzoeken. We willen zoveel mogelijk websites onderzoeken. Echter hebben we hier wel toestemming nodig van de website-eigenaar. Dit maakt het moeilijker om heel veel websites te onderzoeken, en betrouwbare conclusies te kunnen trekken.
  1. We hebben redelijk wat informatie om het hacken van een website tegen te gaan. We zullen dit later rapporteren.
  2. Ja. We hebben het Dixit CMS op onze eigen server geinstalleerd, en zijn in het administratorgedeelte gekomen, met gebruik van een simpele sql-injectie.
  3. Hier zullen we ook in fase 3 antwoord op kunnen geven.
  4. Zie antwoord 4.