|
| 1 | +--- |
| 2 | +title: Responsible detection of generic secrets with Copilot secret scanning |
| 3 | +shortTitle: Generic secret detection |
| 4 | +intro: 'Learn how {% data variables.secret-scanning.copilot-secret-scanning %} uses AI responsibly to scan and create alerts for unstructured secrets, such as passwords.' |
| 5 | +allowTitleToDifferFromFilename: true |
| 6 | +versions: |
| 7 | + feature: secret-scanning-ai-generic-secret-detection |
| 8 | + fpt: '*' |
| 9 | +type: rai |
| 10 | +topics: |
| 11 | + - Secret scanning |
| 12 | + - Advanced Security |
| 13 | + - AI |
| 14 | + - Copilot |
| 15 | +redirect_from: |
| 16 | + - /code-security/secret-scanning/about-the-detection-of-generic-secrets-with-secret-scanning |
| 17 | + - /code-security/secret-scanning/using-advanced-secret-scanning-and-push-protection-features/generic-secret-detection/about-the-detection-of-generic-secrets-with-secret-scanning |
| 18 | + - /code-security/secret-scanning/using-advanced-secret-scanning-and-push-protection-features/generic-secret-detection/responsible-ai-generic-secrets |
| 19 | +--- |
| 20 | + |
| 21 | +<!--Note on the versioning above ^. This article is visible to free, pro, team users for transparency. They cannot use the feature so `fpt` is not included in the feature definition.--> |
| 22 | + |
| 23 | +## About {% data variables.secret-scanning.generic-secret-detection %} with {% data variables.secret-scanning.copilot-secret-scanning %} |
| 24 | + |
| 25 | +{% data variables.secret-scanning.copilot-secret-scanning %}'s {% data variables.secret-scanning.generic-secret-detection %} is an AI-powered expansion of {% data variables.product.prodname_secret_scanning %} that identifies unstructured secrets (passwords) in your source code and then generates an alert. |
| 26 | + |
| 27 | +{% data reusables.rai.secret-scanning.copilot-secret-scanning-generic-secrets-subscription-note %} |
| 28 | + |
| 29 | +{% data variables.product.prodname_GH_advanced_security %} users can already receive {% data variables.secret-scanning.alerts %} for partner or custom patterns found in their source code, but unstructured secrets are not easily discoverable. {% data variables.secret-scanning.copilot-secret-scanning %} uses large language models (LLMs) to identify this type of secret. |
| 30 | + |
| 31 | +When a password is detected, an alert is displayed in the "Experimental" list of {% data variables.product.prodname_secret_scanning %} alerts (under the **Security** tab of the repository, organization, or enterprise), so that maintainers and security managers can review the alert and, where necessary, remove the credential or implement a fix. |
| 32 | + |
| 33 | +{% data reusables.rai.secret-scanning.generic-secret-detection-policy-note %} The feature must then be enabled for repositories and organizations. |
| 34 | + |
| 35 | +### Input processing |
| 36 | + |
| 37 | +Input is limited to text (typically code) that a user has checked into a repository. The system provides this text to the LLM along with a meta prompt asking the LLM to find passwords within the scope of the input. The user does not interact with the LLM directly. |
| 38 | + |
| 39 | +The system scans for passwords using the LLM. No additional data is collected by the system, other than what is already collected by the existing {% data variables.product.prodname_secret_scanning %} feature. |
| 40 | + |
| 41 | +### Output and display |
| 42 | + |
| 43 | +The LLM scans for strings that resemble passwords and verifies that the identified strings included in the response actually exist in the input. |
| 44 | + |
| 45 | +These detected strings are surfaced as alerts on the {% data variables.product.prodname_secret_scanning %} alerts page, but they are displayed in an additional list that is separate from regular {% data variables.secret-scanning.alerts %}. The intent is that this separate list is triaged with more scrutiny to verify the validity of the findings. Each alert notes that it was detected using AI. {% ifversion secret-scanning-ai-generic-secret-detection %}For information on how to view alerts for generic secrets, see "[AUTOTITLE](/code-security/secret-scanning/managing-alerts-from-secret-scanning/viewing-alerts)."{% endif %} |
| 46 | + |
| 47 | +## Improving the performance of {% data variables.secret-scanning.generic-secret-detection %} |
| 48 | + |
| 49 | +To improve the performance of {% data variables.secret-scanning.generic-secret-detection %}, we recommend closing false positive alerts appropriately. |
| 50 | + |
| 51 | +### Verify the accuracy of alerts and close as appropriate |
| 52 | + |
| 53 | +Since {% data variables.secret-scanning.copilot-secret-scanning %}'s {% data variables.secret-scanning.generic-secret-detection %} may generate more false positives than the existing {% data variables.product.prodname_secret_scanning %} feature for partner patterns, it's important that you review the accuracy of these alerts. When you verify an alert to be a false positive, be sure to close the alert and mark the reason as "False positive" in the {% data variables.product.prodname_dotcom %} UI. The {% data variables.product.prodname_dotcom %} development team will use information on false positive volume and detection locations to improve the model. {% data variables.product.prodname_dotcom %} does not have access to the secret literals themselves. |
| 54 | + |
| 55 | +## Limitations of {% data variables.secret-scanning.generic-secret-detection %} |
| 56 | + |
| 57 | +When using {% data variables.secret-scanning.copilot-secret-scanning %}'s {% data variables.secret-scanning.generic-secret-detection %}, you should consider the following limitations. |
| 58 | + |
| 59 | +### Limited scope |
| 60 | + |
| 61 | +{% data variables.secret-scanning.generic-secret-detection-caps %} currently only looks for instances of passwords in git content. The feature does not look for other types of generic secrets, and it does not look for secrets in non-git content, such as {% data variables.product.prodname_github_issues %}. |
| 62 | + |
| 63 | +### Potential for false positive alerts |
| 64 | + |
| 65 | +{% data variables.secret-scanning.generic-secret-detection-caps %} may generate more false positive alerts when compared to the existing {% data variables.product.prodname_secret_scanning %} feature (which detects partner patterns, and which has a very low false positive rate). To mitigate this excess noise, alerts are grouped in a separate list from partner pattern alerts, and security managers and maintainers should triage each alert to verify its accuracy. |
| 66 | + |
| 67 | +### Potential for incomplete reporting |
| 68 | + |
| 69 | +{% data variables.secret-scanning.generic-secret-detection-caps %} may miss instances of credentials checked into a repository. The LLM will improve over time. You retain ultimate responsibility for ensuring the security of your code. |
| 70 | + |
| 71 | +### Limitations by design |
| 72 | + |
| 73 | +{% data variables.secret-scanning.generic-secret-detection-caps %} has the following limitations by design: |
| 74 | + |
| 75 | +* {% data variables.secret-scanning.copilot-secret-scanning %} will not detect secrets that are obviously fake or test passwords, or passwords with low entropy. |
| 76 | +* {% data variables.secret-scanning.copilot-secret-scanning %} will only detect a maximum of 100 passwords per push. |
| 77 | +* If five or more detected secrets within a single file are marked as false positive, {% data variables.secret-scanning.copilot-secret-scanning %} will stop generating new alerts for that file. |
| 78 | +* {% data variables.secret-scanning.copilot-secret-scanning %} does not detect secrets in generated or vendored files. |
| 79 | +* {% data variables.secret-scanning.copilot-secret-scanning %} does not detect secrets in encrypted files. |
| 80 | +* {% data variables.secret-scanning.copilot-secret-scanning %} does not detect secrets in file types: SVG, PNG, JPEG, CSV, TXT, SQL, or ITEM. |
| 81 | +* {% data variables.secret-scanning.copilot-secret-scanning %} does not detect secrets in test code. {% data variables.secret-scanning.copilot-secret-scanning %} skips detections where: |
| 82 | + * The file path contains "test", "mock", or "spec". |
| 83 | + * The file extension is `.cs`, `.go`, `.java`, `.js`, `.kt`, `.php`, `.py`, `.rb`, `.scala`, `.swift`, or `.ts`. |
| 84 | + |
| 85 | +## Evaluation of {% data variables.secret-scanning.generic-secret-detection %} |
| 86 | + |
| 87 | +{% data variables.secret-scanning.generic-secret-detection-caps %} has been subject to Responsible AI Red Teaming and {% data variables.product.prodname_dotcom %} will continue to monitor the efficacy and safety of the feature over time. |
| 88 | + |
| 89 | +{% ifversion secret-scanning-ai-generic-secret-detection %} |
| 90 | + |
| 91 | +## Next steps |
| 92 | + |
| 93 | +* [AUTOTITLE](/code-security/secret-scanning/copilot-secret-scanning/enabling-ai-powered-generic-secret-detection) |
| 94 | +* [AUTOTITLE](/code-security/secret-scanning/managing-alerts-from-secret-scanning) |
| 95 | + |
| 96 | +{% endif %} |
| 97 | + |
| 98 | +## Further reading |
| 99 | + |
| 100 | +* [AUTOTITLE](/code-security/secret-scanning/introduction/about-secret-scanning){% ifversion ghec %} |
| 101 | +* [AUTOTITLE](/admin/policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-code-security-and-analysis-for-your-enterprise#enforcing-a-policy-to-manage-the-use-of-generic-secret-detection-for-secret-scanning-in-your-enterprises-repositories){% endif %} |
0 commit comments