Развертывание ловушки (гонипота) в Cowrie

Beginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии (лабораторной работе) вы узнаете, как развернуть Cowrie, среднеинтерактивный SSH-ловушку (гонипот), которая фиксирует и анализирует поведение атакующих. Вы настроите Cowrie в виртуальной среде Python и конфигурируете ее так, чтобы она имитировала реальную SSH-службу, при этом обеспечивая полноценную запись логов.

В ходе этого практического упражнения вы протестируете ловушку, имитируя атаки и анализируя сгенерированные логи. Этот практический опыт поможет вам понять, как ловушки (гонипоты) работают как инструменты кибербезопасности для обнаружения и анализа угроз.


Skills Graph

Установка Cowrie

На этом этапе вы установите Cowrie, среднеинтерактивную SSH-ловушку (гонипот), предназначенную для записи переборных атак (brute force attacks) и взаимодействия с оболочкой (shell interaction), выполняемых атакующими. Cowrie реализован на Python и может быть легко установлен с помощью pip. Ловушка (гонипот) - это механизм безопасности, который имитирует реальные системы, чтобы привлечь и изучить злонамеренную активность, помогая профессионалам в области безопасности понять шаблоны атак.

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

    cd ~/project
  2. Установите необходимые системные зависимости для Cowrie. Эти пакеты предоставляют важные компоненты, необходимые для корректной работы Cowrie, включая инструменты разработки на Python и криптографические библиотеки:

    sudo apt-get update && sudo apt-get install -y python3-venv python3-dev libssl-dev libffi-dev build-essential
  3. Создайте виртуальную среду Python для Cowrie. Виртуальные среды изолируют зависимости проекта от системной установки Python, предотвращая возможные конфликты:

    python3 -m venv cowrie-env
  4. Активируйте виртуальную среду. После активации любые пакеты Python, которые вы установите, будут помещаться в эту изолированную среду, а не в систему-wide Python:

    source cowrie-env/bin/activate
  5. Установите Cowrie с помощью pip. Pip - это менеджер пакетов Python, который загрузит и установит Cowrie вместе с его зависимостями:

    pip install cowrie
  6. Проверьте установку, проверив версию Cowrie. Это подтверждает, что пакет был установлен правильно и показывает, какую версию вы используете:

    cowrie --version

    Вы должны увидеть вывод, похожий на следующий:

    cowrie 2.1.0
  7. Деактивируйте виртуальную среду после завершения работы. Это вернет вас в стандартную среду Python системы:

    deactivate

Настройка параметров ловушки (гонипота)

На этом этапе вы настроите параметры ловушки (гонипота) Cowrie, чтобы настроить ее поведение и возможности записи логов. Конфигурационные файлы являются "мозгом" вашей ловушки, определяя, как она взаимодействует с потенциальными атакующими и какие данные записываются для анализа.

  1. Сначала активируйте виртуальную среду Python, созданную на предыдущем этапе. Это изолирует зависимости Cowrie от системного Python:

    cd ~/project
    source cowrie-env/bin/activate
  2. Сгенерируйте конфигурационные файлы по умолчанию. Эти шаблоны содержат все доступные настройки со значениями по умолчанию:

    cowrie-gen-config

    Это создаст конфигурационные файлы в ~/project/cowrie-env/etc/cowrie/

  3. Отредактируйте основной конфигурационный файл с помощью nano, текстового редактора, подходящего для начинающих:

    nano cowrie-env/etc/cowrie/cowrie.cfg
  4. Измените следующие важные настройки (используйте стрелки для навигации, Ctrl+O для сохранения, Ctrl+X для выхода):

    • Измените listen_port = 2222 на listen_port = 22 - это сделает ловушку выглядеть как стандартный SSH-сервер
    • Установите enabled = true в разделе [output_json] - это включает структурированную запись логов для более простого анализа
    • Установите enabled = true в разделе [output_textlog] - это обеспечивает запись логов в человекочитаемом формате
  5. Создайте отдельный каталог для файлов логов. Хранение логов отдельно облегчает их организация и анализ:

    mkdir -p ~/project/cowrie-logs
  6. Обновите путь для записи логов в конфигурации, чтобы он указывал на ваш новый каталог:

    nano cowrie-env/etc/cowrie/cowrie.cfg

    Найдите настройку log_path и измените ее на:

    log_path = /home/labex/project/cowrie-logs
  7. Проверьте внесенные изменения в конфигурации, проверив измененные настройки:

    grep -E 'listen_port|enabled|log_path' cowrie-env/etc/cowrie/cowrie.cfg

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

Запуск SSH-сервиса

На этом этапе вы запустите SSH-сервис ловушки (гонипота) Cowrie, который будет прослушивать входящие соединения. Поскольку мы работаем в контейнере Docker без systemd, мы будем использовать прямой запуск процесса. Этот подход проще, чем традиционный менеджмент служб, и лучше подходит для контейнеризованных окружений.

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

    cd ~/project
    source cowrie-env/bin/activate
  2. Запустите службу Cowrie в фоновом режиме. Флаг -n заставляет ее работать в не-демонном режиме (показывать вывод непосредственно в терминале), а & помещает процесс в фон, чтобы вы могли продолжать использовать терминал:

    cowrie start -n &
  3. Проверьте, что служба запущена, проверив список процессов. Эта команда фильтрует все запущенные процессы, чтобы показать только те, которые содержат "cowrie":

    ps aux | grep cowrie

    Вы должны увидеть вывод, похожий на следующий:

    labex   12345  0.0  0.5  12345  6789 ?        S    12:34   0:00 python cowrie start -n
  4. Проверьте, слушает ли служба порт 22. Это важно, так как SSH-соединения будут приходить на этот порт. Команда показывает все сетевые службы и их прослушиваемые порты:

    sudo netstat -tulnp | grep 22

    Вы должны увидеть вывод, указывающий, что Python слушает порт 22.

  5. Чтобы сделать службу устойчивой к закрытию сессии терминала, создайте простой скрипт для поддержания работы. Это гарантирует, что ловушка будет работать, даже если вы закроете терминал:

    nano cowrie-keepalive.sh

    Добавьте следующее содержимое:

    #!/bin/bash
    source ~/project/cowrie-env/bin/activate
    cowrie start -n
  6. Сделайте скрипт исполняемым, чтобы его можно было запускать напрямую:

    chmod +x cowrie-keepalive.sh
  7. Теперь вы можете запустить ловушку, выполнив этот скрипт. Он активирует среду и запускает Cowrie за один шаг:

    ./cowrie-keepalive.sh

Симуляция атаки

На этом этапе вы имитируете SSH-атаку методом перебора паролей (брутфорс) на вашу ловушку (гонипот) Cowrie, чтобы проверить ее способность записывать события. Эта симуляция показывает, как реальные злоумышленники могут пытаться получить несанкционированный доступ, и как ловушка записывает эти попытки для дальнейшего анализа.

  1. Сначала убедитесь, что ваша ловушка Cowrie запущена (см. предыдущий шаг):

    ps aux | grep cowrie

    Эта команда проверяет, активен ли процесс Cowrie. В выходном списке вы должны увидеть 'cowrie'.

  2. Установите SSH-клиент, если он еще не установлен:

    sudo apt-get install -y openssh-client

    Пакет openssh-client предоставляет команду ssh, которую мы будем использовать для подключения к нашей ловушке. Флаг '-y' автоматически подтверждает все запросы.

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

    for i in {1..5}; do
      sshpass -p 'password' ssh -o StrictHostKeyChecking=no -p 22 labex@localhost
      sshpass -p 'admin' ssh -o StrictHostKeyChecking=no -p 22 admin@localhost
      sshpass -p 'root' ssh -o StrictHostKeyChecking=no -p 22 root@localhost
    done

    Этот скрипт пытается использовать распространенные пары имя пользователя/пароль (например, root/password) по пять раз каждая. Флаг '-o StrictHostKeyChecking=no' предотвращает запросы SSH о неизвестных хостах, упрощая автоматизацию.

  4. Симулируйте более сложную атаку с использованием Hydra (предварительно установленного в виртуальной машине LabEx):

    hydra -L /usr/share/wordlists/metasploit/unix_users.txt -P /usr/share/wordlists/metasploit/unix_passwords.txt -t 4 -vV localhost ssh

    Hydra - это мощный инструмент для перебора паролей. Здесь он пытается комбинации из предоставленных списков слов (-L для имен пользователей, -P для паролей). Флаг '-t 4' ограничивает количество параллельных попыток до 4, а '-vV' показывает подробный вывод.

  5. Проверьте, были ли атаки записаны в журналах Cowrie:

    ls -l ~/project/cowrie-logs/

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

Проверка журналов атак

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

  1. Сначала перейдите в каталог с журналами, где Cowrie хранит все свои файлы журналов:

    cd ~/project/cowrie-logs
  2. Просмотрите текстовый файл журнала (самые новые записи сверху). Команда ls -lt показывает файлы, отсортированные по времени изменения, а tail отображает последние 20 строк самого свежего журнала:

    ls -lt cowrie.log*
    tail -n 20 cowrie.log

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

  3. Проверьте JSON-файл журнала для получения структурированных данных. Инструмент jq помогает разобрать JSON, а less позволяет прокручивать длинный вывод:

    jq '.' cowrie.json | less

    Ищите записи с "eventid": "cowrie.login.failed", которые указывают на неудачные попытки аутентификации.

  4. Найдите конкретные шаблоны атак, нацеленные на общие административные учетные записи. Команда grep ищет текстовые шаблоны в файлах:

    grep -a "root" cowrie.log
    grep -a "admin" cowrie.log
  5. Создайте сводку по попыткам атак. Эти команды извлекают и подсчитывают наиболее часто используемые имена пользователей и пароли из JSON-журналов:

    echo "Top usernames attempted:"
    jq -r 'select(.eventid=="cowrie.login.failed") | .username' cowrie.json | sort | uniq -c | sort -nr
    
    echo -e "\nTop passwords attempted:"
    jq -r 'select(.eventid=="cowrie.login.failed") | .password' cowrie.json | sort | uniq -c | sort -nr
  6. Просмотрите информацию о исходных IP-адресах (в этой симуляции будет показан localhost). Это извлекает IP-адреса подключающихся клиентов:

    jq -r 'select(.eventid=="cowrie.session.connect") | .src_ip' cowrie.json

Резюме

В этом практическом занятии вы научились развертывать SSH-ловушку (гонипот) Cowrie для мониторинга и анализа кибератак. Процесс включал настройку виртуального окружения Python, настройку портов SSH и включение JSON-журналирования для подробного сбора данных об атаках.

Вы также получили практический опыт запуска сервиса ловушки, имитации атак и анализа записанных данных. Это практическое упражнение показало, как средства безопасности могут имитировать реальные системы для эффективного обнаружения и изучения вредоносной деятельности.