@data-leakage-protection/signatures
v1.2.4
Published
Identify confidential and sensitive info in source code repos with signatures (IT secret definitions).
Downloads
24
Maintainers
Readme
signatures (@data-leakage-protection/signatures)
Identify confidential and sensitive info in source code repositories by data-loss "signatures".
@data-leakage-protection/signatures is a Node.js
module
for storing and accessing to data-leakage detection definitions.
We call the data structure that represents a data-leakage detection
defintion a "signature." We store a community-tested list of signatures in a
file called signatures.json
.
Table of Contents
- 1. Security
- 2. Install
- 3. Usage
- 4. API
- 5. Accessing signatures with other tools and programming languages
- 6. Maintainers
- 7. Contributions
- 8. License
- 9. References and Attributions
1. Security
Data leakage is the unauthorized transmission of data from within an organization to an external destination or recipient.[^1]
One of the most common forms of data-loss (aka, "data leakage") happens when developers (inadvertently) commit and push passwords, access-tokens, and sensitive data to a source-control management system (like Git). Consequently, confidential information "leaks" into search results and commit history.
The signatures.json contains a growing list of definitions to help you detect secrets in your source code repositories.
| | Signature | Detected in | |----:|-----------|-------------| | 1 | .asc file extensionPotential cryptographic key bundle | extension | | 2 | .p12 file extensionPKCS#12 (.p12): potential cryptographic key bundle | extension | | 3 | .pem file extensionPotential cryptographic private key | extension | | 4 | .pfx file extensionPKCS#12 (.pfx): Potential cryptographic key bundle | extension | | 5 | .pkcs12 file extensionPKCS#12 (.pkcs12): Potential cryptographic key bundle | extension | | 6 | 1Password password manager database fileFeed it to Hashcat and see if you're lucky | extension | | 7 | AWS API Key | contents | | 8 | AWS CLI credentials file | path | | 9 | Apache htpasswd file | filename | | 10 | Apple Keychain database file | extension | | 11 | Azure service configuration schema file | extension | | 12 | Carrierwave configuration fileCan contain credentials for cloud storage systems such as Amazon S3 and Google Storage | filename | | 13 | Chef Knife configuration fileCan contain references to Chef servers | filename | | 14 | Chef private keyCan be used to authenticate against Chef servers | path | | 15 | Configuration file for auto-login processCan contain username and password | filename | | 16 | Contains word: credential | path | | 17 | Contains word: password | path | | 18 | DBeaver SQL database manager configuration file | filename | | 19 | Day One journal fileNow it's getting creepy... | extension | | 20 | DigitalOcean doctl command-line client configuration fileContains DigitalOcean API key and other information | path | | 21 | Django configuration fileCan contain database credentials, cloud storage system credentials, and other secrets | filename | | 22 | Docker configuration fileCan contain credentials for public or private Docker registries | filename | | 23 | Environment configuration file | filename | | 24 | Facebook Oauth | contents | | 25 | FileZilla FTP configuration fileCan contain credentials for FTP servers | filename | | 26 | FileZilla FTP recent servers fileCan contain credentials for FTP servers | filename | | 27 | GNOME Keyring database file | extension | | 28 | Generic API Key | contents | | 29 | Generic Secret | contents | | 30 | Git configuration file | filename | | 31 | GitHub | contents | | 32 | GitHub Hub command-line client configuration fileCan contain GitHub API access token | path | | 33 | GnuCash database file | extension | | 34 | Google (GCP) Service-account | contents | | 35 | Google Oauth | contents | | 36 | Heroku API Key | contents | | 37 | Hexchat/XChat IRC client server list configuration file | path | | 38 | Irssi IRC client configuration file | path | | 39 | Java keystore file | extension | | 40 | Jenkins publish over SSH plugin file | filename | | 41 | KDE Wallet Manager database file | extension | | 42 | KeePass password manager database fileFeed it to Hashcat and see if you're lucky | extension | | 43 | Little Snitch firewall configuration fileContains traffic rules for applications | filename | | 44 | Log fileLog files can contain secret HTTP endpoints, session IDs, API keys and other goodies | extension | | 45 | Microsoft BitLocker Trusted Platform Module password file | extension | | 46 | Microsoft BitLocker recovery key file | extension | | 47 | Microsoft SQL database file | extension | | 48 | Microsoft SQL server compact database file | extension | | 49 | Mutt e-mail client configuration file | filename | | 50 | MySQL client command history file | filename | | 51 | NPM configuration fileCan contain credentials for NPM registries | filename | | 52 | Network traffic capture file | extension | | 53 | OmniAuth configuration fileThe OmniAuth configuration file can contain client application secrets | filename | | 54 | OpenVPN client configuration file | extension | | 55 | PGP private key block | contents | | 56 | PHP configuration file | filename | | 57 | Password Safe database file | extension | | 58 | Password in URL | contents | | 59 | Pidgin OTR private key | filename | | 60 | Pidgin chat client account configuration file | path | | 61 | PostgreSQL client command history file | filename | | 62 | PostgreSQL password file | filename | | 63 | Potential Jenkins credentials file | filename | | 64 | Potential Linux passwd fileContains system user information | path | | 65 | Potential Linux shadow fileContains hashed passwords for system users | path | | 66 | Potential MediaWiki configuration file | filename | | 67 | Potential Ruby On Rails database configuration fileCan contain database credentials | filename | | 68 | Potential cryptographic private key | extension | | 69 | Potential jrnl journal fileNow it's getting creepy... | filename | | 70 | Private SSH key_rsa | filename | | 71 | Private SSH key_dsa | filename | | 72 | Private SSH key_ed25519 | filename | | 73 | Private SSH key_ecdsa | filename | | 74 | RSA private key | contents | | 75 | Recon-ng web reconnaissance framework API key database | path | | 76 | Remote Desktop connection file | extension | | 77 | Robomongo MongoDB manager configuration fileCan contain credentials for MongoDB databases | filename | | 78 | Ruby IRB console history file | filename | | 79 | Ruby On Rails secret token configuration fileIf the Rails secret token is known, it can allow for remote code execution (http://www.exploit-db.com/exploits/27527/) | filename | | 80 | Rubygems credentials fileCan contain API key for a rubygems.org account | path | | 81 | S3cmd configuration file | filename | | 82 | SFTP connection configuration file | filename | | 83 | SQL dump file | extension | | 84 | SQLite database file | extension | | 85 | SSH (DSA) private key | contents | | 86 | SSH (EC) private key | contents | | 87 | SSH (OPENSSH) private key | contents | | 88 | SSH configuration file | path | | 89 | Sequel Pro MySQL database manager bookmark file | filename | | 90 | Shell command alias configuration fileShell configuration files can contain passwords, API keys, hostnames and other goodies | filename | | 91 | Shell command history file | filename | | 92 | Shell configuration file(.exports): Shell configuration files can contain passwords, API keys, hostnames and other goodies | filename | | 93 | Shell configuration file(.functions): Shell configuration files can contain passwords, API keys, hostnames and other goodies | filename | | 94 | Shell configuration file(.extra): Shell configuration files can contain passwords, API keys, hostnames and other goodies | filename | | 95 | Shell configuration file(bash, zsh, csh): Shell configuration files can contain passwords, API keys, hostnames and other goodies | filename | | 96 | Shell profile configuration file(profile): Shell configuration files can contain passwords, API keys, hostnames and other goodies | filename | | 97 | Slack Token | contents | | 98 | Slack Webhook | contents | | 99 | T command-line Twitter client configuration file | filename | | 100 | Terraform variable config fileCan contain credentials for terraform providers | filename | | 101 | Tugboat DigitalOcean management tool configuration | filename | | 102 | Tunnelblick VPN configuration file | extension | | 103 | Twilio API Key | contents | | 104 | Twitter Oauth | contents | | 105 | Ventrilo server configuration fileCan contain passwords | filename | | 106 | Windows BitLocker full volume encrypted data file | extension | | 107 | cPanel backup ProFTPd credentials fileContains usernames and password hashes for FTP accounts | filename | | 108 | git-credential-store helper credentials file | filename | | 109 | gitrob configuration file__ | filename |
2. Install
Before you begin, you'll need to have these
Programming languages:
Skills:
You'll need to know how to access the command line (aka, "Terminal") on your machine.
Open a Terminal and enter the following command:
# As a dependency in your Node.js app
npm i @data-leakage-protection/signatures --save-prod
3. Usage
Use @data-leakage-protection/signatures.signatures
to find file extensions, names, and paths
that commonly leak secrets.
const { signatures } = require('@data-leakage-protection/signatures')
// ⚠️ Note: the 'recursive-readdir' module is not bundled with
// @data-leakage-protection/signatures. 'recursive-readdir' is referenced
// only as an example.
const recursiveReaddir = require('recursive-readdir')
const potentialLeaks = recursiveReaddir('/path/to/local/repo')
.then(files => files
.map(file => signatures
.map(signature => signature.match(file)))
)
.catch(err => err)
4. API
The @data-leakage-protection/signatures module provides a
Signatures
class, which validates @data-leakage-protection/signatures and
converts regular expression strings to RE2 (whenever possible).
The @data-leakage-protection/signatures module's public API provides:
factory
method: a convenience function that creates a signature object.nullSignature
: implements a default object literal with all signatures properties set tonull
.Signature
: a class that constructs a signature object.signatures
: an array ofSignature
instances.toArray(data: {String|Array.<Object>})
: generates anArray.<Signature>
from a JSON string or object literal array.validParts
: a constants enum of validSignature.prototype.part
values.validTypes
: a constants enum of validSignature.prototype.type
values.
4.1. @data-leakage-protection/signatures.Signature
A class that constructs Signature objects.
const { Signature, validParts, validTypes } = require('@data-leakage-protection/signatures')
const signature = new Signature({
caption: 'Potential cryptographic private key',
description: '',
part: validParts.EXTENSION,
pattern: '.pem',
type: validTypes.MATCH
})
4.2. @data-leakage-protection/signatures.Signature.prototype.match
Discover possible data leaks by match
ing a Signature pattern
against file extensions, names, and paths.
const rsaTokenSignature = new Signature({
'caption': 'Private SSH key',
'description': '',
'part': 'filename',
'pattern': '^.*_rsa$',
'type': 'regex'
})
const suspiciousFilePath = '/hmm/what/might/this/be/id_rsa'
rsaTokenSignature.match(suspiciousFilePath)
// => ['/hmm/what/might/this/be/id_rsa']
const fileThatIsJustBeingCoolBruh = 'file/that/is/just/being/cool/bruh'
rsaTokenSignature.match(suspiciousFilePath)
// => null
Review the source code for signature
.
5. Accessing signatures with other tools and programming languages
You can access signatures.json
without the @data-leakage-protection/signatures
Node module. Select a tool or programming language below to view examples.
You can access data-loss rules using HTTPS. You can GET all signatures directly from Gitlab with cURL.
curl -X GET \
'https://gitlab.com/data-leakage-protection/signatures/raw/master/signatures.json'
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://gitlab.com/data-leakage-protection/signatures/raw/master/signatures.json"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Private-Token", "<your-personal-token>")
req.Header.Add("cache-control", "no-cache")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
OkHttpClient client = new OkHttpClient();
String signaturesJson = "https://gitlab.com/data-leakage-protection/signatures/raw/master/signatures.json";
Request request = new Request.Builder()
.url(signaturesJson)
.get()
.addHeader("Accept", "*/*")
.addHeader("Cache-Control", "no-cache")
.addHeader("Host", "gitlab.com")
.addHeader("accept-encoding", "gzip, deflate")
.addHeader("Connection", "keep-alive")
.addHeader("cache-control", "no-cache")
.build();
Response response = client.newCall(request).execute();
const http = require('https')
const options = {
method: 'GET',
hostname: ['gitlab', 'com'],
path: ['api', 'v4', 'projects'],
headers: {
'Private-Token': '<your-access-token>',
'cache-control': 'no-cache'
}
}
const req = http.request(options, res => {
const chunks = []
res.on('data', chunk => {
chunks.push(chunk)
})
res.on('end', () => {
var body = Buffer.concat(chunks)
console.log(body.toString())
})
})
req.end()
Python3
import http.client
conn = http.client.HTTPConnection("gitlab,com")
payload = ""
headers = {
'Accept': "application/json",
'cache-control': "no-cache"
}
conn.request("GET", "data-leakage-protection/signatures,raw,master,signatures.json", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
Python2
import requests
url = "https://gitlab.com/data-leakage-protection/signatures/raw/master/signatures.json"
payload = ""
headers = {
'Accept': "application/json",
'cache-control': "no-cache"
}
response = requests.request("GET", url, data=payload, headers=headers)
print(response.text)
require 'uri'
require 'net/http'
url = URI("'https://gitlab.com/data-leakage-protection/signatures/raw/master/signatures.json")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Get.new(url)
request["Private-Token"] = '<your-personal-token>'
request["cache-control"] = 'no-cache'
response = http.request(request)
puts response.read_body
6. Maintainers
The Maintainer Guide has useful information for Maintainers and Trusted Committers.
7. Contributions
We gratefully accept Merge Requests! Here's what you need to know to get started.
Before submitting a Merge Request, please read our:
Thanks goes to our awesome contributors (emoji key):
This project follows the all-contributors specification. Contributions of any kind welcome!
7.1. Adding a Signature
Before adding a new Signature, please review all current definitions: the Signature might already exist.
If the Signature does not exist, please be sure to add your Signature with the following properties:
caption
: A succinct summary for the Signature. Think of caption as a well-written email subject.description
: Provide more details about the Signature if necessary. description is especially useful for differentiating similar Signatures.hash
: A hexidecimal SHA256 representation of a Signature (with ordered properties).name
: The Signature'scaption
, converted to kebab-case.part
: An enumeration that defines what the Signature is evaluating. Valid values are:contents
: The string(s) within a file.extension
: A file extension (which defines the Content-Type or mime-type).filename
: The unique name of the file.path
: The directory path relative to the repo and without the filename.
pattern
: The string or regular expression to look for.type
: An enumeration that defines how to evaluate for secrets. Valid values are:match
: A strict string equivalency evaluation.regex
: A regular expression "search" or "test".
7.2. Editing a Signature
Edits are welcome! Just be sure to unit test.
7.3. Removing a Signature
Please provide a testable justification for any Signature removal.
8. License
© 2019 Greg Swindle.
9. References and Attributions
[^1]: What is Data Leakage? Defined, Explained, and Explored | Forcepoint. (2019) Retrieved January 27, 2019, from https://www.forcepoint.com/cyber-edu/data-leakage