
SentryPeer v4.0.5
Pot de miel SIP distribué qui détecte et partage les données de fraude sur les attaques VoIP. Collecte les IP des acteurs malveillants et les numéros de téléphone via un réseau peer-to-peer, avec intégration REST API et WebHook pour une intelligence des menaces en temps réel.
Protégez vos serveurs SIP des acteurs malveillants
Remerciements spéciaux à Deutsche Telekom Security GmbH pour nous avoir sponsorisés ! Très gentil !
Pourquoi ne pas nous donner une star et nous suivre sur Twitter !
Table des matières
- Introduction
- Aperçu
- Fonctionnalités
- Talks
- Adoption
- Conception
- Docker
- Installation
- Exécution de SentryPeer
- WebHook
- API RESTful
- Syslog et Fail2ban
- Format de journal JSON
- Options de ligne de commande
- Adresse de multidiffusion IPv6
- Licence
- Contribuer
- Site Web du projet
- Marque déposée
- Questions, rapports de bugs, demandes de fonctionnalités
- Remerciements spéciaux
- Parrainage
Introduction
SentryPeer® est un outil de détection des fraudes. Il laisse les acteurs malveillants essayer de passer des appels téléphoniques et enregistre l'adresse IP d'où ils viennent et le numéro qu'ils ont essayé d'appeler. Ces détails peuvent ensuite être utilisés pour déclencher des notifications sur le réseau du fournisseur de services et la prochaine fois qu'un utilisateur/client essaie d'appeler un numéro collecté, vous pouvez agir comme bon vous semble.
Par exemple :
Supposons que vous exploitiez votre propre PBX VoIP sur site. Ce que SentryPeer vous permettra de faire dans ce contexte, c'est de consulter la liste des numéros de téléphone (en utilisant l'API RESTful) lorsque vos utilisateurs passent des appels sortants. Si vous obtenez une correspondance, vous serez averti qu'un appareil de votre réseau tente potentiellement d'appeler des numéros de sondage connus qui ont été :
- Numéros collectés par les nœuds SentryPeer que vous exécutez vous-même
- Numéros vus par d'autres nœuds SentryPeer qui ont été répliqués sur votre nœud via le réseau pair à pair
Cela vous permettrait de générer une notification depuis vos systèmes de surveillance avant de cumuler des appels coûteux ou qu'une situation plus grave ne se produise.
Qu'est-ce qui pourrait mener à ce scénario ?
- Fraude potentielle sur la messagerie vocale. Cela peut se produire si vous autorisez l'appel d'un numéro entrant (votre DID/DDI) pour accéder à votre système de messagerie vocale, puis demandez un code PIN. Ce code PIN est faible et le système de messagerie vocale vous permet d'appuyer sur '*' pour rappeler l'ID de l'appelant qui a laissé un message vocal. L'attaquant a laissé un message vocal, puis devine votre code PIN et le rappelle. Le CLI est un numéro connu que SentryPeer a vu. Vous pouvez alerter dessus.
- Un appareil a été piraté et/ou un softphone ou similaire utilise les identifiants qu'il a volés sur l'interface graphique du téléphone et tente de s'enregistrer sur votre système et de passer des appels vers un numéro vu par SentryPeer.
- Un utilisateur innocent appelle un numéro de phishing ou un numéro connu coûteux, etc., que SentryPeer a déjà vu.
Traditionnellement, ces données sont envoyées vers un endroit central, de sorte que vous ne possédez pas les données que vous avez collectées. Ce projet repose entièrement sur le partage pair à pair de ces données. L'utilisateur possédant les données et divers flux liés aux fournisseurs de services / réseaux de ces données est l'élément clé pour moi. J'en ai assez de tous les services qui les conservent et les vendent. Si vous les avez collectées, vous devriez avoir le choix de les conserver et/ou de choisir de les partager avec d'autres membres de la communauté SentryPeer via des méthodes p2p.
Aperçu
Nœud SentryPeer
Ici, nous utilisons les diagrammes de séquence Mermaid pour montrer le flux de données d'un nœud SentryPeer vers SentryPeerHQ.```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@
#### Nœud SentryPeer vers 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@
Utilisation du SentryPeer Node et de l'API SentryPeerHQ```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
#### Intégration avec vos propres systèmes```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
🚧 Fonctionnalités
- Tout le code Free/Libre and Open Source Software
- RAPIDE
- L'utilisateur possède ses données
- L'utilisateur peut soumettre ses propres données s'il le souhaite (vous devez activer le mode p2p -
-p) - L'utilisateur reçoit les données des autres utilisateurs UNIQUEMENT SI il accepte de soumettre ses données au pool
- Nœud de table de hachage distribuée (DHT) intégré utilisant OpenDHT (option cli
-p) - Partage pair à pair des bad_actors collectés en utilisant OpenDHT (désactivé par défaut)
- Réplication pair à pair pour recevoir les bad_actors collectés en utilisant OpenDHT (désactivé par défaut)
- Définir votre propre nœud d'amorçage DHT (option cli
-b) - Multithreaded
- Transport UDP
- Transport TCP
- Transport TLS
- Journalisation JSON dans un fichier
- Le mode SIP peut être désactivé. Cela vous permet d'exécuter SentryPeer en mode API ou en mode DHT uniquement, etc., c'est-à-dire pas comme un honeypot, mais comme un nœud dans la communauté SentryPeer ou simplement pour servir des données répliquées
- Le mode SIP réactif peut être activé pour collecter des données - indicateur cli / env
- Copie de données locale pour un accès rapide - indicateur d'emplacement de base de données cli / env
- API locale pour un accès rapide - indicateur cli / env
- WebHook pour POSTer le json des bad actors vers un emplacement central - indicateur cli / env
- Intégration avec SentryPeerHQ via un jeton porteur OAuth2
- API de requête pour les adresses IP des bad actors
- API de requête pour l'IPSET des bad actors
- API de requête pour une adresse IP particulière d'un bad actor
- API de requête pour les numéros de téléphone tentés par les bad actors
- API de requête pour un numéro de téléphone tenté par un bad actor
- Support de Fail2Ban via
syslogselon demande de fonctionnalité - Base de données sqlite locale - fonctionnalité / indicateur cli
- Analytiques - opt in
- SDKs/bibliothèques pour accès externe - CGRateS pour commencer ou notre propre pare-feu avec nftables
- Taille binaire réduite pour une utilisation IoT
- Multi-plateforme
- Options de pare-feu pour utiliser les données distribuées en temps réel
- Conteneur sur Docker Hub pour la dernière version
- Agent BGP pour le peering afin de blackholer les adresses IP collectées (similaire au Projet Team Cymru Bogon Router Server)
- Agent SIP pour retourner 404 ou une destination par défaut pour les redirections SIP
Présentations
- ClueCon Weekly 2023 - https://www.youtube.com/watch?v=iuN_MtVfT6g
- UKNOF49 2022 (presentation slides) - 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/
Adoption
- Kali Linux
- Deutsche Telekom T-Pot - La plateforme honeypot tout-en-un v22 et suivants
Conception
J'ai commencé ce projet parce que je voulais faire de la programmation réseau en C car tous les projets que j'utilise quotidiennement sont en C comme PostgreSQL, OpenLDAP, FreeSWITCH, OpenSIPS, Asterisk etc. Voir Épisode 414 : Jens Gustedt sur le C moderne pour comprendre pourquoi C est un bon choix. Pour les intéressés, consultez ma liste complète d'épisodes de podcast (https://www.se-radio.net/team/gavin-henry/) pour Software Engineering Radio
Docker
Vous pouvez exécuter la dernière version de SentryPeer avec Docker. La dernière version est disponible sur Docker Hub. Ou construisez-la vous-même :
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
Vous pouvez ensuite vérifier à http://localhost:8082/ip-addresses et http://localhost:8082/health-check pour voir s'il fonctionne.
Variables d'environnement
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
Définissez-les soit dans le Dockerfile, soit dans votre fichier Dockerfile.env, soit dans la commande docker run.
Définir l'un de ces éléments à 0 activera également la fonctionnalité. Nous ne nous soucions pas de la valeur que vous définissez, seulement qu'elle soit définie.
Fichier de configuration
Vous pouvez également utiliser un fichier de configuration pour définir certaines choses. Principalement la configuration TLS
ci-dessous. L'emplacement par défaut est ~/.config/sentrypeer/default-config.toml, mais vous pouvez le modifier avec la variable d'environnement SENTRYPEER_CONFIG_FILE ou l'option cli -g.
Configuration TLS
Pour utiliser vos propres certificats, vous pouvez définir les variables d'environnement appropriées, les arguments cli ou utiliser le fichier de configuration. Par exemple :``` 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"
Si vous ne les définissez pas, un certificat pour localhost sera automatiquement
généré dans le répertoire à partir duquel sentrypeer est exécuté, créant un fichier `cert.pem` et
un fichier `key.pem`.
### Installation
Les paquets Debian ou Fedora sont toujours disponibles depuis la page des versions pour la version actuelle de SentryPeer :
https://github.com/SentryPeer/SentryPeer/releases
#### Homebrew (macOS ou Linux) :
Nous avons un [Homebrew Tap pour ce projet](https://github.com/SentryPeer/homebrew-sentrypeer) (jusqu'à ce que nous devenions plus populaires) :
brew tap sentrypeer/sentrypeer
brew install sentrypeer
#### Alpine Linux :
SentryPeer est en [test sur Alpine Linux](https://gitlab.alpinelinux.org/alpine/aports/-/tree/master/testing/sentrypeer), vous pouvez donc l'installer avec la commande suivante :
apk -U add --no-cache -X https://dl-cdn.alpinelinux.org/alpine/edge/testing sentrypeer
#### Package Ubuntu
Vous pouvez installer SentryPeer depuis [notre PPA Ubuntu](https://launchpad.net/~gavinhenry/+archive/ubuntu/sentrypeer) qui
est actuellement pour Ubuntu 20 LTS (Focal Fossa) :
sudo apt install software-properties-common
sudo add-apt-repository ppa:gavinhenry/sentrypeer
sudo apt-get update
Ce PPA peut être ajouté manuellement à votre système en copiant les lignes ci-dessous et en les ajoutant à vos sources de logiciels
:
deb https://ppa.launchpadcontent.net/gavinhenry/sentrypeer/ubuntu focal main
deb-src https://ppa.launchpadcontent.net/gavinhenry/sentrypeer/ubuntu focal main
Ensuite, vous pouvez installer SentryPeer :
sudo apt-get install sentrypeer
#### Compilation à partir des sources
Vous avez deux options pour l'installation à partir des sources. CMake ou autotools. Autotools est recommandé pour le moment. Une version est une construction autotools.
Si vous êtes un utilisateur Fedora, vous pouvez l'installer via [Fedora copr](https://copr.fedorainfracloud.org/coprs/) :
[https://copr.fedorainfracloud.org/coprs/ghenry/SentryPeer/](https://copr.fedorainfracloud.org/coprs/ghenry/SentryPeer/)
Si vous allez compiler à partir de ce dépôt, vous aurez besoin d'installer ce qui suit :
- `git`, `autoconf`, `automake` et `autoconf-archive` (Debian/Ubuntu)
- `libtool`, `rustc` et `cargo` (Fedora)
- `libosip2-dev` (Debian/Ubuntu) ou `libosip2-devel` (Fedora)
- `libsqlite3-dev` (Debian/Ubuntu) ou `sqlite-devel` (Fedora)
- `uuid-dev` (Debian/Ubuntu) ou `libuuid-devel` (Fedora)
- `libmicrohttpd-dev` (Debian/Ubuntu) ou `libmicrohttpd-devel` (Fedora)
- `libjansson-dev` (Debian/Ubuntu) ou `jansson-devel` (Fedora)
- `libpcre2-dev` (Debian/Ubuntu) ou `pcre2-devel` (Fedora)
- `libcurl-dev` (Debian/Ubuntu) ou `libcurl-devel` (Fedora)
- `libcmocka-dev` (Debian/Ubuntu) ou `libcmocka-devel` (Fedora) - pour les tests unitaires
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
puis (make check est fortement recommandé) :
./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
### Exécution de SentryPeer
Une fois compilé, vous pouvez l'exécuter comme suit pour démarrer en **mode debug**, **répondre** aux sondes SIP, activer l'**API RESTful**,
activer les WebHooks et activer la journalisation syslog ([utilisez un paquet](https://github.com/SentryPeer/SentryPeer/releases) si vous voulez [systemd](https://www.freedesktop.org/wiki/Software/systemd/)) :
./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
lorsque vous recevez une demande de sonde, vous pouvez voir quelque chose comme ceci dans le terminal :```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
Vous pouvez voir les données dans la base de données sqlite3 appelée sentrypeer.db en utilisant sqlitebrowser ou l'outil en ligne de commande sqlite3.
Voici une capture d'écran de la base de données ouverte avec sqlitebrowser (c'est grand, donc je vais simplement lier l'image) :
sqlitebrowser exploring the sentrypeer.db
WebHook
Il y a un WebHook pour POSTER une charge utile au Format JSON de Log vers SentryPeerHQ ou votre propre point de terminaison WebHook. Le WebHook n'est pas activé par défaut. Vous pouvez configurer l'URL du WebHook via -w ou définir la variable d'environnement SENTRYPEER_WEBHOOK_URL.
Si vous utilisez SentryPeer SaaS, vous devez obtenir votre identifiant client et votre secret client depuis le tableau de bord et définir les variables d'environnement SENTRYPEER_OAUTH2_CLIENT_ID et SENTRYPEER_OAUTH2_CLIENT_SECRET ou utiliser les options -i et -c.
RESTful API
L'API RESTful est complète pour les cas d'utilisation actuels. Veuillez cliquer sur le bouton Watch pour être notifié lorsque de nouvelles fonctionnalités sortiront :-)
Endpoint /health-check
Interrogez l'API pour voir si elle est en vie :```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
Lister toutes les adresses IP qui ont été vues par SentryPeer :```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"
}
...
]
}
Endpoint /ip-addresses/{ip-address}
Interroger une seule adresse IP :```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" }
#### Point de terminaison /numbers
Liste tous les numéros appelés qui ont été vus par SentryPeer :```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"
},
....
Endpoint /numbers/{phone-number}
Interrogez un numéro de téléphone qu'un acteur malveillant a tenté d'appeler avec un préfixe + facultatif :```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 et Fail2ban
Avec `sentrypeer -s`, vous analysez les logs syslog et utilisez Fail2Ban pour bloquer l'adresse IP de l'acteur malveillant :```syslog
Nov 30 21:32:16 localhost.localdomain sentrypeer[303741]: Source IP: 144.21.55.36, Method: OPTIONS, Agent: sipsak 0.9.7
Format du journal JSON
Avec sentrypeer -j, vous pouvez produire un fichier de journal JSON de l'adresse IP de l'acteur malveillant et du numéro de téléphone qu'ils ont essayé d'appeler,
ainsi que d'autres métadonnées (définissez un emplacement de fichier journal personnalisé avec -l) :```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"
}
### Options de ligne de commande```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
Adresse de multidiffusion IPv6
Le projet dispose d'une adresse de multidiffusion IPv6 de l'IANA pour envoyer des messages entre les pairs SentryPeer.
Addresses: FF0X:0:0:0:0:0:0:172
Description: SentryPeer
Contact: Gavin Henry <ghenry at sentrypeer.org>
Registration Date: 2022-01-26
Veuillez consulter http://www.iana.org/assignments/ipv6-multicast-addresses
L'adresse de portée variable attribuée — qui peut également être listée comme « FF0X::172 » en abrégé — le « X » désigne n'importe quelle portée possible.
Licence
Bonne lecture - Comment choisir une licence pour votre propre travail
Ce travail est sous double licence GPL 2.0 et GPL 3.0.
SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
Contribuer
Voir CONTRIBUTING
Site Web du projet
Marque déposée
SENTRYPEER est une marque déposée de Gavin Henry
Questions, signalements de bogues, demandes de fonctionnalités
De nouveaux problèmes peuvent être soumis à :
https://github.com/SentryPeer/SentryPeer/issues
Il est acceptable de soumettre un problème pour poser une question.
Remerciements spéciaux
Remerciements spéciaux à :
- Deutsche Telekom Security GmbH pour nous avoir sponsorisés !
- psanders du projet Routr pour des conseils sur la refonte de ce fichier README.md.
- Fly.io pour avoir crédité le compte SentryPeer pour l'hébergement de l'application web SentryPeer HQ sur leur infrastructure
- AppSignal pour le parrainage du suivi des performances de l'application dans l'application web SentryPeer HQ
- David Miller pour la conception du thème de l'interface graphique Web et du logo de SentryPeer. Très gentil de votre part !
- @garymiller pour la demande de fonctionnalité de syslog et Fail2ban selon Intégration Fail2ban via syslog #6
- @joejag pour la Pull Request pour le début des recettes Terraform pour lancer SentryPeer sur différents fournisseurs de cloud #12
Parrainage
Remerciements spéciaux à Deutsche Telekom Security GmbH pour nous avoir sponsorisés ! Très gentil !