테스트 및 교육 목적으로 다음과 같이 중간자 시나리오를 설정하고 싶습니다.
- 호스트 T는 "복제"할 대상 호스트입니다.
- 호스트 M은 중개자이며 인터페이스
eth0
M 은 을 통해eth1
네트워크에 연결됩니다 .eth0
eth1
설정의 요점은 T가 특정 요청(특히 EAPoL을 통한 802.1X 인증)에 응답할 수 있어야 한다는 것입니다. 따라서 M은 T를 인증 오라클로 사용합니다. 특히, 기본적으로 T는 네트워크에 연결하고 802.1X를 통해 인증을 받는 반면 M은 액세스가 거부됩니다. 대조적으로, 사용자는 M에 대한 관리 액세스 권한을 갖고 있지만 T에 대해서는 액세스 권한이 없습니다. 네트워크 진단을 수행할 때 M이 T처럼 보이도록 하고, T는 권한이 부족하여 네트워크 진단을 수행할 수 없도록 하기 위한 것입니다.
두 가지 가능한 방법이 있습니다:
관련 프레임을 앞뒤로 복사하는 프로그램(예: scapy가 있는 Python 또는 libpcap이 있는 C)을 작성합니다.
ebtables
및 을 사용합니다iptables
.
여기서 질문은 간단히 말해서 2가지에 초점을 맞추고 있습니다. 원하는 결과를 얻는 방법은 무엇입니까?
내가 지금까지 시도한 것
첫 번째 단계는 eth0
및를 연결하는 것입니다 eth1
(즉, 에 추가 br0
). ebtables
/ 규칙 이 없으면 iptables
T는 마치 네트워크에 직접 연결된 것처럼 보입니다. 그런 다음 주로 IPv4에서 T를 에뮬레이션하는 데 초점이 맞춰져 있으므로 다음 규칙을 설정했습니다.
ebtables -A FORWARD -p IPv4 -j DROP
이 규칙은 IPv4 트래픽이 브리지를 통과하는 것을 방지합니다. 이제 T를 에뮬레이션하려면 M이 레이어 2와 3에서 일부 NAT를 수행해야 합니다.
# interception of incoming packets for T:
ebtables -t nat -A PREROUTING -i eth0 -p IPv4 -d $TARGET_MAC_ADDR -j dnat --to-destination $MY_ETH0_MAC_ADDR
iptables -t nat -A PREROUTING -i eth0 -d $TARGET_IP4_ADDR -j DNAT --to-destination $MY_ETH0_IP4_ADDR
# spoofing of outgoing packets as coming from T:
ebtables -t nat -A POSTROUTING -o eth0 -p IPv4 -s $MY_ETH0_MAC_ADDR -j snat --to-source $TARGET_MAC_ADDR
iptables -t nat -A POSTROUTING -o eth0 -s $MY_ETH0_IP4_ADDR -j SNAT --to-source $TARGET_IP4_ADDR
내 순진한 생각은 이렇게 해야 한다는 것이었다. 그러나 그것은 진실이 아니다. T를 "연결 해제"하는 것 외에 M은 T와 전혀 다르게 행동합니다. 특히 iptables -t nat -L -v -n
SNAT 규칙은 예상대로 실행되지만 DNAT 규칙은 게으르다(즉, 무슨 일이 일어나도 패킷이 0개임)는 것을 보여줍니다. 내가 여기서 무엇을 놓치고 있는 걸까요?
노트
질문은 다음과 같습니다.이것하지만 설정이 다릅니다.
Rui는 특정 프로토콜이 NAT를 사용할 때 문제가 발생하기 쉽다는 점을 댓글에서 지적했습니다. 라우터가 업스트림 네트워크의 호스트를 가장하는 경우(또는콘 네트워크 주소 변환). 그러나 이것이 요점이 아닙니다. 이 경우 T를 마스킹하면서 M을 T로 위장하기 위해 NAT를 사용합니다. M은 T의 패킷을 삭제합니다(첫 번째 ebtables 규칙 참조).
배경
802.1X(더 정확하게는 802.1X-2010)는 인증만 제공하고 후속 "터널" 보안은 제공하지 않습니다. TLS 핸드셰이크 결과가 NULL 암호화 및 인증인 "요청자" 증명과 같습니다.인증 중정품이지만 인증된 "세션"이 하이재킹될 수 있습니다.
유선 연결에 대한 해결책은 MACsec(802.1X-2014의 일부인 802.1ae라고도 함)입니다. MACsec의 무선 펜던트는 WPA/WPA2입니다. 놀랍게도 가장 저렴한 하드웨어라도 WPA2를 지원할 수 있으며, MACsec을 지원하는 고급 스위치는 MACsec을 지원하지 않는 고급 스위치보다 훨씬 비쌉니다.
무엇보다도 설명된 시나리오는 MACsec이 없는 802.1X가 가치가 없음을 보여줍니다.
답변1
방법 1)을 시도하는 데 동의하시면 방금 EAPOL 프록시 작성을 마쳤습니다(https://github.com/kangtastic/peapod). 원하는 경우 eth0의 MAC 주소를 자동으로 변경하여 대상과 일치하게 할 수도 있지만 수동으로 수행하겠습니다. eth0에 고정 IPv4 주소를 구성하고 연결을 얻을 수 있는 것 같습니다. 내 프록시가 레이어 3 항목을 처리하지 않기 때문에 괜찮습니다. 어쨌든, 귀하의 설명을 토대로 볼 때 귀하의 상황에 적합할 것이라고 확신합니다. 대부분 Python으로 작성된 다른 EAPOL 에이전트도 있는데, 살펴보면 제대로 작동할 수도 있습니다.
EAPOL 신청자가 DHCP를 통해 세션이 시작된 후 IPv4 연결을 얻기 위해 업스트림 네트워크에 "등록"해야 하는 경우 업스트림 네트워크에 특정 호스트 이름, 클라이언트 식별자가 필요한지 여부에 따라 상황이 좀 더 복잡해집니다. DHCP 요청으로 전송되었습니다. 최악의 경우, T의 DHCP 클라이언트와 정확히 동일한 옵션을 보내도록 M의 dhclient를 구성해야 합니다. 짜증나지만, 충분히 끈기 있게 노력한다면 둘 다 똑같이 만들 수 있습니다. 요청자의 MAC를 eth0에 복제하는 것도 도움이 됩니다.
eb/iptables를 사용하여 방법 2)를 선택하는 경우 - 죄송합니다. 별 도움이 되지 않습니다. EAPOL 멀티캐스트 그룹 주소 01-80-C2-00-00-03은 802.1D 호환 브리지에 의해 전달되지 않으므로 기본적으로 EAPOL은 Linux 소프트웨어 브리지에 걸쳐 있지 않습니다. 이 문제에 대한 해결책은 다음과 같습니다.
echo 8 > /sys/class/net/brX/bridge/group_fwd_mask
(왜 8이고 다른 값은 없나요? 왜냐하면https://interestingtraffic.nl/2017/11/21/an-oddly-special-post-about-group_fwd_mask/)
T가 브리지를 통해 인증하도록 하므로 이미 알고 있지만 다른 사람들은 그렇지 않을 수도 있습니다 :)
답변2
중개인을 본 적이 있나요?https://github.com/mitmproxy/mitmproxy? 그것은 당신이 요청하는 모든 것을 할 것입니다.
wget https://github.com/mitmproxy/mitmproxy/releases/download/v2.0.2/mitmproxy-2.0.2-linux.tar.gz
또는 PIP(Picture in Picture)를 사용하세요.
pip3 install mitmproxy
그런 다음 실행하십시오.
./mitmproxy --host
브라우저에서 프록시를 구성하면 원하는 모든 트래픽을 중개할 것입니다.