선관위 DDoS 공격, 진실은 저 너머에 - 기술적인 분석

(아래 주장에 대한 업데이트 글은 http://parkscom.tistory.com/1167111276 "선관위 DDoS 기술적 분석(2)-사실과 논란의 정리"를 참조하시라.)

이번 선관위 DDoS 공격 사태. 초유의 사태이기는 하지만. 엔지니어로서 몇가지 분석을 좀 해보자.
음모론 등은 모두 때려치우고, 순수하게 기술적으로 발생할 수 있는 일들. 알려진 정보와 경험에 바탕한 내용들.

1. 이번 공격은 정밀 타겟 공격이었는가?
이번 공격을 두고, 특정 페이지만을 공격한 정밀 타겟 공격이고, 이렇게 수행할 수 있는 사람들은 매우 전문가들 밖에 없다고 한다. 또, 2580에서는 이러한 사례가 없을 정도이며, 고급툴이 필요하다고 한다.

하지만. 알려진 정보를 확인해보면 "http://barryspost.net/post/2519" www (선관위 메인 페이지)와 info(투표소 알림 페이지)가 분리되어 있었다고한다. 2개의 도메인은 서로 다른 IP를 소유하고 있어 (글쓰는 현재 시점으로 www.nec.go.kr은 210.204.204.10, info.nec.go.kr은 210.204.204.36으로 되어 있다.) 각각 분리된 서버 또는 네트워크 장비루 운영될 가능성이 높다.

그럼, 해커가 DDoS 공격을 info.nec.go.kr 서버 IP로만 대량 트래픽을 쏘는 방식이었다면 충분히 특정 서비스만 문제를 일으킬 수 있다.

이 가정이 맞다면, 선거 당일 아침 www.nec.go.kr 선관위 페이지는 정상 접속 가능했으나, info.nec.go.kr 투표소 안내 페이지 자체가 안뜨는 경우(브라우저에서 열리지 않는 경우)가 발생 할 수 있다.

** 결론 : 이번 공격은 정밀 타겟이나, 고급 기술을 사용한게 아닐 수 있다. 너무 높은 수준으로 가지 말자.


2. 공격 트래픽의 범위는 어디까지인가?
알려진 자료에 따르면 264MB/S라고 말하는데, 단위가 참 애매하다.
일반인들(또는 기자들)은 잘 구별못하는 단위중에 하나가 바로 네트워크 트래픽의 단위이다. 네트워크 엔지니어들은 주로 단위를 Bit per Sec라고 이야기하고, 단위를 표기할때 보통 bps라고 적는다.
하지만, 일부에서는 단위를 Byte per Sec라는 단위로 트래픽을 이야기하기도 하는데, 이건 실제 전송량을 계산할때 사용할 수 있다. 단위의 표기는 보통 Byte/sec 또는 B/s라고 표시한다.(B는 이경우 대문자를 보통 사용한다.)

하지만, 지금 나온 자료들은 대부분 기자들이 배껴쓰다보니, Byte인지 Bit인지 차이가 나타나지 않는다.

그러나, 이건 매우 중요하다.
254Mbyte/sec일 경우, bit per sec로 변환할 경우 약 2.5Gbps로 표시되며, 이정도라면 서버 3대의 트래픽을 꽉 채울정도로 큰 트래픽이다. 하지만, 264Mbps라고 이야기한다면, 서버 1대에서 처리가능한 트래픽이다.

그리고, 결정적으로 공격 방법이 달라진다!!
2.5Gbps 정도의 공격이라면 200대의 좀비 PC를 이용해서 생성해낼 수 있는 공격 패턴은 UDP Flooding 공격이라는 방식이다.(보통은..)
UDP 공격은 가장 일반적이고 자주 발생하는 패턴이며, IDC 단위에서는 거의 시도때도 없이 발생하는 공격패턴이다. 조금 큰 사이트를 관리하고 있다면 거의 매일 이런 패턴의 공격이감지될 정도이다.

UDP 패턴의 특성은 트래픽을 꽉 채워서 해당 서버에 접속 자체를 불가능하게 만드는 역활을 수행하는데, IPS나 방화벽 등을 통해 방어할 수 없다.
또한, 적은 수의 좀비 PC를 이용해서 사이트를 쉽게 마비 시킬수 있기때문에 가장 빈번하게 동작한다. 약 200대 정도의 PC라면 이정도의 트래픽은 쉽게 만들어 낼 수 있다.
1개의 PC에서 업로드 발생 가능한 트래픽을 10Mbps 정도로 잡는다면, 200대면 2Gbps 정도를 만들어낼 수 있다.

** 이 경우, 나는 꼼수다에서 주장하는 로그 파일의 공개 요청은 아무런 의미가 없다. UDP는 웹서버에 공격 로그가 남지 않는다!! 이걸 감지할 수 있는 가장 좋은 방법은 MRTG라고 불리는 네트워크 트래픽 모니터 그래프이다. 이걸 확인한다면 가장 쉽게 알 수 있다.

** 이 UDP Flooding 공격을 방어하는 가장 좋은 방법은 IDC에서 UDP 트래픽 전체를 잘라주는 방법이다. 그거 이외에는 방법이 없다. 아무리 좋은 IPS가 있다고해도 방어가 불가능하다.
IDC에서는 UDP 절체(Null Routing이라고 부른다.)를 보통 해주려고 하지 않는다. 자신의 백본 장비에 부담이 갈 수 있기 때문이다.

3. 만일, 264Byte/Sec 공격이라면? 어떻게 했을까?
Byte/Sec라고 가정한다면 이제 이야기는 다른 방향으로 돌아간다.
TCP 공격 패턴으로 볼 수 있는데, 이렇게 이야기하는 이유는
- PC 200대를 가지고 UDP 공격을 했는데, 이정도 트래픽이 나왔다면 말이 안되고,
- 서버에서 충분히 대응 가능한 범위의 트래픽이며,
- 좀비 PC에서 TCP를 통해 발생시키는데는 한계가 있다!!

TCP의 경우는 공격을 수행하는 좀비 PC의 네트워크 상태가 아무리 좋아도 전송량(Traffic)를 늘리는 공격은 불가능하다. 왜냐고? TCP는 서버와 클라이언트(PC)의 상호 연결 작용이 있어야 하는데, 서버에서 트래픽을 소화하지 못하면, PC는 트래픽을 보낼 수 없다. 이해를 쉽게 이야기한다면, 웹하드를 사용하는데, 내 PC는 상태가 좋은데 서버쪽이 Busy가 걸리면 다운 받는 속도가 느려진다.

이 TCP 공격을 가징 빈번하게 발생하는 2가지로 이야기 해본다면.

a) Syn Attack(Flooding)과 같은 TCP/IP의 취약점을 이용한 공격
TCP/IP 프로토콜 자체가 보안상 약점을 가지고 있는데, 대표적인 것이 Syn Attack이라고 불리는 방식이다.
클라이언트가 "연결을 요청해놓고(SYN), ACK(받겠습니다.)라는 신호를 무시해버리는 방식"이며, 이렇게 여러 개를 연결해버리면 서버는 네트워크 자원을 고갈하게 된다.
트래픽(bps)는 매우 낮지만, Connection이라고 불리는 놈이 매우 높게 설정된다. 불행하게도  대부분의 OS는 네트워크 자원에 동시 연결 갯수의 제한이라는 한계가 있다.

만일, SYN Attack를 1개의 좀비당 100개 정도만 한다면 약 20만개의 연결이 발생한다. 이 정도면 서버는 100% 죽는다.

** 이 경우 해결 방법은
- 서버 설정에서 SYN Cookie와 같은 방식으로 자체 해결하는 방법(리눅스 커널 패치에 포함됨)
-  IPS라고 불리는 보안 장비에서 사전 차단하는 방식
으로 해결 가능하다.
워낙 오래된 공격 패턴이라 최신의 IPS 장비는 디폴트로 완전하게 막아낼 수 있다!!

** 이 경우도, 마찮가지로 나꼼수에서 제안하는 로그 공개는 의미없다. 어자피 웹서버 가기전에 뻣은 것이다. 체크해야하는 포인트는 IPS와 같은 보안 장비의 운영 실태이다.

b) Slowris라고 불리는 HTTP 취약점 공격
최근에는 이러한 Slowris라는 공격이 더욱 빈번하게 발생하는데, 비슷한 사례가 바로 작는 7.7 대란이라고 불리는 경우이다. 이때 조선일보 등의 연론사와 은행 등에서 당했었는데, 그게 바로 Slowris 공격이다.
자료를 찾아보면 알겠지만, 이때도 공격의 총 트래픽의 량은 크지 않았다. 그런데도 서버가 죽어나기 시작했던 것이다.

이 방식은 HTTP의 Header 전송을 임의로 지연시키는 방식이다.
HTTP는 헤더가 100% 전송이 되어야한 이후의 PHP, JSP 등의 작업이 이루어지게 되는데, 이걸 고의로 지연시키게되면 바로 Slowris 공격이라는 형태로 발생되는 것이다.
Apache는 전세계에서 가장 많이 사용되는 웹 서버인데(약 80% 이상), 이 Apache가 바로 Slowris 공격에는 쥐약이다.

Apache는 1024 정도의 Max Client로 설정되어있는 것이 일반적인데, Slowris 공격으로 발생시킨 1개의 Connection이 1개의 Client로 인식된다. 만일, 1개의 PC가 100개의 Connection을 연결시키면, 10대만 있으면 서버는 죽는것 처럼 보인다.

그런데, 재미있는 사실은 서버를 모니터링 하는 쪽에서는 전혀 징후를 발견하지 못한다는 것이다. CPU나 I/O, 메모리 등은 매우 정상적으로 모니터링 되니까, 실제 접속해보기 전까지는 알 수 없다. 원인을 찾기도 힘들다!!

** Slowris 공격은 최근에 유행하는 방식이지만, 상대적으로 대응이 까다롭다. IPS 중의 일부 제품만 여기에 대응이 가능하며, 많은 장비들이 아직 대응을 못하고 있다고 알고 있다. (이건 보안 제품 만드는 회사에서 들은 정보이다.)
대응할 수 있는 가장 좋은 방법은 nginx와 같은 비동기형 웹서버를 사용하는 것이지만, 선관위는 아마 Apache + JSP(Tocmat) 방식을 사용했을 것으로 예상되므로, Slowris 공격이 발생했다면 속소무책으로 당할 수 밖에 없다.

** 현재 중앙 선관위 서버에 접속해보면, HTTP Response Header에 "Server" 이름이 "Web R105"라고 표시되어 있어서 Apache를 사용하는지 확인할 방법은 없다. 어쩌면 최근에 다른 웹서버로 패치를 했거나 Web 방화벽을 도입했을 수도 있다.


4. 결론
- 이 범죄는 전문가들만 가능한 범죄였나?
아닐 수도 있다. 보도에 나온 것을 보면 "툴을 사용했다." "좀비 PC를 구매했다" 등의 내용이 들리고 있는데, 그렇다면 전형적인 Script Kid라고 불리는 초급 해커들일 수 있다. 알려져있지만, 중국에서는 이런 해킹 툴들을 돈주고 거래한다고 한다.
(하지만, 공격자 입자에서는 나보다는 뛰어난 사람이다.)

** 오바해서 생각하지말자.

- 과연 돈이 많이 들었을까? 장기적인 계획이 있었을까?
 아닐 수도 있다.내가 아는 방법들인데.. 그걸 실행하기 위해서 돈이 많이 들지 않는다. 몇십에서 백만원 단위만 있어도 가능하다. 우발적일 수도 있다.

- 그럼, 왜 일이 이렇게 커졌나?
어쩌면 선관위의 보안 설정에 문제가 있었을 수도 있다. 한번도 공격을 당해보지 않았고, 보안 장비의 도입이 안되어 있어나, 관리자가 모니터링을 못하였을 수도 있다. 
또한, 이런 공격을 당해보지 않았으니, 대처를 하지 못해서 몇 시간을 보냈을 수도 있다.
보안은 기계가 하는 것이 아닌 사람이 하는 것이다. (이것도 보안 장비 업체에서 하는 이야기다.)

- 앞으로 진실을 위해서는 어떤 자료가 필요한가?
 일단, 경찰의 공개적으로 밝힐 수 있는 범위의 수사 보고서 또는 보도자료가 필요하다. 이 보도 자료에는 정확한 트래픽 범위(byte or bit), 사용된 방식(UDP or SYN Attac, Slowris 등), 사용될 툴(또는 대강의 구입 경로) 정도이다.
개인 정보 보호나 기타 악용의 가능성이 없는 기술적 수준의 범위이므로 이정도 공개는 간단할거다.

- 로그 파일이 반드시 필요한가? 
DDoS 공격이라면 어쩌면 로그 파일이 필요 없을 가능성이 높다. 나꼼수에서 요구하는 로그 파일이라는 것이 범위를 적시 하지 않아 대부분 웹서버 로그만 달랑 제공해줄 것 같은데, 많은 공격들은 여기에 로그를 남기기 전에 죽어버린다.
결과적으로, 로그 파일이 있어도 아무 의미 없을 수도 있다!!

** 로그 보다는 서버의 구성 방법, 보안 장비(firewall, IPS 등)의 배치 현황/운영 주체, 네트워크 모니터링 결과 등의 민감하지 않는 정보부터 제공받는 것이 좋다.


** 추가 내용(2011.12.06 01:50)
http://bbs1.agora.media.daum.net/gaia/do/debate/read?bbsId=D101&articleId=3689591에 가보면, MRTG 그래프가 나온다. KT 상무가 공개했다는 내용인대, 결국 UDP 공격으로 볼 수 밖에 없다는게 결론이다.
그럼, 결국 로그 파일을 큰 의미가 사라지고 만다.

또한, 새로운 정보들이 조금씩 더 들어오는데. 추가할 수 있으면 추가해보지뭐.


-------------------------------

다들 너무 음모론으로 가는 것 같은데, 일단 알려진 진실부터 한번 검증해보는 것이 좋을 듯하다. 음모는 음모를 부른다. 거짓은 거짓을 만들어내듯이.
 
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 1 Comment 3

티스토리 툴바