Example #1
0
    def test_address(self):
        log.ThugOpts.mongodb_address = "syntax-error://localhost:123"
        mongo = MongoDB(thug.__version__)
        log.ThugOpts.mongodb_address = None

        assert not mongo.enabled
Example #2
0
 def test_init(self):
     """
         Testing for conf file 'thug.conf'
     """
     mongo = MongoDB(thug.__version__)
     assert not mongo.enabled
Example #3
0
class TestMongoDB:
    cve  = "CVE-XXXX"
    url  = "www.example.com"
    data = b"sample-data"
    desc = "sample-desc"
    cert = "sample-cert"

    file_data = {'sha1': 'b13d13733c4c9406fd0e01485bc4a34170b7d326',
                 'data': data,
                 'ssdeep': u'24:9EGtDqSyDVHNkCq4LOmvmuS+MfTAPxokCOB:97tG5DjQ4LDs+sTAPxLT',
                 'sha256': '459bf0aeda19633c8e757c05ee06b8121a51217cea69ce60819bb34092a296a0',
                 'type': 'JAR',
                 'md5': 'd4be8fbeb3a219ec8c6c26ffe4033a16'}

    base_dir       = "path/to/sample/basedir"
    code_snippet   = b"var i = 12;"
    base64_snippet = "dmFyIGkgPSAxMjs="
    language       = "Javascript"
    relationship   = "Contained_Inside"
    tag            = "Tag"  # TODO: Better tag
    method         = "Dynamic Analysis"

    source = "www.ex1.com"
    dest   = "www.ex2.com"
    con_method = "iframe"

    # Creating a MongoDB object for all the test methods.
    with patch(pymongo.__name__ + '.MongoClient', new=mongomock.MongoClient), \
            patch('gridfs.Database', new=mongomock.database.Database):
        log.ThugOpts.mongodb_address = "mongodb://*****:*****@patch(pymongo.__name__ + '.MongoClient', new=mongomock.MongoClient)
    @patch('gridfs.Database', new=mongomock.database.Database)
    def test_address(self):
        log.ThugOpts.mongodb_address = "syntax-error://localhost:123"
        mongo = MongoDB(thug.__version__)
        log.ThugOpts.mongodb_address = None

        assert not mongo.enabled

    def test_init(self):
        """
            Testing for conf file 'thug.conf'
        """
        mongo = MongoDB(thug.__version__)
        assert not mongo.enabled

    def test_make_counter(self):
        counter = self.mongo.make_counter(2)
        assert next(counter) in (2, )
        assert next(counter) in (3, )

    def test_get_url(self):
        assert self.mongo.urls.count_documents({}) in (0, )

        self.mongo.get_url(self.url)
        assert self.mongo.urls.count_documents({}) in (1, )

        # Testing for Duplicate entry
        self.mongo.get_url(self.url)
        assert self.mongo.urls.count_documents({}) in (1, )

    def test_set_url(self):
        self.mongo.enabled = False
        self.mongo.set_url(self.url)
        assert self.mongo.analyses.count_documents({}) in (0, )

        self.mongo.enabled = True
        log.ThugVulnModules.disable_acropdf()
        self.mongo.set_url(self.url)
        log.ThugVulnModules._acropdf_disabled = False  # TODO: Have enable_acropdf() function?
        analysis = self.mongo.analyses.find_one({"thug.plugins.acropdf": "disabled"})
        assert analysis
        assert self.mongo.analyses.count_documents({}) in (1, )

    def test_log_location(self):
        self.mongo.enabled = False
        self.mongo.log_location(self.url, self.file_data)
        assert self.mongo.locations.count_documents({}) in (0, )

        self.mongo.enabled = True
        self.mongo.log_location(self.url, self.file_data)
        assert self.mongo.locations.count_documents({}) in (1, )

    def test_log_connection(self):
        self.mongo.enabled = False
        self.mongo.log_connection(self.source, self.dest, self.con_method)
        assert self.mongo.connections.count_documents({}) in (0, )

        self.mongo.enabled = True
        self.mongo.log_connection(self.source, self.dest, self.con_method)
        assert self.mongo.connections.count_documents({}) in (1, )

        nodes = self.mongo.graph.G.nodes
        assert self.source in nodes
        assert self.dest in nodes

    def test_log_exploit_event(self):
        self.mongo.enabled = False
        self.mongo.log_exploit_event(self.url, "ActiveX", self.desc, self.cve)
        assert self.mongo.exploits.count_documents({}) in (0, )

        self.mongo.enabled = True
        self.mongo.log_exploit_event(self.url, "ActiveX", self.desc, self.cve)
        assert self.mongo.exploits.count_documents({}) in (1, )

    def test_log_classifier(self):
        self.mongo.enabled = False
        self.mongo.log_classifier("exploit", self.url, self.cve, self.tag)
        assert self.mongo.classifiers.count_documents({}) in (0, )

        self.mongo.enabled = True
        self.mongo.log_classifier("exploit", self.url, self.cve, self.tag)
        assert self.mongo.classifiers.count_documents({}) in (1, )

    @patch('gridfs.grid_file.Collection', new=mongomock.collection.Collection)
    def test_log_file(self):
        self.mongo.enabled = False
        self.mongo.log_file(self.file_data)
        assert self.mongo.samples.count_documents({}) in (0, )

        self.mongo.enabled = True
        self.mongo.log_file(self.file_data)
        assert self.mongo.samples.count_documents({}) in (1, )

        # Testing for duplicate entry
        self.mongo.log_file(self.file_data)
        assert self.mongo.samples.count_documents({}) in (1, )

    def test_log_json(self):
        self.mongo.enabled = False
        self.mongo.log_json(self.base_dir)
        assert self.mongo.json.count_documents({}) in (0, )

        # Setting self.mongo.enabled = True
        self.mongo.enabled = True
        self.mongo.log_json(self.base_dir)
        assert self.mongo.json.count_documents({}) in (0, )

        # Enabling json_logging
        log.ThugOpts.json_logging = True
        self.mongo.log_json(self.base_dir)
        log.ThugOpts.json_logging = False
        assert self.mongo.json.count_documents({}) in (0, )

    def test_log_event(self):
        self.mongo.enabled = False
        self.mongo.log_event(self.base_dir)
        assert self.mongo.graphs.count_documents({}) in (0, )

        self.mongo.enabled = True
        self.mongo.log_event(self.base_dir)
        assert self.mongo.graphs.count_documents({}) in (1, )

    def test_fix(self):
        encoded_data = self.mongo.fix("")
        assert "" in (encoded_data,)

        encoded_data = self.mongo.fix("sample\n-\ncontent")
        assert "sample-content" in (encoded_data,)

        encoded_data = self.mongo.fix(u"sample\n-\ncontent(í)", drop_spaces=False)
        assert u"sample\n-\ncontent(í)" in (encoded_data,)

    def test_add_code_snippet(self):
        self.mongo.enabled = False
        self.mongo.add_code_snippet(self.code_snippet, self.language, self.relationship, self.tag)
        assert self.mongo.codes.count_documents({}) in (0, )

        self.mongo.enabled = True
        self.mongo.add_code_snippet(self.code_snippet, self.language, self.relationship, self.tag)
        assert self.mongo.codes.count_documents({}) in (1, )

    def test_add_shellcode_snippet(self):
        self.mongo.codes.delete_many({})
        self.mongo.enabled = False
        self.mongo.add_shellcode_snippet(self.code_snippet, self.language, self.relationship, self.tag)
        assert self.mongo.codes.count_documents({}) in (0, )

        self.mongo.enabled = True
        self.mongo.add_shellcode_snippet(self.code_snippet, self.language, self.relationship, self.tag)
        assert self.mongo.codes.count_documents({}) in (1, )

    def test_add_behaviour_warn(self):
        self.mongo.enabled = False
        self.mongo.add_behavior_warn(self.desc, self.cve, self.code_snippet)
        assert self.mongo.behaviors.count_documents({}) in (0, )

        self.mongo.enabled = True
        self.mongo.add_behavior_warn(self.desc, self.cve, self.code_snippet)
        assert self.mongo.behaviors.count_documents({}) in (1, )

        self.mongo.add_behavior_warn()
        assert self.mongo.behaviors.count_documents({}) in (1, )

    def test_log_certificate(self):
        self.mongo.enabled = False
        self.mongo.log_certificate(self.url, self.cert)
        assert self.mongo.certificates.count_documents({}) in (0, )

        self.mongo.enabled = True
        self.mongo.log_certificate(self.url, self.cert)
        assert self.mongo.certificates.count_documents({}) in (1, )

    def test_log_virustotal(self):
        self.mongo.enabled = False
        self.mongo.log_virustotal(self.file_data, "sample-report")
        assert self.mongo.virustotal.count_documents({}) in (0, )

        self.mongo.enabled = True
        self.mongo.log_virustotal(self.file_data, "sample-report")
        assert self.mongo.virustotal.count_documents({}) in (1, )

    def test_log_honeyagent(self):
        assert self.mongo.honeyagent.count_documents({}) in (0, )

        self.mongo.log_honeyagent(self.file_data, "sample-report")
        assert self.mongo.honeyagent.count_documents({}) in (1, )

    def test_log_cookies(self):
        assert self.mongo.cookies.count_documents({}) in (0, )

        log.HTTPSession.cookies.set('domain', 'test.com')
        self.mongo.log_cookies()
        assert self.mongo.honeyagent.count_documents({}) in (1, )