PoisonTap - 잠긴 컴퓨터에서 쿠키를 빼내고, 내부 라우터를 노출하며, 웹 백도어를 설치합니다
제작: @SamyKamkar || https://samy.pl
잠겨 있거나 비밀번호로 보호된 컴퓨터에 PoisonTap (Raspberry Pi Zero 및 Node.js)을 연결하면 다음과 같은 동작을 수행합니다:
- USB(또는 Thunderbolt)를 통해 이더넷 장치를 에뮬레이션합니다
- (낮은 우선순위/알려지지 않은 네트워크 인터페이스임에도 불구하고) 머신의 모든 인터넷 트래픽을 하이재킹합니다
- Alexa 상위 1,000,000개 웹사이트에 대한 웹 브라우저의 HTTP 쿠키와 세션을 빼내어 저장합니다
- 아웃바운드 WebSocket과 DNS 리바인딩을 통해 내부 라우터를 공격자에게 노출하여 원격으로 접근 가능하게 만듭니다 (리바인딩 아이디어는 Matt Austin에게 감사합니다!)
- 수십만 개의 도메인과 일반적인 Javascript CDN URL에 대해 HTTP 캐시에 지속적인 웹 기반 백도어를 설치하며, 캐시 포이즈닝을 통해 사용자의 쿠키에 모두 접근할 수 있습니다
- 공격자가 원격으로 사용자가 HTTP 요청을 보내도록 강제하고, 백도어가 설치된 모든 도메인에서 사용자의 쿠키를 사용하여 응답(GET 및 POST)을 프록시로 되돌려 받을 수 있습니다
- 머신이 잠금 해제되어 있을 필요가 없습니다
- 장치가 제거되고 공격자가 유유히 사라진 이후에도 백도어와 원격 접근이 지속됩니다

(Ara의 놀라운 HTML5 canvas 애니메이션)
PoisonTap은 다음 보안 메커니즘을 우회합니다:
데모
PoisonTap은 $5 Raspberry Pi Zero용으로 제작되었으며, 마이크로 USB 케이블 및 microSD 카드 외에는 추가 구성 요소가 필요 없습니다. 또한 이더넷-USB/Thunderbolt 동글을 사용하여 모든 Raspberry Pi(1/2/3)에서 작동할 수 있으며, USB Armory 및 LAN Turtle과 같이 USB 가젯을 에뮬레이션할 수 있는 다른 장치에서도 작동할 수 있습니다.
라이브 데모 및 자세한 내용은 영상에서 확인할 수 있습니다:

연락처: @SamyKamkar // https://samy.pl
출시일: 2016년 11월 16일
소스 코드 및 다운로드: https://github.com/samyk/poisontap
PoisonTap 작동 방식
PoisonTap은 USB/Thunderbolt, DHCP, DNS 및 HTTP를 포함한 머신과 네트워크의 다양한 메커니즘에 대한 기존의 신뢰를 악용하여 연쇄 효과를 만들어냄으로써, 정보 유출, 네트워크 접근 및 반영구적 백도어 설치의 눈덩이 효과를 일으킵니다.

간단히 말하면 PoisonTap은 다음을 수행합니다:
네트워크 하이재킹
- 공격자는 (무기화된 Raspberry Pi Zero와 같은) PoisonTap을 잠긴 컴퓨터(비밀번호로 보호된 컴퓨터라도)에 연결합니다
- PoisonTap은 이더넷 장치(예: USB/Thunderbolt를 통한 이더넷)를 에뮬레이션합니다. 기본적으로 Windows, OS X 및 Linux는 이더넷 장치를 인식하여 낮은 우선순위의 네트워크 장치로 자동 로드하고, 머신이 잠겨 있거나 비밀번호로 보호된 경우에도 이를 통해 DHCP 요청을 수행합니다
- PoisonTap은 DHCP 요청에 응답하여 머신에 IP 주소를 제공하지만, DHCP 응답은 작은 서브넷(예: 192.168.0.0 - 192.168.0.255)이 아니라 전체 IPv4 공간(0.0.0.0 - 255.255.255.255)이 PoisonTap의 로컬 네트워크의 일부라고 머신에 알리도록 제작됩니다
- 일반적으로 보조 네트워크 장치가 머신에 연결되는 것은 무관합니다. 기존(신뢰된) 네트워크 장치보다 낮은 우선순위가 부여되고 인터넷 트래픽의 게이트웨이를 대체하지 않기 때문입니다. 하지만...
- "인터넷 트래픽"보다 "LAN 트래픽"의 우선순위로 인해 모든 라우팅 테이블/게이트웨이 우선순위/네트워크 인터페이스 서비스 순서 보안은 우회됩니다
- PoisonTap은 낮은 우선순위 네트워크 장치일지라도 이 네트워크 접근을 악용합니다. 왜냐하면 낮은 우선순위 네트워크 장치의 서브넷은 가장 높은 우선순위 네트워크 장치의 게이트웨이(기본 경로)보다 높은 우선순위가 부여되기 때문입니다
- 즉, 트래픽이 1.2.3.4로 향하는 경우, 일반적으로 이 트래픽은 기본(비-PoisonTap) 네트워크 장치의 기본 경로/게이트웨이에 도달하지만, PoisonTap의 "로컬" 네트워크/서브넷이 1.2.3.4 및 존재하는 모든 다른 IP 주소를 포함하는 것으로 간주되므로 PoisonTap이 실제로 트래픽을 받게 됩니다 ;)
- 이로 인해 머신이 더 높은 우선순위와 올바른 게이트웨이(실제 wifi, 이더넷 등)를 가진 다른 네트워크 장치에 연결되어 있음에도 불구하고 모든 인터넷 트래픽이 PoisonTap을 통해 흐릅니다

쿠키 사이펀
- 웹 브라우저가 백그라운드에서 실행 중인 한, 열려 있는 페이지 중 하나가 AJAX 또는 동적 스크립트/iframe 태그를 통해 백그라운드에서 HTTP 요청을 수행할 가능성이 높습니다(예: 새 광고를 로드하거나, 분석 플랫폼에 데이터를 보내거나, 단순히 사용자의 웹 이동을 추적하기 위해)
- 직접 확인할 수 있습니다. devtools/inspector(일반적으로 Cmd+Shift+I 또는 Ctrl+Shift+I)를 열고, 방문 빈도가 높은 웹사이트로 이동한 후 Network 탭을 클릭하면, 페이지에서 아무런 조작을 하지 않아도 원격 리소스에 계속 접근되는 것을 볼 수 있습니다
- 이 HTTP 요청 시 모든 트래픽이 PoisonTap 장치로 나가기 때문에 PoisonTap은 즉석에서 DNS 스푸핑을 수행하여 자신의 주소를 반환하고, HTTP 요청이 PoisonTap 웹 서버(Node.js)에 도달하게 합니다
- DNS 서버가 PoisonTap이 권한을 얻을 수 없는 내부 IP(LAN)를 가리키는 경우에도 공격은 계속 작동합니다. 내부 DNS 서버가 공격 대상의 다양한 도메인에 대한 공용 IP 주소를 생성하고, PoisonTap이 이미 하이재킹한 것은 바로 그 공용 IP 주소이기 때문입니다
- 내부 DNS 서버가 응답하면 웹 브라우저는 공용 IP에 도달하고, 결국 어느 시나리오에서든 PoisonTap 웹 서버(Node.js)에 도달하게 됩니다
- Node 웹 서버가 요청을 수신하면 PoisonTap은 HTML 또는 Javascript로 해석될 수 있는 응답으로 응답하며, 둘 다 제대로 실행됩니다(많은 웹사이트가 백그라운드 요청에서 HTML 또는 JS를 로드합니다)
- HTML/JS에 구애받지 않는 페이지는 많은 숨겨진 iframe을 생성하며, 각 iframe은 서로 다른 Alexa 상위 1백만 도메인에 걸쳐 있습니다
- 이제 PoisonTap이 HTTP 서버가 되어 클라이언트에 보낼 헤더를 선택하므로 도메인의 "X-Frame-Options" 보안은 우회됩니다
- 사이트에 대한 모든 iframe HTTP 요청이 이루어지면(예: http://nfl.com/PoisonTap), HTTP 쿠키가 브라우저에서 PoisonTap이 하이재킹한 "공용 IP"로 전송되고, PoisonTap은 이를 신속히 기록하여 수만 개의 사용자 쿠키를 PoisonTap에 로깅합니다
- 도메인 자체에서 Javascript가 실행되지 않고 처음에 iframe을 로드하는 데만 사용되므로 "HttpOnly" 쿠키 보안은 우회되고 해당 쿠키도 캡처됩니다
- 접근 중인 도메인이 브라우저에 정상적으로 보이므로 교차 출처 리소스 공유 또는 동일 출처 정책 보안은 우회됩니다
- 자격 증명이 아닌 쿠키를 캡처하므로, 공격자가 쿠키를 사용하여 로그인할 때 사이트에 구현된 2FA/MFA는 우회됩니다. 실제로 로그인 기능을 수행하는 것이 아니라 이미 로그인된 세션을 계속 사용하는 것이기 때문에 2단계 인증이 트리거되지 않습니다
- 서버가 HTTPS를 사용하지만 쿠키가 Secure 쿠키 플래그를 명시적으로 설정하지 않은 경우, HTTPS 보호는 우회되고 쿠키는 PoisonTap으로 전송됩니다

원격으로 접근 가능한 웹 기반 백도어