Особиста історія про те, як Docker, Node.js та правильна мотивація допомогають створити власну екосистему для кібербезпеки
Як все почалося
Нещодавно побачив вакансію від СОУ. Читаю вимоги: “розуміння SQL injection, LFI, RCE, IDOR, навички роботи з BurpSuite, Metasploit, знання Android-пентестингу”. Сиджу і думаю – круто звучить, і наче тако щось з того вже знаю і якісь розкидані скрипти і напрацювання є ще з давніх часів, вивчення sql php wordpress?
Ця вакансія та відео на ютуб де український пентестер сказав, що хакери вже давно усе зламали і користуються напрацьованими скриптами та методиками, оскільки я ну дуже полюбляю власні велосипеди тож вирішив створити власну лабораторію. Не якусь віртуальну машина з інтернету, а щось своє, де можна експериментувати без страху щось зламати і напрацьовувати інструменти автоматичного пентестингу.
Перший скрипт: коли все почало складатися
Почав я з простого. Взяв Node.js (бо розумів його краще за інші мови) і адаптував свій перший дуже давній скрипт вразливостей. Звичайно, він такий собі і ці вразливості велика рідкість, але знаю декілька фреймворків де ця вразливість є ще досі і на них написані досить великі проекти, тож тестовий скрипт:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
// SQL injection const fetch = require('node-fetch'); async function checkSQLInjection(url) { const payloads = ["'", "1' OR '1'='1", "admin'--"]; for (const payload of payloads) { const response = await fetch(`${url}?id=${encodeURIComponent(payload)}`); const text = await response.text(); if (text.includes("SQL") || text.includes("error")) { console.log(`🚨 Potential SQL injection found with payload: ${payload}`); } else { console.log(`✅ No issue detected for payload: ${payload}`); } } } const targetUrl = "http://localhost:3000/user"; checkSQLInjection(targetUrl); |
Примітивно? Так. Але це типу Hello World.
Docker революція
Колись коли я відкрив для себе Docker, а сталось це коли я перейшов на linux, а там немає ні OpenServer, ні Denwer — того самого “джентльменського набору веб-розробника”, який колись рятував кожного початківця. Немає й MAMP, а LAMP — це скоріше концепція (Linux + Apache + MySQL + PHP), ніж готове коробкове рішення. Звична «одна кнопка — і працює» зникла. Саме тоді я вперше оцінив Docker — інструмент, який дозволив створити лабораторію за лічені хвилини, без болю, ізольовано і передбачувано.
Мій перший docker-compose.yml пентест лабораторії:
|
1 2 3 4 5 6 7 8 9 10 11 |
services: dvna: image: appsecco/dvna:sqlite ports: - "9090:9090" juice-shop: image: bkimminich/juice-shop ports: - "3000:3000" |
Запускаю docker-compose up і БАМ! – у мене працює два вразливих додатки. Можу тренуватися скільки завгодно, нічого не боячись.
Перші успіхи та невдачі
Найперша знайдена мною вразливість була у власному коді старенького застосунку😅:
|
1 2 3 4 5 6 |
// Ой, а це ж небезпечно! app.get('/user/:id', (req, res) => { const query = `SELECT * FROM users WHERE id = ${req.params.id}`; // Прямий шлях до SQL injection }); |
1500Примітка: навчатися краще на власних помилках, ніж на чужих прикладах.
Автоматизація: коли лінь стає двигуном прогресу
Спочатку я запускав все вручну. BurpSuite тут, SQLMap там, перевірка Docker образів окремо. Набридло! Тому написав свій перший автоматизований сканер:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
class VulnerabilityScanner { async scanProject(projectPath) { console.log('🔍 Starting vulnerability scan...'); // Сканування Node.js залежностей await this.scanNodeDependencies(projectPath); // Пошук секретів у коді await this.scanForSecrets(projectPath); // Аналіз Docker файлів await this.scanDockerfiles(projectPath); return this.generateReport(); } } |
Раптом те, що раніше займало години, стало займати хвилини. Запускаю один скрипт – отримую повний звіт безпеки.
Момент істини: коли зрозумів свою силу
Найкращий момент стався, коли колега попросив перевірити їхній проект. Запускаю свій сканер і знаходжу:
- 3 критичні вразливості в залежностях
- Хардкодений API ключ у
.envфайлі - Небезпечний Docker образ з відомими CVE
- SQL injection у їхньому адмін-панелі
За 10 хвилин автоматичного сканування знайшов те, що вони місяцями не помічали. Ось тоді я відчув справжню силу автоматизації.
Еволюція інструментів
Мої скрипти постійно еволюціонували:
Версія 1.0 – простий сканер package.json Версія 2.0 – додав Docker аналіз
Версія 3.0 – мережеве сканування Версія 4.0 – веб API з красивим інтерфейсом Версія 5.0 – інтеграція з CI/CD
Кожна версія вирішувала реальну проблему, з якою я стикався.
Перші професійні виклики
Коли почав працювати з реальними проектами, зрозумів: академічні знання – це одне, а практика – зовсім інше.
Проблема: Клієнт каже “У нас все безпечно, ми використовуємо HTTPS” Реальність: Запускаю свій network scanner і бачу відкритий SSH на 22 порту з дефолтними паролями
Проблема: “Ми регулярно оновлюємо залежності” Реальність: Мій сканер знаходить 15 критичних CVE у package.json
Навчальні моменти
Не все можна автоматизувати
Спочатку думав: напишу скрипт для всього! Але швидко зрозумів – логіка бізнесу, IDOR, деякі типи XSS потребують ручного аналізу.
Docker – не панацея
Контейнери допомагають з ізоляцією, але самі по собі можуть мати вразливості. Мій Docker scanner показав це наочно:
|
1 2 3 4 5 6 7 8 9 |
// Знаходимо небезпечні команди в Dockerfile if (line.includes('curl') && line.includes('| sh')) { this.addVulnerability({ severity: 'HIGH', title: 'Dangerous pipe to shell in Dockerfile', description: 'Downloading and executing scripts directly is a security risk' }); } |
Звіти – це половина успіху
Найкрутіший сканер нічого не варт, якщо результати незрозумілі. Тому зараз працюю над покращенням звітності – HTML з графіками, JSON для автоматизації, CSV для менеджерів.
Практичні поради для початківців
1. Починайте з Node.js (якщо знаєте JS)
Не слухайте тих, хто каже “справжній пентестер користується тільки Python”. Node.js має чудові бібліотеки для мережевого сканування, веб-запитів, і ви можете швидко побачити результати.
2. Docker – ваш кращий друг
|
1 2 3 |
# За 30 секунд у вас працює вразлива лабораторія docker run -p 3000:3000 bkimminich/juice-shop |
3. Автоматизуйте рутину
Якщо робите щось більше 2 разів – пишіть скрипт. Моє правило золоте.
4. Ведіть логи всього
Кожен скан, кожна знайдена вразливість, кожна помилка. Через рік ці дані стануть золотом.
Інструменти, які я створив
Зараз вже є кілька корисних утиліт:
- vulnerability-scanner.js – комплексний сканер проектів
- docker-scanner.js – спеціалізований аналіз Docker образів
- network-scanner.js – мережеве сканування з ізоляцією
- scanner-api.js – веб API для всього цього господарства
- та ще дещо набагато цікавіше за корисні утиліти та то вже виходить за рамки цього опусу
Кожен інструмент вирішує конкретну проблему і еволюціонує разом з моїм досвідом.
Момент, коли все зійшлося
Розмовляв із давнім знайомим і похвалився, що роблю, він каже о то ти хакер, перевір мій застосунок:
За 1 годину мої автоматизовані сканери знайшли:
- 2 SQL injection ендпоінти
- Небезпечну десеріалізацію у JSON API
- Відсутність rate limiting
- Витік даних через verbose error messages
🧨 Небезпечна десеріалізація у JSON API
Що це: коли сервер приймає та обробляє JSON-дані без належної перевірки, зловмисник може підкинути шкідливі об’єкти.
Наслідки: виконання довільного коду, обхід логіки, або навіть повне захоплення сервера.
🚫 Відсутність rate limiting
Що це: API дозволяє необмежену кількість запитів без обмежень по часу або IP.
Наслідки: можливі brute-force атаки, DDoS, перевантаження серверу.
🐞 Витік даних через verbose error messages
Що це: сервер у відповідь на помилку показує надто багато технічної інформації (stack traces, SQL-запити, змінні середовища).
Наслідки: зловмисник отримує підказки для подальших атак — структуру БД, назви файлів, технології тощо.
Решту часу витратив на ручну перевірку. Результат – розуміння: мій підхід працює.
Що далі?
В планах:
- Інтеграція з Kubernetes для сканування кластерів
- ML моделль для виявлення аномальної поведінки
- Мобільний додаток для Android пентестингу
Головний урок
Найкращий пентестер – не той, хто знає найбільше інструментів, а той, хто вміє швидко адаптуватися і створювати власні рішення.
Мої скрипти на Node.js + Docker виявилися потужнішими за багато комерційних рішень, бо вони:
- Точно підходять під мої потреби
- Швидко адаптуються під нові загрози
- Інтегруються з будь-якими системами
- Повністю під моїм контролем
Заклик до дії
Якщо ви тільки починаєте свій шлях у кібербезпеці:
- Не бійтеся експериментувати – створюйте власні інструменти
- Використовуйте те, що знаєте – JavaScript теж може бути зброєю пентестера
- Автоматизуйте все – ваш час дорожчий за CPU час
- Ділиться досвідом – спільнота сильніша за одиночок
Пам’ятайте: кожен експерт колись був початківцем. Різниця тільки в тому, що експерт не здався після першої невдачі.
Ця стаття написана на основі реального досвіду створення власних інструментів для пентестингу. Всі згадані скрипти працюють і доступні для навчальних цілей.
Слава Україні! 🇺🇦