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.