Cycode MCP Server
공식개발 라이프사이클에서 SAST, SCA, 시크릿 및 IaC 스캐닝을 통해 보안을 강화하세요.
문서
Cycode CLI 사용자 가이드
Cycode 명령줄 인터페이스(CLI)는 저장소에서 시크릿, 코드형 인프라 구성 오류, 소프트웨어 구성 분석 취약점 및 정적 애플리케이션 보안 테스트 문제를 스캔하기 위해 로컬에 설치할 수 있는 애플리케이션입니다.
이 가이드는 설치 및 사용 방법을 안내합니다.
목차
- 사전 요구 사항
- 설치
- Cycode CLI 명령
- MCP 명령
- Platform 명령
- Scan 명령
- Report 명령
- Import 명령
- 스캔 로그
- 구문 도움말
사전 요구 사항
- Cycode CLI 애플리케이션은 Python 버전 3.9 이상이 필요합니다. MCP 명령은 Python 3.10 이상에서만 사용할 수 있습니다. 이전 Python 버전을 사용하는 경우 이 명령을 사용할 수 없습니다.
cycode auth명령을 사용하여 CLI로 Cycode에 인증하십시오.
설치
다음 설치 단계는 Windows 및 UNIX / Linux 운영 체제 모두에 적용됩니다.
[!NOTE] 다음 단계에서는 Python 관련 명령에
python3및pip3을 사용한다고 가정합니다. 그러나 일부 시스템에서는 Python 환경 구성에 따라python및pip명령을 대신 사용할 수 있습니다.
Cycode CLI 설치
로컬 머신에 Cycode CLI 애플리케이션을 설치하려면 다음 단계를 수행하십시오.
-
명령줄 또는 터미널 애플리케이션을 엽니다.
-
다음 명령 중 하나를 실행합니다.
-
PyPI에서 설치하려면:
pip3 install cycode -
Homebrew에서 설치하려면:
brew install cycode -
GitHub 릴리스에서 설치하려면 운영 체제 및 아키텍처에 맞는 실행 파일을 탐색하여 다운로드한 후 다음 명령을 실행합니다.
cd /path/to/downloaded/cycode-cli chmod +x cycode ./cycode -
-
마지막으로 CLI를 인증합니다. Cycode 클라이언트 ID 및 자격 증명(클라이언트 시크릿 또는 OIDC ID 토큰)을 설정하는 세 가지 방법이 있습니다.
- cycode auth (권장)
- cycode configure
- 환경 변수에 추가
Auth 명령 사용
[!NOTE] Cycode CLI로 인증하도록 로컬 머신을 설정하는 권장 방법입니다.
-
터미널/명령줄 창에 다음 명령을 입력합니다.
cycode auth -
브라우저 창이 나타나 Cycode에 로그인하라는 메시지가 표시됩니다(아래 참조).
-
이 페이지에서 로그인 자격 증명을 입력하고 로그인합니다.
-
결국 아래 페이지로 이동하여 Cycode에 권한을 부여할 비즈니스 그룹을 선택하라는 메시지가 표시됩니다(해당하는 경우).
[!NOTE] 이것이 Cycode CLI 인증의 기본 방법이 됩니다.
-
허용 버튼을 클릭하여 선택한 비즈니스 그룹에서 Cycode CLI를 승인합니다.
-
완료되면 성공적으로 선택된 경우 다음 화면이 표시됩니다.
-
터미널/명령줄 화면에서 브라우저 창을 종료하면 다음이 표시됩니다.
Successfully logged into cycode
Configure 명령 사용
[!NOTE] Linux 또는 Windows 환경 변수를 통해 Cycode 클라이언트 ID 및 클라이언트 시크릿을 이미 설정한 경우 해당 자격 증명이 이 방법보다 우선합니다.
-
터미널/명령줄 창에 다음 명령을 입력합니다.
cycode configure -
Cycode API URL 값을 입력합니다(기본값을 사용하려면 비워 둘 수 있음).
Cycode API URL [https://api.cycode.com]: https://api.onpremise.com -
Cycode APP URL 값을 입력합니다(기본값을 사용하려면 비워 둘 수 있음).
Cycode APP URL [https://app.cycode.com]: https://app.onpremise.com -
Cycode 클라이언트 ID 값을 입력합니다.
Cycode Client ID []: 7fe5346b-xxxx-xxxx-xxxx-55157625c72d -
Cycode 클라이언트 시크릿 값을 입력합니다(OIDC ID 토큰을 사용할 계획이면 건너뜁니다).
Cycode Client Secret []: c1e24929-xxxx-xxxx-xxxx-8b08c1839a2e -
Cycode OIDC ID 토큰 값을 입력합니다(선택 사항).
Cycode ID Token []: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9... -
값이 성공적으로 입력되면 다음 메시지가 표시됩니다.
Successfully configured CLI credentials!또는/그리고
Successfully configured Cycode URLs!
사용자 폴더 아래의 .cycode 폴더로 이동하면 이러한 자격 증명이 생성되어 해당 폴더의 credentials.yaml 파일에 저장된 것을 확인할 수 있습니다.
URL은 해당 폴더의 config.yaml 파일에 저장되었습니다.
환경 변수에 추가
Unix/Linux에서:
export CYCODE_CLIENT_ID={your Cycode ID}
그리고
export CYCODE_CLIENT_SECRET={your Cycode Secret Key}
조직에서 OIDC 인증을 사용하는 경우 대신(또는 추가로) ID 토큰을 제공할 수 있습니다.
export CYCODE_ID_TOKEN={your Cycode OIDC ID token}
Windows에서
-
제어판에서 시스템 메뉴로 이동합니다.
-
다음으로 고급 시스템 설정을 클릭합니다.
-
열리는 시스템 속성 창에서 환경 변수 버튼을 클릭합니다.
-
ID 및 시크릿 키와 각각 일치하는 값을 가진
CYCODE_CLIENT_ID및CYCODE_CLIENT_SECRET변수를 생성합니다. OIDC를 통해 인증하는 경우 OIDC ID 토큰 값과 함께CYCODE_ID_TOKEN도 추가합니다.
-
설치를 완료하려면 경로에
cycode.exe을 삽입합니다.
사전 커밋 훅 설치
Cycode의 사전 커밋 및 사전 푸시 훅을 로컬 저장소 내에 설정하면 코드를 커밋하거나 코드베이스에 푸시하기 전에 Cycode CLI 애플리케이션이 코드 문제를 자동으로 식별합니다.
[!NOTE] 사전 커밋 및 사전 푸시 훅은 IaC 스캔에 사용할 수 없습니다.
사전 커밋 훅을 설치하려면 다음 단계를 수행하십시오.
사전 커밋 훅 설치
-
사전 커밋 프레임워크를 설치합니다(Python 3.9 이상이 설치되어 있어야 함).
pip3 install pre-commit -
구성하려는 로컬 Git 저장소의 최상위 디렉터리로 이동합니다.
-
저장소의 최상위 디렉터리에
.pre-commit-config.yaml이라는 이름의 새 YAML 파일을 만들고(시작 부분에.포함) 다음 내용을 포함합니다.repos: - repo: https://github.com/cycodehq/cycode-cli rev: v3.5.0 hooks: - id: cycode stages: [pre-commit] -
특정 요구 사항에 맞게 생성된 파일을 수정합니다. 시크릿 스캔을 활성화하려면 훅 ID
cycode를 사용합니다. SCA 스캔을 활성화하려면 훅 IDcycode-sca을 사용합니다. SAST 스캔을 활성화하려면 훅 IDcycode-sast을 사용합니다. 모든 스캔 유형을 활성화하려면 다음 구성을 사용합니다.repos: - repo: https://github.com/cycodehq/cycode-cli rev: v3.5.0 hooks: - id: cycode stages: [pre-commit] - id: cycode-sca stages: [pre-commit] - id: cycode-sast stages: [pre-commit] -
Cycode의 훅을 설치합니다.
pre-commit install훅 설치가 성공하면
Pre-commit installed at .git/hooks/pre-commit메시지가 표시됩니다. -
사전 커밋 훅을 최신 상태로 유지합니다.
pre-commit autoupdate이렇게 하면
.pre-commit-config.yaml의rev이 사용 가능한 최신 Cycode CLI 버전으로 자동 업데이트됩니다.
[!NOTE] 트리거는
git commit명령에서 발생합니다. 훅은 커밋을 위해 스테이징된 파일에만 트리거됩니다.
사전 푸시 훅 설치
사전 커밋 훅 외에 또는 대신 사전 푸시 훅을 설치하려면:
-
.pre-commit-config.yaml파일에 사전 푸시 훅을 추가합니다.repos: - repo: https://github.com/cycodehq/cycode-cli rev: v3.5.0 hooks: - id: cycode-pre-push stages: [pre-push] -
사전 푸시 훅을 설치합니다.
pre-commit install --hook-type pre-push -
사전 커밋 및 사전 푸시 훅 모두에 대해 다음을 사용합니다.
pre-commit install pre-commit install --hook-type pre-push
[!NOTE] 사전 푸시 훅은
git push명령에서 트리거되며 푸시하려는 커밋만 스캔합니다.
Cycode CLI 명령
다음은 Cycode CLI 애플리케이션에서 사용할 수 있는 옵션 및 명령입니다.
| 옵션 | 설명 |
|---|---|
-v, --verbose | 자세한 로그를 표시합니다. |
--no-progress-meter | 진행률 표시기를 표시하지 않습니다. |
--no-update-notifier | CLI 업데이트를 확인하지 않습니다. |
-o, --output [rich|text|json|table] | 출력 유형을 지정합니다. 기본값은 rich입니다. |
--client-id TEXT | 이 특정 스캔 실행을 위한 Cycode 클라이언트 ID를 지정합니다. |
--client-secret TEXT | 이 특정 스캔 실행을 위한 Cycode 클라이언트 시크릿을 지정합니다. |
--id-token TEXT | 이 특정 스캔 실행을 위한 Cycode OIDC ID 토큰을 지정합니다. |
--install-completion | 현재 셸에 대한 완료를 설치합니다. |
--show-completion [bash|zsh|fish|powershell|pwsh] | 지정된 셸에 대한 완료를 표시하여 복사하거나 설치를 사용자 지정합니다. |
-h, --help | 지정된 명령에 대한 옵션을 표시합니다. |
| 명령어 | 설명 |
| ------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| auth | Cycode 계정과 CLI를 연결하기 위해 머신을 인증합니다. |
| configure | CLI 클라이언트 인증을 구성하기 위한 초기 명령어입니다. |
| ignore | 특정 값, 경로 또는 규칙 ID를 무시합니다. |
| mcp | AI 통합을 위해 Cycode 스캔 기능과 함께 모델 컨텍스트 프로토콜(MCP) 서버를 시작합니다. |
| scan | 시크릿/IaC/SCA/SAST 위반 사항에 대해 콘텐츠를 스캔합니다. 수행할 스캔 유형(commit-history/path/repository 등)을 지정해야 합니다. |
| report | 보고서를 생성합니다. SBOM으로 수행할 보고서 유형을 지정해야 합니다. |
| status | CLI 상태를 표시하고 종료합니다. |
MCP 명령어 [실험적 기능]
[!WARNING] MCP 명령어는 Python 3.10 이상에서만 사용할 수 있습니다. 이전 Python 버전을 사용 중인 경우 이 명령어를 사용할 수 없습니다.
모델 컨텍스트 프로토콜(MCP) 명령어를 사용하면 Cycode의 스캔 기능을 AI 시스템 및 애플리케이션에 노출하는 MCP 서버를 시작할 수 있습니다. 이를 통해 AI 모델이 표준화된 프로토콜을 통해 Cycode CLI 도구와 상호 작용할 수 있습니다.
[!TIP] 최상의 경험을 위해
pip install cycode또는brew install cycode을 사용하여 시스템에 Cycode CLI를 전역적으로 설치한 다음,cycode auth로 한 번 인증하십시오. 전역 설치 및 인증 후에는 MCP 구성 파일에서CYCODE_CLIENT_ID및CYCODE_CLIENT_SECRET환경 변수를 구성할 필요가 없습니다.
MCP 서버 시작하기
MCP 서버를 시작하려면 다음 명령어를 사용하십시오:
cycode mcp
기본적으로 이 명령은 하위 프로세스를 생성할 수 있는 로컬 통합 및 AI 애플리케이션에 적합한 stdio 전송을 사용하여 서버를 시작합니다.
사용 가능한 옵션
| 옵션 | 설명 |
|---|---|
-t, --transport | MCP 서버의 전송 유형: stdio, sse 또는 streamable-http (기본값: stdio) |
-H, --host | 서버를 바인딩할 호스트 주소 (stdio가 아닌 전송에만 사용됨) (기본값: 127.0.0.1) |
-p, --port | 서버를 바인딩할 포트 번호 (stdio가 아닌 전송에만 사용됨) (기본값: 8000) |
--help | 도움말 메시지 및 사용 가능한 옵션 표시 |
MCP 도구
MCP 서버는 AI 시스템이 사용할 수 있는 다음 도구를 제공합니다:
| 도구 이름 | 설명 |
|---|---|
cycode_secret_scan | 하드코딩된 시크릿 검사 |
cycode_sca_scan | 소프트웨어 구성 분석(SCA) 검사 - 취약점 및 라이선스 문제 |
cycode_iac_scan | 코드형 인프라(IaC) 잘못된 구성 검사 |
cycode_sast_scan | 정적 애플리케이션 보안 테스트(SAST) 검사 - 코드 품질 및 보안 결함 |
cycode_status | Cycode CLI 버전, 인증 상태 및 구성 정보 가져오기 |
각 스캔 도구는 상호 배타적인 두 가지 입력 모드를 허용합니다:
paths(권장) — 디스크에 존재하는 하나 이상의 파일 또는 디렉터리 경로입니다. 디렉터리는 재귀적으로 스캔됩니다. Cycode 엔진은 CLI에서cycode scan -t <type> path ./src가 수행하는 것처럼 파일 검색 및 필터링을 처리합니다.files(대체) — 파일 경로를 전체 콘텐츠 문자열에 매핑하는 사전입니다. 파일을 디스크에서 사용할 수 없는 경우(예: 아직 저장되지 않은 메모리 내 편집)에만 사용하십시오.
[!TIP] 가능하면
paths를 사용하십시오. 대용량 파일(예:package-lock.json)을 인라인 콘텐츠로 전달하면 토큰 제한을 초과하고 AI 클라이언트 속도가 느려질 수 있습니다.paths를 사용하면 Cycode 엔진이 디스크에서 직접 파일을 읽습니다.
모든 스캔 도구는 전체 "detections" 배열 외에도 사람이 읽을 수 있는 위반 횟수(예: "Cycode found 3 violations: 1 CRITICAL, 2 HIGH.")가 포함된 "summary" 필드를 포함하는 JSON 객체를 반환합니다.
사용 예시
기본 명령어 예시
기본 설정으로 MCP 서버 시작 (stdio 전송):
cycode mcp
명시적 stdio 전송으로 MCP 서버 시작:
cycode mcp -t stdio
서버 전송 이벤트(SSE) 전송으로 MCP 서버 시작:
cycode mcp -t sse -p 8080
사용자 지정 호스트 및 포트에서 스트리밍 가능한 HTTP 전송으로 MCP 서버 시작:
cycode mcp -t streamable-http -H 0.0.0.0 -p 9000
MCP 전송 유형에 대한 자세한 내용은 MCP 프로토콜 사양 – 전송에서 확인하십시오.
구성 예시
Cursor/VS Code/Claude Desktop 등에서 MCP 사용하기 (mcp.json)
[!NOTE] EU Cycode 환경의 경우 환경 변수에 적절한
CYCODE_API_URL및CYCODE_APP_URL값을 설정해야 합니다 (예:https://api.eu.cycode.com및https://app.eu.cycode.com).
VS Code/GitHub Copilot에서 MCP 서버를 구성하려면 이 가이드를 따르십시오. settings.json에는 독립형 mcpServers 객체가 아닌 중첩된 servers 하위 객체를 포함하는 mcp 객체가 있습니다.
stdio 전송 (직접 실행)의 경우:
{
"mcpServers": {
"cycode": {
"command": "cycode",
"args": ["mcp"],
"env": {
"CYCODE_CLIENT_ID": "your-cycode-id",
"CYCODE_CLIENT_SECRET": "your-cycode-secret-key",
"CYCODE_API_URL": "https://api.cycode.com",
"CYCODE_APP_URL": "https://app.cycode.com"
}
}
}
}
pipx 설치 시 stdio 전송의 경우:
{
"mcpServers": {
"cycode": {
"command": "pipx",
"args": ["run", "cycode", "mcp"],
"env": {
"CYCODE_CLIENT_ID": "your-cycode-id",
"CYCODE_CLIENT_SECRET": "your-cycode-secret-key",
"CYCODE_API_URL": "https://api.cycode.com",
"CYCODE_APP_URL": "https://app.cycode.com"
}
}
}
}
uvx 설치 시 stdio 전송의 경우:
{
"mcpServers": {
"cycode": {
"command": "uvx",
"args": ["cycode", "mcp"],
"env": {
"CYCODE_CLIENT_ID": "your-cycode-id",
"CYCODE_CLIENT_SECRET": "your-cycode-secret-key",
"CYCODE_API_URL": "https://api.cycode.com",
"CYCODE_APP_URL": "https://app.cycode.com"
}
}
}
}
SSE 전송 (서버 전송 이벤트)의 경우:
{
"mcpServers": {
"cycode": {
"url": "http://127.0.0.1:8000/sse"
}
}
}
사용자 지정 포트에서 SSE 전송의 경우:
{
"mcpServers": {
"cycode": {
"url": "http://127.0.0.1:8080/sse"
}
}
}
스트리밍 가능한 HTTP 전송의 경우:
{
"mcpServers": {
"cycode": {
"url": "http://127.0.0.1:8000/mcp"
}
}
}
백그라운드에서 MCP 서버 실행하기
SSE 전송의 경우 (먼저 서버를 시작한 다음 클라이언트 구성):
# Start the MCP server in the background
cycode mcp -t sse -p 8000 &
# Configure in mcp.json
{
"mcpServers": {
"cycode": {
"url": "http://127.0.0.1:8000/sse"
}
}
}
스트리밍 가능한 HTTP 전송의 경우:
# Start the MCP server in the background
cycode mcp -t streamable-http -H 127.0.0.2 -p 9000 &
# Configure in mcp.json
{
"mcpServers": {
"cycode": {
"url": "http://127.0.0.2:9000/mcp"
}
}
}
고급 구성
사용자 지정 인증서 및 시간 초과 (프록시 환경)
조직에서 회사 프록시 또는 HTTPS 검사를 위한 사용자 지정 CA 번들을 사용하는 경우, 신뢰할 수 있는 인증서 번들을 찾을 수 있는 위치를 Cycode CLI (및 기본 Python TLS 스택)에 알려야 합니다. 또한 스캔이 중단되는 경우 MCP 도구 호출 시간 초과를 늘릴 수 있습니다.
| 환경 변수 | 설명 |
|---|---|
REQUESTS_CA_BUNDLE | 사용자 지정 CA 번들 파일 경로 (.pem 또는 .crt). Cycode CLI에서 수행하는 모든 HTTPS 호출에 대해 requests 라이브러리에서 사용됩니다. |
SSL_CERT_FILE | 사용자 지정 CA 번들 파일 경로. Python의 저수준 ssl 모듈에서 사용됩니다. 전체 적용 범위를 위해 REQUESTS_CA_BUNDLE과 함께 설정하십시오. |
MCP_TOOL_TIMEOUT | Claude 및 GitHub Copilot과 같은 MCP 클라이언트가 도구 호출 완료를 기다리는 시간 초과(초)입니다. 장기 실행 스캔이 완료되기 전에 중단되는 경우 이 값을 늘리십시오. |
[!TIP]
REQUESTS_CA_BUNDLE및SSL_CERT_FILE을 동일한 CA 번들 경로로 설정하십시오.REQUESTS_CA_BUNDLE는 HTTP 계층을 처리하고,SSL_CERT_FILE은 하위 수준 TLS 계층을 처리합니다. 하나만 사용하면 일부 환경에서 여전히 인증서 오류가 발생할 수 있습니다.
사용자 지정 인증서 및 더 긴 시간 초과를 사용한 mcp.json 구성 예시:
{
"mcpServers": {
"cycode": {
"command": "cycode",
"args": ["mcp"],
"env": {
"REQUESTS_CA_BUNDLE": "/path/to/your/corporate-ca-bundle.pem",
"SSL_CERT_FILE": "/path/to/your/corporate-ca-bundle.pem",
"MCP_TOOL_TIMEOUT": "1800"
}
}
}
}
[!NOTE] MCP 서버가 작동하려면 적절한 Cycode CLI 인증이 필요합니다. MCP 서버를 시작하기 전에
cycode auth를 사용하여 인증했거나 자격 증명을 구성했는지 확인하십시오.
하위 에이전트를 위한 도구 사전 승인 (Claude Code)
Claude Code가 백그라운드 하위 에이전트에 작업을 위임하면(예: 병렬로 스캔 실행) 해당 하위 에이전트는 대화형 권한 프롬프트를 표시할 수 없습니다. Cycode 도구가 사전 승인되지 않은 경우 하위 에이전트 컨텍스트에서 스캔이 자동으로 실패합니다.
하위 에이전트를 포함한 모든 컨텍스트에서 Cycode MCP 도구가 작동하도록 사전 승인하려면 Claude Code 설정(~/.claude/settings.json)의 allowedTools 목록에 추가하십시오:
{
"allowedTools": [
"mcp__cycode__cycode_secret_scan",
"mcp__cycode__cycode_sca_scan",
"mcp__cycode__cycode_iac_scan",
"mcp__cycode__cycode_sast_scan",
"mcp__cycode__cycode_status"
]
}
추가되면 Claude Code는 이러한 도구가 호출될 때 승인을 요청하지 않으며 하위 에이전트 내에서 올바르게 작동합니다.
MCP 문제 해결
MCP 서버에 문제가 발생하면 디버그 로깅을 활성화하여 진행 상황에 대한 자세한 정보를 얻을 수 있습니다. 디버그 로깅을 활성화하는 방법은 두 가지입니다:
-v또는--verbose플래그 사용:
cycode -v mcp
CYCODE_CLI_VERBOSE환경 변수 사용:
CYCODE_CLI_VERBOSE=1 cycode mcp
디버그 로그에는 다음에 대한 자세한 정보가 표시됩니다:
- 서버 시작 및 구성
- 연결 시도 및 상태
- 도구 실행 및 결과
- 발생하는 모든 오류 또는 경고
이 정보는 다음과 같은 경우에 유용할 수 있습니다:
- 연결 문제 진단
- 특정 도구가 작동하지 않는 이유 이해
- 인증 문제 식별
- 전송 관련 문제 디버깅
MCP 구성
플랫폼 명령어 [베타]
[!WARNING]
platform명령어는 베타 상태입니다. 명령어, 인수 및 출력 형식은 Cycode API 사양에서 동적으로 생성되며 예고 없이 릴리스 간에 변경될 수 있습니다. 아직 프로덕션 자동화에서 이에 의존하지 마십시오.
cycode platform 명령어는 Cycode 플랫폼의 읽기 API를 CLI 명령어로 노출합니다. 리소스별로 엔드포인트를 그룹화하고(예: projects, violations, workflows) 각 엔드포인트의 매개변수를 유형화된 CLI 인수 및 --option 플래그로 변환합니다.
cycode platform projects list --page-size 50
cycode platform violations count
cycode platform workflows view <workflow-id>
OpenAPI 사양은 처음 사용 시 Cycode API에서 가져와 ~/.cycode/openapi-spec.json에 24시간 동안 캐시됩니다. 관련 없는 명령어(cycode scan, cycode status 등)는 가져오기를 트리거하지 않습니다.
[!NOTE]
cycode platform이 명령어를 검색하고 실행하려면 인증(cycode auth또는CYCODE_CLIENT_ID/CYCODE_CLIENT_SECRET환경 변수)을 받아야 합니다. 다른 Cycode CLI 명령어는 인증 없이 작동합니다.
명령어 검색
명령어는 사양에서 생성되므로 사용 가능한 항목에 대한 정보 출처는 --help입니다:
cycode platform --help # list all resource groups
cycode platform projects --help # list actions on a resource
cycode platform projects list --help # list options/arguments for an action
플랫폼 예시
# List projects with pagination
cycode platform projects list --page-size 25
# View a single project by ID
cycode platform projects view <project-id>
# Count violations across the tenant
cycode platform violations count
# Filter using query parameters (see `--help` for what each endpoint supports)
cycode platform violations list --severity CRITICAL
모든 출력은 기본적으로 JSON입니다 — 임시 필터링을 위해 jq을 통해 파이프하십시오:
cycode platform projects list --page-size 100 | jq '.items[].name'
플랫폼 참고 사항 및 제한 사항
- 현재 읽기 전용. 이 베타 버전에서는
GET엔드포인트만 노출됩니다. - 사양 기반. API에 새 엔드포인트를 추가하면 다음에 캐시가 새로 고쳐질 때 자동으로 표시됩니다.
- 번들 사양 없음. 설치 후(또는 24시간 캐시 만료 후) 첫 번째
cycode platform호출은 네트워크 가져오기를 수행합니다. 느린 연결에서는 이 첫 번째 호출에 몇 초가 걸릴 수 있습니다. 이후 호출은 캐시가 만료될 때까지 거의 즉시 실행됩니다. - 캐시 TTL 재정의는
CYCODE_SPEC_CACHE_TTL=<seconds>을 사용하십시오.
스캔 명령어
스캔 실행
Cycode CLI 애플리케이션은 사용 사례에 가장 적합한 옵션을 선택할 수 있도록 여러 유형의 스캔을 제공합니다. 다음은 현재 사용 가능한 옵션 및 명령어입니다:| 옵션 | 설명 |
|------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------|
| -t, --scan-type [secret\|iac\|sca\|sast] | 실행할 스캔을 지정합니다 (secret/iac/sca/sast), 기본값은 secret입니다. |
| --show-secret BOOLEAN | 비밀을 평문으로 표시합니다. 자세한 내용은 비밀 표시/숨기기 섹션을 참조하세요. |
| --soft-fail BOOLEAN | 실패 없이 스캔을 실행하며, 항상 오류가 아닌 상태 코드를 반환합니다. 자세한 내용은 소프트 실패 섹션을 참조하세요. |
| --severity-threshold [INFO\|LOW\|MEDIUM\|HIGH\|CRITICAL] | 지정된 수준 이상의 위반 사항만 표시합니다. |
| --sca-scan | 실행할 SCA 스캔을 지정합니다 (package-vulnerabilities/license-compliance). 기본값은 둘 다입니다. |
| --monitor | 지정하면 스캔 결과가 Cycode에 기록됩니다. |
| --cycode-report | 콘솔 출력에 Cycode 플랫폼의 스캔 보고서 링크를 표시합니다. |
| --no-restore | 지정하면 Cycode가 복원 명령을 실행하지 않습니다. 직접 종속성만 스캔합니다! |
| --stop-on-error | 파일 수집 또는 종속성 복원 실패 발생 시, 실패한 파일을 건너뛰고 계속하는 대신 스캔을 중단합니다. |
| --gradle-all-sub-projects | 모든 하위 프로젝트에 대해 gradle 복원 명령을 실행합니다. 이 명령은 다음에서 실행해야 합니다. |
| --maven-settings-file | Maven 전용, 종속성 스캔 시 사용자 정의 settings.xml 파일을 사용할 수 있습니다. |
| --help | 주어진 명령에 대한 옵션을 표시합니다. |
| 명령 | 설명 |
|---|---|
| commit-history | 커밋 히스토리를 스캔하거나 특정 커밋 간의 차이 스캔을 수행합니다. |
| path | 명령에 제공된 경로의 파일을 스캔합니다. |
| pre-commit | 아직 커밋되지 않은 콘텐츠를 스캔하려면 이 명령을 사용합니다. |
| repository | 히스토리를 포함한 Git 저장소를 스캔합니다. |
옵션
심각도 옵션
스캔 결과를 특정 심각도 임계값으로 제한하려면 스캔 명령에 --severity-threshold 인수를 추가할 수 있습니다.
예를 들어, 다음 명령은 Medium 이상의 심각도를 가진 정책 위반 사항이 있는지 저장소를 스캔합니다:
cycode scan --severity-threshold MEDIUM repository ~/home/git/codebase
모니터 옵션
[!NOTE] 이 옵션은 SCA 스캔에만 사용할 수 있습니다.
SCA 유형 스캔에서 발견된 SCA 정책과 연결된 스캔 결과를 Cycode로 푸시하려면 스캔 명령에 --monitor 인수를 추가하세요.
예를 들어, 다음 명령은 저장소에서 SCA 정책 위반 사항을 스캔하고 Cycode 플랫폼으로 푸시합니다:
cycode scan -t sca --monitor repository ~/home/git/codebase
Cycode 보고서 옵션
Cycode CLI를 사용하여 수행된 모든 스캔에 대해 보고서가 자동으로 생성되고 그 결과가 Cycode로 전송됩니다. 이러한 결과는 Cycode 플랫폼 내의 관련 정책(예: 저장소 스캔의 경우 SCA 정책)과 연결됩니다.
스캔 완료 후 CLI 출력에 이 Cycode 보고서의 직접 URL을 인쇄하려면 스캔 명령에 --cycode-report 인수를 추가하세요.
cycode scan --cycode-report repository ~/home/git/codebase
CLI의 모든 스캔 결과는 Cycode의 CLI 로그 섹션에 표시됩니다. 명령에 --cycode-report 플래그를 포함한 경우, 스캔 결과 다음에 터미널에 특정 보고서로의 직접 링크가 표시됩니다.
[!WARNING] 이 페이지를 보려면 Cycode에서
owner또는admin역할이 있어야 합니다.

보고서 페이지는 아래와 유사하게 표시됩니다:

패키지 취약점 옵션
[!NOTE] 이 옵션은 SCA 스캔에만 사용할 수 있습니다.
로컬 저장소의 특정 패키지 취약점을 스캔하려면 -t sca 또는 --scan-type sca 옵션 뒤에 --sca-scan package-vulnerabilities 인수를 추가하세요.
이전 예에서 패키지 취약점에 대해서만 SCA 스캔을 실행하려면 다음을 실행할 수 있습니다:
cycode scan -t sca --sca-scan package-vulnerabilities repository ~/home/git/codebase
라이선스 컴플라이언스 옵션
[!NOTE] 이 옵션은 SCA 스캔에만 사용할 수 있습니다.
로컬 저장소의 특정 브랜치를 스캔하려면 --sca-scan license-compliance 인수 뒤에 스캔하려는 브랜치 이름을 추가하세요.
이전 예에서 dev라는 브랜치만 스캔하려면 다음을 실행할 수 있습니다:
cycode scan -t sca --sca-scan license-compliance repository ~/home/git/codebase -b dev
잠금 복원 옵션
[!NOTE] 이 옵션은 SCA 스캔에만 사용할 수 있습니다.
SCA 스캔을 실행할 때 Cycode CLI는 발견된 각 지원 매니페스트 파일에 대해 자동으로 종속성 잠금 파일을 복원(생성)하려고 시도합니다. 이를 통해 매니페스트에 직접 나열된 종속성뿐만 아니라 전이적 종속성도 스캔할 수 있습니다. 이 단계를 건너뛰고 직접 종속성만 스캔하려면 --no-restore 플래그를 사용하세요.
다음 생태계는 자동 잠금 파일 복원을 지원합니다:
| 생태계 | 매니페스트 파일 | 생성된 잠금 파일 | 호출된 도구 (잠금 파일이 없을 때) |
|---|---|---|---|
| npm | package.json | package-lock.json | npm install --package-lock-only --ignore-scripts --no-audit |
| Yarn | package.json | yarn.lock | yarn install --ignore-scripts |
| pnpm | package.json | pnpm-lock.yaml | pnpm install --ignore-scripts |
| Deno | deno.json / deno.jsonc | deno.lock | (기존 잠금 파일만 읽음) |
| Go | go.mod | go.mod.graph | go list -m -json all + go mod graph |
| Maven | pom.xml | bcde.mvndeps | mvn dependency:tree |
| Gradle | build.gradle / build.gradle.kts | gradle-dependencies-generated.txt | gradle dependencies -q --console plain |
| SBT | build.sbt | build.sbt.lock | sbt dependencyLockWrite |
| NuGet | *.csproj | packages.lock.json | dotnet restore --use-lock-file |
| Ruby | Gemfile | Gemfile.lock | bundle --quiet |
| Poetry | pyproject.toml | poetry.lock | poetry lock |
| Pipenv | Pipfile | Pipfile.lock | pipenv lock |
| PHP Composer | composer.json | composer.lock | composer update --no-cache --no-install --no-scripts --ignore-platform-reqs |
매니페스트 옆에 잠금 파일이 이미 존재하는 경우 Cycode는 설치 명령을 실행하지 않고 직접 읽습니다.
SBT 전제 조건: sbt-dependency-lock 플러그인이 설치되어 있어야 합니다. project/plugins.sbt에 다음 줄을 추가하세요:
addSbtPlugin("software.purpledragon" % "sbt-dependency-lock" % "1.5.1")
오류 발생 시 중지 옵션
기본적으로 Cycode는 파일을 읽을 수 없거나(예: 권한 오류) SCA 스캔 중 종속성 잠금 파일을 생성할 수 없는 경우에도 스캔을 계속합니다. 실패한 항목은 경고와 함께 건너뛰고 나머지 파일로 스캔이 진행됩니다.
이 동작을 변경하려면 --stop-on-error을 사용하세요: 첫 번째 실패 시 스캔이 즉시 중단되고 오류를 보고합니다.
cycode scan -t sca --stop-on-error path ~/home/git/codebase
이는 조용한 실패로 인해 불완전한 스캔 결과가 생성될 수 있는 CI 파이프라인에서 유용합니다. --stop-on-error가 트리거되면 근본적인 문제를 해결하거나, 특히 SCA 복원 실패의 경우 --no-restore을 추가하여 잠금 파일 생성을 건너뛰고 직접 종속성만 스캔할 수 있습니다.
--stop-on-error이 사용되면 CLI는 종료 코드를 통해 스캔 오류와 정책 위반을 구분합니다:
| 종료 코드 | 의미 |
|---|---|
0 | 위반 없이 스캔 완료 |
1 | 스캔 완료 및 위반 발견 |
2 | 오류로 인해 스캔 중단 (--stop-on-error가 설정된 경우에만) |
저장소 스캔
저장소 스캔은 노출된 비밀이나 안전하지 않은 구성 오류가 있는지 전체 로컬 저장소를 검사합니다. 이 보다 포괄적인 스캔 유형은 저장소의 현재 상태와 커밋 히스토리 등 모든 것을 살펴봅니다. 현재 저장소 내에 노출된 비밀뿐만 아니라 이전에 삭제된 비밀도 찾습니다.
전체 저장소 스캔을 실행하려면 다음을 실행하세요:
cycode scan repository {{path}}
예를 들어, ~/home/git/codebase에 저장된 저장소를 스캔하려면 다음을 실행할 수 있습니다:
cycode scan repository ~/home/git/codebase
이 명령과 함께 사용할 수 있는 옵션은 다음과 같습니다:
| 옵션 | 설명 |
|---|---|
-b, --branch TEXT | 스캔할 브랜치, 설정하지 않으면 기본 브랜치를 스캔합니다. |
브랜치 옵션
로컬 저장소의 특정 브랜치를 스캔하려면 -b (또는 --branch) 인수 뒤에 스캔하려는 브랜치 이름을 추가하세요.
이전 예에서 dev라는 브랜치만 스캔하려면 다음을 실행할 수 있습니다:
cycode scan repository ~/home/git/codebase -b dev
경로 스캔
경로 스캔은 GIT 저장소에만 초점을 맞추는 대신 특정 로컬 디렉터리와 그 안의 모든 콘텐츠를 검사합니다.
디렉터리 스캔을 실행하려면 다음을 실행하세요:
cycode scan path {{path}}
예를 들어, ~/home/git/codebase에 위치한 디렉터리를 스캔하려는 시나리오를 생각해 보세요. 그러면 다음을 실행할 수 있습니다:
cycode scan path ~/home/git/codebase
Terraform Plan 스캔
Cycode CLI는 Terraform plan 스캔을 지원합니다 (Terraform 0.12 이상 지원).
Terraform plan 파일은 JSON 형식이어야 합니다 (.json 확장자를 가짐).
구성 파일만 있는 경우 다음을 수행하여 plan을 생성할 수 있습니다:
-
Terraform 구성 파일이 포함된 작업 디렉터리를 초기화합니다:
terraform init -
Terraform 실행 계획을 생성하고 바이너리 출력을 저장합니다:
terraform plan -out={tfplan_output} -
바이너리 출력 파일을 읽을 수 있는 JSON으로 변환합니다:
terraform show -json {tfplan_output} > {tfplan}.json -
Cycode CLI로
{tfplan}.json을 스캔합니다:cycode scan -t iac path ~/PATH/TO/YOUR/{tfplan}.json
커밋 히스토리 스캔
[!NOTE] 커밋 히스토리 스캔은 IaC 스캔에 사용할 수 없습니다.
커밋 히스토리 스캔 명령은 두 가지 주요 기능을 제공합니다:
- 전체 히스토리 스캔: 저장소 히스토리의 모든 커밋을 분석합니다.
- 차이 스캔: 특정 커밋 간의 변경 사항만 스캔합니다.
비밀 스캔은 저장소 히스토리의 모든 커밋을 분석할 수 있습니다. 도입되었다가 나중에 제거된 비밀도 여전히 유출되거나 노출될 수 있기 때문입니다. SCA 및 SAST 스캔의 경우 커밋 히스토리 명령은 커밋 간의 차이점/변경 사항을 스캔하는 데 중점을 두므로 풀 리퀘스트 검토 및 증분 스캔에 적합합니다.
커밋 히스토리 스캔은 Git 저장소의 커밋 히스토리를 검사하며 포괄적인 히스토리 분석과 특정 변경 사항의 대상 차이 스캔 모두에 사용할 수 있습니다.
커밋 히스토리 스캔을 실행하려면 다음을 실행하세요:
cycode scan commit-history {{path}}
예를 들어, ~/home/git/codebase에 저장된 저장소의 커밋 히스토리를 스캔하려는 시나리오를 생각해 보세요. 그러면 다음을 실행할 수 있습니다:
cycode scan commit-history ~/home/git/codebase
이 명령과 함께 사용할 수 있는 옵션은 다음과 같습니다:
| 옵션 | 설명 |
|---|---|
-r, --commit-range TEXT | 이 git 저장소에서 커밋 범위를 스캔합니다. 기본적으로 cycode는 모든 커밋 기록을 스캔합니다 (예: HEAD~1) |
커밋 범위 옵션 (차이점 스캔)
커밋 범위 옵션은 차이점 스캔을 활성화합니다 – 전체 저장소 기록 대신 특정 커밋 간의 변경 사항만 스캔합니다. 이는 특히 다음과 같은 경우에 유용합니다:
- Pull Request 검증: PR에서 도입된 변경 사항만 스캔
- 증분 CI/CD 스캔: 전체 코드베이스 대신 최근 변경 사항에 집중
- 기능 브랜치 검토: main/master 브랜치와의 변경 사항 비교
- 성능 최적화: 관련 변경 사항으로 범위를 제한하여 더 빠른 스캔
커밋 범위 구문
--commit-range (-r) 옵션은 표준 Git 리비전 구문을 지원합니다:
| 구문 | 설명 | 예시 |
|---|---|---|
commit1..commit2 | commit1부터 commit2까지의 변경 사항 | abc123..def456 |
commit1...commit2 | commit1에는 없고 commit2에 있는 변경 사항 | main...feature-branch |
commit | commit부터 HEAD까지의 변경 사항 | HEAD~1 |
branch1..branch2 | branch1부터 branch2까지의 변경 사항 | main..feature-branch |
차이점 스캔 예시
마지막 커밋의 변경 사항 스캔:
cycode scan commit-history -r HEAD~1 ~/home/git/codebase
특정 두 커밋 간의 변경 사항 스캔:
cycode scan commit-history -r abc123..def456 ~/home/git/codebase
main과 비교하여 기능 브랜치의 변경 사항 스캔:
cycode scan commit-history -r main..HEAD ~/home/git/codebase
main과 기능 브랜치 간의 변경 사항 스캔:
cycode scan commit-history -r main..feature-branch ~/home/git/codebase
마지막 3개 커밋의 모든 변경 사항 스캔:
cycode scan commit-history -r HEAD~3..HEAD ~/home/git/codebase
[!TIP] CI/CD 파이프라인의 경우
${{ github.event.pull_request.base.sha }}..${{ github.sha }}(GitHub Actions) 또는$CI_MERGE_REQUEST_TARGET_BRANCH_SHA..$CI_COMMIT_SHA(GitLab CI)와 같은 환경 변수를 사용하여 PR/MR 변경 사항만 스캔할 수 있습니다.
사전 커밋 스캔
사전 커밋 스캔은 저장소에 변경 사항을 커밋하기 전에 문제를 자동으로 식별합니다. 이 스캔을 수동으로 실행할 필요는 없습니다. 이 가이드의 설치 섹션에 설명된 대로 사전 커밋 훅을 구성하세요.
사전 커밋 훅을 설치한 후, 특정 커밋 중에 스캔을 건너뛰고 싶을 수 있습니다. 이렇게 하려면 git 명령에 다음을 추가하여 단일 커밋에 대한 스캔을 건너뜁니다:
SKIP=cycode git commit -m <your commit message>`
사전 푸시 스캔
사전 푸시 스캔은 원격 저장소에 변경 사항을 푸시하기 전에 문제를 자동으로 식별합니다. 이 훅은 클라이언트 측에서 실행되며 푸시하려는 커밋만 스캔하므로, 원격 저장소에 도달하기 전에 문제를 포착하는 데 효율적입니다.
[!NOTE] 사전 푸시 훅은 IaC 스캔에 사용할 수 없습니다.
사전 푸시 훅은 사전 커밋 프레임워크와 통합되며 모든 git push 작업 전에 실행되도록 구성할 수 있습니다.
사전 푸시 훅 설치
사전 커밋 프레임워크를 사용하여 사전 푸시 훅을 설정하려면:
-
사전 커밋 프레임워크를 설치합니다 (아직 설치하지 않은 경우):
pip3 install pre-commit -
사전 푸시 훅을 포함하도록
.pre-commit-config.yaml파일을 생성하거나 업데이트합니다:repos: - repo: https://github.com/cycodehq/cycode-cli rev: v3.5.0 hooks: - id: cycode-pre-push stages: [pre-push] -
여러 스캔 유형의 경우 이 구성을 사용합니다:
repos: - repo: https://github.com/cycodehq/cycode-cli rev: v3.5.0 hooks: - id: cycode-pre-push # Secrets scan stages: [pre-push] - id: cycode-sca-pre-push # SCA scan stages: [pre-push] - id: cycode-sast-pre-push # SAST scan stages: [pre-push] -
사전 푸시 훅을 설치합니다:
pre-commit install --hook-type pre-push성공적으로 설치되면
Pre-push installed at .git/hooks/pre-push메시지가 표시됩니다. -
사전 푸시 훅을 최신 상태로 유지합니다:
pre-commit autoupdate
사전 푸시 스캔 작동 방식
사전 푸시 훅은:
- 푸시되는 커밋에 대한 정보를 수신합니다
- 스캔할 적절한 커밋 범위를 계산합니다
- 새 브랜치의 경우: 기본 브랜치와의 병합 기준에서 모든 커밋을 스캔합니다
- 기존 브랜치의 경우: 마지막 푸시 이후의 새 커밋만 스캔합니다
- 다른 Cycode 스캔 모드와 동일한 포괄적인 스캔을 실행합니다
스마트 기본 브랜치 감지
사전 푸시 훅은 다음 우선 순위를 사용하여 병합 기준 계산을 위한 기본 브랜치를 지능적으로 감지합니다:
- 환경 변수:
CYCODE_DEFAULT_BRANCH- 수동 재정의 허용 - Git 원격 HEAD:
git symbolic-ref refs/remotes/origin/HEAD를 사용하여 실제 원격 기본 브랜치 감지 - Git 원격 정보: 심볼릭 참조가 실패하면
git remote show origin로 대체 - 하드코딩된 대체: 일반적인 기본 브랜치 이름 사용 (origin/main, origin/master, main, master)
사용자 정의 기본 브랜치 설정:
export CYCODE_DEFAULT_BRANCH=origin/develop
이 스마트 감지는 저장소가 main, master, develop 또는 다른 기본 브랜치 이름을 사용하는지 여부에 관계없이 사전 푸시 훅이 올바르게 작동하도록 보장합니다.
사전 푸시 스캔 건너뛰기
특정 푸시 작업에 대한 사전 푸시 스캔을 건너뛰려면 다음을 사용합니다:
SKIP=cycode-pre-push git push
또는 모든 사전 푸시 훅을 건너뛰려면:
git push --no-verify
[!TIP] 사전 푸시 훅은
git push명령에서 트리거되며 푸시하려는 커밋만 스캔하므로 전체 저장소를 스캔하는 것보다 효율적입니다.
스캔에서 경로 제외
.cycodeignore 파일을 사용하여 Cycode CLI가 스캔에서 제외할 파일과 디렉터리를 지정할 수 있습니다.
이 파일은 .gitignore 파일처럼 작동합니다. 이를 통해 관련 코드에 스캔을 집중하고 특정 경로가 로컬에서 위반을 트리거하지 않도록 방지할 수 있습니다.
작동 방식
- 작업 폴더에
.cycodeignore라는 이름의 파일을 만듭니다. .gitignore과 동일한 패턴을 사용하여 제외할 파일과 디렉터리를 나열합니다.- cycode scan 명령을 실행할 디렉터리에 이 파일을 배치합니다.
[!WARNING]
- 잘못된 파일:
.cycodeignore파일에 구문 오류가 있으면 CLI 스캔이 실패하고 오류를 반환합니다.- 경로 무시 vs. 위반 무시: 이 파일은 경로를 제외하기 위한 것입니다. 특정 위반을 무시하는 CLI 기능(예: --ignore-violation 플래그 사용)과는 다릅니다.
지원되는 스캐너
- SAST
- IaC (곧 지원 예정)
- SCA (곧 지원 예정)
스캔 결과
각 스캔은 문제가 발견되었는지 여부를 알리는 메시지와 함께 완료됩니다.
문제가 발견되지 않으면 스캔은 다음 성공 메시지와 함께 종료됩니다:
Good job! No issues were found!!! 👏👏👏
문제가 발견되면 대신 완료 시 위반 카드가 나타납니다. 이 경우 결과 메시지에서 강조 표시된 특정 줄에 대해 해당 파일을 검토해야 합니다. 문제를 해결하는 데 필요한 변경 사항을 구현한 다음 스캔을 다시 실행하세요.
비밀 표시/숨기기
아래 예시에서는 cli 하위 폴더에 있는 secret_test 파일에서 비밀이 발견되었습니다. 메시지의 두 번째 부분은 비밀이 나타나는 특정 줄을 보여주며, 이 경우 googleApiKey에 할당된 값입니다.
예시에서 실제 비밀 값이 어떻게 가려져 대부분의 비밀이 별표로 대체되었는지 확인하세요. 스캔은 기본적으로 비밀을 가리지만, 전체 비밀을 보려면 이 기능을 선택적으로 비활성화할 수 있습니다 (스캔 결과를 보는 머신이 엿보는 눈으로부터 충분히 안전하다고 가정할 때).
비밀 난독화를 비활성화하려면 모든 유형의 스캔에 --show-secret 인수를 추가하세요.
다음 예시에서는 발견된 모든 비밀을 전체 표시하는 옵션을 활성화한 상태로 cli 하위 디렉터리에 대해 경로 스캔이 실행됩니다:
cycode scan --show-secret path ./cli
그러면 결과가 난독화되지 않습니다.
소프트 실패
정상 작동 시 CLI는 스캔 결과에서 문제가 발견되면 종료 코드 1를 반환합니다. CI/CD 설정에 따라 이는 일반적으로 전체 실패로 이어집니다. 이런 일이 발생하지 않도록 하려면 소프트 실패 기능을 사용할 수 있습니다.
모든 유형의 스캔에 --soft-fail 옵션을 추가하면 결과 발견 여부에 관계없이 종료 코드가 0로 강제 설정됩니다.
스캔 결과 예시
비밀 결과 예시
╭─────────────────────────────────────────────────────────────── Hardcoded generic-password is used ───────────────────────────────────────────────────────────────╮
│ Violation 12 of 12 │
│ ╭─ 🔍 Details ───────────────────────────────────────╮ ╭─ 💻 Code Snippet ─────────────────────────────────────────────────────────────────────────────────────╮ │
│ │ Severity 🟠 MEDIUM │ │ 34 }; │ │
│ │ In file /Users/cycodemacuser/NodeGoat/test/s │ │ 35 │ │
│ │ ecurity/profile-test.js │ │ 36 var sutUserName = "user1"; │ │
│ │ Secret SHA b4ea3116d868b7c982ee6812cce61727856b │ │ ❱ 37 var sutUserPassword = "Us*****23"; │ │
│ │ 802b3063cd5aebe7d796988552e0 │ │ 38 │ │
│ │ Rule ID 68b6a876-4890-4e62-9531-0e687223579f │ │ 39 chrome.setDefaultService(service); │ │
│ ╰────────────────────────────────────────────────────╯ │ 40 │ │
│ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
│ ╭─ 📝 Summary ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │
│ │ A generic secret or password is an authentication token used to access a computer or application and is assigned to a password variable. │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
IaC 결과 예시
╭──────────── Enable Content Encoding through the attribute 'MinimumCompressionSize'. This value should be greater than -1 and smaller than 10485760. ─────────────╮
│ Violation 45 of 110 │
│ ╭─ 🔍 Details ───────────────────────────────────────╮ ╭─ 💻 Code Snippet ─────────────────────────────────────────────────────────────────────────────────────╮ │
│ │ Severity 🟠 MEDIUM │ │ 20 BinaryMediaTypes: │ │
│ │ In file ...ads-copy/iac/cft/api-gateway/ap │ │ 21 - !Ref binaryMediaType1 │ │
│ │ i-gateway-rest-api/deploy.yml │ │ 22 - !Ref binaryMediaType2 │ │
│ │ IaC Provider CloudFormation │ │ ❱ 23 MinimumCompressionSize: -1 │ │
│ │ Rule ID 33c4b90c-3270-4337-a075-d3109c141b │ │ 24 EndpointConfiguration: │ │
│ │ 53 │ │ 25 Types: │ │
│ ╰────────────────────────────────────────────────────╯ │ 26 - EDGE │ │
│ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
│ ╭─ 📝 Summary ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │
│ │ This policy validates the proper configuration of content encoding in AWS API Gateway. Specifically, the policy checks for the attribute │ │
│ │ 'minimum_compression_size' in API Gateway REST APIs. Correct configuration of this attribute is important for enabling content encoding of API responses for │ │
│ │ improved API performance and reduced payload sizes. │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
SCA 결과 예시
╭─────────────────────────────────────────────────────── [CVE-2019-10795] Prototype Pollution in undefsafe ────────────────────────────────────────────────────────╮
│ Violation 172 of 195 │
│ ╭─ 🔍 Details ───────────────────────────────────────╮ ╭─ 💻 Code Snippet ─────────────────────────────────────────────────────────────────────────────────────╮ │
│ │ Severity 🟠 MEDIUM │ │ 26758 "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", │ │
│ │ In file /Users/cycodemacuser/Node │ │ 26759 "dev": true │ │
│ │ Goat/package-lock.json │ │ 26760 }, │ │
│ │ CVEs CVE-2019-10795 │ │ ❱ 26761 "undefsafe": { │ │
│ │ Package undefsafe │ │ 26762 "version": "2.0.2", │ │
│ │ Version 2.0.2 │ │ 26763 "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.2.tgz", │ │
│ │ First patched version Not fixed │ │ 26764 "integrity": "sha1-Il9rngM3Zj4Njnz9aG/Cg2zKznY=", │ │
│ │ Dependency path nodemon 1.19.1 -> │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
│ │ undefsafe 2.0.2 │ │
│ │ Rule ID 9c6a8911-e071-4616-86db-4 │ │
│ │ 943f2e1df81 │ │
│ ╰────────────────────────────────────────────────────╯ │
│ ╭─ 📝 Summary ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │
│ │ undefsafe before 2.0.3 is vulnerable to Prototype Pollution. The 'a' function could be tricked into adding or modifying properties of Object.prototype using │ │
│ │ a __proto__ payload. │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
SAST 결과 예시
╭───────────────────────────────────────────── [CWE-208: Observable Timing Discrepancy] Observable Timing Discrepancy ─────────────────────────────────────────────╮
│ Violation 24 of 49 │
│ ╭─ 🔍 Details ───────────────────────────────────────╮ ╭─ 💻 Code Snippet ─────────────────────────────────────────────────────────────────────────────────────╮ │
│ │ Severity 🟠 MEDIUM │ │ 173 " including numbers, lowercase and uppercase letters."; │ │
│ │ In file /Users/cycodemacuser/NodeGoat/app │ │ 174 return false; │ │
│ │ /routes/session.js │ │ 175 } │ │
│ │ CWE CWE-208 │ │ ❱ 176 if (password !== verify) { │ │
│ │ Subcategory Security │ │ 177 errors.verifyError = "Password must match"; │ │
│ │ Language js │ │ 178 return false; │ │
│ │ Security Tool Bearer (Powered by Cycode) │ │ 179 } │ │
│ │ Rule ID 19fbca07-a8e7-4fa6-92ac-a36d15509 │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
│ │ fa9 │ │
│ ╰────────────────────────────────────────────────────╯ │
│ ╭─ 📝 Summary ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │
│ │ Observable Timing Discrepancy occurs when the time it takes for certain operations to complete can be measured and observed by attackers. This vulnerability │ │
│ │ is particularly concerning when operations involve sensitive information, such as password checks or secret comparisons. If attackers can analyze how long │ │
│ │ these operations take, they might be able to deduce confidential details, putting your data at risk. │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
회사 사용자 정의 수정 가이드라인
회사에서 Cycode 포털을 통해 관련 정책에 사용자 정의 수정 가이드라인을 설정한 경우, 추가한 수정 가이드라인이 포함된 "회사 가이드라인" 필드가 표시됩니다. 회사 가이드라인을 추가하지 않은 경우 이 필드는 CLI 도구에 나타나지 않습니다.
스캔 결과 무시
특정 비밀 값, 특정 SHA512 값, 특정 경로, 특정 Cycode 비밀 및 IaC 규칙 ID를 무시하도록 무시 규칙을 추가할 수 있습니다. 이렇게 하면 스캔에서 이러한 값에 대해 경고하지 않습니다. 무시 규칙은 로컬 ./.cycode/config.yaml 파일에 작성 및 저장됩니다.
[!WARNING] 무시할 값을 추가할 때는 스캔이 실제 양성을 포착할 수 있도록 값, 경로 및 정책을 신중하게 고려해야 합니다.
다음은 cycode ignore 명령에 사용할 수 있는 옵션입니다:
| 옵션 | 설명 |
|---|---|
--by-value TEXT | 비밀 스캔 시 특정 값을 무시합니다. 자세한 내용은 비밀 값 무시를 참조하세요. |
--by-sha TEXT | 비밀 스캔 시 문자열의 특정 SHA512 표현을 무시합니다. 자세한 내용은 비밀 SHA 값 무시를 참조하세요. |
--by-path TEXT | 특정 경로 스캔을 피합니다. 스캔 유형을 지정해야 합니다. 자세한 내용은 경로 무시를 참조하세요. |
--by-rule TEXT | 특정 비밀 규칙 ID/IaC 규칙 ID/SCA 규칙 ID 스캔을 무시합니다. 자세한 내용은 비밀 또는 IaC 규칙 무시를 참조하세요. |
--by-package TEXT | SCA 스캔 실행 시 특정 패키지 버전 스캔을 무시합니다. 예상 패턴 - name@version. 자세한 내용은 패키지 무시를 참조하세요. |
--by-cve TEXT | SCA 스캔 실행 시 특정 CVE 스캔을 무시합니다. 예상 패턴: CVE-YYYY-NNN. |
-t, --scan-type [secret|iac|sca|sast] | 실행하려는 스캔을 지정합니다 (secret/iac/sca/sast). 기본값은 secret입니다. |
-g, --global | 무시 규칙을 추가하고 전역 .cycode 구성 파일에서 업데이트합니다. |
비밀 값 무시
특정 비밀 값을 무시하려면 --by-value 플래그를 사용해야 합니다. 이렇게 하면 향후 모든 스캔에서 해당 비밀 값이 무시됩니다. 다음 명령을 사용하여 무시할 비밀 값을 추가하세요:
cycode ignore --by-value {{secret-value}}
이 섹션 상단의 예시에서 특정 비밀 값을 무시하는 명령은 다음과 같습니다:
cycode ignore --by-value h3110w0r1d!@#$350
위 예시에서 h3110w0r1d!@#$350 값을 마스킹되지 않은 비밀 값으로 바꾸세요. 스캔 결과에서 비밀 값을 보는 방법에 대한 자세한 내용은 Cycode 스캔 옵션을 참조하세요.
비밀 SHA 값 무시
특정 비밀 SHA 값을 무시하려면 --by-sha 플래그를 사용해야 합니다. 이렇게 하면 향후 모든 스캔에서 해당 비밀 SHA 값이 무시됩니다. 다음 명령을 사용하여 무시할 비밀 SHA 값을 추가하세요:
cycode ignore --by-sha {{secret-sha-value}}
이 섹션 상단의 예시에서 특정 시크릿 SHA 값을 무시하는 명령은 다음과 같습니다:
cycode ignore --by-sha a44081db3296c84b82d12a35c446a3cba19411dddfa0380134c75f7b3973bff0
위 예시에서 a44081db3296c84b82d12a35c446a3cba19411dddfa0380134c75f7b3973bff0 값을 사용자의 시크릿 SHA 값으로 교체하십시오.
경로 무시하기
시크릿, IaC 또는 SCA 스캔에서 특정 경로를 무시하려면 --by-path 플래그를 -t, --scan-type 플래그와 함께 사용해야 합니다(스캔 유형을 지정해야 함). 이렇게 하면 지정된 스캔 유형에 대한 향후 모든 스캔에서 해당 경로가 무시됩니다. 무시할 경로를 추가하려면 다음 명령을 사용하십시오:
cycode ignore -t {{scan-type}} --by-path {{path}}
이 섹션 상단의 예시에서 시크릿에 대한 특정 경로를 무시하는 명령은 다음과 같습니다:
cycode ignore -t secret --by-path ~/home/my-repo/config
위 예시에서 ~/home/my-repo/config 값을 사용자의 경로 값으로 교체하십시오.
이 섹션 상단의 예시에서 IaC 스캔에서 특정 경로를 무시하는 명령은 다음과 같습니다:
cycode ignore -t iac --by-path ~/home/my-repo/config
위 예시에서 ~/home/my-repo/config 값을 사용자의 경로 값으로 교체하십시오.
이 섹션 상단의 예시에서 SCA 스캔에서 특정 경로를 무시하는 명령은 다음과 같습니다:
cycode ignore -t sca --by-path ~/home/my-repo/config
위 예시에서 ~/home/my-repo/config 값을 사용자의 경로 값으로 교체하십시오.
시크릿, IaC, SCA 또는 SAST 규칙 무시하기
특정 시크릿, IaC, SCA 또는 SAST 규칙을 무시하려면 --by-rule 플래그를 -t, --scan-type 플래그와 함께 사용해야 합니다(스캔 유형을 지정해야 함). 이렇게 하면 향후 모든 스캔에서 해당 규칙 ID 값이 무시됩니다. 무시할 규칙 ID 값을 추가하려면 다음 명령을 사용하십시오:
cycode ignore -t {{scan-type}} --by-rule {{rule-ID}}
이 섹션 상단의 예시에서 특정 시크릿 규칙 ID를 무시하는 명령은 다음과 같습니다:
cycode ignore -t secret --by-rule ce3a4de0-9dfc-448b-a004-c538cf8b4710
위 예시에서 ce3a4de0-9dfc-448b-a004-c538cf8b4710 값을 무시하려는 규칙 ID로 교체하십시오.
이 섹션 상단의 예시에서 특정 IaC 규칙 ID를 무시하는 명령은 다음과 같습니다:
cycode ignore -t iac --by-rule bdaa88e2-5e7c-46ff-ac2a-29721418c59c
위 예시에서 bdaa88e2-5e7c-46ff-ac2a-29721418c59c 값을 무시하려는 규칙 ID로 교체하십시오.
이 섹션 상단의 예시에서 특정 SCA 규칙 ID를 무시하는 명령은 다음과 같습니다:
cycode ignore -t sca --by-rule dc21bc6b-9f4f-46fb-9f92-e4327ea03f6b
위 예시에서 dc21bc6b-9f4f-46fb-9f92-e4327ea03f6b 값을 무시하려는 규칙 ID로 교체하십시오.
패키지 무시하기
[!NOTE] 이 옵션은 SCA 스캔에만 사용할 수 있습니다.
SCA 스캔에서 특정 패키지를 무시하려면 --by-package 플래그를 -t, --scan-type 플래그와 함께 사용해야 합니다(sca 스캔 유형을 지정해야 함). 이렇게 하면 {{package_name}}@{{package_version}} 형식을 사용하여 향후 모든 스캔에서 해당 패키지가 무시됩니다. 무시할 패키지와 버전을 추가하려면 다음 명령을 사용하십시오:
cycode ignore --scan-type sca --by-package {{package_name}}@{{package_version}}
또는
cycode ignore -t sca --by-package {{package_name}}@{{package_version}}
아래 예시에서 특정 SCA 패키지를 무시하는 명령은 다음과 같습니다:
cycode ignore --scan-type sca --by-package [email protected]
위 예시에서 pyyaml를 패키지 이름으로, 5.3.1을 무시하려는 패키지 버전으로 교체하십시오.
구성 파일을 통한 무시
적용된 무시 규칙은 config.yaml이라는 구성 파일에 저장됩니다.
이 파일은 개발자 간에 쉽게 공유하거나 원격 Git에 커밋할 수도 있습니다.
이 파일들은 항상 .cycode 폴더에 위치합니다.
이 폴더는 점(.)으로 시작하므로 숨김 파일 표시를 활성화해야 볼 수 있습니다.
구성 파일의 경로
기본적으로 모든 cycode ignore 명령은 CLI가 실행된 현재 디렉터리에 무시 규칙을 저장합니다.
예시: /Users/name/projects/backend에서 무시 CLI 명령을 실행하면 config.yaml이 /Users/name/projects/backend/.cycode에 생성됩니다.
➜ backend pwd
/Users/name/projects/backend
➜ backend cycode ignore --by-value test-value
➜ backend tree -a
.
└── .cycode
└── config.yaml
2 directories, 1 file
두 번째 옵션은 무시 규칙을 전역 구성 파일에 저장하는 것입니다.
전역 구성의 경로는 ~/.cycode/config.yaml이며,
여기서 ~는 macOS에서 users home directory, for example, /Users/name`을 의미합니다.
전역 공간에 저장하려면 cycode ignore 명령의 -g 플래그를 사용할 수 있습니다.
예: cycode ignore -g --by-value test-value.
올바른 작업 디렉터리
.cycode 폴더를 배치하고 동일한 위치에서 CLI를 실행하는 것이 매우 중요합니다.
GitHub Actions, Jenkins 등과 같은 CI/CD 환경에서 작업할 때는 이를 반드시 다시 확인해야 합니다.
.cycode 폴더를 리포지토리 루트에 커밋할 수 있습니다. 이 시나리오에서는 리포지토리 루트에서 CLI 스캔을 실행해야 합니다. 이것이 요구 사항에 맞지 않는 경우, .cycode 폴더를 원하는 위치에 임시로 복사하고 이 폴더에서 CLI 스캔을 수행할 수 있습니다.
구성 파일의 무시 규칙 구조
CLI가 무시된 규칙을 저장하는 방식을 이해하는 것은 이러한 구성 파일을 읽거나 CLI 없이 수정할 수 있도록 하는 데 중요합니다.
추상적인 YAML 구조:
exclusions:
{scanTypeName}:
{ignoringType}:
- someIgnoringValue1
- someIgnoringValue2
scanTypeName의 가능한 값: iac, sca, sast, secret.
ignoringType의 가능한 값: paths, values, rules, packages, shas, cves.
[!WARNING] "값으로 무시"에 대한 값은 일반 텍스트로 저장되지 않습니다! 대신 CLI는 값의 sha256 해시를 저장합니다. 구성 파일을 직접 수정할 때는 문자열의 해시를 입력해야 합니다.
실제 config.yaml의 예:
exclusions:
iac:
rules:
- bdaa88e2-5e7c-46ff-ac2a-29721418c59c
sca:
packages:
- [email protected]
secret:
paths:
- /Users/name/projects/build
rules:
- ce3a4de0-9dfc-448b-a004-c538cf8b4710
shas:
- a44081db3296c84b82d12a35c446a3cba19411dddfa0380134c75f7b3973bff0
values:
- a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3
- 60303ae22b998861bce3b28f33eec1be758a213c86c93c076dbe9f558c11c752
Report 명령
SBOM 보고서 생성
소프트웨어 자재 명세서(SBOM)는 애플리케이션 개발 및 제공에 관련된 모든 구성 요소와 소프트웨어 종속성의 목록입니다. 이 명령을 사용하여 로컬 프로젝트 또는 리포지토리 URI에 대한 SBOM 보고서를 생성할 수 있습니다.
이 명령과 함께 사용할 수 있는 옵션은 다음과 같습니다:
| 옵션 | 설명 | 필수 | 기본값 |
|---|---|---|---|
-f, --format [spdx-2.2|spdx-2.3|cyclonedx-1.4] | SBOM 형식 | 예 | |
-o, --output-format [JSON] | 출력 파일 형식 지정 | 아니오 | json |
--output-file PATH | 출력 파일 | 아니오 | 현재 디렉터리에 저장되는 자동 생성 파일명 |
--include-vulnerabilities | 취약점 포함 | 아니오 | False |
--include-dev-dependencies | 개발 종속성 포함 | 아니오 | False |
이 명령과 함께 사용할 수 있는 명령은 다음과 같습니다:
| 명령 | 설명 |
|---|---|
path | 명령에 제공된 경로에 대한 SBOM 보고서 생성 |
repository-url | 명령에 제공된 리포지토리 URI에 대한 SBOM 보고서 생성 |
리포지토리
리포지토리 URI에 대한 SBOM 보고서를 생성하려면:
cycode report sbom --format <sbom format> --include-vulnerabilities --include-dev-dependencies --output-file </path/to/file> repository_url <repository url>
예시:
cycode report sbom --format spdx-2.3 --include-vulnerabilities --include-dev-dependencies repository_url https://github.com/cycodehq/cycode-cli.git
로컬 프로젝트
경로에 대한 SBOM 보고서를 생성하려면:
cycode report sbom --format <sbom format> --include-vulnerabilities --include-dev-dependencies --output-file </path/to/file> path </path/to/project>
예시:
cycode report sbom --format spdx-2.3 --include-vulnerabilities --include-dev-dependencies path /path/to/local/project
path 하위 명령은 다음과 같은 추가 옵션을 지원합니다:
| 옵션 | 설명 |
|---|---|
--no-restore | 잠금 파일 복원을 건너뛰고 직접 종속성만 스캔합니다. 자세한 내용은 잠금 복원 옵션을 참조하십시오. |
--gradle-all-sub-projects | 모든 하위 프로젝트에 대해 Gradle 복원 명령을 실행합니다(멀티 프로젝트 Gradle 빌드의 루트에서 사용). |
--maven-settings-file | Maven 전용, 종속성 트리 빌드 시 사용자 지정 settings.xml 파일을 사용할 수 있습니다. |
Import 명령
SBOM 가져오기
소프트웨어 자재 명세서(SBOM)는 애플리케이션 개발 및 제공에 관련된 모든 구성 요소와 소프트웨어 종속성의 목록입니다. 이 명령을 사용하여 파일 시스템의 SBOM 파일을 Cycode로 가져올 수 있습니다.
이 명령과 함께 사용할 수 있는 옵션은 다음과 같습니다:
| 옵션 | 설명 | 필수 | 기본값 |
|---|---|---|---|
-n, --name TEXT | SBOM의 표시 이름 | 예 | |
-v, --vendor TEXT | SBOM을 제공한 엔터티의 이름 | 예 | |
-l, --label TEXT | SBOM에 레이블 첨부 | 아니오 | |
-o, --owner TEXT | 이 SBOM의 연락 담당자 역할을 할 Cycode 사용자의 이메일 주소 | 아니오 | |
-b, --business-impact [High | Medium | Low] | 비즈니스 영향 | 아니오 | Medium |
예시:
cycode import sbom --name example-sbom --vendor cycode -label tag1 -label tag2 --owner [email protected] /path/to/local/project
스캔 로그
모든 CLI 스캔은 Cycode에 기록됩니다. 로그는 Settings > CLI Logs에서 확인할 수 있습니다.
구문 도움말
언제든지 어떤 명령에든 --help 인수를 추가하면 사용 가능한 옵션과 해당 구문을 표시하는 도움말 메시지를 볼 수 있습니다.
일반 도움말을 보려면 다음 명령을 입력하십시오:
cycode --help
스캔 옵션을 보려면 다음을 입력하십시오:
cycode scan --help
특정 유형의 스캔에 사용 가능한 옵션을 보려면 다음을 입력하십시오:
cycode scan {{option}} --help
예를 들어, 경로 스캔에 사용 가능한 옵션을 보려면 다음을 입력하십시오:
cycode scan path --help
무시 스캔 기능에 사용 가능한 옵션을 보려면 다음 명령을 사용하십시오:
cycode ignore --help
보고서에 사용 가능한 옵션을 보려면 다음 명령을 사용하십시오:
cycode report --help
특정 유형의 보고서에 사용 가능한 옵션을 보려면 다음을 입력하십시오:
cycode scan {{option}} --help