Asterisk: SIP-Scanner-Blacklist für Iptables selbst erstellt

28. Februar 2023

Da mir Tools für die automatische Beschaffung und Verwaltung von SIP-Scanner-Blacklisten  zu unsicher sind und sie das System im schlimmsten Fall beschädigen können, bin ich dazu übergegangen mir die Blacklisten selbst zu erstellen. Mit entsprechenden Python-Skripten beschränkt sich der wöchentliche Aufwand nur auf ein paar Minuten.

Auf https://www.kwancro.com/honeypotdata/ werden dankenswerterweise im Lisen von schädlichen IP-Adressen und und SIP-Scanner aktualisiert und veröffentlich, die wir uns mit Copy and Paste in eine TXT-Datei kopieren können, um sie in Iptables des zu schützenden SIP-Servers zu übertragen, der in meinem Fall auf einem Raspberry Pi mit Raspbian als Linux-Betriebssystem betrieben wird.

Screenshot von https://www.kwancro.com/honeypotdata/

Der obige Screenshot befindet sich z.B. auf Source IPs, 7 days. Die Liste der IP-Adressen können wir für die Aktualisierung unserer Blacklist mit Copy and Paste herauskopieren. Allerdings ist das Ergebnis zweispaltig:

45.93.16.128	84348
23.226.128.19	78978
2.57.121.78	65934
45.93.16.73	27649
89.22.120.227	24408
45.134.144.111	10367
195.154.54.249	8184
185.225.209.17	7432
174.138.185.10	7324
70.34.199.194	4341
157.90.21.27	4262
185.225.209.16	2828
151.106.38.130	2708
95.216.21.57	2705
151.106.32.136	2611

Für die Weiterverarbeitung ist es wichtig, dass diese Liste keine Leerzeilen enthält und jede Zeile aus zwei Strings besteht. Dann können wir sie in eine TXT-Datei kopieren, die wir kwancro.txt nennen. Um die störende rechte Spalte zu entfernen, nutzen wir ein kleines Python-Skript, das ich kwancro.py genannt habe:

#!/usr/bin/env python

with open('/etc/asterisk/sipblacklist/kwancro.txt', 'r') as f:
    for line in f:
        line = line.strip().split()[0]
        print("iptables -A INPUT -s " + line + " -j DROP")

Auf unserem Asterisk-Server legen wir einen neuen Ordner /etc/asterisk/sipblacklist/ an und kopieren diese kwancro.py und die kwancro.txt in diesen Ordner. Wichtig ist, dass die kwancro.py ausführbar ist und wenn sie auf Windows editiert worden ist, entsprechend umgewandelt worden ist. Das geht zum Beispiel mit den Befehlen wie folgt. Eventuell müssen wir vorher noch mit “sudo apt install dos2unix” dos2unix installieren. Dos2unix ist nur notwendig, wenn Dateien auf Windows erzeugt wurden:

sudo dos2unix /etc/asterisk/sipblacklist/kwancro.py
sudo chmod 777 /etc/asterisk/sipblacklist/kwancro.py

Jetzt legen wir noch eine Bash-Datei namens kwancro.sh an, die ebenfalls in denselben Ordner unterzubringen ist:

#!/bin/bash

sudo dos2unix /etc/asterisk/sipblacklist/kwancro.txt
sudo chmod 777 /etc/asterisk/sipblacklist/kwancro.txt
sudo python /etc/asterisk/sipblacklist/kwancro.py

Wir haben nun unsere zweispaltige kwancro.txt auf Linux oder Windows erzeugt und schieben sie nun den besagten Ordner /etc/asterisk/sipblacklist/ und können dabei eventuell die alte kwancro.txt überschreiben.

Nun führen wir in der Linux-Kommandozeileneingabe folgenden Befehl aus:

sudo bash /etc/asterisk/sipblacklist/kwancro.sh

und schwups werden aus der der Liste der kwancro.txt Zeile für Zeile Befehle für Iptables generiert:

root@raspberrypi:/home/pi# sudo bash /etc/asterisk/sipblacklist/kwancro.sh
dos2unix: Datei /etc/asterisk/sipblacklist/kwancro.txt wird ins Unix-Format umgewandelt …
iptables -A INPUT -s 23.226.128.19 -j DROP
iptables -A INPUT -s 174.138.185.10 -j DROP
iptables -A INPUT -s 74.50.91.234 -j DROP
iptables -A INPUT -s 89.22.120.227 -j DROP
iptables -A INPUT -s 45.134.144.111 -j DROP
iptables -A INPUT -s 195.154.54.249 -j DROP
iptables -A INPUT -s 128.90.102.26 -j DROP
iptables -A INPUT -s 128.90.200.40 -j DROP
iptables -A INPUT -s 128.90.158.4 -j DROP
iptables -A INPUT -s 128.90.167.237 -j DROP
iptables -A INPUT -s 178.208.167.16 -j DROP
iptables -A INPUT -s 128.90.174.120 -j DROP
iptables -A INPUT -s 128.90.160.46 -j DROP
root@raspberrypi:/home/pi#

Dadurch sind diese IPs von Iptables gesperrt.

Das gleiche Verfahren funktioniert nach dem gleichen Prinzip auch mit SIP-Scannern, wenn wir auf “User agent used” eine Liste herauskopieren:

8001	142
MGKsip%20release%201110	65934
3CXPhoneSystem	9570
PBX	4268
PolycomSoundPointIP[space]SPIP_550[space]UA[space]3.3.2.0413	3202
Asterisk[space]PBX	2908
Avaya%20IP%20Phone%201120E	2774
pplsip	1567
DentalKeramik	586
Cisco[space]SPA	265
Linksys-SPA942	245
friendly-scanner	112
PPtpPbxCisco12345	79
Cisco/SPA112-1.4.1(SR5)	72
-	42

Diese ist ebenfalls zweispaltig, wenn man genau hinschaut. Diese Liste kopieren wir in eine Datei namens sipcanner.txt und lassen sie von einer sipscanner.py bearbeiten:

#!/usr/bin/env python3

with open('/etc/asterisk/sipblacklist/sipscanner.txt', 'r') as f:
    for line in f:
        data = line.strip().split()
        keyword = data[0]
        print('iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "%s" --algo bm' % keyword)

Dazu nutzen wir die sipscanner.sh

#!/bin/bash

sudo dos2unix /etc/asterisk/sipblacklist/sipscanner.txt
sudo chmod 777 /etc/asterisk/sipblacklist/sipscanner.txt
sudo python /etc/asterisk/sipblacklist/sipscanner.py

und führen sie mit

sudo bash /etc/asterisk/sipblacklist/sipscanner.sh

aus:

root@raspberrypi:/home/pi# sudo bash /etc/asterisk/sipblacklist/sipscanner.sh
dos2unix: Datei /etc/asterisk/sipblacklist/sipscanner.txt wird ins Unix-Format umgewandelt …
dos2unix: Datei /etc/asterisk/sipblacklist/sipscanner.py wird ins Unix-Format umgewandelt …
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "Avaya%20IP%20Phone%201120E" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "Asterisk[space]PBX" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "pbx" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "Linksys-SPA942" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "Auerswald%20COMpact%205000R%20sofia-sip/1.12.11" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "friendly-scanner" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "pplsip" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "FXS_GW%20(3504a_114_0225.bin)" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "Z%203.14.38765%20rv2.8.3" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "8001" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "MGKsip%20release%201110" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "3CXPhoneSystem" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "PBX" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "PolycomSoundPointIP[space]SPIP_550[space]UA[space]3.3.2.0413" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "Asterisk[space]PBX" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "Avaya%20IP%20Phone%201120E" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "pplsip" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "DentalKeramik" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "Cisco[space]SPA" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "Linksys-SPA942" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "friendly-scanner" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "PPtpPbxCisco12345" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "Cisco/SPA112-1.4.1(SR5)" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "-" --algo bm
root@raspberrypi:/home/pi#

Und auf einen Schlag sind jede Menge SIP-Scanner in Iptables gesperrt.

APIBAN: Dieser kostenlose Dienst aktualisiert  IpTables regelmäßig und löscht ältere Einträge. Er nutzt die Daten, welche auf Kwancro zur Verfügung gestellt werden.

https://www.apiban.org

https://github.com/palner/apiban/tree/master/clients/go

Getestet habe ich Apiban noch nicht. Dies will ich zur Sicherheit auf einem getrennten System nachholen. Und dann werde ich darüber berichten.

Verwandte Themen:

Liste der von Iptables gesperrter SIP-Scanner
SIP-Scanner blockieren, die Fail2Ban nicht entdecken kann – 17.1.2022: Wenn im Asterisk-CLI Meldungen wie “Timeout on … on non-critical invite transaction.” als “WARNING” auftreten, handelt es sich meistens um einen Angriff durch einen SIP-Scanner. Sie sind für Betreiber von Asterisk-Servern eine Gefahr, da Fail2Ban oft nicht in der Lage ist diese unerwünschten Eindringlinge zu blockieren. Manchmal treten die Attacken der SIP-Scanner massenhaft auf und können sogar den Betrieb eines Asterisk-Servers empfindlich stören. Nachfolgend eine Lösung ohne Einsatz nicht ausreichend getesteter Skripte, die den Asterisk-Server eventuell zum Abstürzen bringen könnten. – weiter

 

Fail2Ban bietet bereits vorgefertigte Regeln für dem Schutz eines Asterisk-Servers an.
Fail2Ban für Asterisk installieren und konfigurieren – 28. Februar 2023: Fail2Ban ist ein Programm, das auf einem Server läuft und Log-Dateien von Asterisk überwacht, um ungewöhnliche Aktivitäten aufzuspüren und diese in Echtzeit zu blockieren. Es ist ein wichtiger Bestandteil der Sicherheitsstrategie, da es verhindert, dass unauthorisierte Nutzer auf den Asterisk-Server zugreifen und somit sensible Daten oder Dienste manipulieren oder zerstören. Fail2Ban minimiert das Risiko von Angriffen auf Asterisk, indem es potenzielle Bedrohungen schnell erkennt und automatisch blockiert, bevor sie Schaden anrichten können. – weiter

Auf einem Raspberry Pi lässt sich ein kompletter Telefonserver betreiben, der seinen Teilnehmern über Landesgrenzen hinweg kostenloses Telefonieren von unterwegs oder daheim ermöglicht.
Asterisk-Telefonserver auf einem Raspberry Pi – Installation, Konfiguration, Programmierung, SIP, IAX2, AGI-Skripte, Sicherheit und Tipps zum praktischen Betrieb – 2.11.2022: Diese Seite richtet sich an jene, welche einen Asterisk-Telefon-Server auf einem Raspberry Pi betreiben möchten und später ein kleines Netzwerk aus Asterisk-Servern planen, um ein eigenständiges Telefonnetz aufzubauen. Los geht es mit der Installation von Raspbian und Asterisk auf einem Raspberry Pi und dann nach Lust und Laune immer tiefer in die Programmierung von Asterisk. Die Themen werden laufend erweitert.

Selbstverständlich muss es nicht unbedingt ein Raspberry Pi sein. Andere Linux-Rechner gehen auch. – weiter