보안 제품정보


네트워크 위협의 중심 최신 봇넷의 이해와 방어 2008.06.24

최근 많은 사람들에게 네트워크 보안의 최대 위협중 하나로 인식되고 있는 봇넷에 대해 살펴보고 시간이 지나면서 변화되어 예상치 못한 봇넷의 위협과 이에 대한 적절한 방어와 보안을 위해 필요한 것이 무엇인지 알아본다. 지금까지 우리는 모든 공격을 막아 왔고 미래의 봇넷도 막을 수 있다.

 

봇넷(BotNet)은 네트워크 보안의 최대 위협 중 하나로 널리 인식되고 있다. 봇넷은 2007년에 이후 급속도로 변화하고 있다. 봇넷은 DDoS 공격이 최초로 광범위하게 이루어진 1999년 이후부터 존재한 것으로 알려져 있다. 2007년에 ‘봇넷 2.0’이라 부르는 새로운 방향으로 급속도로 전환되기 시작하면서 예전에는 예상하지 못했던 방향으로 위협을 가해오기 시작했다.


봇넷 1.0 : 고전적인 아키텍처

악의적인 해커들은 인터넷 익스플로러처럼 널리 쓰이는 프로그램의 취약성을 자동화된 방법으로 파고드는 일에 열광했고 이러한 도구를 사용하여 피해 컴퓨터에 통째로 코드를 숨기는 방법을 택했다. 

봇넷에서 공격자는 명령 및 통제센터(Command Control Center: 이하 C&C)를 만든다. 그런 다음 인터넷을 통해 스크립트된 작은 정보를 갖춘 작은 코드 비트를 전송한다. 이 코드는 무한대로 재생산이 되어 각각 봇 마스터의 에이전트로 활동하기 때문에 ‘로봇’의 줄임말로 봇이라 부른다. 봇이 취약한 장비를 찾아 성공적으로 감염을 시키면 방금 감염된 희생자로부터 C&C로 요청을 보내게 하여 새로운 희생자에 들어왔고 새 지시를 기다린다는 것을 알린다. 봇 코드는 이제 C&C의 봇 클라이언트가 된 것이다. 

 

     

                              그림 1. 전통적인 봇넷 아키텍처

 

일반적으로 봇 마스터는 감염된 장비의 자원이 필요한 시점까지는 좀비를 휴면상태로 둔다. 봇 마스터를 대신하여 봇이 스캔 하는데 엄청난 용량을 쓰게 되기 때문이다. 그러나 봇 마스터가 봇을 아주 잘 만들었다면 피해자의 눈에 거의 띄지 않을 정도의 수준으로 스캐닝이 이행될 수 있다.

전통적 봇넷 아키텍처에서는 봇 코드를 모듈로 만들었다. 이렇게 하면 공격자는 봇에 서브 컴포넌트를 넣거나 뺄 수 있게 해준다. 모듈 코드는 인터넷에서 어떤 취약성이 존재하고 특정 목적(피싱 등)을 추구할 것인가에 따라 익스플로잇을 활성화 또는 비활성화 시킬 수 있게 해준다. 봇 마스터는 지시를 주기 위해 C&C에 봇 전체나 특정 봇을 연결하도록 명령을 할 수 있기 때문에 원할 때면 언제나 자신의 봇 네트워크를 업데이트할 수 있다.

봇 클라이언트와 C&C간의 통신은 인터넷 릴레이 채팅(IRC: Internet Relay Chat) 프로토콜을 사용하여 이루어진다. IRC는 봇이 C&C에 보고하려 할 때 전용 ‘채팅 채널’을 쉽게 만들 수 있게 한다. 봇 마스터의 네트워크가 수천 개의 좀비로 커지면 IRC를 사용하여 공격자는 그의 봇 군대의 서브 그룹핑을 위한 별도 채널을 만들 수 있다.   

모든 봇이 중앙집중형의 명령 스테이션에 연락되도록 프로그램 되어 있기 때문에 C&C를 찾거나 무력화시키면 봇넷 전체가 일망타진되는 점에서 취약성을 갖고 있다. 전통적인 IRC 봇넷은 상당히 많은 양의 트래픽을 생성하여 발견되기 쉬웠다. 상호 통신 프로토콜의 약점은 단일 방향 프로토콜보다 두 배의 트래픽을 생성한다. IRC는 근본적으로 6667번 포트를 사용하며 대부분의 비즈니스 네트워크에서는 이 포트를 닫고 있다. 만약에 전통적인 IRC 봇넷이 수백만의 스팸 메일을 보내거나 수 천의 봇에게 클릭 사기를 유도하는 등 굉장히 활성화되어 간다면 C&C는 빠른 시간 내에 발각될 수밖에 없다. 


봇넷 2.0의 등장 : Zunker, Gozi, Mpack, Storm, MayDay  

2007년 4월, 피해자 장비에 백 도어를 제공하는 코드인 ‘Zunker’가 처음으로 소개했다. 피해자가 스스로 Zunker를 설치하는 웹 사이트에 방문하거나 Zunker가 첨부된 이메일을 작동하게 하여 문을 열어주는 것이다. 또한 자신도 모르는 사이에 P2P사이트의 파일 공유 사이트를 방문하고 Zunker의 백 도어 코드 파일을 다운로드 함으로써 Zunker의 백 도어를 설치하게 된다. Zunker가 설치되면 해커는 컴퓨터에 원격 접근을 할 수 있게 되고 추후 어떻게 활용할 것인지를 결정하게 된다.

Zunker는 피해자와 IRC를 통하여 통신하는 대신에 HTTP를 사용하여 통신한다. 이런 작은 혁신은 Zunker의 생성자에게 굉장히 중요한 혜택을 주었다. 기존의 IRC 봇으로는 포트 6667이 닫히면 모든 통신을 중단할 수 밖에 없었다. 그러나 웹이 활성화된 비즈니스 환경에서 아무도 HTTP 80 포트를 닫을 수는 없는 노릇이다.

Zunker는 잘 작성되고 전문가가 코딩한 PHP 스크립트와 CGI 스크립트로 구성되어 있으며 웹 서버에서 구동한다. HTTP에서 작동한다는 새로운 개념 이 외에도 Zunker는 그래픽으로 잘 구성된 관리 툴을 갖추고 있다. Zunker는 한 가지 약점을 가지고 있는데 이는 단지 피해자를 추적하는 관리 인터페이스일 뿐이라는 것이다. 즉, 스스로는 장비를 스캔할 수 없고 피해자를 찾을 수 없다.

Zunker에 대해서 세상이 알기 시작할 때쯤, Gozi라는 이름을 가진 트로이 목마가 새롭게 등장했다. 이 새로운 실행 멜웨어는 몇 가지 특징을 갖는다.

 

      

                            그림 2. 잘 다듬어진 Zunker의 C&C 센터 

 

● 희생자의 컴퓨터에서 DLL과 레지스트리 키에 스스로를 복사하여 컴퓨터가 새로 부팅할 때마다 다시 시작하게 한다.

● 코드는 커널 루트킷 기술을 포함하여 시각적으로 또는 프로그램적으로 발견되지 않도록 숨을 수 있다.

● 맬웨어는 웹 기반 관리 시스템에 연결되어 Http를 통하여 데이터를 보내고 MySQL 쿼리와 같이 일하도록 미리 포맷되어 있었다.

● 피해자 컴퓨터의 웹 세션을 “훔쳐볼” 수 있다.

● 멜웨어는 아주 낮은 단계에 설치가 되어 피해자의 트래픽을 암호화 되기 전에 읽을 수 있어 이러한 공격에 대비하여 설치된 마이크로소프트의 브라우저 보호를 무력화시킨다.


Gozi는 금융거래에 사용되는 보안을 무력화할 수 있도록 작성되었다. Gozi는 조용하게 비밀스러운 로그인 정보를 확보하고 원격 서버에 명확한 텍스트로 데이터베이스 쿼리에 반응하도록 미리 포맷된 상태로 보낸다.

지난 2007년 5월과 6월에 발견된 Mpack은 봇 마스터가 피해자의 장비에 심을 수 있는 코드의 일종으로, 봇넷 2.0의 특징을 보여준다. Mpack 자체는 봇도 아니고 스캔 도구도 아니며 기본적으로 좀비를 해로운 웹사이트로 바꿀 수 있는 스크립트 콜렉션이다. 

Mpack은 봇이 다른 봇을 끌어들이는 방법에 있어서 대표적인 변화를 보여준다. Mpack은 각 피해자를 또 하나의 부비트랩으로 사용하는 방식으로 변환한 것이다. Mpack 키트는 파이어폭스, 오페라, 인터넷 익스플로러 등 다양한 브라우저 취약성을 공격하는 스크립트를 포함하고 있다. Mpack의 PHP 스크립트는 방문자의 운영 시스템, 브라우저, 지리적 위치 등을 탐지하고 공격 도구의 라이브러리에서 그 목표에 가장 효과적인 공격도구를 찾아낸다.

2007년 1월 보안 연구자들은 날씨와 관련된 새로운 멜웨어를 발견했다. readmore.exe라는 이름의 파일이 스팸이 함께 첨부되어 수신자가 첨부 파일을 열면 첨부 파일은 여러 가지 피해를 줄 수 있는 트로이 목마 코드를 컴퓨터에 감염시켰다. Storm은 피해자의 컴퓨터에서 스팸을 보낼 수 있었고 스스로 확산할 수 있으며 다른 감염된 좀비들과 함께 DoS 공격을 감행할 수 있다. 또한 업데이트를 수신하고 실행할 수 있으며 피해자의 컴퓨터에 루트 키트 기술을 사용해 숨을 수 있다.

Storm은 그전에 한 번도 보지 못한 새로운 형태의 공격을 구사하면서 2007년 동안 진화하여 지금까지 유래가 없는 가장 무시무시하면서도 가장 트래픽을 많이 생산하는 봇넷으로 발전했다. Storm의 혁신 중 하나는 IRC를 포기하고 명령과 통제를 위한 커뮤니케이션에 P2P 기술을 대신 사용한 점이다. P2P 프로토콜, 정확하게는 Overnet26을 사용하여 명령을 배포한다.

만약에 Storm에 감염된 장비를 발견하고 이를 폐쇄한다면 이는 단지 수천 개의 피어 네트워크의 한 컴퓨터에 불과하다. P2P를 통신에 사용하는 방식은 결국 모든 Storm을 일망타진하지 않는 한 Storm을 폐쇄한다는 것이 불가능하다는 점을 의미한다.

생산자들은 Storm 봇 클라이언트를 압축과 암호기술로 다시 패키지해서 Storm의 이전 버전에 기반하여 만든 안티 바이러스 시그니처를 매번 쓸 수 없도록 만들었다. 보안 연구가들을 가장 놀라게 했던 것은 Storm이 심지어 반격 기술까지도 발전시켰다는 점이다.

 

      

                             그림 3. Storm의 P2P 아키텍처 

 

Storm은 세계에서 가장 강력한 수퍼 컴퓨터라고도 불리면서 5천만 개 이상의 봇을 통해 매일 수 백억 통의 이메일을 보내는 것으로 추정된다. 전 세계에 인터넷 트래픽을 스캐닝하는 컴터치(CommTouch) 사는 2007년 4/4분기 보고서에서 Storm이 전 세계 스팸의 최대 7%를 차지하고 있다고 발표했다. 어떤 기관에서는 20% 정도의 스팸이 Storm에서 나온 것으로 본다. Storm의 활동은 2008년 초부터 눈에 띄게 줄기 시작했고 85,000개의 감염 장비로 줄어 들었다. 어떤 사람들은 Storm이 2단계로 가기 위해서 개발을 중지했다고 추측한다.

2008년 1월 말 또는 2월 초에 새로운 P2P 봇넷이 나타났다. MayDay는 표준 HTTP를 사용하여 봇 클라이언트와 C&C 센터간의 통신을 한다. 다른 봇은 통신 포트를 막지 못하도록 하기 위해 HTTP 80 포트를 사용해 왔다. MayDay는 여기서 한 단계 더 나아가 웹 프록시를 비켜 갈 수 있는 능력을 가지고 있다.

만약에 주 HTTP 통신 채널이 작동하지 않는 다면 MayDay 봇은 두 종류의 다른 프로토콜로 대체를 시도할 수 있다. 한 가지 방법은 Damballa가 발견하지 못한 TCP프로토콜을 사용하는 것이다. 다른 방법은 좀더 은밀한 것으로 핑이나 핑 에코로 알려진 암호화된 ICMP(Internet Control Message Protocol)를 사용하는 것이다. ICMP는 문제 해결 기능을 위하여 프로토콜 운영자가 일상적으로 의존하는 방법 중 하나이다. HTTP를 통해 MayDay의 ICMP 메시지는 운영자가 절대 막을 수 없는 포트로 움직이게 된다. 이 때문에 MayDay는 세 개의 통신 프로토콜을 사용하는 최초의 봇으로 기록되었다.

MayDay에 의하여 감염되면 C&C는 타이머를 시작한다. 만약에 새로운 봇 클라이언트가 일정한 시간 내에 C&C와 연결되지 않으면 새로운 클라이언트는 절대로 연결되지 않도록 만든다. 감염은 첨부된 PDF파일과 함께 이메일을 통해 도달하여 이루어지는 것으로 알려져 있다.

봇 코드가 변화하는 속도는 설명할 수 없을 정도이다. 거의 매주 새로운 변모가 이루어졌기 때문이다. 최근 Mega-D라고 불리는 봇이 전 세계에서 가장 많은 스팸 생산자로 자리잡으면서 Storm의 위치를 대체했다. 봇 마스터의 창조성은 어째서 네트워크 운영자들이 현재의 봇 현실에 익숙지는 것이 시급한지 그 이유를 말한다.

 

미래의 봇넷 방어

이미 알려진 것처럼 봇넷은 극단적으로 여러 개의 위협을 동시에 섞어서 가지고 있다. 봇넷 코드는 스파이웨어부터 다운로드 루트 키트, 스팸 엔진 및 그 이상의 생각 할 수 있는 맬웨어를 포함한다. 방어자들은 반드시 여러 단계의 보안을 수용해야 한다. 좋은 소식이 있다면 오랜 기간 사용되었던 기술이 아직도 놀랍게도 봇넷에 대하여 효과적이라는 것이다.

여러 계층의 방어에서 하나의 계층이 100% 효과적일 필요는 없다는 점은 기억할 필요가 있다. 만약 50%만 효과적인 보안 제어를 한 가지만 가지고 있다면 이는 재난을 초래하는 것과 마찬가지다. 그러나 만약 두 개의 방어 시스템을 가지고 있고 50%의 효과가 있다면 75%의 효과를 기대할 수 있다. 마찬가지로 다섯 개의 통제 수단을 갖고 이들이 각각 50%만 효과적이라면 97%의 효율성을 확보하게 된다. 우리가 99%의 효율성을 가지려면 각각이 70% 효과를 갖는 네 개의 통제 수단만 있으면 된다.

봇은 피해자를 감염시키기 위하여 다양한 방법의 공격 도구를 사용한다. 그러나 가장 강력하고 효과적인 봇은 제조사가 6-18개월 전에 패치한 취약성을 공격하는 방식에 의존한다. 봇 통신과 백엔드 시스템이 숨 가쁘게 혁신을 이루는지 설명할 수는 없으나 봇은 알려지고 오래된 공격 도구를 사용한다. 따라서 네트워크에서 작동하는 소프트웨어에 대한 패치를 재업데이트 한다면 네트워크 관리자는 봇 마스터보다 빠르게 움직여 그들의 공격을 감당 할 수 있다.

봇이 웹 기반의 공격을 사용하여 피해자의 컴퓨터를 공격할 때 자바 스크립트를 실행할 수밖에 없다. 자바 스크립트를 실행하기 전에 브라우저를 깜빡이게 하면 봇 감염 요소를 엄청나게 줄일 수 있게 된다. 최근의 봇은 모든 운영자가 반드시 열어놓아야 하는 포트를 통해 통신을 하지만 대부분의 봇들은 아직도 IRC(6667 포트)를 사용하거나 다른 잘 쓰이지 않는 높은 번호의 포트를 사용한다(예를 들어 31337과 54321). 1024 이상의 포트는 기업에서 해당 포트를 사용하는 응용 프로그램을 쓰는 경우나 특별한 필요가 없을 경우 내부로 들어오고 외부로 나가는 방향을 모두 닫아놓는다. 예를 들어 업무시간 동안 또는 지정된 IP주소에서 오는 트래픽을 제외한 나머지를 거부 하는 등의 정책을 세운다. 단순해 보이는 대책이지만 봇이 CNC로부터 지시나 업데이트를 받아야 되는 구식 봇을 막고 기본적으로 도착하는 순간 봇을 죽일 수 있다.

80이나 7처럼 필요한 포트에서 움직이는 봇넷 2.0 트래픽은 종종 트래픽이 없어야 하는 시간에 명령을 하기 위해 트래픽을 발생시킨다. 일반적으로 봇 마스터는 오전 1시부터 5시 사이에 좀비들을 업데이트하는데 이때 아무도 자신들을 모니터하는 사람이 없다고 가정하기 때문이다. 따라서 서버로그를 아침에 체크하는 것이 좋겠다. 만약에 근무자가 없는 시간에 웹 브라우징 활동이 있었다면 이를 조사해야 한다. 사용자는 원하지 않았거나 또는 예상하지 않았던 첨부 파일을 열지 말아야 하며 이메일에 연결된 링크를 클릭하지 말아야 한다. 무심코 다운로드한 내용이 어떻게 작동하는가를 직접 보여주면서 사용자 교육에 활용한다면 행동을 즉각 바꾼다는 점을 확인할 수 있었다.

봇넷은 여러 가지가 섞여있는 공격을 가지고 있다는 점이 밝혀졌으나 혼합 공격은 아니었다. 봇 활동의 홍수가 일어나고 있지만 우리는 지금까지 모든 공격을 막아 왔고 미래에도 봇넷을 막을 수 있다.

<글·백기욱 워치가드코리아 영업팀 차장(kiwook.baek@watchguard.com)>

[정보보호21c (info@boannews.com)]


<저작권자: 보안뉴스(www.boannews.com) 무단전재-재배포금지>