목표
지난 글의 내용을 기반으로 다음과 같이 IDS를 설계하였습니다.
💡 외부 네트워크와 통신하는 패킷의 경우, MAC 주소가 gateway의 MAC 주소인 00:50:56:f1:51:86 가 아니라면 로그를 띄운다
MAC 주소 기반 탐지
00:50:56:f1:51:86
: 게이트웨이의 MAC 주소
- 들어오는 패킷의 경우 source 의 mac주소가
00:50:56:f1:51:86
이 아닌 경우를 기록 - 나가는 패킷의 경우 destination의 mac주소가
00:50:56:f1:51:86
이 아닌 경우를 기록
들어오는 경우
들어오는 패킷의 경우, source 의 MAC주소가 00:50:56:f1:51:86
이 아닌 경우 로그를 띄우도록 하였습니다.
iptables -A INPUT -m mac ! --mac-source 00:50:56:f1:51:86 -j LOG --log-prefix "Incoming Packet: "
아래 사진의 패킷에서 source의 IP주소는 gateway이지만, MAC주소는 Kali의 주소입니다.
외부 웹사이트(44.228.249.3)에서 온 패킷의 MAC주소도 Kali의 MAC주소로 되어있음을 확인할 수 있습니다.
로그는 띄웠지만 패킷을 차단하지 않았기 때문에 여전히 도청이 가능합니다.
만약 ARP스푸핑 공격을 실행하지 않는다면, 아무런 로그도 뜨지 않습니다.
나가는 경우
--mac-destination 옵션은 없기 때문에 외부 네트워크로 나가는 패킷의 로그를 띄우는 룰을 작성하는 것은 어렵다고 판단, 작성하지 않았습니다.
MAC 주소 기반 차단
source 의 MAC주소가 00:50:56:f1:51:86이 아닌 경우 차단하는 룰을 작성해 보았습니다.
iptables -A INPUT -m mac ! --mac-source 00:50:56:f1:51:86 -j DROP
공격을 당하고 있는 상태라면, 외부 네트워크에서 내부로 들어오는 모든 패킷을 차단하기 때문에 심각한 문제를 야기할 수 있습니다. 따라서 차단하는 룰은 작성하지 않는 것이 좋겠다고 판단했습니다.
+ 일시적으로 스푸핑되는 패킷을 차단한 이후, 그 사이에 방어 솔루션을 진행하는 방식으로 사용할 수 있을 것 같습니다.
다른 해결책
ARP 스푸핑 공격을 방지하기 위한 대안들로 다음과 같은 방법들이 있을 것 같습니다.
- 서로 다른 IP주소에 중복된 MAC 주소를 가진 경우가 있는지 분석
- 비정상적인 ARP 패킷을 분석하여 탐지 (필요 이상의 arp reply 패킷 발생)
- ARP 테이블의 게이트웨이의 주소를 Static으로 설정하여 예방 가능
- 인증서를 이용해 패킷 암호화로 도청 방지 (HTTPS)
이러한 대안들 중 ARP 테이블 static 설정 하여 gateway의 MAC주소를 정적으로 설정해보고자 하였지만 성공하지 못하였습니다.
💡 ARP 스푸핑 방어와 관련해 참고해보면 좋을 사이트
후기
이번 학기에 정보보호학과 부전공을 시작하고 처음으로 진행해본 보안 관련 프로젝트였습니다. 주제 선정부터 룰 작성까지 무엇하나 쉬웠던 작업이 없었지만 해킹 자체를 구현하는게 제일 막막하고 어려웠던 것 같습니다.
3주 전까지만 해도 해킹과 보안에 대해 다소 막막한 오해를 가지고 있었던 것 같은데, 이 역시 무지에서 비롯되지 않았나 싶습니다. 프로젝트를 진행하면서 다양한 해킹 기법들에 대해 조사하다 보니 내 생각보다 막막하진 않았지만, 그렇다고 만만하지도 않았습니다. 오히려 심연을 본 기분이랄까...
구글이며 Chat GPT며 어떻게 해킹을 구현해야 하는지 쉽게 알려주지 않다보니 해킹 자체를 구현하는게 시간이 오래 걸리고 어려웠던 것 같습니다. 구현할 능력이 안돼서 프로젝트 초반에 구상했던 해킹 기법도 여러번 갈아엎었고, 결국은 해킹을 구현할 수 있는 주제로 선정하게 되었습니다.
IDPS에 대한 이해가 부족해서 IDPS를 통해 구체적으로 어떤 공격을 막을 수 있는지 감을 잡는 것도 어려웠던 부분이었습니다. 나름 조사한 내용을 기반으로 ARP Spoofing 공격을 iptables나 snort를 사용해서 차단할 수 있다고 생각했는데, 생각보다 쉽지 않았습니다. 오히려 추가 조사하면서 ARP Spoofing의 경우 IDPS보다 직접 ARP 테이블을 정적으로 수정하거나, ARP 응답을 제한하는 방법 등이 더 적합하다는 것을 알게 되었습니다.