├── .gitignore ├── LICENSE ├── README.md ├── bucket-stream.py ├── config.yaml ├── keywords.txt ├── permutations ├── default.txt └── extended.txt └── requirements.txt /.gitignore: -------------------------------------------------------------------------------- 1 | __pycache__ 2 | .idea 3 | buckets.log 4 | .virtualenv 5 | .DS_Store 6 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 🚨 Bucket Stream is no longer maintained. If you need support or consultation for your red teaming endeavours, drop me an e-mail paul@darkport.co.uk 🚨 2 | 3 | # Bucket Stream 4 | 5 | **Find interesting Amazon S3 Buckets by watching certificate transparency logs.** 6 | 7 | This tool simply listens to various certificate transparency logs (via certstream) and attempts to find public S3 buckets from permutations of the certificates domain name. 8 | 9 | ![Demo](https://i.imgur.com/ZFkIYhD.jpg) 10 | 11 | **Be responsible**. I mainly created this tool to highlight the risks associated with public S3 buckets and to put a different spin on the usual dictionary based attacks. Some quick tips if you use S3 buckets: 12 | 13 | 1) Randomise your bucket names! There is no need to use `company-backup.s3.amazonaws.com`. 14 | 2) Set appropriate permissions and audit regularly. If possible create two buckets - one for your public assets and another for private data. 15 | 3) Be mindful about **your data**. What are suppliers, contractors and third parties doing with it? Where and how is it stored? These basic questions should be addressed in every info sec policy. 16 | 4) Try [Amazon Macie](https://aws.amazon.com/macie/) - it can automatically classify and secure sensitive data. 17 | 18 | Thanks to my good friend David (@riskobscurity) for the idea. 19 | 20 | ## Installation 21 | 22 | Python 3.4+ and pip3 are required. Then just: 23 | 24 | 1. `git clone https://github.com/eth0izzle/bucket-stream.git` 25 | 2. *(optional)* Create a virtualenv with `pip3 install virtualenv && virtualenv .virtualenv && source .virtualenv/bin/activate` 26 | 2. `pip3 install -r requirements.txt` 27 | 3. `python3 bucket-stream.py` 28 | 29 | ## Usage 30 | 31 | Simply run `python3 bucket-stream.py`. 32 | 33 | If you provide AWS access and secret keys in `config.yaml` Bucket Stream will attempt to access authenticated buckets and identity the buckets owner. **Unauthenticated users are severely rate limited.** 34 | 35 | usage: python bucket-stream.py 36 | 37 | Find interesting Amazon S3 Buckets by watching certificate transparency logs. 38 | 39 | optional arguments: 40 | -h, --help Show this help message and exit 41 | --only-interesting Only log 'interesting' buckets whose contents match 42 | anything within keywords.txt (default: False) 43 | --skip-lets-encrypt Skip certs (and thus listed domains) issued by Let's 44 | Encrypt CA (default: False) 45 | -t , --threads Number of threads to spawn. More threads = more power. 46 | Limited to 5 threads if unauthenticated. 47 | (default: 20) 48 | --ignore-rate-limiting 49 | If you ignore rate limits not all buckets will be 50 | checked (default: False) 51 | -l, --log Log found buckets to a file buckets.log (default: 52 | False) 53 | -s, --source Data source to check for bucket permutations. Uses 54 | certificate transparency logs if not specified. 55 | (default: None) 56 | -p, --permutations Path of file containing a list of permutations to try 57 | (see permutations/ dir). (default: permutations\default.txt) 58 | 59 | ## F.A.Qs 60 | 61 | - **Nothing appears to be happening** 62 | 63 | Patience! Sometimes certificate transparency logs can be quiet for a few minutes. Ideally provide AWS secrets in `config.yaml` as this greatly speeds up the checking rate. 64 | 65 | - **I found something highly confidential** 66 | 67 | **Report it** - please! You can usually figure out the owner from the bucket name or by doing some quick reconnaissance. Failing that contact Amazon's support teams. 68 | 69 | ## Contributing 70 | 71 | 1. Fork it, baby! 72 | 2. Create your feature branch: `git checkout -b my-new-feature` 73 | 3. Commit your changes: `git commit -am 'Add some feature'` 74 | 4. Push to the branch: `git push origin my-new-feature` 75 | 5. Submit a pull request. 76 | 77 | ## License 78 | 79 | MIT. See LICENSE 80 | -------------------------------------------------------------------------------- /bucket-stream.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | 4 | import sys 5 | PY2 = sys.version_info[0] == 2 6 | PY3 = (sys.version_info[0] >= 3) 7 | 8 | #import queue 9 | if PY2: 10 | import Queue as queue 11 | else: # PY3 12 | import queue 13 | 14 | import argparse 15 | import logging 16 | import os 17 | import signal 18 | import time 19 | import json 20 | from threading import Lock 21 | from threading import Event 22 | from threading import Thread 23 | 24 | import requests 25 | import tldextract 26 | import yaml 27 | from boto3.session import Session 28 | from certstream.core import CertStreamClient 29 | from requests.adapters import HTTPAdapter 30 | from termcolor import cprint 31 | 32 | ARGS = argparse.Namespace() 33 | CONFIG = yaml.safe_load(open("config.yaml")) 34 | KEYWORDS = [line.strip() for line in open("keywords.txt")] 35 | S3_URL = "http://s3-1-w.amazonaws.com" 36 | BUCKET_HOST = "%s.s3.amazonaws.com" 37 | QUEUE_SIZE = CONFIG['queue_size'] 38 | UPDATE_INTERVAL = CONFIG['update_interval'] # seconds 39 | RATE_LIMIT_SLEEP = CONFIG['rate_limit_sleep'] # seconds 40 | THREADS = list() 41 | THREAD_EVENT = Event() 42 | FOUND_COUNT = 0 43 | 44 | 45 | class UpdateThread(Thread): 46 | def __init__(self, q, *args, **kwargs): 47 | self.q = q 48 | self.checked_buckets_since_last_update = 0 49 | 50 | super().__init__(*args, **kwargs) 51 | 52 | def run(self): 53 | global THREAD_EVENT 54 | 55 | while not THREAD_EVENT.is_set(): 56 | checked_buckets = len(self.q.checked_buckets) 57 | 58 | if checked_buckets > 1: 59 | cprint("{0} buckets checked ({1:.0f}b/s), {2} buckets found".format( 60 | checked_buckets, 61 | (checked_buckets - self.checked_buckets_since_last_update) / UPDATE_INTERVAL, 62 | FOUND_COUNT), "cyan") 63 | 64 | self.checked_buckets_since_last_update = checked_buckets 65 | THREAD_EVENT.wait(UPDATE_INTERVAL) 66 | 67 | 68 | class CertStreamThread(Thread): 69 | def __init__(self, q, *args, **kwargs): 70 | self.q = q 71 | self.c = CertStreamClient( 72 | self.process, skip_heartbeats=True, on_open=None, on_error=None) 73 | 74 | super().__init__(*args, **kwargs) 75 | 76 | def run(self): 77 | global THREAD_EVENT 78 | while not THREAD_EVENT.is_set(): 79 | cprint("Waiting for Certstream events - this could take a few minutes to queue up...", 80 | "yellow", attrs=["bold"]) 81 | self.c.run_forever() 82 | THREAD_EVENT.wait(10) 83 | 84 | def process(self, message, context): 85 | if message["message_type"] == "heartbeat": 86 | return 87 | 88 | if message["message_type"] == "certificate_update": 89 | all_domains = message["data"]["leaf_cert"]["all_domains"] 90 | 91 | if ARGS.skip_lets_encrypt and "Let's Encrypt" in message["data"]["chain"][0]["subject"]["aggregated"]: 92 | return 93 | 94 | for domain in set(all_domains): 95 | # cut the crap 96 | if not domain.startswith("*.")\ 97 | and "cloudflaressl" not in domain\ 98 | and "xn--" not in domain\ 99 | and domain.count("-") < 4\ 100 | and domain.count(".") < 4: 101 | 102 | parts = tldextract.extract(domain) 103 | for permutation in get_permutations(parts.domain, parts.subdomain): 104 | self.q.put(BUCKET_HOST % permutation) 105 | 106 | 107 | class BucketQueue(queue.Queue): 108 | def __init__(self, maxsize): 109 | self.lock = Lock() 110 | self.checked_buckets = list() 111 | self.rate_limited = False 112 | self.next_yield = 0 113 | 114 | super().__init__(maxsize) 115 | 116 | def put(self, bucket_url): 117 | if bucket_url not in self.checked_buckets: 118 | self.checked_buckets.append(bucket_url) 119 | super().put(bucket_url) 120 | 121 | def get(self): 122 | global THREAD_EVENT 123 | with self.lock: 124 | t = time.monotonic() 125 | if self.rate_limited and t < self.next_yield: 126 | cprint("You have hit the AWS rate limit - slowing down... (tip: enter credentials in config.yaml)", "yellow") 127 | THREAD_EVENT.wait(self.next_yield - t) 128 | t = time.monotonic() 129 | self.rate_limited = False 130 | 131 | self.next_yield = t + RATE_LIMIT_SLEEP 132 | 133 | return super().get() 134 | 135 | 136 | class BucketWorker(Thread): 137 | def __init__(self, q, *args, **kwargs): 138 | self.q = q 139 | self.use_aws = CONFIG["aws_access_key"] and CONFIG["aws_secret"] 140 | 141 | if self.use_aws: 142 | self.session = Session( 143 | aws_access_key_id=CONFIG["aws_access_key"], aws_secret_access_key=CONFIG["aws_secret"]).resource("s3") 144 | else: 145 | self.session = requests.Session() 146 | self.session.mount( 147 | "http://", HTTPAdapter(pool_connections=ARGS.threads, pool_maxsize=QUEUE_SIZE, max_retries=0)) 148 | 149 | super().__init__(*args, **kwargs) 150 | 151 | def run(self): 152 | global THREAD_EVENT 153 | while not THREAD_EVENT.is_set(): 154 | try: 155 | bucket_url = self.q.get() 156 | self.__check_boto( 157 | bucket_url) if self.use_aws else self.__check_http(bucket_url) 158 | except Exception as e: 159 | print(e) 160 | pass 161 | finally: 162 | self.q.task_done() 163 | 164 | def __check_http(self, bucket_url): 165 | check_response = self.session.head( 166 | S3_URL, timeout=3, headers={"Host": bucket_url}) 167 | 168 | if not ARGS.ignore_rate_limiting\ 169 | and (check_response.status_code == 503 and check_response.reason == "Slow Down"): 170 | self.q.rate_limited = True 171 | # add it back to the queue for re-processing 172 | self.q.put(bucket_url) 173 | elif check_response.status_code == 307: # valid bucket, lets check if its public 174 | new_bucket_url = check_response.headers["Location"] 175 | bucket_response = requests.request( 176 | "GET" if ARGS.only_interesting else "HEAD", new_bucket_url, timeout=3) 177 | 178 | if bucket_response.status_code == 200\ 179 | and (not ARGS.only_interesting or 180 | (ARGS.only_interesting and any(keyword in bucket_response.text for keyword in KEYWORDS))): 181 | self.__output("Found bucket '{}'".format(new_bucket_url), "green") 182 | self.__log(new_bucket_url) 183 | 184 | def __check_boto(self, bucket_url): 185 | bucket_name = bucket_url.replace(".s3.amazonaws.com", "") 186 | 187 | try: 188 | # just to check if the bucket exists. Throws NoSuchBucket exception if not 189 | self.session.meta.client.head_bucket(Bucket=bucket_name) 190 | 191 | if not ARGS.only_interesting or\ 192 | (ARGS.only_interesting and self.__bucket_contains_any_keywords(bucket_name)): 193 | owner = None 194 | acls = None 195 | 196 | try: 197 | # todo: also check IAM policy as it can override ACLs 198 | acl = self.session.meta.client.get_bucket_acl(Bucket=bucket_name) 199 | owner = acl["Owner"]["DisplayName"] 200 | acls = ". ACLs = {} | {}".format(self.__get_group_acls(acl, "AllUsers"), 201 | self.__get_group_acls(acl, "AuthenticatedUsers")) 202 | except: 203 | acls = ". ACLS = (could not read)" 204 | 205 | color = "green" if not owner else "magenta" 206 | self.__output("Found bucket '{}'. Owned by '{}'{}".format( 207 | bucket_url, owner if owner else "(unknown)", acls), color) 208 | self.__log(bucket_url) 209 | except Exception as e: 210 | pass 211 | 212 | def __get_group_acls(self, acl, group): 213 | group_uri = "http://acs.amazonaws.com/groups/global/%s" % group 214 | perms = [g["Permission"] for g in acl["Grants"] 215 | if g["Grantee"]["Type"] == "Group" and g["Grantee"]["URI"] == group_uri] 216 | 217 | return "{}: {}".format(group, ", ".join(perms) if perms else "(none)") 218 | 219 | def __bucket_contains_any_keywords(self, bucket_name): 220 | try: 221 | objects = [o.key for o in self.session.Bucket(bucket_name).objects.all()] 222 | return any(keyword in ",".join(objects) for keyword in KEYWORDS) 223 | except: 224 | return False 225 | 226 | def __log(self, new_bucket_url): 227 | global FOUND_COUNT 228 | FOUND_COUNT += 1 229 | 230 | if ARGS.log_to_file: 231 | with open("buckets.log", "a+") as log: 232 | log.write("%s%s" % (new_bucket_url, os.linesep)) 233 | 234 | def __output(self, line, color=None): 235 | cprint(line, color, attrs=["bold"]) 236 | 237 | if CONFIG["slack_webhook"]: 238 | resp = requests.post(CONFIG['slack_webhook'], data=json.dumps({'text': line}), headers={'Content-Type': 'application/json'}) 239 | if resp.status_code != 200: 240 | cprint("Could not send to your Slack Webhook. Server returned: %s" % resp.status_code, "red") 241 | 242 | def get_permutations(domain, subdomain=None): 243 | perms = [ 244 | "%s" % domain, 245 | "www-%s" % domain, 246 | "%s-www" % domain, 247 | ] 248 | 249 | perms.extend([line.strip() % domain for line in open(ARGS.permutations)]) 250 | 251 | if subdomain is not None: 252 | perms.extend([ 253 | "%s-%s" % (subdomain, domain) if subdomain else "", 254 | "%s-%s" % (domain, subdomain) if subdomain else "" 255 | ]) 256 | 257 | return filter(None, perms) 258 | 259 | 260 | def stop(): 261 | global THREAD_EVENT 262 | cprint("Kill commanded received - Quitting...", "yellow", attrs=["bold"]) 263 | THREAD_EVENT.set() 264 | sys.exit(0) 265 | 266 | 267 | def __signal_handler(signal, frame): 268 | stop() 269 | 270 | 271 | def main(): 272 | global THREADS 273 | 274 | signal.signal(signal.SIGINT, __signal_handler) 275 | 276 | parser = argparse.ArgumentParser(description="Find interesting Amazon S3 Buckets by watching certificate transparency logs.", 277 | usage="python bucket-stream.py", 278 | formatter_class=argparse.ArgumentDefaultsHelpFormatter) 279 | parser.add_argument("--only-interesting", action="store_true", dest="only_interesting", default=False, 280 | help="Only log 'interesting' buckets whose contents match anything within keywords.txt") 281 | parser.add_argument("--skip-lets-encrypt", action="store_true", dest="skip_lets_encrypt", default=False, 282 | help="Skip certs (and thus listed domains) issued by Let's Encrypt CA") 283 | parser.add_argument("-t", "--threads", metavar="", type=int, dest="threads", default=20, 284 | help="Number of threads to spawn. More threads = more power. Limited to 5 threads if unauthenticated.") 285 | parser.add_argument("--ignore-rate-limiting", action="store_true", dest="ignore_rate_limiting", default=False, 286 | help="If you ignore rate limits not all buckets will be checked") 287 | parser.add_argument("-l", "--log", dest="log_to_file", default=False, action="store_true", 288 | help="Log found buckets to a file buckets.log") 289 | parser.add_argument("-s", "--source", dest="source", default=None, 290 | help="Data source to check for bucket permutations. Uses certificate transparency logs if not specified.") 291 | parser.add_argument("-p", "--permutations", dest="permutations", default="permutations/default.txt", 292 | help="Path of file containing a list of permutations to try (see permutations/ dir).") 293 | 294 | parser.parse_args(namespace=ARGS) 295 | logging.disable(logging.WARNING) 296 | 297 | if not CONFIG["aws_access_key"] or not CONFIG["aws_secret"]: 298 | cprint("It is highly recommended to enter AWS keys in config.yaml otherwise you will be severely rate limited!"\ 299 | "You might want to run with --ignore-rate-limiting", "red") 300 | 301 | if ARGS.threads > 5: 302 | cprint("No AWS keys, reducing threads to 5 to help with rate limiting.", "red") 303 | ARGS.threads = 5 304 | 305 | THREADS = list() 306 | 307 | cprint("Starting bucket-stream with {0} threads. Loaded {1} permutations."\ 308 | .format(ARGS.threads, len([x for x in get_permutations("")])), "green") 309 | 310 | q = BucketQueue(maxsize=QUEUE_SIZE) 311 | THREADS.extend([BucketWorker(q) for _ in range(0, ARGS.threads)]) 312 | THREADS.extend([UpdateThread(q)]) 313 | 314 | if ARGS.source is None: 315 | THREADS.extend([CertStreamThread(q)]) 316 | else: 317 | for line in open(ARGS.source): 318 | for permutation in get_permutations(line.strip()): 319 | q.put(BUCKET_HOST % permutation) 320 | 321 | for t in THREADS: 322 | t.daemon = True 323 | t.start() 324 | 325 | while True: 326 | try: 327 | signal.pause() 328 | except AttributeError: 329 | # signal.pause() not implemented on windows 330 | while not THREAD_EVENT.is_set(): 331 | time.sleep(1) 332 | 333 | stop() 334 | 335 | if __name__ == "__main__": 336 | main() 337 | -------------------------------------------------------------------------------- /config.yaml: -------------------------------------------------------------------------------- 1 | aws_access_key: '' 2 | aws_secret: '' 3 | queue_size: 100 4 | update_interval: 30 5 | rate_limit_sleep: 10 6 | slack_webhook: '' 7 | -------------------------------------------------------------------------------- /keywords.txt: -------------------------------------------------------------------------------- 1 | password 2 | wp-config 3 | backup 4 | confidential 5 | .apk 6 | .sql 7 | .psql 8 | .zip 9 | .tar 10 | .bak 11 | .xls 12 | .csv 13 | .log 14 | .inc.php 15 | .ova 16 | .vmdk -------------------------------------------------------------------------------- /permutations/default.txt: -------------------------------------------------------------------------------- 1 | %s-backup 2 | backup-%s 3 | %s-dev 4 | dev-%s 5 | %s-staging 6 | staging-%s 7 | %s-test 8 | test-%s 9 | %s-prod 10 | prod-%s 11 | %s-uat 12 | -------------------------------------------------------------------------------- /permutations/extended.txt: -------------------------------------------------------------------------------- 1 | %s1 2 | %s2 3 | %s3 4 | %s01 5 | %s02 6 | %s03 7 | %s001 8 | %s002 9 | %s003 10 | %sadmin 11 | %s.admin 12 | %s-admin 13 | %s_admin 14 | admin%s 15 | admin-%s 16 | admin_%s 17 | %sadministrator 18 | %s.administrator 19 | %s-administrator 20 | %s_administrator 21 | administrator%s 22 | administrator-%s 23 | administrator_%s 24 | %salpha 25 | %s.alpha 26 | %s-alpha 27 | %s_alpha 28 | alpha%s 29 | alpha-%s 30 | alpha_%s 31 | %sassets 32 | %s.assets 33 | %s-assets 34 | %s_assets 35 | assets%s 36 | assets-%s 37 | assets_%s 38 | %saws 39 | %s.aws 40 | %s-aws 41 | %s_aws 42 | aws%s 43 | aws-%s 44 | aws_%s 45 | %sbackup 46 | %s.backup 47 | %s-backup 48 | %s_backup 49 | backup%s 50 | backup-%s 51 | backup_%s 52 | %sbeta 53 | %s.beta 54 | %s-beta 55 | %s_beta 56 | beta%s 57 | beta-%s 58 | beta_%s 59 | %sbucket 60 | %s.bucket 61 | %s-bucket 62 | %s_bucket 63 | bucket%s 64 | bucket-%s 65 | bucket_%s 66 | %scache 67 | %s.cache 68 | %s-cache 69 | %s_cache 70 | cache%s 71 | cache-%s 72 | cache_%s 73 | %scommon 74 | %s.common 75 | %s-common 76 | %s_common 77 | common%s 78 | common-%s 79 | common_%s 80 | %scorp 81 | %s.corp 82 | %s-corp 83 | %s_corp 84 | corp%s 85 | corp-%s 86 | corp_%s 87 | %sdata 88 | %s.data 89 | %s-data 90 | %s_data 91 | data%s 92 | data-%s 93 | data_%s 94 | %sdev 95 | %s.dev 96 | %s-dev 97 | %s_dev 98 | dev%s 99 | dev-%s 100 | dev_%s 101 | %sfiles 102 | %s.files 103 | %s-files 104 | %s_files 105 | files%s 106 | files-%s 107 | files_%s 108 | %sgit 109 | %s.git 110 | %s-git 111 | %s_git 112 | git%s 113 | git-%s 114 | git_%s 115 | %slogs 116 | %s.logs 117 | %s-logs 118 | %s_logs 119 | logs%s 120 | logs-%s 121 | logs_%s 122 | %smedia 123 | %s.media 124 | %s-media 125 | %s_media 126 | media%s 127 | media-%s 128 | media_%s 129 | %sprod 130 | %s.prod 131 | %s-prod 132 | %s_prod 133 | prod%s 134 | prod-%s 135 | prod_%s 136 | %sproduction 137 | %s.production 138 | %s-production 139 | %s_production 140 | production%s 141 | production-%s 142 | production_%s 143 | %sprojects 144 | %s.projects 145 | %s-projects 146 | %s_projects 147 | projects%s 148 | projects-%s 149 | projects_%s 150 | %spublic 151 | %s.public 152 | %s-public 153 | %s_public 154 | public%s 155 | public-%s 156 | public_%s 157 | %sresources 158 | %s.resources 159 | %s-resources 160 | %s_resources 161 | resources%s 162 | resources-%s 163 | resources_%s 164 | %ss3 165 | %s.s3 166 | %s-s3 167 | %s_s3 168 | s3%s 169 | s3-%s 170 | s3_%s 171 | %sscreenshots 172 | %s.screenshots 173 | %s-screenshots 174 | %s_screenshots 175 | screenshots%s 176 | screenshots-%s 177 | screenshots_%s 178 | %sstage 179 | %s.stage 180 | %s-stage 181 | %s_stage 182 | stage%s 183 | stage-%s 184 | stage_%s 185 | %sstaging 186 | %s.staging 187 | %s-staging 188 | %s_staging 189 | staging%s 190 | staging-%s 191 | staging_%s 192 | %sstatic 193 | %s.static 194 | %s-static 195 | %s_static 196 | static%s 197 | static-%s 198 | static_%s 199 | %sstorage 200 | %s.storage 201 | %s-storage 202 | %s_storage 203 | storage%s 204 | storage-%s 205 | storage_%s 206 | %ssupport 207 | %s.support 208 | %s-support 209 | %s_support 210 | support%s 211 | support-%s 212 | support_%s 213 | %stemp 214 | %s.temp 215 | %s-temp 216 | %s_temp 217 | temp%s 218 | temp-%s 219 | temp_%s 220 | %stest 221 | %s.test 222 | %s-test 223 | %s_test 224 | test%s 225 | test-%s 226 | test_%s 227 | %stmp 228 | %s.tmp 229 | %s-tmp 230 | %s_tmp 231 | tmp%s 232 | tmp-%s 233 | tmp_%s 234 | %suploads 235 | %s.uploads 236 | %s-uploads 237 | %s_uploads 238 | uploads%s 239 | uploads-%s 240 | uploads_%s 241 | %susers 242 | %s.users 243 | %s-users 244 | %s_users 245 | users%s 246 | users-%s 247 | users_%s 248 | %svideos 249 | %s.videos 250 | %s-videos 251 | %s_videos 252 | videos%s 253 | videos-%s 254 | videos_%s 255 | %swww 256 | %s.www 257 | %s_www 258 | www%s 259 | www_%s 260 | %sapp 261 | %s.app 262 | %s-app 263 | %s_app 264 | app%s 265 | app-%s 266 | app_%s 267 | %sblog 268 | %s.blog 269 | %s-blog 270 | %s_blog 271 | blog%s 272 | blog-%s 273 | blog_%s 274 | %scorporate 275 | %s.corporate 276 | %s-corporate 277 | %s_corporate 278 | corporate%s 279 | corporate-%s 280 | corporate_%s 281 | %sdevops 282 | %s.devops 283 | %s-devops 284 | %s_devops 285 | devops%s 286 | devops-%s 287 | devops_%s 288 | %sdownloads 289 | %s.downloads 290 | %s-downloads 291 | %s_downloads 292 | downloads%s 293 | downloads-%s 294 | downloads_%s 295 | %sec2 296 | %s.ec2 297 | %s-ec2 298 | %s_ec2 299 | ec2%s 300 | ec2-%s 301 | ec2_%s 302 | %sevents 303 | %s.events 304 | %s-events 305 | %s_events 306 | events%s 307 | events-%s 308 | events_%s 309 | %shelp 310 | %s.help 311 | %s-help 312 | %s_help 313 | help%s 314 | help-%s 315 | help_%s 316 | %simages 317 | %s.images 318 | %s-images 319 | %s_images 320 | images%s 321 | images-%s 322 | images_%s 323 | %simg 324 | %s.img 325 | %s-img 326 | %s_img 327 | img%s 328 | img-%s 329 | img_%s 330 | %sphotos 331 | %s.photos 332 | %s-photos 333 | %s_photos 334 | photos%s 335 | photos-%s 336 | photos_%s 337 | %spics 338 | %s.pics 339 | %s-pics 340 | %s_pics 341 | pics%s 342 | pics-%s 343 | pics_%s 344 | %spictures 345 | %s.pictures 346 | %s-pictures 347 | %s_pictures 348 | pictures%s 349 | pictures-%s 350 | pictures_%s 351 | %sreports 352 | %s.reports 353 | %s-reports 354 | %s_reports 355 | reports%s 356 | reports-%s 357 | reports_%s 358 | %sshare 359 | %s.share 360 | %s-share 361 | %s_share 362 | share%s 363 | share-%s 364 | share_%s 365 | %sshop 366 | %s.shop 367 | %s-shop 368 | %s_shop 369 | shop%s 370 | shop-%s 371 | shop_%s 372 | %sslack 373 | %s.slack 374 | %s-slack 375 | %s_slack 376 | slack%s 377 | slack-%s 378 | slack_%s 379 | %sstore 380 | %s.store 381 | %s-store 382 | %s_store 383 | store%s 384 | store-%s 385 | store_%s 386 | %sweb 387 | %s.web 388 | %s-web 389 | %s_web 390 | web%s 391 | web-%s 392 | web_%s 393 | %swebsite 394 | %s.website 395 | %s-website 396 | %s_website 397 | website%s 398 | website-%s 399 | website_%s 400 | %sandroid 401 | %s.android 402 | %s-android 403 | %s_android 404 | android%s 405 | android-%s 406 | android_%s 407 | %sartifacts 408 | %s.artifacts 409 | %s-artifacts 410 | %s_artifacts 411 | artifacts%s 412 | artifacts-%s 413 | artifacts_%s 414 | %saudit 415 | %s.audit 416 | %s-audit 417 | %s_audit 418 | audit%s 419 | audit-%s 420 | audit_%s 421 | %saudit-logs 422 | %s.audit-logs 423 | %s-audit-logs 424 | %s_audit-logs 425 | audit-logs%s 426 | audit-logs-%s 427 | audit-logs_%s 428 | %sawslogs 429 | %s.awslogs 430 | %s-awslogs 431 | %s_awslogs 432 | awslogs%s 433 | awslogs-%s 434 | awslogs_%s 435 | %saws-logs 436 | %s.aws-logs 437 | %s-aws-logs 438 | %s_aws-logs 439 | aws-logs%s 440 | aws-logs-%s 441 | aws-logs_%s 442 | %sbackups 443 | %s.backups 444 | %s-backups 445 | %s_backups 446 | backups%s 447 | backups-%s 448 | backups_%s 449 | %sbak 450 | %s.bak 451 | %s-bak 452 | %s_bak 453 | bak%s 454 | bak-%s 455 | bak_%s 456 | %sbamboo 457 | %s.bamboo 458 | %s-bamboo 459 | %s_bamboo 460 | bamboo%s 461 | bamboo-%s 462 | bamboo_%s 463 | %sbetas 464 | %s.betas 465 | %s-betas 466 | %s_betas 467 | betas%s 468 | betas-%s 469 | betas_%s 470 | %sbilling 471 | %s.billing 472 | %s-billing 473 | %s_billing 474 | billing%s 475 | billing-%s 476 | billing_%s 477 | %sbuild 478 | %s.build 479 | %s-build 480 | %s_build 481 | build%s 482 | build-%s 483 | build_%s 484 | %sbuilds 485 | %s.builds 486 | %s-builds 487 | %s_builds 488 | builds%s 489 | builds-%s 490 | builds_%s 491 | %scdn 492 | %s.cdn 493 | %s-cdn 494 | %s_cdn 495 | cdn%s 496 | cdn-%s 497 | cdn_%s 498 | %sclub 499 | %s.club 500 | %s-club 501 | %s_club 502 | club%s 503 | club-%s 504 | club_%s 505 | %scluster 506 | %s.cluster 507 | %s-cluster 508 | %s_cluster 509 | cluster%s 510 | cluster-%s 511 | cluster_%s 512 | %sconsultants 513 | %s.consultants 514 | %s-consultants 515 | %s_consultants 516 | consultants%s 517 | consultants-%s 518 | consultants_%s 519 | %scontact 520 | %s.contact 521 | %s-contact 522 | %s_contact 523 | contact%s 524 | contact-%s 525 | contact_%s 526 | %sdeveloper 527 | %s.developer 528 | %s-developer 529 | %s_developer 530 | developer%s 531 | developer-%s 532 | developer_%s 533 | %sdevelopers 534 | %s.developers 535 | %s-developers 536 | %s_developers 537 | developers%s 538 | developers-%s 539 | developers_%s 540 | %sdevelopment 541 | %s.development 542 | %s-development 543 | %s_development 544 | development%s 545 | development-%s 546 | development_%s 547 | %sdirectory 548 | %s.directory 549 | %s-directory 550 | %s_directory 551 | directory%s 552 | directory-%s 553 | directory_%s 554 | %sdiscount 555 | %s.discount 556 | %s-discount 557 | %s_discount 558 | discount%s 559 | discount-%s 560 | discount_%s 561 | %sdl 562 | %s.dl 563 | %s-dl 564 | %s_dl 565 | dl%s 566 | dl-%s 567 | dl_%s 568 | %sdns 569 | %s.dns 570 | %s-dns 571 | %s_dns 572 | dns%s 573 | dns-%s 574 | dns_%s 575 | %sdocker 576 | %s.docker 577 | %s-docker 578 | %s_docker 579 | docker%s 580 | docker-%s 581 | docker_%s 582 | %sdownload 583 | %s.download 584 | %s-download 585 | %s_download 586 | download%s 587 | download-%s 588 | download_%s 589 | %sdynamo 590 | %s.dynamo 591 | %s-dynamo 592 | %s_dynamo 593 | dynamo%s 594 | dynamo-%s 595 | dynamo_%s 596 | %sdynamodb 597 | %s.dynamodb 598 | %s-dynamodb 599 | %s_dynamodb 600 | dynamodb%s 601 | dynamodb-%s 602 | dynamodb_%s 603 | %secs 604 | %s.ecs 605 | %s-ecs 606 | %s_ecs 607 | ecs%s 608 | ecs-%s 609 | ecs_%s 610 | %selastic 611 | %s.elastic 612 | %s-elastic 613 | %s_elastic 614 | elastic%s 615 | elastic-%s 616 | elastic_%s 617 | %selb 618 | %s.elb 619 | %s-elb 620 | %s_elb 621 | elb%s 622 | elb-%s 623 | elb_%s 624 | %selk 625 | %s.elk 626 | %s-elk 627 | %s_elk 628 | elk%s 629 | elk-%s 630 | elk_%s 631 | %semails 632 | %s.emails 633 | %s-emails 634 | %s_emails 635 | emails%s 636 | emails-%s 637 | emails_%s 638 | %ses 639 | %s.es 640 | %s-es 641 | %s_es 642 | es%s 643 | es-%s 644 | es_%s 645 | %sexport 646 | %s.export 647 | %s-export 648 | %s_export 649 | export%s 650 | export-%s 651 | export_%s 652 | %sfileshare 653 | %s.fileshare 654 | %s-fileshare 655 | %s_fileshare 656 | fileshare%s 657 | fileshare-%s 658 | fileshare_%s 659 | %sgcp 660 | %s.gcp 661 | %s-gcp 662 | %s_gcp 663 | gcp%s 664 | gcp-%s 665 | gcp_%s 666 | %sgithub 667 | %s.github 668 | %s-github 669 | %s_github 670 | github%s 671 | github-%s 672 | github_%s 673 | %sgitlab 674 | %s.gitlab 675 | %s-gitlab 676 | %s_gitlab 677 | gitlab%s 678 | gitlab-%s 679 | gitlab_%s 680 | %sgraphite 681 | %s.graphite 682 | %s-graphite 683 | %s_graphite 684 | graphite%s 685 | graphite-%s 686 | graphite_%s 687 | %sgraphql 688 | %s.graphql 689 | %s-graphql 690 | %s_graphql 691 | graphql%s 692 | graphql-%s 693 | graphql_%s 694 | %shub 695 | %s.hub 696 | %s-hub 697 | %s_hub 698 | hub%s 699 | hub-%s 700 | hub_%s 701 | %siam 702 | %s.iam 703 | %s-iam 704 | %s_iam 705 | iam%s 706 | iam-%s 707 | iam_%s 708 | %sinfra 709 | %s.infra 710 | %s-infra 711 | %s_infra 712 | infra%s 713 | infra-%s 714 | infra_%s 715 | %sinternal 716 | %s.internal 717 | %s-internal 718 | %s_internal 719 | internal%s 720 | internal-%s 721 | internal_%s 722 | %sinternal-tools 723 | %s.internal-tools 724 | %s-internal-tools 725 | %s_internal-tools 726 | internal-tools%s 727 | internal-tools-%s 728 | internal-tools_%s 729 | %sios 730 | %s.ios 731 | %s-ios 732 | %s_ios 733 | ios%s 734 | ios-%s 735 | ios_%s 736 | %sjira 737 | %s.jira 738 | %s-jira 739 | %s_jira 740 | jira%s 741 | jira-%s 742 | jira_%s 743 | %sjs 744 | %s.js 745 | %s-js 746 | %s_js 747 | js%s 748 | js-%s 749 | js_%s 750 | %skubernetes 751 | %s.kubernetes 752 | %s-kubernetes 753 | %s_kubernetes 754 | kubernetes%s 755 | kubernetes-%s 756 | kubernetes_%s 757 | %slanding 758 | %s.landing 759 | %s-landing 760 | %s_landing 761 | landing%s 762 | landing-%s 763 | landing_%s 764 | %sldap 765 | %s.ldap 766 | %s-ldap 767 | %s_ldap 768 | ldap%s 769 | ldap-%s 770 | ldap_%s 771 | %sloadbalancer 772 | %s.loadbalancer 773 | %s-loadbalancer 774 | %s_loadbalancer 775 | loadbalancer%s 776 | loadbalancer-%s 777 | loadbalancer_%s 778 | %slogstash 779 | %s.logstash 780 | %s-logstash 781 | %s_logstash 782 | logstash%s 783 | logstash-%s 784 | logstash_%s 785 | %smail 786 | %s.mail 787 | %s-mail 788 | %s_mail 789 | mail%s 790 | mail-%s 791 | mail_%s 792 | %smain 793 | %s.main 794 | %s-main 795 | %s_main 796 | main%s 797 | main-%s 798 | main_%s 799 | %smanuals 800 | %s.manuals 801 | %s-manuals 802 | %s_manuals 803 | manuals%s 804 | manuals-%s 805 | manuals_%s 806 | %smattermost 807 | %s.mattermost 808 | %s-mattermost 809 | %s_mattermost 810 | mattermost%s 811 | mattermost-%s 812 | mattermost_%s 813 | %smercurial 814 | %s.mercurial 815 | %s-mercurial 816 | %s_mercurial 817 | mercurial%s 818 | mercurial-%s 819 | mercurial_%s 820 | %smobile 821 | %s.mobile 822 | %s-mobile 823 | %s_mobile 824 | mobile%s 825 | mobile-%s 826 | mobile_%s 827 | %smysql 828 | %s.mysql 829 | %s-mysql 830 | %s_mysql 831 | mysql%s 832 | mysql-%s 833 | mysql_%s 834 | %sops 835 | %s.ops 836 | %s-ops 837 | %s_ops 838 | ops%s 839 | ops-%s 840 | ops_%s 841 | %soracle 842 | %s.oracle 843 | %s-oracle 844 | %s_oracle 845 | oracle%s 846 | oracle-%s 847 | oracle_%s 848 | %spackages 849 | %s.packages 850 | %s-packages 851 | %s_packages 852 | packages%s 853 | packages-%s 854 | packages_%s 855 | %spostgres 856 | %s.postgres 857 | %s-postgres 858 | %s_postgres 859 | postgres%s 860 | postgres-%s 861 | postgres_%s 862 | %spresentations 863 | %s.presentations 864 | %s-presentations 865 | %s_presentations 866 | presentations%s 867 | presentations-%s 868 | presentations_%s 869 | %spreview 870 | %s.preview 871 | %s-preview 872 | %s_preview 873 | preview%s 874 | preview-%s 875 | preview_%s 876 | %sprivate 877 | %s.private 878 | %s-private 879 | %s_private 880 | private%s 881 | private-%s 882 | private_%s 883 | %spro 884 | %s.pro 885 | %s-pro 886 | %s_pro 887 | pro%s 888 | pro-%s 889 | pro_%s 890 | %sproducts 891 | %s.products 892 | %s-products 893 | %s_products 894 | products%s 895 | products-%s 896 | products_%s 897 | %sproject 898 | %s.project 899 | %s-project 900 | %s_project 901 | project%s 902 | project-%s 903 | project_%s 904 | %spsql 905 | %s.psql 906 | %s-psql 907 | %s_psql 908 | psql%s 909 | psql-%s 910 | psql_%s 911 | %srds 912 | %s.rds 913 | %s-rds 914 | %s_rds 915 | rds%s 916 | rds-%s 917 | rds_%s 918 | %srepo 919 | %s.repo 920 | %s-repo 921 | %s_repo 922 | repo%s 923 | repo-%s 924 | repo_%s 925 | %sscripts 926 | %s.scripts 927 | %s-scripts 928 | %s_scripts 929 | scripts%s 930 | scripts-%s 931 | scripts_%s 932 | %ssec 933 | %s.sec 934 | %s-sec 935 | %s_sec 936 | sec%s 937 | sec-%s 938 | sec_%s 939 | %ssecurity 940 | %s.security 941 | %s-security 942 | %s_security 943 | security%s 944 | security-%s 945 | security_%s 946 | %sservices 947 | %s.services 948 | %s-services 949 | %s_services 950 | services%s 951 | services-%s 952 | services_%s 953 | %ssitemaps 954 | %s.sitemaps 955 | %s-sitemaps 956 | %s_sitemaps 957 | sitemaps%s 958 | sitemaps-%s 959 | sitemaps_%s 960 | %ssnapshots 961 | %s.snapshots 962 | %s-snapshots 963 | %s_snapshots 964 | snapshots%s 965 | snapshots-%s 966 | snapshots_%s 967 | %ssource 968 | %s.source 969 | %s-source 970 | %s_source 971 | source%s 972 | source-%s 973 | source_%s 974 | %ssplunk 975 | %s.splunk 976 | %s-splunk 977 | %s_splunk 978 | splunk%s 979 | splunk-%s 980 | splunk_%s 981 | %ssrc 982 | %s.src 983 | %s-src 984 | %s_src 985 | src%s 986 | src-%s 987 | src_%s 988 | %sstats 989 | %s.stats 990 | %s-stats 991 | %s_stats 992 | stats%s 993 | stats-%s 994 | stats_%s 995 | %ssubversion 996 | %s.subversion 997 | %s-subversion 998 | %s_subversion 999 | subversion%s 1000 | subversion-%s 1001 | subversion_%s 1002 | %ssvn 1003 | %s.svn 1004 | %s-svn 1005 | %s_svn 1006 | svn%s 1007 | svn-%s 1008 | svn_%s 1009 | %ssyslog 1010 | %s.syslog 1011 | %s-syslog 1012 | %s_syslog 1013 | syslog%s 1014 | syslog-%s 1015 | syslog_%s 1016 | %steamcity 1017 | %s.teamcity 1018 | %s-teamcity 1019 | %s_teamcity 1020 | teamcity%s 1021 | teamcity-%s 1022 | teamcity_%s 1023 | %stemplates 1024 | %s.templates 1025 | %s-templates 1026 | %s_templates 1027 | templates%s 1028 | templates-%s 1029 | templates_%s 1030 | %sterraform 1031 | %s.terraform 1032 | %s-terraform 1033 | %s_terraform 1034 | terraform%s 1035 | terraform-%s 1036 | terraform_%s 1037 | %straffic 1038 | %s.traffic 1039 | %s-traffic 1040 | %s_traffic 1041 | traffic%s 1042 | traffic-%s 1043 | traffic_%s 1044 | %straining 1045 | %s.training 1046 | %s-training 1047 | %s_training 1048 | training%s 1049 | training-%s 1050 | training_%s 1051 | %stravis 1052 | %s.travis 1053 | %s-travis 1054 | %s_travis 1055 | travis%s 1056 | travis-%s 1057 | travis_%s 1058 | %stroposphere 1059 | %s.troposphere 1060 | %s-troposphere 1061 | %s_troposphere 1062 | troposphere%s 1063 | troposphere-%s 1064 | troposphere_%s 1065 | %suserpictures 1066 | %s.userpictures 1067 | %s-userpictures 1068 | %s_userpictures 1069 | userpictures%s 1070 | userpictures-%s 1071 | userpictures_%s 1072 | %sux 1073 | %s.ux 1074 | %s-ux 1075 | %s_ux 1076 | ux%s 1077 | ux-%s 1078 | ux_%s 1079 | %swp 1080 | %s.wp 1081 | %s-wp 1082 | %s_wp 1083 | wp%s 1084 | wp-%s 1085 | wp_%s 1086 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | boto3==1.4.8 2 | botocore==1.8.2 3 | certifi==2017.11.5 4 | certstream==1.8 5 | chardet==3.0.4 6 | docutils==0.14 7 | idna==2.6 8 | jmespath==0.9.3 9 | multidict==3.3.2 10 | pipdeptree==0.10.1 11 | pyaml==17.10.0 12 | python-dateutil==2.6.1 13 | PyYAML==3.12 14 | requests==2.18.4 15 | requests-file==1.4.2 16 | s3transfer==0.1.11 17 | six==1.11.0 18 | termcolor==1.1.0 19 | tldextract==2.2.0 20 | urllib3==1.22 21 | websocket-client==0.44.0 --------------------------------------------------------------------------------