'스푸퍼 없이' SSL 스트리핑 옵션 사용하기

Beginner
지금 연습하기

소개

SSL 스트리핑 (SSL stripping) 은 사용자가 HTTPS 를 통해 안전하게 웹사이트에 연결하려고 했음에도 불구하고, 웹 브라우저가 암호화되지 않은 HTTP 연결을 사용하도록 강제하는 중간자 공격 (Man-in-the-Middle, MITM) 의 한 유형입니다. 이를 통해 공격자는 사용자와 웹사이트 간의 모든 트래픽을 가로채고 읽을 수 있습니다.

이 실습에서는 Wifiphisher 도구를 사용하여 SSL 스트리핑 공격을 수행합니다. 특히, 가짜 SSL 인증서를 사용하지 않고 트래픽을 가로채고 수정하는 '스푸퍼 없이 (Without a spoofer)' 옵션을 탐색합니다. 이 실습은 통제되고 안전한 환경에서 이러한 공격의 작동 방식을 이해하는 데 도움이 될 것입니다.

캡티브 포털 공격 시작하기

이 단계에서는 Wifiphisher 도구를 실행하여 가짜 액세스 포인트 (AP) 를 생성하고 캡티브 포털 공격을 시작합니다. LabEx 가상 환경에는 물리적인 무선 카드가 없으므로, 공격을 시뮬레이션하기 위해 특정 옵션을 사용할 것입니다.

먼저 터미널을 엽니다. 네트워크 인터페이스 및 서비스를 관리하기 위해 관리자 권한이 필요하므로 sudo를 사용하여 wifiphisher를 실행할 것입니다. 실제 WiFi 네트워크를 방해하려는 시도를 방지하기 위해 --nojamming 옵션을 사용하고, 가짜 네트워크의 이름을 지정하기 위해 --essid "Free WiFi"를 사용합니다. 또한 캡티브 포털 시나리오를 지정해야 합니다. 여기서는 firmware-upgrade를 사용합니다.

터미널에서 다음 명령을 실행합니다:

sudo wifiphisher --nojamming --essid "Free WiFi" -p firmware-upgrade

명령을 실행한 후 Wifiphisher 가 시작됩니다. 네트워크 인터페이스를 자동으로 감지합니다. AP 인터페이스와 NAT 인터페이스를 선택하라는 메시지가 표시될 수 있습니다. 두 프롬프트 모두에서 일반적으로 기본 선택 사항인 eth0을 수락하기 위해 Enter를 누르면 됩니다.

도구가 초기화되면서 다음과 유사한 출력이 표시됩니다:

[*] Starting Wifiphisher 1.4GIT ( https://wifiphisher.org ) at 2023-10-27 10:00
[+] Timezone detected. Setting channel hopping to the appropriate regulatory domain.
[+] Selecting eth0 for the AP interface.
[+] Selecting eth0 for the Internet-connected interface.
...

SSL 관련 프롬프트에서 '스푸퍼 없이 (Without a spoofer)' 옵션 선택하기

이 단계에서는 공격을 위한 SSL 스트리핑 방법을 구성합니다. 초기 설정 후, Wifiphisher 는 SSL/TLS로 보호되는 트래픽을 어떻게 처리할 것인지 묻습니다. 이는 중간자 공격의 성격을 결정하는 중요한 선택입니다.

Wifiphisher 는 두 가지 주요 옵션이 있는 프롬프트를 표시합니다:

  1. 스푸퍼 사용 (With a spoofer): 이 방법은 실시간으로 가짜 SSL 인증서를 생성하여 클라이언트에게 제시합니다. 이 경우 클라이언트 브라우저에서 보안 경고가 발생하는 경우가 많습니다.
  2. 스푸퍼 없이 (Without a spoofer): 이 방법은 인증서를 사용하지 않고 일반 HTTP 로 연결을 다운그레이드하려고 시도합니다. 이는 클라이언트 브라우저가 보안 연결을 강제하지 않는다는 점에 의존합니다.

터미널에 다음과 같은 프롬프트가 표시됩니다:

[?] How do you want to handle SSL/TLS-protected traffic?
1. With a spoofer (Generate a fake cert on the fly and spoof the domain)
2. Without a spoofer (Downgrade to HTTP)
[1/2]:

이 실습에서는 두 번째 옵션을 탐색합니다. 2를 입력하고 Enter를 누릅니다.

2

선택을 완료하면 Wifiphisher 는 가짜 AP 및 캡티브 포털 설정을 마무리합니다. 그런 다음 클라이언트 연결을 받을 준비가 됩니다. 터미널에는 HTTP 및 HTTPS 프록시 서버가 실행 중임을 나타내는 메시지가 표시됩니다.

[*] Starting the HTTP and HTTPS proxy servers...
[*] Starting AP...

이 공격이 클라이언트 브라우저 취약점에 의존한다는 점 이해하기

이 단계에서는 '스푸퍼 없이 (Without a spoofer)' SSL 스트리핑 옵션의 메커니즘에 대해 논의합니다. 여기서는 실행할 명령이 없으며, 이 섹션은 개념적 이해를 위한 것입니다.

'스푸퍼 없이 (Without a spoofer)' 방법은 더 미묘한 형태의 공격입니다. 작동 방식은 다음과 같습니다:

  1. 초기 요청: 피해자가 가짜 "Free WiFi" 네트워크에 연결합니다. 브라우저를 열고 보안 사이트 (예: https://example.com) 로 이동하려고 시도합니다.
  2. 가로채기: Wifiphisher 는 게이트웨이 역할을 하여 이 요청이 인터넷에 도달하기 전에 가로챕니다.
  3. 다운그레이드: Wifiphisher 는 가짜 인증서로 example.com을 사칭하려고 시도하는 대신 다른 작업을 수행합니다. 사용자의 요청을 실제 https://example.com으로 전달하지만, 일반 http:// 연결을 통해 피해자에게 콘텐츠를 다시 제공합니다.
  4. 콘텐츠 재작성: 중요한 점은 Wifiphisher 가 실제 서버로부터 받은 HTML 콘텐츠를 스캔하고 모든 링크를 재작성한다는 것입니다. https://...였던 모든 링크는 http://...로 변경됩니다. 이를 통해 사용자는 가능한 한 오랫동안 암호화되지 않은 세션에 머물게 됩니다.

이 공격의 성공은 두 가지 주요 요인에 달려 있습니다:

  • 사용자가 브라우저의 자물쇠 아이콘이 없다는 것을 알아차리지 못하는 경우.
  • 대상 웹사이트가 **HTTP Strict Transport Security (HSTS)**를 사용하지 않는 경우. HSTS 는 웹 서버가 브라우저에게 HTTPS 를 통해서만 통신해야 한다고 알려주는 데 사용할 수 있는 보안 정책입니다. 브라우저가 이전에 사이트로부터 HSTS 헤더를 받은 경우, HTTP 를 통해 연결하는 것을 거부하여 이 공격을 무력화합니다.

클라이언트 연결 및 HTTPS 사이트 접속 시도

이 단계에서는 악성 AP 에 클라이언트가 연결되어 보안 웹사이트에 액세스하려고 시도하는 상황을 시뮬레이션합니다. 실제 시나리오에서는 피해자가 자신의 장치를 "Free WiFi" 네트워크에 연결할 것입니다. 여기서는 새 터미널에서 curl 명령을 사용하여 이를 시뮬레이션합니다.

먼저 새 터미널 탭을 엽니다. 터미널 패널에서 + 아이콘을 클릭하여 수행할 수 있습니다. 이 새 터미널이 "피해자 클라이언트" 역할을 할 것입니다.

이 새 터미널에서 curl을 사용하여 HTTPS 사이트에 액세스해 보겠습니다. 테스트 목적으로 설계되었으며 HSTS 를 강제하지 않는 사이트인 httpforever.com을 사용하겠습니다. -v (verbose) 플래그는 연결 프로세스에 대한 자세한 정보를 보여줍니다.

새 터미널에서 다음 명령을 실행합니다:

curl -v https://httpforever.com

Wifiphisher 가 네트워크를 제어하고 있기 때문에 이 요청은 가로채기됩니다. 실제 httpforever.com에 도달하는 대신, 공격 도구에 의해 처리될 것입니다.

연결이 HTTP 로 다운그레이드되었는지 관찰하기

이 단계에서는 클라이언트와 공격자 터미널 모두에서 공격 결과를 관찰하여 연결이 성공적으로 다운그레이드되었는지 확인합니다.

먼저 클라이언트 터미널 (여기서 curl을 실행한 곳) 의 출력을 확인합니다. 상세 출력에서 https://httpforever.com에 대한 요청이 리디렉션되었음을 보여줍니다. 302 Found 상태 코드와 함께 캡티브 포털 페이지인 HTTP 주소를 가리키는 Location 헤더를 볼 수 있습니다.

출력은 다음과 유사하게 보일 것입니다:

*   Trying 10.0.0.1:443...
* Connected to httpforever.com (10.0.0.1) port 443 (#0)
...
< HTTP/1.1 302 Found
< Location: http://10.0.0.2:8080/
< Content-Length: 0
< Date: Fri, 27 Oct 2023 10:05:00 GMT
< Server: Python/3.10 aiohttp/3.8.5
...

Location 헤더가 http:// 주소로 리디렉션되는 것을 확인합니다. 이는 다운그레이드가 성공했음을 확인시켜 줍니다.

다음으로, wifiphisher가 실행 중인 첫 번째 터미널로 다시 전환합니다. 클라이언트가 연결되었고 해당 요청이 처리되고 있음을 보여주는 새로운 로그 항목을 볼 수 있습니다. 시뮬레이션된 클라이언트로부터의 HTTP GET 요청을 기록할 것입니다.

[+] 192.168.1.100 victim-device connected to Free WiFi
[*] Sent a captive portal page to 192.168.1.100
[+] GET 192.168.1.100: http://httpforever.com/

이는 공격자가 트래픽을 평문으로 성공적으로 가로채고 있음을 확인시켜 줍니다.

실습을 완료하려면 해당 터미널로 전환하여 Ctrl+C를 눌러 Wifiphisher 도구를 중지합니다.

요약

이 실습에서는 Wifiphisher 의 'Without a spoofer' 옵션을 사용하여 SSL 스트리핑 공격을 성공적으로 시연했습니다.

다음 내용을 학습했습니다:

  • Wifiphisher 를 실행하여 캡티브 포털 공격을 위한 악성 AP 를 생성하는 방법
  • 'Without a spoofer' SSL 스트리핑 방법을 선택하는 방법
  • 별도의 터미널에서 curl을 사용하여 클라이언트 연결을 시뮬레이션하는 방법
  • 클라이언트와 공격자 도구 모두의 출력을 분석하여 HTTPS 에서 HTTP 로의 연결 다운그레이드 증거를 관찰하는 방법

이 연습은 이러한 다운그레이드 공격으로부터 보호하기 위한 HSTS 와 같은 보안 메커니즘의 중요성을 강조합니다. 실습을 완료하신 것을 축하드립니다!