InfoGrab DocsInfoGrab Docs

감지된 시크릿

요약

GitLab Secret Detection은 규칙 기반 탐지와 일반 탐지라는 두 가지 방식으로 시크릿을 식별합니다. 규칙 기반 탐지는 스캔한 콘텐츠를 자격 증명 유형별로 알려진 패턴, 즉 규칙과 대조하여 시크릿을 식별합니다.

시크릿 범주#

GitLab Secret Detection은 규칙 기반 탐지와 일반 탐지라는 두 가지 방식으로 시크릿을 식별합니다.

규칙 기반 탐지#

규칙 기반 탐지는 스캔한 콘텐츠를 자격 증명 유형별로 알려진 패턴, 즉 규칙과 대조하여 시크릿을 식별합니다. 예를 들어 GitLab 개인 액세스 토큰은 glpat- 뒤에 20자 문자열이 오는 패턴으로 식별합니다. GitLab은 널리 쓰이는 공급업체를 포괄하는 200개 이상의 규칙을 기본으로 지원합니다.

규칙 기반 탐지의 적용 범위는 분석기가 지원하는 규칙으로 한정됩니다. 지원되는 규칙과 일치하지 않는 시크릿은 탐지되지 않습니다. Gitleaks 기반 분석기와 GitLab Secret Scanning for Source Code 모두 규칙 기반 탐지를 지원합니다.

일반 탐지#

규칙 기반 탐지는 이미 알고 있는 패턴과 일치하는 시크릿만 찾을 수 있습니다. 많은 자격 증명은 공개되거나 일관된 형식을 따르지 않아 어떤 규칙과도 일치하지 않습니다. 예를 들어 내부 서비스의 비밀번호, 데이터베이스 연결 문자열, 구별되는 접두사가 없는 API 키가 있습니다. 일반 탐지는 이러한 시크릿을 대상으로 합니다. 고정된 패턴과 대조하는 대신, 일반 탐지는 값 주변의 컨텍스트와 값 자체의 속성을 살펴봅니다. 두 신호로 해당 값이 자격 증명일 가능성을 판단합니다.

일반 탐지는 알려진 패턴에 의존하지 않으므로 규칙 기반 탐지가 놓치는 시크릿을 잡아낼 수 있습니다. 대신 오탐이 발생하기 쉬우므로 GitLab Secret Scanning for Source Code는 노이즈를 줄이는 오탐 감소 기능을 포함합니다.

일반 탐지를 지원하는 GitLab 분석기는 GitLab Secret Scanning for Source Code뿐입니다. 자세한 내용은 일반 시크릿을 참고합니다.

일반 탐지는 명확한 secret = "value" 할당에만 국한되지 않습니다. 다음 스니펫은 일반 탐지가 식별하는 덜 명확한 값과 각각이 만들어 내는 탐지 결과를 보여 줍니다.

# Secret assigned in a Perl hash, not a plain key-value pair
$config{'webhook_token'} = "Of0Pg2Qh4Ri6Sj8Tk";

# Password stored as the content of an XML element, not an attribute
<db_password>Ct8Du0Ev2Fw4Gx6Hy</db_password>

# API key passed as a URL query parameter
https://app.gitlab.com?api_key=Of3Pg5Qh7Ri9Sj1Tk

# Token embedded as a literal value in a SQL statement
INSERT INTO secrets (key, value) VALUES ('api_token', 'Kb1Lc3Md5Ne7Of9Pg');

# Password assigned through an environment variable lookup, not a plain variable
ENV["redis_pass"] = "Tt7Yy9Uu1Ii3OoPp5"

# Token passed as an argument to a setter method, not a direct assignment
config.put("dbToken", "Kb8Lc0Md2Ne4Of6Pg");

# Bearer token embedded in an XML configuration property
<property name="authorizationHeader" value="Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"/>

# Secret passed as a CLI flag, not a variable assignment
curl "https://api.example.com/v1/deploy" --api-token=7bN2vLpQ9wXzKfM4

# Credential left behind in a comment
# old admin password was T3mpP@ssw0rd2023XyZ1, rotate before removing this line

# UUID-formatted secret
client_secret: 123e4567-e89b-12d3-a456-426614174000

# Secret disguised by Base64 encoding
auth_token = "c2VjcmV0LWFwaS1rZXktdmFsdWU="

# Secret disguised by hex encoding
signing_key = "4f3c2b1a9e8d7c6b5a4938271605f4e3d2c1b0a"

일반 시크릿 탐지 결과#

일반 시크릿이 발견되면 GitLab은 탐지한 값의 유형에 따라 취약점 보고서에서 해당 결과에 레이블을 붙입니다.

  • Generic Password: 데이터베이스 비밀번호나 서비스 비밀번호처럼 사람이 정한 비밀번호입니다.
  • Generic Secret: 알려진 공급업체 형식과 일치하지 않는, API 키나 액세스 토큰 같은 기계 생성 자격 증명입니다.
  • Generic UUID Secret, Generic Base64-Encoded Secret, Generic Base64URL-Encoded Secret, Generic Hex-Encoded Secret, Generic JWT Token, Generic Paseto Token: GitLab이 형식에 따라 추가로 분류한 기계 생성 자격 증명입니다.

각 탐지 결과에는 해당 값이 표시된 이유를 설명하는 내용이 포함됩니다. 이 설명은 값이 실제 시크릿인지 확인하는 방법, 확인된 시크릿을 교체하는 방법, 오탐을 무시하는 방법을 안내합니다.

일반 탐지가 놓칠 수 있는 시크릿#

일반 탐지는 값이 무엇을 하는지 확인하는 대신 키워드나 값의 형식 같은 주변 정보로 시크릿을 식별합니다. 이 방식에는 장단점이 있습니다. 오탐 감소 기능이 적용되어 있어도 시크릿이 아닌 값이 탐지 결과로 나타날 수 있습니다. 예를 들면 다음과 같습니다.

  • full_key = prefix + secret_suffix처럼 연결이나 문자열 보간으로 만들어진 시크릿.
  • 근처에 key, secret, token, password 같은 레이블이 없는 하드코딩 값처럼, 알아볼 수 있는 키워드가 주변에 없는 시크릿.
  • 벤더링된 의존성, 생성된 파일, 문서처럼 일반 탐지가 제외하는 파일이나 경로에 있는 시크릿.
  • 해당 시크릿 유형에 대해 일반 탐지가 요구하는 최소 길이보다 짧은 값.
  • 중간 또는 낮은 신뢰도로 보고된 시크릿. GitLab Secret Scanning for Source Code는 취약점 보고서에 높은 신뢰도의 탐지 결과만 표시합니다.

규칙 기반 탐지에서 지원하는 규칙#

다음 표는 규칙 기반 탐지에 사용되는 규칙과, 각 규칙을 다음 기능이 지원하는지 여부를 보여 줍니다.

  • 파이프라인 시크릿 탐지
  • 클라이언트 측 시크릿 탐지
  • 시크릿 푸시 보호

시크릿 탐지 규칙은 기본 규칙 세트에서 업데이트됩니다. 제거되거나 업데이트된 패턴으로 탐지된 시크릿은 분류할 수 있도록 열린 상태로 유지됩니다.

새 시크릿 탐지 규칙을 추가하려면 모든 GitLab 사용자를 위해 새 탐지 규칙을 제안하거나, 특정 프로젝트에 맞게 규칙 세트를 사용자 지정할 수 있습니다.

설명 ID 파이프라인 시크릿 탐지 클라이언트 측 시크릿 탐지 시크릿 푸시 보호
Adafruit IO Key AdafruitIOKey ✅ ❌ ✅
Adobe Client ID (OAuth Web) Adobe Client ID (Oauth Web) ✅ ❌ ❌
Adobe client secret Adobe Client Secret ✅ ❌ ✅
Adobe IMS Access Token AdobeIMSAccessToken ✅ ❌ ❌
Age secret key Age secret key ✅ ❌ ❌
Aiven Service Password AivenServicePassword ✅ ❌ ✅
Alibaba AccessKey ID Alibaba AccessKey ID ✅ ❌ ❌
Alibaba Secret Key Alibaba Secret Key ✅ ❌ ❌
Amazon OAuth Client ID AmazonOAuthClientID ✅ ❌ ✅
Anthropic API key anthropic_key ✅ ✅ ✅
Artifactory API Key ArtifactoryApiKey ✅ ❌ ✅
Artifactory Identity Token ArtifactoryIdentityToken ✅ ❌ ✅
Asana client ID Asana Client ID ✅ ❌ ❌
Asana client secret Asana Client Secret ✅ ❌ ❌
Asana Personal Access Token V1 AsanaPersonalAccessTokenV1 ✅ ❌ ✅
Asana Personal Access Token V2 AsanaPersonalAccessTokenV2 ✅ ❌ ✅
Atlassian API Key AtlassianApiKey ✅ ❌ ✅
Atlassian API token Atlassian API token ✅ ❌ ❌
Atlassian User API Token AtlassianUserApiToken ✅ ❌ ✅
Auth0 Client Secret Auth0ClientSecret ✅ ❌ ❌
AWS Access Key ID AWS ✅ ❌ ✅
AWS Access Secret Key AWSSecretAccessKey ✅ ❌ ❌
AWS Session Token AWSSessionToken ✅ ❌ ✅
AWS Cognito Identity Pool ID AWSCognitoIdentityPoolID ✅ ❌ ❌
AWS Bedrock Key AWSBedrockKey ✅ ❌ ❌
AWS Bedrock Short-lived Key AWSBedrockShortLivedKey ✅ ❌ ✅
Azure API Management Gateway Key AzureAPIManagementGatewayKey ✅ ❌ ✅
Azure API Management Direct Key AzureAPIManagementDirectKey ✅ ❌ ❌
Azure App Config AzureAppConfigConnectionString ✅ ❌ ✅
Azure Communication Services AzureCommServicesConnectionString ✅ ❌ ✅
Azure Cosmos DB Credentials AzureCosmosDBCredentials ✅ ❌ ❌
Azure Entra Client Secret AzureEntraClientSecret ✅ ❌ ✅
Azure Entra Client ID Token AzureEntraIDToken ✅ ❌ ✅
Azure EventGrid Access Key AzureEventGridAccessKey ✅ ❌ ❌
Azure Functions API Key AzureFunctionsAPIKey ✅ ❌ ✅
Azure Logic App SAS AzureLogicAppSAS ✅ ❌ ✅
Azure OpenAI API Key AzureOpenAIAPIKey ✅ ❌ ❌
Azure Personal Access Token AzurePersonalAccessToken ✅ ❌ ❌
Azure SignalR Access Key AzureSignalRAccessKey ✅ ❌ ✅
Beamer API token Beamer API token ✅ ❌ ❌
Bitbucket client ID Bitbucket client ID ✅ ❌ ❌
Bitbucket client secret Bitbucket client secret ✅ ❌ ❌
Brevo API token Sendinblue API token ✅ ❌ ✅
Brevo SMTP token Sendinblue SMTP token ✅ ❌ ✅
Canada Digital Service Notify API Key CDSCanadaNotifyAPIKey ✅ ❌ ✅
CircleCI access token CircleCI access tokens ✅ ❌ ✅
Clojars deploy token Clojars API token ✅ ❌ ❌
Contentful delivery API token Contentful delivery API token ✅ ❌ ❌
Contentful personal access token ContentfulPersonalAccessToken ✅ ❌ ✅
Contentful preview API token Contentful preview API token ✅ ❌ ❌
Databricks API token Databricks API token ✅ ❌ ❌
DataDog API Key DataDogAPIKey ✅ ❌ ❌
DigitalOcean OAuth access token digitalocean-access-token ✅ ❌ ❌
DigitalOcean personal access token digitalocean-pat ✅ ❌ ❌
DigitalOcean refresh token digitalocean-refresh-token ✅ ❌ ❌
Discord API key Discord API key ✅ ❌ ❌
Discord client ID Discord client ID ✅ ❌ ❌
Discord client secret Discord client secret ✅ ❌ ❌
Docker Personal Access Token DockerPersonalAccessToken ✅ ❌ ✅
Doppler API token Doppler API token ✅ ❌ ✅
Doppler Service token Doppler Service token ✅ ❌ ✅
Dropbox API secret/key Dropbox API secret/key ✅ ❌ ❌
Dropbox App Access Token DropboxAppAccessToken ✅ ❌ ✅
Dropbox long lived API token Dropbox long lived API token ✅ ❌ ❌
Dropbox short lived API token Dropbox short lived API token ✅ ❌ ✅
Duffel API token Duffel API token ✅ ❌ ❌
Dynatrace Platform Token DynatracePlatformToken ✅ ❌ ❌
EasyPost production API key EasyPost API token ✅ ❌ ❌
EasyPost test API key EasyPost test API token ✅ ❌ ❌
Facebook token Facebook token ✅ ❌ ❌
Fastly API user or automation token Fastly API token ✅ ❌ ❌
Figma Personal Access Token FigmaPersonalAccessToken ✅ ❌ ✅
Finicity API token Finicity API token ✅ ❌ ❌
Finicity client secret Finicity client secret ✅ ❌ ❌
Flutterwave Prod Encrypted Key FlutterwaveProdEncryptedKey ✅ ❌ ✅
Flutterwave test encrypted key Flutterwave encrypted key ✅ ❌ ❌
Flutterwave Prod Public Key FlutterwaveProdPublicKey ✅ ❌ ✅
Flutterwave test public key Flutterwave public key ✅ ❌ ❌
Flutterwave Prod Secret Key FlutterwaveProdSecretKey ✅ ❌ ✅
Flutterwave test secret key Flutterwave secret key ✅ ❌ ❌
Frame.io API token Frame.io API token ✅ ❌ ❌
GCP API key GCP API key ✅ ❌ ❌
GCP OAuth client secret GCP OAuth client secret ✅ ❌ ✅
GCP Vertex Express Mode Key GCPVertexExpressModeKey ✅ ❌ ✅
GitHub app token Github App Token ✅ ❌ ✅
GitHub App Installation Token GithubAppInstallationToken ✅ ❌ ✅
GitHub Fine Grained Personal Access Token GithubFineGrainedPersonalAccessToken ✅ ❌ ✅
GitHub OAuth Access Token Github OAuth Access Token ✅ ❌ ✅
GitHub personal access token (classic) Github Personal Access Token ✅ ❌ ✅
GitHub refresh token Github Refresh Token ✅ ❌ ✅
GitLab CI/CD job token gitlab_ci_build_token ✅ ✅ ❌
GitLab deploy token gitlab_deploy_token ✅ ✅ ❌
GitLab Feature Flags Client Token None ❌ ✅ ❌
GitLab feed token gitlab_feed_token ✅ ✅ ❌
GitLab feed token v2 gitlab_feed_token_v2 ✅ ✅ ✅
GitLab incoming email token gitlab_incoming_email_token ✅ ✅ ✅
GitLab Kubernetes agent token gitlab_kubernetes_agent_token ✅ ✅ ✅
GitLab OAuth application secret gitlab_oauth_app_secret ✅ ✅ ✅
GitLab personal access token gitlab_personal_access_token ✅ ✅ ✅
GitLab Personal Access Token (routable) gitlab_personal_access_token_routable ✅ ✅ ✅
GitLab pipeline trigger token gitlab_pipeline_trigger_token ✅ ✅ ✅
GitLab runner authentication token gitlab_runner_auth_token ✅ ✅ ✅
GitLab runner registration token gitlab_runner_registration_token ✅ ❌ ✅
GitLab SCIM OAuth token gitlab_scim_oauth_token ✅ ✅ ❌
GoCardless API token GoCardless API token ✅ ❌ ❌
Google API key GCP API key ✅ ❌ ❌
Google (GCP) service account Google (GCP) Service-account ✅ ❌ ✅
Grafana Service Account Token GrafanaServiceAccountToken ✅ ❌ ✅
Grafana Cloud Access Policy Token GrafanaCloudAccessPolicyToken ✅ ❌ ✅
HashiCorp Terraform API token Hashicorp Terraform user/org API token ✅ ❌ ✅
HashiCorp Vault batch token Hashicorp Vault batch token ✅ ❌ ✅
HashiCorp Vault Service Token HashicorpVaultServiceToken ✅ ❌ ✅
Heroku API key or application authorization token Heroku API Key ✅ ❌ ✅
Highnote Live Secret Key HighnoteLiveSecretKey ✅ ❌ ✅
Highnote Test Secret Key HighnoteTestSecretKey ✅ ❌ ✅
HubSpot private app API token Hubspot API token ✅ ❌ ✅
Hugging Face User Access Token HuggingFaceUserAccessToken ✅ ❌ ✅
Instagram access token Instagram access token ✅ ❌ ❌
Intercom API token Intercom API token ✅ ❌ ❌
Intercom App Access Token IntercomAppAccessToken ✅ ❌ ✅
Intercom client secret or client ID Intercom client secret/ID ✅ ❌ ❌
Ionic personal access token Ionic API token ✅ ❌ ❌
JFrog Platform Access Tokens JfrogPlatformAccessToken ✅ ❌ ❌
Kubernetes Service Account Token KubernetesServiceAccToken ✅ ❌ ✅
LangChain API Key LangChainAPIKey ✅ ❌ ✅
Linear API token Linear API token ✅ ❌ ✅
Linear client secret or ID (OAuth 2.0) Linear client secret/ID ✅ ❌ ❌
LinkedIn client ID Linkedin Client ID ✅ ❌ ❌
LinkedIn client secret Linkedin Client secret ✅ ❌ ❌
Lob API key Lob API Key ✅ ❌ ❌
Lob publishable API key Lob Publishable API Key ✅ ❌ ❌
Mailchimp API key Mailchimp API key ✅ ❌ ✅
Mailgun private API token Mailgun private API token ✅ ❌ ✅
Mailgun public verification key Mailgun public validation key ✅ ❌ ❌
Mailgun webhook signing key Mailgun webhook signing key ✅ ❌ ✅
Mapbox API token Mapbox API token ✅ ❌ ❌
Mapbox Secret API Token MapboxSecretApiToken ✅ ❌ ❌
MaxMind License Key MaxMind License Key ✅ ❌ ✅
MessageBird access key messagebird-api-token ✅ ❌ ❌
MessageBird API client ID MessageBird API client ID ✅ ❌ ❌
Meta access token Meta access token ✅ ❌ ❌
New Relic ingest browser API token New Relic ingest browser API token ✅ ❌ ❌
New Relic ingest browser API token v2 New Relic ingest browser API token v2 ✅ ❌ ✅
New Relic REST API Key New Relic REST API Key ✅ ❌ ✅
New Relic user API ID New Relic user API ID ✅ ❌ ✅
New Relic user API key New Relic user API Key ✅ ❌ ✅
npm access token npm access token ✅ ❌ ✅
Oculus access token Oculus access token ✅ ❌ ❌
Okta API Token OktaAPIToken ✅ ❌ ✅
Okta Client Secret OktaClientSecret ✅ ❌ ❌
Onfido Live API Token Onfido Live API Token ✅ ❌ ✅
OpenAI API key open ai token ✅ ❌ ❌
OpenAI Project Key OpenAiProjectKey ✅ ❌ ✅
OpenAI Service Account Key OpenAiServiceAccountKey ✅ ❌ ✅
Password in URL Password in URL ✅ ❌ ❌
PGP private key PGP private key ✅ ❌ ❌
PKCS8 private key PKCS8 private key ✅ ❌ ❌
PlanetScale API token Planetscale API token ✅ ❌ ✅
PlanetScale App Secret PlanetscaleAppSecret ✅ ❌ ✅
PlanetScale OAuth Secret PlanetscaleOAuthSecret ✅ ❌ ✅
PlanetScale password Planetscale password ✅ ❌ ✅
PostHog Personal API key PostHogPersonalAPIkey ✅ ❌ ✅
PostHog Project API key PostHogProjectAPIkey ✅ ❌ ✅
Postman API token Postman API token ✅ ❌ ❌
Postman Collection Access Key PostmanCollectionAccessKey ✅ ❌ ✅
Pulumi API token Pulumi API token ✅ ❌ ❌
PyPi upload token PyPI upload token ✅ ❌ ✅
RSA private key RSA private key ✅ ❌ ❌
RubyGems API token Rubygem API token ✅ ❌ ✅
Segment public API token Segment Public API token ✅ ❌ ✅
SendGrid API token Sendgrid API token ✅ ❌ ✅
Shippo API token Shippo API token ✅ ❌ ✅
Shippo Test API token Shippo Test API token ✅ ❌ ❌
Shopify Partner API Token ShopifyPartnerAPIToken ✅ ❌ ✅
Shopify personal access token Shopify access token ✅ ❌ ✅
Shopify private app access token Shopify private app access token ✅ ❌ ✅
Shopify Custom App Access Token Shopify custom app access token ✅ ❌ ✅
Shopify shared secret Shopify shared secret ✅ ❌ ✅
Slack App Configuration Token SlackAppConfigurationToken ✅ ❌ ✅
Slack App Configuration Refresh Token SlackAppConfigurationRefreshToken ✅ ❌ ✅
Slack app level token SlackAppLevelToken ✅ ❌ ✅
Slack bot user OAuth token Slack token ✅ ❌ ✅
Slack webhook Slack Webhook ✅ ❌ ❌
SonarQube Global Analysis Token SonarQubeGlobalAnalysisToken ✅ ❌ ✅
SonarQube Project Analysis Token SonarQubeProjectAnalysisToken ✅ ❌ ✅
SonarQube User Token SonarQubeUserToken ✅ ❌ ✅
Splunk Authentication Token SplunkAuthToken ✅ ❌ ✅
Splunk HTTP Event Collector (HEC) Token SplunkHECToken ✅ ❌ ❌
SSH (DSA) private key SSH (DSA) private key ✅ ❌ ❌
SSH (EC) private key SSH (EC) private key ✅ ❌ ❌
SSH private key SSH private key ✅ ❌ ❌
Stripe live restricted key StripeLiveRestrictedKey ✅ ❌ ✅
Stripe live secret key StripeLiveSecretKey ✅ ❌ ✅
Stripe Live Short Secret Key StripeLiveShortSecretKey ✅ ❌ ✅
Stripe publishable live key StripeLivePublishableKey ✅ ❌ ❌
Stripe publishable test key StripeTestPublishableKey ✅ ❌ ❌
Stripe restricted test key StripeTestRestrictedKey ✅ ❌ ❌
Stripe secret test key StripeTestSecretKey ✅ ❌ ❌
Stripe Test Short Secret Key StripeTestShortSecretKey ✅ ❌ ✅
Tailscale OAuth Client Secret TailscaleOauthClientSecret ✅ ❌ ✅
Tailscale API Access Token TailscaleApiAccessToken ✅ ❌ ✅
Tailscale Personal Auth Key TailscalePersonalAuthKey ✅ ❌ ✅
Tencent Cloud Secret ID TencentCloudSecretID ✅ ❌ ✅
Twilio Account SID Twilio Account SID ✅ ❌ ✅
Twilio API key Twilio API Key ✅ ❌ ✅
Twitch OAuth client secret Twitch API token ✅ ❌ ❌
Typeform personal access token Typeform API token ✅ ❌ ❌
Volcengine Access Key ID VolcengineAccessKeyID ✅ ❌ ✅
WakaTime API Key WakaTimeAPIKey ✅ ❌ ✅
X token Twitter token ✅ ❌ ❌
Yandex.Cloud AWS API compatible access secret Yandex.Cloud AWS API compatible Access Secret ✅ ❌ ❌
Yandex.Cloud API Key Yandex.Cloud API Key ✅ ❌ ❌
Yandex.Cloud IAM cookie v1-1 Yandex.Cloud IAM Cookie v1 - 1 ✅ ❌ ❌
Yandex.Cloud IAM cookie v1-3 Yandex.Cloud IAM Cookie v1 - 3 ✅ ❌ ❌

감지된 시크릿

GitLab v19.5
Tier: Ultimate
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
원문 보기

요약

GitLab Secret Detection은 규칙 기반 탐지와 일반 탐지라는 두 가지 방식으로 시크릿을 식별합니다. 규칙 기반 탐지는 스캔한 콘텐츠를 자격 증명 유형별로 알려진 패턴, 즉 규칙과 대조하여 시크릿을 식별합니다.

시크릿 범주#

GitLab Secret Detection은 규칙 기반 탐지와 일반 탐지라는 두 가지 방식으로 시크릿을 식별합니다.

규칙 기반 탐지#

규칙 기반 탐지는 스캔한 콘텐츠를 자격 증명 유형별로 알려진 패턴, 즉 규칙과 대조하여 시크릿을 식별합니다. 예를 들어 GitLab 개인 액세스 토큰은 glpat- 뒤에 20자 문자열이 오는 패턴으로 식별합니다. GitLab은 널리 쓰이는 공급업체를 포괄하는 200개 이상의 규칙을 기본으로 지원합니다.

규칙 기반 탐지의 적용 범위는 분석기가 지원하는 규칙으로 한정됩니다. 지원되는 규칙과 일치하지 않는 시크릿은 탐지되지 않습니다. Gitleaks 기반 분석기와 GitLab Secret Scanning for Source Code 모두 규칙 기반 탐지를 지원합니다.

일반 탐지#

규칙 기반 탐지는 이미 알고 있는 패턴과 일치하는 시크릿만 찾을 수 있습니다. 많은 자격 증명은 공개되거나 일관된 형식을 따르지 않아 어떤 규칙과도 일치하지 않습니다. 예를 들어 내부 서비스의 비밀번호, 데이터베이스 연결 문자열, 구별되는 접두사가 없는 API 키가 있습니다. 일반 탐지는 이러한 시크릿을 대상으로 합니다. 고정된 패턴과 대조하는 대신, 일반 탐지는 값 주변의 컨텍스트와 값 자체의 속성을 살펴봅니다. 두 신호로 해당 값이 자격 증명일 가능성을 판단합니다.

일반 탐지는 알려진 패턴에 의존하지 않으므로 규칙 기반 탐지가 놓치는 시크릿을 잡아낼 수 있습니다. 대신 오탐이 발생하기 쉬우므로 GitLab Secret Scanning for Source Code는 노이즈를 줄이는 오탐 감소 기능을 포함합니다.

일반 탐지를 지원하는 GitLab 분석기는 GitLab Secret Scanning for Source Code뿐입니다. 자세한 내용은 일반 시크릿을 참고합니다.

일반 탐지는 명확한 secret = "value" 할당에만 국한되지 않습니다. 다음 스니펫은 일반 탐지가 식별하는 덜 명확한 값과 각각이 만들어 내는 탐지 결과를 보여 줍니다.

# Secret assigned in a Perl hash, not a plain key-value pair
$config{'webhook_token'} = "Of0Pg2Qh4Ri6Sj8Tk";

# Password stored as the content of an XML element, not an attribute
<db_password>Ct8Du0Ev2Fw4Gx6Hy</db_password>

# API key passed as a URL query parameter
https://app.gitlab.com?api_key=Of3Pg5Qh7Ri9Sj1Tk

# Token embedded as a literal value in a SQL statement
INSERT INTO secrets (key, value) VALUES ('api_token', 'Kb1Lc3Md5Ne7Of9Pg');

# Password assigned through an environment variable lookup, not a plain variable
ENV["redis_pass"] = "Tt7Yy9Uu1Ii3OoPp5"

# Token passed as an argument to a setter method, not a direct assignment
config.put("dbToken", "Kb8Lc0Md2Ne4Of6Pg");

# Bearer token embedded in an XML configuration property
<property name="authorizationHeader" value="Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"/>

# Secret passed as a CLI flag, not a variable assignment
curl "https://api.example.com/v1/deploy" --api-token=7bN2vLpQ9wXzKfM4

# Credential left behind in a comment
# old admin password was T3mpP@ssw0rd2023XyZ1, rotate before removing this line

# UUID-formatted secret
client_secret: 123e4567-e89b-12d3-a456-426614174000

# Secret disguised by Base64 encoding
auth_token = "c2VjcmV0LWFwaS1rZXktdmFsdWU="

# Secret disguised by hex encoding
signing_key = "4f3c2b1a9e8d7c6b5a4938271605f4e3d2c1b0a"

일반 시크릿 탐지 결과#

일반 시크릿이 발견되면 GitLab은 탐지한 값의 유형에 따라 취약점 보고서에서 해당 결과에 레이블을 붙입니다.

  • Generic Password: 데이터베이스 비밀번호나 서비스 비밀번호처럼 사람이 정한 비밀번호입니다.
  • Generic Secret: 알려진 공급업체 형식과 일치하지 않는, API 키나 액세스 토큰 같은 기계 생성 자격 증명입니다.
  • Generic UUID Secret, Generic Base64-Encoded Secret, Generic Base64URL-Encoded Secret, Generic Hex-Encoded Secret, Generic JWT Token, Generic Paseto Token: GitLab이 형식에 따라 추가로 분류한 기계 생성 자격 증명입니다.

각 탐지 결과에는 해당 값이 표시된 이유를 설명하는 내용이 포함됩니다. 이 설명은 값이 실제 시크릿인지 확인하는 방법, 확인된 시크릿을 교체하는 방법, 오탐을 무시하는 방법을 안내합니다.

일반 탐지가 놓칠 수 있는 시크릿#

일반 탐지는 값이 무엇을 하는지 확인하는 대신 키워드나 값의 형식 같은 주변 정보로 시크릿을 식별합니다. 이 방식에는 장단점이 있습니다. 오탐 감소 기능이 적용되어 있어도 시크릿이 아닌 값이 탐지 결과로 나타날 수 있습니다. 예를 들면 다음과 같습니다.

  • full_key = prefix + secret_suffix처럼 연결이나 문자열 보간으로 만들어진 시크릿.
  • 근처에 key, secret, token, password 같은 레이블이 없는 하드코딩 값처럼, 알아볼 수 있는 키워드가 주변에 없는 시크릿.
  • 벤더링된 의존성, 생성된 파일, 문서처럼 일반 탐지가 제외하는 파일이나 경로에 있는 시크릿.
  • 해당 시크릿 유형에 대해 일반 탐지가 요구하는 최소 길이보다 짧은 값.
  • 중간 또는 낮은 신뢰도로 보고된 시크릿. GitLab Secret Scanning for Source Code는 취약점 보고서에 높은 신뢰도의 탐지 결과만 표시합니다.

규칙 기반 탐지에서 지원하는 규칙#

다음 표는 규칙 기반 탐지에 사용되는 규칙과, 각 규칙을 다음 기능이 지원하는지 여부를 보여 줍니다.

  • 파이프라인 시크릿 탐지
  • 클라이언트 측 시크릿 탐지
  • 시크릿 푸시 보호

시크릿 탐지 규칙은 기본 규칙 세트에서 업데이트됩니다. 제거되거나 업데이트된 패턴으로 탐지된 시크릿은 분류할 수 있도록 열린 상태로 유지됩니다.

새 시크릿 탐지 규칙을 추가하려면 모든 GitLab 사용자를 위해 새 탐지 규칙을 제안하거나, 특정 프로젝트에 맞게 규칙 세트를 사용자 지정할 수 있습니다.

설명 ID 파이프라인 시크릿 탐지 클라이언트 측 시크릿 탐지 시크릿 푸시 보호
Adafruit IO Key AdafruitIOKey ✅ ❌ ✅
Adobe Client ID (OAuth Web) Adobe Client ID (Oauth Web) ✅ ❌ ❌
Adobe client secret Adobe Client Secret ✅ ❌ ✅
Adobe IMS Access Token AdobeIMSAccessToken ✅ ❌ ❌
Age secret key Age secret key ✅ ❌ ❌
Aiven Service Password AivenServicePassword ✅ ❌ ✅
Alibaba AccessKey ID Alibaba AccessKey ID ✅ ❌ ❌
Alibaba Secret Key Alibaba Secret Key ✅ ❌ ❌
Amazon OAuth Client ID AmazonOAuthClientID ✅ ❌ ✅
Anthropic API key anthropic_key ✅ ✅ ✅
Artifactory API Key ArtifactoryApiKey ✅ ❌ ✅
Artifactory Identity Token ArtifactoryIdentityToken ✅ ❌ ✅
Asana client ID Asana Client ID ✅ ❌ ❌
Asana client secret Asana Client Secret ✅ ❌ ❌
Asana Personal Access Token V1 AsanaPersonalAccessTokenV1 ✅ ❌ ✅
Asana Personal Access Token V2 AsanaPersonalAccessTokenV2 ✅ ❌ ✅
Atlassian API Key AtlassianApiKey ✅ ❌ ✅
Atlassian API token Atlassian API token ✅ ❌ ❌
Atlassian User API Token AtlassianUserApiToken ✅ ❌ ✅
Auth0 Client Secret Auth0ClientSecret ✅ ❌ ❌
AWS Access Key ID AWS ✅ ❌ ✅
AWS Access Secret Key AWSSecretAccessKey ✅ ❌ ❌
AWS Session Token AWSSessionToken ✅ ❌ ✅
AWS Cognito Identity Pool ID AWSCognitoIdentityPoolID ✅ ❌ ❌
AWS Bedrock Key AWSBedrockKey ✅ ❌ ❌
AWS Bedrock Short-lived Key AWSBedrockShortLivedKey ✅ ❌ ✅
Azure API Management Gateway Key AzureAPIManagementGatewayKey ✅ ❌ ✅
Azure API Management Direct Key AzureAPIManagementDirectKey ✅ ❌ ❌
Azure App Config AzureAppConfigConnectionString ✅ ❌ ✅
Azure Communication Services AzureCommServicesConnectionString ✅ ❌ ✅
Azure Cosmos DB Credentials AzureCosmosDBCredentials ✅ ❌ ❌
Azure Entra Client Secret AzureEntraClientSecret ✅ ❌ ✅
Azure Entra Client ID Token AzureEntraIDToken ✅ ❌ ✅
Azure EventGrid Access Key AzureEventGridAccessKey ✅ ❌ ❌
Azure Functions API Key AzureFunctionsAPIKey ✅ ❌ ✅
Azure Logic App SAS AzureLogicAppSAS ✅ ❌ ✅
Azure OpenAI API Key AzureOpenAIAPIKey ✅ ❌ ❌
Azure Personal Access Token AzurePersonalAccessToken ✅ ❌ ❌
Azure SignalR Access Key AzureSignalRAccessKey ✅ ❌ ✅
Beamer API token Beamer API token ✅ ❌ ❌
Bitbucket client ID Bitbucket client ID ✅ ❌ ❌
Bitbucket client secret Bitbucket client secret ✅ ❌ ❌
Brevo API token Sendinblue API token ✅ ❌ ✅
Brevo SMTP token Sendinblue SMTP token ✅ ❌ ✅
Canada Digital Service Notify API Key CDSCanadaNotifyAPIKey ✅ ❌ ✅
CircleCI access token CircleCI access tokens ✅ ❌ ✅
Clojars deploy token Clojars API token ✅ ❌ ❌
Contentful delivery API token Contentful delivery API token ✅ ❌ ❌
Contentful personal access token ContentfulPersonalAccessToken ✅ ❌ ✅
Contentful preview API token Contentful preview API token ✅ ❌ ❌
Databricks API token Databricks API token ✅ ❌ ❌
DataDog API Key DataDogAPIKey ✅ ❌ ❌
DigitalOcean OAuth access token digitalocean-access-token ✅ ❌ ❌
DigitalOcean personal access token digitalocean-pat ✅ ❌ ❌
DigitalOcean refresh token digitalocean-refresh-token ✅ ❌ ❌
Discord API key Discord API key ✅ ❌ ❌
Discord client ID Discord client ID ✅ ❌ ❌
Discord client secret Discord client secret ✅ ❌ ❌
Docker Personal Access Token DockerPersonalAccessToken ✅ ❌ ✅
Doppler API token Doppler API token ✅ ❌ ✅
Doppler Service token Doppler Service token ✅ ❌ ✅
Dropbox API secret/key Dropbox API secret/key ✅ ❌ ❌
Dropbox App Access Token DropboxAppAccessToken ✅ ❌ ✅
Dropbox long lived API token Dropbox long lived API token ✅ ❌ ❌
Dropbox short lived API token Dropbox short lived API token ✅ ❌ ✅
Duffel API token Duffel API token ✅ ❌ ❌
Dynatrace Platform Token DynatracePlatformToken ✅ ❌ ❌
EasyPost production API key EasyPost API token ✅ ❌ ❌
EasyPost test API key EasyPost test API token ✅ ❌ ❌
Facebook token Facebook token ✅ ❌ ❌
Fastly API user or automation token Fastly API token ✅ ❌ ❌
Figma Personal Access Token FigmaPersonalAccessToken ✅ ❌ ✅
Finicity API token Finicity API token ✅ ❌ ❌
Finicity client secret Finicity client secret ✅ ❌ ❌
Flutterwave Prod Encrypted Key FlutterwaveProdEncryptedKey ✅ ❌ ✅
Flutterwave test encrypted key Flutterwave encrypted key ✅ ❌ ❌
Flutterwave Prod Public Key FlutterwaveProdPublicKey ✅ ❌ ✅
Flutterwave test public key Flutterwave public key ✅ ❌ ❌
Flutterwave Prod Secret Key FlutterwaveProdSecretKey ✅ ❌ ✅
Flutterwave test secret key Flutterwave secret key ✅ ❌ ❌
Frame.io API token Frame.io API token ✅ ❌ ❌
GCP API key GCP API key ✅ ❌ ❌
GCP OAuth client secret GCP OAuth client secret ✅ ❌ ✅
GCP Vertex Express Mode Key GCPVertexExpressModeKey ✅ ❌ ✅
GitHub app token Github App Token ✅ ❌ ✅
GitHub App Installation Token GithubAppInstallationToken ✅ ❌ ✅
GitHub Fine Grained Personal Access Token GithubFineGrainedPersonalAccessToken ✅ ❌ ✅
GitHub OAuth Access Token Github OAuth Access Token ✅ ❌ ✅
GitHub personal access token (classic) Github Personal Access Token ✅ ❌ ✅
GitHub refresh token Github Refresh Token ✅ ❌ ✅
GitLab CI/CD job token gitlab_ci_build_token ✅ ✅ ❌
GitLab deploy token gitlab_deploy_token ✅ ✅ ❌
GitLab Feature Flags Client Token None ❌ ✅ ❌
GitLab feed token gitlab_feed_token ✅ ✅ ❌
GitLab feed token v2 gitlab_feed_token_v2 ✅ ✅ ✅
GitLab incoming email token gitlab_incoming_email_token ✅ ✅ ✅
GitLab Kubernetes agent token gitlab_kubernetes_agent_token ✅ ✅ ✅
GitLab OAuth application secret gitlab_oauth_app_secret ✅ ✅ ✅
GitLab personal access token gitlab_personal_access_token ✅ ✅ ✅
GitLab Personal Access Token (routable) gitlab_personal_access_token_routable ✅ ✅ ✅
GitLab pipeline trigger token gitlab_pipeline_trigger_token ✅ ✅ ✅
GitLab runner authentication token gitlab_runner_auth_token ✅ ✅ ✅
GitLab runner registration token gitlab_runner_registration_token ✅ ❌ ✅
GitLab SCIM OAuth token gitlab_scim_oauth_token ✅ ✅ ❌
GoCardless API token GoCardless API token ✅ ❌ ❌
Google API key GCP API key ✅ ❌ ❌
Google (GCP) service account Google (GCP) Service-account ✅ ❌ ✅
Grafana Service Account Token GrafanaServiceAccountToken ✅ ❌ ✅
Grafana Cloud Access Policy Token GrafanaCloudAccessPolicyToken ✅ ❌ ✅
HashiCorp Terraform API token Hashicorp Terraform user/org API token ✅ ❌ ✅
HashiCorp Vault batch token Hashicorp Vault batch token ✅ ❌ ✅
HashiCorp Vault Service Token HashicorpVaultServiceToken ✅ ❌ ✅
Heroku API key or application authorization token Heroku API Key ✅ ❌ ✅
Highnote Live Secret Key HighnoteLiveSecretKey ✅ ❌ ✅
Highnote Test Secret Key HighnoteTestSecretKey ✅ ❌ ✅
HubSpot private app API token Hubspot API token ✅ ❌ ✅
Hugging Face User Access Token HuggingFaceUserAccessToken ✅ ❌ ✅
Instagram access token Instagram access token ✅ ❌ ❌
Intercom API token Intercom API token ✅ ❌ ❌
Intercom App Access Token IntercomAppAccessToken ✅ ❌ ✅
Intercom client secret or client ID Intercom client secret/ID ✅ ❌ ❌
Ionic personal access token Ionic API token ✅ ❌ ❌
JFrog Platform Access Tokens JfrogPlatformAccessToken ✅ ❌ ❌
Kubernetes Service Account Token KubernetesServiceAccToken ✅ ❌ ✅
LangChain API Key LangChainAPIKey ✅ ❌ ✅
Linear API token Linear API token ✅ ❌ ✅
Linear client secret or ID (OAuth 2.0) Linear client secret/ID ✅ ❌ ❌
LinkedIn client ID Linkedin Client ID ✅ ❌ ❌
LinkedIn client secret Linkedin Client secret ✅ ❌ ❌
Lob API key Lob API Key ✅ ❌ ❌
Lob publishable API key Lob Publishable API Key ✅ ❌ ❌
Mailchimp API key Mailchimp API key ✅ ❌ ✅
Mailgun private API token Mailgun private API token ✅ ❌ ✅
Mailgun public verification key Mailgun public validation key ✅ ❌ ❌
Mailgun webhook signing key Mailgun webhook signing key ✅ ❌ ✅
Mapbox API token Mapbox API token ✅ ❌ ❌
Mapbox Secret API Token MapboxSecretApiToken ✅ ❌ ❌
MaxMind License Key MaxMind License Key ✅ ❌ ✅
MessageBird access key messagebird-api-token ✅ ❌ ❌
MessageBird API client ID MessageBird API client ID ✅ ❌ ❌
Meta access token Meta access token ✅ ❌ ❌
New Relic ingest browser API token New Relic ingest browser API token ✅ ❌ ❌
New Relic ingest browser API token v2 New Relic ingest browser API token v2 ✅ ❌ ✅
New Relic REST API Key New Relic REST API Key ✅ ❌ ✅
New Relic user API ID New Relic user API ID ✅ ❌ ✅
New Relic user API key New Relic user API Key ✅ ❌ ✅
npm access token npm access token ✅ ❌ ✅
Oculus access token Oculus access token ✅ ❌ ❌
Okta API Token OktaAPIToken ✅ ❌ ✅
Okta Client Secret OktaClientSecret ✅ ❌ ❌
Onfido Live API Token Onfido Live API Token ✅ ❌ ✅
OpenAI API key open ai token ✅ ❌ ❌
OpenAI Project Key OpenAiProjectKey ✅ ❌ ✅
OpenAI Service Account Key OpenAiServiceAccountKey ✅ ❌ ✅
Password in URL Password in URL ✅ ❌ ❌
PGP private key PGP private key ✅ ❌ ❌
PKCS8 private key PKCS8 private key ✅ ❌ ❌
PlanetScale API token Planetscale API token ✅ ❌ ✅
PlanetScale App Secret PlanetscaleAppSecret ✅ ❌ ✅
PlanetScale OAuth Secret PlanetscaleOAuthSecret ✅ ❌ ✅
PlanetScale password Planetscale password ✅ ❌ ✅
PostHog Personal API key PostHogPersonalAPIkey ✅ ❌ ✅
PostHog Project API key PostHogProjectAPIkey ✅ ❌ ✅
Postman API token Postman API token ✅ ❌ ❌
Postman Collection Access Key PostmanCollectionAccessKey ✅ ❌ ✅
Pulumi API token Pulumi API token ✅ ❌ ❌
PyPi upload token PyPI upload token ✅ ❌ ✅
RSA private key RSA private key ✅ ❌ ❌
RubyGems API token Rubygem API token ✅ ❌ ✅
Segment public API token Segment Public API token ✅ ❌ ✅
SendGrid API token Sendgrid API token ✅ ❌ ✅
Shippo API token Shippo API token ✅ ❌ ✅
Shippo Test API token Shippo Test API token ✅ ❌ ❌
Shopify Partner API Token ShopifyPartnerAPIToken ✅ ❌ ✅
Shopify personal access token Shopify access token ✅ ❌ ✅
Shopify private app access token Shopify private app access token ✅ ❌ ✅
Shopify Custom App Access Token Shopify custom app access token ✅ ❌ ✅
Shopify shared secret Shopify shared secret ✅ ❌ ✅
Slack App Configuration Token SlackAppConfigurationToken ✅ ❌ ✅
Slack App Configuration Refresh Token SlackAppConfigurationRefreshToken ✅ ❌ ✅
Slack app level token SlackAppLevelToken ✅ ❌ ✅
Slack bot user OAuth token Slack token ✅ ❌ ✅
Slack webhook Slack Webhook ✅ ❌ ❌
SonarQube Global Analysis Token SonarQubeGlobalAnalysisToken ✅ ❌ ✅
SonarQube Project Analysis Token SonarQubeProjectAnalysisToken ✅ ❌ ✅
SonarQube User Token SonarQubeUserToken ✅ ❌ ✅
Splunk Authentication Token SplunkAuthToken ✅ ❌ ✅
Splunk HTTP Event Collector (HEC) Token SplunkHECToken ✅ ❌ ❌
SSH (DSA) private key SSH (DSA) private key ✅ ❌ ❌
SSH (EC) private key SSH (EC) private key ✅ ❌ ❌
SSH private key SSH private key ✅ ❌ ❌
Stripe live restricted key StripeLiveRestrictedKey ✅ ❌ ✅
Stripe live secret key StripeLiveSecretKey ✅ ❌ ✅
Stripe Live Short Secret Key StripeLiveShortSecretKey ✅ ❌ ✅
Stripe publishable live key StripeLivePublishableKey ✅ ❌ ❌
Stripe publishable test key StripeTestPublishableKey ✅ ❌ ❌
Stripe restricted test key StripeTestRestrictedKey ✅ ❌ ❌
Stripe secret test key StripeTestSecretKey ✅ ❌ ❌
Stripe Test Short Secret Key StripeTestShortSecretKey ✅ ❌ ✅
Tailscale OAuth Client Secret TailscaleOauthClientSecret ✅ ❌ ✅
Tailscale API Access Token TailscaleApiAccessToken ✅ ❌ ✅
Tailscale Personal Auth Key TailscalePersonalAuthKey ✅ ❌ ✅
Tencent Cloud Secret ID TencentCloudSecretID ✅ ❌ ✅
Twilio Account SID Twilio Account SID ✅ ❌ ✅
Twilio API key Twilio API Key ✅ ❌ ✅
Twitch OAuth client secret Twitch API token ✅ ❌ ❌
Typeform personal access token Typeform API token ✅ ❌ ❌
Volcengine Access Key ID VolcengineAccessKeyID ✅ ❌ ✅
WakaTime API Key WakaTimeAPIKey ✅ ❌ ✅
X token Twitter token ✅ ❌ ❌
Yandex.Cloud AWS API compatible access secret Yandex.Cloud AWS API compatible Access Secret ✅ ❌ ❌
Yandex.Cloud API Key Yandex.Cloud API Key ✅ ❌ ❌
Yandex.Cloud IAM cookie v1-1 Yandex.Cloud IAM Cookie v1 - 1 ✅ ❌ ❌
Yandex.Cloud IAM cookie v1-3 Yandex.Cloud IAM Cookie v1 - 3 ✅ ❌ ❌