
저장소에서 보안 문제를 찾는 데 도움을 주는 doggo입니다.
Layne은 자체 호스팅되는 GitHub 앱으로, 리포지토리 전반의 보안 스캔을 중앙화합니다. 상용 SAST/시크릿 스캐닝 도구를 사용하지 않고 GitHub Enterprise에 접근할 수 없기 때문에, 여러 리포지토리에서 서로 다른 GitHub Actions 워크플로우 파일을 유지 관리하는 것이 어려울 수 있습니다. 특히 리포지토리 수가 증가할수록 더욱 그렇습니다. 대신, Layne을 한 번 설치하면 풀 리퀘스트 이벤트를 수신하고, 서버 측에서 보안 도구를 실행하며, 결과를 네이티브 GitHub Check Run 주석으로 게시하고, 보안 팀의 보안 알림 채널에 알림을 보냅니다.
이 도구는 Reddit의 구현을 기반으로 했습니다.
┌─────────────────────────────────┐
│ GITHUB PULL REQUEST │◀────────────────────────┐
│ (OPEN, SYNC, REOPEN) │ │
└─────────────────────────────────┘ │
│ Check run │
HTTP Post /webhook │
│ │
┌──────────────────────────────────────────────────────────────────────────────────────────┐
│ EC2 Instance (Docker) │ │ │
│ ┌───────▼────────┐ │ │
│ │ NGINX + TLS │ │ │
│ └───────┬────────┘ │ │
│ │ │ │
│ ┌─────────────────────┘ │ │
│ │ │ │
│┌─────────────┐ │ Schedules job ┌────────────────┐ ┌────────────┐ │ │
││ LAYNE │◀─┘ ─────────────────▶│ REDIS │───▶│ TRUFFLEHOG │──┐ │ │
││ SERVER │ │ (BULLMQ) │ │ └────────────┘ │ │ │
│└─────────────┘ └────────────────┘ │ ┌────────────┐ │ │ │
│ │─▶│ SEMGREP │──┤ │ │
│ │ └────────────┘ │ │ │
│ │ ┌────────────┐ │ ┌──────────┐│
│ ├─▶│ CLAUDE │──┼─▶│ REPORTER ││
│ │ └────────────┘ │ └──────────┘│
│ │ ┌────────────┐ │ │
│ ├─▶│ SPECTRE │──┤ │
│ │ └────────────┘ │ │
│ │ ┌────────────┐ │ │
│ └─▶│ DEP DOCTOR │──┘ │
│ └────────────┘ │
└──────────────────────────────────────────────────────────────────────────────────────────┘
PR이 열리거나 업데이트되거나(또는 워크플로우/작업이 실행된 후, 설정한 트리거에 따라) GitHub가 웹훅을 Layne으로 전송합니다. 서버는 즉시 스캔 작업을 대기열에 넣고 GitHub에 200 OK를 반환합니다. 작업자가 작업을 가져와 이벤트를 트리거한 정확한 커밋을 클론하고, 변경된 파일을 각 설정된 스캐너(Semgrep, Trufflehog, Claude, Spectre, Dep Doctor)에 전달하며, 결과를 수집하여 Check Run에 인라인 주석으로 게시합니다.
PR에서 수정된 파일만 각 스캐너로 전달됩니다. 수정하지 않은 파일의 결과는 보고되지 않습니다.
Layne은 5개의 내장 스캐너를 제공합니다. 각 리포지토리에서 config/layne.json을 통해 각 스캐너를 활성화, 비활성화 또는 구성할 수 있습니다.
자체 스캐너를 추가할 수도 있습니다. Layne 확장하기를 참조하세요.
모든 것이 적절히 구성되면 Layne은 풀 리퀘스트에 실행을 추가하고 구성된 스캐닝 도구를 실행합니다. 스캔에 실패하면 다음과 같이 보입니다.

Layne의 결과는 PR에 인라인 주석으로 기록되어 보안 문제가 발견된 정확한 라인을 나타냅니다.

또한 검사 자체를 클릭하여 Layne의 결과와 요약을 확인할 수 있습니다.

그리고 Layne을 구성하여 웹훅을 통해 Rocket.Chat 채널로 알림을 보낼 수 있습니다. Slack도 구성할 수 있으며, 다른 채팅 플랫폼을 사용하는 경우 새 알림기를 쉽게 추가할 수 있습니다.

로컬에서 문서 사이트를 실행하려면:
npm run docs:dev
그런 다음 http://localhost:3000을 엽니다.
전체 문서는 배포, 구성, 스캐너, 알림기, PR 댓글, 결과 억제, 메트릭, 보안 아키텍처 등을 다룹니다.
Layne은 Apache License 2.0 (Apache-2.0)에 따라 라이선스가 부여됩니다. 전체 텍스트는 LICENSE를 참조하세요.
저작권 2026 Rocket.Chat Technologies Corp.
| 스캐너 | 탐지 항목 | 참고 사항 |
|---|
| Semgrep | SAST - 버그, 취약점, 안전하지 않은 패턴 | 기본적으로 semgrep scan --config auto 실행; extraArgs를 통해 완전히 구성 가능 |
| Trufflehog | 시크릿, API 키 및 자격 증명 | trufflehog filesystem 실행; --only-verified를 사용하여 노이즈 감소 가능 |
| Claude | 악의적인 의도, 백도어, 난독화된 페이로드, 공급망 공격 | 기본적으로 비활성화; 리포지토리별로 옵트인; ANTHROPIC_API_KEY 필요 |
| Spectre | 파일당 단일 LLM 호출을 통한 악의적인 의도 | 기본적으로 비활성화; 리포지토리별로 옵트인; Anthropic, OpenAI, Google, Mistral, Bedrock 지원 |
| Dep Doctor | CVE, 폐기 및 더 이상 사용되지 않는 의존성 | 기본적으로 비활성화; 리포지토리별로 옵트인; PATH에 osv-scanner 필요 |