Основи практичного фішингу з Gophish

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті.

Привіт! Мене звати Андрій, я JavaScript-розробник. Але в цій статті поділюся знаннями з теми, не зовсім пов’язаною з веброзробкою. Під час російсько-української війни, як ведеться у XXI столітті, бойові дії супроводжуються різноманітними інформаційними операціями. Щоб уберегти себе й оточення, варто розуміти, які небезпеки чекають нас в інформаційному просторі.

Цей матеріал — про одну з поширених атак, направлену на заволодіння персональними даними — фішинг.

Важливо! Ця стаття не є закликом до вчинення будь-яких протиправних дій. Це лише практична демонстрація, як працює фішинг. Матеріал виходить за підтримки Микити Книша і порталу HackYourMom.

Отже, фішинг — це вид соціальної інженерії, направлений на виманювання у неуважних користувачів персональних даних (паролів чи даних кредитних карток). Я ж розповім про інструмент, який дозволяє провести симуляцію фішингової атаки й розібратися, як вона працює на практиці. Йдеться про open source фішинговий фреймворк Gophish.

Технічний огляд Gophish

Оскільки Gophish — це open source проєкт, репозиторій фреймворку знаходиться на Github. Сам інструмент написаний на Go. Також є UI-адмінка, яка дозволяє керувати фішинговими кампаніями й усім, що з ними пов’язано. За замовчуванням використовується база даних SqlLite, проте є можливість за потреби під’єднати MySql.

Для різноманітних інтеграцій і автоматизацій Gophish надає REST API і клієнтську бібліотеку для Python. Сам фреймворк є інструментом для створення, планування, моніторингу фішингових кампаній, створення і управління списками електронних адрес, шаблонів електронних листів і фішингових сторінок. Проте він не має функції SMTP-сервера. Тому для надсилання електронних листів потрібно підключати стороннє рішення.

Матеріал можна розділити на 2 частини: встановлення Gophish на віртуальну машину в AWS i запуск першої тестової фішингової кампанії. Тож якщо технічні нюанси розгортання інструменту вас не цікавлять, сміливо переходьте до 2 частини, де побачите практичне використання фреймворку.

Розгортання Gophish

Щоб запустити Gophish, нам потрібен будь-який Linux чи Windows сервер, загальнодоступний з мережі інтернет. Найпростіший варіант — це віртуальна машина на будь-якому популярному хмарному сервісі (AWS, GCP, Azure, Digital Ocean). Крім того, у таких провайдерів часто є безплатні «кредити», яких цілком достатньо для нашої демонстрації. Розгляньмо найпопулярніший з них — AWS.

Щоб створити нову віртуальну машину в AWS, заходимо в консоль управління EC2 і натискаємо кнопку «Launch instances». Для демонстрації оберемо операційну систему Ubuntu.

Стосовно типу віртуальної машини, то нам достатньо t2.micro. Цей розмір віртуальної машини сумісний із безкоштовними лімітами AWS. Також оберемо наявну або створимо нову пару ключів для підключення до машини по ssh.

У розділі Network Settings потрібно вказати мережеві правила для доступу до нашої віртуальної машини. Створімо нову security групу з наступними правилами:

  • Дозволимо SSH трафік лише з нашої ІР-адреси.
  • Дозволимо HTTP i HTTPS трафік з будь-якої адреси інтернету. Gophish-сервер буде хостити фішингові сторінки, а ми хочемо, щоб вони були доступні для потенційної «жертви».

Ми ще повернемося до цих налаштувань пізніше, коли ознайомимося з конфігурацією Gophish.

Інші налаштування можна залишити за замовчанням.

Як під’єднатися до новоствореної машини — дізнаєтесь, обравши цей instance в списку адмінки EC2 і натиснувши кнопку «connect».

Щоб під’єднатися через ssh, виконайте інструкції, вказані у вкладці «SSH client». Також вам знадобиться ssh-ключ, обраний при створенні віртуальної машини. Я запускаю команду з теки, де знаходиться ключ. У мене це виглядає так:

ssh -i "gophish_demo_key.pem" [email protected]

Найпростіший спосіб встановити Gophish — це звантажити архів з уже зібраним інструментом для вашої операційної системи. (Також можна використати Docker контейнер або клонувати репозиторій і зібрати проєкт самому). Ми створили віртуальну машину з операційною системою Ubuntu, тому нам потрібен архів зі збіркою під Linux. Звантажуємо його наступною командою:

wget https://github.com/gophish/gophish/releases/download/v0.12.1/gophish-v0.12.1-linux-64bit.zip

Створимо нову теку і перейдемо у неї:

mkdir gophish
cd gophish

Тепер розпаковуємо зміст завантаженого архіву в поточну теку:

unzip ../gophish-v0.12.1-linux-64bit.zip

Перевірмо розпакований з архіву вміст поточної теки:

ls

Ми повинні побачити наступні файли й теки:

Тека db містить конфігурації й міграції для баз даних. В теках static і templates містяться файли UI-інтерфейсу. gophish — це бінарний файл, який ми будемо запускати. config.json — це файл, в якому міститься конфігурація інструменту. Перевірмо його вміст.

cat ./config.json

Розділи конфігурації admin_server і phish_server містять відповідно налаштування «адмінки» (де ми створюємо і запускаємо кампанії) і фішингового сервера (відповідає за хостинг фішингових сторінок, які ми додаємо через ту ж адмінку). З цих налаштувань ми бачимо, що наразі «адмінка» доступна лише безпосередньо на віртуальній машині через порт 3333, а фішинговий сервіс доступний на 80 порту з мережі. Щоб спростити демонстрацію і зробити адмінку Gophish доступною поза віртуальною машиною, змінюємо «admin_server.listen_url»: «0.0.0.0:3333». Це зручно зробити в консольному редакторі nano.

nano ./config.json

Робимо зміни. Щоб вийти з редактора і зберегти зміни, натискаємо комбінацію control + X.

В реальності, ви захочете, щоб фішинговий сервер віддавав сторінки по HTTPS, що буде викликати у «жертви» більше довіри. Саме в config.json файлі ви зможете змінити порт і вказати файли ssl-сертифікату. Як альтернатива, можна використати cloudflare flexible ssl, коли комунікація між браузером і cloudflare буде захищеною, а між cloudflare і фішинговим сервером з’єднання буде відбуватися по HTTP.

Щоб дозволити доступ до адмінки Gophish поза віртуальною машиною, нам також потрібно відредагувати правила вхідного трафіку віртуальної машини. Для цього заходимо у налаштування віртуальної машини, на закладці Security переходимо у відповідну security групу. На сторінці security групи натискаємо кнопку «Edit inbound rules».

Повертаємося до нашої віртуальної машини. Потрібно зробити файл gophish виконуваним. Для цього запускаємо наступну команду:

chmod +x gophish

Тепер ми можемо запустити наш сервер. (Запуск із sudo потрібний для того, щоб забіндитися до 80 привілейованого порту). Важливий нюанс: якщо ми запускаємо сервер таким чином, то при закінченні ssh-сесії Gophish перестане працювати, що недопустимо в реальних умовах. Швидше за все ми захочемо запустити інструмент як сервіс і під окремим користувачем. Але для спрощення демонстрації ми пропустили це.

sudo ./gophish

В консолі ми бачимо повідомлення з паролем для admin користувача. Важливо зберегти цей пароль і використати для першого логіну в «адмінку» Gophish. Також ми бачимо повідомлення про старт фішингового серверу на 80 порту і старт адмінки на 3333 порту.

Спробуймо відкрити адмінпанель в браузері. Для цього нам потрібна ІР-адреса нашої віртуальної машини (її можна глянути у панелі управління EC2). Отже, в адресному рядку вводимо https://[ip віртуальної машини]:3333 (в моєму випадку https://18.159.112.73:3333).

Вітаю! Наш Gophish-сервер працює. Використаємо тимчасовий пароль із попереднього кроку, щоб потрапити в «адмінку». При першому логіні система попросить нас змінити пароль на власний. Після успішної авторизації ми побачимо інтерфейс Gophish.

Запуск першої кампанії з Gophish

Спробуємо на прикладі зімітувати фішингову атаку і розберемося з функціоналом Gophish. Уявімо, що ми хочемо отримати доступ до акаунтів користувачів сервісу WordPress.org. Перше, що нам потрібно — це підставна фішингова сторінка, наприклад, з формою логіна. З неї й розпочнемо підготовку.

Landing Pages

Цей розділ дозволяє створити HTML-сторінки, на які при переході із фішингового посилання потрапляє «ціль». Функціональність лендінгових сторінок дозволяє зберігати надіслані користувачем дані, що значно спрощує підготовку. Спробуймо додати нову сторінку.

У формі створення Landing Page є можливість додати HTML-сторінки, або ж спробувати імпортувати сторінку з сайту. Імпорт сторінки не завжди спрацює (наприклад, якщо у нас форма рендериться на клієнтській стороні, а не віддається сервером, як статична сторінка). Спробуймо зімпортувати сторінку логіну https://login.wordpress.org WordPress.org. Натискаємо кнопку «Import Site», потім у формі, яка з’явилася, вставляємо посилання на сторінку логіна і натискаємо «Import».

Після того, як форма імпорту закрилася, бачимо у візуальному редакторі копію сторінки логіну з WordPress.org. На перший погляд — досить непогано. За потреби можна відредагувати цю сторінку, переключившись у режим редагування HTML.

Оскільки ми зацікавлені у логіні й паролі користувачів, ставимо галочку «Capture Submitted Data» і також ставимо позначку навпроти нового пункту, який з’явиться, — «Capture Passwords». Оскільки ми не хочемо викликати підозр навіть коли користувач уже ввів свої дані, вкажемо, щоб «ціль» перенаправлялась на сторінку профілю.

Email Templates

Наступний крок у плануванні атаки — це підготовка фішингового листа, який має привести користувача на уже створену нами сторінку. Перевіривши стиль електронного листа, який приходить при зміні пароля на WordPress.org, ми бачимо, що повідомлення містить простий текст без стилів і зображень, що значно спрощує наше завдання.

Спробуймо зробити лист, який змотивує користувача перейти на фішингову сторінку і ввести свої облікові дані. Наприклад, повідомити, що через недавній інцидент на платформі користувачу потрібно перелогінитися, щоб зберегти доступ до свого профілю. Знову ж таки, для реальної кампанії потрібно проявити більше винахідливості й докласти більше зусиль.

Цікавою функціональністю email-шаблонів є можливість використовувати змінні, які будуть підставляти відповідні значення у конкретний лист (наприклад, ім’я чи email). Також є можливість імпортувати уже наявний лист.

Ставимо галочку «Add tracking image», щоб мати статистику про відкриття емейлу потенційними «жертвами».

Також Gophish дає можливість додавати прикріплені файли до шаблону листа. Але роботу з атачментами залишмо за межами цього матеріалу.

Sending Profile

Наступне, що нам потрібно, це SMTP-сервер, який надсилатиме електронні листи. Сам Gophish не вміє цього робити. З демонстраційною метою можемо використати SMTP будь-якого популярного сервісу email-розсилок, наприклад SendGrid. У SendGrid також є безплатні ліміти, що чудово підходить для тесту. Після реєстрації дані SMTP-сервера SendGrid можна знайти на сторінці Email API -> Integration Guide -> SMTP Relay.

Використаємо цю інформацію при додаванні Sending Profile.

Users & Groups

Останнім кроком нам потрібно додати список електронних пошт, які будуть ціллю атаки. У формі створення нової групи можна додавати емейли по одному або імпортувати групу електронних пошт за допомогою csv-файлу.

Campaigns

Нарешті ми готові до запуску першої кампанії. На формі створення обираємо додані на попередніх кроках email template, landing page, sending profile і групу емейлів для розсилки. Крім цього, нам потрібно вказати URL, де у нас буде хоститися фішингова сторінка. В цьому випадку ми вказуємо IP-адресу нашої віртуальної машини, де ми розгорнули Gophish («Public IPv4 address» в панелі управління EC2).

В реальності потрібно отримати статичну адресу для віртуальної машини й прив’язати власний домен. Також можна запланувати час старту розсилки. Якщо ми вкажемо час «Send Emails By», Gophish розподілить надсилання фішингових повідомлень між цими двома проміжками часу. Коли готові, натискаємо кнопку «Launch Campaign».

Після запуску ми можемо спостерігати детальну інформацію про перебіг кампанії.

Зайдімо на електронну пошту, яка була вказана як «ціль» і перевіримо, чи ми отримали електронний лист.

Здається, це дійсно щось важливе! При переході на посилання, вказане у листі, ми потрапляємо на сторінку, яка дуже схожа на справжню сторінку логіна WordPress.org.

Не довго думаючи, «жертва» вводить логін і пароль, і після натискання кнопки «Log In» потрапляє на сторінку свого профілю (ми це вказали у налаштуваннях Landing Page). Якщо користувач був залогінений на сайті, то він може навіть нічого не помітити.

Отже, маємо перший «улов»! Перевірмо, як ця інформація відображається на сторінці статистики кампаній.

Зверху на таймлайні кампанії ми бачимо всі події, які відбуваються (надсилання, відкриття листа, перехід за фішинговим посиланням і т. п.).

Знизу, в секції Details, ми можемо переглянути інформацію за кожною ціллю. Ми бачимо, коли лист був доставлений, відкритий користувачем, з якого пристрою відбувався перехід і, найголовніше, дані, які «жертва» вказала у формі.

Підсумок

Маю надію, що демонстрація Gophish дала вам уявлення про можливості, які надає фреймворк, і розкриває етапи підготовки як до симуляцій, так і до справжніх фішингових атак. Звичайно, цей приклад може здатися дещо примітивним, тому подумаймо, які наступні кроки можна було б зробити, щоб підготувати інструмент до реального застосування.

  1. Підібрати SMTP-сервер. У прикладі зі статті ми використовували SMTP сервісу розсилки, але для практичного застосування Gophish такі сервіси — навряд хороший вибір. Важливо перевірити, щоб IP SMTP сервера не були у відомих спам-списках типу Spamhaus.
  2. Підібрати домен і прив’язати його до сервера, де буде запущений Gophish.
  3. Налаштувати фішинговий сервер, щоб він віддавав landing pages через HTTPS. Це збільшить довіру до фішингових сторінок.
  4. Налаштувати DNS для використання підібраного домена з нашим SMTP-сервером (SPF, DKIM, DMARC DNS-записи).
  5. Попрацювати над deliverability вашого електронного листа. Це досить складна тема, адже на те, чи попаде ваше повідомлення в spam чи inbox, залежить дуже велика кількість факторів. Від правильності DNS-налаштувань, згаданих в попередньому пункті, до вмісту вашого листа.
    • Почати можна з сервісу Mail Tester. А далі, коли отримаєте максимальну оцінку, експериментувати з різними email-сервісами, адже вони можуть мати різні підходи до виявлення спаму.
    • Перед організацією розсилки потрібно «прогріти» SMTP-сервер і пошту, з якої буде здійснюватися розсилка. Для цього потрібно зробити кілька серій тестових розсилок зі зростальною кількістю отримувачів (наприклад: 1 день — 10, 2 — 20 отримувачів, 3 — 30 і так далі, залежно від кількості отримувачів у запланованій кампанії). Важливою є реакція отримувачів. Якщо вони відкривають лист, гортають його, переходять за посиланнями, позначають як «важливе» — все це покращує deliverability повідомлень від вашого SMTP-сервера.

Дякую, що дочитали до кінця статті! Віримо в перемогу і підтримуємо ЗСУ!

👍ПодобаєтьсяСподобалось12
До обраногоВ обраному5
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Було цікаво почитати. Дякую!

Дуже крута і детальна стаття, дякую :) А от як на тему інструмента, яка в нього є фінальна ціль в доброму і світлому майбутньому? Тобто, хто аудиторія? Якщо це «масовий спам, щоб вкрасти доступи до сотен вордпресс сайтів» — то ок, але я не впевнений, що тоді розробка продукту того варта з фінансової точки зору. Якщо ж це інструмент для white/gray hats — тоді функціонал мінімальний, і погано кастомізується.

Наприклад, от я робив 2 антифішінгові «кампанії» за останні півроку (добути дані, росказати як, сказати «ай-яй» і пофіксити) для продукта. І вся робота вона дуже продукто-спеціфічна, тобто, як використати сервери компанії для відправки фішінгових емейлів (через підробку назв всяких entities, викорастнню html-тегів в імені і т.п.). І я от потенційна цільова аудиторія таких продуктів, але от мені від саме цього продукту користі мінімум. Тому цікаво, як ви бачите його розвиток.

Дякую за коментар. Власне я бачу 2 сфери використання для цього фреймворку:

  • офіційна — це проведення тестових кампаній на вразливість якоїсь організації стосовно фішингу.
  • використання в цілях фішингу
Порівняти із якимись комерційними аналогами для проведення антифішингових кампаній я зараз не готовий. Напевно є більш просунуті інструменти. Але переваги Gophish бачу наступні:
  • це безкоштовний open-source продукт
  • вбудований трекінг відкриття імейлів, переходу по посиланнях, зберігання надісланих даних
  • не завжди працює, але легко зімпортувати сторінку цільового сайту, щоб отримати хоча б базу для подальшої розробки фішингової сторінки
  • власне, управління самими кампаніями
  • API для інтеграцій

Це все можна реалізувати самому, але для цього і є фреймворки, щоб не придумувати кожного разу все з самого початку.

Ви використовували якісь сервіси розсилок для того щоб «трекати» відкриття електронного листа (і т.п.) у ваших антифішингових кампаніях? І чи збирали якимось чином надіслані дані користувачів?

Mailchimp, збирав внутрішніми інструментами (зробити звичайну форму фідбеку формою ідентичною формі логіну через CSS, бо CSS дозволяє інжектувати/замінювати текст).

Якщо дуже спрощувати, то функціонал Gophish і сервісів розсилок в чомусь перетинається :) Немає універсального інструменту для всіх випадків і потрібно оцінювати, що краще застосувати у кожній окремій ситуації.

Підписатись на коментарі