
SentryPeer v4.0.5
VoIP 공격에 대한 사기 데이터를 탐지하고 공유하는 분산형 SIP 허니팟입니다. P2P 네트워크를 통해 악성 행위자의 IP와 전화번호를 수집하며, REST API 및 WebHook 통합을 통해 실시간 위협 인텔리전스를 제공합니다.
악성 행위자로부터 SIP 서버 보호하기
Deutsche Telekom Security GmbH의 후원에 특별히 감사드립니다! 매우 감사합니다!
저희에게 별표를 눌러주시고 Twitter에서 팔로우해 주세요!
목차
- 소개
- 개요
- 기능
- 발표
- 도입 사례
- 설계
- Docker
- 설치
- SentryPeer 실행
- WebHook
- RESTful API
- Syslog 및 Fail2ban
- JSON 로그 형식
- 명령줄 옵션
- IPv6 멀티캐스트 주소
- 라이선스
- 기여
- 프로젝트 웹사이트
- 상표
- 질문, 버그 신고, 기능 요청
- 특별 감사
- 후원
소개
SentryPeer®는 사기 탐지 도구입니다. 악성 행위자가 전화를 걸려고 시도하도록 내버려두고, 해당 IP 주소와 그들이 걸려고 한 전화번호를 저장합니다. 그런 다음 해당 세부 정보를 사용하여 서비스 제공업체 네트워크에서 알림을 발생시킬 수 있으며, 다음에 사용자/고객이 수집된 번호로 전화를 걸려고 하면 적절하다고 판단되는 방식으로 조치를 취할 수 있습니다.
예를 들어:
현장에서 자체 VoIP PBX를 운영 중이라고 가정해 보겠습니다. SentryPeer는 이러한 맥락에서 사용자가 발신 전화를 걸 때 RESTful API를 사용하여 전화번호 목록을 확인할 수 있게 해줍니다. 일치하는 항목이 있으면, 네트워크 내의 장치가 알려진 프로빙 전화번호로 전화를 걸려고 시도하고 있을 가능성이 있다는 경고를 받게 됩니다. 이러한 전화번호는 다음 중 하나일 수 있습니다.
- 사용자가 직접 실행하는 SentryPeer 노드가 수집한 번호
- 다른 SentryPeer 노드가 확인하여 피어 투 피어 네트워크를 통해 사용자 노드에 복제된 번호
이를 통해 고가의 통화료가 쌓이거나 더 심각한 일이 발생하기 전에 모니터링 시스템에서 알림을 생성할 수 있습니다.
어떤 시나리오가 이를 초래할 수 있을까요?
- 음성메일 사기 가능성. 이는 착신 번호(내 DID/DDI)로 전화를 걸어 음성메일 시스템에 접속한 후 PIN을 입력하도록 요청하는 경우 발생할 수 있습니다. 이 PIN이 취약하고 음성메일 시스템에서 '*'를 눌러 음성메일을 남긴 발신자 번호로 다시 전화를 걸 수 있는 경우입니다. 공격자가 음성메일을 남기고 PIN을 추측하여 다시 전화를 겁니다. 발신자 번호(CLI)는 SentryPeer가 이미 확인한 알려진 번호입니다. 이에 대해 경고할 수 있습니다.
- 장치 하이재킹 또는 유사 상황. 소프트폰이나 유사 장치가 도난당한 GUI 자격 증명을 사용하여 시스템에 등록하고 SentryPeer가 확인한 번호로 전화를 걸려고 시도하는 경우입니다.
- 무고한 사용자가 피싱 번호 또는 고가의 번호 등에 전화를 거는 경우. SentryPeer가 이전에 확인한 번호입니다.
전통적으로 이러한 데이터는 중앙 장소로 전송되므로 사용자가 수집한 데이터를 소유하지 못합니다. 이 프로젝트는 데이터의 피어 투 피어 공유에 관한 것입니다. 사용자가 데이터를 소유하고 다양한 서비스 제공업체/네트워크 제공업체 관련 데이터 피드를 제공하는 것이 저에게 핵심적인 부분입니다. 데이터를 보관하고 판매하는 모든 서비스에 질렸습니다. 수집했다면, 보관 여부를 선택하고 p2p 방식을 통해 다른 SentryPeer 커뮤니티 구성원과 공유하도록 선택할 수 있어야 합니다.
개요
SentryPeer 노드
여기서는 Mermaid 시퀀스 다이어그램을 사용하여 SentryPeer 노드에서 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@
#### SentryPeer Node에서 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@
SentryPeer Node 및 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
#### 자체 시스템과 통합하기```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
🚧 기능
- 모든 코드는 자유/리브레 및 오픈 소스 소프트웨어입니다
- 빠름
- 사용자가 자신의 데이터를 소유합니다
- 사용자가 원하면 자신의 데이터를 제출할 수 있습니다 (p2p 모드 활성화 필요 -
-p) - 사용자는 데이터 풀에 데이터를 제출하기로 선택한 경우에만 다른 사용자의 데이터를 받습니다
- OpenDHT를 사용한 임베디드 분산 해시 테이블(DHT) 노드 (
-pCLI 옵션) - OpenDHT를 사용한 수집된 bad_actors의 P2P 공유 (기본값: 꺼짐)
- OpenDHT를 사용한 수집된 bad_actors 수신을 위한 P2P 데이터 복제 (기본값: 꺼짐)
- 자체 DHT 부트스트랩 노드 설정 (
-bCLI 옵션) - 멀티스레드
- UDP 전송
- TCP 전송
- TLS 전송
- 파일로 JSON 로깅
- SIP 모드를 비활성화할 수 있습니다. 이를 통해 SentryPeer를 API 모드 또는 DHT 모드 등으로 실행할 수 있습니다. 즉, 허니팟이 아니라 SentryPeer 커뮤니티의 노드로 실행하거나 복제된 데이터만 제공하는 용도로 사용 가능
- 데이터 수집을 위해 SIP 응답 모드를 활성화할 수 있습니다 - CLI / env 플래그
- 빠른 접근을 위한 로컬 데이터 복사본 - CLI / env DB 위치 플래그
- 빠른 접근을 위한 로컬 API - CLI / env 플래그
- 중앙 위치에 bad actor JSON을 POST하는 WebHook - CLI / env 플래그
- OAuth2 베어러 토큰을 통한 SentryPeerHQ 통합
- bad_actors의 IP 주소에 대한 쿼리 API
- bad_actors의 IPSET에 대한 쿼리 API
- 특정 bad actor IP 주소에 대한 쿼리 API
- bad_actors가 전화를 시도한 전화번호에 대한 쿼리 API
- 특정 bad actor가 전화를 시도한 전화번호에 대한 쿼리 API
- 기능 요청에 따라
syslog를 통한 Fail2Ban 지원 - 로컬 sqlite 데이터베이스 - 기능 / CLI 플래그
- 분석 - 옵트인
- 외부 접근을 위한 SDK/라이브러리 - CGRateS를 시작으로 하거나 nftables를 사용한 자체 방화벽
- IoT 사용을 위한 작은 바이너리 크기
- 크로스 플랫폼
- 분산 데이터를 실시간으로 사용하는 방화벽 옵션
- 최신 빌드를 위한 Docker Hub 컨테이너
- 수집된 IP 주소를 블랙홀링하기 위한 BGP 피어 에이전트 (Team Cymru Bogon Router Server Project와 유사)
- SIP 리디렉션을 위해 404 또는 기본 대상으로 응답하는 SIP 에이전트
발표
- ClueCon Weekly 2023 - https://www.youtube.com/watch?v=iuN_MtVfT6g
- UKNOF49 2022 (발표 슬라이드) - 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/
도입 현황
- Kali Linux
- Deutsche Telekom T-Pot - 올인원 허니팟 플랫폼 v22](https://github.com/telekom-security/tpotce/releases/tag/22.04.0) 이후 버전
설계
이 프로젝트를 시작한 이유는 C 네트워크 프로그래밍을 해보고 싶었기 때문입니다. 제가 일상적으로 사용하는 프로젝트들은 대부분 PostgreSQL, OpenLDAP, FreeSWITCH, OpenSIPS, Asterisk 등과 같이 C로 작성되어 있습니다. C가 좋은 선택인 이유에 대해서는 에피소드 414: Jens Gustedt on Modern C를 참조하세요. 관심 있는 분들은 Software Engineering Radio에서 제 전체 팟캐스트 목록(https://www.se-radio.net/team/gavin-henry/)을 확인하실 수 있습니다.
Docker
Docker를 사용하여 SentryPeer의 최신 버전을 실행할 수 있습니다. 최신 버전은 Docker Hub에서 제공됩니다. 또는 직접 빌드하세요:
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
그런 다음 http://localhost:8082/ip-addresses 및 http://localhost:8082/health-check에서 실행 중인지 확인할 수 있습니다.
환경 변수
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
이 값들은 Dockerfile이나 Dockerfile.env 파일, 또는 docker run 명령어에서 설정할 수 있습니다.
이 중 하나를 0으로 설정해도 해당 기능이 _활성화_됩니다. 값 자체는 중요하지 않으며, 설정 여부만 확인합니다.
설정 파일
설정 파일을 사용하여 일부 항목을 설정할 수도 있습니다. 주로 아래의 TLS 설정이 해당됩니다.
기본 위치는 ~/.config/sentrypeer/default-config.toml이지만,
SENTRYPEER_CONFIG_FILE 환경 변수나 -g CLI 옵션으로 변경할 수 있습니다.
TLS 설정
자체 인증서를 사용하려면 적절한 환경 변수, CLI 인수를 설정하거나 설정 파일을 사용하면 됩니다. 예를 들어:``` 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"
이 값을 설정하지 않으면 sentrypeer가 실행되는 디렉터리에 `cert.pem`과 `key.pem` 파일을 생성하여 localhost용 인증서가 자동으로 생성됩니다.
### 설치
Debian 또는 Fedora 패키지는 현재 SentryPeer 버전의 릴리즈 페이지에서 항상 사용할 수 있습니다:
https://github.com/SentryPeer/SentryPeer/releases
#### Homebrew (macOS 또는 Linux):
이 프로젝트를 위한 [Homebrew Tap](https://github.com/SentryPeer/homebrew-sentrypeer)이 있습니다 (더 널리 알려질 때까지):
brew tap sentrypeer/sentrypeer
brew install sentrypeer
#### Alpine Linux:
SentryPeer는 [Alpine Linux 테스트 저장소](https://gitlab.alpinelinux.org/alpine/aports/-/tree/master/testing/sentrypeer)에 있습니다. 다음 명령어로 설치할 수 있습니다:
apk -U add --no-cache -X https://dl-cdn.alpinelinux.org/alpine/edge/testing sentrypeer
#### Ubuntu 패키지
[Ubuntu PPD](https://launchpad.net/~gavinhenry/+archive/ubuntu/sentrypeer)에서 SentryPeer를 설치할 수 있습니다. 현재 Ubuntu 20 LTS (Focal Fossa)용입니다:
sudo apt install software-properties-common
sudo add-apt-repository ppa:gavinhenry/sentrypeer
sudo apt-get update
이 PPA는 아래 줄을 복사하여 시스템의 소프트웨어 소스에 수동으로 추가할 수 있습니다:
deb https://ppa.launchpadcontent.net/gavinhenry/sentrypeer/ubuntu focal main
deb-src https://ppa.launchpadcontent.net/gavinhenry/sentrypeer/ubuntu focal main
그런 다음 SentryPeer를 설치할 수 있습니다:
sudo apt-get install sentrypeer
#### 소스에서 빌드
소스에서 설치하기 위한 두 가지 옵션이 있습니다: CMake 또는 autotools. 현재는 autotools를 권장합니다. 릴리즈는 autotools 빌드입니다.
Fedora 사용자라면 [Fedora copr](https://copr.fedorainfracloud.org/coprs/)을 통해 설치할 수 있습니다:
[https://copr.fedorainfracloud.org/coprs/ghenry/SentryPeer/](https://copr.fedorainfracloud.org/coprs/ghenry/SentryPeer/)
이 저장소에서 빌드하려면 다음이 설치되어 있어야 합니다:
- `git`, `autoconf`, `automake` 및 `autoconf-archive` (Debian/Ubuntu)
- `libtool`, `rustc` 및 `cargo` (Fedora)
- `libosip2-dev` (Debian/Ubuntu) 또는 `libosip2-devel` (Fedora)
- `libsqlite3-dev` (Debian/Ubuntu) 또는 `sqlite-devel` (Fedora)
- `uuid-dev` (Debian/Ubuntu) 또는 `libuuid-devel` (Fedora)
- `libmicrohttpd-dev` (Debian/Ubuntu) 또는 `libmicrohttpd-devel` (Fedora)
- `libjansson-dev` (Debian/Ubuntu) 또는 `jansson-devel` (Fedora)
- `libpcre2-dev` (Debian/Ubuntu) 또는 `pcre2-devel` (Fedora)
- `libcurl-dev` (Debian/Ubuntu) 또는 `libcurl-devel` (Fedora)
- `libcmocka-dev` (Debian/Ubuntu) 또는 `libcmocka-devel` (Fedora) - 단위 테스트용
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
그런 다음 (make check를 적극 권장합니다):
./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 실행
빌드가 완료되면 다음과 같이 실행하여 **디버그 모드**로 시작하고, SIP 프로브에 **응답**하며, **RESTful API**를 활성화하고, WebHooks를 활성화하고, syslog 로깅을 활성화할 수 있습니다 ([systemd](https://www.freedesktop.org/wiki/Software/systemd/)를 원한다면 [패키지](https://github.com/SentryPeer/SentryPeer/releases)를 사용하세요):
./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
프로브 요청이 들어오면 터미널에서 다음과 같은 내용을 볼 수 있습니다:```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
sentrypeer.db라는 sqlite3 데이터베이스의 데이터는 sqlitebrowser 또는 sqlite3 명령줄 도구를 사용하여 볼 수 있습니다.
다음은 sqlitebrowser로 데이터베이스를 열어본 스크린샷입니다. (크기가 크므로 이미지 링크만 제공합니다):
sqlitebrowser가 sentrypeer.db를 탐색하는 모습
WebHook
JSON 로그 형식 페이로드를 SentryPeerHQ 또는
자체 WebHook 엔드포인트로 POST하는 WebHook이 있습니다. WebHook은 기본적으로 활성화되어 있지 않습니다. -w를 사용하거나
SENTRYPEER_WEBHOOK_URL 환경 변수를 설정하여 WebHook URL을 구성할 수 있습니다.
SentryPeer SaaS를 사용하는 경우 대시보드에서 클라이언트 ID와 클라이언트 시크릿을 가져와
SENTRYPEER_OAUTH2_CLIENT_ID 및 SENTRYPEER_OAUTH2_CLIENT_SECRET 환경 변수를 설정하거나 -i 및 -c 플래그를 사용해야 합니다.
RESTful API
RESTful API는 현재 사용 사례에 맞게 완성되었습니다. 더 많은 기능이 나올 때 알림을 받으려면 Watch 버튼을 클릭하세요 :-)
엔드포인트 /health-check
API를 쿼리하여 작동 중인지 확인합니다:```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" }
#### 엔드포인트 /ip-addresses
SentryPeer가 본 모든 IP 주소를 나열합니다:```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"
}
...
]
}
엔드포인트 /ip-addresses/{ip-address}
단일 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" }
#### Endpoint /numbers
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"
},
....
엔드포인트 /numbers/{phone-number}
악의적인 행위자가 전화를 걸려고 한 전화번호를 선택적 + 접두어와 함께 조회합니다:```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와 Fail2ban
`sentrypeer -s`를 사용하여 syslog를 파싱하고 Fail2Ban을 사용하여 악성 행위자의 IP 주소를 차단합니다:```syslog
Nov 30 21:32:16 localhost.localdomain sentrypeer[303741]: Source IP: 144.21.55.36, Method: OPTIONS, Agent: sipsak 0.9.7
JSON 로그 형식
sentrypeer -j를 사용하면 악의적인 행위자의 IP 주소와 그들이 전화를 걸려고 시도한 전화번호 및 기타 메타데이터가 포함된 JSON 로그 파일을 생성할 수 있습니다 (-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"
}
### 명령줄 옵션```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 멀티캐스트 주소
이 프로젝트는 SentryPeer 피어 간 메시지를 전송하기 위해 IANA IPv6 멀티캐스트 주소를 보유하고 있습니다.
Addresses: FF0X:0:0:0:0:0:0:172
Description: SentryPeer
Contact: Gavin Henry <ghenry at sentrypeer.org>
Registration Date: 2022-01-26
자세한 내용은 http://www.iana.org/assignments/ipv6-multicast-addresses 를 참조하십시오.
할당된 가변 범위 주소("FF0X::172"로 짧게 표시될 수도 있음)에서 "X"는 가능한 모든 범위를 나타냅니다.
라이선스
유용한 읽을거리 - 자신의 작업을 위한 라이선스 선택 방법
이 작업은 GPL 2.0 및 GPL 3.0에 따라 이중 라이선스가 적용됩니다.
SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
기여
CONTRIBUTING을 참조하십시오.
프로젝트 웹사이트
상표
SENTRYPEER는 Gavin Henry의 등록 상표입니다
질문, 버그 보고, 기능 요청
새로운 이슈는 다음에서 제기할 수 있습니다:
https://github.com/SentryPeer/SentryPeer/issues
질문을 위해 이슈를 제기해도 괜찮습니다.
특별 감사
특별히 감사드립니다:
- Deutsche Telekom Security GmbH 후원해 주셔서 감사합니다!
- Routr 프로젝트의 psanders님, 이 README.md 파일 재작업에 대한 조언 감사합니다.
- Fly.io님, 인프라에서 SentryPeer HQ 웹 앱을 호스팅한 SentryPeer 계정을 인정해 주셔서 감사합니다.
- AppSignal님, SentryPeer HQ 웹 앱의 애플리케이션 성능 모니터링 후원 감사합니다.
- David Miller님, SentryPeer 웹 GUI 테마 및 로고 디자인 감사합니다. 정말 친절하시네요!
- @garymiller님, syslog를 통한 Fail2ban 통합 #6에 따른 syslog 및 Fail2ban 기능 요청 감사합니다.
- @joejag님, 다양한 클라우드 제공업체에서 SentryPeer 실행을 위한 Terraform 레시피 시작 #12에 대한 Pull Request 감사합니다.
후원
Deutsche Telekom Security GmbH 후원해 주셔서 특별히 감사드립니다! 정말 친절하시네요!