소개
이 랩에서는 공격자의 행동을 캡처하고 분석하는 중간 상호 작용 SSH 허니팟 (honeypot) 인 Cowrie 를 배포하는 방법을 배우게 됩니다. Python 가상 환경에서 Cowrie 를 설정하고, 포괄적인 로깅을 활성화하면서 실제 SSH 서비스와 유사하게 구성할 것입니다.
이 실습을 통해 공격을 시뮬레이션하고 생성된 로그를 분석하여 허니팟을 테스트할 것입니다. 이 실질적인 경험은 허니팟이 위협 감지 및 분석을 위한 사이버 보안 도구로 어떻게 작동하는지 이해하는 데 도움이 될 것입니다.
Cowrie 설치
이 단계에서는 무차별 대입 공격 (brute force attack) 및 공격자가 수행하는 셸 상호 작용을 기록하도록 설계된 중간 상호 작용 SSH 허니팟인 Cowrie 를 설치합니다. Cowrie 는 Python 으로 구현되었으며 pip 를 사용하여 쉽게 설치할 수 있습니다. 허니팟은 실제 시스템을 모방하여 악성 활동을 유도하고 연구하는 보안 메커니즘으로, 보안 전문가가 공격 패턴을 이해하는 데 도움이 됩니다.
먼저, 기본 작업 디렉토리에 있는지 확인합니다. 여기에서 모든 프로젝트 파일을 정리합니다.
cd ~/projectCowrie 에 필요한 시스템 종속성을 설치합니다. 이러한 패키지는 Python 개발 도구 및 암호화 라이브러리를 포함하여 Cowrie 가 제대로 실행되는 데 필요한 필수 구성 요소를 제공합니다.
sudo apt-get update && sudo apt-get install -y python3-venv python3-dev libssl-dev libffi-dev build-essentialCowrie 를 위한 Python 가상 환경을 생성합니다. 가상 환경은 프로젝트 종속성을 시스템 Python 설치와 격리하여 잠재적인 충돌을 방지합니다.
python3 -m venv cowrie-env가상 환경을 활성화합니다. 활성화되면 설치하는 모든 Python 패키지가 시스템 전체 Python 이 아닌 이 격리된 환경으로 들어갑니다.
source cowrie-env/bin/activatepip 를 사용하여 Cowrie 를 설치합니다. Pip 는 Python 의 패키지 관리자이며 Cowrie 와 종속성을 다운로드하여 설치합니다.
pip install cowrieCowrie 버전을 확인하여 설치를 확인합니다. 이렇게 하면 패키지가 올바르게 설치되었는지 확인하고 실행 중인 버전을 표시합니다.
cowrie --version다음과 유사한 출력이 표시되어야 합니다.
cowrie 2.1.0완료되면 가상 환경을 비활성화합니다. 이렇게 하면 시스템의 기본 Python 환경으로 돌아갑니다.
deactivate
허니팟 설정 구성
이 단계에서는 Cowrie 허니팟 설정을 구성하여 동작 및 로깅 기능을 사용자 정의합니다. 구성 파일은 허니팟의 두뇌 역할을 하며, 잠재적인 공격자와의 상호 작용 방식과 분석을 위해 기록되는 데이터를 결정합니다.
먼저, 이전 단계에서 생성한 Python 가상 환경을 활성화합니다. 이렇게 하면 Cowrie 의 종속성이 시스템 Python 에서 격리됩니다.
cd ~/project source cowrie-env/bin/activate기본 구성 파일을 생성합니다. 이러한 템플릿에는 기본값을 포함한 모든 사용 가능한 설정이 포함되어 있습니다.
cowrie-gen-config이렇게 하면
~/project/cowrie-env/etc/cowrie/에 구성 파일이 생성됩니다.초보자 친화적인 텍스트 편집기인 nano 를 사용하여 기본 구성 파일을 편집합니다.
nano cowrie-env/etc/cowrie/cowrie.cfg다음 주요 설정을 수정합니다 (화살표 키를 사용하여 탐색하고, Ctrl+O 를 눌러 저장하고, Ctrl+X 를 눌러 종료합니다).
listen_port = 2222를listen_port = 22로 변경합니다. 이렇게 하면 허니팟이 표준 SSH 서버처럼 보이게 됩니다.[output_json]섹션에서enabled = true로 설정합니다. - 분석을 용이하게 하기 위해 구조화된 로깅을 활성화합니다.[output_textlog]섹션에서enabled = true로 설정합니다. - 사람이 읽을 수 있는 로그를 제공합니다.
로그 파일을 위한 전용 디렉토리를 생성합니다. 로그를 별도로 유지하면 구성 및 분석에 도움이 됩니다.
mkdir -p ~/project/cowrie-logs구성에서 로깅 경로를 업데이트하여 새 디렉토리를 가리키도록 합니다.
nano cowrie-env/etc/cowrie/cowrie.cfglog_path설정을 찾아 다음과 같이 변경합니다.log_path = /home/labex/project/cowrie-logs수정된 설정을 확인하여 구성 변경 사항을 확인합니다.
grep -E 'listen_port|enabled|log_path' cowrie-env/etc/cowrie/cowrie.cfg변경 사항을 반영하는 출력이 표시되어 구성이 올바르게 저장되었는지 확인합니다.
SSH 서비스 시작
이 단계에서는 들어오는 연결을 수신 대기하는 Cowrie 허니팟 SSH 서비스를 시작합니다. systemd 없이 Docker 컨테이너에서 실행되므로 직접 프로세스 실행을 사용합니다. 이 접근 방식은 기존 서비스 관리보다 간단하며 컨테이너화된 환경에 더 적합합니다.
먼저, 올바른 디렉토리에 있는지 확인하고 가상 환경을 활성화합니다. 가상 환경에는 시스템에서 격리된 모든 필요한 Python 종속성이 포함되어 있습니다.
cd ~/project source cowrie-env/bin/activateCowrie 서비스를 백그라운드에서 시작합니다.
-n플래그는 비 데몬 모드 (터미널에 직접 출력 표시) 로 실행되도록 하고,&는 프로세스를 백그라운드에 배치하여 터미널을 계속 사용할 수 있도록 합니다.cowrie start -n &프로세스 목록을 확인하여 서비스가 실행 중인지 확인합니다. 이 명령은 실행 중인 모든 프로세스를 필터링하여 "cowrie"를 포함하는 프로세스만 표시합니다.
ps aux | grep cowrie다음과 유사한 출력이 표시되어야 합니다.
labex 12345 0.0 0.5 12345 6789 ? S 12:34 0:00 python cowrie start -n서비스가 포트 22 에서 수신 대기하는지 확인합니다. SSH 연결이 이 포트로 오기 때문에 중요합니다. 이 명령은 모든 네트워크 서비스와 해당 수신 대기 포트를 표시합니다.
sudo netstat -tulnp | grep 22Python 이 포트 22 에서 수신 대기하고 있음을 나타내는 출력이 표시되어야 합니다.
터미널 세션 간에 서비스가 지속되도록 하려면 간단한 keep-alive 스크립트를 생성합니다. 이렇게 하면 터미널을 닫아도 허니팟이 계속 실행됩니다.
nano cowrie-keepalive.sh다음 내용을 추가합니다.
#!/bin/bash source ~/project/cowrie-env/bin/activate cowrie start -n스크립트를 실행 가능하게 만들어 직접 실행할 수 있도록 합니다.
chmod +x cowrie-keepalive.sh이제 이 스크립트를 실행하여 허니팟을 실행할 수 있습니다. 환경을 활성화하고 Cowrie 를 한 단계로 시작합니다.
./cowrie-keepalive.sh
공격 시뮬레이션 실행
이 단계에서는 로깅 기능을 확인하기 위해 Cowrie 허니팟에 대한 SSH 무차별 대입 공격을 시뮬레이션합니다. 이 시뮬레이션은 실제 공격자가 무단 액세스를 시도하는 방법과 허니팟이 이러한 시도를 분석을 위해 기록하는 방법을 보여줍니다.
먼저, Cowrie 허니팟이 실행 중인지 확인합니다 (이전 단계에서).
ps aux | grep cowrie이 명령은 Cowrie 프로세스가 활성 상태인지 확인합니다. 출력 목록에 'cowrie'가 표시되어야 합니다.
SSH 클라이언트가 아직 설치되지 않은 경우 설치합니다.
sudo apt-get install -y openssh-clientopenssh-client 패키지는 허니팟에 연결하는 데 사용할 ssh 명령을 제공합니다. '-y' 플래그는 모든 프롬프트를 자동으로 확인합니다.
일반적인 사용자 이름/암호 조합으로 여러 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 가 알 수 없는 호스트에 대해 묻는 것을 방지하여 자동화를 더 쉽게 만듭니다.
hydra (LabEx VM 에 사전 설치됨) 를 사용하여 보다 정교한 공격을 시뮬레이션합니다.
hydra -L /usr/share/wordlists/metasploit/unix_users.txt -P /usr/share/wordlists/metasploit/unix_passwords.txt -t 4 -vV localhost sshHydra 는 강력한 무차별 대입 공격 도구입니다. 여기서는 제공된 단어 목록에서 조합을 시도합니다 (-L 은 사용자 이름, -P 는 암호). '-t 4'는 4 개의 병렬 시도로 제한하고, '-vV'는 자세한 출력을 표시합니다.
Cowrie 로그를 확인하여 공격이 기록되었는지 확인합니다.
ls -l ~/project/cowrie-logs/공격을 실행한 후, 이 명령은 모든 연결 시도의 세부 정보를 포함하는 새 로그 파일을 표시합니다. 이러한 로그는 실제 배포에서 보안 분석가가 검토할 내용입니다.
공격 로그 확인
이 단계에서는 이전 단계에서 시뮬레이션된 공격을 이해하기 위해 Cowrie 에서 생성된 공격 로그를 분석합니다. 로그에는 공격 시도에 대한 귀중한 보안 정보가 포함되어 있습니다. Cowrie 는 모든 상호 작용 시도를 두 가지 형식으로 자동 기록합니다. 즉, 빠른 읽기를 위한 간단한 텍스트 로그와 자세한 분석을 위한 구조화된 JSON 로그입니다.
먼저, Cowrie 가 모든 로그 파일을 저장하는 로그 디렉토리로 이동합니다.
cd ~/project/cowrie-logs텍스트 기반 로그 파일 (최신 파일부터) 을 봅니다.
ls -lt명령은 수정 시간별로 정렬된 파일을 표시하고,tail은 가장 최근 로그의 마지막 20 줄을 표시합니다.ls -lt cowrie.log* tail -n 20 cowrie.log타임스탬프, 사용자 이름 및 IP 주소와 함께 실패한 로그인 시도를 보여주는 항목이 표시되어야 합니다.
구조화된 데이터를 위해 JSON 로그 파일을 검사합니다.
jq도구는 JSON 구문을 분석하는 데 도움이 되며,less는 긴 출력을 스크롤할 수 있도록 합니다.jq '.' cowrie.json | less인증 시도가 실패했음을 나타내는 "eventid": "cowrie.login.failed" 항목을 찾습니다.
일반적인 관리자 계정을 대상으로 하는 특정 공격 패턴을 검색합니다.
grep명령은 파일에서 텍스트 패턴을 검색합니다.grep -a "root" cowrie.log grep -a "admin" cowrie.log공격 시도의 요약을 생성합니다. 이러한 명령은 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소스 IP 정보를 봅니다 (이 시뮬레이션에서는 localhost 가 표시됨). 이는 연결하는 클라이언트의 IP 주소를 추출합니다.
jq -r 'select(.eventid=="cowrie.session.connect") | .src_ip' cowrie.json
요약
이 Lab 에서는 사이버 공격을 모니터링하고 분석하기 위해 Cowrie SSH 허니팟을 배포하는 방법을 배웠습니다. 이 과정에는 Python 가상 환경 설정, SSH 포트 구성, 자세한 공격 데이터 수집을 위한 JSON 로깅 활성화가 포함되었습니다.
또한 허니팟 서비스를 시작하고, 공격을 시뮬레이션하고, 기록된 데이터를 분석하는 실질적인 경험을 얻었습니다. 이 실습은 보안 도구가 실제 시스템을 모방하여 악의적인 활동을 효과적으로 감지하고 연구할 수 있는 방법을 보여주었습니다.


