Commit 8e80e136 by Peter Weidenbach

rules added to install script, IPv6 rule bug fixed

parent 10ddc58c
from common_analysis_base import AnalysisPluginFile from common_analysis_base import AnalysisPluginFile
import socket from common_helper_files import get_dir_of_file
from sys import exit, exc_info
import logging import logging
import os
try: import socket
import yara from sys import exc_info
except ImportError: import yara
yara = None
exit("yara not found. please install yara")
logger = logging.getLogger('CommonAnalysisIPAndURIFinder') logger = logging.getLogger('CommonAnalysisIPAndURIFinder')
logger.setLevel(logging.INFO) logger.setLevel(logging.INFO)
system_version = "0.3" system_version = "0.4"
class FinderBase: class FinderBase:
...@@ -119,10 +116,32 @@ class URIFinder(FinderBase): ...@@ -119,10 +116,32 @@ class URIFinder(FinderBase):
class CommonAnalysisIPAndURIFinder(AnalysisPluginFile): class CommonAnalysisIPAndURIFinder(AnalysisPluginFile):
def __init__(self, yara_uri_rules=None, yara_ip_rules=None): def __init__(self, yara_uri_rules=None, yara_ip_rules=None):
super(CommonAnalysisIPAndURIFinder, self).__init__(system_version) super(CommonAnalysisIPAndURIFinder, self).__init__(system_version)
self.yara_uri_rules = yara_uri_rules self._set_rule_file_pathes(yara_uri_rules, yara_ip_rules)
self.yara_ip_rules = yara_ip_rules self._check_for_errors()
def _set_rule_file_pathes(self, yara_uri_rules, yara_ip_rules):
internal_signature_dir = os.path.join(get_dir_of_file(__file__), 'yara_rules')
if yara_ip_rules is None:
self.yara_ip_rules = os.path.join(internal_signature_dir, 'ip_rules.yara')
else:
self.yara_ip_rules = yara_ip_rules
if yara_uri_rules is None:
self.yara_uri_rules = os.path.join(internal_signature_dir, 'uri_rules.yara')
else:
self.yara_uri_rules = yara_uri_rules
def _check_for_errors(self):
if os.path.exists(self.yara_ip_rules):
logging.info('ip signature path: {}'.format(self.yara_ip_rules))
else:
logging.error('ip signatures not found: {}'.format(self.yara_ip_rules))
if os.path.exists(self.yara_uri_rules):
logging.info('ip signature path: {}'.format(self.yara_uri_rules))
else:
logging.error('ip signatures not found: {}'.format(self.yara_uri_rules))
def analyze_file(self, file_path, separate_ipv6=False): def analyze_file(self, file_path, separate_ipv6=False):
found_uris, found_ips_v4, found_ips_v6 = [], [], [] found_uris, found_ips_v4, found_ips_v6 = [], [], []
......
...@@ -19,8 +19,7 @@ class TestIpAndUrlFinder(unittest.TestCase): ...@@ -19,8 +19,7 @@ class TestIpAndUrlFinder(unittest.TestCase):
def setUp(self): def setUp(self):
self.yara_uri_rules = find_file('uri_rules.yara') self.yara_uri_rules = find_file('uri_rules.yara')
self.yara_ip_rules = find_file('ip_rules.yara') self.yara_ip_rules = find_file('ip_rules.yara')
self.test_string = "1.2.3.4 abc 123.123.123.123 abc 1.2.3 .4 abc 1.1234.1.1 abc 1.a.1.1" \ self.test_string = "1.2.3.4 abc 123.123.123.123 abc 1.2.3 .4 abc 1.1234.1.1 abc 1.a.1.1 1234:1234:abcd:abcd:1234:1234:abcd:abcd 2001:db8:0:8d3:0:8a2e:70:7344 "
"1234:1234:abcd:abcd:1234:1234:abcd:abcd 2001:db8:0:8d3:0:8a2e:70:7344"
def test_find_ips(self): def test_find_ips(self):
results = IPFinder(self.yara_ip_rules).find_ips(self.test_string, validate=False) results = IPFinder(self.yara_ip_rules).find_ips(self.test_string, validate=False)
......
...@@ -8,7 +8,7 @@ rule IPv4 { ...@@ -8,7 +8,7 @@ rule IPv4 {
rule IPv6 { rule IPv6 {
strings: strings:
$a = /([\da-fA-F]{1,4})?\:([\da-fA-F]{1,4})?\:(([\da-fA-F]{1,4})?\:){0,5}([\da-fA-F]{1,4})?/ $a = /([\da-fA-F]{1,4})?\:([\da-fA-F]{1,4})?\:(([\da-fA-F]{1,4})?\:){0,6}([\da-fA-F]{1,4})?/
$b = /([\da-fA-F]{1,4})?\:([\da-fA-F]{1,4})?\:(([\da-fA-F]{1,4})?\:){0,5}[\d]{1,3}(\.[\d]{1,3}){3}/ $b = /([\da-fA-F]{1,4})?\:([\da-fA-F]{1,4})?\:(([\da-fA-F]{1,4})?\:){0,5}[\d]{1,3}(\.[\d]{1,3}){3}/
condition: condition:
......
...@@ -8,10 +8,16 @@ setup( ...@@ -8,10 +8,16 @@ setup(
packages=find_packages(), packages=find_packages(),
install_requires=[ install_requires=[
'common_analysis_base', 'common_analysis_base',
'common_helper_files',
'yara-python >= 3.5' 'yara-python >= 3.5'
], ],
data_files=[('common_analysis_ip_and_uri_finder/yara_rules', [
'common_analysis_ip_and_uri_finder/yara_rules/ip_rules.yara',
'common_analysis_ip_and_uri_finder/yara_rules/uri_rules.yara',
])],
dependency_links=[ dependency_links=[
'git+https://github.com/mass-project/common_analysis_base.git#common_analysis_base' 'git+https://github.com/mass-project/common_analysis_base.git#common_analysis_base',
'git+https://github.com/fkie-cad/common_helper_files.git#common_helper_files'
], ],
description="Analysis module to find IPs und URIs", description="Analysis module to find IPs und URIs",
author="Fraunhofer FKIE, University of Bonn Institute of Computer Science 4", author="Fraunhofer FKIE, University of Bonn Institute of Computer Science 4",
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment