Exemplo n.º 1
0
def get_gateway_ip_addresses(configuration):
    """
    get gateway ip addresses

    Args:
        configuration: user final configuration

    Returns:
        list of gateway's IPs
    """
    gateway_ips = []
    for selected_module in configuration:
        container_name = virtual_machine_name_to_container_name(
            configuration[selected_module]["virtual_machine_name"],
            selected_module)
        try:
            gateway_ip = os.popen(
                "docker inspect -f '{{{{range.NetworkSettings.Networks}}}}"
                "{{{{.Gateway}}}}{{{{end}}}}' {0}".format(
                    container_name)).read().rsplit()[0].replace("\'", "")
            gateway_ips.append(gateway_ip)
        except IndexError as _:
            warn("unable to get container {0} IP address".format(
                container_name))
    return list(set(gateway_ips))
Exemplo n.º 2
0
def start_containers(configuration):
    """
    start containers based on configuration and dockerfile

    Args:
        configuration: JSON container configuration

    Returns:
        configuration containing IP Addresses
    """
    for selected_module in configuration:
        # get the container name to start (organizing)
        # using pattern name will help us to remove/modify the images and modules
        container_name = virtual_machine_name_to_container_name(
            configuration[selected_module]["virtual_machine_name"],
            selected_module)
        real_machine_port = configuration[selected_module][
            "real_machine_port_number"]
        virtual_machine_port = configuration[selected_module][
            "virtual_machine_port_number"]
        # connect to owasp honeypot networks!
        if configuration[selected_module]["virtual_machine_internet_access"]:
            # run the container with internet access
            os.popen(
                "docker run {0} --net ohp_internet --name={1} -d -t -p {2}:{3} {4}"
                .format(
                    " ".join(configuration[selected_module]
                             ["extra_docker_options"]), container_name,
                    real_machine_port, virtual_machine_port,
                    configuration[selected_module]
                    ["virtual_machine_name"])).read()
        else:
            # run the container without internet access
            os.popen(
                "docker run {0} --net ohp_no_internet --name={1} -d -t -p {2}:{3} {4}"
                .format(
                    " ".join(configuration[selected_module]
                             ["extra_docker_options"]), container_name,
                    real_machine_port, virtual_machine_port,
                    configuration[selected_module]
                    ["virtual_machine_name"])).read()
        try:
            virtual_machine_ip_address = os.popen(
                "docker inspect -f '{{{{range.NetworkSettings.Networks}}}}"
                "{{{{.IPAddress}}}}{{{{end}}}}' {0}".format(
                    container_name)).read().rsplit()[0].replace(
                        "\'",
                        "")  # single quotes needs to be removed in windows
        except Exception as _:
            virtual_machine_ip_address = "CANNOT_FIND_IP_ADDRESS"
        # add virtual machine IP Address to configuration
        configuration[selected_module][
            "ip_address"] = virtual_machine_ip_address
        # print started container information
        info("container {0} started, forwarding 0.0.0.0:{1} to {2}:{3}".format(
            container_name, real_machine_port, virtual_machine_ip_address,
            virtual_machine_port))
    return configuration
Exemplo n.º 3
0
def create_new_images(configuration):
    """
    start new images based on configuration and dockerfile

    Args:
        configuration: user final configuration

    Returns:
        True
    """
    for selected_module in configuration:
        # go to tmp folder to create Dockerfile and files dir
        tmp_dir_name = make_tmp_thread_dir()
        os.chdir(tmp_dir_name)
        # create files dir
        mkdir("files")

        # create Dockerfile
        dockerfile = open("Dockerfile", "w")
        dockerfile.write(configuration[selected_module]["dockerfile"])
        dockerfile.close()

        # copy files
        copy_dir_tree(configuration[selected_module]["files"], "files")

        # create docker image
        image_name = virtual_machine_name_to_container_name(
            configuration[selected_module]["virtual_machine_name"],
            selected_module
        )

        info("creating image {0}".format(image_name))

        # in case if verbose mode is enabled, we will be use os.system
        # instead of os.popen to show the outputs in case
        # of anyone want to be aware what's happening or what's the error,
        # it's a good feature for developers as well
        # to create new modules
        if is_verbose_mode():
            os.system("docker build . -t {0}".format(image_name))
        else:
            os.popen("docker build . -t {0}".format(image_name)).read()

        # created
        info("image {0} created".format(image_name))

        # go back to home directory
        os.chdir("../..")

        # submit tmp dir name
        tmp_directories.append(tmp_dir_name)
    return True
Exemplo n.º 4
0
def run_modules_processors(configuration):
    """
    run ModuleProcessor for each modules

    :param configuration: user final configuration
    :return:
    """
    for module in configuration:
        module_processor_thread = Thread(
            target=configuration[module]["module_processor"].processor,
            name=virtual_machine_name_to_container_name(
                configuration[module]["virtual_machine_name"], module))
        module_processor_thread.start()
        processor_threads.append(module_processor_thread)
    return
 def test_vm_to_container_name(self):
     vm_name = "ohp_sshserver"
     module_name = "ssh/weak_password"
     container_name = virtual_machine_name_to_container_name(
         vm_name, module_name)
     self.assertEqual(container_name, "ohp_sshserver_weak_password")