Cowrie 허니팟 배포

HydraBeginner
지금 연습하기

소개

이 랩에서는 공격자의 행동을 캡처하고 분석하는 중간 상호 작용 SSH 허니팟 (honeypot) 인 Cowrie 를 배포하는 방법을 배우게 됩니다. Python 가상 환경에서 Cowrie 를 설정하고, 포괄적인 로깅을 활성화하면서 실제 SSH 서비스와 유사하게 구성할 것입니다.

이 실습을 통해 공격을 시뮬레이션하고 생성된 로그를 분석하여 허니팟을 테스트할 것입니다. 이 실질적인 경험은 허니팟이 위협 감지 및 분석을 위한 사이버 보안 도구로 어떻게 작동하는지 이해하는 데 도움이 될 것입니다.

Cowrie 설치

이 단계에서는 무차별 대입 공격 (brute force attack) 및 공격자가 수행하는 셸 상호 작용을 기록하도록 설계된 중간 상호 작용 SSH 허니팟인 Cowrie 를 설치합니다. Cowrie 는 Python 으로 구현되었으며 pip 를 사용하여 쉽게 설치할 수 있습니다. 허니팟은 실제 시스템을 모방하여 악성 활동을 유도하고 연구하는 보안 메커니즘으로, 보안 전문가가 공격 패턴을 이해하는 데 도움이 됩니다.

  1. 먼저, 기본 작업 디렉토리에 있는지 확인합니다. 여기에서 모든 프로젝트 파일을 정리합니다.

    cd ~/project
  2. Cowrie 에 필요한 시스템 종속성을 설치합니다. 이러한 패키지는 Python 개발 도구 및 암호화 라이브러리를 포함하여 Cowrie 가 제대로 실행되는 데 필요한 필수 구성 요소를 제공합니다.

    sudo apt-get update && sudo apt-get install -y python3-venv python3-dev libssl-dev libffi-dev build-essential
  3. Cowrie 를 위한 Python 가상 환경을 생성합니다. 가상 환경은 프로젝트 종속성을 시스템 Python 설치와 격리하여 잠재적인 충돌을 방지합니다.

    python3 -m venv cowrie-env
  4. 가상 환경을 활성화합니다. 활성화되면 설치하는 모든 Python 패키지가 시스템 전체 Python 이 아닌 이 격리된 환경으로 들어갑니다.

    source cowrie-env/bin/activate
  5. pip 를 사용하여 Cowrie 를 설치합니다. 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 = 2222listen_port = 22로 변경합니다. 이렇게 하면 허니팟이 표준 SSH 서버처럼 보이게 됩니다.
    • [output_json] 섹션에서 enabled = true로 설정합니다. - 분석을 용이하게 하기 위해 구조화된 로깅을 활성화합니다.
    • [output_textlog] 섹션에서 enabled = true로 설정합니다. - 사람이 읽을 수 있는 로그를 제공합니다.
  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 서비스 시작

이 단계에서는 들어오는 연결을 수신 대기하는 Cowrie 허니팟 SSH 서비스를 시작합니다. systemd 없이 Docker 컨테이너에서 실행되므로 직접 프로세스 실행을 사용합니다. 이 접근 방식은 기존 서비스 관리보다 간단하며 컨테이너화된 환경에 더 적합합니다.

  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. 터미널 세션 간에 서비스가 지속되도록 하려면 간단한 keep-alive 스크립트를 생성합니다. 이렇게 하면 터미널을 닫아도 허니팟이 계속 실행됩니다.

    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

공격 시뮬레이션 실행

이 단계에서는 로깅 기능을 확인하기 위해 Cowrie 허니팟에 대한 SSH 무차별 대입 공격을 시뮬레이션합니다. 이 시뮬레이션은 실제 공격자가 무단 액세스를 시도하는 방법과 허니팟이 이러한 시도를 분석을 위해 기록하는 방법을 보여줍니다.

  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)을 각각 5 번 시도합니다. '-o StrictHostKeyChecking=no'는 SSH 가 알 수 없는 호스트에 대해 묻는 것을 방지하여 자동화를 더 쉽게 만듭니다.

  4. hydra (LabEx VM 에 사전 설치됨) 를 사용하여 보다 정교한 공격을 시뮬레이션합니다.

    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

요약

이 Lab 에서는 사이버 공격을 모니터링하고 분석하기 위해 Cowrie SSH 허니팟을 배포하는 방법을 배웠습니다. 이 과정에는 Python 가상 환경 설정, SSH 포트 구성, 자세한 공격 데이터 수집을 위한 JSON 로깅 활성화가 포함되었습니다.

또한 허니팟 서비스를 시작하고, 공격을 시뮬레이션하고, 기록된 데이터를 분석하는 실질적인 경험을 얻었습니다. 이 실습은 보안 도구가 실제 시스템을 모방하여 악의적인 활동을 효과적으로 감지하고 연구할 수 있는 방법을 보여주었습니다.