Computer >> 컴퓨터 >  >> 시스템 >> Linux

리눅스 서버에 SSH 허니팟을 구축해 해커를 붙잡는 방법

리눅스 서버에 SSH 허니팟을 구축해 해커를 붙잡는 방법

서버의 인증 로그를 한 번이라도 확인해 본 적이 있다면, 인터넷에 연결된 모든 서버가 해커들의 끊임없는 로그인 시도 공격에 노출되어 있다는 사실을 알고 있을 것입니다.

아무도 모르는 개인 취미용 서버라 하더라도, 자동화된 스크립트는 이를 찾아내어 SSH 무차별 대입(brute force) 공격을 계속해서 시도합니다. 복잡한 비밀번호나 다른 보안 조치를 사용하고 있다면 침입당할 가능성은 크지 않지만, 언제든 성공할 가능성이 전혀 없는 것은 아닙니다.

다행히도 이런 해커들을 서버 안에 가둬 다른 곳에 피해를 줄 수 없도록 만드는 유용하면서도 재미있는 방법이 있습니다.

SSH 허니팟이란?

간단히 말해, SSH 허니팟(honeypot)은 사이버 범죄자를 유인하기 위해 일부러 허술한 표적으로 보이게 만든 미끼입니다. 실제로는 진짜 표적이 아니며, 해커는 대개 너무 늦을 때까지 그 사실을 눈치채지 못합니다.

리눅스 서버에 SSH 허니팟을 구축해 해커를 붙잡는 방법

허니팟은 다양한 형태와 용도로 활용될 수 있습니다. 단순히 주의를 분산시키는 역할만 하는 경우도 있지만, 공격자에 대한 정보를 수집하는 데 사용되기도 합니다.

많은 정부 기관이 범죄자를 잡기 위해 허니팟을 활용합니다. 공격을 유도한 뒤 관련 정보를 수집하여 나중에 검거하는 방식입니다. 물론 허니팟은 기업의 시스템 관리자뿐 아니라 재미로 리눅스 서버를 운영하는 일반 사용자도 충분히 활용할 수 있습니다.

왜 SSH 허니팟을 사용해야 할까?

서버에 SSH 허니팟을 구축하려는 이유는 여러 가지가 있습니다. 공격자의 IP를 파악해 향후 연결을 차단하는 데 활용할 수도 있고, 시스템 내 실제 취약한 지점으로부터 공격자의 관심을 돌리는 미끼로 쓸 수도 있습니다. 또는 공격이 어떤 방식으로 작동하는지 학습하는 교육적인 목적으로 사용할 수도 있습니다.

이 가이드에서는 허니팟을 주로 '주의 분산' 용도로 사용합니다. 즉, 해커가 서버의 더 취약한 부분을 공격하지 못하도록 붙잡아 두고, 다른 사람의 서버를 공격할 여유조차 주지 않는 것이 목표입니다.

그리고 이 방법은 어느 정도 웃음거리도 되어 줍니다.

SSH 타르피트(Tarpit)로 해커 가두기

핵심 아이디어는 해커가 SSH 로그인 무차별 대입 공격을 시도하는 순간 그대로 붙잡아 두는 것입니다. 방법은 여러 가지가 있지만, 그중 가장 간단한 방법 중 하나는 매우 긴 SSH 배너(banner)를 아주 느린 속도로 전송하는 것입니다.

이렇게 하면 해커의 자동화 스크립트는 배너를 기다리며 멈춘 상태가 됩니다. 몇 시간은 물론 며칠, 심지어 몇 주씩 지속될 수도 있습니다. 스크립트는 자동화되어 있기 때문에 해커는 별다른 주의를 기울이지 않고, 상당한 시간이 흐른 후에야 스크립트가 멈춰 있다는 사실을 알아차리게 됩니다.

해커의 스크립트가 스스로 빠져나오지 못하고 끈적하게 달라붙는다는 의미에서, 이 기법은 종종 'SSH 타르피트(SSH tarpit)'라고 장난스럽게 불리기도 합니다.

물론 기본적인 SSH 사용법은 알고 있어야 합니다. SSH 사용에 익숙하지 않다면 먼저 SSH 입문 가이드를 참고하는 것이 좋습니다.

endlessh 설치하기

이번 가이드에서 사용할 프로그램은 skeeto가 개발한 endlessh입니다.

리눅스 서버에 SSH 허니팟을 구축해 해커를 붙잡는 방법

서버에 로그인한 후 저장소를 클론합니다. (git이 설치되어 있어야 합니다.)

git clone https://github.com/skeeto/endlessh

저장소를 받았다면 해당 디렉터리로 이동해 컴파일합니다.

cd endlessh
make

컴파일 과정에서 오류가 발생한다면, 대부분 프로그램 빌드에 필요한 의존성 패키지가 누락된 경우입니다. 오류 메시지에서 어떤 패키지가 없다고 하는지 확인한 뒤, 배포판의 패키지 관리자로 설치하면 됩니다.

컴파일이 완료되면 실행 파일을 bin 디렉터리로 옮겨 어디서든 실행할 수 있도록 경로(path)에 등록합니다.

sudo mv endlessh /usr/local/bin

경로가 제대로 인식되었는지 확인해 봅니다.

which endlessh

/usr/local/bin/endlessh 경로가 출력되면 정상입니다. 출력되지 않는다면 파일이 올바른 디렉터리로 이동했는지 다시 확인하세요.

리눅스 서버에 SSH 허니팟을 구축해 해커를 붙잡는 방법

다음으로, 프로그램을 systemd 서비스로 등록해 백그라운드에서 상시 동작하도록 설정합니다.

sudo cp util/endlessh.service /etc/systemd/system/

복사가 끝나면 서비스를 활성화합니다.

sudo systemctl enable endlessh
리눅스 서버에 SSH 허니팟을 구축해 해커를 붙잡는 방법

기본적으로 endlessh는 1024번 이상의 포트에서만 동작합니다. 하지만 우리는 해커를 속이기 위해 기본 SSH 포트(22번)를 사용하도록 만들어야 합니다. 이를 위해서는 서비스 파일을 수정해야 합니다.

여기서는 nano 편집기를 사용하지만, 익숙한 텍스트 편집기를 사용해도 좋습니다.

sudo nano /etc/systemd/system/endlessh.service

파일을 연 뒤, 아래 줄에서 # 문자를 제거해 주석을 해제합니다:

#AmbientCapabilities=CAP_NET_BIND_SERVICE

그리고 다음 줄 앞에는 #을 추가해 주석 처리합니다:

PrivateUsers=true
리눅스 서버에 SSH 허니팟을 구축해 해커를 붙잡는 방법

파일을 저장한 후 아래 명령을 실행합니다:

sudo setcap 'cap_net_bind_service=+ep' /usr/local/bin/endlessh

이제 endlessh가 어떤 포트에서 실행될지 알려주는 설정 파일을 생성해야 합니다. 먼저 새 디렉터리를 만들고, 그 안에 설정 파일을 작성합니다.

sudo mkdir -p /etc/endlessh
sudo vim /etc/endlessh/config

설정 파일에는 한 줄만 추가하면 됩니다. 이는 endlessh가 SSH 기본 포트인 22번에서 실행되도록 지정하는 것입니다. 해커 입장에서 기본 SSH 포트가 열려 있는 것처럼 보여야 더 매력적인 표적이 되기 때문입니다. 해커는 기본 포트가 열려 있는 것을 발견하고 침입을 시도하게 됩니다.

설정 파일에 다음 내용을 입력합니다:

Port 22
리눅스 서버에 SSH 허니팟을 구축해 해커를 붙잡는 방법

마지막으로 endlessh 서비스를 시작합니다.

sudo systemctl start endlessh

이것으로 끝입니다! 이제 기본 SSH 포트에서 endlessh가 실행되며, 이미 해커를 붙잡기 시작했을 겁니다.

허니팟 테스트하기

허니팟이 의도대로 작동하는지 확인하기 위해, 잠시 해커인 척하고 서버의 SSH 접속을 시도해 보겠습니다.

ssh root@<서버 IP 주소>

모든 설정이 제대로 되었다면 ssh 명령이 아무 반응 없이 멈춰 있는 것을 확인할 수 있습니다. 실제로 어떤 일이 일어나는지 살펴보겠습니다.

같은 명령에 -vvv 플래그를 추가해 상세(verbose) 모드로 실행해 봅니다.

ssh -vvv root@<서버 IP 주소>
리눅스 서버에 SSH 허니팟을 구축해 해커를 붙잡는 방법

이제 이 작은 도구가 어떻게 접속을 가로막고 있는지 명확히 보일 것입니다. endlessh는 매우 큰 SSH 배너를 한 줄씩 아주 느리게 클라이언트에 전송하고 있는 것입니다.

해커는 이 과정을 봇으로 자동화해 놓기 때문에, 자신의 시간이 몇 시간 아니 며칠씩 낭비되고 난 후에야 이상을 감지하게 됩니다.

자주 묻는 질문

1. 이 방법으로 해커의 SSH 접근을 완전히 막을 수 있나요?

훌륭한 억제책이긴 하지만, 해커를 완전히 차단한다고 보장할 수는 없습니다. 세심한 해커는 결국 서버에 허니팟이 설치되어 있음을 눈치채고 다른 포트를 통해 SSH에 접근을 시도할 수 있습니다.

그러나 저항 없는 쉬운 표적만 노리는 해커들을 막기에는 충분합니다.

2. endlessh가 기본 포트를 사용 중이라면 실제 SSH는 어떻게 사용하나요?

SSH가 실행되는 포트를 변경해야 합니다. 사실 허니팟이 없더라도 이것은 권장되는 보안 습관입니다. 해커들은 항상 기본 포트부터 시도한 뒤에야 다른 포트를 스캔하기 때문입니다.

3. 설정 파일에 추가할 수 있는 다른 옵션이 있나요?

네, 배너 전송 지연 속도 변경 등 여러 가지 설정을 조정할 수 있습니다.

사용 가능한 옵션 목록은 GitHub 저장소의 샘플 설정 파일에서 확인할 수 있습니다.

마무리

이제 서버에 허니팟을 구축해 해커를 붙잡고 다른 공격에 시달리지 못하도록 만드는 방법을 배웠습니다. 하지만 이것이 SSH 보안의 전부는 아닙니다.

암호화 키(SSH 키)를 사용해 로그인하는 방법을 활용하면 서버를 한층 더 안전하게 보호할 수 있으니, 관련 가이드도 함께 참고해 보시기 바랍니다.