
SentryPeer v4.0.5
Distributed SIP-Honeypot, der Betrugsdaten zu VoIP-Angriffen erkennt und teilt. Sammelt IP-Adressen und Telefonnummern böswilliger Akteure über ein Peer-to-Peer-Netzwerk, mit REST-API- und WebHook-Integration für Echtzeit-Bedrohungsinformationen.
Schützen Sie Ihre SIP-Server vor böswilligen Akteuren
Besonderer Dank geht an die Deutsche Telekom Security GmbH für die Unterstützung! Sehr nett!
Warum geben Sie uns nicht einen Stern und folgen uns auf Twitter!
Inhaltsverzeichnis
- Einleitung
- Übersicht
- Funktionen
- Vorträge
- Übernahme
- Design
- Docker
- Installation
- SentryPeer ausführen
- WebHook
- RESTful-API
- Syslog und Fail2ban
- JSON-Log-Format
- Befehlszeilenoptionen
- IPv6-Multicast-Adresse
- Lizenz
- Mitwirken
- Projekt-Website
- Markenrecht
- Fragen, Fehlerberichte, Funktionsanfragen
- Besonderer Dank
- Sponsoring
Einleitung
SentryPeer® ist ein Tool zur Betrugserkennung. Es lässt böswillige Akteure versuchen, Telefonanrufe zu tätigen, und speichert die IP-Adresse, von der sie kamen, sowie die Nummer, die sie zu erreichen versuchten. Diese Details können dann genutzt werden, um Benachrichtigungen im Netzwerk des Dienstanbieters auszulösen, und wenn ein Benutzer/Kunde das nächste Mal versucht, eine gesammelte Nummer anzurufen, können Sie nach eigenem Ermessen handeln.
Zum Beispiel:
Angenommen, Sie betreiben vor Ort Ihre eigene VoIP-TK-Anlage. In diesem Zusammenhang ermöglicht Ihnen SentryPeer, in die Liste der Telefonnummern (mithilfe der RESTful-API) einzutauchen, wenn Ihre Benutzer ausgehende Anrufe tätigen. Wenn Sie einen Treffer erzielen, erhalten Sie einen Hinweis, dass möglicherweise ein Gerät in Ihrem Netzwerk versucht, bekannte Testrufnummern anzurufen, die entweder:
- Von SentryPeer-Knoten gesammelte Nummern, die Sie selbst betreiben
- Nummern, die von anderen SentryPeer-Knoten gesehen und über das Peer-to-Peer-Netzwerk auf Ihren Knoten repliziert wurden
Dies würde es Ihnen ermöglichen, eine Benachrichtigung von Ihren Überwachungssystemen zu generieren, bevor teure Anrufe anfallen oder etwas Schlimmeres passiert.
Was würde zu diesem Szenario führen?
- Potenzieller Voicemail-Betrug. Dies kann passieren, wenn Sie zulassen, dass eine eingehende Nummer (Ihre DID/DDI) Ihr Voicemail-System erreicht, und dann nach einer PIN gefragt wird. Diese PIN ist schwach und das Voicemail-System erlaubt es, '*' zu drücken, um die Rufnummer des Anrufers zurückzurufen, der eine Voicemail hinterlassen hat. Der Angreifer hat eine Voicemail hinterlassen, errät dann Ihre PIN und ruft sie zurück. Die CLI ist eine bekannte Nummer, die SentryPeer gesehen hat. Sie können einen Alarm darauf auslösen.
- Ein Gerät wurde gekapert und/oder ein Softphone oder Ähnliches verwendet die aus der GUI des Telefons gestohlenen Anmeldeinformationen und versucht, sich in Ihrem System zu registrieren und Anrufe zu einer von SentryPeer gesehenen Nummer zu tätigen.
- Ein ahnungsloser Benutzer ruft eine Phishing-Nummer oder eine bekannte teure Nummer usw. an, die SentryPeer bereits gesehen hat.
Traditionell werden diese Daten an einen zentralen Ort gesendet, sodass Sie die von Ihnen gesammelten Daten nicht besitzen. Bei diesem Projekt geht es um die Peer-to-Peer-Weitergabe dieser Daten. Der Benutzer besitzt die Daten und verschiedene Dienstanbieter-/Netzbetreiber-bezogene Datenfeeds sind für mich der entscheidende Punkt. Ich habe genug von all den Diensten da draußen, die sie behalten und verkaufen. Wenn Sie sie gesammelt haben, sollten Sie die Wahl haben, sie zu behalten und/oder sich dafür zu entscheiden, sie über p2p-Methoden mit anderen SentryPeer-Community-Mitgliedern zu teilen.
Übersicht
SentryPeer-Knoten
Hier verwenden wir Mermaid-Sequenzdiagramme, um den Datenfluss von einem SentryPeer-Knoten zu SentryPeerHQ darzustellen.```mermaid
sequenceDiagram
actor A as Attacker
participant S as SentryPeer Node
participant DS as Data Store
participant W as WebHook
Endpoint
Note over DS: sqlite/json log/syslog
(if enabled)
Note over W: if enabled
A->>S: SIP probe OPTIONS/REGISTER/etc
S->>DS: Save event
S->>W: Send event
W->>S: 200 OK
S->>A: 200 OK
A->>S: INVITE sip:00046500729221@
#### SentryPeer Node zu SentryPeerHQ```mermaid
sequenceDiagram
actor A as Attacker
participant S as SentryPeer Node
participant DS as Data Store
participant HQ as SentryPeerHQ
Note over DS: sqlite/json log/syslog (if enabled)
Note over HQ: OAuth2 creds required.<br/> if using https://sentrypeer.com
A->>S: SIP probe OPTIONS/REGISTER/etc
S->>DS: Save event
S->>HQ: Send event
HQ->>S: 201 Created
S->>A: 200 OK
A->>S: INVITE sip:00046500729221@
Verwendung des SentryPeer Node und der SentryPeerHQ API```mermaid
sequenceDiagram Actor U as User participant S as SentryPeer Node/HQ API Note over S: if enabled U->>S: GET /numbers S->>U: 200 OK Return all Phone numbers seen in database
#### Integration mit eigenen Systemen```mermaid
sequenceDiagram
participant D as Device
participant P as PBX/ITSP/Carrier
participant HQ as SentryPeer Node/HQ API
participant N as NOC
Note over P: Integration with <br/>SentryPeer needed
Note over N: Consumes alerts
Note over HQ: OAuth2 creds required<br/> if using SentryPeerHQ
Note over P,HQ: API rate limiting if using SentryPeerHQ
D->>P: SIP INVITE
P->>HQ: Have you seen attackers call this number?
HQ->>P: Yes, this has been seen on SentryPeer Nodes
HQ->>N: WebHook/Email/Slack
Note over HQ,N: Only if using SentryPeerHQ
P->>D: I'm blocking this call. Sorry
🚧 Funktionen
- Der gesamte Code ist Freie/Libre und Open Source Software
- SCHNELL
- Der Benutzer besitzt seine Daten
- Der Benutzer kann seine eigenen Daten einreichen, wenn er möchte (dazu muss der p2p-Modus aktiviert werden -
-p) - Der Benutzer erhält die Daten anderer Benutzer NUR DANN, wenn er sich dafür entscheidet, seine Daten in den Pool einzubringen
- Eingebetteter Distributed-Hash-Table (DHT)-Knoten unter Verwendung von OpenDHT (
-pCLI-Option) - Peer-to-Peer-Freigabe gesammelter böswilliger Akteure unter Verwendung von OpenDHT (standardmäßig deaktiviert)
- Peer-to-Peer-Datenreplikation zum Empfangen gesammelter böswilliger Akteure unter Verwendung von OpenDHT (standardmäßig deaktiviert)
- Eigener DHT-Bootstrap-Knoten einstellbar (
-bCLI-Option) - Multithreading
- UDP-Transport
- TCP-Transport
- TLS-Transport
- JSON-Protokollierung in eine Datei
- SIP-Modus kann deaktiviert werden. Dies erlaubt es, SentryPeer im API-Modus oder DHT-Modus usw. zu betreiben, d.h. nicht als Honigtopf, sondern als Knoten in der SentryPeer-Community oder um nur replizierte Daten bereitzustellen
- SIP-Responsive-Modus kann aktiviert werden, um Daten zu sammeln – CLI/Umgebungs-Flag
- Lokale Datenkopie für schnellen Zugriff – CLI/Umgebungs-DB-Standort-Flag
- Lokale API für schnellen Zugriff – CLI/Umgebungs-Flag
- WebHook zum POSTEN von böswilliger-Akteur-JSON an einen zentralen Ort – CLI/Umgebungs-Flag
- Integration mit SentryPeerHQ über OAuth2-Bearer-Token
- Abfrage-API für IP-Adressen böswilliger Akteure
- Abfrage-API für IPSET böswilliger Akteure
- Abfrage-API für eine bestimmte IP-Adresse eines böswilligen Akteurs
- Abfrage-API für versuchte, von böswilligen Akteuren angerufene Telefonnummern
- Abfrage-API für eine versuchte, von einem böswilligen Akteur angerufene Telefonnummer
- Fail2Ban-Unterstützung über
sysloggemäß Feature-Anfrage - Lokale sqlite-Datenbank – Feature/CLI-Flag
- Analyse – opt-in
- SDKs/Bibliotheken für externen Zugriff – zunächst CGRateS oder eine eigene Firewall mit nftables
- Kleine Binärgröße für IoT-Nutzung
- Plattformübergreifend
- Firewall-Optionen zur Nutzung verteilter Daten in Echtzeit
- Container auf Docker Hub für den aktuellen Build
- BGP-Agent zur Peering für Blackholing gesammelter IP-Adressen (ähnlich dem Team Cymru Bogon Router Server Project)
- SIP-Agent zur Rückgabe von 404 oder Standardziel für SIP-Weiterleitungen
Vorträge
- ClueCon Weekly 2023 – https://www.youtube.com/watch?v=iuN_MtVfT6g
- UKNOF49 2022 (Präsentationsfolien) – https://indico.uknof.org.uk/event/59/contributions/801/
- ClueCon Weekly 2022 – https://youtu.be/DFxGHJI_0Wg
- CommCon 2021 – https://2021.commcon.xyz/talks/sentrypeer-a-distributed-peer-to-peer-list-of-bad-ip-addresses-and-phone-numbers-collected-via-a-sip-honeypot
- TADSummit 2021 – https://blog.tadsummit.com/2021/11/17/sentrypeer/
Verbreitung
- Kali Linux
- Deutsche Telekom T-Pot – Die All-in-One-Honigtopf-Plattform ab v22
Design
Ich habe dies begonnen, weil ich C-Netzwerkprogrammierung machen wollte, da alle Projekte, die ich täglich nutze, in C geschrieben sind, wie PostgreSQL, OpenLDAP, FreeSWITCH, OpenSIPS, Asterisk usw. Siehe Episode 414: Jens Gustedt on Modern C für Gründe, warum C eine gute Wahl ist. Für Interessierte: Meine vollständige Podcast-Showliste (https://www.se-radio.net/team/gavin-henry/) von Software Engineering Radio
Docker
Sie können die neueste Version von SentryPeer mit Docker ausführen. Die neueste Version ist auf Docker Hub verfügbar. Oder selbst bauen:
sudo docker build --no-cache -t sentrypeer .
sudo docker run -d -p 5060:5060/tcp -p 5061:5061/tcp -p 5060:5060/udp -p 8082:8082 -p 4222:4222/udp sentrypeer:latest
Dann können Sie unter http://localhost:8082/ip-addresses und http://localhost:8082/health-check prüfen, ob es läuft.
Umgebungsvariablen
ENV SENTRYPEER_CONFIG_FILE=/my/location/sentrypeer.toml
ENV SENTRYPEER_DB_FILE=/my/location/sentrypeer.db
ENV SENTRYPEER_API=1
ENV SENTRYPEER_WEBHOOK=1
ENV SENTRYPEER_WEBHOOK_URL=https://my.webhook.url/events
ENV SENTRYPEER_OAUTH2_CLIENT_ID=1234567890
ENV SENTRYPEER_OAUTH2_CLIENT_SECRET=1234567890
ENV SENTRYPEER_SIP_RESPONSIVE=1
ENV SENTRYPEER_SIP_DISABLE=1
ENV SENTRYPEER_SYSLOG=1
ENV SENTRYPEER_PEER_TO_PEER=1
ENV SENTRYPEER_BOOTSTRAP_NODE=mybootstrapnode.com
ENV SENTRYPEER_JSON_LOG=1
ENV SENTRYPEER_JSON_LOG_FILE=/my/location/sentrypeer_json.log
ENV SENTRYPEER_VERBOSE=1
ENV SENTRYPEER_DEBUG=1
ENV SENTRYPEER_CERT=/my/location/sentrypeer-crt.pem
ENV SENTRYPEER_KEY=/my/location/sentrypeer-key.pem
ENV SENTRYPEER_TLS_LISTEN_ADDRESS=0.0.0.0:5061
Setzen Sie diese entweder in der Dockerfile oder in Ihrer Dockerfile.env-Datei oder im docker run-Befehl.
Das Setzen einer dieser Variablen auf 0 wird die Funktion ebenfalls aktivieren. Es ist egal, worauf Sie sie setzen, Hauptsache sie ist gesetzt.
Konfigurationsdatei
Sie können auch eine Konfigurationsdatei verwenden, um bestimmte Dinge einzustellen. Hauptsächlich die TLS-Konfiguration
unten. Der Standardpfad ist ~/.config/sentrypeer/default-config.toml, kann aber
mit der Umgebungsvariablen SENTRYPEER_CONFIG_FILE oder der CLI-Option -g geändert werden.
TLS-Konfiguration
Um Ihre eigenen Zertifikate zu verwenden, können Sie entweder die entsprechenden ENV-Variablen setzen, CLI-Argumente verwenden oder die Konfigurationsdatei nutzen. Beispiel:``` cat ~/.config/sentrypeer/default-config.toml cert = "tests/unit_tests/127.0.0.1.pem" key = "tests/unit_tests/127.0.0.1-key.pem" tls_listen_address = "0.0.0.0:5061"
Wenn Sie diese nicht setzen, wird automatisch ein Zertifikat für localhost in dem Verzeichnis erstellt, aus dem sentrypeer ausgeführt wird, und es werden eine `cert.pem`- und eine `key.pem`-Datei erstellt.
### Installation
Debian- oder Fedora-Pakete sind immer auf der Release-Seite für die aktuelle Version von SentryPeer verfügbar:
https://github.com/SentryPeer/SentryPeer/releases
#### Homebrew (macOS oder Linux):
Wir haben einen [Homebrew Tap für dieses Projekt](https://github.com/SentryPeer/homebrew-sentrypeer) (bis wir beliebter werden):
brew tap sentrypeer/sentrypeer
brew install sentrypeer
#### Alpine Linux:
SentryPeer befindet sich in [Testing auf Alpine Linux](https://gitlab.alpinelinux.org/alpine/aports/-/tree/master/testing/sentrypeer), daher können Sie es mit folgendem Befehl installieren:
apk -U add --no-cache -X https://dl-cdn.alpinelinux.org/alpine/edge/testing sentrypeer
#### Ubuntu-Paket
Sie können SentryPeer aus [unserem Ubuntu-PPA](https://launchpad.net/~gavinhenry/+archive/ubuntu/sentrypeer) installieren, das derzeit für Ubuntu 20 LTS (Focal Fossa) verfügbar ist:
sudo apt install software-properties-common
sudo add-apt-repository ppa:gavinhenry/sentrypeer
sudo apt-get update
Dieses PPA kann manuell zu Ihrem System hinzugefügt werden, indem Sie die folgenden Zeilen kopieren und zu Ihren Systemquellen hinzufügen:
deb https://ppa.launchpadcontent.net/gavinhenry/sentrypeer/ubuntu focal main
deb-src https://ppa.launchpadcontent.net/gavinhenry/sentrypeer/ubuntu focal main
Dann können Sie SentryPeer installieren:
sudo apt-get install sentrypeer
#### Aus dem Quellcode erstellen
Sie haben zwei Optionen für die Installation aus dem Quellcode: CMake oder Autotools. Autotools wird derzeit empfohlen. Ein Release ist ein Autotools-Build.
Wenn Sie ein Fedora-Benutzer sind, können Sie dies über [Fedora copr](https://copr.fedorainfracloud.org/coprs/) installieren:
[https://copr.fedorainfracloud.org/coprs/ghenry/SentryPeer/](https://copr.fedorainfracloud.org/coprs/ghenry/SentryPeer/)
Wenn Sie aus diesem Repository erstellen möchten, müssen Sie Folgendes installiert haben:
- `git`, `autoconf`, `automake` und `autoconf-archive` (Debian/Ubuntu)
- `libtool`, `rustc` und `cargo` (Fedora)
- `libosip2-dev` (Debian/Ubuntu) oder `libosip2-devel` (Fedora)
- `libsqlite3-dev` (Debian/Ubuntu) oder `sqlite-devel` (Fedora)
- `uuid-dev` (Debian/Ubuntu) oder `libuuid-devel` (Fedora)
- `libmicrohttpd-dev` (Debian/Ubuntu) oder `libmicrohttpd-devel` (Fedora)
- `libjansson-dev` (Debian/Ubuntu) oder `jansson-devel` (Fedora)
- `libpcre2-dev` (Debian/Ubuntu) oder `pcre2-devel` (Fedora)
- `libcurl-dev` (Debian/Ubuntu) oder `libcurl-devel` (Fedora)
- `libcmocka-dev` (Debian/Ubuntu) oder `libcmocka-devel` (Fedora) – für Unit-Tests
Debian/Ubuntu:
sudo apt-get install git build-essential clang autoconf-archive autoconf \
automake libtool cmake libosip2-dev libsqlite3-dev libcmocka-dev uuid-dev \
libcurl4-openssl-dev libpcre2-dev libjansson-dev libmicrohttpd-dev libclang-dev
Fedora:
sudo dnf install git clang pkg-config autoconf automake autoconf-archive \
libtool libosip2-devel libsqlite3-devel libcmocka-devel libuuid-devel \
libmicrohttpd-devel jansson-devel libcurl-devel pcre2-devel cmake \
clang-libs clang
macOS:
brew install git libtool autoconf automake autoconf-archive libosip cmocka \
libmicrohttpd jansson curl pcre2 pkg-config opendht ossp-uuid cmake
Rust:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
dann (make check wird dringend empfohlen):
./bootstrap.sh
./configure
make
make check
make install
CMake:
cmake -S . -B build -DUNIT_TESTING=ON
cmake --build build
ctest --test-dir build
cmake --install build
### SentryPeer ausführen
Nach dem Erstellen können Sie es wie folgt ausführen, um im **Debug-Modus** zu starten, auf SIP-Probes zu **antworten**, die **RESTful API** zu aktivieren, WebHooks zu aktivieren und die Syslog-Protokollierung zu aktivieren ([verwenden Sie ein Paket](https://github.com/SentryPeer/SentryPeer/releases), wenn Sie [systemd](https://www.freedesktop.org/wiki/Software/systemd/) wünschen):
./sentrypeer -draps
SentryPeer node id: e5ac3a88-3d52-4e84-b70c-b2ce83992d02
Starting sentrypeer...
API mode enabled, starting http daemon...
SIP mode enabled...
Peer to Peer DHT mode enabled...
Starting peer to peer DHT mode using OpenDHT-C lib version '2.4.0'...
Configuring local address...
Creating sockets...
Binding sockets to local address...
Listening for incoming UDP connections...
SIP responsive mode enabled. Will reply to SIP probes...
Listening for incoming TCP connections...
Peer to peer DHT mode started.
DHT InfoHash for key 'bad_actors' is: 14d30143330e2e0e922ed4028a60ff96a59800ad
Bootstrapping the DHT
Waiting 5 seconds for bootstrapping to bootstrap.sentrypeer.org...
Listening for changes to the bad_actors DHT key
Wenn Sie eine Probe-Anfrage erhalten, sehen Sie im Terminal etwa Folgendes:```bash
Received (411 bytes): OPTIONS sip:[email protected] SIP/2.0
Via: SIP/2.0/UDP 91.223.3.152:5173;branch=z9hG4bK-515761064;rport
Content-Length: 0
From: "sipvicious"<sip:[email protected]>;tag=6434396633623535313363340131363131333837383137
Accept: application/sdp
User-Agent: friendly-scanner
To: "sipvicious"<sip:[email protected]>
Contact: sip:[email protected]:5173
CSeq: 1 OPTIONS
Call-ID: 679894155883566215079442
Max-Forwards: 70
read_packet_buf size is: 1024:
read_packet_buf length is: 468:
bytes_received size is: 411:
Bad Actor is:
Event Timestamp: 2021-11-23 20:13:36.427515810
Event UUID: fac3fa20-8c2c-445b-8661-50a70fa9e873
SIP Message: OPTIONS sip:[email protected] SIP/2.0
Via: SIP/2.0/UDP 91.223.3.152:5173;branch=z9hG4bK-515761064;rport
From: "sipvicious" <sip:[email protected]>;tag=6434396633623535313363340131363131333837383137
To: "sipvicious" <sip:[email protected]>
Call-ID: 679894155883566215079442
CSeq: 1 OPTIONS
Contact: <sip:[email protected]:5173>
Accept: application/sdp
User-agent: friendly-scanner
Max-forwards: 70
Content-Length: 0
Source IP: 193.107.216.27
Called Number: 100
SIP Method: OPTIONS
Transport Type: UDP
User Agent: friendly-scanner
Collected Method: responsive
Created by Node Id: fac3fa20-8c2c-445b-8661-50a70fa9e873
SentryPeer db file location is: sentrypeer.db
Destination IP address of UDP packet is: xx.xx.xx.xx
Sie können die Daten in der sqlite3-Datenbank namens sentrypeer.db mit sqlitebrowser oder dem sqlite3-Befehlszeilentool anzeigen.
Hier ist ein Screenshot der Datenbank, geöffnet mit sqlitebrowser (es ist groß, daher verlinke ich nur auf das Bild):
sqlitebrowser beim Erkunden der sentrypeer.db
WebHook
Es gibt einen WebHook, um eine Nutzlast im JSON-Log-Format an SentryPeerHQ oder Ihren eigenen WebHook-Endpunkt zu POSTEN. Der WebHook ist standardmäßig nicht aktiviert. Sie können die WebHook-URL über -w konfigurieren oder die Umgebungsvariable SENTRYPEER_WEBHOOK_URL setzen.
Wenn Sie SentryPeer SaaS verwenden, müssen Sie Ihre Client-ID und Ihr Client-Geheimnis aus dem Dashboard abrufen und die Umgebungsvariablen SENTRYPEER_OAUTH2_CLIENT_ID und SENTRYPEER_OAUTH2_CLIENT_SECRET setzen oder die Flags -i und -c verwenden.
RESTful API
Die RESTful-API ist für die aktuellen Anwendungsfälle vollständig. Bitte klicken Sie auf die Schaltfläche „Watch“, um benachrichtigt zu werden, wenn weitere Dinge herauskommen :-)
Endpunkt /health-check
Abfragen der API, um zu sehen, ob sie aktiv ist:```bash curl -v -H "Content-Type: application/json" http://localhost:8082/health-check
- Connected to localhost (127.0.0.1) port 8082 (#0)
GET /health-check HTTP/1.1 Host: localhost:8082 User-Agent: curl/7.79.1 Accept: / Content-Type: application/json
- Mark bundle as not supporting multiuse < HTTP/1.1 200 OK < Date: Mon, 24 Apr 2022 11:16:25 GMT < Content-Type: application/json < Access-Control-Allow-Origin: * < X-Powered-By: SentryPeer < X-SentryPeer-Version: 1.4.0 < Content-Length: 81 < { "status": "OK", "message": "Hello from SentryPeer!", "version": "1.0.0" }
#### Endpoint /ip-addresses
Liste alle IP-Adressen auf, die von SentryPeer gesehen wurden:```bash
curl -v -H "Content-Type: application/json" http://localhost:8082/ip-addresses
* Connected to localhost (127.0.0.1) port 8082 (#0)
> GET /ip-addresses HTTP/1.1
> Host: localhost:8082
> User-Agent: curl/7.79.1
> Accept: */*
> Content-Type: application/json
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Date: Mon, 24 Jan 2022 11:17:05 GMT
< Content-Type: application/json
< Access-Control-Allow-Origin: *
< X-Powered-By: SentryPeer
< X-SentryPeer-Version: 1.0.0
< Content-Length: 50175
<
{
"ip_addresses_total": 396,
"ip_addresses": [
{
"ip_address": "193.107.216.27",
"seen_last": "2022-01-11 13:30:48.703603359",
"seen_count": "1263"
},
{
"ip_address": "193.46.255.152"
"seen_last": "2022-01-11 13:28:27.348926406",
"seen_count": "3220"
}
...
]
}
Endpunkt /ip-addresses/{ip-address}
Abfrage einer einzelnen IP-Adresse:```bash curl -v -H "Content-Type: application/json" http://localhost:8082/ip-addresses/8.8.8.8
- Connected to localhost (127.0.0.1) port 8082 (#0)
GET /ip-addresses/8.8.8.8 HTTP/1.1 Host: localhost:8082 User-Agent: curl/7.79.1 Accept: / Content-Type: application/json
- Mark bundle as not supporting multiuse < HTTP/1.1 404 Not Found < Date: Mon, 24 Jan 2022 11:17:57 GMT < Content-Type: application/json < Access-Control-Allow-Origin: * < X-Powered-By: SentryPeer < X-SentryPeer-Version: 1.0.0 < Content-Length: 33 <
- Connection #0 to host localhost left intact { "message": "No bad actor found" }
#### Endpoint /numbers
Liste alle angerufenen Nummern auf, die von SentryPeer gesehen wurden:```bash
curl -v -H "Content-Type: application/json" http://localhost:8082/numbers
* Connected to localhost (127.0.0.1) port 8082 (#0)
> GET /numbers HTTP/1.1
> Host: localhost:8082
> User-Agent: curl/8.0.1
> Accept: */*
> Content-Type: application/json
< Date: Thu, 27 Jul 2023 11:10:35 GMT
< Content-Type: application/json
< Access-Control-Allow-Origin: *
< X-Powered-By: SentryPeer
< X-SentryPeer-Version: 4.0.0
< Content-Length: 31746258
{
"called_numbers_total": 244850,
"called_numbers": [
{
"called_number": "981046500729221",
"seen_last": "2023-07-27 12:06:59.388055505",
"seen_count": "451"
},
{
"called_number": "81046500729221",
"seen_last": "2023-07-27 12:05:19.206442003",
"seen_count": "453"
},
{
"called_number": "100",
"seen_last": "2023-07-27 11:59:57.679798597",
"seen_count": "17335"
},
....
Endpunkt /numbers/{phone-number}
Fragen Sie eine Telefonnummer ab, die ein Angreifer versucht hat anzurufen, mit optionalem +-Präfix:```bash
curl -v -H "Content-Type: application/json" http://localhost:8082/numbers/8784946812410967
- Connected to localhost (127.0.0.1) port 8082 (#0)
GET /numbers/8784946812410967 HTTP/1.1 Host: localhost:8082 User-Agent: curl/7.79.1 Accept: / Content-Type: application/json
< HTTP/1.1 200 OK < Date: Mon, 24 Jan 2022 11:19:53 GMT < Content-Type: application/json < Access-Control-Allow-Origin: * < X-Powered-By: SentryPeer < X-SentryPeer-Version: 1.0.0 < Content-Length: 46 < { "phone_number_found": "8784946812410967" }
### Syslog und Fail2ban
Mit `sentrypeer -s` analysieren Sie das Syslog und nutzen Fail2Ban, um die IP-Adresse des Angreifers zu blockieren:```syslog
Nov 30 21:32:16 localhost.localdomain sentrypeer[303741]: Source IP: 144.21.55.36, Method: OPTIONS, Agent: sipsak 0.9.7
JSON-Protokollformat
Mit sentrypeer -j können Sie eine JSON-Protokolldatei der IP-Adresse des Angreifers und der Telefonnummer, die er zu erreichen versuchte, sowie anderer Metadaten erstellen (legen Sie einen benutzerdefinierten Speicherort für die Protokolldatei mit -l fest):```json
{
"app_name":"sentrypeer",
"app_version":"v1.4.0",
"event_timestamp":"2022-02-22 11:19:15.848934346",
"event_uuid":"4503cc92-26cb-4b3e-bb33-69a83fa09321",
"created_by_node_id":"4503cc92-26cb-4b3e-bb33-69a83fa09321",
"collected_method":"responsive",
"transport_type":"UDP",
"source_ip":"45.134.144.128",
"destination_ip":"XX.XX.XX.XX",
"called_number":"0046812118532",
"sip_method":"OPTIONS",
"sip_user_agent":"friendly-scanner",
"sip_message":"full SIP message"
}
### Befehlszeilenoptionen```bash
./sentrypeer -h
Protect your SIP Servers from bad actors at https://sentrypeer.com
Usage: sentrypeer [OPTIONS]
Options:
-f <DB_FILE> Set 'sentrypeer.db' location or use SENTRYPEER_DB_FILE env
-j Enable json logging or use SENTRYPEER_JSON_LOG env
-p Enable Peer to Peer mode or use SENTRYPEER_PEER_TO_PEER env
-b <BOOTSTRAP_NODE> Set Peer to Peer bootstrap node or use SENTRYPEER_BOOTSTRAP_NODE env
-i <CLIENT_ID> Set OAuth 2 client ID or use SENTRYPEER_OAUTH2_CLIENT_ID env to get a Bearer token for WebHook
-c <CLIENT_SECRET> Set OAuth 2 client secret or use SENTRYPEER_OAUTH2_CLIENT_SECRET env to get a Bearer token for WebHook
-a Enable RESTful API mode or use SENTRYPEER_API env
-w <WEBHOOK_URL> Set WebHook URL for bad actor json POSTs or use SENTRYPEER_WEBHOOK_URL env
-r Enable SIP responsive mode or use SENTRYPEER_SIP_RESPONSIVE env
-R Disable SIP mode completely or use SENTRYPEER_SIP_DISABLE env
-l <JSON_LOG_FILE> Set JSON logfile (default './sentrypeer_json.log') location or use SENTRYPEER_JSON_LOG_FILE env
-N Disable Rust powered TCP, UDP and TLS or use SENTRYPEER_TLS_DISABLE env
-t <TLS_CERT_FILE> Set TLS cert location (default './cert.pem') or use SENTRYPEER_CERT env
-k <TLS_KEY_FILE> Set TLS key location (default './key.pem') or use SENTRYPEER_KEY env
-z <TLS_LISTEN_ADDRESS> Set TLS listen address (default '0.0.0.0:5061') or use SENTRYPEER_TLS_LISTEN_ADDRESS env
-g <CONFIG_FILE> Set config file location or use SENTRYPEER_CONFIG_FILE env
-s Enable syslog logging or use SENTRYPEER_SYSLOG env
-v Enable verbose logging or use SENTRYPEER_VERBOSE env
-d Enable debug mode or use SENTRYPEER_DEBUG env
-h, --help Print help
-V, --version Print version
IPv6-Multicast-Adresse
Das Projekt hat eine IANA-IPv6-Multicast-Adresse für den Zweck des Sendens von Nachrichten zwischen SentryPeer-Peers.
Adressen: FF0X:0:0:0:0:0:0:172
Beschreibung: SentryPeer
Kontakt: Gavin Henry <ghenry at sentrypeer.org>
Registrierungsdatum: 2022-01-26
Bitte siehe http://www.iana.org/assignments/ipv6-multicast-addresses
Die zugewiesene Variable-Scope-Adresse – die auch kurz als „FF0X::172“ aufgeführt werden kann – das „X“ bezeichnet jeden möglichen Bereich.
Lizenz
Tolle Lektüre – Wie Sie eine Lizenz für Ihre eigene Arbeit auswählen
Diese Arbeit ist dual-lizenziert unter GPL 2.0 und GPL 3.0.
SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
Mitwirken
Siehe CONTRIBUTING
Projekt-Website
Markenzeichen
SENTRYPEER ist ein eingetragenes Markenzeichen von Gavin Henry
Fragen, Fehlerberichte, Funktionsanfragen
Neue Issues können erstellt werden unter:
https://github.com/SentryPeer/SentryPeer/issues
Es ist in Ordnung, ein Issue zu erstellen, um eine Frage zu stellen.
Besonderer Dank
Besonderer Dank an:
- Deutsche Telekom Security GmbH für das Sponsoring!
- psanders vom Routr-Projekt für Tipps zur Überarbeitung dieser README.md-Datei.
- Fly.io für die Gutschrift des SentryPeer-Kontos für das Hosten der SentryPeer HQ-Web-App auf ihrer Infrastruktur
- AppSignal für das Sponsoring der Anwendungsleistungsüberwachung in der SentryPeer HQ-Web-App
- David Miller für das Design des SentryPeer Web-GUI-Themes und Logos. Sehr nett von Ihnen!
- @garymiller für die Funktionsanfrage zu syslog und Fail2ban gemäß Fail2ban-Integration via syslog #6
- @joejag für den Pull-Request für den Anfang der Terraform-Rezepte zum Starten von SentryPeer auf verschiedenen Cloud-Anbietern #12
Sponsoring
Besonderer Dank an Deutsche Telekom Security GmbH für das Sponsoring! Sehr nett!