악성 AP 및 캡티브 포털 식별

Beginner
지금 연습하기

소개

이 실습에서는 악성 액세스 포인트 (AP) 와 악성 캡티브 포털을 식별하는 기본적인 단계를 배우게 됩니다. 악성 AP 는 네트워크 소유자의 명시적인 승인 없이 네트워크에 설치된 무선 액세스 포인트입니다. 공격자는 종종 이를 사용하여 "중간자 공격 (man-in-the-middle attacks)"을 실행하여 트래픽을 가로챕니다.

캡티브 포털은 사용자가 공개 네트워크에 액세스하기 전에 보고 상호 작용해야 하는 웹 페이지입니다. 많은 합법적인 핫스팟에서 이를 사용하지만, 공격자는 자체적으로 만들어 자격 증명을 피싱할 수 있습니다.

이 실습에서는 안전한 환경에서 이 시나리오를 시뮬레이션합니다. 명령줄 도구를 사용하여 네트워크를 스캔하고, 의심스러운 "악성 트윈 (evil twin)" 네트워크를 탐지하며, 가짜 캡티브 포털을 분석하여 위협으로 식별합니다.

클라이언트 장치에서 Wi-Fi 네트워크 스캔

이 단계에서는 사용 가능한 Wi-Fi 네트워크를 스캔하는 것을 시뮬레이션합니다. 실제 시나리오에서는 nmcli, iwlist 또는 airodump-ng와 같은 도구를 사용하게 됩니다. 이 실습에서는 네트워크 스캔의 출력을 모방하는 scan-wifi.sh라는 스크립트를 준비했습니다. 이를 통해 실제 Wi-Fi 하드웨어 없이도 실습을 수행할 수 있습니다.

이 실습의 모든 파일은 ~/project 디렉토리에 있습니다. 스크립트를 실행하여 시뮬레이션된 Wi-Fi 네트워크 목록을 확인해 보겠습니다.

터미널에서 다음 명령을 실행하십시오.

~/project/scan-wifi.sh

다음과 유사한 출력이 표시되며, 사용 가능한 네트워크, 신호 강도 및 보안 유형이 나열됩니다.

IN-USE  BSSID              SSID        MODE   CHAN  RATE        SIGNAL  BARS  SECURITY
*       AA:BB:CC:11:22:33  CorpWifi    Infra  6     54 Mbit/s   90      ▂▄▆█  WPA2
        AA:BB:CC:44:55:66  CorpWifi    Infra  11    54 Mbit/s   95      ▂▄▆█  --
        DE:F0:12:34:56:78  GuestWifi   Infra  1     54 Mbit/s   70      ▂▄▆_  WPA2

동일한 이름 (ESSID) 을 가진 두 개의 네트워크 발견

이 단계에서는 스캔 결과를 분석하여 이상 현상을 탐지합니다. ESSID(Extended Service Set Identifier) 는 Wi-Fi 네트워크의 공개 이름입니다.

이전 단계의 출력을 자세히 살펴보십시오. 두 개의 다른 네트워크가 동일한 SSID인 "CorpWifi"를 공유하고 있음을 알 수 있습니다. 이는 잠재적인 "악성 트윈 (Evil Twin)" 공격의 전형적인 징후입니다. 하나는 합법적인 네트워크이고 다른 하나는 공격자가 설정한 악성 AP 입니다.

주요 차이점은 SECURITY 열에 있습니다. 합법적인 네트워크는 WPA2 암호화를 사용하는 반면, 악성 네트워크는 개방형입니다 ( --로 표시됨). 공격자는 사용자가 암호 없이 연결할 가능성이 높기 때문에 종종 개방형 네트워크를 만듭니다.

이를 더 명확하게 하기 위해 grep 명령을 사용하여 출력을 필터링하고 CorpWifi라는 이름의 네트워크만 표시해 보겠습니다.

~/project/scan-wifi.sh | grep CorpWifi

이 명령은 다음과 같은 출력을 생성하여 두 네트워크를 강조 표시합니다.

*       AA:BB:CC:11:22:33  CorpWifi    Infra  6     54 Mbit/s   90      ▂▄▆█  WPA2
        AA:BB:CC:44:55:66  CorpWifi    Infra  11    54 Mbit/s   95      ▂▄▆█  --

네트워크의 개방형 (암호화되지 않은) 버전에 연결

이 단계에서는 의심스러운 개방형 "CorpWifi" 네트워크에 연결하는 것을 시뮬레이션합니다. 실제 시나리오에서는 장치의 운영 체제가 연결을 처리합니다. 시뮬레이션을 위해 "연결"은 악성 AP 의 캡티브 포털 역할을 할 로컬 웹 서버를 시작하는 것을 포함합니다.

이 가짜 포털의 파일은 ~/project/portal 디렉토리에 있습니다. 해당 디렉토리에서 간단한 Python 웹 서버를 실행할 것입니다. 터미널을 다른 명령을 위해 비워두기 위해 서버를 백그라운드 프로세스로 실행할 것입니다.

먼저 현재 디렉토리를 ~/project/portal로 변경합니다.

cd ~/project/portal

다음으로 & 기호를 사용하여 백그라운드에서 Python 웹 서버를 시작합니다.

python3 server.py &

프로세스 ID 와 서버가 실행 중임을 나타내는 확인 메시지가 표시됩니다.

[1] 1234
Serving captive portal on port 8000

서버가 이제 실행 중이며 포트 8000 에서 연결을 수신 대기하여 악성 네트워크의 환경을 시뮬레이션합니다.

로그인 페이지로의 자동 리디렉션 관찰

이 단계에서는 캡티브 포털이 작동하는 것을 볼 수 있습니다. 캡티브 포털이 있는 네트워크에 연결한 후 웹을 탐색하려는 모든 시도는 일반적으로 가로채져 로그인 또는 서비스 약관 페이지로 리디렉션됩니다.

이것을 시뮬레이션하기 위해 curl 명령을 사용하여 웹사이트에 액세스해 보겠습니다. 방금 시작한 Python 서버가 시뮬레이션된 네트워크 환경을 제어하므로 localhost:8000에 대한 모든 HTTP 요청은 "캡처"되어 포털의 index.html 파일이 제공됩니다.

curl을 사용하여 로컬 서버에 요청을 보냅니다. 이는 새 네트워크에 연결한 후 브라우저의 초기 요청을 모방합니다.

curl http://localhost:8000

이 명령은 가짜 로그인 페이지의 HTML 소스 코드를 반환합니다. 실제 브라우저에서는 이 코드가 그래픽 로그인 양식으로 렌더링됩니다.

<!DOCTYPE html>
<html>
  <head>
    <title>CorpWifi Login</title>
    <style>
      body {
        font-family: sans-serif;
        background: #f0f2f5;
        display: flex;
        justify-content: center;
        align-items: center;
        height: 100vh;
        margin: 0;
      }
      .login-box {
        background: white;
        padding: 20px 40px;
        border-radius: 8px;
        box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
        text-align: center;
      }
      input {
        margin: 10px 0;
        padding: 8px;
        width: 200px;
        border: 1px solid #ddd;
        border-radius: 4px;
      }
      button {
        padding: 10px 20px;
        background-color: #1877f2;
        color: white;
        border: none;
        border-radius: 5px;
        cursor: pointer;
        width: 100%;
      }
    </style>
  </head>
  <body>
    <div class="login-box">
      <h2>CorpWifi Access</h2>
      <p>Please log in to continue.</p>
      <input type="text" placeholder="Username" />
      <br />
      <input type="password" placeholder="Password" />
      <br />
      <button>Log In</button>
      <p style="font-size: 12px; color: #888; margin-top: 15px;">
        Powered by CorpWifi-Login.net
      </p>
    </div>
  </body>
</html>

URL 이 합법적인 도메인이 아님을 인식하기

이 마지막 단계에서는 악성 캡티브 포털임을 확인하는 중요한 검사를 수행합니다. 이러한 포털의 목표는 사용자를 속여 가짜 페이지에 자격 증명을 입력하게 하는 것입니다. 가짜를 식별하는 가장 확실한 방법은 도메인 이름 (URL) 을 검사하는 것입니다.

실제 브라우저에서는 주소 표시줄을 확인합니다. 시뮬레이션에서는 HTML 콘텐츠를 검사하여 단서를 찾을 수 있습니다. 이전 단계의 HTML 을 보면 하단에 의심스러운 텍스트 줄이 있습니다. grep을 사용하여 포털의 index.html 파일 내에서 해당 줄을 찾아보겠습니다.

먼저 메인 프로젝트 디렉토리로 돌아갑니다.

cd ~/project

이제 포털의 HTML 파일 내에서 의심스러운 텍스트를 검색합니다.

grep 'CorpWifi-Login.net' portal/index.html

이 명령은 의심스러운 도메인이 포함된 줄을 찾아 표시합니다.

    <p style="font-size: 12px; color: #888; margin-top: 15px;">Powered by CorpWifi-Login.net</p>

CorpWifi-Login.net 도메인은 매우 의심스럽습니다. 공격자는 종종 공식적으로 들리지만 실제로는 그렇지 않은 도메인을 등록합니다. 합법적인 기업 포털은 회사의 공식 도메인 (예: wifi.corp.com) 에 호스팅됩니다. 이 발견은 개방형 네트워크가 악성 AP 이며 로그인 페이지가 피싱 시도임을 확인합니다.

요약

이 실습에서는 시뮬레이션을 통해 악성 캡티브 포털과 악성 AP 를 성공적으로 식별했습니다. 일반적인 Wi-Fi 위협을 식별하기 위한 실용적인 단계별 프로세스를 배웠습니다.

다음과 같은 작업을 수행했습니다.

  • Wi-Fi 네트워크를 스캔하고 보안 네트워크와 동일한 이름을 가진 암호화되지 않은 "evil twin"을 식별했습니다.
  • 로컬 서버를 시작하여 악성 AP 에 연결하는 것을 시뮬레이션했습니다.
  • 캡티브 포털이 웹 트래픽을 가로채고 로그인 페이지를 표시하는 방법을 관찰했습니다.
  • 로그인 페이지의 콘텐츠를 분석하여 의심스럽고 합법적이지 않은 도메인 이름을 찾아 피싱 시도를 확인했습니다.

핵심은 항상 개방형 Wi-Fi 네트워크에 주의하고 민감한 정보를 입력하기 전에 모든 로그인 페이지의 URL 을 면밀히 조사하는 것입니다.

마지막으로 백그라운드 서버 프로세스를 중지합니다. %1은 첫 번째 백그라운드 작업을 참조합니다.

kill %1