
애플리케이션 보안을 위한 형식적 프로시저 간 오염 분석 엔진입니다. 함수 경계, 지속성 계층 및 비동기 코드 전반에서 신뢰할 수 없는 데이터를 추적합니다. 결정론적 규칙 재생이 가능한 AI 에이전트 준비 상태입니다. Semgrep Pro 및 CodeQL에 대한 오픈소스 대안입니다.
<p align="center">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="../../logos/opentaint-logo-dark.svg">
<source media="(prefers-color-scheme: light)" srcset="../../logos/opentaint-logo-light.svg">
<img src="https://raw.githubusercontent.com/seqra/opentaint/HEAD/logos/opentaint-logo-light.svg" alt="OpenTaint" height="100">
</picture>
</p>
<h3 align="center">AI 시대를 위한 오픈 소스 오염 분석 엔진</h3>
<p align="center">
애플리케이션 보안을 위한 정형적 오염 분석 — AST 패턴 매칭 엔진이 놓치는 것을 찾아내고, LLM 에이전트가 취약점을 규칙으로 적용하도록 하며, 어느 쪽도 단독으로는 불가능한 규모로 확장합니다.
</p>
<p align="center">
<a href="https://github.com/seqra/opentaint/releases"><img src="https://img.shields.io/github/release/seqra/opentaint.svg" alt="GitHub 릴리스"></a>
<a href="https://goreportcard.com/report/github.com/seqra/opentaint/cli"><img src="https://goreportcard.com/badge/github.com/seqra/opentaint/cli" alt="Go Report Card"></a>
<a href="https://github.com/seqra/opentaint/blob/main/LICENSE.md"><img src="https://img.shields.io/badge/License-Apache%202.0-blue.svg" alt="라이선스: Apache 2.0"></a>
<a href="https://golang.org/"><img src="https://img.shields.io/badge/Go-1.25+-00ADD8?logo=go" alt="Go 버전"></a>
<a href="https://discord.gg/6BXDfbP4p9"><img src="https://img.shields.io/discord/1403357427176575036?logo=discord&label=Discord" alt="Discord"></a>
</p>
<p align="center">
<a href="https://github.com/seqra/opentaint/blob/main/README.md">English</a> | <a href="https://github.com/seqra/opentaint/blob/main/docs/translations/README.zh.md">简体中文</a> | <a href="https://github.com/seqra/opentaint/blob/main/docs/translations/README.zht.md">繁體中文</a> | <a href="https://github.com/seqra/opentaint/blob/main/docs/translations/README.ko.md">한국어</a> | <a href="https://github.com/seqra/opentaint/blob/main/docs/translations/README.de.md">Deutsch</a> | <a href="https://github.com/seqra/opentaint/blob/main/docs/translations/README.es.md">Español</a> | <a href="https://github.com/seqra/opentaint/blob/main/docs/translations/README.fr.md">Français</a> | <a href="https://github.com/seqra/opentaint/blob/main/docs/translations/README.it.md">Italiano</a> | <a href="https://github.com/seqra/opentaint/blob/main/docs/translations/README.da.md">Dansk</a> | <a href="https://github.com/seqra/opentaint/blob/main/docs/translations/README.ja.md">日本語</a> | <a href="https://github.com/seqra/opentaint/blob/main/docs/translations/README.pl.md">Polski</a> | <a href="https://github.com/seqra/opentaint/blob/main/docs/translations/README.ru.md">Русский</a> | <a href="https://github.com/seqra/opentaint/blob/main/docs/translations/README.bs.md">Bosanski</a> | <a href="https://github.com/seqra/opentaint/blob/main/docs/translations/README.ar.md">العربية</a> | <a href="https://github.com/seqra/opentaint/blob/main/docs/translations/README.no.md">Norsk</a> | <a href="https://github.com/seqra/opentaint/blob/main/docs/translations/README.sv.md">Svenska</a> | <a href="https://github.com/seqra/opentaint/blob/main/docs/translations/README.br.md">Português (Brasil)</a> | <a href="https://github.com/seqra/opentaint/blob/main/docs/translations/README.th.md">ไทย</a> | <a href="https://github.com/seqra/opentaint/blob/main/docs/translations/README.tr.md">Türkçe</a> | <a href="https://github.com/seqra/opentaint/blob/main/docs/translations/README.ua.md">Українська</a> | <a href="https://github.com/seqra/opentaint/blob/main/docs/translations/README.bn.md">বাংলা</a> | <a href="https://github.com/seqra/opentaint/blob/main/docs/translations/README.hi.md">हिन्दी</a> | <a href="https://github.com/seqra/opentaint/blob/main/docs/translations/README.gr.md">Ελληνικά</a> | <a href="https://github.com/seqra/opentaint/blob/main/docs/translations/README.vi.md">Tiếng Việt</a> | <a href="https://github.com/seqra/opentaint/blob/main/docs/translations/README.id.md">Bahasa Indonesia</a>
</p>
<p align="center">
<a href="http://opentaint.org/">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="../../public/opentaint-demo-dark.gif">
<source media="(prefers-color-scheme: light)" srcset="../../public/opentaint-demo-light.gif">
<img src="https://assets.kitploit.com/production/public/readmes/13793/562b0290a09060eff941363dd673b805d145664f68b1074b35b7b670ede8cd66.gif" alt="OpenTaint 요약 출력">
</picture>
</a>
</p>
<p align="center"><b>지원되는 기술 및 통합</b></p>
<p align="center">
<img src="https://raw.githubusercontent.com/seqra/opentaint/HEAD/logos/java-logo.svg" alt="Java" height="60">
<img src="https://raw.githubusercontent.com/seqra/opentaint/HEAD/logos/kotlin-logo.svg" alt="Kotlin" height="60">
<img src="https://raw.githubusercontent.com/seqra/opentaint/HEAD/logos/spring-boot-logo.svg" alt="Spring" height="60">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="../../logos/github-logo-dark.svg">
<source media="(prefers-color-scheme: light)" srcset="../../logos/github-logo-light.svg">
<img src="https://raw.githubusercontent.com/seqra/opentaint/HEAD/logos/github-logo-light.svg" alt="GitHub" height="60">
</picture>
<img src="https://raw.githubusercontent.com/seqra/opentaint/HEAD/logos/gitlab-logo.svg" alt="GitLab" height="60">
</p>
<p align="center"><i>Spring 앱을 위한 가장 철저한 taint 분석 엔진</i></p>
<p align="center"><b>로드맵</b></p>
<p align="center">
<img src="https://raw.githubusercontent.com/seqra/opentaint/HEAD/logos/python-logo.svg" alt="Python" height="60">
<img src="https://raw.githubusercontent.com/seqra/opentaint/HEAD/logos/go-logo.svg" alt="Go" height="60">
<img src="https://raw.githubusercontent.com/seqra/opentaint/HEAD/logos/csharp-logo.svg" alt="C#" height="60">
<img src="https://raw.githubusercontent.com/seqra/opentaint/HEAD/logos/javascript-logo.svg" alt="JavaScript" height="60">
<img src="https://raw.githubusercontent.com/seqra/opentaint/HEAD/logos/typescript-logo.svg" alt="TypeScript" height="60">
</p>
<div align="center">
<details>
<summary><b>더 많은 스크린샷</b></summary>
<p align="center">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="../../public/opentaint-frame-dark-1.png">
<source media="(prefers-color-scheme: light)" srcset="../../public/opentaint-frame-light-1.png">
<img src="https://assets.kitploit.com/production/public/readmes/13793/8d9998e1918080fb841ec0ad473f51269941b9b5536ff7ac24480a600ad2f648.png" alt="OpenTaint 스캔 출력">
</picture>
</p>
<p align="center">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="../../public/opentaint-frame-dark-2.png">
<source media="(prefers-color-scheme: light)" srcset="../../public/opentaint-frame-light-2.png">
<img src="https://assets.kitploit.com/production/public/readmes/13793/3f916c30b3f3b64064e428101084005a58f4ae3d988703946a899f6fb5f6f22a.png" alt="OpenTaint 요약 출력">
</picture>
</p>
<p align="center">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="../../public/opentaint-frame-dark-3.png">
<source media="(prefers-color-scheme: light)" srcset="../../public/opentaint-frame-light-3.png">
<img src="https://assets.kitploit.com/production/public/readmes/13793/a9f747d50d24686930d7fb97c3539bb8f34c42f3c24a79c7f21b8e1d55a7ba43.png" alt="OpenTaint 요약 출력">
</picture>
</p>
<p align="center">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="../../public/opentaint-frame-dark-4.png">
<source media="(prefers-color-scheme: light)" srcset="../../public/opentaint-frame-light-4.png">
<img src="https://assets.kitploit.com/production/public/readmes/13793/6f527df53125d8b57390c691e3ab37080b3ed7c6c0f9614af7dbbe4e7883c046.png" alt="OpenTaint 요약 출력">
</picture>
</p>
<p align="center">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="../../public/opentaint-frame-dark-5.png">
<source media="(prefers-color-scheme: light)" srcset="../../public/opentaint-frame-light-5.png">
<img src="https://assets.kitploit.com/production/public/readmes/13793/063464f019e0d1ec835eedd8e14fb1553c50030d193a8dc6739c079bce648126.png" alt="OpenTaint 요약 출력">
</picture>
</p>
</details>
</div>
---
## OpenTaint을 사용해야 하는 이유는?
> OpenTaint은 *Semgrep Pro* 와 *CodeQL* 의 오픈 소스 대안입니다 — 직접 커스터마이징하고 셀프 호스팅할 수 있는 정형적 프로시저 간 오염 분석 엔진으로, AI 에이전트가 매 스캔마다 토큰을 소모하지 않고도 보안 분석을 주도하도록 만들어졌습니다.
AI는 보안 팀이 따라잡을 수 있는 속도보다 빠르게 프로덕션 코드를 생성하며, AI가 잘못 만든 부분을 잡아내기 위해 만들어진 두 종류의 도구는 각각 나쁜 트레이드오프를 강요합니다:
- **AST 패턴 매처** (Semgrep OSS, ast-grep, 린터)는 무료이고 빠르지만, 데이터 흐름이 아닌 구문을 매칭합니다 — 함수 경계나 영속성 계층을 가로지르는 신뢰할 수 없는 입력은 그대로 빠져나갑니다. 이를 *실제로* 잡아내는 더 깊은 프로시저 간 분석은 오랫동안 독점 도구 안에 갇혀 있었습니다.
- **LLM 보안 에이전트**는 패턴 매처가 놓치는 것을 찾아내지만, 실행할 때마다 코드를 다시 읽습니다. 토큰은 모든 파일, 모든 커밋, 모든 CI 빌드마다 쌓여가고 — 확률적 모델은 여전히 모든 것을 잡아냈다고 약속할 수 없습니다.
OpenTaint은 정적 분석기의 비용으로 LLM 에이전트의 깊이를 제공합니다:
- **AST 패턴 매처가 놓치는 것을 찾아냅니다.** 정형적 프로시저 간 데이터플로우 엔진은 함수 경계, 영속성 계층, 별칭, 비동기 코드를 가로질러 신뢰할 수 없는 데이터를 추적합니다.
- **매 스캔이 아니라 모델은 한 번만 비용을 지불합니다.** 에이전트가 하나의 발견을 오염 분석 규칙으로 정제하도록 하세요. 그러면 결정론적 엔진이 그 규칙을 전체 코드베이스에 걸쳐 — 그리고 그 이후의 모든 커밋에서 — 수 분의 CPU 시간 내에, 토큰 비용 없이 재생합니다.
- **오픈 소스, 모든 것이 포함되어 있습니다.** 엔진, 규칙, CI 통합이 Apache 2.0 및 MIT 라이선스 하에 하나의 스택으로 제공됩니다.
## 빠른 시작
**설치 스크립트 (Linux/macOS)**
```
curl -fsSL https://opentaint.org/install.sh | bash
```
**Homebrew를 통한 설치 (Linux/macOS):**
```bash
brew install --cask seqra/tap/opentaint
```
**설치 스크립트 (Windows PowerShell)**
```
irm https://opentaint.org/install.ps1 | iex
```
**npm을 통한 설치 (Linux/macOS/Windows):**
```bash
npm install -g @seqra/opentaint
```
**또는 npx로 즉시 실행 — 설치 불필요 (Node.js 필요):**
```bash
npx @seqra/opentaint scan
```
**프로젝트 스캔:**
```bash
opentaint scan
```
**또는 Docker 사용:**
```bash
docker run --rm -v $(pwd):/project -v $(pwd):/output \
ghcr.io/seqra/opentaint:latest \
opentaint scan --output /output/results.sarif /project
```
더 많은 옵션은 [설치](https://github.com/seqra/opentaint/blob/main/docs/README.md#installation) 및 [사용법](https://github.com/seqra/opentaint/blob/main/docs/README.md#usage)을 참조하세요.
---
## AI 에이전트 워크플로우
OpenTaint에는 정적 분석을 종단 간 애플리케이션 보안 워크플로우로 전환하는 에이전트 스킬이 포함되어 있습니다. 다음 명령으로 설치하세요:
```bash
npx skills add https://github.com/seqra/opentaint
```
`appsec-agent` 스킬은 전체 프로젝트 평가를 조율합니다: 프로젝트 빌드, OpenTaint 실행, 공격 표면 탐색, 맞춤 규칙 추가, 누락된 라이브러리 데이터 흐름 모델링, 발견 사항 분류, 그리고 선택적으로 확인된 취약점에 대한 동적 개념 증명(proof-of-concept) 검증 생성까지 수행합니다.
포함된 스킬은 일반적인 보안 분석 루프를 다룹니다:
- **스캔 및 분류:** `build-project`, `run-scan`, `analyze-findings`, `generate-poc`
- **커버리지 확장:** `triage-dependencies`, `discover-attack-surface`, `create-test-project`, `create-rule`, `assemble-lib-rules`
- **데이터플로우 모델링:** `analyze-external-methods`, `create-pass-through-approximation`, `create-dataflow-approximation`, `debug-rule`, `report-analyzer-issue`
---
## 문서
전체 가이드 — 설치, 사용법, 구성, CI/CD 통합: **[문서](https://github.com/seqra/opentaint/blob/main/docs/README.md)**.
## 지원
- **이슈:** [GitHub Issues](https://github.com/seqra/opentaint/issues)
- **커뮤니티:** [Discord](https://discord.gg/6BXDfbP4p9)
- **이메일:** [[email protected]](mailto:[email protected])
## 스타 히스토리
<a href="https://www.star-history.com/?repos=seqra%2Fopentaint&type=date&legend=top-left">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/chart?repos=seqra/opentaint&type=date&theme=dark&legend=top-left&sealed_token=cNibcudvsLJKQVlqN0qt2kK3b3-5zBDkzDzTamAWPRP6ny8KmCeZIooBYT7NBhjkd-T6OiiW7Iu9b1FSgL6n9IHMTPuoqKahF1NtidSTKkDXcbw8bY6k57DDstncYkKHJieEn9sJQ8oKJIYyBtYuQfk19qu5Kb1kvzCMT_dqOXXv3LM7EKZlljFcXAUh" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/chart?repos=seqra/opentaint&type=date&legend=top-left&sealed_token=cNibcudvsLJKQVlqN0qt2kK3b3-5zBDkzDzTamAWPRP6ny8KmCeZIooBYT7NBhjkd-T6OiiW7Iu9b1FSgL6n9IHMTPuoqKahF1NtidSTKkDXcbw8bY6k57DDstncYkKHJieEn9sJQ8oKJIYyBtYuQfk19qu5Kb1kvzCMT_dqOXXv3LM7EKZlljFcXAUh" />
<img alt="Star History Chart" src="https://assets.kitploit.com/production/public/readmes/placeholders/f0fc86cfe65f76d40e15aaec61704ec8220a56dc89d4be03c46f67cb31b9fa8c.svg" />
</picture>
</a>
## 라이선스
[핵심 분석 엔진](https://github.com/seqra/opentaint/blob/main/core)은 [Apache 2.0 라이선스](https://github.com/seqra/opentaint/blob/main/LICENSE.md)로 배포됩니다. [CLI](https://github.com/seqra/opentaint/blob/main/cli), [GitHub Action](https://github.com/seqra/opentaint/blob/main/github), [GitLab CI 템플릿](https://github.com/seqra/opentaint/blob/main/gitlab), [규칙](https://github.com/seqra/opentaint/blob/main/rules)은 [MIT 라이선스](https://github.com/seqra/opentaint/blob/main/cli/LICENSE)로 배포됩니다.