이메일을 적으시면 보안관련 소식을 받을수 있습니다.
이메일:
항공대가 24일 오후두시부터 실시간 검색어 1위를 차지하는 일이 벌어졌다.
이날은 수강신청 날이어서 나도 수강신청을 하기위해 접속하다가 안되기에 학교에 전화를 걸어보았다.
서버가 다운돼서 전부가 접속을 못하고 있다고 하였다. 속으로 한번에 애들 많이 몰리고 전공만 신청하는 날이라
학교에서 또 우습게 보고 트래픽허용량 조금만 열어놓아서 DDOS 맞은것처럼 서버 죽은거구만 하고 혀를 차고 있었는데


오늘 학교와서 다시 확인해보니 공지에 뜬건 그것이 아니었다 Sync Flooding 공격을 당한 것이였다 오쉣...


내가 예전에 배운것으로서는 Sync Flooding 은 DDoS 가아닌 DoS 공격으로 알고 있다.
DDoS 앞에 D가 하나가 더 붙은것은 Distributed 을 의미한다 분산처리를 의미하는 뜻인데 둘의 기본원리는 비슷하다.
서버가 허용하는 용량의 데이터나 패킷 또는 처리할수 있는 트래픽량을 초과하는 정보를 전송하여
서버에 과부하를 초래함으로써 결국에 다운을 시켜버리는 간단하면서도 쉬운공격이다.

그렇다면 이 둘의 차이점은 무엇인가?? DDoS 의 경우 중앙의 C&C 센터를 가지고 있고 공격자는 직접공격이 아닌
소위 말하는 좀비PC 들을 양성하고(악성코드등의방법) IRC 서버를 통하여 그 좀비PC들과 통신을 함으로써 공격명령을 하달하여
공격목표가 되는 서버를 공격하는 것이다. 그래서 분산이란 말이 덧붙게된것이다.

DDoS의 개념

하지만 DoS의 경우에는 여러개의 좀비PC가 아니라 공격자의 PC로 직접 공격을 행하는 행위를 말하는 것이라 알고있다.
이번에 학교에서 당한 SynFlooding 공격의 경우는 서버의 허용트래픽량을 초과하야 다운시키는것이 아니라
TCP 소켓의 취약접을 이용한 공격형태이다. TCP 를통한 통신이 이루어지기 전에는 3 Way handshaking 이라는 사전정의된
과정이 서버와 클라이언트간에 수행되어져야 한다.

1단계.  A 클라이언트는 B 서버에 접속을 요청하는 SYN 패킷을 전송한다.
2단계.  B 서버는 요청을 받고 A 클라이언트에게 요청을 수락한다는  SYN,ACK 패킷을 발송한다.
3단계.  A 클라이언트는 B 서버에게 ACK 를 보내고 이후 연결이 이루어지고 데이터가 교환되기 시작한다.

바로 이과정의 취약점을 이용하는것인데 서버B는 2단계때 SYN,ACK패킷을 발송한후 공격자 A로부터 다시 ACK
패킷을 받기위한 Half Open 상태로 전환이 이루어진후 75초동안 응답이없으면 요청을 초기화해버리게 되는데
초기화 시키기전에 Backlog Queue 라는 공간에 요청을 저장하고 있다. 이때 공격자 A가 초기화시키기전에
계속해서 새로운 접속요청을 하게되면 요청을 초기화하는데 걸리는 시간보다 새로운 요청을 Backlog Queue에 
저장하는데 걸리는 시간이 더 짧아지게되어 Backlog Queue에 저장되는 용량이 넘쳐 오버플로우가 일어나
결국엔 시스템이 다운되고 마는것이다. 쉬운그림을 생각하자면 바가지를 수도꼭지밑에놓고 물을 조금씩 흐르게
방치하다보면 결국 바가지의 물이 넘쳐 흐르는것을 생각하시면 되겠다. DoS공격의 무서운점은
나도 모르는사이에 공격을 당한다는 것이다. 계속해서 소량의 접속요청패킷만 보내는것이고
대부분 또 IP를 위조하여 요청을 하기때문이기도 하거니와 소량의요청을보내는 특성상 서버에 과부하나
별다른 징후를 못느끼는 것이기 때문이다.

이 공격을 확인하고 방어하기 위한 방법은 다음과 같다.
확인 방법으로는 초당 접속요청패킷수(Packet per Second)를 모니터링을 하는것과
netstat -an 으로 State를 살펴봄으로써 어느정도 확인이 가능하다.(SYN_SENT와 SYN_RECV 확인)
SENT의 경우가 많으면 웜에의한 내부공격일 가능성이 높고 RECV가 많으면 외부로부터 공격이 들어오는
경우라 할 수 있다.(전자의 경우 서버에서 보내는것이 많으므로 내부공격이라 추정
후자의 경우는 외부에서 받은것이 많으므로 외부공격이라추정)
단 주의할점은 네트워크 장애나 동접자수가 많을 때에도 같은 증상이 나타날수가있다.
여기서 내가 다니는 학교의 SynFlooding 원인을 찾아볼수가 있다. 악의적인 공격일 가능성을 배제할수 없지만
어제는 전공과목만 신청하는 날이어서 접속요청이 많지 않을 것으로 생각하고 저장공간 할당등을 조금만
해놓았을 가능성이 있다. 그렇기에 두시가 되자마자 동시에 몇천명이 서버에 접속요청을 하게되고
순식간에 BacklogQueue에 오버플로우가 발생하게 되었을 가능성이 높다.

해결방법으로는 가장 쉬운 저장공간을 늘리는 방법이 있다. BacklogQueue의 용량을 넘으면 발생하는
특성상 용량이 커지면 그만큼 오버플로우할 위험도 줄어드는것이다.
두번째로는 Syncookie 기능을 사용하는 방법이 있고 세번째로는 우리학교가 썼던 방법으로
공격을 당한 TCP 포트가 아닌 가른 포트로 연결을 돌리는 방법도 있다하겠다.
이번 수강신청을 계기로 짜증은 났지만 보안에 대한 공부를 할 수 있었던 기회였고, 기초적인 대비가
가장 중요하다는 사실 그리고 보안이 우리 생활과 정말 밀접하다는 것을 다시한번 느낄 수 있었다.

이포스팅은 호환의IT이야기(http://tigernet.tistory.com)에 공동기재되고 있습니다.

- 안녕하세요 호환입니다. 상기포스팅은 수강신청을 진행하면서 실제있었던 일과 느낀점을 일기형식으로 쓰다가
   포스팅을 한것입니다. 어투나 어감이 거슬리시더라도 너그러이....굽신굽신...
****************************************************************************************************

본 포스팅의 저작권은 보안인닷컴과 작성자에 있으며 상업적 이용을 배제하며 콘텐츠 이용시에는 반드시 출처와 링크를 이용해 주시기 바랍니다. 무단도용은 저작권법에 저촉을 받습니다..

****************************************************************************************************

Posted by 53PE
,