1. (2 pistettä) Piirrä mahdollisimman täsmällinen kuva seuraavien haavoittuvuuksien toimimisesta: (off-by-one), kasan ylivuoto (heap overflow) ja aliohjelmaosoitin (function pointer). Tässä on jälleen pohjana harjoitusten 1 artikkeli: https://www.symantec.com/avcenter/reference/blended.attacks.pdf sekä havainnollistava kuvaus puskuriylivuodoista: http://arstechnica.com/security/2015/08/how-security-flaws-work-the-buffer-overflow/
---
Toteuta seuraavat ohjelmat turvallisen ohjelmoinnin periaatteiden mukaisesti.
Huomioi ratkaisuissa seuraavia asioita eli pohdi ja selvitä näitä tehtävien yhteydessä. Lisätietoa löytyy materiaalista.
- Miten saat satunnaisgeneraattorin tuottamasta datasta aidosti satunnaista eli sellaista, että se kelpaa kryptografisille funktiolle? Miksi ennustettavissa oleva satunnaisuus voi johtaa haavoittuvuuteen?
- Mikä on kilpatilanne (race condition)? Miten tiedoston lukemisessa ja kirjoittamisessa ratkaistaan kilpatilanne? Esimerkiksi tiedostoja käsiteltäessa vältä kilpatilanne.
- Mitä mahdollisia haavoittuvuuksia liittyy komentoriviparametrien käsittelyyn?
- Mitä eroa on syötteen validoinnilla ja sanitoinnilla?
- Voitko luottaa tehtävässä 5, että suodatus toimii kaikissa tilanteissa oikein? Miksi?
2. (1 piste, C/C++) Toteuta ohjelma, joka tuottaa mahdollisimman aidosti satunnaista dataa ja tallentaa tämän tiedostoon. Huomaa, että perinteinen random-funktio ei tuota aidosti satunnaista dataa.
3. (1 piste, Python tai C/C++) Kirjoita ohjelma, joka kertoo kaksi käyttäjän syöttämää liukulukua keskenään. Huolehdi, että muuttujat eivät vuoda missään tilanteessa yli. Mitä eri keinoja on suojautua muuttujien ylivuodoilta?
4. (1 piste, Python tai C/C++) Kirjoita ohjelma, joka tulostaa käyttäjän syöttämän luvun käänteisluvun. Huolehdi, että ohjelma toimii kaikilla syötteillä oikein. Mitä eri virheitä voi tulla ja mitä keinoja on suojautua virheiltä?
5. (1 piste, Python tai C/C++) Toteuta ohjelma, joka lukee tiedoston ja suodattaa siitä haitalliset merkit pois siten, että ainoastaan kirjaimet ja numerot hyväksytään. Tulosta suodatettu tieto näytölle. Jos teit tehtävän 2, käytä tehtävän 2 tuottamaa tiedostoa.