Портфолио по информационной безопасности — экран ноутбука с GitHub-профилем, терминалом Kali Linux и CTF write-ups


Два года назад я сидел на том же месте, где сидите вы сейчас. Ноль строчек в трудовой по ИБ, диплом не по специальности, зато - десятки пройденных машин на HackTheBox, куча write-ups на GitHub и один скрипт на Python, который автоматизировал разведку поддоменов. Именно этот набор артефактов принёс мне первый оффер на позицию junior-пентестера. Не диплом. Не сертификат. Конкретное портфолио по информационной безопасности без опыта в коммерческих проектах.

С тех пор я провёл через менторство пять человек - от полного нуля до трудоустройства. И знаю точно: у новичков ступор не в нехватке знаний. Ступор в том, что они не понимают, что именно положить в портфолио и как это оформить, чтобы нанимающий менеджер не закрыл вкладку через три секунды.

Эта статья - конкретный чеклист. Без «развивайте скиллы» и «будьте проактивны». Каждый раздел - действие, результат и место, куда этот результат выложить.

Почему портфолио начинающего специалиста ИБ важнее резюме​

Сразу к реальности рынка. Российский рынок кибербезопасности - кадровый голод: десятки тысяч вакансий висят незакрытыми, а значительная часть соискателей сыпется на техническом собеседовании.

Что это значит для вас: компании отчаянно ищут людей, но не готовы брать кого угодно с парой строчек «прошёл курс по ИБ» в резюме. Как человек, который сидел на стороне найма и просматривал отклики, скажу прямо - резюме без портфолио летит в корзину. Резюме с ссылкой на живой GitHub, где задокументированы проекты - уходит в шортлист.

Первая работа в кибербезопасности достаётся не тому, кто больше знает. А тому, кто может показать, что знает. Разница - как между «я умею плавать» и видео с заплыва.

Вот что конкретно оценивает нанимающий менеджер, когда открывает ваш GitHub:
  • Умеете ли вы доводить задачу до конца, а не бросать после первого коммита
  • Понимаете ли вы, что делаете - README объясняет подход, а не просто копипаст
  • Есть ли системность - структура репозиториев, а не хаос из папок test1 и lab
  • Можете ли вы документировать находки - отчёты, write-ups

Структура GitHub-профиля: ваша витрина для работодателя​

GitHub - не «хранилище кода». Это ваше цифровое резюме, которое работает 24/7. Каждый репозиторий - отдельный проект для резюме по информационной безопасности. Но чтобы это работало, нужна структура.

Как назвать и организовать репозитории​

Плохо: test1, script, lab, homework. Я такое видел десятки раз - и каждый раз закрывал вкладку.

Хорошо: осмысленные имена, по которым сразу понятен контекст.

Тип проектаПример названия репозиторияЧто внутри
Home labhomelab-soc-elk-stackДокументация стенда, конфиги, скриншоты
CTF write-upsctf-writeups-2025Папки по платформам, Markdown-файлы
Автоматизацияrecon-subdomain-scannerСкрипт, README с примерами запуска
Исследованиеxss-filter-bypass-researchPoC, описание методологии, выводы
Bug bountyresponsible-disclosure-reportsДеперсонализированные отчёты

README как мини-отчёт​

Каждый репозиторий обязан иметь README.md. Вот шаблон, который я даю своим менти:
Markdown (GitHub flavored):
# Название проекта

## Цель
Одно предложение: что делает этот проект и зачем.

## Стек / Инструменты
- Kali Linux
- Nmap, Burp Suite
- Python 3.x

## Как запустить
Конкретные команды для воспроизведения.

## Что я узнал
2-3 ключевых вывода. Это показывает рефлексию - работодатели ценят.

## Скриншоты / Результаты
Визуальное подтверждение работы.
Профиль GitHub - первое, на что смотрит технический менеджер. Отнеситесь к нему как к портфолио начинающего специалиста ИБ, а не как к помойке для учебного кода.

Home lab: фундамент вашего портфолио​

Home lab кибербезопасность - не опционально. Это обязательный пункт. Собственная лаборатория показывает, что вы умеете разворачивать инфраструктуру, изолировать среды и работать с инструментами на уровне, приближённом к боевому. Лично у меня первый стенд жил на ноутбуке с 8 ГБ RAM - и этого хватало за глаза.

Минимальный стенд за один вечер​

Вам понадобится машина с 8+ ГБ RAM и VirtualBox (бесплатно). Вот пошаговый план:

Шаг 1. Установите гипервизор и создайте изолированную сеть
Bash:
# В VirtualBox создайте Host-Only сеть:
# File → Host Network Manager → Create
# Адресация: 192.168.56.0/24, DHCP выключен
# Все VM подключаете к этой сети - трафик не выходит наружу
Критически важно: используйте Host-Only или Internal Network адаптеры. Одна из типичных ошибок новичков - Bridged-адаптер, который выставляет атакующую VM в домашнюю сеть. Это не просто небезопасно - это потенциально незаконно, если ваш Nmap-скан уйдёт к соседскому роутеру. Не надо так.

Шаг 2. Разверните атакующую машину

Скачайте Kali Linux (образ для VirtualBox с kali.org). Подключите к Host-Only сети. Проверьте:
Bash:
ip addr show
# Ищите интерфейс с адресом из диапазона 192.168.56.x
# Имя интерфейса может быть eth0, enp0s3, enp0s8 и т.д.
ping 192.168.56.1
# Хост должен отвечать - если молчит, что-то не так с адаптером
Шаг 3. Добавьте уязвимые цели

Начните с двух:
  • Metasploitable 2 - классическая уязвимая VM с десятками открытых сервисов. Там дыр столько, что можно месяц ковырять.
  • - современное уязвимое веб-приложение (запускается через Docker: docker run -p 3000:3000 bkimminich/juice-shop, или через Node.js)
Шаг 4. Задокументируйте стенд

Вот что кладёте в репозиторий homelab-soc-elk-stack или homelab-pentest-lab:
  • Схема сети (нарисуйте в draw.io - пять минут работы, а выглядит профессионально)
  • Список VM с IP-адресами и назначением
  • Конфигурационные файлы
  • Скриншоты запущенного стенда

Продвинутый стенд: SOC-лаборатория​

Если целитесь в SOC-аналитика, добавьте компонент мониторинга. Разверните ELK Stack (Elasticsearch + Logstash + Kibana) или Wazuh - open-source SIEM. Настройте сбор логов с целевых машин, создайте правила детекции и задокументируйте процесс.

Такой стенд - это уже уровень, который выделяет вас среди 90% junior-кандидатов на позицию в SOC. Большинство приходят со словами «я прошёл курс» - а у вас живая лаба с алертами.

CTF для начинающих ИБ: как превратить решения в портфолио

Участие в CTF само по себе ничего не даёт для трудоустройства. Ценность появляется, когда вы документируете решения в формате write-up. Именно write-ups показывают ваш мыслительный процесс - то, что невозможно подделать.

Где начать​

ПлатформаСложностьОсобенность
TryHackMeНачальнаяПошаговые комнаты с подсказками
HackTheBoxСредняяРеалистичные машины, активное коммьюнити
HackerLabНачальная-средняяРусскоязычная платформа, CTF-задания
VulnHubСредняяСкачиваемые VM для локального развёртывания

Формат write-up, который впечатляет​

Я видел сотни write-ups. Большинство - бесполезный мусор в стиле «запустил Nmap, нашёл порт, получил флаг». Ноль мышления, чистая последовательность команд. Вот формат, который реально работает:
Markdown (GitHub flavored):
# HackTheBox - Machine Name

## Разведка

### Сканирование портов
Начинаю с быстрого сканирования всех портов, затем детальное
сканирование обнаруженных сервисов:

nmap -sC -sV -oN nmap_initial.txt 10.10.10.x

### Результат
- 22/tcp - OpenSSH 8.2
- 80/tcp - Apache 2.4.41
- 8080/tcp - Node.js Express

### Анализ
Порт 8080 интересен - нестандартный сервис. Начинаю с него.

## Получение начального доступа
[Описание шагов с объяснением ПОЧЕМУ вы сделали каждый шаг]

## Повышение привилегий
[Шаги + логика]

## Выводы и защита
- Какая уязвимость эксплуатировалась
- Как бы я защитился на месте администратора
- Ссылки на MITRE ATT&CK (если применимо)
Ключевое отличие - секция «Выводы и защита». Она показывает, что вы не просто «ломаете», а понимаете обе стороны. Для работодателя это сигнал зрелости.

Привязывайте техники к фреймворку там, где уместно. Эксплуатировали уязвимость в веб-приложении для начального доступа? Это Exploit Public-Facing Application (T1190, тактика Initial Access). Использовали найденные SSH-ключи для перемещения - T1021.004 Remote Services: SSH. Для доступа пригодились легитимные учётки к VPN или RDP - External Remote Services (T1133). Эксплуатировали дыру в самом RDP-сервисе (тот же BlueKeep) - снова T1190. Такие ссылки показывают, что вы мыслите не на уровне «нажал кнопку в Metasploit», а на уровне структурированного анализа угроз.

Сколько write-ups нужно​

Минимум - 10 штук. По моему опыту, именно после десятого write-up GitHub начинает выглядеть как осознанное портфолио, а не случайный набор файлов. Стремитесь к 15-20 за первые три месяца активной практики. Звучит как много, но если решать по 2 задачки в неделю - набегает быстро.

Проекты для резюме по информационной безопасности: автоматизация на Python​

Скрипты автоматизации - то, что отличает «я прохожу CTF» от «я умею создавать инструменты». Даже простой скрипт показывает: вы думаете как инженер, а не как пользователь чужих утилит.

Проект 1: Сканер открытых портов с экспортом​

Скрипт-обёртка для Nmap - типичный проект для начинающих, но с нюансами:
Python:
import subprocess
import json
import sys
from datetime import datetime


def quick_scan(target, ports="21,22,80,443,8080,8443"):
    """
    Быстрый скан указанных портов через Nmap.
    Результат: список открытых портов с сервисами.
    С sudo выполняется SYN-сканирование (быстрее и незаметнее),
    без sudo - TCP connect scan.
        python3 scanner.py 192.168.56.101
    """
    cmd = ["nmap", "-sV", "--open", "-p", ports, "-oX", "-", target]
    try:
        result = subprocess.run(cmd, capture_output=True, text=True, timeout=120)
        return result.stdout
    except subprocess.TimeoutExpired:
        print(f"[!] Таймаут при сканировании {target}")
        return None
    except FileNotFoundError:
        print("[!] Nmap не найден. Установите: sudo apt install nmap")
        sys.exit(1)


def save_report(target, raw_output):
    """Сохраняет результат в JSON для дальнейшего анализа."""
    report = {
        "target": target,
        "scan_date": datetime.now().isoformat(),
        "raw_xml_length": len(raw_output) if raw_output else 0,
        "raw_xml": raw_output
    }
    filename = f"scan_{target}_{datetime.now().strftime('%Y%m%d_%H%M%S')}.json"
    with open(filename, "w") as f:
        json.dump(report, f, indent=2)
    print(f"[+] Отчёт сохранён: {filename}")


if __name__ == "__main__":
    # Пример для демонстрации концепции - используйте только в своей лаборатории
    target = sys.argv[1] if len(sys.argv) > 1 else "192.168.56.101"
    output = quick_scan(target)
    if output:
        save_report(target, output)
Казалось бы - обёртка над Nmap, зачем? Но тут добавлена структура: таймауты, обработка ошибок, экспорт в JSON. Положите его в репозиторий recon-port-scanner, добавьте README с примерами запуска и скриншотами вывода.

Проект 2: Чекер IoC через VirusTotal API​

Этот проект показывает умение работать с API и автоматизировать рутину анализа угроз - навык, ценный и для Red Team (разведка), и для SOC-аналитиков (проверка индикаторов компрометации):
Python:
import requests
import os
import sys


def check_virustotal(ip_address):
    """
    Проверка IP-адреса через VirusTotal API v3.
    API-ключ берётся из переменной окружения - никогда не хардкодьте ключи!
    """
    api_key = os.getenv("VIRUSTOTAL_API_KEY")
    if not api_key:
        print("[!] Установите переменную: export VIRUSTOTAL_API_KEY='ваш_ключ'")
        sys.exit(1)

    url = f"https://www.virustotal.com/api/v3/ip_addresses/{ip_address}"
    headers = {"x-apikey": api_key}

    try:
        response = requests.get(url, headers=headers)
        response.raise_for_status()
        data = response.json()

        stats = data.get("data", {}).get("attributes", {}).get(
            "last_analysis_stats", {}
        )
        malicious = stats.get("malicious", 0)
        harmless = stats.get("harmless", 0)
        suspicious = stats.get("suspicious", 0)

        print(f"IP: {ip_address}")
        print(f"  Malicious:  {malicious}")
        print(f"  Suspicious: {suspicious}")
        print(f"  Harmless:   {harmless}")

        if malicious > 3:
            print("  [ALERT] Высокий уровень подозрительности!")
    except requests.exceptions.RequestException as e:
        print(f"[!] Ошибка запроса: {e}")


if __name__ == "__main__":
    # Пример использования в лабораторной среде
    target_ip = sys.argv[1] if len(sys.argv) > 1 else "8.8.8.8"
    check_virustotal(target_ip)
Обратите внимание: API-ключ берётся из переменной окружения, а не захардкожен в файле. Добавьте .gitignore с исключением .env - базовая гигиена, которая показывает, что вы понимаете принципы безопасной разработки. (Я видел репозитории, где ключи от VirusTotal лежали прямо в коммите. Не надо так.)

Проект 3: Парсер логов для обнаружения брутфорса​

Python:
import re
from collections import Counter


def parse_auth_log(filepath="/var/log/auth.log"):
    """
    Анализ auth.log на предмет неудачных SSH-попыток.
    Выводит IP-адреса с наибольшим числом ошибок.
    """
    failed_pattern = re.compile(
        r"Failed password.*from (\d+\.\d+\.\d+\.\d+)"
    )
    ip_counter = Counter()

    try:
        with open(filepath, "r") as f:
            for line in f:
                match = failed_pattern.search(line)
                if match:
                    ip_counter[match.group(1)] += 1
    except FileNotFoundError:
        print(f"[!] Файл {filepath} не найден")
        return

    print("Top-10 IP по неудачным SSH-попыткам:")
    print("-" * 40)
    for ip, count in ip_counter.most_common(10):
        flag = " << BRUTE FORCE" if count > 50 else ""
        print(f"  {ip:20s} - {count} попыток{flag}")


if __name__ == "__main__":
    # Пример для демонстрации концепции
    parse_auth_log()
Три таких проекта в GitHub - и вы уже выделяетесь среди 95% кандидатов на junior-позицию. Каждый скрипт решает конкретную задачу, которая встречается в реальной работе.

Bug bounty для новичков: первые шаги и документация

Bug bounty - мощный артефакт для портфолио, но только если подходить правильно. Не нужно находить критическую RCE в Google. Достаточно найти один валидный баг и корректно его задокументировать.

С чего начать​

  1. Зарегистрируйтесь на HackerOne или Bugcrowd
  2. Выберите программу с широким скоупом и пометкой «Beginner Friendly»
  3. Начните с поиска простых уязвимостей: открытые директории, IDOR, информационные утечки в заголовках

Как документировать находку для портфолио​

Даже если баг не приняли или заплатили 0 - сам отчёт имеет ценность. Создайте деперсонализированную версию (уберите название компании и конкретные URL) и добавьте в репозиторий. Следуйте принципам :
Markdown (GitHub flavored):
# Security Finding: IDOR in User Profile API

## Severity
Medium (CVSS ~6.5)

## Description
API endpoint /api/v1/users/{id}/profile returns full profile data
for any user ID without verifying that the requesting user
is authorized to access this data.

## Steps to Reproduce
1. Authenticate as User A
2. Send GET request to /api/v1/users/{USER_B_ID}/profile
3. Observe: full profile of User B is returned

## Impact
Any authenticated user can access profile data of other users,
including email addresses and phone numbers.

## Remediation
Implement authorization check: verify requesting user's ID
matches the requested profile ID, or user has admin role.

## Timeline
- [Date]: Reported to vendor
- [Date]: Acknowledged
- [Date]: Fixed
Такой отчёт показывает: вы умеете находить уязвимости, грамотно описывать impact и предлагать remediation. Это то, чем пентестер занимается каждый рабочий день.

Сертификаты ИБ для начинающих: что реально помогает при трудоустройстве

Сертификаты - не замена портфолио, а дополнение. Вот что имеет смысл для junior-позиции, ранжировано по соотношению «польза / затраты»:

СертификатСтоимостьДля когоПрактический экзамен
CompTIA Security+~$400Универсальный стартНет, тесты
TryHackMe certificatesБесплатно / $14/месПрактики, CTFДа
HackTheBox CPTS/CBBH~$200-500ПентестерыДа, 100% практика
eJPT (INE)~$250ПентестерыДа, практика

Мой совет: если бюджет ограничен - вкладывайте время в бесплатные платформы и портфолио. Один живой GitHub с десятью write-ups стоит больше, чем сертификат без подтверждённых навыков. Сертификат без GitHub - красивый фантик. GitHub без сертификата - рабочий инструмент.

Как попасть в ИБ без опыта: пошаговый план на 90 дней​

Конкретный план, по которому я проводил своих менти. Каждую неделю - измеримый результат.

Недели 1-2: фундамент​

  • Создайте GitHub-аккаунт с профессиональным профилем (фото, био, ссылки)
  • Установите VirtualBox, разверните Kali Linux + Metasploitable 2
  • Задокументируйте стенд в репозитории homelab-pentest-lab
  • Пройдите первые 3 комнаты на TryHackMe (Pre Security path)

Недели 3-6: набор артефактов​

  • Решайте по 2 CTF-задания в неделю, пишите write-ups
  • Напишите первый Python-скрипт (сканер портов или чекер IoC)
  • Пройдите комнату по веб-уязвимостям (OWASP Top 10 на TryHackMe или Juice Shop)

Недели 7-10: углубление​

  • Начните проходить машины на HackTheBox (Easy-уровень)
  • Расширьте home lab: добавьте Windows Server для изучения Active Directory или ELK Stack для SOC-направления
  • Зарегистрируйтесь на bug bounty платформе, изучите 2-3 программы

Недели 11-12: упаковка и выход на рынок​

  • Убедитесь, что на GitHub минимум 5 репозиториев с качественными README
  • Обновите резюме: в каждом пункте - ссылка на конкретный репозиторий
  • Начните откликаться на вакансии junior специалист информационная безопасность

Чеклист готовности портфолио​

Перед первым откликом проверьте:
  • GitHub-профиль заполнен: аватар, био, закреплённые (pinned) репозитории
  • Минимум 10 CTF write-ups в едином формате
  • Минимум 2 скрипта автоматизации с README и примерами
  • Home lab задокументирован: схема сети, список VM, скриншоты
  • Нет захардкоженных паролей и API-ключей в коде (проверьте git log - бывает, ключ удалили из файла, но он остался в истории коммитов)
  • Файл .gitignore присутствует в каждом репозитории
  • Все README написаны грамотно - орфография и структура

Трудоустройство в ИБ без опыта работы: где искать и как подавать​

Стратегия «отправил 100 одинаковых резюме на hh.ru» не работает. Вот что работает:

Стажировки. Positive Technologies, Лаборатория Касперского, VK Education регулярно набирают стажёров. Программы длятся 3-6 месяцев с менторством. Успешные стажёры часто получают оффер.

Telegram-каналы и чаты по ИБ. Значительная часть вакансий в кибербезопасности не попадает на hh.ru. Их публикуют в профильных чатах, где можно напрямую написать тимлиду. Это совсем другой уровень контакта.

Нетворкинг на конференциях. Стартапы часто ищут людей прямо на мероприятиях. Их требования к формальному опыту ниже, а готовность вкладываться в рост сотрудника - выше.

Под каждый отклик адаптируйте сопроводительное письмо. Не пишите «я хочу развиваться в ИБ» - это пустой звук. Пишите: «В моём GitHub есть 15 write-ups по веб-уязвимостям и скрипт автоматизации разведки поддоменов - вот ссылка. Готов обсудить на собеседовании». Конкретика переводит вас из категории «ещё один джуниор» в категорию «этот человек уже что-то делает».

Что дальше: от портфолио к карьере​

Портфолио - не разовый артефакт. Это привычка документировать свою работу, которая останется с вами на всю карьеру. Каждая новая машина на HackTheBox, каждый найденный баг, каждый автоматизированный процесс - ещё одна строчка в реальном резюме.

Как стать специалистом по ИБ с нуля - вопрос не таланта и не денег на дорогие курсы. Это вопрос дисциплины: каждую неделю создавать что-то, что можно показать. Через три месяца такого режима ваш GitHub будет говорить за вас громче любого сертификата. А через шесть - вы уже будете на позиции, где наконец начнёт копиться тот самый «коммерческий опыт», которого от вас так ждали.

Хватит читать. Откройте терминал, запустите VBoxManage startvm kali --type headless, и начните документировать. Ваше портфолио по информационной безопасности без опыта начинается прямо сейчас.
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

Похожие темы

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →
🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →

HackerLab