원격 접속을 열어놓은 PC에 꼭 설치해야 할 도구 - IPBan/Fail2ban

요즈음은 "아무나 얻어걸려라"라는 의도로 클라우드 상에 잘 알려진 IP 대역을 무작위로 헤짚고 다니는 brute force 공격이 대중화된 덕분에, 가끔식 보안 감사 로그를 보면 놀라운 장면을 많이 봅니다.

물론 아이디와 비밀 번호를 고유하고 강력하게 설정해두었다면 큰 문제가 되지는 않겠지만, 그렇다고해서 이런 무작위 대입 공격을 굳이 허용해줄 이유는 없을겁니다.

Windows의 경우 RDP나 WinRM이 집중 공격 대상이 되는 편인데, IPBan을 설치하면 일정 횟수 이상 로그인 실패가 감지될 경우 Windows 방화벽에 IPBan 전용 인바운드 정책을 추가하여 차단 대상 IP 주소에 자동으로 등록해주는 방식으로 무작위 대입 공격을 시도하는 공격자 IP를 막을 수 있습니다.

관리자 권한으로 로그인한 상태에서 아래 PowerShell 명령어를 시작하면 곧바로 시스템 보호를 시작할 수 있습니다.

$ProgressPreference = 'SilentlyContinue'; [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; iex ((New-Object System.Net.WebClient).DownloadString('https://raw.githubusercontent.com/DigitalRuby/IPBan/master/IPBanCore/Windows/Scripts/install_latest.ps1'))

이후 방화벽 정책을 살펴보면 놀라운 숫자의 차단 IP 목록이 나타납니다. 가정용 회선의 경우에는 빈도가 높지 않지만, 퍼블릭 클라우드의 경우에는 단 몇 분만에 수십개의 호스트가 차단 목록에 오르는 (!) 모습을 볼 수 있습니다.

참고로 IPBan은 .NET Framework로 개발된 오픈 소스 도구이며, 무료 버전은 GitHub에 올라와있으니 한 번 살펴보시면 좋을 것 같습니다.

그리고 리눅스의 경우, 전통적인 fail2ban 패키지를 설치하고 서비스를 시작하면 동일한 보호 효과를 볼 수 있습니다. 예를 들어 데비안 계열 리눅스의 경우에는 다음과 같이 명령어를 실행하면 패키지 설치가 곧바로 이루어집니다.

apt -y install fail2ban
service fail2ban start

차단 내역을 확인하기 위하여 아래 명령어를 실행해봅니다.

fail2ban-client status sshd

닷넷데브 포럼 서버에도 fail2ban을 설치하고 활성화한지 하루도 채 안지났지만 역시 엄청난 수의 차단 내역이 등록된 것을 볼 수 있었습니다.

최근 개인 정보 유출로 큰 손해를 입는 기업들의 사례를 보면 결코 남의 일이 아닙니다. 아이디와 비밀 번호를 강하게 설정해야 할 이유가 바로 여기에 있고, 더 나아가서는 공격 시도로 취할 수 있는 이익 대비 투자 비용의 비율을 엄청나게 높이는 이런 장치가 보안을 유지하기 위해 꼭 필요한 수단이라 생각하여 공유해봅니다.

11 Likes

감사합니다… 이것을 미리 알았더라면 ㅠ

2 Likes

오우!! 이런게 있었군요 !! 고맙습니다!!

원격접속을 열어 놓을 경우 무작위적인 공격을 이벤트뷰어에서 확인하실 수 있습니다.
조회해보면 먼 나라 미국부터 남미의 브라질까지 다양한 공격이 시도됩니다.

여러가지 방법이 있겠지만 저 같은 경우는 다음과 같이 이용합니다.

특정 ip만 접근 허용 하는 것이 좋겠다는 전제하에.

가격이 저렴한 리눅스 클라우드 서버를 1대 임대합니다. 성능은 낮아도 크게 상관 없었습니다. 오라클의 무료 클라우드 서비스도 이용가능하지 않을까 싶습니다.

  1. 로컬에서 ssh 키 생성 후 리눅스 클라우드 서버에 ssh 키를 등록 후 로컬에서 리눅스 클라우드 서버에 아이디 패스워드 없이 등록하도록 합니다.

https://velog.io/@solar/SSH-인증키-생성-및-서버에-등록-간편하게-접속하기

  1. 원격 pc 방화벽에 리눅스 클라우드 서버 ip만 원격데스크탑 연결이 가능하게 합니다.

  2. Bitvise SSH Client를 로컬pc에 설치한 후 Login 정보를 등록한 후 Login 버튼을 클릭하여 리눅스 클라우드에 Login합니다. (기억이 가물합니다만…키를 변환했던 기억이 살짝나네요.)

https://www.bitvise.com/download-area

  1. C2S탭에서 ssh 터널링을 할 로컬 주소 및 원격주소를 입력합니다.

  1. 로컬 pc에서 원격데스크탑연결을 실행한 후 접속할 주소에 localhost:33389를 입력하면 ssh 터널링을 통해 원격 pc 접속이 가능하게 됩니다.

셋팅하는게 조금 귀찮아서 그렇지 한번만 셋팅하면 다음 접속부터는 저장된 정보로 바로 연결이 가능하게 됩니다.

2 Likes

이 방법도 정말 좋죠! 여기서 좀 더 나아가서, SPoF (Single Point of Failure)에 대한 걱정이 있긴 합니다만 RDP over SSH를 위해 리눅스 서버를 추가로 구성하지 않고 Windows 서비스 만으로도 구현할 수 있고, 예전에 시험 삼아 구축해본 적이 있습니다.

Windows 10 / Windows Server 2019 이후부터는 OpenSSH가 Microsoft에서 직접 빌드하여 OS 이미지에 직접 탑재되기 시작해서 지금은 정식으로 사용가능한 컴포넌트로 자리잡은지 어느덧 3~4년 이상 지났기 때문에, 최신 버전의 Windows를 사용 중이라면 아래 방법으로도 SSH 서버 구축이 Windows에서 네이티브하게 지원됩니다.

2 Likes

일종의 릴레이 터미널 서버처럼 쓰는 느낌이네요!!! 멋져요.

1 Like

cloudflared나 vpn을 통해 원천 차단하는것도 좋을 것 같아요

2 Likes