Challenges - 0x48piraj/IoTGoat GitHub Wiki
Challenges
Examples of vulnerabilities included in IoTGoat consist of the following:
No 1: Weak, Guessable, or Hardcoded Passwords
Recompile uhttpd and insert hardcoded backdoor user and password that grants admin rights on the web interface. Add hardcoded encryption key in a network service that uses encryption.
No 2: Insecure Network Services
Install and setup miniupnp daemon on OpenWrt and configure with secure_mode off (Secure mode; client can only redirect an incoming port to the client itself (same IP as the request comes from), to demonstrate a port mapping attack where an attacker from inside the network exposes a service that typically should be behind a LAN to the internet. This attack can be demonstrated using the Miranda tool
No 3: Insecure Ecosystem Interfaces
Have an unauthenticated SOAP service that can be used to enumerate system users or perform other privileged actions.
No 4: Lack of Secure Update Mechanism
Install a custom service that emulates an insecure vendor update mechanism - perhaps rely on second VM that will have the role of the vendor cloud where updates will be pulled from
No 5: Use of Insecure or Outdated Components
Find a public CVE associated with one of the components of OpenWrt and install that vulnerable version on our image.
No 6: Insufficient Privacy Protection
Install database locally with cleartext sensitive information (PHI / PII) and expose through network - associated vulnerabilities could be a SQL or command injection.
No 7: Insecure Data Transfer
Http instead of https, cleartext transmission of PII from database, telnet
No 8: Lack of Device Management
Configure OpenWrt so that it cannot update packages by default
No 9: Insecure Default Settings
Default user for web interface, make some settings (such as disabling UPnP) not configurable through the web interface
No 10: Lack of Physical Hardening
This will not be probably included in IoT goat due to limiting the project to software only - no hardware component for now.
No 11: Embedded credentials in internal components
Embed credentials of another service (could be one of the existing ones) in a compiled Java application (JAR file). Application could be added to the firmware file so users can find it through firmware analysis or another vulnerability such as a local file inclusion.
No 12: Insecure firmware build system
Develop custom firmware builds of the latest OpenWrt version (18.06) demonstrating the process of incorporating debug services/tools, misconfigurations, and usage of vulnerable software packages.
Things to consider
Will every vulnerability be first demonstrated in a step-by-step tutorial and then an additional exercise will have to be completed by the reader? Or alternatively give the user a high-level description of the challenge and let them do it themselves. CTF-like flags for each challenge?