Allarme intrusi
Essenzialmente ricevi un messaggio in telegram per ogni tentativo di accesso fallito al tuo sistema. Funziona con ogni tipo di login, SSH compreso. E ti da anche una foto dell’aggressore (da webcam).
come funziona
Grazie alla modularità di PAM, è facile integrare i propri script. Questo script acquisisce un’immagine dalla webcam e manda un messaggio usando telegram, accompagnato dalla foto appena acquisita.
Lo script è fatto in python e grazie ad alcune librerie è veramente semplice.
Se la tua webcam ha un LED di attività, questo lampeggia solo per una frazione di secondo, è veramente improbabile che l’intruso lo noti.
prerequisiti
Come ho detto, abbiamo bisogno di alcune librerie di python, molte delle quali sono già incluse dell’installazione di deafult. Con un’eccezione:
1pip install telepot
Abbiamo anche bisogno di due binari esterni, i quali molto probabilmente sono già installati nel tuo sistema:
1apt install coreutils ffmpeg
Come sempre, questa era facile.
configurazione di PAM
Al momento, questa è l’unica parte “sporca” di tutta la cosa: devo ancora guardare se c’è un modo migliore per effettuare l’integrazione con PAM. Per ora, “funziona”.
Modifica /etc/pam.d/common-auth
, cerca la linea contenente questo testo:
1auth requisite pam_deny.so
e modifica la linea appena sopra, cambiando “success=1” in “success=2”; poi inserisci questa nuova linea (sempre prima della riga con “pam_deny”):
1auth [default=ignore] pam_exec.so seteuid /usr/local/bin/badlogin.py
Assumiamo che il nostro script sarà posizionato in /usr/local/bin/badlogin.py
. Non serve riavviare alcun servizio nè riavviare il computer.
Per riferimento, il file risultante dovrebbe essere qualcosa del genere (al netto dei commenti):
1auth [success=2 default=ignore] pam_unix.so nullok_secure
2auth [default=ignore] pam_exec.so seteuid /usr/local/bin/badlogin.py
3auth requisite pam_deny.so
4auth required pam_permit.so
5auth optional pam_ecryptfs.so unwrap
6auth optional pam_cap.so
lo script
Da mettere in /usr/local/bin/badlogin.py
:
1#!/usr/bin/python
2
3import telepot
4import subprocess
5import os
6
7bottoken = 'XXXXXXXXXXXXXXX'
8
9chat = 1111111111
10
11temp = subprocess.check_output(["mktemp", "tmp.XXX.jpg"]).rstrip()
12
13subprocess.call(["ffmpeg","-f", "video4linux2", "-s", "vga", "-i", "/dev/video0", "-vframes", "1", "-y", temp])
14
15# initialize telegram bot connection
16bot = telepot.Bot(bottoken);
17bot.sendMessage(chat, 'Failed login!!!')
18bot.sendPhoto(chat, open(temp, 'rb'))
19
20os.remove(temp)
E non dimenticare di fare chmod 755 /usr/local/bin/badlogin.py
.
Due cose mancano ora: il bot-token e la chat-id. Li vedremo entrambi dopo. Per ora guardiamo il codice:
- prima di tutto, importiamo delle librerie, e indichiamo le due variabili di cui sopra
- poi si chiama “mktemp”, il quale creerà un file temporaneo (il cui nome finisce in .jpg, questo è importante)
- dopodichè si chiama un altro binario esterno: ffmpeg. Questo è responsabile della cattura dell’istantanea e del salvataggio nel nostro file temporaneo (riscrivendolo)
- poi arriva la roba di telegram: inizializzazione del bot, invio del messaggio di testo e dell’immagine
- pulizia del file temporaneo
setup del bot telegram
Apri Telegram sul tuo PC o sullo smartphone e apri una chat con @botfather:
1/newbot
Ti chiederà un nome per il tuo bot. Chiamalo come vuoi (basta che finisca con ‘bot’)
1@my_new_auth_bot
Botfather ti darà il bot-token. Mettilo nello script, al posto di ‘XXXXXXXXXXXXXXX’.
1/setprivacy
Abilita la privacy per questo bot, per essere sicuri.
Ottenere la chat-id è un pò più macchinoso: il bot deve essere attivo e deve rispondere ai messaggi per questo. Quindi ecco un piccolo script:
1#!/usr/bin/python
2import time
3import telepot
4
5bottoken = 'XXXXXXXXXXXXXXX'
6
7def handle(msg):
8 content_type, chat_type, chat_id = telepot.glance(msg)
9 print (chat_id)
10
11bot = telepot.Bot(bottoken);
12bot.message_loop(handle)
13# Keep the program running. CTRL+C to stop
14while 1:
15 time.sleep(10)
Metti il token al posto giusto ed esegui lo script: il bot comincerà ad ascoltare, basta mandargli (col tuo client telegram) un messaggio con scritto:
1/start
e lui stamperà su console la chat-id. Quando hai segnato quel numero, premi CTRL+C per fermare il programma e buttalo via. Metti la chat-id nel posto giusto nello script finale e sei a posto.
Divertiti!
miglioramenti futuri
- migliore integrazione con PAM (non è elegante toccare la configurazione di sistema di PAM, è meglio aggiungere la nostra in un file a parte)
- setup del bot telegram
- controllare che la webcam sia disponibile prima di fare la foto
- screenshot di quanto c’è effettivamente su schermo
- file di configurazione
- pacchetto .deb
- usare qualcosa di integrato in python al posto di mktemp
- usare la libreria ffmpeg di python al posto di ffmpeg