핵심요약: sslsplit의 인터페이스 미러링을 사용하여 이 작업을 거의 수행할 수 있을 것 같지만 미러링된 인터페이스에서 sslsplit이 보낸 ARP 요청에 커널이 응답하지 않는 문제에 직면했습니다.
내 컴퓨터에서 실행 중인 프로그램에서 SSL/TLS 연결을 가로채서 Wireshark에서 해독된 콘텐츠를 보고 싶습니다. sslsplit의 인터페이스 미러링이 저에게 딱 필요한 것 같아서 계속해서 설정해 보았습니다.
이 명령은 미러링 없이 가로채기를 올바르게 설정하고 표준 출력에 일부 정보만 인쇄합니다.
sudo sslsplit -D -l /dev/stdout -c ca.crt -k ca.key tcp 192.168.10.1 9090 ssl 192.168.10.1 9091
192.168.10.0/24
veth 링크의 서브넷입니다. veth의 한쪽 끝을 새 네트워크 네임스페이스에 배치하고 다른 쪽 끝을 해당 네임스페이스의 기본 경로로 설정했습니다. 편집 2: 즉, 저는 다음을 수행했습니다.
ip link add veth0a type veth peer veth0b
ip address add 192.168.10.1/24 dev veth0a
ip netns add sslsplitns
ip link set veth0b netns sslsplitns
ip netns exec sslsplitns ip address add 192.168.10.2/24 dev veth0b
ip link set veth0a up
ip netns exec sslsplitns ip link set veth0b up
ip netns exec sslsplitns ip route add default via 192.168.10.1
ip netns exec sslsplitns $cmd
아이디어 는 해당 네트워크 네임스페이스(예: . sslsplit은 NAT 엔진을 사용하여 작동하기 때문에 이 설정이 필요하다는 것을 알게 되었는데, INPUT 체인을 거치지 않으면 패킷을 수신할 수 없는 것 같습니다.
아무튼 네트워크 미러링을 사용하려면 당연히 미러링하고 싶은 인터페이스를 선택해야 합니다 -I
. 그러나 sslsplit은 다음 -I
에 의존 한다고 말합니다 -T
.
-T 주소-I로 지정된 인터페이스의 대상 주소 addr에 대한 시뮬레이션된 패킷으로 연결 내용을 미러링합니다. 현재는 IPv4 대상 주소만 지원됩니다. SSLsplit이 미러 지원 없이 구축된 경우에는 이 옵션을 사용할 수 없습니다.
편집 4: 이것은 내가 1.2.3.4에 대해 HTTPS 요청을 하면 sslsplit가 이 옵션에 제공하는 모든 것에 대해 동등한 HTTP 요청을 할 것이라는 의미인 것 같습니다. 누군가 내가 이것을 잘못 이해했다면 수정해 주세요. 이것이 어떻게 작동하는지 완전히 확신할 수 없기 때문입니다. sslsplit은 제공된 이 주소를 원본 및 대상 IP로 사용할 수 있습니까? 실제로 듣고 있는 동안 다른 프로그램이 이러한 미러링된 패킷을 수신하지 못하도록 보장합니까? sslsplit에 실제 물리적 링크와 다른 물리적 시스템의 IP를 제공하면 이 미러링은 어떻게 작동합니까? 이러한 미러링된 패킷은 실제로 Wireshark 또는 tcpdump와 같은 도구로 검사하는 것이 아니라 수신되도록 되어 있습니까?
그래서 나는 더미 인터페이스( ip link add dummy0 type dummy
)를 만들고 여기에 주소를 부여한 다음 그 주소를 sslplit의 -T
.
편집: 명령은 다음과 같습니다.
sudo sslsplit -D -l /dev/stdout -T 192.168.12.2 -I veth1a -c ca.crt -k ca.key tcp 192.168.10.1 9090 ssl 192.168.10.1 9091
Wireshark를 통해 해독된 SSL 패킷을 볼 준비를 하는 동안 sslsplit가 내가 제공한 IP 주소에 대한 하드웨어 주소를 쿼리하기 위해 ARP 요청을 보내는 것을 보았습니다. 여러 시도 끝에 sslsplit
그는 결국 이 메시지를 남기고 사망했다 failed to lookup target ether
. 어쩌면 보낸 주소와 동일하기 때문에 커널이 응답하지 않을 수도 있으므로 진지하게 받아들이기에는 너무 어리석은 일이라고 생각했습니다. 그래서 동일한 /24 서브넷의 양쪽 끝에 서로 다른 주소를 가진 또 다른 veth 링크를 생성하고 그 중 하나를 sslsplit에 공급했습니다 -T
. 다른 주소를 올바르게 사용하여 하드웨어 주소를 제공한 IP를 ARP 쿼리했지만 커널은 여전히 응답하지 않습니다. ARP 요청에.
ARP 와 sysctl
관련된 모든 옵션을 활성화하려고 시도했으며rp_filter
이 답변.
그런데 다양한 프로그램이 SSLKEYLOGFILE
Wireshark에서 해독된 SSL을 찾기 위해 환경 변수를 사용하는 것을 지원하는 것으로 알고 있지만 연결을 가로채고 싶은 프로그램은 해당 환경 변수를 지원하지 않습니다.
다음은 ARP 요청이 포함된 Wireshark의 사진입니다. 이것이 실패하면 SSDP 패킷도 표시되지만 그것이 무엇인지 전혀 모르고 관련성이 없어 보입니다.
편집 3: 기록을 위해 ip link
커널이 응답해야 하는 이더넷 주소를 보여주는 일부 출력은 다음과 같습니다.
46: veth1b@veth1a: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
link/ether 4a:36:55:f8:e1:d2 brd ff:ff:ff:ff:ff:ff
답변1
나는 당신의 문제를 해결할 수 없지만 조금이라도 도움이 되기를 바랍니다.
아시다시피 미러링에는 매개변수 -I
및 가 필요합니다. -T
매개변수는 -I
분석기(미러링된 패킷을 캡처하는 노드)로 사용되는 인터페이스를 지정하고, 매개변수는 -T
미러링된 데이터 대상의 IPv4 주소를 지정합니다.
SSLsplit은 실제로 제공된 인터페이스와 IPv4 주소에서 MAC 주소(L2 헤더)를 확인합니다. SSLsplit은 인터페이스에서 소스 MAC 주소를 조회한 다음 대상 IPv4 주소에 대한 인터페이스에서 ARP 요청을 보냅니다. SSLsplit은 대상 MAC 주소가 포함된 ARP 응답을 기다려 모든 주소가 패킷을 채울 수 있도록 합니다.
SSLsplit 가상 인터페이스를 제공하는 경우 대상 MAC 주소를 확인할 수 없습니다. 그렇기 때문에 당신은 그것을 가지고 있습니다 failed to lookup target ether
.
-X
이런 경우에는 .pcap
매개 변수를 사용하여 트래픽을 파일에 기록하고 문제를 해결할 필요가 없는 것이 더 좋지 않을까요?