아쉽게도 제가 필기교재가 없어서 만두님이 말씀하신 필기교재에 어떻게 나와있는지 몰라서 그 내용을 언급하기는 힘들구요..혹시 다른 분들도 궁금하신 분들이 계실까봐 한번 이야기를 풀어볼게요. 내용을 잘 아시는 분들은 굳이 보실 필요가 없을 것 같구요 대충 이해는 가는데 뭔가 원리를 잘모르겠다~~이런 분들은 제 얘기를 함 들어보세요. 원래 사람이 뭔가 좀 이해가 안되는 상태에서 그냥 외우면 계속 찝찝하고 머리속에 잘 남지도 않고 그러잖아요^^ 그런분들을 위한 글입니다. 아 그리고 제가 필기책이 없는건 제가 보던 책을 시험 준비하는 회사동료에게 준 탓에 없는 겁니다.!! 저두 샀어요;;
먼저 위에 3가지 공격은 모두 IP Fragmentation(단편화)의 취약점을 이용한 공격입니다. 그렇다면 IP 단편화가 뭔지 먼저 설명을 해볼게요. 말 그래도 단편화는 IP Packet이 쪼개진다는 의미입니다. 상위 프로토콜(TCP/UDP/ICMP등등)로 부터 전달된 데이터를 IP헤더를 붙어 캡슐화를 하는데 이 데이터(보통 이를 IP Datagram이라 합니다.)를 그냥 하위의 Ethernet 프로토콜(물론 데이터링크 계층의 다른 프로토콜 일수도 있어요!)로 전송하는 것이 아니고 이를 어떠한 기준에 의해서 쪼개서 보내게 됩니다. 그렇다면 왜 쪼개고 그 기준은 뭘까요?
우리가 원거리의 호스트와 통신을 하기 위해서는 여러 네트웍을 거쳐야 합니다. 그 말은 다양한 물리적 네트워크 프로토콜(단적으로 LAN와 WAN의 프로토콜이 서로 다르지요?)을 거쳐서 데이터를 전송해야 한다는 의미인데 이러한 네트워크 프로토콜과 전송매체에 따른 특성으로 인해 하나의 패킷으로 전송할 수 있는 패킷의 크기에 제한이 있습니다. 따라서 패킷이 해당 구간에 적당한 크기라면 그냥 통과하는 것이고 패킷이 너무 크다면 단편화가 발생하는 겁니다. 여기서 포인트! 이렇게 각각의 물리적인 네트워크 프로토콜에 따른 패킷이 가질 수 있는 데이터의 최대크기를 MTU(Maximum Transfer Unit)라고 합니다.
자 이제 정리를 해보면 각 네트워크 구간의 프로토콜에 따라 MTU가 다르기 때문에 IP패킷의 단편화가 발생하고 쪼개지는 단위는 MTU크기에 따라 결정된다고 정리해 볼 수 있습니다. 여기까지 이해되시죠^^?
두번째로 여러분이 이해하셔야 하는 부분은 IP헤더부 중에서 3가지 필드를 이해하셔야 합니다. 첫번째 필드는 fragment id, 두번째 필드는 flags, 세번째는 offset필드입니다. 이 3가지 필드는 IP단편화/재조합(재조합은 수신측에서 단편화된 조각을 모아서 원래의 IP Datagram으로 되돌리는 작업을 말합니다.)을 위해 사용되는 필드로 별로 어렵지 않습니다.^^ id필드는 원본 IP Datagram(단편화 되기 전 상태)을 식별하기 위한 id값이구요 flags는 현재 설명에 필요가 없으므로 생략;; offset은 각 단편들을 조합할 때 필요한 위치값입니다. 가령 150byte의 데이터를 MTU가 100인 구간에 전송을 한다면?
첫번째 단편 : id(10), offset(0) <-100byte데이터를 담고 있는 단편
두번째 단편 : id(10), offset(100) <-나머지 50byte데이터를 담고 있는 단편, 당연히 id는 동일해야겠지요? 이전 데이터가 100byte였기 때문에 두번째 단편의 시작위치가 100이 된겁니다.(시작이 0임)
실제로는 이것보다 좀 더 내용이 들어가지만 우리는 이정도만 이해해도 충분합니다.!!
자 그렇다면 이제 본격적으로 이런 IP 단편화의 취약점을 이용한 공격을 설명해 볼게요.
먼저 Tiny Fragment를 말씀드리면 일단 의미상 작은 단편이라는 의미입니다. 얼마나 작은가하면 데이터는 고사하고 헤더부조차 모두 담지 못하는 매우 작은 단편입니다. 쉽게 말해 정상적으로는 생성될 수 없는 말도 안되는 쓰레기 패킷이죠^^ 그럼 왜 헤더부도 다 담지 못하는 그런 작은 패킷을 공격자가 보낼까요? 그것은 패킷필터링 기반의 침입탐지/차단시스템(firewall,ids,ips등)을 우회해서 내부 시스템에 침입하기 위해서 그렇게 작은 패킷을 만든 겁니다. 원리는 아주 간단합니다. 패킷필터링기반의 보안장비들은 기본적으로 ip/port기반의 접근제어룰에 근거해서 접근차단을 하는데요 이 점을 이용한 겁니다. 첫번째 패킷이 장비로 들어왔는데 보니깐 패킷에 목적지 Port정보가 없는 겁니다. (TCP헤더의 목적지 Port 이전까지 담고있는 패킷이라는 가정) 목적지Port를 보고 필터링 정책을 적용하려 했던 장비는 당황한(?) 나머지 그 패킷을 그냥 통과시키고 그 이후에 들어오는 패킷들은 이미 통과된 IP fragment id를 가지고 있으므로 자연스럽게 통과가 됩니다. 이런식으로 보안장비를 우회해서 내부 시스템에 접근하는 공격기법이 Tiny Fragment입니다. 어렵지 않으시죠^^?
아 그리고 계속 진행하기 전에 먼저 말씀드릴 것은 현재는 이러한 공격이 거의 불가능합니다. 보안장비들의 지능(?)이 높아져서 이런 식의 공격은 다 차단을 하구요 OS또한 이런 공격에 대비한 패치가 되어 있기 때문에 이런 공격들은 고전(?)이라 생각하시면 됩니다. 다만 우리는 시험을 봐야하기 때문에 이런 고전들도 이해하고 있어야겠죠?
아~~ 나머지 이야기는..넘 졸린 관계로 내일 쓰도록 할게요..to be continued
다시 시작합니다.^^ 넘 늦었네요. 그럼 다음으로 fragment overlap에 대해서 말씀드릴게요. 의미상으로 보면 단편(조각)을 중첩한다는 의미입니다. 이미 그 의미속에 모든 것이 들어있는데요. 가령 이런 상황을 생각해 봅시다. 일반적으로 웹서버나 DNS서버 SMTP서버 등은 외부망의 접근을 허용하고 있죠? 당연히 외부에 서비스를 해야하기 때문에 허용을 하는건데요 따라서 80포트 53포트 등은 외부에서 접근이 가능하도록 접근제어를 합니다.
공격자는 이점을 이용해서 해당 시스템에 허용되는 포트(가령 80포트)를 목적지 포트로 가지고 있는 단편(패킷)을 먼저 전송한 후에 침투하고자 하는 내부망의 포트정보를 담은 두번째 단편(패킷)을 전송하는데 offset값을 조작해서 재조합시에 이전 단편(80포트를 목적지로 하는)의 포트부분을 침투하고자 하는 내부망의 포트번호로 덮어쓰도록 합니다. 따라서 결과적으로 재조합이 되어 완성된 IP Datagram은 목적지가 80포트가 아닌 공격자가 지정한 포트로 변조된 패킷이 되는 겁니다. 아시겠죠^^? 전혀 어려운 내용이 아니지요? 이 공격기법도 결국은 패킷필터링 기반의 탐지시스템을 우회(회피)하여 내부 서비스에 접근하기 위한 방법입니다.
자 그렇다면 마지막으로 tear drop에 대해서 살펴볼게요. 의미상으로 보면 눈물 방울정도가 되겠는데요. 이름이 참~~멋지지요 ㅋ 이 공격기법은 이전의 공격기법과 달리 시스템의 오류 및 오동작을 유발해서 DoS(정상적인 서비스가 불가능한 상태)상태를 유발하기 위한 공격기법입니다. 그럼 왜 시스템에 오류가 발생하는지 살펴볼까요? 이 녀석은 IP패킷의 여러 단편들의 offset값을 멋대로(?) 조작을 합니다.
가령 이런식을 생각해볼수 있어요. 0 offset에서 100 byte를 보내면 그 다음 단편은 offset 100에서 시작을 해야하는데 만약 그 값을 전혀 엉뚱한 음수의 값으로 보낸다면? 또는 100이 아닌 매우 큰 값을 설정해서 보낸다면? 이를 수신한 타겟 호스트는 매우 당황(?)스럽겠지요? 당황 정도가 아니라 문제가 발생할 수 있습니다. 어떤 문제가 발생하냐 하면, 해당 호스트의 IP모듈에서 단편들을 재조합하기위해 버퍼를 할당하고 메모리복사를 위한 시스템함수들을 수행하는데 만약 그 시스템함수에 취약점이 존재해서 버퍼의 크기와 전달된 단편에 대한 적절한 검증이 이루어지지 않는다면 buffer overflow나 buffer underflow와 같은 memory fault상황이 발생할 수 있습니다. 시스템 메모리 폴트는 더이상의 프로세스 진행이 불가능한 심각한 상황이므로 이를 처리하던 IP모듈의 비정상적인 종료가 발생하고 따라서 그 이후의 요청처리가 불가능한 상황이 발생합니다. 자 이제 tear drop 공격의 의미를 아시겠죠? 그 이름처럼 눈물방울이 뚝뚝 떨어지듯이 오프셋을 조작해서 듬성듬성 단편(눈물)들을 만들어서 공격하는 기법이라고 요약할수 있겠네요. 휴~~~ 이제 설명 끝 ^^ 첨에도 말씀드렸지만 이러한 공격들은 지금은 거의 안통합니다. 대부분 이런 공격에 대한 면역성을 가지고 있기 때문에 아~~~~주 오래된 패치도 한번 안한 시스템이 있다면 통할지도 모르겠지만. ㅋ 고전적인 공격기법으로 이런것들도 있었구나~~하는 정도로 보시면 됩니다.
나름 재미있게 정리해 본건데 재미있었나요? 반응좋으면 후속글도 써 볼까요;;;; 열공하세요..화팅!!
첫댓글 다음 내용은 언제 올려주시나요? 궁금해요.
에고 쓴다고 해놓고 ..오늘내로 마무리할게요