본론에 앞서,

인터넷에서 돌아다니다 보면 종종 'TCP 동시 접속 수 제한 해제 패치' 등의 이름으로 개조된 TCP 드라이버와 레지스트리 값 변경 방법이 올라와 있는 걸 발견 할 수 있다.

특히나, P2P 프로그램에 관련되어서, '이 패치를 하지 않으면 기타 네트워크 작업에 매우 느려진다'라고 하면서 이 패치를 적용할 것을 권장하고 있다.

분명 패치를 하기 전에는 P2P 프로그램이 작동 중일 때, 다른 네트워크 작업이 현저하게 느려졌다가, 패치 적용 후에 다시 원래의 속도로 돌아오는 것을 발견할 수 있지만, 여기에는 심각한 오류가 있다.

보통 위와 같은 패치를 배포할 때의 부가 설명은 다음과 비슷하다.

Windows XP SP2 이후부터는 TCP의 동시 접속 수가 10개 이하로 제한되어 있다

그러나 역으로, 정말로 10개 이하라면, 10개 이상의 연결은 만들 수 없다는 것인데, 그럼 이것은 동시에 10개 이상의 컴퓨터로의 연결이 불가능 하다는 명제도 성립하게 된다. 하지만 10개 이상의 컴퓨터로 연결할 수 있지 않은가!


TCP의 연결 과정

오류를 짚기에 앞서 먼저 TCP의 연결의 성립 절차에 대해서 알아보도록 한다.

TCP는 3 Way Handshaking이라는 이름의, 3단계의 연결 절차를 밟아야한다.

1단계 : 클라이언트는 서버에게 접속을 요청하는 SYN 패킷을 보내고 클라이언트는 서버로부터의 SYN/ACK 패킷을 기다리는 SYN_SENT 상태가 된다.

2단계 : 클라이언트로부터 SYN을 받은 서버는 SYN/ACK 패킷을 보내고 SYN_RECEIVED 상태가 된다.

3단계 : 서버로부터 SYN/ACK을 받고 클라이언트는 ACK를 보냄으로써 양쪽의 상태가 ESTABLISHED가 되고 이로써 연결이 성립이 된다.


TCP 연결 과정의 취약점

그러나, 여기서 주목해야할 점은, 서버측의 SYN_RECEIVED 상태다. 이 상태는 클라이언트의 접속 요구를 받아 클라이언트에게 응답하였지만, 아직 클라이언트로부터의 응답을 받지 못한 상태다. 따라서 열려 있긴 하지만, 반쯤 열려있다는 뜻에서 'Half-open connection'이라고 부른다.

만약에, 클라이언트가 계속해서 SYN만 보내고 ACK를 보내지 않는다면 어떻게 될까?

이렇게 되면 서버에는 SYN_RECEIVED 상태인 Half-open 연결이 계속해서 생길 것이고, 결국엔 서버의 백로그 큐가 차고 넘쳐서 결국엔 그 포트로 들어오는 어떠한 연결도 받아들일 수 없게 되는 것(DoS:Denial of Service)이다.

이를 TCP SYN Flooding(흘러 넘치는) 공격이라고 한다.

따라서 이와 같은 취약점을 노린 공격을 막고자, MS에서는 Windows XP SP2 이후의 운영체제는 모두 Half-open 연결의 제한을 10개 이하로 제한하였다.


그러면 도대체 무엇이 문제란 말인가?

간단하다. P2P 프로그램의 경우에는 상당히 많은 피어들과 수많은 연결이 새로이 생성되고 사라지곤 한다. 안타깝게도, 대부분의 P2P 프로그램들은 전지구적인 범위로 연결되기 때문에, 피어간의 연결이 바로바로 성립되리란 보장이 없다. 따라서 3 Way Handshaking을 모두 마치지 않은 연결들, 즉 Half-open 연결들의 수가 10개를 쉽게 넘어버리게 되고, 이렇게 되면 웹서핑 등과 같은 다른 네트워크 작업에서의 연결 요청이, 기존의 Half-open 연결들이 Handshaking을 마치고 연결이 되든지 제한시간을 만료해서 접속 종료가 되어, 새로운 Half-open 연결을 생성할 수 있을 때까지 무한 대기 하게 되는 것이다.

따라서 흔히 접하게 되는 위와 같은 패치는, 동시 접속 수 제한 해제 패치가 아니라, Half-open 연결 수 제한 해제 패치인 것이다.


맺으며,

그렇다면, 왜 이와 같은 오류가 발생했을까?

비록 인터넷이란 공간이 누구에게나 다 열려있어서 누구든지 쉽게 정보를 접할 수 있고, 거꾸로 재생산이 가능하다. 정보의 접근이 용이하다는 장점도 있지만, 거짓되거나, 와전되고, 누락되는 정보가 너무나도 쉽게, 그것도 매우 빠른 속도로 퍼져나간다는 크나큰 단점 또한 있다. 분명 이 패치 또한 처음에는 Half-open 연결 수 제한 해제 패치라는 이름으로 공개가 되었을 것이지만, 일부 무지한 누리꾼들이 Half-open 연결을 이해하지 못하고 멋대로 동시 제한 수 제한으로 받아들여 이를 왜곡되게 배포한 것으로 보인다.

우리는 반드시 인터넷으로부터 얻은 정보에 대해서 무조건적인 수용, 그리고 재전송에 대한 무책임감을 지양해야할 것이다.

크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
2008/05/07 22:33 2008/05/07 22:33
TAG

Trackbas address :: http://jkherald.com/trackback/286



19