If you accidentally leak your AWS keys on GitHub, it won’t be long before attackers scrape this information and hijack your account for nefarious purposes.
KeyNuker scans public activity across all Github users in your Github organization(s) and proactively deletes any AWS keys that are accidentally leaked. It gets the list of AWS keys to scan by directly connecting to the AWS API.
KeyNuker is packaged as a series of Apache OpenWhisk actions, and can run anywhere that OpenWhisk can run.
Get the code:
$ go get -u -v -t github.com/tleyden/keynuker
Follow the steps in the Installation Instructions to setup OpenWhisk and set the required environment variables, and then run the installation script.
$ cd $GOPATH/src/github.com/tleyden/keynuker/
$ python install.py
After the installation script completes, you will have several OpenWhisk actions:
$ wsk action list
/yourusername_dev/github-user-events-scanner-nuker private sequence
/yourusername_dev/fetch-aws-keys-write-doc private sequence
etc ...
Never has access to AWS Secret Access Keys, only to AWS Access Key IDs.
Noise-free because it scans actual AWS keys rather than taking a pattern matching approach that produces false positives
Takes actions rather than sending alerts, since depending on people to respond to alerts might introduce a costly delay in reaction time
Covers all public github activity of users in your github org(s), since they might leak AWS keys on their personal repos or even 3rd party repos
Requires minimal IAM Permissions: iam:DeleteAccessKey
, iam:ListAccessKeys
, iam:ListUsers
Ultra-low baseline running cost due to serverless architecture
Lowest common denominator and requires zero effort or workflow change for users
Low-latency round trip between AWS keys leaking and being nuked. Currently uses polling approach, but the goal is to layer a webhook approach on top in order to lower the latency.
Scale up to monitoring hundreds of AWS accounts and thousands of github organizations/repos/users.
Cove as much of the Github API surface area as possible (gists, issue comments, etc)
Pluggable architecture so that other cloud key providers (Google Cloud Platform, Azure, etc) and other leak sources (BitBucket, Jira, etc) can be added later.
The basic end-to-end functionality is working, except for notifications, but there are still a lot of places where AWS keys can leak to Github and go undetected:
Github Gists
Other Github API surface area that isn’t covered yet
Doc | Link |
---|---|
README (this document) |
|
Installation guide |
|
Post-installation verification |
|
Developer guide |
|
AWS Security Resources |
Git Secrets — Prevents you from committing secrets and credentials into git repositories
Git Hound — Git plugin that helps prevent sensitive data from being committed into a repository by sniffing potential commits against PCRE regular expressions.
GitRob — Reconnaissance tool for GitHub organizations
pre-commit - A pre-commit framework, that includes the detect-aws-credentials plugin
TruffleHog — A tool that Searches Entire Commit History in Git Repositories for High Entropy Strings to Find Secrets Accidentally Committed to Version Control
BFG Repo cleaner - Removes large or troublesome blobs like git-filter-branch does
Git Guardian — Scanning service that alerts you of text strings that appear to be API keys (Github and more)
CloudSploit — Cloud security monitoring service / open source software which has a feature request very reminiscent of KeyNuker.
Taking a security-at-depth approach, in addition to running KeyNuker you should also consider the following precautions:
Limit ec2 actions to only the regions that you use, eg ("StringEquals": {"ec2:Region": "us-east-1"}
)
Limit ec2 actions to only the instance types that you use, eg ("StringLikeIfExists": {"ec2:InstanceType": ["t1.*"]}
)
Use temporary AWS keys that require MFA
Minimize chance of AWS keys from ever leaking in the first place using tools such as Git Secrets which can be configured as a pre-commit hook.