Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ban automatico di cryptocurrency spam bot #66

Open
mebeim opened this issue Aug 26, 2019 · 1 comment
Open

Ban automatico di cryptocurrency spam bot #66

mebeim opened this issue Aug 26, 2019 · 1 comment

Comments

@mebeim
Copy link
Contributor

mebeim commented Aug 26, 2019

Sempre più bot entrano nel canale solamente per postare link di spam/phishing relativi a qualche sito malevolo che ha a che fare con qualche cryptocurrency. Esempio più comune: una foto seguita da un link che il è spesso nel formato http[s]://t.cn/... o http[s]://tinyurl.com....

image

La quantità di bot di questo genere sembra essere non insignificante e suppongo che sia difficile e noioso gestire a mano la cosa. L'aggiunta al bot di una funzionalità di controllo dei messaggi dei nuovi utenti ed eventuale ban istantaneo dei bot sarebbe una ottima feature.

Come funzionano gli spam bot

Un bot del genere solitamente opera così:

  1. Entra nel gruppo, ed aspetta un po' (minuti, secondi).
  2. Invia nel gruppo una foto apparentemente normale.
  3. Invia nel gruppo un messaggio contenente testo casuale.
  4. Modifica la foto nel messaggio del punto 2 cambiandola con una foto contenente spam, come mostrato sopra.
  5. Modifica il testo del messaggio del punto 3 cambiandolo con un link di spam/phishing, come mostrato sopra.

I punti 2, 3, 4, 5 sono più o meno interscambiabili a patto che ovviamente 2 avvenga prima di 4 e 3 avvenga prima di 5.

Come contrastarli

Non conosco la API fornita dalla specifica libreria Python utilizzata in questo bot, ma conosco la API Telegram, quindi parlerò basandomi sulla seconda. La libreria Python utilizzata dice di supportare completamente la Telegram Bot API 4.1, quindi il modo di fare quel che dico dovrebbe esserci, e non dovrebbe neanche essere difficile da capire.

Cosa andrebbe fatto:

  1. Ogni messaggio ricevuto, controllare il campo new_chat_members dell'oggetto Message, aggiungendo l'ID di tutti i nuovi utenti ad un set di watchlist. Gli utenti in questo set avranno associato un contatore del numero di messaggi inviati nel gruppo (inizialmente settato a zero) ed una data dell'ultima interazione (inizialmente settata al momento di entrata nel gruppo).

  2. Ogni messaggio ricevuto, controllare se il messaggio è stato inviato da uno degli utenti nel set di watchlist.

  3. Se l'utente è nel set:

    3.1. Incrementare il contatore: se il contatore supera una certa soglia (direi >= 3), eliminare l'utente dalla watchlist. I bot solitamente inviano i primi due messaggi contenenti spam, poi basta.

    3.2. Se è passato abbastanza tempo dall'ultima interazione (1h? 3h? da definire), eliminare l'utente dalla watchlist. I bot solitamente operano nel giro di pochi minuti/secondi di tempo dall'entrata nel gruppo.

    3.3. Se il messaggio contiene una foto (campo photo), una possibile azione potrebbe essere il ban istantaneo (e rimozione da watchlist), inviando poi un messaggio privato di default all'utente spiegando il motivo del ban. Nessuno invia foto appena entrato in un gruppo, questo potrebbe essere un buon metodo di riconoscere bot.

    3.4. Se il messaggio contiene del testo (campo text), controllare il testo per URL della forma http[s]://t.cn/... o http[s]://tinyurl.com... ed in tal caso bannare l'utente allo stesso modo del punto 3.3 (e rimuovere da watchlist).

    3.5. Se il messaggio contiene una edit di una photo (campo new_chat_photo), stessa azione del punto 3.3.

    3.6. Se il messaggio è una edit del testo (campo edit_date diverso da date), stessa azione del punto 3.4.

  4. In ogni caso, è necessario avere una seconda funzione che controlli gli utenti nella watchlist ogni TOT ed elimini dalla watchlist gli utenti che hanno una ultima interazione abbastanza vecchia, così da non riempire la watchlist (e quindi anche la RAM) di utenti che sono nel gruppo solo per leggere e non mandano messaggi. Questo potrebbe essere aggiunto all'handler dei messaggi di default.

@MattNot
Copy link

MattNot commented Oct 9, 2019

Non basterebbe obbligare tutti gli utenti a scrivere un messaggio contenente "Ciao a tutta ItalyInformatica" entro... non so, 3h? E se il primo messaggio non è questo kick e dopo 2 kick: ban
Basterebbe aggiungere un messaggio di benvenuto per avvertire

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants