Model Context Protocol (MCP) サーバーとは?
MCPサーバーは、AIシステムとCycodeのスキャンツールを相互に接続するためのプロトコルサービスです。AIモデルは、標準化されたプロトコルを介して、秘密スキャン、SCAスキャン、IaCスキャン、SASTスキャンなど、Cycodeのスキャン機能にアクセスすることができます。MCPサーバーの使用方法は?
MCPサーバーは、コマンドラインで起動することができ、stdio、SSE、streamable-httpなど、異なる伝送方式を設定することができます。ユーザーは、MCPサーバーをVS Code、GitHub Copilot、Cursor、Claude Desktopなど、さまざまなAIツールに統合することができます。適用シナリオ
MCPサーバーは、AIツールにコードセキュリティスキャン機能を組み込む必要があるシナリオに適しています。たとえば、開発者がコードを記述しているときにリアルタイムでセキュリティアドバイスを得ることができ、また、CI/CDフローで自動的にセキュリティチェックを実行することができます。主要機能
利点と制限
使い方
使用例
よくある質問
関連リソース
{
"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"
}
}
}
}
{
"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"
}
}
}
}
{
"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"
}
}
}
}
{
"mcpServers": {
"cycode": {
"url": "http://127.0.0.1:8000/sse"
}
}
}
{
"mcpServers": {
"cycode": {
"url": "http://127.0.0.1:8080/sse"
}
}
}
{
"mcpServers": {
"cycode": {
"url": "http://127.0.0.1:8000/mcp"
}
}
}
🚀 Cycode CLIユーザーガイド
Cycodeコマンドラインインターフェイス(CLI)は、ローカルにインストールして使用できるアプリケーションです。これを使うと、リポジトリをスキャンして、シークレット、インフラストラクチャコードの誤設定、ソフトウェアコンポーネント分析の脆弱性、静的アプリケーションセキュリティテストの問題を検出できます。
このガイドでは、インストール方法と使用方法の両方を解説します。
🚀 クイックスタート
このガイドでは、Cycode CLIのインストールと使用方法について説明します。まずは前提条件を確認し、次にインストール手順を進めましょう。その後、様々なコマンドを使ってリポジトリのスキャンやレポートの生成を行うことができます。
✨ 主な機能
- リポジトリ内のシークレット、インフラストラクチャコードの誤設定、ソフトウェアコンポーネント分析の脆弱性、静的アプリケーションセキュリティテストの問題をスキャンできます。
- 複数のスキャンタイプ(シークレット、IaC、SCA、SAST)をサポートしています。
- スキャン結果の表示や非表示、ソフトフェイル機能などのオプションがあります。
- SBOMレポートの生成機能も備えています。
📦 インストール
前提条件
- Cycode CLIアプリケーションにはPython 3.9以上が必要です。
[cycode authコマンド](#using-the-auth-command)
を使って、CLIでCycodeに認証してください。- または、 サービスアカウントトークン と パーソナルアクセストークン のページに記載されている手順に従って、CycodeクライアントIDとクライアントシークレットキーを取得することもできます。
Cycode CLIのインストール
以下のインストール手順は、WindowsとUNIX/Linuxの両方のオペレーティングシステムに適用されます。
⚠️ 重要提示
以下の手順では、Python関連のコマンドに
python3
とpip3
を使用することを前提としています。ただし、システムによっては、Python環境の設定に応じてpython
とpip
コマンドを使用する場合もあります。
- コマンドラインまたはターミナルアプリケーションを開きます。
- 以下のコマンドのいずれかを実行します。
- PyPI からインストールするには:
pip3 install cycode
- Homebrew からインストールするには:
brew install cycode
- GitHub Releases からダウンロードしてインストールするには、オペレーティングシステムとアーキテクチャに合った実行ファイルをダウンロードし、以下のコマンドを実行します:
cd /path/to/downloaded/cycode-cli chmod +x cycode ./cycode
- PyPI からインストールするには:
- 最後に、CLIを認証します。CycodeクライアントIDとクライアントシークレットを設定する方法は3つあります。
- cycode auth (推奨)
- cycode configure
- 環境変数 に追加する
authコマンドの使用
⚠️ 重要提示
これは、ローカルマシンをCycode CLIで認証するための 推奨 方法です。
- ターミナル/コマンドラインウィンドウに以下のコマンドを入力します。
cycode auth
- ブラウザウィンドウが開き、Cycodeにログインするように求められます。
- このページにログイン資格情報を入力し、ログインします。
- 最終的に、以下のページに移動し、Cycodeを承認するビジネスグループを選択するように求められます(該当する場合)。
⚠️ 重要提示
これが、Cycode CLIで認証するデフォルトの方法になります。
- Allow ボタンをクリックして、選択したビジネスグループでCycode CLIを承認します。
- 成功すると、以下の画面が表示されます。
- ターミナル/コマンドライン画面で、ブラウザウィンドウを閉じると、以下のメッセージが表示されます。
Successfully logged into cycode
configureコマンドの使用
⚠️ 重要提示
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クライアントシークレットの値を入力します。
Cycode Client Secret []: c1e24929-xxxx-xxxx-xxxx-8b08c1839a2e
- 値が正常に入力されると、以下のメッセージが表示されます。
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}
Windowsの場合
- コントロールパネルから、システムメニューに移動します。
- 次に、[高度なシステム設定] をクリックします。
- 開いた [システムのプロパティ] ウィンドウで、[環境変数] ボタンをクリックします。
CYCODE_CLIENT_ID
とCYCODE_CLIENT_SECRET
変数を作成し、それぞれのIDとシークレットキーに一致する値を設定します。cycode.exe
をパスに追加して、インストールを完了します。
プリコミットフックのインストール
Cycodeのプリコミットフックをローカルリポジトリ内に設定すると、Cycode CLIアプリケーションがコードをコミットする前に自動的に問題を検出します。
⚠️ 重要提示
プリコミットフックは、IaCスキャンには使用できません。
プリコミットフックをインストールするには、以下の手順を実行します。
- プリコミットフレームワークをインストールします(Python 3.9以上がインストールされている必要があります)。
pip3 install pre-commit
- 設定したいローカルGitリポジトリのトップディレクトリに移動します。
- リポジトリのトップディレクトリに、
.pre-commit-config.yaml
という名前の新しいYAMLファイルを作成し(先頭の.
を含めること)、以下の内容を記述します。repos: - repo: https://github.com/cycodehq/cycode-cli rev: v3.2.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.2.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の最新バージョンに自動的に更新されます。
⚠️ 重要提示
トリガーは
git commit
コマンドで発生します。 フックは、コミットのためにステージングされたファイルにのみトリガーされます。
💻 使用例
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クライアントシークレットを指定します。 |
--install-completion |
現在のシェルの補完をインストールします。 |
--show-completion [bash|zsh|fish|powershell|pwsh] |
指定されたシェルの補完を表示して、コピーまたはインストールをカスタマイズします。 |
-h , --help |
指定されたコマンドのオプションを表示します。 |
コマンド | 説明 |
---|---|
auth | マシンを認証して、CLIをCycodeアカウントに関連付けます。 |
configure | CLIクライアントの認証を構成するための初期コマンドです。 |
ignore | 特定の値、パス、またはルールIDを無視します。 |
mcp | モデルコンテキストプロトコル(MCP)サーバーを起動して、AIとCycodeのスキャン機能を統合します。 |
scan | シークレット/IaC/SCA/SASTの違反をスキャンします。実行するスキャンタイプを指定する必要があります:commit-history/path/repositoryなど。 |
report | レポートを生成します。生成するレポートタイプを指定する必要があります。SBOMを指定することができます。 |
status | CLIの状態を表示して終了します。 |
MCPコマンド [EXPERIMENT]
⚠️ 重要提示
MCPコマンドはPython 3.10以上でのみ使用できます。以前のPythonバージョンを使用している場合、このコマンドは使用できません。
モデルコンテキストプロトコル(MCP)コマンドを使用すると、Cycodeのスキャン機能をAIシステムやアプリケーションに公開するMCPサーバーを起動できます。これにより、AIモデルが標準化されたプロトコルを介してCycode CLIツールと対話できるようになります。
💡 使用建议
最良の体験を得るには、
pip install cycode
またはbrew install cycode
を使用してCycode CLIをシステム全体にインストールし、cycode auth
で一度認証してください。グローバルインストールと認証の後、MCP構成ファイルでCYCODE_CLIENT_ID
とCYCODE_CLIENT_SECRET
環境変数を構成する必要はありません。
MCPサーバーの起動
MCPサーバーを起動するには、以下のコマンドを使用します。
cycode mcp
デフォルトでは、これにより stdio
トランスポートを使用してサーバーが起動されます。これは、ローカル統合やサブプロセスを生成できるAIアプリケーションに適しています。
利用可能なオプション
オプション | 説明 |
---|---|
-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のバージョン、認証状態、および構成情報を取得します。 |
使用例
基本的なコマンド例
デフォルト設定(stdioトランスポート)でMCPサーバーを起動します。
cycode mcp
明示的なstdioトランスポートでMCPサーバーを起動します。
cycode mcp -t stdio
Server-Sent Events(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)
⚠️ 重要提示
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トランスポート (Server-Sent Events)の場合:
{
"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トランスポート (最初にサーバーを起動し、その後クライアントを構成する)場合:
# バックグラウンドでMCPサーバーを起動します。
cycode mcp -t sse -p 8000 &
# mcp.jsonで構成します。
{
"mcpServers": {
"cycode": {
"url": "http://127.0.0.1:8000/sse"
}
}
}
ストリーミング可能なHTTPトランスポート の場合:
# バックグラウンドでMCPサーバーを起動します。
cycode mcp -t streamable-http -H 127.0.0.2 -p 9000 &
# mcp.jsonで構成します。
{
"mcpServers": {
"cycode": {
"url": "http://127.0.0.2:9000/mcp"
}
}
}
⚠️ 重要提示
MCPサーバーを機能させるには、適切なCycode CLI認証が必要です。
cycode auth
を使用して認証するか、MCPサーバーを起動する前に資格情報を構成してください。
MCPのトラブルシューティング
MCPサーバーで問題が発生した場合は、デバッグログを有効にして、何が起こっているかに関する詳細情報を取得できます。デバッグログを有効にする方法は2つあります。
-v
または--verbose
フラグを使用する:
cycode -v mcp
CYCODE_CLI_VERBOSE
環境変数を使用する:
CYCODE_CLI_VERBOSE=1 cycode mcp
デバッグログには、以下の詳細情報が表示されます。
- サーバーの起動と構成
- 接続試行とステータス
- ツールの実行と結果
- 発生したエラーや警告
この情報は、以下の場合に役立ちます。
- 接続問題の診断
- 特定のツールが機能しない理由の理解
- 認証問題の特定
- トランスポート固有の問題のデバッグ
スキャンコマンド
スキャンの実行
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は復元コマンドを実行しません。これにより、直接の依存関係のみがスキャンされます! |
--gradle-all-sub-projects |
すべてのサブプロジェクトに対してGradle復元コマンドを実行します。これは、 |
--maven-settings-file |
Mavenの場合のみ、依存関係をスキャンする際にカスタムの settings.xml ファイルを使用できます。 |
--help |
指定されたコマンドのオプションを表示します。 |
コマンド | 説明 |
---|---|
commit-history | このGitリポジトリのすべてのコミット履歴をスキャンします。 |
path | コマンドで指定されたパス内のファイルをスキャンします。 |
pre-commit | このコマンドを使用して、まだコミットされていない内容をスキャンします。 |
repository | Gitリポジトリを含むその履歴をスキャンします。 |
オプション
重大度オプション
スキャン結果を特定の重大度閾値に制限するには、 --severity-threshold
引数をスキャンコマンドに追加します。
例えば、以下のコマンドは、リポジトリ内のMEDIUM以上の重大度のポリシー違反をスキャンします。
cycode scan --severity-threshold MEDIUM repository ~/home/git/codebase
モニタリングオプション
⚠️ 重要提示
このオプションは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
フラグを含めた場合、スキャン結果の後に、特定のレポートへの直接のリンクがターミナルに表示されます。
⚠️ 重要提示
このページを表示するには、Cycodeで
owner
またはadmin
ロールを持っている必要があります。
レポートページは、以下のように表示されます。
パッケージの脆弱性オプション
⚠️ 重要提示
このオプションはSCAスキャンでのみ使用できます。
ローカルリポジトリの特定のパッケージの脆弱性をスキャンするには、 -t sca
または --scan-type sca
オプションの後に --sca-scan package-vulnerabilities
引数を追加します。
前の例では、パッケージの脆弱性に対してのみSCAスキャンを実行する場合は、以下のコマンドを実行できます。
cycode scan -t sca --sca-scan package-vulnerabilities repository ~/home/git/codebase
ライセンス遵守オプション
⚠️ 重要提示
このオプションはSCAスキャンでのみ使用できます。
ローカルリポジトリの特定のブランチをスキャンするには、 --sca-scan license-compliance
引数を追加し、スキャンしたいブランチの名前を指定します。
前の例では、 dev
という名前のブランチのみをスキャンする場合は、以下のコマンドを実行できます。
cycode scan -t sca --sca-scan license-compliance repository ~/home/git/codebase -b dev
ロック復元オプション
⚠️ 重要提示
このオプションはSCAスキャンでのみ使用できます。
SBTプロジェクトのロックファイルを復元するには、sbt-dependency-lockプラグインを使用します。
ロック復元を無効にするには、 --no-restore
オプションを使用します。
前提条件:
sbt-dependency-lock
プラグイン:project/plugins.sbt
に以下の行を追加してプラグインをインストールします。addSbtPlugin("software.purpledragon" % "sbt-dependency-lock" % "1.5.1")
リポジトリスキャン
リポジトリスキャンは、ローカルリポジトリ全体を調べて、公開されたシークレットや不安全な誤設定を検出します。このより包括的なスキャンタイプは、すべてのものを見ます:リポジトリの現在の状態とそのコミット履歴。リポジトリ内で現在公開されているシークレットだけでなく、以前に削除されたシークレットも探します。
完全なリポジトリスキャンを実行するには、以下を実行します。
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プランスキャン
Cycode CLIはTerraformプランスキャンをサポートしています(Terraform 0.12以降をサポート)。
TerraformプランファイルはJSON形式( .json
拡張子を持つ)である必要があります。
設定ファイルしか持っていない場合は、以下の手順でプランを生成できます。
- 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
コミット履歴スキャン
⚠️ 重要提示
シークレットスキャンは、リポジトリ履歴内のすべてのコミットを分析します。なぜなら、導入されて後に削除されたシークレットでも漏洩または公開される可能性があるからです。SCAとSASTスキャンは、最新のコード状態とブランチまたはプルリクエスト間の変更のみに焦点を当てます。SCAとSASTについては、完全なコミット履歴スキャンは実行されません。
コミット履歴スキャンは、ローカルリポジトリの以前のコミットに限定され、コミット履歴内のシークレットを探すことに重点を置きます。リポジトリの現在の状態を調べるのではなく、過去のコミットを対象とします。
コミット履歴スキャンを実行するには、以下を実行します。
cycode scan commit-history {{path}}
例えば、 ~/home/git/codebase
に保存されているリポジトリのコミット履歴をスキャンしたい場合は、以下のコマンドを実行できます。
cycode scan commit-history ~/home/git/codebase
このコマンドで使用できるオプションは以下の通りです。
オプション | 説明 |
---|---|
-r, --commit-range TEXT |
このGitリポジトリ内のコミット範囲をスキャンします。デフォルトでは、Cycodeはすべてのコミット履歴をスキャンします(例:HEAD~1)。 |
コミット範囲オプション
コミット履歴スキャンは、デフォルトでは、リポジトリの最初のコミットからすべてのコミット履歴を調べます。ただし、 --commit-range
( -r
)引数を追加し、指定した名前を続けることで、特定のコミット範囲にスキャンを制限することもできます。
前の例で、リポジトリ内の特定のコミットのみをスキャンしたい場合は、以下のコマンドを実行できます。
cycode scan commit-history -r {{from-commit-id}}...{{to-commit-id}} ~/home/git/codebase
プリコミットスキャン
プリコミットスキャンは、リポジトリへの変更をコミットする前に自動的に問題を検出します。このスキャンを手動で実行する必要はありません。このガイドのインストールセクションで詳述されているように、プリコミットフックを構成してください。
プリコミットフックをインストールした後、特定のコミット中にスキャンをスキップしたい場合があります。これを行うには、 git
コマンドに以下を追加して、1回のコミットのスキャンをスキップします。
SKIP=cycode git commit -m <your commit message>`
スキャン結果
各スキャンは、問題が見つかったかどうかを示すメッセージで完了します。
問題が見つからない場合、スキャンは以下の成功メッセージで終了します。
Good job! No issues were found!!! 👏👏👏
問題が見つかった場合、代わりに違反カードが表示されます。この場合、結果メッセージで強調表示された特定の行の問題のあるファイルを確認する必要があります。問題を解決するために必要な変更を実装し、再度スキャンを実行してください。
シークレットの表示/非表示
以下の例 では、 cli
サブフォルダにある secret_test
ファイル内でシークレットが見つかりました。メッセージの2番目の部分は、シークレットが表示される特定の行を示しており、この場合は 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
ファイルにローカルに書き込まれて保存されます。
⚠️ 重要提示
無視する値を追加する場合は、値、パス、およびポリシーを慎重に検討し、スキャンが真の陽性を検出するようにしてください。
cycode ignore
コマンドで利用可能なオプションは以下の通りです。
オプション | 説明 |
---|---|
--by-value TEXT |
シークレットをスキャンする際に特定の値を無視します。詳細については シークレット値の無視 を参照してください。 |
--by-sha TEXT |
シークレットをスキャンする際に |













