================== Regression testing ================== Introduction ------------ Memory dumping is one of the core functionalities used for automated malware analysis. Unpacked or decrypted memory is saved for futher analysis with YARA rules or configuration extraction. Thus, it's important to ensure that DRAKVUF development does cause any regressions that would break existing sample analysis. Preparing a test set -------------------- Regression test set is a list of JSON objects that represent a number of sample submissions and the expected malware family name that should be detected. Dump analysis is performed by providing a directory with `malduck `_ extractor modules. `Here `_, you can learn more about them. * sha256 - SHA256 hash of the sample file * extension - file extension, supported by the sanbox, e.g. "exe" or "dll" * ripped - malware family name * path - (optional) path to the malware sample Example: .. code-block:: json [ { "sha256": "35e756ef1b3d542deaf59f093bc4abe5282a1294f7144b32b61f4f60c147cabb", "extension": "dll", "ripped": "emotet" }, { "sha256": "4239335443cbf3d45db485d33c13346c67d5ac717a57856315a166c190dde075", "extension": "exe", "ripped": "raccoon", "path": "samples/4239335443cbf3d45db485d33c13346c67d5ac717a57856315a166c190dde075" } ] Test submitter supports two methods for obtaining the malware sample. 1. Manual - if the test case has a ``path`` key deinfed, malware sample will be read from this location (relative and absolute paths are allowed). 2. Automated - otherwise, sample will be downloaded from the mwdb.cert.pl service. Make sure to run the submitter with ``MWDB_API_KEY`` environment variable if you intend to use this method Running the receiver daemon --------------------------- First, configure the extractor module path in ``/etc/drakrun/config.ini`` .. code-block:: ini [draktestd] ; path to the extraction modules for ; https://github.com/CERT-Polska/malduck modules=/opt/extractor-modules/ Next, uncomment ``sample_testing`` line and enable it .. code-block:: ini [drakrun] ; (advanced) Enable testing codepaths. Test sample artifacts will not be uploaded ; to persistent storage. Their lifetime will be bound to karton tasks produced by drakrun sample_testing=1 Then, execute .. code-block:: console $ draktestd This will spawn a new karton service listening for test analysis results and printing the results. Executing a test set -------------------- To submit a test set, execute: .. code-block:: console $ draktest test_set.json The command will submit samples to the sandbox and wait until all the testing is finished.