spoofing을 src == dst 이렇게 한 경우, 테스트
IP spoofing 에 관해 테스트 중입니다.
환경은 이렇습니다.
1. PC + Ubuntu(virtual box)
2. target board(android 9.0)
target에는 wifi hotspot이 있어서(유선은 없습니다) 켜두고 윈도우PC에서 wifi로 target의 hotspot에
연결하면 Ubuntu와 target 사이에 192.168.5.x 망 으로 연결됩니다.
Ubuntu에서:
hping3 192.168.5.1 -S -a 192.168.5.1
위와같이 src IP를 dst와 같게 spoofing 하여 target(192.168.5.1)으로 쏩니다.
target에서:
iptables -N LOGTEST
iptables -A LOGTEST -j LOG --log-prefix "[firewall]"
iptables -A INPUT -j LOGTEST
(모든 INPUT 패킷을 다 로그에 남겨라) 해놓고,
또한
tcpdump -nni wlan0
이렇게 관찰하면, spoofing한 패킷이 tcpdump상에서는 유입되는게 보입니다.
(tcpdump는 INPUT체인 보다 더 전단계인건 알고있습니다)
그러나 iptables log에는 모든게 다 로깅되어야 하는데 src가 192.168.5.1 인것은 안보입니다.
그래서 spoofing을 src = 192.168.5.99 이렇게 해보면 iptables log에 나옵니다.
즉, src == dst 인것만 iptables 에 아무 조치도 안했음에도 INPUT 체인을 통과하지 못하고 있습니다.
왜 이럴까요? 어느놈이 저 패킷을 거르는 걸까요?
윈도우 방화벽에서 거르나 싶어서 방화벽도 꺼봤으나, 마찬가지고
target에도 저 로깅하는 rule 외엔 어떠한 iptables 룰도 더 이상 없는거도 확인했습니다.
src IP가 될수없는 알려진 IP대역들 은 kernel어디선가 자동으로 처리해버리는 걸까요?
일단 이유를 알고 싶구요.
이단으로는, src=dst 인 패킷을 거르는 iptables rule을 추가후 그게 먹힌다는걸 보여주는
테스트 과정을 만들어야하는데, 문제네요.
도와주세요
말씀하신것을 보았을 때에는 일단 nat테이블의
말씀하신것을 보았을 때에는 일단 nat테이블의 PREROUTING 체인에서 packet count가 늘어나는지 확인할 필요가 있어 보입니다.
이런것들의 설정이 필요하지 않을까요?
이런것들의 설정이 필요하지 않을까요?
http://faq.hostway.co.kr/Linux_ETC/7986
리눅스 커널 L3스택에서 해당 패킷을 버려요
리눅스 커널에 fib_validate_source 함수가 있는데, 해당 함수는 source IP address를 검사해요
source IP가 잘못된 경우 패킷을 조용히 DROP해요.
해당 함수는 당연히 라우팅 루틴에서 수행되기 때문에 INPUT hook으로 가기전에 패킷을 버려요
그래서 INPUT chain에서는 확인하실 수 없어요
iptables -t raw -I PREROUTING -s 192.168.5.1로 하면 보일거에요
taw 테이블의 PREROUTING hook은 L3 라우팅이 수행되기 전에 수행되기 때문에 원하는 LOG가 잡혀요.
그리고, rpfilter(reverse path filter)기능에 대해서도 한번 확인해보세요
sysctl net.ipv4.conf.<인터페이스 이름>.rp_filter
댓글 달기