Спам скрипти на Python

31 березня 2023 2 хвилин

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

Прочитавши в Вікіпедії визначення скрипта я зовсім розгубився. Ось він – віртуальний світ відірваний від реальності. Насправді, як мені здається, все набагато простіше. Скрипт – це програма або самостійна частина якоїсь програми (підпрограми) здатні виконувати певні дії по заданій послідовності. Розглянемо на прикладі: Завдання: Маша візьми гроші і сходи в магазин за хлібом. Мета: Хліб. Об’єкт: Маша. Сценарій дій: візьми гроші і сходи в магазин (ось це і буде наш скрипт). Виходить наступне: Маша [скрипт] за хлібом. Міняємо мета: Маша [скрипт] за комп’ютером. Міняємо мета і об’єкт: Петя [скрипт] за цукерками. Ну, що, тепер зрозуміло, що таке скрипт? Спамери створюють свої спам-скрипти з метою, щоб виконати якусь дію без вашого відома, наприклад відправити частину ваших персональних даних, перемісти вас на інший сайт або у випадку фішингу виманити персональні чи конфіденційні дані. Коротше кажучи, спам скрипт це набір інструкцій які виконуються у фоновому режимі (без відома користувача). В сучасному житті і в мережі досить часто можна зустріти слово бот, особливо коли це стосується спаму.

Бот (спам бот) – це скрипт програма, яка створена з метою виконання певної функції, у випадку спаму. Спам надає сценарії, які об’єднують функції, доступні у Python. Очікується, що вони будуть викликані з командного рядка (після активації вашого віртуального середовища). Усі сценарії повідомлять про всі свої параметри з коротким поясненням, якщо їх просто запустити за допомогою – -help . Майже всі скрипти приймають зображення у формі одного файлу TIFF для кожного стану. Якщо ваші 3D-дані мають форму серії фрагментів, збережіть їх як один файл 3D TIFF. Найрозповсюдженіші скриптові мови програмування: JavaScript; Python; PHP; Ruby; PERL;  GROOVY;  BASH;  POWERSHELL.

Спам

Давайте розглянемо що таке спам. Отже, спам це масова розсилання кореспонденції рекламного характеру чи іншого характеру, особам що не виявляли бажання її отримувати.

Способи поширення:

⦁ Електронна пошта
⦁ Месенджери (Telegram, Viber, Watsup… )
⦁ Підміна інтернет-трафіку
⦁ SMS-повідомлення
⦁ Телефонні дзвінки

Види спаму:

⦁ Реклама
⦁ Фішинг
⦁ Релігійні розсилання
⦁ Масове розсилання з метою виведення системи із ладу (DDoS)
⦁ Масове розсилання від імені іншої особи(з вірусньою)

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

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

Крок 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 є об’єктом типу SMTP. Це можна переконатися, якщо ввести ім’я змінної в консоль і підтвердити введення. На екрані з’явиться адреса її осередку пам’яті та тип (за умови, що ви ввели попередню команду правильно). Змінну smtpObj можна назвати, як завгодно, аби це було допустиме в Python ім’я змінної.

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

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

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

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

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

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

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

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

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

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

Для цього потрібно просто ввести таку команду:

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

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

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

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

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

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

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

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

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

2) Тепер потрібно підключити телефон до тестового середовища WhatsApp Sandbox і можна починати отримувати повідомлення. Перейдемо до бета-версії WhatsApp у розділі навчання консолі

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

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

1)  Завантажте репозиторій 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, для нашої маленької задачі було б марною витратою обчислювальних ресурсів і фінансів. Адже тут наша лямбда-функція виконуватиметься щодня протягом малого проміжку часу в момент активації даного тригера. Сам собою сервіс лямбда недорогий і дає мільйон запитів на місяць безкоштовно.

1) Увійдіть на https://aws.amazon.com. Потім натисніть на Services -> Compute -> Lambda -> create a function

 

2) Надамо назву нашої функції. Вибираємо кращим середовищем Python 3.6.

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


3) У блоці коду функцій вказуємо обробнику лямбда-функції, чого ми від нього хочемо:

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

4) Тут треба створити нове правило.

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

5) Після закінчення переконайтеся, що у квадратику Enable trigger (активувати тригер) стоїть галочка. Тепер натисніть кнопку Add (Додати).

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

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

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

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

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

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

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