Unix 서버와 Linux 서버 그리고 Windows 서버 운영체제는…사실 운영체제 그 자체가 취약점 덩어리라고 할 수 있다. 하지만 대부분 운영체제 자체의 취약성은 운영체제의 필요불가피성에 뭍혀버리고 서버 외부에서 서버 내부로의 침투를 차단하는데 온갖 보안 솔루션을 동원하여 방어하고 있다.
그러나…
최근 몇년 사이에 그러한 인식은 많이 바뀌어 가고 있음을 서버보안SW를 다루면서 느낄 수 있다.
내부망/내부자에 의해 서버 운영체제의 취약점 공격은 너무도 쉽다는 것이 농협사고와 카드3사 사고 등 초 대형 사고와 함께 알려지기 시작했고 네트워크 보안으로는 방어하기 힘든 APT 기법에 의한 해킹이 빈발하면서 서버 내부에서의 통제 강화 필요성이 대두되고 있다.
이번 포스트에서는 방화벽을 우회하여 서버에 침투할 수 있는 Revers Telnet 백도어에 대해 정리하고 방어 정책에 대해 서술한다.
Reverse Telnet의 개념
리버스텔넷에는 서버와 클라이언트에 netcat 이라는 도구가 활용된다. 그리고 특징적인 것은 일반적인 Telnet, SSH와는 정 반대의 접속 방식이 사용된다는 점이다.
일반적으로 Telnet은 다음과 같은 절차에 의해 접속이 된다.
1. 사용자가 접속하고자 하는 서버에서 Telnet, SSHD 대몬이 실행되어 TCP/23, TCP22를 각각 Binding하고 Listen 한다. (클라이언트 Telnet 프로그램이 접속하기를 대기하고 있는상태)
2. 사용자는 PC에서 Telnet Client 프로그램을 실행한다.
3. 사용자가 입력한 서버 IP의 TCP/23, TCP/22에 Connect 한다.
4. Telnet/SSH 대몬은 쉘을 실행하고 두 세션을 연결해준다.
위와 같이 일반적인 Telnet, SSH 접속을 통제하기 위해서는 사용자와 서버의 중간에 방화벽을 두어 접속을 허가할 IP만 열어주고 나머지 IP는 접속을 차단한다.
하지만 위의 과정과 달리 사용자의 PC측에서 기다리고(Listen) 서버에서 사용자 PC측에 접속(connect)한 뒤 쉘을 연결해주는 방식을 사용할 수 있다면 방화벽을 우회할 수 있다. 즉 텔넷 클라이언트 프로그램을 서버로 만들고 텔넷 서버를 클라이언트로 만들어 접속을 하는 (역-텔넷)방식이라고 생각하면 된다. 이 기법을 사용하는 백도어가 바로 리버스텔넷(Reverse Telnet)이다.
리버스 텔넷의 개념도를 보면 다음과 같다.
리버스 텔넷의 과정
리버스 텔넷을 위해서는 공격자의 PC에 netcat 이라는 도구가 필요하다. 넷캣을 PC에 설치한 뒤 다음과 같이 실행해준다.
nc.exe가 netcat 이다. 포트를 1234로 지정한 뒤 위와 같이 실행하면 nc는 서버에 설치된 리버스텔넷 클라이언트의 접속을 기다린다.
다음은 서버에 설치된 리버스텔넷 클라이언트를 실행한다. 앞에서도 이야기 했듯 리버스 텔넷은 일반 텔넷/SSH와는 반대의 개념이다. 클라이언트가 서버에 접속하는 방식이 아니라 서버가 클라이언트에 접속하는 방식이다.
위 화면에서 실행한 리버스텔넷 클라이언트는 펄(Perl)로 만들어진 정교한 클라이언트다. 이 펄로된 소스를 살펴보면 아래와 같이 exec()함수를 이용해 /bin/sh 를 실행하는 것을 볼 수 있다. 또한 서버 운영자와 관리자를 속이기 위해 프로세스 이름도 변경하는 것을 알 수 있다.
이 리버스 텔넷 클라이언트를 실행하면 PC에서 nc 를 실행한 뒤 대기상태 였던 창에 프롬프트가 보이는 것을 확인할 수 있다.
이때부터 서버는 해커의 손아귀에서 놀아나가 된다. 접속 과정에 ID도, 비밀번호도 묻지 않는다. 리버스 텔넷 클라이언트를 실행시킨 사용자 계정의 권한을 인증과정 없이 얻게 된다는 것을 확인할 수 있다.
리버스 텔넷의 차단
현재까지 리버스 텔넷을 서버 수준에서 차단할 수 있는 보안 솔루션은 RedCastle과 같은 SecureOS가 유일하다. 만약 방화벽을 통해 차단하기를 원한다면 내부망에 서버와 사용자의 사이에 방화벽을 설치하고 사용자 PC의 입장에서 인바운드 방화벽 정책을 수립해야 한다. 하지만 인바운드 정책을 적용하는 것은 그리 쉬운일이 아니다.
하지만 레드캐슬을 통해 서버에 리버스 텔넷을 이용한 백도어를 설치한 뒤 접속하는 행위를 통제하기 위해서는 /bin/sh, /bin/ksh, /bin/csh, /bin/bash 등 운영체제에 존재하는 모든 Shell 파일에 대한 접근을 모니터링하여 모니터링 된 프로세스(명령어) 이외에는 접근을 차단하도록 정책을 적용하면 리버스 텔넷으로 인한 불법적인 서버 시스템의 접근을 쉽게 차단할 수 있다.
이 리버스 텔넷은 특별히 어려운 도구 없이 서버에 백도어를 심어놓을 수 있는 매우 쉬운 방법이다. 서버의 크론탭이나 부팅 스크립트 혹은 서비스를 구동/중지하는 스크립트에 몇라인만 숨겨 놓으면… 두고 두고 백도어로 사용할 수 있다.
IT 운영 부서나 개발 부서의 내부자는…마음만 먹으면 언제든 리버스 텔넷을 응용한 백도어를 서버에 심어두고 패스워드 없이 시스템에 로그인할 수 있는 것이다.