IT

마그마그 2010. 9. 30. 14:11

7월 7일 이후, 신문이나 방송을 통해 포털이나 커뮤니티 등 주요 사이트가 DDoS(분산서비스거부) 공격을 받아 수 일째 정상적인 서비스를 제공하지 못하고 일명 좀비PC의 하드디스크가 파괴되는 사례가 발생했다는 등의 소식을 누구나 접했을 것이다. 이는 이른바 ‘사이버 조폭’ 이라 불리는 DDoS공격이 이제 더 이상 먼 남의 집 불구경이 아니라는 것을 실감케 하는 대표적인 사례다. 그 동안 일부 특정 사이트에 대해서만 행해지던 DDoS 공격은 최근에는 사업자 규모, 업종을 가릴 것 없이 무차별적으로 이뤄지면서 그 피해규모는 날로 커지고 있다. 더욱이 우려되는 것은 경쟁업체 등에 대한 청부 공격인데, 이를 공개적으로 광고하는 등 날로 그 수법이 대담해지고 있다는 점이다. 인터넷 비즈니스를 운영한다면 누구나 피해자가 될 수 있는 DDoS 공격. 최근 대표적 유형이 무엇인지 미리 알아두고 공격에 대비하는 것이 최선의 방책이 될 것이다.

홍석범 Sukbum.Hong@cdnetworks.co.kr|현 씨디네트웍스 시스템팀 팀장으로 재직 중이다. 서버, 네트워크 관리 및 보안 관련 국내 최고의 전문가로 평가 받고 있으며 2004년에는 정보보호에 기여한 공고를 인정받아 정보문화의 달 기념 정보통신부장관 표창을 받았다.

DDoS 공격의 양상은 뚫는 자와 막는 자의 끊임없는 싸움으로 인해 지속적으로 진화하고 있다. 2007년 초, 정상적인 상황에서는 절대 발생할 수 없는 수준, 즉 초당 수십~수백만 개의 패킷이 유입(inbound)되는 대량 패킷(pps) 공격, 수백Mbps~수Gbps의 대량 트래픽을 발송해 대역폭을 가득차게 해 버리는 대역폭(bps) 공격이 발생하였을 때만 해도 이전에는 경험해보지 못한  패턴에 어떻게 해야 할지 몰라 대부분 제대로 대응 한번 못해보고 공격자에게 굴복하거나 타협할 수밖에 없었다. 심지어는 피해자임에도 불구하고, 마치 범죄자인양 IDC(인터넷데이터센터)에서 쫓겨나거나 서비스를 중단할 수밖에 없는 일이 벌어지기도 했다. 

2008년이 되면서 KISA등 정부에서도 적극적으로 대응하고 민간에서도 그 위험성에 대해 공감대가 형성되면서 이러한 공격에 대해 보다 적극적인 대응 움직임이 보여지기 시작했는데, 그 대표적인 것이 IPS, 웹 방화벽 이후의 새로운 패러다임이 된 Anti-DDoS 장비의 대중화다.

Anti-DDoS 장비는 수 천만 원을 호가하는 고가 장비이기는 하지만 기존의 대량 패킷 공격이나 각종 변형 공격을 자동으로 차단하는 등 일정 정도 만족할만한 결과를 보여주었다. 또, KT등 일부 ISP(인터넷 서비스 제공자)는 무료백신을 배포하거나 과도한 패킷에 대해 말단에서부터 필터링을 하는 등 적극적인 대응책을 실시하기도 했다. 이러한 대응책으로 가시적인 성과가 보이자 실제로 DDoS 공격이 한 동안은 소강상태를 보여 진정 국면으로 들어서는 듯 했다. 그러나 얼마 후 공격자들은 기존 일부 Anti-DDoS 장비를 우회할 수 있는 새로운 공격 기법을 이용하기 시작하며 점차 변종 DDoS 공격이 이뤄는 등의 형태를 보였다.

대표적인 것이 트래픽(bps)은 거의 유발하지 않으면서도 정상적인 웹 접속과 유사하게 그러나 php나 asp등 사이트 내 다이내믹 콘텐츠(Dynamic Contents)에 대해 집중적으로 많은 접속을 함으로써 웹과 DB 서버의 과부하를 유발하는 ‘GET Flooding 공격’이 그것이다. 또한, Anti-DDos보안 장비가 연결된 회선의 대역폭을 초과하는 수십Gbps 수준의 대규모 트래픽 공격도 흔히 발생하고 있다. 그렇다면 최근 가장 위협적이면서도 대표적인 두 공격으로부터 발생할 수 있는 피해를 최소화할 수 있는 방법은 어떤 것이 있을까. 

먼저, GET Flooding에 대해서는 이 공격의 특징을 역으로 활용하면 해결책을 찾을 수 있다.

GET Flooding은 첫째, tcp 3 way handshake를 맺어야 하므로 공격에 사용된 소스IP는 절대 위조되지 않고 둘째, php나 asp등 DB와 통신하는 다이내믹 콘텐츠에 대해서만 공격하며 셋째, 공격 효과를 높이기 위해 짧은 시간 동안 동일 URL에 대해 반복적으로 접속한다는 특징이 있다.

이 3가지 특징을 활용해, 공격 대상이 되는 웹 서버 또는 캐시 서버의 로그를 cron등으로 자동 모니터링 하다가 일정 시간(예: 5분) 동안에 동일 IP에서 동일URL(예: asp 나 php)을 대상으로 임계치(예: 10회) 이상 접속이 일어나면 로그에서 해당 접속 IP 목록을 추출하고 이를 방화벽이나 iptables와 같은 툴로 자동 차단하도록 설정하는 방법이 있다. 앞에서 언급한대로 공격 IP는 정상적인 접속이 아니라 gif나 jpg등 이미지나 js나 css등 static contents에 대한 접속은 전혀 없으므로 이러한 특징을 잘 활용해 정상 접속자가 차단되지 않도록 주의해야 한다. 

다소 번거롭지만 이러한 방식으로 대응할 경우, 최소한 공격 발생 후 수 분 안에는 공격 차단이 가능하며 같은 원리로 GET Flooding외에 CC attack 등 각종 변형된 공격도 방어할 수 있다.
또한 수십Gbps를 초과하는 대규모 트래픽 공격에 대해서는 기업의 네트워크가 대부분 1~2Gbps 이하이고 아무리 고가의 보안 장비를 투입해도 회선 대역폭을 초과하는 공격이 들어오면 무용지물이 되기 쉽다. 이럴 경우에는 일차적으로 네트워크 모니터링 체계를 구축하고 수십Gbps 이상 고용량의 대역폭을 제공해 주는 서비스를 임시로 이용하는 방법을 고려할 수 있다.

흔히 ‘네트워크 모니터링’ 이라 하면 mrtg를 이용한 in/out 트래픽을 모니터링 하는 것으로 알고 있으나 짧은 시간에 대량의 트래픽이 유입될 경우 공격 트래픽의 특성을 빨리 파악해야 신속하게 대처할 수 있는데, 기존의 mrtg로는 대량의 트래픽이 유입된다는 것만 알 수 있을 뿐 트래픽의 특성(tcp인지 udp인지, 포트번호는 무엇인지 등) 과 공격대상(소스IP,목적지IP)이 어디인지  알 수 없는 한계가 있다. 이럴 때는 netflow 혹은 sflow등을 도입하여 운영하는 것이 좋다.

<화면 2>에서는 평균적으로 8G 정도의 outbound  트래픽이 유발되는 네트워크에서 DDos 공격으로 인해 간헐적으로 10G가까운 inbound 트래픽이 유발되는 것을 보여주고 있다. 그러나 이 정보만으로는 공격 유형이 무엇인지, 대상IP가 무엇인지 알 수 없다.

반면 <화면 3>을 보면 2G 정도의 UDP Flooding 이 유입되고 있음을 직관적으로 알 수 있으며 netflow에서 제공되는 다른 그래프를 보면 포트 번호도 즉시 알아낼 수 있다.

또한 로그도 함께 제공하는데, 이를 이용하면 아래와 같이 소스IP, 목적지IP, 패킷의 종류등도 즉시 확인할 수 있다.

#flowdumper -se ‘17 == $protocol’ flow_file
2009/07/10 19:56:15 58.145.23.190.1559 → 114.111.xx.xx.80 17 64 256512
2009/07/10 19:56:15 116.122.176.72.3350 → 114.111.xx.xx.80 17 64 256512
2009/07/10 19:56:15 122.128.130.138.4967 → 114.111.xx.xx.80 17 64 256512
2009/07/10 19:56:15 211.34.130.254.28405 → 114.111.xx.xx.80 17 64 256512
2009/07/10 19:56:15 59.30.19.13.42347 → 114.111.xx.xx.80 17 64 256512
2009/07/10     19:56:15  219.251.188.136.4746 → 114.111.xx.xx.80     17    64  256512

특히 이러한 기능은 별도의 비용을 들일 필요 없이 최근의 장비에서 대부분 기본적으로 지원하는 경우가 많으므로 경제적이면서도 효율적인 모니터링 체계를 구축할 수 있다는 장점이 있다. 그렇다면 이러한 네트워크 모니터링 체계를 통해, 어떻게 대응할 수 있을까?

DDoS 공격에 사용되는 고용량의 트래픽 공격은 프로토콜의 특성상 TCP가 아닌 UDP나 ICMP기반으로 공격을 하므로, IDC나 ISP에서 협조한다면 특정 IP에 대해 백본에서 UDP/ICMP 필터링을 요청하는 방법이 있다. 대부분의 공격이 웹서버를 대상으로 발생하고 있고 일반적으로 DNS외에는 UDP를 사용할 경우가 없으므로 서비스에는 영향이 없을 것이다.

만약 ISP/IDC의 협조가 쉽지 않다면 고용량의 대역폭을 확보하여 서비스하는 CDN(콘텐츠 전송 네트워크)서비스를 고려해볼 수 있겠다. CDN업체에서는 고성능의 캐시 서버를 이용해 공격 트래픽을 우회할 수 있으므로, DDoS 공격을 받아도 물리적으로 서버를 옮기지 않고 단지 DNS에서 IP만 변경해 주면 즉시 서비스를 이용할 수 있게 하는 등, 빠르고 편리하면서도 가장 효과적인 대응방법 중 하나로 꼽힌다. 또한 이 서비스는 캐시서버만 외부에 노출될 뿐 웹 서버 IP정보를 외부에 노출하지 않고도 CDN망인 캐시서버 앞 단에서 공격 트래픽을 받아 필터링 한 후 정상적인 접속만 웹 서버로 전달 받을 수 있어 더욱 안전하다.

<그림 2>를 통해 예를 들어보자. 원래 www.example.com 도메인으로 4.4.4.4로 운영 중 공격을 받아 서비스가 중지되었다면, 내부적으로 웹서버의 IP를 1.1.1.1로 변경하고 (IDC에서 차단되지 않았다면 변경하지 않아도 되며 이 IP는 캐시서버에서만 알 뿐 외부에 노출되지 않는다) DNS에서는 외부에 노출되는 도메인의 IP를 캐시서버인 3.3.3.3과 2.2.2.2로 변경하도록 한다. 캐시서버에서는 static contents에 대해서는 즉시 응답하고 dynamic contents에 대해서만 원래의 1.1.1.1 로 투명하게 포워딩하여 처리하게 된다. 대부분 CDN업체에서는 IDC별로 수십Gbps의 대역폭을 확보하고 있으므로 안정적인 대응이 가능하게 된다.

뿐만 아니라, 한 단계 진보된 방식 중 하나로, CDN의 핵심 기술인 GLB(Global Load Balancing, 글로벌 로드 밸런싱)를 함께 이용할 경우 여러 ISP, 여러 국가에 캐시 서버를 다중 분산 서비스 하여 트래픽을 분산할 수 있으므로 어떠한 공격도 방어할 수 있는 가장 확실한 대응방안이 될 수 있다. 이것이 그간 인터넷 콘텐츠의 빠르고 안정적인 전송에만 활용되는 것으로 여겨지던 CDN이 최근 DDoS 공격에 대한 훌륭한 해결책으로 각광받고 있는 이유이다.

물론 이 같은 방법들만으로는 DDoS공격으로 인한 문제가 모두 해결될 수는 없다. ‘궁극적인 해결’이란 무엇보다 다음에 제시하는 삼박자가 일치되어야 가능한 일이다. 먼저 각 개인은 자신의 PC가 자신도 모르는 사이 공격자의 좀비가 되지 않도록 백신 소프트웨어 이용의 생활화, 보안패치의 생활화를 통해 보안 관리가 철저히 이뤄져야 한다. 또, ISP는 예산을 추가 투입하여 망의 말단에서부터 유해 트래픽을 탐지하고 차단할 수 있는 시스템을 구축해야 한다. 더 나아가 국가는 사이버 조폭이 활개 칠 수 없도록 더욱 적극적이고 실질적인 정책과 집행을 강화해야 할 것이다. 그렇게 했을 때만이 보다 건강한 인프라 환경을 만들어 나갈 수 있으며 그렇지 않으면 지난 1.25 및 7.7 때의 악몽과 같이 결국 그 피해는 각기 다른 형태로 고스란히 우리 모두의 몫으로 돌아올 수 있다는 것을 명심해야 한다.