Ejemplo n.º 1
0
    def get_displayed_node_by_id(node_id, for_report=False):
        if ObjectId(node_id) == NodeService.get_monkey_island_pseudo_id():
            return NodeService.get_monkey_island_node()

        new_node = {"id": node_id}

        node = NodeService.get_node_by_id(node_id)
        if node is None:
            monkey = NodeService.get_monkey_by_id(node_id)
            if monkey is None:
                return new_node

            # node is infected
            new_node = NodeService.monkey_to_net_node(monkey, for_report)
            for key in monkey:
                if key not in [
                        '_id', 'modifytime', 'parent', 'dead', 'description'
                ]:
                    new_node[key] = monkey[key]

        else:
            # node is uninfected
            new_node = NodeService.node_to_net_node(node, for_report)
            new_node["ip_addresses"] = node["ip_addresses"]
            new_node["domain_name"] = node["domain_name"]

        accessible_from_nodes = []
        accessible_from_nodes_hostnames = []
        exploits = []

        edges = DisplayedEdgeService.get_displayed_edges_by_dst(
            node_id, for_report)

        for edge in edges:
            from_node_id = edge['from']
            from_node_label = Monkey.get_label_by_id(from_node_id)
            from_node_hostname = Monkey.get_hostname_by_id(from_node_id)

            accessible_from_nodes.append(from_node_label)
            accessible_from_nodes_hostnames.append(from_node_hostname)

            for edge_exploit in edge['exploits']:
                edge_exploit['origin'] = from_node_label
                exploits.append(edge_exploit)

        exploits = sorted(exploits, key=lambda exploit: exploit['timestamp'])

        new_node["exploits"] = exploits
        new_node["accessible_from_nodes"] = accessible_from_nodes
        new_node[
            "accessible_from_nodes_hostnames"] = accessible_from_nodes_hostnames
        if len(edges) > 0:
            new_node["services"] = edges[-1]["services"]
        else:
            new_node["services"] = []

        new_node[
            'has_log'] = monkey_island.cc.services.log.LogService.log_exists(
                ObjectId(node_id))
        return new_node
Ejemplo n.º 2
0
Archivo: node.py Proyecto: wau/monkey
 def monkey_to_net_node(monkey, for_report=False):
     monkey_id = monkey["_id"]
     label = Monkey.get_hostname_by_id(monkey_id) if for_report else Monkey.get_label_by_id(monkey_id)
     monkey_group = NodeService.get_monkey_group(monkey)
     return \
         {
             "id": monkey_id,
             "label": label,
             "group": monkey_group,
             "os": NodeService.get_monkey_os(monkey),
             # The monkey is running IFF the group contains "_running". Therefore it's dead IFF the group does NOT
             # contain "_running". This is a small optimisation, to not call "is_dead" twice.
             "dead": "_running" not in monkey_group,
             "domain_name": "",
             "pba_results": monkey["pba_results"] if "pba_results" in monkey else []
         }