Скрипти для спаму

20 березня 2023 2 хвилин Автор: Endpool

Що таке спам?

Кожен із нас, відкриваючи особисту чи робочу пошту, бачив у себе різного роду листи, у змісті яких є заклики до різних дій: щось купити, на щось підписатися, кудись клікнути. Також траплялися зовсім дивні листи із назвами “Податкова.Штраф.pdf” із закликом терміново відповісти на цей лист та ознайомитися із змістом цього документа. І часто ми, як користувачі, не хочемо отримувати цей шквал листів, у потоці яких може загубитися потрібна нам кореспонденція. Отже, спам – це масова розсилання кореспонденції рекламного чи іншого характеру, особам що не виявляли бажання її отримувати. За статистикою за 2021 рік, частка спаму у світовому поштовому трафіку становить від 49,55% до 52%, тобто фактично половину від усіх електронних листів, що відправляються на планеті. У 2006 році він становив близько 60% і зростав щороку, досягнувши значення 80% у 2011 році. З розвитком технологій фільтрації та аналізу листів були розроблені високоефективні спам-фільтри, які знизили цей показник.

Спам має різні види та методи поширення, які постійно удосконалюються зловмисниками. Основна мета спаму – змусити одержувача зробити будь-яку дію, яка не вигідна для жертви та вигідна для спамера. Для складання змісту спаму застосовують різні техніки соціальної інженерії, які працюють за принципом “килимового бомбардування”: розсилається масам з частковим попаданням по “цільовій аудиторії”. Особи, які займаються створенням і розсилкою того чи іншого виду спаму називають «спамерами».

Способи поширення спаму


SMS-повідомлення


Телефонні дзвінки


Электронна пошта


Месенджери


Підміна інтернет-трафіку

Види спаму


Масове розсилання від імені іншої особи


Масове розсилання що містить віруси та небезпечні вкладення


Масове розсилання з метою виведення поштової системи із ладу (DDoS)


Релігійні розсилання


Фішинг

Що таке скрипт?

Прочитавши в Вікіпедії визначення скрипта я зовсім розгубився. Ось він – віртуальний світ відірваний від реальності. Насправді, як мені здається, все набагато простіше. Усі ми щодня використовуємо програми на комп’ютері. Вони складаються зі складних алгоритмів, мають інтерфейс користувача, працюють на різних операційних системах, мають технічну документацію і підтримку, версійність і т.д.

Скрипт – це така ж програма або підпрограма, але заточена на вирішення певної вузької задачі “тут і зараз” за заданою послідовністю (алгоритмом).

Розглянемо на прикладі:

Завдання: Маша візьми гроші і сходи в магазин за хлібом.
Мета: Хліб. Об’єкт: Маша.
Сценарій дій: візьми гроші і сходи в магазин (ось це і буде наш скрипт).
Виходить наступне: Маша [скрипт] за хлібом.
Міняємо мета: Маша [скрипт] за комп’ютером.
Міняємо мета і об’єкт: Петя [скрипт] за цукерками.

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

Бот (спам бот) – це скрипт програма, яка створена з метою виконання певної функції, у випадку спаму – спам розсилань.

Программні мови для написання скриптів


Bash


PowerShell


JavaScript


Python


PHP


Ruby


Perl


Groovy

Приклади

Приклад 1. Відправка email за допомогою Python скрипту

Я вважаю Python найпрогресивнішою мовою програмування на сьогоднішній день і ми розглянемо декілька прикладів Python скриптів і розберемося що вони роблять.

import smtplib
s = smtplib.SMTP('localhost')
toList = ["[email protected]", "[email protected]", "[email protected]"]
msg = "Test message"
s.sendmail("[email protected]", toList, msg)
{"[email protected]" : (550, "User unknown")}
s.quit()

 

Крок 1. Підключення SMTP модуля Python

import smtplib

SMTP – це протокол для роботи з електронною поштою. Оскільки не існує можливості відправити email напряму отримувачу, він відправляється спочатку на поштовий сервер, а потім сервер відправляє вже отримувачу, існує 3 основні види:

  • POP (Post Office Protocol);

  • IMAP (Internet Message Access Protocol).

  • SMTP (Simple Mail Transfer Protocol)

Крок 2. Підключення до серверу електронної пошти

Перш за все, потрібно створити об’єкт smtplib, який можна розглядати як портал, що дає доступ до підключення та інструментів роботи з ним з модуля smtplib.

У цьому випадку функція, що повертає необхідний об’єкт, приймає два параметри чи аргументи. Перший аргумент містить доменне ім’я, тобто адресу електронної пошти, що починається з “smtp“, як показано нижче. Другий аргумент – це номер порту, до якого здійснюватиметься підключення на сервері електронної пошти. Він майже завжди набуває значення 587 відповідно до стандарту шифрування TLS. Дуже рідко зустрічаються сервіси, що використовують порт 465.

І так необхідно вказати наступне:

smtpObj = smtplib.SMTP('smtp.gmail.com', 587)

 

Виходить, змінна smtpObj є об’єктом типу SMTP. Це можна переконатися, якщо ввести ім’я змінної в консоль і підтвердити введення. На екрані з’явиться адреса її осередку пам’яті та тип (за умови, що ви ввели попередню команду правильно). Змінну smtpObj можна назвати, як завгодно, аби це було допустиме в Python ім’я.

Крок 3. Шифрування

Наступне, що потрібно зробити для встановлення з’єднання, це «сказати» об’єкту SMTP, що повідомлення має бути зашифровано. Для цього слід ввести в консоль цей рядок та натиснути Enter:

smtpObj.starttls()

Ось що ми зробили: ми повідомили Gmail, що хочемо, щоб наше з’єднання шифрувалося за допомогою протоколу TLS (Transport Layer Security), який сьогодні є стандартом для інтернет-комунікацій. Сам собою TLS не є криптографічним алгоритмом, він скоріше повідомляє, що необхідно використовувати шифрування або з’єднання не повинно бути встановлено.

У відповідь ви маєте отримати підтвердження:

2.0.0 Ready to start TLS

Важливий момент — якщо пропустити цей крок і одразу перейти до авторизації, то на екрані з’являться повідомлення про помилки. Все тому, що Gmail застосовує шифрування з використанням протоколу HTTPS, тобто той самий НТТР, «загорнутий» у додатковий TLS-протокол.

Крок 4. Авторизація

Для того щоб авторизуватися, потрібно лише написати:

smtpObj.login('[email protected]','just123kidding')

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

Крок 5. Відправка повідомлення

Плюс використання середовищ із командним інтерпретатором у тому, що навіть за відсутності будь-якої інформації — наприклад, описи відправки листи — можна запитати про це сам інтерпретатор. Для цього потрібно просто ввести таку команду:

help(smtpObj)

Трохи проскроливши сторінку можна побачити потрібний метод:

Зауважте, що у прикладі вище відсутня команда авторизації. Це пов’язано з тим, що програма підключалася до комп’ютера користувача, а не віддаленого сервера електронної пошти. Для нашого випадку напишемо таке:

Інтерпретатор навіть виведе приклад його використання:
smtpObj.sendmail("[email protected]","[email protected]", "go to bed!")

Якщо було повідомлення отримано, то все працює як слід

 

Крок 6. Завершення з’єднання

Для завершення з’єднання достатньо використовувати таку команду:

smtpObj.quit()

 

Звичайно, надсилання повідомлень – це лише мала частина того, що можна робити з електронною поштою за допомогою Python.

Приклад 2. Відправка повідомлень у WhatsApp за допомогою Python скрипту

Крок 1. Встановлення Twilio (Communication APIs for SMS, Voice, Video and Authentication)

Створюємо безкоштовний профіль на Twilio та підтверджуємо адресу електронної пошти та номер телефону.

 

Крім безкоштовного періоду, у профілі Twilio передбачено тестове середовище Twilio Sandbox для WhatsApp, в якому не можна використовувати свій номер: щоб отримувати повідомлення по WhatsApp, потрібен разовий дозвіл. Всі проблеми вирішуються з отриманням номера – після того як WhatsApp дозволить Twilio використовувати ваш номер. Далі треба заповнити форму та трохи почекати. Всі клієнти Twilio можуть створювати та тестувати відправлення та отримання повідомлень WhatsApp за допомогою тестового середовища WhatsApp Sandbox. Тепер потрібно підключити телефон до тестового середовища WhatsApp Sandbox і можна починати отримувати повідомлення.

Перейдемо до бета-версії WhatsApp у розділі навчання консолі.

Збережемо у контактах наш номер WhatsApp. Можна надати йому будь-яке ім’я. Я зберіг його як Twilio Sandbox, потім відправив повідомлення з телефону батька, як бачите вище. Це можна зробити лише один раз. Тепер перейдемо в консоль Twilio Console, заведемо там профіль SSID і отримаємо токен аутентифікації – так Twilio зможе ідентифікувати нас при виконанні коду.

Крок 2. Інтерпретація та зміна коду

Завантажте репозиторій GitHub та розпакуйте його.

В середині знаходиться файл із нашим кодом і пакет розгортання.
  • whatsapp_messaging.py
  • aws_lambda_deploy.zip

Рядок 1: імпортує пакет Twilio та використовує його клієнт REST для звернення до API-інтерфейсу Twilio.
Рядок 3: створюємо тут функцію msg_mom_and_dad, яка буде передана у хмару AWS для виконання щодня у певний час.
Рядки 6–7: підставляємо значення sid та auth_token нашого профілю, про які йшлося на кроці 1.
Рядок 9: створюється об’єкт клієнта Twilio із нашими ідентифікаційними даними.
Рядок 13: створюється словник Python з ім’ям key і номером телефону value. Цей словник можна поповнювати, якщо хочеться надсилати повідомлення ще комусь.
Рядок 15: цикл for, який запускається для всіх пар значень key та value (зараз у нас лише один). В body вводимо наше повідомлення. У мене, наприклад, простий «добрий ранок», за яким слідує значення key. У цьому коді вийшло «доброго ранку, татусю!». Потім прописуємо номер from, який ми отримали для Twilio WhatsApp, і номер to, з якого раніше було надіслано підтвердження для тестового середовища WhatsApp.
Рядок 23: рядок, щоб перевірити статус повідомлення за допомогою ідентифікатора SID. Але це нам не знадобиться.

 

Тут треба змінити п’ять значень:

  • twilio_sid;
  • auth_token;
  • contact_directory;
  • from_;
  • body;

Після змін все зберігаємо. Далі виймаємо aws_lambda_deploy.zip і замінюємо whatsapp_messaging.py всередині на щойно створене нами. Потім знову запаковуємо. Усього потрібно було змінити код, підставивши наші ідентифікаційні та контактні дані. І тепер у нас готовий пакет розгортання.

Крок 3. Ставимо наш пакет на лямбда-функцію AWS із тригерами

Отже, код готовий до запуску та надсилання повідомлень через WhatsApp. Бажаєте дізнатися, які ще файли є в нашому пакеті розгортання? Це пакет Twilio і решта його залежності. Вони ще стануть у нагоді, тому що ми будемо використовувати лямбда-функцію в середовищі Python, а там немає пакету Twilio. Логічний питання: чому б просто не виконати pip install twilio для встановлення? Тому що тут ми не маємо сервера.

AWS Lambda – це засіб позасерверної обробки даних, де фрагмент коду виконується на основі різних подій і тригерів AWS відповідно до запитів користувача. Тому залучати сервер (примірник сервера EC2 в AWS), що працює в режимі 24/7, для нашої маленької задачі було б марною витратою обчислювальних ресурсів і фінансів. Адже тут наша лямбда-функція виконуватиметься щодня протягом малого проміжку часу в момент активації даного тригера. Сам собою сервіс лямбда недорогий і дає мільйон запитів на місяць безкоштовно.

Увійдіть на https://aws.amazon.com

Натисніть на Services -> Compute -> Lambda -> Сreate a function

 

Надамо назву нашої функції. Вибираємо кращим середовищем Python 3.6. Підключатися до інших сервісів в AWS не збираємося, тому зупинимося на варіанті стандартного дозволу. Натискаємо на create function (створити функцію) та потрапляємо в особистий кабінет.

У блоці коду функцій вказуємо обробнику лямбда-функції, чого ми від нього хочемо: виконувати наш файл Python whatsapp_messaging та функцію msg_mom_and_dadвсередині цього файлу щоразу, коли викликається лямбда-функція. Поміняємо значення оброблювача, як показано вище. У точці входу коду вибираємо upload a .zip file (завантажити zip-файл), завантажуємо пакет розгортання, створений нами у кроці 2, та зберігаємо. Наш код готовий до виконання. Тепер можна перевірити, чи надсилає функція повідомлення на вказаний номер WhatsApp. Натискаємо на test та перевіряємо.

Наш заключний крок – налаштувати активацію коду на певний час кожного дня.
Для цього натискаємо Add trigger -> CloudWatch Events ось у такому вікні.

Тут треба створити нове правило. За бажання можна дати йому будь-яке ім’я та опис. Як тип правила встановимо schedule expression (вираз розкладу). Ми вказали час, використовуючи cron(). 30 1 означає 1:30 ночі, час у форматі UTC. Наступні два, * *, використовуються для позначення дня та місяця. Наступні два, ? *, — для позначення дня тижня та року. Ми встановлюємо * та ? для позначення кожного дня, місяця та року. Для власних параметрів cron можете використовувати як приклад таблицю нижче. Якщо захочете вивчити у всіх подробицях, гід по cron вам допоможе на aws_cron_docs. Після закінчення переконайтеся, що у квадратику Enable trigger (активувати тригер) стоїть галочка. Тепер натисніть кнопку Add (Додати).

На панелі керування лямбда-функції тепер можна побачити подію CloudWatch Event, приєднану до нашої лямбда-функції. Пролиставши вниз, ми побачимо подію CloudWatch, активовану для виклику нашої функції.

От і все! Можете змінити назву для тестового середовища Twilio Sandbox на власне і навіть реагувати на відповіді з панелі керування Twilio.
Таким чином ми розглянули 2 досить простих приклади як можна відправляти повідомлення за допомогою скриптів, в тому числі і спам. Також хочу зазначити, що шахраї збирають адреси електронних скриньок та номерів телефонів з усіх доступних джерел. Серед інших особливою популярністю користуються тематичні форуми, гостьові книги, соціальні мережі та інші ресурси, де подібна інформація погано захищена або зовсім знаходиться в профілі власника у відкритому доступі. Деякі бази хакери зламують і продають їх в «Даркнеті».

Крім того, збір особистої інформації може вестися програмним методом. Існують спеціальні пошукові боти – харвестери. Вони за годину проходять тисячі ресурсів і акуратно складають всі отримані дані в базу. Також варто брати до уваги і звичайний підбір. По всьому світу зареєстровані мільярди поштових скриньок, а значить, з допомогою спеціально написаної програми можна генерувати ці адреси. Те ж саме вірно і для телефонів. Допомагають нечистим на руку ділкам і віруси. Шкідливий код, як правило, це черв’яки, може сам себе розсилати по базі адрес. Зібрана таким чином інформація дуже цінна для спамерів, бо в ній тільки робочі дані, якими користується їх господар.

Декілька порад як захиститись від спаму (і небезпечних скриптів)

1. Не використовуйте вашу основну email адресу всюди, де тільки зможете. Створіть альтернативну поштову скриньку і залишайте її коли вас попросять у магазині, готелі і т. д.

2. Коли ви знаходитесь на веб-сайті де необхідно вводити свій персональні дані для авторизації, переконайтесь що у вас використовуються HTTPS протокол і ваше з’єднання безпечне, якщо це не так то існує досить високий ризик підміни трафіку і/або адреса посилань може бути замінена і коли ви на неї натиснете ви можете запустити скрипт у фоновому режимі який відправить ваші персональні дані зловмиснику.

 

3. Підозрілі вкладення у імейлі а також лінки (посилання) від неідентифікованих/невідомих відправників. Досить часто ми можемо отримати листа з незрозумілим вкладенням чи лінком, ні в якому випадку не варто їх відкривати.

 

4. Також не варто відкривати лінк (посилання) у повідомленнях в соціальних мережах від незнайомих осіб.

5. Налаштуйте DKIM, DMARC и SPF. Це просунуті механізми захисту кореспонденції, що отримується і відправляється, яка підвищить рівень безпеки і істотно знизить кількість спаму.

6. Для просунутих користувачів: Сертифікат S/MIME, який дозволить вам підвищити рівень довіри до вашої пошти на високий рівень та дозволить захистити вашу пошту корпоративного рівня від фішингу. Налаштувавши сертифікати підпису пошти для всіх ваших співробітників, ви зможете бути впевнені, що листи надходять саме від них.

Всі перераховані вище рекомендації не є винятковими методами забезпечення безпеки. Завжди пам’ятайте, що 100%-ой безпеки не існує, і усі заходи тільки знижують ризики. Також не існує якогось одного “чарівного” методу, ефективна безпека – це завжди комплексні рішення. З розвитком технологій та методів захисту, розвиваються й технології атак на користувача, тому завжди найважливішою порадою для безпеки – це комплексний підхід, увага до отриманої інформації, змінювати паролі та робити і перевіряти бекапи.

Бажаю всім безпеки в мережі!

Інші статті по темі
Автоматизація та скриптиСервіси
Читати далі
Bash-скрипти
Відкрийте для себе переваги використання інтерфейсу командного рядка Bash над графічним інтерфейсом користувача. Ефективно керуйте операційною системою свого комп’ютера за допомогою мови сценаріїв Bash без потреби в меню чи вікнах.
340
Знайшли помилку?
Якщо ви знайшли помилку, зробіть скріншот і надішліть його боту.