프로그래밍/jpcap programming

스위치 해킹- macflooding

dp. 2011. 7. 22. 18:52
스위치 해킹 
작성자 : 유창훈
스위치 해킹을 하려면 당연히 스위치의 보안취약점을 알아야 합니다. 
기본적인 스위치에 대한 것은 알고 있다고 생각하고 글을 쓰겠습니다. 


오늘은 스위치 의 취약점 중 하나인  mac flooding에 관해 알아보도록 하겠습니다. 

1. mac flooding
허브에서 스위치로 넘어오면서 가장눈에 띄게 달라진점은 스위치의 각 포트들은 독립적으로 자신의 대역폭을 보장받고 독립적으로 통신하게 끔 되었다는 것입니다. 네트워크 대역폭이 shared가 아니라 dedicated가 되었다는 것이고 스니핑이 짜증나졌다는것이죠. 허브땐 그냥 허브에 연결되어있으면 그냥 스니핑되었는데, 스위치는 스위치 안에 포트별 맥주소가 맵핑되어있는  mac table을 가지고있어, 이 table을 기준으로 데이터를 전달합니다. 다른 포트로의 포워딩을 막게끔되었습니다.

따라서 스니핑을 위해서 mac table을 무력화시켜야합니다. 같은네트웍인데 스위치에 달려있다고 스니핑 못하면 억울하니까요.  
그래서 나온방법이 mac flooding입니다. mac table의 용량 한계를 넘기도록 많은 mac주소를 발생시켜서 mac table이 뻗어버리게 합니다. 그럼 스위치가 허브처럼됩니다. 공격포인트는 바로 스위치가 가진 mac table 을 계속 채워서 더이상 mac table의 저장공간이 부족하게 끔 만드는 것입니다.  그러면 더이상 특정 포트로만 패킷을 포워딩하지 않고 모든 포트로 패킷을 포워딩 하게 됩니다. 
간단하지요???

리눅스에 macof라는 툴이 있습니다. 명령어도 간단하게 macof인데요 . 듣보잡 tcp패킷 막만들어서  ethernet해더에 source 와 destination 주소에 아무맥주소나 막집어넣어서 내보냅니다.   그냥 묻고따지고 그런 거 없이내보내기만 합니다. 
어떻게하든 스위치에만 전달되면 되는 것이니까요. 


웃긴건 그래도 IP header에 tcp 틀 까지는 붙였다는 것입니다. 의문점은 ip header에 꼭 ip주소까지 다 셋팅해서 보내야 스위치에서 mac table에 등록하는것인가 하는 점입니다. 뭐 해보진 않았지만 ARP 인사 패킷이나, 좀더 줄일 수 있는 방법이 없나 테스트 해봐야겠습니다. 
여튼, 요런 식으로 맥주소를 막 바꿔가면서 스위치로 보내면, 스위치가 뻗어서 스위치 역할을 못한다는 것이지요. 

이건 굳이 소스 구현하지 않겠습니다. 너무 간단한거라, ..

이러한 공격에 대한 방어법으로는 스위치에서 다음과 같은 셋팅을 해 놓는 겁니다. 
1. 해당포트를 스테틱하게 지정해놓기 :  근데 이건 서버측 과같은 잘 안바뀌는 맥주소에다가 지정해놓습니다
2. 포트별로 mac 주소 할당가능한 갯수 지정해놓기, 

위와 같이 셋팅을 해 놓게 되면 공격이 들어왔거나, 맥주소가 바뀌었을때, 포트가 다운되게 됩니다. 관리자가 up시키지 전까지는 계속 다운상태입니다. 

따라서 환경에 따라 다르게 셋팅하여야합니다. 무조건 한개의 포트 와 하나의 맥주소는 바른정책이라고 할 수 없습니다.