본문으로 건너뛰기
macOS · 사용 가능

Tsuba

낯선 코드가 처음 실행되기 전에 먼저 살펴봅니다.

Tsuba app icon
유형
macOS
버전
0.3.0
출시일
2026년 10월 31일
다운로드 수
24
규칙 팩
규칙 20개 · 2026.10.27
요구 사항
macOS 13+
가격
무료
개인정보
읽기 →

Tsuba(鍔)는 일본도의 손잡이 보호대입니다. 이 Tsuba는 메뉴 막대에 머물다가, 낯선 코드가 처음 실행되는 순간에 끼어듭니다. 그 코드가 무엇을 하려는지, 어디서 왔는지, 알려진 공격과 닮았는지를 파악한 뒤 허용, 경고, 차단 중 하나를 결정합니다.

가짜 Upwork 클라이언트가 두 번이나 제 Mac을 감염시키려 한 뒤에 만들었습니다. 첫 번째는 성공했고, XProtect도 백신도 알아채지 못했습니다. 전체 이야기는 여기에 있습니다.

24초로 보는 Tsuba.

대시보드: 보호 상태, 확인이 필요한 항목, 모든 검사의 실시간 기록.
대시보드: 보호 상태, 확인이 필요한 항목, 모든 검사의 실시간 기록.

백신이 이런 공격을 놓치는 이유

가짜 면접 프로젝트, 가짜 회의 앱, 오염된 npm 패키지, 악성 에디터 확장 프로그램은 매번 새로운 포장으로 나타납니다. node, curl, bash 같은 평범한 도구로 실행되기 때문에 기존 스캐너가 잡아낼 것이 없습니다. 그래서 Tsuba는 대신 진입 지점을 지켜봅니다.

규모는 이 정도입니다.

  • 북한의 Contagious Interview 캠페인은 적어도 2022년 12월부터 이어지고 있습니다. "테스트 프로젝트"는 GitHub, GitLab, Bitbucket에 올린 npm 프로젝트이며, 저장소를 신뢰하는 순간 VS Code가 그 작업 파일을 알아서 실행합니다(Microsoft, 2026년 3월).
  • Socket은 2025년 1월 이후 이 캠페인과 연결된 악성 패키지 1,700개 이상을 npm, PyPI, Go, crates.io, Packagist에 걸쳐 추적하고 있습니다(Socket, 2026년 4월).
  • GlassWorm 확장 프로그램은 보이지 않는 유니코드 문자 속에 코드를 숨겼고, 발각되기 전까지 약 35,800회 설치되었습니다(Koi Security, 2025년 10월).
  • Sonatype은 한 분기에만 새로운 악성 오픈 소스 패키지 16,279개, 누적 845,204개를 기록했습니다(Sonatype, 2025년 2분기).

채용 담당자가 보낸 프로젝트를 실행하기 전에

  1. 아직 에디터로 열지 마세요. 신뢰한 폴더는 열자마자 .vscode/tasks.json을 실행할 수 있습니다.
  2. package.json을 읽으세요: preinstall, postinstall 스크립트, 처음 들어 보거나 지난주에 게시된 의존성.
  3. 과제 테스트에 있을 이유가 없는 코드를 찾으세요: 하드코딩된 IP 주소, 내려받은 텍스트를 eval하는 코드, 브라우저 프로필·지갑·키체인을 읽는 코드.
  4. 채팅으로 받은 curl … | bash 줄은 스크립트를 읽어 보기 전에는 절대 터미널에 붙여 넣지 마세요.
  5. 이미 실행했다면 컴퓨터가 감염되었다고 가정하세요. 흔적을 확인한 뒤, 깨끗한 기기에서 비밀번호, 토큰, 키를 교체하세요.

Tsuba는 1~4단계를 꼭 필요한 순간에 대신 해 주고, 상태 점검이 5단계를 맡습니다.

검사하는 것

진입 지점 예시 Tsuba가 보는 것
터미널 명령 curl … | bash, npm install, npx, npm start, git clone 원격 스크립트를 실행하지 않고 내려받아 확인하고, npm 패키지를 악성 패키지 목록·게시 시기·설치 스크립트로 검사하며, 프로젝트에서 숨은 코드, 하드코딩된 서버, 지갑이나 비밀번호 저장소를 읽는 코드를 찾습니다
터미널에 붙여 넣기 웹페이지가 "이 명령을 터미널에 복사하세요"라고 할 때 붙여 넣는 순간 경고하고, 난독화된 명령을 셸로 파이프하면 고위험으로 표시합니다
다운로드 폴더 새 .dmg, .pkg, .vsix 파일 서명, 공증, 다운로드 출처, 설치 스크립트
에디터 확장 프로그램 VS Code, Cursor, Windsurf, VSCodium 공식 악성 확장 프로그램 목록, 시작 시 활성화, 보이지 않는 문자에 숨긴 코드. 고위험 확장 프로그램은 격리함으로 보냅니다
AI 코딩 도구 Claude Code, Cursor, Codex용 MCP 서버, 스킬, 훅 알려진 악성 패키지, 숨김 폴더에서의 실행, 사용자에게 보이지 않게 숨긴 지시문
상태 점검 메뉴 막대 → 상태 점검 알려진 공격이 남긴 흔적과 수상한 로그인 항목

확신이 서지 않는 프로젝트는 먼저 샌드박스에서 시험 실행할 수 있습니다. 미끼가 든 가짜 홈 폴더를 쓰고, 네트워크 요청은 기록만 하고 실제로 보내지 않으며, 60초 제한이 있습니다.

차단된 가짜 회의 앱 설치: 판정, 이유, 증거를 한 줄씩 보여 줍니다.
차단된 가짜 회의 앱 설치: 판정, 이유, 증거를 한 줄씩 보여 줍니다.

폴더를 필요할 때 또는 일정에 따라 스캔합니다. 위험한 것은 격리함으로 갑니다.
폴더를 필요할 때 또는 일정에 따라 스캔합니다. 위험한 것은 격리함으로 갑니다.

상태 점검은 알려진 공격의 흔적을 찾고, 에디터 확장 프로그램과 AI 도구를 감사합니다.
상태 점검은 알려진 공격의 흔적을 찾고, 에디터 확장 프로그램과 AI 도구를 감사합니다.

다른 도구와 비교

대부분의 도구는 하나의 진입 경로만 다룹니다. Tsuba는 Mac에서 일어나는 모든 첫 실행을 다루며, 다른 도구와 함께 동작합니다.

도구 검사 대상 시점
Tsuba 터미널 명령, npm과 npx, 클론한 프로젝트, .dmg / .pkg / .vsix, 에디터 확장 프로그램, MCP 서버, 스킬과 훅, 붙여 넣은 명령 코드가 처음 실행되기 전
npq, Socket Firewall, Aikido Safe Chain npm 패키지(일부는 PyPI 등도) 설치할 때
mcp-scan 등 MCP 스캐너 MCP 서버와 에이전트 도구 스캔을 실행할 때
LuLu, BlockBlock, KnockKnock (Objective-See) 외부로 나가는 연결, 로그인 시 시작되도록 스스로 설치하는 소프트웨어 코드가 실행된 뒤
백신과 XProtect 알려진 악성코드 시그니처 파일이 알려진 샘플과 일치할 때

판단 방식

오프라인 규칙이 항상 먼저 실행되며, 매일 업데이트되는 공개 위협 인텔리전스가 이를 뒷받침합니다. 여기에는 OpenSSF에 신고된 230,000개 이상의 악성 npm·PyPI 패키지가 포함됩니다. 그다음 AI 모델이 맥락 속에서 증거를 판단할 수 있습니다. Claude가 가장 잘 맞고, 다른 제공업체와 로컬 모델도 지원하며, AI를 완전히 끌 수도 있습니다.

모델에는 검사에 필요한 증거만 보냅니다. 코드 주석은 먼저 제거하고, 비밀 정보는 절대 업로드하지 않습니다. 설정과 기록은 Mac의 ~/.tsuba에 남습니다.

설정: 방어 기능을 하나씩 켜고 끄고, AI를 쓸지 말지 포함해 판정 방식을 고릅니다.
설정: 방어 기능을 하나씩 켜고 끄고, AI를 쓸지 말지 포함해 판정 방식을 고릅니다.

이용 안내

Tsuba는 출시되었고, 무료이며, Apache 2.0 라이선스의 오픈 소스입니다(GitHub). 빌드는 두 가지입니다. M1 이후 Mac은 Apple 실리콘, 그보다 오래된 Mac은 Intel을 고르세요. 어느 쪽인지 모르겠다면 Apple 메뉴 → 이 Mac에 관하여 → 칩을 확인하세요.

앱은 10개 언어를 지원합니다: English, 简体中文, 繁體中文, 日本語, 한국어, Español, Français, Deutsch, Português, Русский. 인터페이스, 알림, 터미널 검사, 규칙 설명, AI 답변 모두 macOS 언어를 따르며, 설정 → 모양에서 직접 고를 수도 있습니다.

Tsuba는 아직 Apple의 서명이나 공증을 받지 않았기 때문에, 처음 열 때 macOS가 실행을 막습니다. 시스템 설정 → 개인정보 보호 및 보안으로 가서 그래도 열기를 클릭하세요. 대신 xattr로 격리 플래그를 지우지는 마세요. Tsuba는 그렇게 하라는 설치 프로그램을 경고하는데, 자기 자신만 예외일 수는 없습니다.

이 과정은 한 번만 하면 됩니다. 그 뒤로는 Tsuba가 스스로 업데이트합니다. 새 버전이 나오면 알려 주고, 서명이 앱에 내장된 키와 일치할 때만 설치합니다.

내 DMG가 GitHub이 공개 소스로 빌드한 바로 그 파일인지 확인하려면, shasum -a 256 Tsuba_*.dmg 결과를 릴리스 페이지의 SHA256SUMS.txt와 비교하세요.

직접 보기

실제 출력, 실제 규칙

샘플을 고르면 앱이 그 샘플을 검사했을 때 출력한 결과를 볼 수 있습니다: 오프라인 규칙만 사용, 버전 0.1.1. 샘플은 앱의 테스트 모음에서 가져왔습니다. 실제 공격의 형태를 흉내 내지만 무해합니다.

$ tsuba scan ~/code/fake_interview_project

Tsuba ✗ Block recommended  ~/code/fake_interview_project
  Evidence:
   High Decodes and then dynamically runs code (eval/Function + base64), common in obfuscated poisoned code [server/server.js] Source: Tsuba rules · Apache-2.0
      eval(Buffer.from("Y29uc29sZS5sb2coImxvY2FsZ3VhcmQgdGVzdCBmaXh0dXJlIik=", "base64").toString()); const C2 = "http://203.0.113.7:1224/api"; app.get('/', (q, r) =>
   High Connects straight to a hard-coded IP address and port (typical of a C2 server) [server/server.js]
      eval(Buffer.from("Y29uc29sZS5sb2coImxvY2FsZ3VhcmQgdGVzdCBmaXh0dXJlIik=", "base64").toString()); const C2 = "http://203.0.113.7:1224/api"; app.get('/', (q, r) =>
   High Code is pushed off the right edge of the screen by whitespace, out of sight (a typical way to hide a poisoned payload) [server/server.js]
      const app = require("express")(); ⟨400 spaces⟩ eval(Buffer.from("Y29uc29sZS5sb2coImxvY2FsZ3VhcmQgdGVzdCBmaXh0dXJlIik=", "base64").toString()); const C2 = "http:
변경 기록

변경 기록

릴리스 피드 ↗
파일 · v0.3.0크기
Tsuba_0.3.0_aarch64.dmg19.5 MB4b8ff8f2cc343864f63be59c43460f4396ab61ad4ae2ddd368d13ff61a58d1d3
Tsuba_0.3.0_x64.dmg22.3 MB02cfbea2b133032c5207c9e1dcbd1432ecc737408db29fbc1d9fb92fb5962122
  1. 0.3.02026년 10월 31일
    • f8aa092Give other languages' relative times room in the terminal log
    • d4a8ac6Translate the README into nine languages and refresh its screenshots
    • 7c0a4a6Add seals, a crest and gold fittings to the samurai look
    • 9de218fSpeak ten languages
    • 52826a5Restyle the shell as held-back samurai armor
    • c103f41Show the guard on a laptop and open the app through it
    • 1d22fd0Replace the katana logo with a 3D tsuba
    • 0cfcdfdAdd pnpm app to start the app from the repo root
    • 54bf89dDeclare all four MCP tool hints and test quarantine_list
    • 51a757fAdd the M8ven Verified badge to the README
    • 4ccb857Give the README a product page look with screenshots
    전체 변경 사항 ↗
  2. 0.2.12026년 10월 29일
    전체 변경 사항 ↗
  3. 0.2.02026년 10월 29일
    • be28cfaPlay a short, soft sound with Block notifications
    • 14d4349Redesign Settings, Health Check and the window chrome
    • 42754edUpdate Tsuba in the app from GitHub Releases
    • 4392c89Let users ignore warnings and choose which notifications they get
    전체 변경 사항 ↗
  4. 0.1.22026년 10월 28일
    • d0353e4Add the Apache-2.0 LICENSE
    • e7f620eLeave folders the sandbox hides out of its PATH
    • d8fc3b7Let the website workflow run by hand to test the hook
    • a1f8191Rebuild the website when a release is published
    전체 변경 사항 ↗
자주 묻는 질문

자주 묻는 질문

채용 담당자가 보낸 프로젝트를 실행해도 안전한가요?

검사하기 전까지는 신뢰할 수 없는 코드로 취급하세요. 가짜 채용 면접에서는 테스트 프로젝트 자체가 악성코드입니다. 폴더를 Tsuba 창으로 끌어다 놓거나, Tsuba를 연결한 터미널에서 클론하면, 무엇이든 실행되기 전에 의존성, 설치 스크립트, VS Code 작업을 검사합니다. 이미 실행했다면 상태 점검을 돌리고 제가 겪은 일을 읽어 보세요.

npm 패키지를 설치하기 전에 어떻게 확인하나요?

Tsuba를 터미널에 연결해 두면 npm install과 npx가 실행 전에 검사됩니다. OpenSSF 목록에 있는 알려진 악성 패키지, 며칠 전에 막 게시된 패키지, 설치 스크립트를 확인합니다. npq 같은 명령줄 도구도 npm에 한해 비슷한 검사를 합니다.

macOS에서 Tsuba를 열 수 없다고 하는 이유는?

Tsuba는 아직 Apple의 서명이나 공증을 받지 않았습니다. 그래서 처음 열 때 시스템 설정 → 개인정보 보호 및 보안으로 가서 그래도 열기를 클릭해야 합니다. 대신 xattr로 격리 플래그를 지우지는 마세요. Tsuba는 그렇게 하라는 설치 프로그램을 경고합니다. 다운로드한 파일을 확인하려면 변경 기록에 나온 SHA-256과 비교하세요.

Tsuba가 제 코드를 업로드하나요?

파일은 업로드하지 않습니다. AI를 켜면 검사에 필요한 증거만 선택한 모델로 보내며, 코드 주석은 제거하고 비밀 정보는 빼고 보냅니다. AI를 끄면 검사는 Mac에서 오프라인 규칙으로 진행됩니다. 설정과 기록은 ~/.tsuba에 남습니다. Tsuba가 무엇을 언제 보내는지는 개인정보 처리 안내에 모두 나와 있습니다.

AI 구독이나 API 키가 필요한가요?

아니요. 오프라인 규칙이 항상 먼저 실행되고, 그것만으로도 동작합니다. AI는 선택 사항입니다. Claude가 가장 잘 맞고, 다른 제공업체와 로컬 모델도 지원합니다.

백신을 대신하나요?

아니요. 알려진 악성코드를 알아보는 일은 macOS XProtect와 공개 위협 인텔리전스에 맡깁니다. Tsuba는 이들이 놓치는 것을 다룹니다. 가짜 면접 프로젝트, 가짜 회의 앱, 오염된 패키지, 악성 확장 프로그램처럼 아직 아무도 본 적 없는 새 포장의 코드를, 실행되기 전에 막아섭니다.

어떤 Mac에서 실행되나요?

macOS 13 이상, Apple 실리콘과 Intel 모두 지원하며 다운로드가 따로 있습니다. Apple 메뉴 → 이 Mac에 관하여 → 칩에서 어느 쪽인지 확인할 수 있습니다.

실제로는 안전한 것을 잡아내면요?

모든 경고와 차단에는 증거(어떤 파일, 어떤 줄, 무엇이 일치했는지)가 표시되므로 직접 판단할 수 있습니다. 확인한 경고는 무시할 수 있고, 신뢰하는 것은 허용 목록에 넣을 수 있습니다. 오탐을 신고해 주세요. 하나하나가 회귀 테스트가 됩니다.

피드백

버그나 놓친 공격을 발견했나요?

신고는 GitHub Issues에 공개로 올라갑니다. 비밀 정보는 절대 붙여 넣지 마세요. 실제 악성 샘플은 파일 대신 해시와 출처를 보내 주세요.

팔로우하기

만드는 과정, 실험, 배운 점을 그때그때 공유합니다.

새 영상은 YouTube에, 짧은 메모는 X에 올립니다. 이곳의 모든 글은 두 곳으로 연결됩니다.

YouTube