{"id":13588212,"url":"https://github.com/ouspg/cloudfuzzer","last_synced_at":"2025-04-08T02:35:06.618Z","repository":{"id":78294546,"uuid":"70885872","full_name":"ouspg/cloudfuzzer","owner":"ouspg","description":null,"archived":false,"fork":false,"pushed_at":"2017-04-21T10:09:37.000Z","size":120,"stargazers_count":23,"open_issues_count":9,"forks_count":7,"subscribers_count":12,"default_branch":"master","last_synced_at":"2024-11-06T07:40:27.543Z","etag":null,"topics":["cloud","docker-swarm","fuzzing"],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ouspg.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-10-14T07:36:47.000Z","updated_at":"2024-10-03T05:12:33.000Z","dependencies_parsed_at":null,"dependency_job_id":"bfbe50b3-c0b6-4c3f-8d12-7126199287f4","html_url":"https://github.com/ouspg/cloudfuzzer","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ouspg%2Fcloudfuzzer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ouspg%2Fcloudfuzzer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ouspg%2Fcloudfuzzer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ouspg%2Fcloudfuzzer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ouspg","download_url":"https://codeload.github.com/ouspg/cloudfuzzer/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247765207,"owners_count":20992263,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cloud","docker-swarm","fuzzing"],"created_at":"2024-08-01T15:06:34.397Z","updated_at":"2025-04-08T02:35:06.610Z","avatar_url":"https://github.com/ouspg.png","language":"Shell","funding_links":[],"categories":["Tools","Shell"],"sub_categories":["Cloud Fuzzers"],"readme":"# Cloudfuzzer\n\nCloudfuzzer is a cloud fuzzing framework. Purpose of cloudfuzzer is to make it possible to easily run automated fuzz-testing in cloud environment.\n\nIn cloud environment __bastion__ instance works as a SSH gateway between outside world and fuzzing cluster. It is used to deliver docker image from user to swarm machines. Bastion is also used for storing fuzzing results.\n\n__Fuzzvm__ instances consist of __one__ __swarm-master__ and __N__ __swarm-nodes__. Swarm-master is used to set up docker-swarm, including all swarm-machine instances. It distributes fuzzing jobs, once received from Bastion. Swarm-nodes run fuzzing docker containers and sync results with bastion. Swarm-nodes can be run as Preemptible/SpotInstance instances because they have shutdown detection and they sync results before shutdown.\n\n# Getting started\n\n## Example script for GCE\n\nExample script for setup in GCE is found in [tests/gce-tests/gce-setup.sh](tests/gce-tests/gce-setup.sh)\n\n## config files\n\nConfig file of cloudfuzzer is named cloudfuzzer.conf\nuser.conf overrides cloudfuzzer.conf.\n\nFollowing variables are used:\n```\nBASTION_ADDRESS=\"xxx.xxx.xxx.xxx\" # IP address of bastion\nSSH_OPTS=\"-o StrictHostKeyChecking=no -i $CLOUDFUZZER_DIR/vm-keys/bastion-key\" # SSH options\nBASTION_USER=\"ubuntu\" # Bastion username\n```\n## cloudfuzzer\n\nUse following command to source cloudfuzzer functions\n```\n$ source scripts/functions.bash.inc\n```\n\nAvailable commands (usage: cloudfuzzer \u0026lt;command\u0026gt;):\n```\nbastion \u003ccommand\u003e - run \u003ccommand\u003e on bastion.\ncreate-keys - create new vm-keys\nget-results - get results from cloudfuzzer\nget-stats - get various stats and logs from cloudfuzzer fuzzvm docker\nhelp - print this\nsend-docker-data \u003cdirectory\u003e - send docker data directory to bastion\nssh - ssh to bastion\n```\n\nTo get help for specific command type\n```\n$ cloudfuzzer \u003ccommand\u003e help\n```\n\n## ssh-keys\n\nPacker is used to provision ssh keys to the bastion and fuzzvm images.\n\nBy default keys should be named bastion-key, bastion-key.pub and fuzzvm-key, fuzzvm-key.pub and should locate in folder ./vm-keys.\n\nYou can use following command to create rsa 4096 keys for you.\n\n```\n$ cloudfuzzer create-keys\n```\n\nKeys are provisioned so that bastion can access all machines created from fuzzvm-image, and fuzzvm can access all other fuzzvms and bastion.\n(Currently there are no separate users for different operations, so you get full root access with these keys.)\n\n## Images\n\nPacker is used for creating images to cloud environment. You must build images for bastion and fuzzvm. You find the packer files from [packer/](packer/) directory.\n\nBy default, packer files for bastion and fuzzvm use use_variables for account_file and project_id. One way to use them is to make a separate json-file:\n```\n{\n    \"account_file\":\t\"/path/to/your/account_file.json\",\n    \"project_id\":\t\"your_cloudfuzzer_project_id\"\n}\n```\n\nAfter that you can build images with following commands (Google Cloud)\n\n__Bastion__\n```\n$ packer build -only=gcloud -var-file=/path/to/your/variables.json packer-bastion.json\n```\n\n__Fuzzvm__\n```\n$ packer build -only=gcloud -var-file=/path/to/your/variables.json packer-fuzzvm.json\n```\n\n* If you want to use aws use -only=aws\n* You can use -force if you want Packer to rewrite existing images in cloud platform.\n* Using Google Compute Engine with Packer: https://www.packer.io/docs/builders/googlecompute.html\n\n## Instances\n\nAfter creating images with packer you should setup running instances in cloud environment.\n* 1x bastion\n* Nx fuzzvm\n\nBastion should have access public ip so it can be accessed from outside network while fuzzvm should only have internal network ip.\n\n## Setting it up\n\n```\n$ cloudfuzzer bastion setup-swarm \u003cnodes\u003e\n```\n\nList of ip addresses of nodes should be given as argument for setup-swarm.sh\n\n## Distributing docker image\n\nSave docker image to cloudfuzzer/context :\n```\n$ docker save $image | gzip \u003e cloudfuzzer/context/docker-image\n```\n\nDocker arguments should be defined in context/docker-options  \nExample:\n```\n -d -m 3g volume_container_rsync\n```\n\nUpload context:\n```\n$ send-docker-data cloudfuzzer/context\n```\n\n## Run containers\n\nRun number of containers\n\n```\n$ cloudfuzzer bastion run-containers \u003ccount\u003e\n```\n\n## Get results\n\nGet results from fuzzvm's. If no ip-adresses are given as argument results from all fuzzvm's are fetched.\n\n```\n$ cloudfuzzer bastion get-results (fuzzvm1) (fuzzvm2) ...\n```\n\n## Get stats\n\nGet stats\n\n```\n$ cloudfuzzer get-stats \u003cdestionation\u003e\ndocker service list\nID            NAME                    MODE        REPLICAS  IMAGE\nnsbg1dh6t2k1  fuzz-service            replicated  70/70     p7zip-fuzz\nxl3l65kufl66  rsync-volume-container  global      10/10     nabeken/docker-volume-container-rsync\n\ndocker service inspect fuzz-service --pretty\n\nID:             nsbg1dh6t2k1biiroyf92oukf\nName:           fuzz-service\nService Mode:   Replicated\n Replicas:      70\nPlacement:\nUpdateConfig:\n Parallelism:   1\n On failure:    pause\n Max failure ratio: 0\nContainerSpec:\n Image:         p7zip-fuzz\nMounts:\n  Target = /output\n   Source = rsync-volume-container\n   ReadOnly = false\n   Type = volume\nResources:\n Reservations:\n  Memory:       500 MiB\nEndpoint Mode:  vip\n\ndocker service ps fuzz-service\nID            NAME             IMAGE       NODE       DESIRED STATE  CURRENT STATE        ERROR  PORTS\n7iadtdvc3dsc  fuzz-service.1   p7zip-fuzz  fuzzvm-8   Running        Running 2 hours ago         \n81qsodiixxee  fuzz-service.2   p7zip-fuzz  fuzzvm-6   Running        Running 2 hours ago\n```\n\n\n# Requirements\n\n* [Packer](https://www.packer.io/) 0.11.0\n* Cloud service\n\nLicense\n----\nApache 2.0\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fouspg%2Fcloudfuzzer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fouspg%2Fcloudfuzzer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fouspg%2Fcloudfuzzer/lists"}