
의심스러운 SMS, 채팅 메시지 및 링크의 사기 및 피싱 지표를 점수화하고, 각 경고 신호를 인식 가이드와 퀴즈로 설명하는 오프라인 휴리스틱 분석기입니다.
사이버 보안 인식 제고 플랫폼입니다. 의심스러운 SMS, 이메일, 채팅 메시지 또는 링크를 붙여넣으면 어떤 사기 기법이 발견되었는지, 각 기법이 왜 중요한지, 그리고 다음에 무엇을 해야 하는지 알려줍니다.
라이브 데모: https://threatripper.onrender.com (Render 무료 티어 — 비활성 상태 이후 첫 방문 시 깨어나는 데 1분 정도 걸릴 수 있습니다.)
이것은 교육 도구이며 보안 제품이 아닙니다. 바이러스 백신 엔진, 악성코드 스캔, 발신자 검증, 도메인 평판 서비스는 없습니다. 링크는 절대 열리지 않습니다.
목적과 범위. Threatripper는 텍스트에서 사기 지표를 탐지하기 위한 방어적이고 교육적인 도구입니다. 악성코드, 익스플로잇 코드, 피싱 키트, 자격 증명 목록 또는 어떤 공격적 기능도 포함하지 않으며, 네트워크 요청을 절대 수행하지 않습니다. 저장소의 모든 예시 메시지와 도메인은 가상의 예약된
.example이름을 사용하며 오직 탐지 로직을 시연하기 위해서만 존재합니다.자신과 타인을 보호하는 용도로만 사용하십시오. 오용은 프로젝트의 목적에 반합니다. 사기 신고는 공식 채널을 통해 하십시오 (제한 사항 참조).
네 개의 페이지, 빌드 단계 없음, JavaScript 프레임워크 없음, CDN 없음:
| 페이지 | 경로 | 목적 |
|---|---|---|
| 분석 | / | 메시지나 링크를 붙여넣으면 점수가 매겨지고 설명이 제공되는 판정을 받습니다 |
| 인식 제고 | /awareness.html | 일곱 가지 사기 유형 가이드와 신고 조언 |
| 퀴즈 | /quiz.html | 서버 측에서 채점되고 설명이 제공되는 열두 가지 시나리오 |
| 기록 | /history.html | 식별자가 이미 삭제 처리된 최근 분석 내역 |
분석은 의도적으로 권위적이기보다는 설명 가능하도록 설계되었습니다. 척도의 모든 점수는 심각도, 신뢰도, 그리고 왜 중요한지 설명하는 문장이 있는 명명된 규칙에 대응합니다. 인터페이스는 조합 보너스를 포함한 전체 계산 과정을 보여주므로, 결과를 단순히 신뢰하는 대신 이의를 제기할 수 있습니다.
하지 않는 것:
Python 3.11 이상이 필요합니다.
git clone <your-repo-url> threatripper
cd threatripper
python3 -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
# Use "python3 -m pip", not a bare "pip": on a hardened distro (Kali, Debian,
# Fedora) pip may be an externally managed system binary that is blocked by
# PEP 668, and a bare "pip" will not resolve to the venv.
python3 -m pip install -r requirements.txt
python3 -m uvicorn backend.main:app --reload
http://127.0.0.1:8000을 엽니다.
제품 전체 — API, 규칙 카탈로그, 데이터베이스 및 웹 인터페이스 — 는 하나의
프로세스에서 하나의 오리진으로 실행됩니다. 대화형 API 문서는 /docs에, 원시 OpenAPI 스키마는
/openapi.json에 있습니다.
테스트를 실행하려면:
python3 -m pip install -r requirements-dev.txt
python3 -m pytest
동일한 분석이 터미널에서도 실행됩니다. 이는 두 번째 구현이 아니라 두 번째 프런트 엔드입니다. 모든 규칙, 점수, 설명, 권장 조치는 웹 앱이 사용하는 것과 동일한 AnalysisService에서 나오므로, 두 인터페이스가 무엇이 위험한지에 대해 서로 다를 수 없습니다.
서버도, 포트도, 네트워크도 필요 없습니다. 보고 있는 메시지가 바로 그 사건일 때 유용합니다.
# Analyse a pasted message
./threatripper.sh "URGENT: your account will be closed, share the OTP"
# Or pipe it in, which is the natural way to use it
pbpaste | ./threatripper.sh
# A bare link
./threatripper.sh "http://verify-account.example/login"
# The API payload, for scripts
./threatripper.sh "share your OTP" --json | jq .result.risk_level
# Only fail when it is serious
./threatripper.sh --fail-on critical "see you tomorrow" ; echo $? # 0
./threatripper.sh --fail-on critical "your bank account will be suspended in 24 hours, verify at http://bank-verify.example/login and share the OTP" ; echo $? # 1
# Stored history, shared with the web app
./threatripper.sh history
./threatripper.sh history --level critical --json
# Analyse without keeping any record
./threatripper.sh "share your OTP" --no-store
인터랙티브 실행이 시작될 때 빨간색 THREATRIPPER 배너가 출력되며, ANSI Shadow 서체로 그려집니다. 이 배너는 stderr로 출력되고 --json 사용 시 또는 출력이 파이프나 리다이렉션되는 경우에는 생략되므로, 로그에 남거나 파이프라인을 깨뜨리는 일이 없습니다. --no-color를 사용하면 배너는 유지되지만 색상은 제거됩니다.
ANSI Shadow의 모든 글리프는 동아시아 모호한 폭(ambiguous-width) 문자이므로, 일부 터미널 — 일반적으로 CJK 로캘 또는 78열보다 좁은 창 — 에서는 각 행이 서로 다른 폭으로 렌더링되어 글자가 어긋나게 됩니다. 이 경우 배너는 조용히 순수 ASCII 서체로 대체됩니다. --banner shadow|ascii|none으로 선택을 재정의할 수 있습니다:
./threatripper.sh --banner shadow "message" # force the block letters
./threatripper.sh --banner ascii "message" # force the terminal-safe face
./threatripper.sh --banner none "message" # no banner at all
웹 앱과 마찬가지로 분석 결과는 기본적으로 공유 기록에 추가됩니다 —
동일한 마스킹된 미리보기이며, 원본 텍스트는 절대 포함되지 않습니다. 기록을 남기지 않고
분석하려면 --no-store를 전달하세요.
./threatripper.sh analyze --help와 ./threatripper.sh history --help는 모든
옵션을 나열합니다. 런처는 프로젝트의 .venv 인터프리터를 우선 사용하며 자체
위치를 확인하므로, 어느 디렉터리에서든 가상환경 활성화 여부와 관계없이 작동합니다.
python3 -m backend.cli는 동일한 기능입니다.
터미널 도구는 스크립트에서 사용되므로, "무언가를 찾았는가?"라는 질문에 산문을 파싱하지 않고도 답할 수 있어야 합니다.
| 코드 | 의미 |
|---|---|
0 | --fail-on 임계값 이하에서 아무것도 발견되지 않음 |
1 | 임계값 이상에서 무언가가 발견됨 |
2 | 명령줄이 잘못됨 |
3 | 분석할 대상이 없거나 분석을 실행할 수 없음 |
임계값의 기본값은 suspicious입니다. 임의의 밴드
(low, suspicious, medium, high, critical)와 함께 --fail-on을 전달하여 변경할 수 있습니다.
# Fail a deploy pipeline only on a serious finding
./threatripper.sh --fail-on critical "$MESSAGE" || echo "review this message"
사용 오류는 의도적으로 탐지 결과와 코드를 공유하지 않으므로, 스크립트는 "이 메시지가 위험하다"와 "플래그를 잘못 입력했다"를 구분할 수 있습니다. 인식되지 않는 위험 등급도 이상 없음으로 보고하지 않고 0이 아닌 값으로 종료됩니다.
| 점수 | 수준 | 의미 |
|---|---|---|
| 0–20 | LOW | 사기 지표가 거의 또는 전혀 없음. 안전을 보장하지는 않음. |
| 21–40 | SUSPICIOUS | 의심스러운 특성이 일부 있음. 독립적으로 검증할 것. |
| 41–60 | MEDIUM | 여러 사기 신호가 있음. 이 메시지에 따라 행동하지 말 것. |
| 61–80 | HIGH | 강한 사기 지표가 있음. 적대적인 것으로 취급할 것. |
| 81–100 | CRITICAL | 진행 중인 사기 시도의 매우 강한 지표. |
id, category, severity, confidence, explanation을 포함합니다.suspicious_link 지표를 생성합니다./api/scoring에 공개되어 있습니다.URGENT: Your bank account will be SUSPENDED within 24 hours.
Verify now at http://kyc-update.example/verify
Share the OTP sent to your mobile. Do not tell your family.
| 지표 | 범주 | 심각도 | 기여도 |
|---|---|---|---|
| OTP 또는 인증 코드 요청 | credential_request | 20 | 19.0 |
| 의심스러운 링크 구조 | malicious_url | 20 | 18.0 |
| 계정 정지 위협 | threat | 15 | 12.8 |
| 해당 사안을 비밀로 유지하라는 지시 | isolation | 15 | 12.8 |
| KYC 만료 압박 | fake_kyc | 12 | 8.4 |
| 긴급성 / 즉시 행동 촉구 표현 | urgency | 10 | 7.0 |
이는 원시 지표 점수 78.0점에 조합 보너스(긴급성 + 위협, 긴급성 + 자격 증명, 자격 증명 + 링크, 그리고 여러 위협 범주)를 더한 것으로, 100점 상한에 의해 CRITICAL로 고정됩니다(예시는 실제로 값 100에서 실행됩니다).
내장된 링크는 구조적 문제마다 한 행씩 생성되는 것이 아니라 단일 suspicious_link 지표를 생성한다는 점에 유의하십시오. 메시지 내의 단일 링크는 심각도 20으로 제한되어, 그 외에는 평범한 메시지를 불완전한 주소 하나가 지배하지 못하도록 합니다. 동일한 URL을 단독으로 제출하면 전체 세부 사항까지 분석됩니다.
인터페이스에 렌더링된 동일한 메시지는 이 모든 행을 각각의 점수와 함께 표시합니다. 산술 계산을 직접 확인할 수 있습니다.