해킹 또한 네트워크에서 일어나는 일이기에 네트워크를 다루면서 빼놓을 수 없는 분야 중 하나이다. 해킹이나 보안과 관련된 이야기를 할 때 단골 메뉴로 등장하는 사례가 바로 2003년 1월 25일의 인터넷 대란이다. 해킹이나 크래킹이라고 불리는 기법들이 ‘서버’에 집중되었던 기존 공격과는 다르게 DNS서버나 코어 라우터를 직접 공격해서 서비스망을 다운시키는 DDos가 최초로 매스컴을 탄 사건이기에 네트워크 관리자들에게는 더욱 의미가 깊은 사건이다. 그 후로부터 3년… 과연 이런 공격들이 어떤 것인지 어떻게 하면 방어할 수 있는지 등에 대해 알아보자.
필자의 학창시절 인터넷을 하기 위해서는 가장 먼저 윈도우 3.1을 띄워야 했다. 여기에다 일명 ‘트럼펫 윈속’이라는 소켓을 사용하여 TCP/IP를 올린 후 브라우저를 사용하거나 텔넷, FTP로 해외 대학 등의 자료실을 뒤지곤 했었다.
당시만 해도 인터넷을 사용하는 사람이라곤 전산이나 전자 계열을 전공으로 하는 공대생이 주를 이뤘다. 그나마 PC통신이라도 즐길 줄 안다면 신세대로 통하던 시절이었다.
필자가 대학 3년생일 때 학교에 도입된 초고속 인터넷(그래봐야 지금 가정에 들어오는 홈 랜보다도 보잘 것 없는 속도였지만)은 필자를 눈부신 인터넷 세상으로 이끌었다. 당시로서는 상상하기조차 어렵던 2Mbps의 통신 속도는 엄청난 변화였다. 불과 8년 전의 일인데 이제는 무선 인터넷도 100Mbps의 속도를 돌파한 지 오래다.

<그림 1>을 자세히 보면 서로 통신하는 과정에서 Seq 값이 증가되는 것을 확인할 수 있다. <화면 1>은 필자의 집에서 사용하는 D사 인터넷 게이트웨이로 텔넷을 시도하여 얻은 결과 화면이다.
96년 첫 직장에 입사한 필자가 담당한 업무는 시스템 관리였다. 당시만 해도 ‘네트워크 관리자’라는 직업은 없던 시절이었다. 네트워크라고 해봐야 전기 팀에서 케이블이나 깔아주는 정도가 고작이었다. 전기 팀에서 네트워크 연결을 해 주면 전산실은 시스템 관리와 프로그램 개발 등을 주 업무로 담당했다. 신입인 나에게 떨어진 업무는 인터넷 관련 장비 관리. 각종 더미 허브들과 라우터, 그리고 방화벽 등의 장비를 관리하는 일이었다. 거대한 망이나 중요 시설에만 사용되던 이 방화벽은 불과 2~3년 사이에 인터넷에 있어서 방화벽은 떼려야 뗄 수 없는 장비로 인식되었다. 방화벽이 일반화 되면서 피해를 본 쪽은 IPS 같은 보안장비들이었다. 방화벽이 있으니 IPS 같은 장비는 사치라는 인식이 일반화 되었던 것이다. 그렇다보니 네트워크는 방화벽에서 바로 라우터로 연결되는 구조를 갖추게 되었다. 이 위험천만한 구조를 무너뜨리고 우리나라의 보안의식에 일침을 놓은 사건이 바로 1.25 대란이었다. 소 잃고 외양간 고친다고 했던가. 뭐 어쨌든 소를 더 잃기 전에 고치기라도 한다면 다행한 일일 것이다. 일단 사고가 터지고 그 피해의 심각성을 직접 겪은 기업들은 앞다퉈 고성능 코어 라우터에 방화벽을 이, 삼중으로 깔고 IDS/IPS 설치하게 되었다. 심지어는 그것으로도 부족하여 Qos 장비를 두어 대역폭 관리까지 하는 곳도 적지 않았다. 필자는 주로 대학 캠퍼스 망을 많이 관리한다. 대학의 코어 스위치나 라우터의 구성(Configuration)을 보고 있노라면 머리 아플 때가 한두 번이 아니다. 실제 구성은 몇 줄 안 되지만 대신 엄청난 양의 ACL은 어느 대학 코어 장비에서나 쉽게 발견할 수 있다. ![]() TCP/IP는 태생부터 보안상 취약점을 가지고 있다. 각 벤더가 독자적으로 사용하던 프로토콜과는 달리 오픈되어 있는 개방형이라는 특징 탓에 누구나 볼 수 있고 데이터를 보낼 수도 있도록 개발되었기 때문이다. Dos나 Syn 어택 등은 이러한 점을 악용한 공격 패턴들이다. 여기에서 알아볼 핸드셰이크는 말 그대로 통신하기 전에 ‘서로 통성명’ 하는 방법이다. 다음 시나리오를 보자. 사원1 : “오랜만이다.” 손을 내민다. (Syn) 사원2 : 상대가 손을 내밀었으니 나도 내밀어야겠죠? (Ack) “너도 잘 있었지?” (Syn) 사원1 : 응 (Ack) 이렇게 인사가 끝나야 서로 본격적인 이야기(Data)가 오가게 된다. 앞의 시나리오를 조금 더 전문적으로 풀어서 그리면 <그림 1>과 같이 된다. <그림 1>과 같이 3단계에 의해 핸드셰이크가 발생하는 경우를 3웨이 핸드셰이크라고 부른다. ![]() <그림 1>을 자세히 보면 서로 통신하는 과정에서 Seq 값이 증가되는 것을 확인할 수 있다. <화면 1>은 필자의 집에서 사용하는 D사 인터넷 게이트웨이로 텔넷을 시도하여 얻은 결과 화면이다. ![]() <화면 1>에서 59.186.151.163이 필자 집 PC의 IP 주소이고 59.186.151.129가 게이트웨이다. 이더리얼로 캡처한 <화면 1>에서는 앞서 알아본 3웨이 핸드셰이크를 확인할 수 있다. 문제는 이 핸드셰이크 과정의 어떤 점이 공격 대상이 되는가이다. 그렇다면 위의 핸드셰이크의 어떤 점을 공격을 하는 것일까? Syn Attck이란 말 그대로 Syn을 공격하는 패턴을 말한다. 다음 핸드셰이크 시나리오와 함께 3웨이 핸드셰이크의 취약점을 찾아보자. 직원1이 직원2에게 인사를 한다(Syn). 직원2는 직원1에게 답례(Ack)를 하고 본인도 인사를 한다(Syn) 이러면서 직원2는 직원1이 다시 뭔가 말하길 기다릴 것이다. 바로 이 부분에 핸드셰이크의 약점이 있다. 직원2가 기다리고 있는데 직원1이 아무 말도 없이 가만히 있다면 직원2는 계속 기다린다. 이때, 처음 보는 직원3이 직원 2에게 인사를 한다. 직원2가 답례하려는데 직원4가 직원2에게 또 인사를 한다. 직원2에게 대략 100~1000명이 동시에 이런 방법으로 인사한다면 직원2는 어떻게 될지는 충분히 상상이 될 것이다. 이러한 것이 과거 해킹과 다른 네트워크를 다운시키는 Dos공격이나 Syn 공격의 패턴이다. ![]() Dos 공격이 한 명의 공격자가 다른 한명의 대상을 공격하는 기법이라면 DDos는 여러 명의 공격자가 한명의 대상을 공격하는 기법이다. 1:1이 아닌 1:다수가 되다보니 위력이나 피해 규모가 비교할 수 없이 늘어난다. 미국의 아마존이나 야후가 이 DDos에 의해 시스템이 다운되는 피해를 입는 사례가 있었다. 미리 숙주가 된 여러 개의 시스템이 서버나 코어 라우터에게 거대한 양의 TCP나 UDP 패킷, 혹은 ICMP를 보내게 된다. 코어 라우터는 이것이 ‘정상적인 패킷’이기 때문에 이것에 대한 처리를 하려고 애를 쓰게 되고 결국 오버플로우가 되어 시스템이 마비된다. 서버를 공격하면 해당 서버만 피해를 입지만 코어 라우터를 공격하게 되면 망 전체를 다운시키게 되어 피해 규모가 훨씬 커지게 되는 것이다. ![]() | |||||||||
정책은 방화벽 장비마다 다를 수 있지만 대체적으로 <표 1>와 <표 2>의 구성을 따른다. 먼저 외부로부터 들어오는 패킷 관리 정책인 인바운드 정책을 살펴보자. 1번 정책의 Source address인 Any란 모든 IP 주소를 말한다. 즉 1번 룰은 모든 외부의 IP 에서 내부의 모든 IP로 ICMP 패킷, 즉 핑(Ping)을 허용(Permit) 한다는 정책이다. 다시 말해 누구라도 이 방화벽의 내부 네트워크에 존재하는 서버나 다른 장비들로 핑을 실행하여 결과를 볼 수 있다는 뜻이다. 두 번째 정책은 C 클래스 대역의 IP 주소(192.168.1.0~255)를 갖는 장비들에 한해서 172.23.10.10번 IP로 접속을 허용하는데 이때 80번 포트를 사용하라는 뜻이다. 80번 포트를 사용하는 것으로 보아 172.23.10.10 IP를 사용하는 장비는 웹 서버인 듯하다. 세 번째 정책은 내부와 외부의 모든 IP 및 포트의 접근을 차단한다. 그럼, 아무것도 통과시키지 않겠다는 뜻인데 이 정책이 앞의 두 정책과 충돌하지는 않을까? 다행히 그렇지는 않다. 방화벽의 정책은 먼저 설정한 내용부터 차례로 적용이 된다. <표 1>의 인바운드 정책을 종합하자면 ‘1번과 2번 정책을 만족하지 않는 모든 패킷을 막아라’ 정도로 해석할 수 있다.
|