# Security Awareness Lessons Documentation This document provides comprehensive information about all available lessons in the platform, including learning objectives, content structure, interactive components, and implementation details. --- ## Table of Contents 1. [Phishing Email Detection Basics](#1-phishing-email-detection-basics) 2. [SQL Injection Attack - Online Shop Demo](#2-sql-injection-attack---online-shop-demo) 3. [Browser-in-the-Browser (BitB) Attack](#3-browser-in-the-browser-bitb-attack) 4. [Creating New Lessons](#creating-new-lessons) --- ## 1. Phishing Email Detection Basics ### Overview **Lesson Key:** `phishing-email-basics` **Difficulty:** Beginner **Duration:** 15 minutes **Category:** Social Engineering / Email Security ### Learning Objectives By the end of this lesson, participants will be able to: - Identify common characteristics of phishing emails - Recognize suspicious sender addresses and domains - Detect urgency tactics used by attackers - Understand link verification techniques - Apply best practices for handling suspicious emails ### Content Structure #### Steps: 1. **Introduction to Phishing** (Content) - Definition and impact of phishing - Statistics on phishing attacks - Why email is a primary attack vector 2. **Common Red Flags** (Content) - Suspicious sender addresses - Spelling and grammar errors - Urgent or threatening language - Requests for sensitive information - Suspicious links and attachments 3. **Question 1: Identify Phishing Indicators** (Multiple Choice) - **Points:** 50 total - **Correct Answers:** - Misspelled sender domain (15 pts) - Generic greeting instead of name (10 pts) - Urgent threat about account closure (15 pts) - Suspicious link destination (10 pts) - **Topic:** Recognition of multiple warning signs 4. **Email Analysis Techniques** (Content) - How to inspect sender information - Hovering over links to check destinations - Checking email headers - Verifying legitimacy through official channels 5. **Question 2: Safe Email Practices** (Single Choice) - **Points:** 25 total - **Correct Answer:** "Hover over links to verify destination before clicking" - **Topic:** Proactive defense techniques 6. **Question 3: Reporting Procedures** (Free Text) - **Points:** 25 total - **Validation:** Must mention "report", "IT", and "forward" - **Topic:** Organizational response to phishing ### Scoring - **Total Points:** 100 - **Passing Score:** 70% - **Question Distribution:** - Multiple choice: 50 points (partial credit) - Single choice: 25 points (all or nothing) - Free text: 25 points (keyword-based) ### Implementation Details **Files:** - Config: `backend/lessons/configs/phishing-email-basics.yaml` - Module: `backend/lessons/modules/phishing-email-basics/index.js` **Question Types:** - Uses standard base class validation - No custom interactive components - Text-based content delivery ### Best Practices for Teaching - Start with real-world examples - Show actual phishing emails (sanitized) - Emphasize the cost of successful attacks - Practice with interactive email analysis - Reinforce reporting procedures --- ## 2. SQL Injection Attack - Online Shop Demo ### Overview **Lesson Key:** `sql-injection-shop` **Difficulty:** Intermediate **Duration:** 20 minutes **Category:** Web Application Security / OWASP Top 10 ### Learning Objectives By the end of this lesson, participants will be able to: - Understand how SQL injection vulnerabilities work - Recognize vulnerable code patterns - Execute SQL injection attacks in a safe environment - Understand the difference between vulnerable and secure queries - Apply parameterized queries as the primary defense ### Content Structure #### Steps: 1. **What is SQL Injection?** (Content) - Definition and mechanism - Types of damage (data theft, modification, deletion) - Authentication bypass techniques - Administrative operation exploitation 2. **Vulnerable Online Shop** (Interactive) - **Component:** `SQLShopDemo` - Live product search with vulnerable SQL backend - Real-time query visualization - Injection detection and explanation 3. **Question 1: Identify SQL Injection Payloads** (Multiple Choice) - **Points:** 40 total - **Correct Answers:** - `' OR '1'='1` (15 pts) - Always-true condition - `' UNION SELECT username, password FROM users--` (15 pts) - Data extraction - `'; DROP TABLE products--` (10 pts) - Destructive attack - **Topic:** Recognition of injection syntax 4. **How SQL Injection Works** (Content) - Query structure explanation - Normal vs malicious input comparison - Step-by-step breakdown of attacks - Impact demonstration 5. **Question 2: Prevention Methods** (Single Choice) - **Points:** 30 total - **Correct Answer:** "Use parameterized queries (prepared statements)" - **Topic:** Gold-standard defense mechanism 6. **Preventing SQL Injection** (Content) - Parameterized queries (primary defense) - Input validation strategies - Least privilege principle - Web Application Firewalls - Security auditing 7. **Question 3: Explain Parameterized Queries** (Free Text) - **Points:** 30 total - **Validation:** Must mention "parameter", "data", and "separate" - **Minimum Length:** 50 characters - **Topic:** Understanding separation of code and data ### Interactive Component: SQLShopDemo #### Features: **Mock Database:** ```javascript products: 8 items (laptops, accessories, office supplies) users: 3 accounts (admin, john_doe, jane_smith) orders: 2 sample orders ``` **Attack Scenarios:** 1. **OR Injection:** - Input: `' OR '1'='1` - Result: Returns ALL products - Explanation: Bypasses WHERE clause with always-true condition 2. **UNION SELECT:** - Input: `' UNION SELECT id, username, password, role, 'LEAKED' FROM users--` - Result: Displays user credentials in product table - Explanation: Combines product data with user table 3. **DROP TABLE:** - Input: `'; DROP TABLE products--` - Result: Simulates table deletion - Explanation: Executes destructive SQL command **UI Elements:** - Search input with monospace font for code clarity - "Vulnerable Search" button (red) - executes unsafe query - "Safe Search" button (green) - uses parameterized query - Quick-load example buttons - Real-time SQL query display with syntax highlighting - Injection detection warnings with emoji indicators - Results table showing affected data - Color-coded feedback (red for exploits, green for safe) #### Technical Implementation: **Backend Methods:** ```javascript executeVulnerableQuery(searchTerm) - Simulates vulnerable string concatenation - Detects injection patterns - Returns appropriate results based on attack type executeSafeQuery(searchTerm) - Demonstrates parameterized approach - Treats all input as literal data - Shows query with placeholder syntax detectInjection(input) - Regex-based pattern matching - Identifies quotes, comments, SQL keywords analyzeInjection(input) - Classifies injection type - Generates educational explanation ``` **Frontend API Call:** ```javascript participantAPI.executeLessonAction( eventLessonId, 'execute-query', { searchTerm, mode: 'vulnerable' | 'safe' } ) ``` ### Scoring - **Total Points:** 100 - **Passing Score:** 70% - **Question Distribution:** - Multiple choice: 40 points (partial credit) - Single choice: 30 points - Free text: 30 points (keyword validation) ### Implementation Details **Files:** - Config: `backend/lessons/configs/sql-injection-shop.yaml` - Module: `backend/lessons/modules/sql-injection-shop/index.js` - Component: `frontend/src/components/lessons/InteractiveContent/SQLShopDemo.jsx` **Dependencies:** - Extends `LessonModule` base class - Custom `executeVulnerableQuery` method - Custom `executeSafeQuery` method - Interactive data provider **API Endpoint:** - `POST /api/lesson/:eventLessonId/action/execute-query` - Requires participant authentication - Validates lesson is started ### Best Practices for Teaching - Start with normal searches to establish baseline - Progress from simple to complex injections - Always compare vulnerable vs safe implementations - Emphasize that filtering alone is insufficient - Show real-world impact examples - Demonstrate UNION attacks to highlight data exposure risk - Use color coding to make injection obvious - Provide immediate feedback on each attempt ### Real-World Context **OWASP Ranking:** #3 in OWASP Top 10 (Injection) **Notable Incidents:** - 2019: British Airways breach (380,000 transactions) - 2020: Freepik SQL injection (8.3 million accounts) - Ongoing: Automated scanning for vulnerable endpoints **Industry Standards:** - OWASP recommends parameterized queries - PCI DSS requires SQL injection prevention - ISO 27001 covers secure coding practices --- ## 3. Browser-in-the-Browser (BitB) Attack ### Overview **Lesson Key:** `browser-in-browser-attack` **Difficulty:** Advanced **Duration:** 25 minutes **Category:** Social Engineering / Advanced Phishing ### Learning Objectives By the end of this lesson, participants will be able to: - Understand Browser-in-the-Browser attack methodology - Differentiate between real and fake browser windows - Apply physical testing techniques to detect fake popups - Recognize OAuth/SSO popup security implications - Understand why password managers provide protection ### Content Structure #### Steps: 1. **What is Browser-in-the-Browser?** (Content) - Definition and attack mechanism - Why it's effective (mimics trusted UI) - Comparison to traditional phishing - Historical context (2022 emergence) 2. **How the Attack Works** (Content) - Traditional OAuth flow diagram - BitB attack flow comparison - Technical explanation (HTML/CSS fake browser) - Visual deception techniques 3. **Interactive BitB Demo** (Interactive) - **Component:** `BitBDemo` - Side-by-side real vs fake comparison - Interactive detection testing - Real-world attack examples 4. **Question 1: Detection Indicators** (Multiple Choice) - **Points:** 40 total - **Correct Answers:** - "Window cannot be dragged outside browser" (20 pts) - "Right-click shows 'Inspect Element' on address bar" (20 pts) - **Topic:** Physical behavior testing 5. **Detection Techniques** (Content) - Drag window test (primary method) - Address bar selectability check - Right-click inspection test - Pixel-perfect detail examination - Taskbar appearance verification - Browser extension usage 6. **Question 2: Safest Approach** (Single Choice) - **Points:** 35 total - **Correct Answer:** "Try to drag the popup outside browser window" - **Topic:** Practical defense technique 7. **Protecting Against BitB** (Content) - User defenses (testing, 2FA, manual navigation) - Developer responsibilities (education, redirect flow) - Organizational measures (training, hardware keys) 8. **Question 3: Password Manager Protection** (Free Text) - **Points:** 25 total - **Validation:** Must mention "domain", "autofill", and "real" - **Minimum Length:** 40 characters - **Topic:** Technical security controls ### Interactive Component: BitBDemo #### Features: **Two Scenarios:** 1. **Legitimate OAuth Popup (Simulated Real)** - Provider: Google - Domain: `accounts.google.com` - Indicators shown for educational purposes - Green "✅ REAL" badge 2. **BitB Attack (Fake Popup)** - Provider: Microsoft - Domain: `login.microsoftonline.com` - Trapped within page boundaries - Red "⚠️ FAKE" badge **Interactive Tests:** 1. **Drag Test:** - Real: Would allow dragging (simulated) - Fake: Cannot drag outside browser - Feedback: Yellow warning appears when attempted 2. **Right-Click Test:** - Real: Browser context menu (simulated) - Fake: Shows "Inspect Element" menu - Feedback: Warning about HTML detection 3. **Visual Inspection:** - Fake window controls (non-functional buttons) - Fake address bar (styled HTML div) - Fake HTTPS lock icon (just an image) **UI Elements:** - Side-by-side scenario cards - Provider-specific styling (Google blue, Microsoft blue) - Launch buttons to open fake popups - Dark overlay when popup is active - Educational indicators list - Real-world attack timeline - Test instructions panel **Realistic Browser Chrome:** ``` - macOS-style window controls (red, yellow, green) - Address bar with lock icon - Provider-specific branding - Login form (email + password) - Sign-in button ``` #### Technical Implementation: **Frontend Structure:** ```javascript renderFakeBrowser(scenario) - Creates modal overlay - Renders fake browser window - Applies provider styling - Handles drag attempts - Handles right-click detection - Shows feedback badges ``` **Drag Detection:** ```javascript handleDragStart(e, isReal) - Sets dragAttempted flag - Prevents drag if fake (e.preventDefault) - Shows educational feedback ``` **Right-Click Detection:** ```javascript handleAddressBarRightClick(e, isReal) - Sets inspectAttempted flag - Allows context menu on fake popup - Shows educational feedback ``` **Real-World Examples Data:** ```javascript [ { year: 2022, target: 'Corporate employees', provider: 'Microsoft OAuth' }, { year: 2022, target: 'Cryptocurrency users', provider: 'Google Sign-in' }, { year: 2023, target: 'GitHub developers', provider: 'GitHub OAuth' } ] ``` ### Scoring - **Total Points:** 100 - **Passing Score:** 75% - **Question Distribution:** - Multiple choice: 40 points (physical testing) - Single choice: 35 points (best practice) - Free text: 25 points (technical understanding) ### Implementation Details **Files:** - Config: `backend/lessons/configs/browser-in-browser-attack.yaml` - Module: `backend/lessons/modules/browser-in-browser-attack/index.js` - Component: `frontend/src/components/lessons/InteractiveContent/BitBDemo.jsx` **Dependencies:** - Extends `LessonModule` base class - Custom `getInteractiveData` method - React state management for popups - CSS-in-JS for fake browser styling **Special Features:** - Modal overlay system - Drag prevention - Context menu detection - Provider theming - Responsive design ### Best Practices for Teaching - Emphasize that visual inspection alone is insufficient - Demonstrate the drag test as the most reliable method - Show how convincing the fake popups can be - Discuss password manager benefits - Explain why manual navigation is safest - Reference real-world incidents - Practice detection multiple times - Warn about new variations ### Real-World Context **Discovery:** 2022 by security researcher mr.d0x **Attack Campaign Examples:** - **March 2022:** Steam account phishing - **April 2022:** Cryptocurrency exchange targeting - **May 2022:** Corporate credential harvesting - **2023:** GitHub and GitLab developer targeting **Affected Platforms:** - Any OAuth/SSO provider (Google, Microsoft, Facebook, GitHub) - Banking sites with "secure" login popups - Enterprise SSO systems - Cryptocurrency wallets **Why It's Effective:** - Mimics trusted UI perfectly - Bypasses traditional phishing training - Works on security-aware users - No browser warnings triggered - HTTPS indicators can be faked **Defense Evolution:** - Hardware security keys (FIDO2/WebAuthn) immune - Password managers check real domain - Browser extensions can detect fake UI - User education most critical --- ## Creating New Lessons ### Overview This section provides guidance for creating new lessons in the platform. ### Lesson Structure Every lesson consists of two main components: 1. **YAML Configuration File** (`lessons/configs/*.yaml`) - Defines lesson metadata - Structures content steps - Configures questions and answers - Sets scoring rules 2. **JavaScript Module** (`lessons/modules/*/index.js`) - Extends `LessonModule` base class - Implements custom validation logic - Provides interactive data - Handles special behaviors ### YAML Configuration Format ```yaml lessonKey: "unique-lesson-identifier" title: "Lesson Display Title" description: "Brief description for lesson catalog" difficultyLevel: "beginner|intermediate|advanced" estimatedDuration: 15 # minutes module: "module-directory-name" steps: - id: "step-1" type: "content|question|interactive" title: "Step Title" content: "Step content (can be multiline)" - id: "question-1" type: "question" questionType: "single_choice|multiple_choice|free_text" question: "The question text?" options: # for choice questions - id: "option-1" text: "Option text" isCorrect: true|false points: 10 validationRules: # for free_text questions keywords: required: ["keyword1", "keyword2"] partialCredit: 5 minLength: 50 maxPoints: 25 feedback: correct: "Positive feedback" incorrect: "Educational feedback" scoring: passingScore: 70 maxTotalPoints: 100 ``` ### JavaScript Module Structure ```javascript const LessonModule = require('../base/LessonModule'); class YourLessonModule extends LessonModule { constructor(config) { super(config); } // Optional: Custom answer validation async validateAnswer(questionId, answer) { // Custom logic here, or use: return super.validateAnswer(questionId, answer); } // Optional: Provide data for interactive components getInteractiveData(stepId) { if (stepId === 'your-interactive-step') { return { // Data your frontend component needs }; } return null; } // Optional: Custom methods for lesson-specific actions yourCustomMethod(params) { // Implementation } } module.exports = YourLessonModule; ``` ### Question Types #### 1. Single Choice ```yaml questionType: "single_choice" options: - id: "correct-option" text: "The right answer" isCorrect: true points: 25 - id: "wrong-option" text: "An incorrect answer" isCorrect: false points: 0 ``` - Only one correct answer - All-or-nothing scoring - Radio button UI #### 2. Multiple Choice ```yaml questionType: "multiple_choice" options: - id: "correct-1" text: "First correct answer" isCorrect: true points: 15 - id: "correct-2" text: "Second correct answer" isCorrect: true points: 15 - id: "wrong-1" text: "Incorrect answer" isCorrect: false points: 0 ``` - Multiple correct answers - Partial credit awarded per correct selection - Checkbox UI #### 3. Free Text ```yaml questionType: "free_text" validationRules: keywords: required: ["must", "contain", "these"] partialCredit: 10 # points if some keywords present minLength: 50 # minimum character count maxPoints: 25 ``` - Open-ended response - Keyword-based validation - Minimum length requirement ### Interactive Components #### Creating a New Interactive Component 1. **Define in YAML:** ```yaml - id: "interactive-demo" type: "interactive" title: "Interactive Demo" interactiveComponent: "YourComponentName" content: "Instructions for the interactive element" ``` 2. **Provide Data in Module:** ```javascript getInteractiveData(stepId) { if (stepId === 'interactive-demo') { return { data: 'Your component data', config: {} }; } return null; } ``` 3. **Create React Component:** ```javascript // frontend/src/components/lessons/InteractiveContent/YourComponent.jsx import React from 'react'; const YourComponent = ({ lessonData, eventLessonId }) => { const interactiveData = lessonData?.interactiveData || {}; return (
{/* Your interactive UI */}
); }; export default YourComponent; ``` 4. **Register in LessonView:** ```javascript // frontend/src/pages/LessonView.jsx import YourComponent from '../components/lessons/InteractiveContent/YourComponent'; // In render: {currentStep.interactiveComponent === 'YourComponent' && ( )} ``` ### Lesson-Specific Actions For interactive components that need backend processing: 1. **Add Method to Module:** ```javascript yourCustomAction(params) { // Process params return result; } ``` 2. **Handle in Controller:** ```javascript // backend/src/controllers/lesson.controller.js if (action === 'your-action' && lessonModule.yourCustomAction) { result = lessonModule.yourCustomAction(actionData); } ``` 3. **Call from Frontend:** ```javascript participantAPI.executeLessonAction( eventLessonId, 'your-action', { data } ) ``` ### Seeding New Lessons 1. **Add to Catalog:** ```javascript // backend/seed-lessons.js const lessons = [ { lesson_key: 'your-lesson-key', title: 'Your Lesson Title', description: 'Description', module_path: 'your-module-directory', config_path: 'your-config.yaml', difficulty_level: 'intermediate', estimated_duration: 20 } ]; ``` 2. **Run Seed Script:** ```bash docker exec lernplattform_backend node seed-lessons.js ``` ### Best Practices **Content Design:** - Start with clear learning objectives - Use progressive difficulty (easy → hard) - Provide immediate feedback - Include real-world examples - Make it hands-on when possible **Question Design:** - Multiple choice: 2-4 options, avoid "all of the above" - Free text: Clear validation criteria - Feedback: Educational, not just correct/incorrect - Points: Reflect question difficulty **Interactive Elements:** - Make them essential, not decorative - Provide clear instructions - Give immediate visual feedback - Include educational explanations - Allow experimentation **Code Quality:** - Follow existing patterns - Handle errors gracefully - Validate all inputs - Comment complex logic - Test thoroughly **Security:** - Never execute actual SQL - Sandbox all demonstrations - Validate on both frontend and backend - Don't leak sensitive information - Use appropriate warnings ### Testing New Lessons 1. **Lesson Content:** - All steps render correctly - Images/media load properly - Text formatting is correct 2. **Questions:** - Correct answers award proper points - Wrong answers give appropriate feedback - Partial credit calculates correctly - Free text validation works 3. **Interactive Components:** - Components load without errors - Actions execute successfully - Feedback displays correctly - Edge cases handled 4. **Scoring:** - Total points sum correctly - Passing threshold works - Score persists properly - Leaderboard updates 5. **Progress:** - Lesson marked as started - Navigation works (prev/next) - Completion triggers properly - Locked lessons stay locked ### File Checklist - [ ] YAML config created - [ ] Module directory created - [ ] Module class implemented - [ ] Interactive components (if any) created - [ ] Seed script updated - [ ] Lesson seeded to database - [ ] Tested in browser - [ ] Documentation updated --- ## Appendix ### Lesson Difficulty Guidelines **Beginner:** - Foundational concepts - No prior security knowledge required - 10-15 minute duration - Basic terminology introduction - Real-world relevance emphasized **Intermediate:** - Builds on basic security awareness - Requires understanding of systems/networks - 15-25 minute duration - Hands-on demonstrations - Technical explanations **Advanced:** - Assumes security knowledge - Complex attack scenarios - 20-30 minute duration - In-depth technical details - Sophisticated defenses ### Scoring Philosophy - **Partial Credit:** Encourage learning, reward partial knowledge - **Passing Score:** 70-75% allows mistakes while ensuring competency - **Question Weight:** Harder questions = more points - **Immediate Feedback:** Don't wait until end of lesson ### Content Style Guide **Tone:** - Professional but approachable - Educational, not preachy - Objective about risks - Encouraging about defenses **Formatting:** - Use bullet points for lists - Bold important terms on first use - Code blocks for technical content - Clear step-by-step instructions **Examples:** - Prefer real-world incidents - Include dates and sources - Show impact (financial, reputational) - Demonstrate both attacks and defenses --- ## Support For questions about lesson development: - Review existing lessons as templates - Check base class methods in `LessonModule.js` - Test in development environment first - Document any new patterns **Last Updated:** 2026-01-12 **Platform Version:** 1.0.0 **Total Lessons:** 3