{"id":18908985,"url":"https://github.com/bitdefender/distributed.tracer","last_synced_at":"2025-10-12T16:22:42.959Z","repository":{"id":36250122,"uuid":"138176530","full_name":"bitdefender/distributed.tracer","owner":"bitdefender","description":"Distributed version of simpletracer","archived":false,"fork":false,"pushed_at":"2023-04-07T10:33:05.000Z","size":1275,"stargazers_count":4,"open_issues_count":5,"forks_count":7,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-03-28T16:51:15.345Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bitdefender.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}},"created_at":"2018-06-21T13:51:11.000Z","updated_at":"2022-06-19T19:50:40.000Z","dependencies_parsed_at":"2022-09-02T07:40:42.884Z","dependency_job_id":null,"html_url":"https://github.com/bitdefender/distributed.tracer","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bitdefender%2Fdistributed.tracer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bitdefender%2Fdistributed.tracer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bitdefender%2Fdistributed.tracer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bitdefender%2Fdistributed.tracer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bitdefender","download_url":"https://codeload.github.com/bitdefender/distributed.tracer/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249015570,"owners_count":21198823,"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":[],"created_at":"2024-11-08T09:29:56.376Z","updated_at":"2025-10-12T16:22:37.906Z","avatar_url":"https://github.com/bitdefender.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"Distributed Tracer\n==================\n\nDistributed version of RIVER. Cardinal can trace multiple testcases at a\ntime and log the resulting traces.\n\nHow to use it\n-------------\n\n        ./run.sh [binary-id] [runs] [cores] [benchmark-runs] [(no)rebuild] [(no)genetic]\n\n                 binary-id = unique identification string of the benchmark binary\n                 runs = number of testcases that are generated by base fuzzers\n                 cores = number of tracer processes that run in parallel\n                 benchmark-runs = number of repetitions for current benchmark\n                 (no)rebuild = if \"rebuild\", node-river build is updated\n                 (no)genetic = if \"genetic\", river.genetic component is enabled to enhance testcase quality\n\nComponents\n----------\n\nCardinal is a distributed environment that searches for security flaws\nin multiple binaries at a time. Cardinal testing targets can be either\nexecutables or source code. Cardinal tests represent binary stream\ngenerated by state-of-art fuzzers. The tests represent input data\nfor testing targets. Once tests are sent to targets as input stream,\nthe execution trace is collected by Cardinal and stored inside a global\ncoverage state corresponding to the target executable.\n\n#### tracer.node\n\ntracer.node is the Cardinal component that starts the target execution.\nIt sends the test as input to target program and collects the execution\ntrace. The execution is traced using RIVER, a dynamic binary translation\nsystem. The trace format is shown below.\n\n![Trace\nrepresentation](https://github.com/teodor-stoenescu/distributed.tracer/blob/master/images/simpletrace.png)\n\n#### mongo.rabbit.bridge\n\nmongo.rabbit.bridge component is based on Mongo Oplog. It tracks the\nMongo changes in the tests collections and creates a Rabbit message\ncorresponding to the test. The message is inserted in the corresponding\nRabbit queue(new test or traced test).\n\n#### process.manager\n\nprocess.manager represents the processes orchestrator. It is the utility\nthat manages Cardinal subcomponents. process.manager starts/stops\nsubcomponents, limits the number of running processes and allow user\nconfiguration of Cardinal. 'process.manager/processes.json' shows the\nconfiguration for each component process as command line.\n'process.manager/resources.json' is the configuration file that allows\nlimitation of component running instances. For example, if configuration\nfile contains: 'tracer.node : 10', then a maximum of 10 process\ninstances of 'tracer.node' are allowed to run simultaneously.\n\n### river.genetic\n\nriver.genetic is a component that allows ranking input by the basic\nblocks exercised in the target program. In this manner, only inputs that\ndiscover new code or inputs that discover new paths are kept and used\nfor mutations. This component can be disabled from command-line.\nCardinal is more efficient when 'river.genetic' is enabled.\n\n\n### state.aggregator\n\nThe individual traces produced by 'tracer.node' represent the path in\nbinary described by ordered basic blocks followed by target program when\nindividual input is sent at runtime. One program execution shows one\npath. By gathering these paths together per each executable, Cardinal is\nable to show a global coverage state showing what basic blocks where\nexercised, how many times and what are the ancestors (incoming edge).\nThe state aggregator is able to gather the traces from database and\ngrouping these in local and global collections. The global collections\nper executable represent the current coverage obtained by Cardinal in\ntesting the executables.\n\n### state.manager\n\nThe components is a helper for state.aggregator and can be used by\ncommand line to clean coverage data by executable id.\n\n### web.api and web.interface\n\nCardinal has a user-friendly interface that allows showing the status of\neach executable tested with Cardinal. It shows how many tests were\ntraced, how many of them failed (possible vulnerabilities), what\nresources are used for testing each executable and the global coverage\nstate.\n\n### Cardinal architecture\n\n![Cardinal architecture](https://github.com/teodor-stoenescu/distributed.tracer/blob/master/images/architecture.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbitdefender%2Fdistributed.tracer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbitdefender%2Fdistributed.tracer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbitdefender%2Fdistributed.tracer/lists"}