New Course: Application Hacking
Sovellusten hakkerointi ja haavoittuvuudet

New course in autumn! Application hacking and vulnerabilities. In Finnish. Teaching together with Lari Iso-Anttila.

Enrollment starts 2024-05-15 w20 Wed at 08:00.Sold out , queue started. Please join un next year!

Course name and codeSovellusten hakkerointi ja haavoittuvuudet ICI012AS3A-3001
Translated nameApplication hacking and vulnerabilities
Study guideICI012AS3A course description, realization ICI012AS3A-3001 2024 late autumn
Timing2024 period 2, late autumn (w43-w50)
Credits5 cr
ClassesPasila, classroom pa4009, bring your laptop
Max students30 (sold out)
LanguageFinnish (+reading material in English)
RemoteNo, fully contact in Pasila classroom
FeedbackNew course, first instance.
ServicesMoodle: Sovellusten hakkerointi ja haavoittuvuudet, Laksu. Voluntary extra: Tero's list.
TeachersTero Karvinen and Lari Iso-Anttila
First class2024-10-22 w43 Tue 08:00 pa4009
Enroll2024-05-15 w20 Wed at 08:00, in Peppi - sold out, queue started

Updates on this course: subscribe Tero's newsletter.

This page will keep updating before and during the course.

Aikataulu

Alustava aikataulu. Aiheisiin tulee muutoksia vielä kurssin aikana.

Tiistaisin 08:00 Pasilassa luokassa pa4009. Tunnit alkavat kahdeksalta, vaikka vierailija aloittaisikin myöhemmin.

PäiväAlustava aihe
2024-10-22 w43 TueJohdanto. Järjestäytyminen. Standardit ja kehykset.
2024-10-29 w44 TueMurtautuminen ja haavoittuvuuden korjaaminen lähdekoodista, esimerkkinä weppisolvellukset.
2024-11-05 w45 TueLäksyn tarkastelu. 9 Bugs, bounties, and copying money - vierailija Otto Ebeling, Critical Section Security Oy (en).
2024-11-12 w46 TueStaattinen analyysi. Ghidra. Srings, file...
2024-11-19 w47 TueDynaaminen analyysi. Debuggerit ja gdb.
2024-11-26 w48 TueSulautetut järjestelmät.
2024-12-03 w49 TueSalakirjoitus.
2024-12-10 w50 TueLipunryöstö

Tämä on edistynyt kurssi, joten tuntien aiheisiin voi tulla muutoksia kurssin edetessä. Englanninkieliset esitykset on merkitty "(en)".

Ennakkotiedot

Kurssin alkaessa tulee osata

  • Ohjelmoinnin perusteet
  • Linuxin alkeet
  • Linuxin asennus virtuaalikoneeseen omalle läppärille

Millä tahansa tavalla hankitut esitiedot kelpaavat. Tiedot on voinut hankkia esimerkiksi kursseilla "Linux palvelimet" tai "Ohjelmointi 1", mutta itse opeteltu sopii myös.

Esitiedot tarkistetaan tarvittaessa kyselyllä, ja kurssille valittavat voidaan tarvittaessa valita alkutestin perusteella.

Voit halutessasi kerrata tai opetella taidot alta ennen kurssia. Jos osaat aiheet jo, kertauspakettia ei tarvitse lukea.

Kertauspaketti

Jos osaat nämä asiat jo, et tarvitse kertauspakettia. Ei ole pakko esim. opetella juuri näitä kieliä. Jos kurssilla järjestetään alkutesti, kysymykset eivät rajoitu suoraan kertauspaketin sisältöön.

Ohjelmoinnin perusteet

  • Kurssilla koodataan ja luetaan koodia
  • Millä vain kielellä käy (Esimerkiksi Python tai C)
  • Muuttuja (variable), tietotyypit (int, float, string, array/list), ehtolause (if-else), silmukat (for, while), funktio (function), luokka (class, object), suoritusjärjestys
  • Osaat kirjoittaa yksinkertaisia ohjelmia
  • Osaat lukea ohjelmontikielten ja kirjastojen manuaaleja; ja hakea verkosta ratkaisuja yksinkertaisiin ongelmiin

Jos haluat kerrata Pythonin Linuxissa, koodia pääsee kirjoittamaan näin:

$ python3
>>> print("Hello, Tero!")
>>> exit()

$ nano hello.py

Ja tähän pääset kirjoittamaan ohjelmasi

print("Hello, Tero!")

Tallennus nanossa on ctrl-X, y, enter. Itse asennan 'micro' -editorin, kun koodaan enemmän.

$ python3 hello.py
Hello, Tero!

Ja kielen perusteet selitetään tässä:

Itse kertaan usein kielet kirjoittamalla läjän helppoja veryttelyohjelmia.

Linuxin alkeet

Linuxia käytetään työkaluna. Perustaidot riittävät. Kurssi ei edellytä laajoja Linuxin ylläpitotaitoja.

  • Komentokehotteen käyttö
  • Pääkäyttäjän oikeudet (sudo)
  • Pakentinhallinta (apt-get)
  • Hakemistorakenne (esim. /home/tero/, /etc/, /, /var/log, /usr/bin/, /usr/local/bin/)
  • Lokit (sudo journalctl -n 20; /var/log/apache2/error.log)

Opettele komennot tästä: Karvinen 2020: Command Line Basics Revisited

Helpointa kerrata nämä asentamalla Linux virtuaalikoneeseen ja leikkimällä sillä.

Linuxin asentaminen virtuaalikoneeseen

  • Esimerkiksi Debianin asentaminen VirtualBoxiin (ohje alla)
  • Voit käyttää muitakin virtualisointiratkaisuja, jos pystyt itse soveltamaan ja ratkomaan niihin liittyvät haasteet (esim QEMU, lib-virt, virt-manager...)
  • Jos oma koneesi on uusi M1, M2 tai M3-prosessorilla varustettu Mac, niin tulee osata asentaa Linux virtuaalikoneeseen tässä (arm64) ympäristössä.

Tällä asennusohjeella opiskelijat ovat asentaneet satoja Linuxeja: Install Debian on Virtualbox - Updated 2024

Notes on Mac M1 install: Carr 2024: a) Bookworm

Läksyt

Kotitehtäväraporttien linkit palautetaan 24 h ennen lähiopetuskerran alkua Laksuun. Oman tehtävän palautuksen jälkeen riistiinarvioidaan kahden kurssikaverin tehtävät.

Läksyt tehdään ja raportoidaan kunkin tunnin jälkeen. Tehtävät saa julkaista missä haluaa ja palauttaa linkin Laksuun. Kotitehtäväraportin tulee olla suoraan selaimella katseltavassa muodossa, tavallisena HTML-weppisivuna. Ei odt, ei odp, ei ppt, ei docx, ei doc, ei pdf. Kotitehtäviä ei voi palauttaa sähköpostitse. Linkit palautetaan Laksuun ja sen jälkeen ristiinarvioidaan kaksi työtä. Maksutonta kotisivutilaa saa esimerkiksi WordPress.com, GitHub.com ja Gitlab.com.

Läksyt ovat virallisia vasta, kun ne on annettu tunnin päätteeksi. Vaikka joskus tehtävänanto saattaisi olla weppisivulla ennen tunteja, niitä ei tule tehdä etukäteen, sillä ne arvioidaan sen annetun tehtävänannon mukaan. Ennen vahvistamista tehtäviin voi tulla olennaisiakin muutoksia.

Läksyt käydään läpi seuraavalla tapaamiskerralla, ratkotaan yhdessä ongelmia ja annetaan suullista palautetta. Arvosana kotitehtäväpaketista tulee vasta kurssin lopuksi, mutta tehtävät tulee silti palauttaa aina vuorokautta ennen seuraavia tunteja. Kurssilta poistetaan ne, jotka eivät ala suorittaa kurssia palauttamalla tehtäviä. Julkaiseminen on vapaaehtoista, mutta erittäin suositeltavaa. Jos et jostain syystä uskalla tai muuten halua julkaista, voit laittaa työn weppisivulle salasanan taakse (kaikille kotitehtäville sama salasana) ja jakaa tämän salasanan kurssilaisten kanssa. Jos tuntien yhteydessä järjestetään testejä läksyjen aiheista, niiden pisteet sisältyvät arvostelun kohtaan läksyt.

Läksyt pitää tehdä tietokoneella kokeilemalla ja raportoida tapahtumien kulku, ellei kyseisessä alakohdassa erikseen muuta lue. Raporteista tulee ilmetä tiedot, josta voi todeta että harjoitukset on tehty eikä sepitetty.

Kaikki käytetyt lähteet tulee merkitä raporttiin: kurssin tehtäväsivu, kurssikavereiden raportit, man-sivut, kirjat. Lähdemerkinnästä tulee ilmetä, mikä tieto on mistä lähteestä. Mikäli tekoälyltä kysyy neuvoa, se on merkittävä lähteeksi. Tekoälyt hallusinoivat, tiedot on suositeltavaa tarkistaa. Tiivistelmiä tai esseitä ei saa generoida tekoälyllä eikä muilla vastaavilla tekniikoilla, vaan ne on kirjoitettava itse.

h1 Korkeat standardit

Olisipa joku tehnyt listan, mitä kaikkea meidän pitää turvallisuudessa miettiä.

Tämä tehtävänanto sisältää Teron ja Lari Iso-Anttilan laatimia tehtäviä.

  • a) Tutustu kurssin sanastoon, joka on määritelty SFS-EN ISO/IEC 27000:2020:en standardissa, kappaleessa 3. Terms and Definitions. Selvitä seuraavien kappaleiden määritteet ja selitä omin sanoin mitä ne tarkoittavat: 3.2, 3.31, 3.56, 3.58, 3.77. (Ei edellytä teknisiä testejä tietokoneella)
  • b) Tutustu standardiin ISO 27034-1 - 5. Selvitä mistä standardi kokonaisuudesta on kyse. (Ei edellytä teknisiä testejä tietokoneella)
  • c) Kuuntele podcast: Meurman 2021: Laatulöpinät 30: Tietoturvallisuus ohjelmistokehityksessä (jakson mp3, Laatolöpinät RSS-syöte). Mitä mieltä olet podcastin väittämistä? (Ei edellytä teknisiä testejä tietokoneella)
  • d) Asenna Debian 12-Bookworm virtuaalikoneeseen. Päivitä kaikki ohjelmat. (Poikkeuksellisesti tätä alakohtaa ei tarvitse raportoida, paitsi jos jokin ei toimi. Ympäristö tarvitaan seuraavalle oppitunnille. Joten tämän kohdan vastaukseksi riittää kuittaus, että Linux on asennettu.)

Vinkit

  • Palauta Laksuun linkki raporttiisi. Ristiinarvioi vähintään kaksi.
  • Kätevä tapa saada sivu weppiin: Karvinen 2023: Create a Web Page Using Github. MarkDownin kirjoittaminen lienee vaivattomin tapa tehdä raportteja.
  • ISO-standardit löytyvät kurssin Moodle-sivulta. Kyseessä ei ole erityisen edullinen julkaisu, joten on ihan mukava käyttää kurssille lisensoituja kappaleita.
  • Epäselvää, epäilyttävää, kiinnostavaa, kysyttävää? Kannattaa liittää kaikki huomiot ja ihmetyksen aiheet raporttiin. (Ilmapallojen puhaltelusta & poksauttelusta puhutaan lisää myöhemmin kurssilla).
  • AntennaPod on kätevä ohjelma Podcastien seuraamiseen. Löytyy F-Droid ja Google Play. Podcastien seuraamiseen on tietysti satoja muitakin ohjelmia.
  • Install Debian on Virtualbox - Updated 2024
  • Jos on teknisiä ongelmia, kannattaa kirjoittaa ongelmasta raportti
  • Muista lähdeviitteet

h2 Break & unbreak

Nyt hakkeroidaan! Ja koodataan!

Opit etsimään ja korjaamaan haavoittuvuuksia.

Muista systemaattinen työtapa ja raportoi tehdessä. Kannattaa myös reflektoida: Missä tämä haava voisi olla yleinen? Miten tämän virheen voisi välttää? Mitä tästä opin?

Vinkit

  • OWASP 10 lienee tunneituin dokumentti wepin haavoittuvuuksista
  • PortSwigger Academyn artikkelit ja labrat ovat loistava materiaali weppiin murtautumisesta.
  • Raportinti on osa systemaattista työtapaa. Tapa ratkaista haastavia tietokoneongelmia.
    • Tilaaja ei istu selkäsi takana kannustamassa, kun hakkeroit. Palkkaa vastaan tilaaja haluaa yleensä raportin.
  • Viittasithan kurssiin, läksyihin, dokumentteihin ja kaikkiin muihinkin lähteisiin?
    • Mikä tieto on mistäkin lähteestä?
  • Katso tarvittaessa vapaaehtoiset johdantotehtävät. Kun ratkaiset ne ensin, vaikeammat tehtävät ovat helpompia.
  • Tee tarvittaessa tunnus Portswigger Academyyn.
  • Pikkuvinkkejä ja melkein spoilereita.
  • Jos hakkerointi etenee, hyvä. Jos keksit eri lähestymistapoja, jatkaa vaan.
  • Uusimmassa maalien versiossa on vielä pikkuparannus 010-staff-only. Mutta kyllä sen tunnilla näytetynkin version ratkaisminen käy.
  • Jumissa? Ei mitään ideaa?
    • Tee johdantotehtävät
    • Katso vinkkejä, siksi ne ovat olemassa
    • Hyödyllistä: Mieti eri lähestymistapoja. Kirjoita ne ylös. Tiivistä, mitä jo tiedät. Tee johdantotehtäviä.
    • Turhaa: On turhaa tuijottaa weppilomaketta yli 30min, jos et vielä nykyisellä taitotasolla keksi kokeiltavia lähestymistapoja. Tällöin vinkit auttavat
    • Ja tunnilla katsotaan yhdessä lisää.

h3 No strings attached

Tiesitkö, että binääreistä saa tietoa jo ennen kuin ne ajaa? Tässä astutaan ensi viikon staattisen analyysin maailmaan.

Staattisen analyysin kruunaamaton kuningas 'strings' tervehtii meitä!

  • a) Strings. Lataa ezbin-challenges.zip Aja 'passtr'. Selvitä oikea salasana 'strings' avulla. Selvitä myös lippu. (Ensisijaisesti katsomatta sorsia, jos osaat.)
  • b) Tee passtr.c -ohjelmasta uusi versio, jossa salasana ei näy suoraan sellaisenaan binääristä. Osoita testillä, että salasana ei näy. (Obfuskointi riittää.)
  • c) Packd. Aja 'packd' paketista ezbin-challenges.zip. Mikä on salasana? Mikä on lippu? (Tämä tehtävä on hieman haastavampi. Kirjaa ylös kokeilemasi lähestymistavat ja keksimäsi hypoteesit. Toivottavasti pääset itse maaliin, mutta jos et, läpikävely paljastuu tunnilla...)
  • d) Vapaaehtoinen bonus: Cryptopals. Crypto Challenge Set 1. Tätä voi tehdä useamman viikon bonuksena. Jos saat ratkaistua kohdat 1 .. "4. Detect single-character XOR", olet jo astunut salakirjoituksen maailmaan.

Vinkit

  • Käytä 'strings' ohjelmaa
  • Onko C-kieli vieras? Kokeile ensin itse ja katso vinkkejä netistä. Jos ei muuten ratkea, voit kysyä tekoälyiltä. Muista merkitä lähteet.
  • Cryptopals
    • Base64 tarvitaan vain käytännön syistä. Voit aivan hyvin käyttää valmista ohjelmointikielen tai kirjaston toteutusta.

h4 Kääntöpaikka

  • x) Lue/katso/kuuntele ja tiivistä. (Tässä x-alakohdassa ei tarvitse tehdä testejä tietokoneella, vain lukeminen tai kuunteleminen ja tiivistelmä riittää. Tiivistämiseen riittää muutama ranskalainen viiva.)
  • a) Asenna Ghidra.
  • b) rever-C. Käänteismallinna packd-binääri C-kielelle Ghidralla. Etsi pääohjelma. Anna muuttujielle kuvaavat nimet. Selitä ohjelman toiminta. Ratkaise tehtävä binääristä, ilman alkuperäistä lähdekoodia. ezbin-challenges.zip
  • c) Jos väärinpäin. Muokkaa passtr-ohjelman binääriä (ilman alkuperäistä lähdekoodia) niin, että se hyväksyy kaikki salasanat paitsi oikean. Osoita testein, että ohjelma toimii. ezbin-challenges.zip
  • d) Nora CrackMe: Käännä binääreiksi Tindall 2023: NoraCodes / crackmes. Lue README.md: älä katso lähdekoodeja, ellet tarvitse niitä apupyöriksi. Näissä tehtävissä binäärejä käänteismallinnetaan. Binäärejä ei muokata, koska muutenhan jokaisen tehtävän ratkaisu olisi vaihtaa palautusarvoksi "return 0".
  • e) Nora crackme01. Ratkaise binääri.
  • e) Nora crackme01e. Ratkaise binääri.
  • f) Nora crackme02. Nimeä pääohjelman muuttujat käänteismallinnetusta binääristä ja selitä ohjelman toiminta. Ratkaise binääri.
  • g) Vapaaehtoinen: Ja sen yli. Crackme01 on useampia ratkaisuja. Montako löydät? Miksi?
  • h) Vapaaehtoinen: Pyytämättäkin. Crackme02 on kaksi ratkaisua. Löydätkö molemmat?
  • i) Vapaaehtoinen, hieman haastavampi: A ray. Nora crackme02e. Ratkaise binääri.

Kaipaatko vielä hankalampia haasteita? Voit halutessasi ja taitojen salliessa ratkoa lisää NoraCodes/crackmes -haasteita.

Vinkit

  • Ghidran asennus
    • Kali:
      • 'sudo apt-get install ghidra'
    • Debian 12-Bookworm (ulkomuistista)
      • 'sudo apt-get install openjdk-17-jdk
      • Ota Ghidran versio, joka toimii tällä versiolla Java 17. Muistaakseni Ghidra 11.1.2. Se on vieläpä aika uusi.
      • Github: NationalSecurityAgency / Ghidra: Releases: 11.1.2: Assets: ghidra_11.1.2_PUBLIC_20240709.zip (noin 400 MB)
  • Packd käänteismallinnus
    • Muistithan purkaa pakkauksen?
  • Apupyörät aikuisena?
    • Tehtävien ainoa tarkoitus on oppia tämä asia.
    • Töissä joudut ratkaisemaan tehtävät itse.
    • Perusteet opitaan yksinkertaisilla ohjelmilla. Näitä taitoja sovelletaan aikanaan mutkikkaampiin ohjelmiin.
    • Jos kaikki ideat ja lähestymistavat on käytetty, niin malliratkaisu (tai tekoälyn suora vastaus) on tyhjää parempi. Aina kannattaa kokeilla tehtävä läpi vaikka ohjeiden avulla, niin osaa sitten seuraavasssa.
    • Älä delegoi oppimista tekoälylle.
    • Nykyiset tekoälyt osaavat ratkaista helpot tehtävät. Siitä ei kuitenkaan ole juuri hyötyä töissä. Tehtävät kurssilla ovat helppoja, koska tässä vasta opetellaan. Taitoja pitää myöhemmin pystyä soveltamaan tasolla, johin ainakaan nykypäivän tekoälyt eivät pysty.
  • Komennon palauttama arvo Bash:ssa
    • 'echo Tero; echo $?' tulostaa "Tero\n0", missä 0 on tuo palautusarvo.
    • Nolla tarkoittaa, että kaikki meni hyvin. Muut numerot ovat virheitä.
  • Jos päädyt huviksesi rekisteröitymään PicoCTF:n, niin outoihin kysymyksiin (esimerkiksi etnistä ryhmää koskeviin) voi jättää vastaamatta. Tällaiset kysymykset ovat aika vieraita suomalaiselle, mutta valitettavasti tavallisia ainakin brittiläisissä yliopistoissa.

h5

h6

h7

h8 Bonus

Vapaaehtoinen: Bonus: luettele ja linkitä tähän tekemäsi

  • a) Vapaaehtoiset tehtävät
  • b) Arvioinnin jälkeen olennaisesti parannetut tehtävät