질문&답변
클라우드/리눅스에 관한 질문과 답변을 주고 받는 곳입니다.
리눅스 분류

해킹이온지요????????

작성자 정보

  • 시삽 작성
  • 작성일

컨텐츠 정보

본문

먼저 관련 문서를 보내 드립니다.

저가 보기에는 행킹이아닌것 갔습니다.

이문서를 참조 하시고 업데이트 하시길.....  

 

5. SYN Flooding 공격

Denial of Service의 일종으로 TCP 연결시의 Half-Open을 이용하여 TCP 연결을 방해하는 공격이다. 이 문서에서는 SYN 공격에 대하여 알아보고, 그 공격의 자세한 시나리오와 피해 정도, 그리고 알아내는 방법 및 그 대응책까지 알아본다. 그리고, 대응책 중에 하나인 RealSecure라는 패키지에 대해서도 설명한다.

5.1 개요

5.1.1 TCP(Transimission Control Protocol) 연결

SYN Flooding 공격은 TCP 자체의 결함을 이용한다. 그래서, SYN Flooding 공격을 이해하려면 TCP에 대하여 조금 알아볼 필요가 있다. 그래서 TCP가 무엇이고, TCP의 연결과정에 대하여 알아보도록 하자. TCP는 Transimission Control Protocol의 약자로서 패킷을 이용하여 통신을 하는 컴퓨터 네트워크에서 호스트간의 믿을 수 있는 통신을 하도록 도와주는 프로토콜이다. TCP는 Connection-Oriented, End-to-End Reliable 프로토콜로서 IP(Internet Protocol)의 상위 계층에서 동작하도록 되어 있다.5.1

TCP에서 서버와 클라이언트의 접속은 정해진 규칙에 의해서 진행된다. 연결을 원하는 클라이언트는 먼저 서버에게 패킷을 보내는데, SYN 플래그를 셋(Set)하여 서버에게 보내어서 서버와의 연결을 시도한다. 그러면 서버에서는 받았다는 의미로 SYN-ACK 플래그를 셋한 패킷을 클라이언트에게 보낸다. 이때, 서버의 상태를 Half-Open이라 한다. 클라이언트는 다시 이 패킷을 서버로부터 받았다는 것을 서버에게 확인시켜주기 위해서 ACK 플래그를 셋한 패킷을 서버에게 보내고, 서버는 이 패킷을 받음으로써 TCP 연결은 완성된다. 이 다음부터는 정해진 Sequence 숫자를 증가시켜가면서 특정 데이타를 주고 받는다. 이를 `Three Way Hand Shaking'이라한다.

-----------------------------------------
  Client                       Server
  ------                       ------
   SYN    ------------------>
          <------------------  SYN-ACK
   ACK    ------------------>
          Client and Server can now 
          send service-specific data.
-----------------------------------------

5.1.2 문제 발생 원인

문제가 될 수 있는 것은 Half-Open 상태이다. 만약 클라이언트가 마지막 ACK를 보내지 않는다면, 서버에서는 Half-Open 상태에서 계속 머무르게 된다(물론 Timeout이 있으므로 무한정 있는 것은 아니다). 이 상태의 서버에서는 TCP 연결을 위해서 자신의 메모리에 데이타를 주고 받거나 연결 상태를 유지하기 위한 데이타 영역을 확보한다. 그런데, Half-Open 상태가 계속 발생하게 된다면 결국 메모리는 모자를 것이고, 서버 시스템에서는 다음 부터 오는 모든 TCP 연결 요청을 거부하게 된다.

이 경우 새로 요청되는 클라이언트로 부터의 연결만 문제가 있을 뿐이지 이미 만들어진 TCP 연결이나, 나가는 패킷에는 영향을 주지 못한다. 그러나, 어떤 경우에는 메모리의 부족이 시스템 크래쉬(crash)나, 시스템이 오작동하도록 만들기도 한다.

5.2 공격과 피해

공격은 IP 주소를 속임으로써5.2쉽게 할 수 있다. 거짓된 IP 주소를 가진 임의의 패킷을 만들어서 보내면, 서버에서는 클라이언트의 ACK 패킷을 받을 방법이 없어진다. 공격을 한 시스템에서 임의로 ACK 패킷을 보내주지 않는 한 공격받은 시스템은 Half-Open 상태로 계속 유지될 것이다. 물론, Timeout이 있어서 일정시간이 지나고 나면 할당된 메모리는 원상태로 돌아온다. 그러나, 이 Timeout이 발생하기 전에 많은 양의 패킷을 보내서 Half-Open 상태의 TCP 연결을 가득 만들어 두는 것이 이 공격의 특징이다.

이 공격으로 인해서 직접적으로 피해를 받는 것은 아니다. 그러나, 이 공격이 IP spoofing 공격을 위한 바탕이 되고, 특정 중요한 서비스를 방해 할 수 있기 때문에, 경우에 따라서는 엄청난 피해를 입을 수도 있다.

5.3 알아내는 방법

실제로 시스템을 사용하고 있는 사람은 아무런 서비스의 제약을 느끼지 못하는 경우가 많다. 그도 그럴 것이, 특별한 경우가 아니고서는 들어오는 새로운 TCP 연결에만 영향을 주기 때문에, 그 시스템에서 사용중인 사람이 알아차리기란 결코 쉬운 일이 아니다. 그러나, 방법은 있다.

Half-Open 상태를 알아내는 방법은 다음과 같다.

-----------------------------------------------------------------------------
% netstat -a -f inet 
Active Internet connections (including servers)
Proto Recv-Q Send-Q  Local Address          Foreign Address        (state)
...
tcp        0      0  *.exec                 *.*                    LISTEN
tcp        0      0  *.login                *.*                    LISTEN
tcp        0      0  *.shell                *.*                    LISTEN
tcp        0      0  *.6000                 *.*                    LISTEN
tcp        0      0  *.telnet               *.*                    LISTEN
...
-----------------------------------------------------------------------------

위에서 상태(state)가 SYN_RECEIVED인것이 많으면, 공격당하고 있을 가능성이 있다.

5.4 방어

대응책으로는, 먼저 TCP 연결을 위한 큐의 부족으로 인한 것이므로 이 큐를 늘려 주면 된다. 큐를 늘려 주는 방법은 대부분의 시스템에서는 커널을 새로 컴파일 하는 방법이나 커널의 설정을 바꿔주는 방법(on Solaris5.3, NT)이 있다. 그러나, 각 벤더에 연락해서 알아보는 것이 추천할 만한 방법이다.

참고로 각 시스템마다 허용되는 최대 연결의 갯수는 다음과 같다.

운영체제 Version 기본값 변경 가능 여부
Solaris 2.5 1025 가능
Windows NT ALL 110 변경 불가능
Solaris 2.4 32 가능
Solaris 2.0-2.3 8 가능
SunOS ALL 8 가능
Linux ALL 5 가능

그 밖의 방법으로는 다음과 같은 것들이 있다.

5.4.1 패킷 필터링

외부에서 들어오는 패킷중에서 내부 주소를 가지고 들어오는 패킷을 막는 필터를 라우터에 설치한다. 이것이 완벽하게 IP 주소가 위조된 패킷을 막을 수는 없을 지라도 감소시킬 수는 있다.

5.4.2 방화벽의 설치

요즘 Denial of Service에 대한 공격에 관심이 많아지고 있고, 또 이를 알아내고 알려주는 기능을 가진 방화벽 제품들이 많이 나오고 있다. 이를 이용하여 SYN Flooding 공격을 감지하여 막는 방법도 있다. 새로 나오는 운영체제5.4는 SYN Flooding 공격을 막아주는 기능을 지원하기도 한다.



Footnotes

... 있다.5.1
참고로, ISO(International Standards Organization)에서 제정한 OSI(Open Systems Interconnection) 참조 모형(Reference Model)은 네트워크 구조를 7개의 계층으로 나누고 있다. 이 7개의 계층중에 Transport 계층이 TCP가 속하는 계층이라고 생각하면 된다.
... 속임으로써5.2
IP spoofing
... Solaris5.3
ndd -set /dev/tcp tcp_conn_req_max 1024
... 운영체제5.4
예: FreeBSD, BSDI

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,035 명
  • 현재 강좌수 :  35,798 개
  • 현재 접속자 :  114 명