본문 바로가기
Hardware/Home Assistant(라즈베리파이)

해킹에 무방비하게 노출된 내 서버, 기본적인 방어는 되어 있는지 확인해 보세요

by lovey25 2023. 8. 27.
반응형

지인이 운영하는 워크스테이션에 셋방살이로 일부 자원 공유받아 사용하고 있는데요. 어느 날 서버 주인이 느닷없이 윈도에 원격접속이 되지 않는다고 연락이 왔습니다.

서버에는 리눅스 하나, 윈도 하나가 돌아가고 있고 각 OS별로 개인 계정을 하나씩 두고 사용하고 있는데 다른 건 다 괜찮은데 윈도 계정중 1개만 아래와 같이 너무 많은 로그인 시도로 인해 계정이 잠겼다고 경고가 나왔습니다.

몇십 년 윈도 사용하면서 이런 메시지를 본 건 처음이라 상당히 당황스럽더라고요. 그래서 윈도 이벤트 기록을 살펴보니 로그인 로그가 엄청나게 발생해 있는 걸 볼 수 있었습니다.

로그인을 시도한 위치도 제각각이고 로그인 아이디도 제각각이었습니다. 이게 그 말로만 듣던 무작위 대입 해킹시도이구나 싶더군요. 윈도 서버는 항상 켜져있지 않아도 돼서 일단 꺼서 큰 걱정은 없는데, 리눅스 쪽은 걱정이 되었습니다.

집에서 라즈베리파이를 이용해서 IOT용 서버도 돌리고 있는데 개인적 목적으로 서버를 운영하고 있다 보니 보안 대책에 대해서 한 번도 깊게 생각해 본 적이 없었는데 이런 일이 생기고 나니 좀 무서운 생각도 들었습니다.

해킹시도 확인

리눅스는 로그인 실패 기록을 "/var/log/btmp"에 기록한다고 합니다. 이 기록은 터미널에서 "lastb" 명령을 입력하면 간단히 볼 수 있습니다. 

lastb 실행결과

지금껏 한 번도 이 기록을 본 적이 없어서 몰랐는데 어이가 없었습니다. 적게는 하루에 수백 번에서 많게는 몇천 번까지 로그인을 하기 위해서 접근을 하고 있었습니다. 클라이언트의 위치는 러시아, 독일, 중국, 폴란드 등 세계 각지였고요. 

해킹시도를 피하는 방법

Home Assistant 서버를 끌 수도 없고 다행히 아직까지 비밀번호가 뚫리지는 않았지만 이런 식이면 털리는 건 시간문제겠죠. 그래서 찾아보니 무자비한 로그인 시도를 하는 IP를 차단해서 운 좋게 로그인되지 않도록 하는 fail2ban이라는 패키지가 있었습니다.

fail2ban 설치

바로 설치해서 적용시켰습니다. 설치를 위해서는 일단 기존에 깔려있는 패키지들 업그레이드해 주고,

sudo apt update
sudo apt upgrade

fail2ban 패키지를 설치합니다.

sudo apt install fail2ban

fail2ban 설정

Fail2ban의 기본 설정 파일은  /etc/fail2ban/jail.conf 이라고 합니다. 그런데 이 파일은 패키지가 업데이트될 때 덮어쓸 수 있기 때문에 실제 사용하는 설정파일은 복사를 해두고 다른 파일을 사용하라고 하네요. 그래서 이 .conf 파일을 복사해서 확장자만 .local로 고쳐서 사용하면 된다고 하네요. 

sudo cp /etc/fail2ban/jail.{conf,local}

요렇게 하면 같은 위치에 "jail.local" 파일이 생성됩니다.

편집기로 열어서 아래와 같이 "bantime, findtime, maxretry" 요 3개 옵션을 원하는 대로 수정해 줍니다.

먼저 첫 번째 bantime은 어떤 IP의 접속을 차단했을 때 얼마나 오랫동안 차단할지를 정의합니다. 저는 그냥 영구차단 시키기 위해서 "-1"로 설정했습니다.

그리고 "findtime"은 반복적인 접속시도를 판단하는 시간간격입니다. 그리니까 여기 10m이라고 하면 10분 동안 정해진 로그인시도 횟수를 초과할 경우 차단하게 됩니다.

마지막으로 "maxretry"는 비밀번호 틀리는걸 몇 번이나 봐줄 건지에 대한 설정입니다. 전 3이라고 했습니다.

이렇게 하면 10분 동안 비밀번호를 3번 틀리는 IP는 내 서버에 다시는 접속할 수 없도록 한다는 설정되겠죠.

이렇게 해서 서비스 재시작하고 예의상 상태확인도 한번 해 줍니다. 잘 돌아가고 있는 것 같네요.

공유기에서 해외 유입 차단하기

그리고 대부분 해킹시도는 해외에서 발생합니다. 그래서 여행이나 출장 때문에 해외 접속이 필요한 경우가 아니라면 공유기에서 아예 해외접속을 차단하는 게 안전하겠죠. 예전에 이거 설정했던 거 같은데 다시 들어가 보니 그냥 풀려있었서 다시 설정해 주었습니다.

ipTime공유기를 사용하신다면, 보안 메뉴에서 국가별 접속 제한을 걸 수 있습니다. 전 우리나라만 허용하는 설정 적용해 주었고 적용하자마자 5분도 안 되는 시간만에 차단건수가 4천 건을 넘어가는 거라 볼 수 있습니다.   ㅡ.,ㅡ

결과

fail2ban 서비스를 돌리고 약 24시간 시켜봤고 그 후 공유기에서 해외접속까지 접속을 차단하고 추가로 48시간 정도 더 기다린 후에 서버에서 로그인 실패 로그 추출해 봤습니다.

기록이 8월 1일부터 있었는데 그전 기록도 볼 수 있는지는 확인해보지 않았습니다. 아무튼 8월 1일에는 799회 접속시도가 있었고 점차 증가하여 8월 8일에 최고인 8,114회를 찍고 대략 일 평균 5천에서 6천 회 기록하고 있었습니다. 접속을 시도하는 IP 숫자는 전체적으로 로그인 시도 횟수와 비례하는 양상을 보이고 있었습니다.

그러나, 해킹 위험에 대한 사실을 인지한 8월 23일 "fail2ban"서비스를 가동하고부터는 공격을 해오는 IP숫자는 늘어났지만 오히려 전체 접속시도 횟수는 많이 줄어든 것을 확인할 수 있습니다. 

fail2ban을 가동하고부터 접속시도 횟수가 천회 미만으로 줄어들었고, 공유기에서 해외접속마저 차단한 8월 24일부터는 접속시도 횟수와 공격자 수가 모두 줄어들었습니다.

일단 위험에 노출되는 숫자가 많이 줄어들긴 했지만 여전히 IP를 바꿔가면서 접속을 시도하는 공격에는 계속 노출되어 있기 때문에 서버가 과연 안전한 것인가 걱정이 되긴 합니다.

마무리

 서버를 구축할 때 OS에서 기본으로 제안해 주는 초기 관리자 ID가 있는데요. 선배님들께서는 관리자 ID는 새로 생성하고 이 기본 ID는 바로 삭제하도록 하라는 조언을 하십니다. 이번에 추출한 로그에서 접속 시도한 ID별로 그 숫자를 확인해 봤는데요. 여기서 바로 선배님들의 조언의 이유를 알 수 있습니다. 전지전능한 ID인 'root'로 로그인을 시도하는 횟수가 일단 대부분이었습니다. 그 뒤로 admin, user, ubuntu 등 흔한 기본 ID를 공격에 이용하고 있네요. 저는 라즈베리파이 OS를 사용해서 pi라는 아이디도 익숙한데 이 역시 공격에 이용되고 있네요. 

소 잃기 전에 외양간을 살펴볼 수 있는 기회가 돼서 다행이라고 생각되네요. 틈틈이 보안에 대한 공부를 해야겠습니다.

 

끝!

반응형

댓글