コード例 #1
0
ファイル: messagedetails.py プロジェクト: chifflier/prewikka
    def render(self, root):
        entries = _Element.render(self, root)
        value = self._alert.get("%s.data" % root, escape=False)
        if self._alert["%s.type" % root] == "byte-string":
            value = utils.hexdump(value)
        entries.append({"name": "Data", "value": value})

        return entries
コード例 #2
0
ファイル: messagesummary.py プロジェクト: 4sp1r3/prewikka
    def buildAdditionalData(self, alert, ignore=[], ignored={}, ip_options=[], tcp_options=[]):
        self.beginSection(_("Additional data"))

        self.beginTable()
        self.newTableCol(0, _("Meaning"), header=True)
        self.newTableCol(0, _("Value"), header=True)

        index = 1
        for ad in alert["additional_data"]:
            value = None
            meaning = ad["meaning"]

            if meaning == "ip_option_code":
                ip_options.append((ad["data"], 0, None))
                ignored[meaning] = ""

            if meaning == "ip_option_data":
                data = ad["data"]
                ip_options[-1] = (ip_options[-1][0], len(data), data)
                ignored[meaning] = ""

            if meaning == "tcp_option_code":
                tcp_options.append((ad["data"], 0, None))
                ignored[meaning] = ""

            if meaning == "tcp_option_data":
                data = ad["data"]
                tcp_options[-1] = (tcp_options[-1][0], len(data), data)
                ignored[meaning] = ""

            if ad["data"] != None:
                value = ad["data"]
                if ad["type"] == "byte-string" and meaning != "payload":
                    value = utils.hexdump(value)

            for field in ignore:
                if meaning != None and meaning == field[0]:
                    ignored[meaning] = value
                    break

            links = []
            for url, text in env.hookmgr.trigger("HOOK_ALERTSUMMARY_MEANING_LINK", alert, meaning, value):
                if url:
                    links.append("- <a target='%s' href='%s'>%s</a>" % \
                                 (env.external_link_target, url, text))

            if links:
                meaning = "<a class='popup_menu_toggle'>%s</a><span class='popup_menu'>%s</span>" % \
                          (meaning, "<br/>".join(links))

            if not ignored.has_key(meaning):
                self.newTableCol(index, meaning or "Data content")
                self.newTableCol(index, utils.escape_html_string(value) if value is not None else None)
                index += 1

        self.endTable()
        self.endSection()
コード例 #3
0
ファイル: messagesummary.py プロジェクト: chifflier/prewikka
    def buildAdditionalData(self, alert, ignore=[], ignored={}, ip_options=[], tcp_options=[]):
        self.beginSection(_("Additional data"))

        self.beginTable()
        self.newTableCol(0, _("Meaning"), header=True)
        self.newTableCol(0, _("Value"), header=True)

        index = 1
        for ad in alert["additional_data"]:
            value = None
            meaning = ad["meaning"]

            if meaning == "ip_option_code":
                ip_options.append((ad["data"], 0, None))
                ignored[meaning] = ""

            if meaning == "ip_option_data":
                data = ad["data"]
                ip_options[-1] = (ip_options[-1][0], len(data), data)
                ignored[meaning] = ""

            if meaning == "tcp_option_code":
                tcp_options.append((ad["data"], 0, None))
                ignored[meaning] = ""

            if meaning == "tcp_option_data":
                data = ad["data"]
                tcp_options[-1] = (tcp_options[-1][0], len(data), data)
                ignored[meaning] = ""

            if ad["data"] != None:
                if ad["type"] == "byte-string":
                    value = ad.get("data", htmlsafe=False)
                    if meaning != "payload":
                        value = utils.hexdump(value)
                else:
                    value = ad.get("data")
                    if isinstance(value, str):
                        value = utils.toUnicode(value)

            for field in ignore:
                if meaning != None and meaning == field[0]:
                    ignored[meaning] = value
                    break

            if not ignored.has_key(meaning):
                self.newTableCol(index, meaning or "Data content")
                self.newTableCol(index, value)
                index += 1

        self.endTable()
        self.endSection()
コード例 #4
0
ファイル: messagesummary.py プロジェクト: 4sp1r3/prewikka
    def render(self):
        criteria = getUriCriteria(self.parameters)
        if criteria is not None:
            ident = env.idmef_db.getAlertIdents(criteria)[0]
        else:
            ident = self.parameters["ident"]

        alert = env.idmef_db.getAlert(ident, htmlsafe=True)["alert"]
        self.dataset["sections"] = [ ]

        self.beginSection(self.getSectionName(alert))

        self.buildTime(alert)

        self.beginTable()
        self.newTableEntry(_("MessageID"), alert["messageid"])
        self.endTable()

        self.beginTable()
        self.buildClassification(alert)
        self.buildImpact(alert)
        self.endTable()

        self.beginSection(_("Actions"))
        for action in alert["assessment.action"]:
            self.buildAction(action)
        self.endSection()

        self.buildCorrelationAlert(alert)
        self.buildToolAlert(alert)
        self.buildReference(alert)

        self.beginSection(_("Analyzer #%d") % (len(alert["analyzer"]) - 1))
        self.buildAnalyzer(alert["analyzer(-1)"])

        self.buildAnalyzerList(alert)
        self.endSection()

        self.endSection()

        self.buildSourceTarget(alert)

        ip = self.buildIpHeaderTable(alert)
        tcp = self.buildTcpHeaderTable(alert)
        udp = self.buildUdpHeaderTable(alert)
        icmp = self.buildIcmpHeaderTable(alert)
        data = self.buildPayloadTable(alert)

        ignored_value = {}
        ip_options = []
        tcp_options = []

        group = ip.field_list + tcp.field_list + udp.field_list + icmp.field_list + data.field_list
        self.buildAdditionalData(alert, ignore=group, ignored=ignored_value, ip_options=ip_options, tcp_options=tcp_options)

        if len(ignored_value.keys()) > 0:
            def blah(b):
                if b >= 32 and b < 127:
                    return chr(b)
                else:
                    return "."

            self.beginSection(_("Network centric information"))

            self.beginTable(cl="message_summary_no_border")
            ip.render_table(self, "IP", ignored_value)
            self.ipOptionRender(ip_options)

            tcp.render_table(self, "TCP", ignored_value)
            self.tcpOptionRender(tcp_options)

            udp.render_table(self, "UDP", ignored_value)
            icmp.render_table(self, "ICMP", ignored_value)

            if ignored_value.has_key("payload"):
                val = {}

                payload = utils.escape_html_string(utils.hexdump(ignored_value["payload"])).replace(" ", "&nbsp;")
                val["payload"] = "<span class='fixed'>%s</span>" % payload
                data.render_table(self, _("Payload"), val)

                val["payload"] = "<div style='overflow: auto;'>%s</div>" % utils.escape_html_string(ignored_value["payload"]).replace("\n", "<br/>")
                data.render_table(self, _("ASCII Payload"), val)

            self.endTable()
            self.endSection()
コード例 #5
0
    def buildAdditionalData(self,
                            alert,
                            ignore=[],
                            ignored={},
                            ip_options=[],
                            tcp_options=[]):
        self.beginSection(_("Additional data"))

        self.beginTable()
        self.newTableCol(0, _("Meaning"), header=True)
        self.newTableCol(0, _("Value"), header=True)

        index = 1
        for ad in alert["additional_data"]:
            value = None
            meaning = ad["meaning"]

            if meaning == "ip_option_code":
                ip_options.append((ad["data"], 0, None))
                ignored[meaning] = ""

            if meaning == "ip_option_data":
                data = ad["data"]
                ip_options[-1] = (ip_options[-1][0], len(data), data)
                ignored[meaning] = ""

            if meaning == "tcp_option_code":
                tcp_options.append((ad["data"], 0, None))
                ignored[meaning] = ""

            if meaning == "tcp_option_data":
                data = ad["data"]
                tcp_options[-1] = (tcp_options[-1][0], len(data), data)
                ignored[meaning] = ""

            if ad["data"] != None:
                value = ad["data"]
                if ad["type"] == "byte-string" and meaning != "payload":
                    value = utils.hexdump(value)

            for field in ignore:
                if meaning != None and meaning == field[0]:
                    ignored[meaning] = value
                    break

            links = []
            for url, text in hookmanager.trigger(
                    "HOOK_ALERTSUMMARY_MEANING_LINK", alert, meaning, value):
                if url:
                    links.append("<a target='%s' href='%s'>%s</a>" % \
                                 (env.external_link_target, html.escape(url), html.escape(text)))

            if links:
                meaning = "<a class='popup_menu_toggle'>%s</a><span class='popup_menu'>%s</span>" % \
                          (html.escape(meaning), "".join(links))

            if not meaning in ignored:
                self.newTableCol(
                    index, resource.HTMLSource(meaning or "Data content"))
                self.newTableCol(index, html.escape(value) if value else None)
                index += 1

        self.endTable()
        self.endSection()
コード例 #6
0
    def render(self, analyzerid=None, messageid=None):
        MessageSummary.render(self)

        alert = env.dataprovider.get(
            getUriCriteria("alert", analyzerid, messageid))[0]["alert"]

        env.request.dataset["sections"] = []

        self.beginSection(self.getSectionName(alert))

        self.buildTime(alert)

        self.beginTable()
        self.newTableEntry(_("MessageID"), alert["messageid"])
        self.endTable()

        self.beginTable()
        self.buildClassification(alert)
        self.buildImpact(alert)
        self.endTable()

        self.beginSection(_("Actions"))
        for action in alert["assessment.action"]:
            self.buildAction(action)
        self.endSection()

        self.buildCorrelationAlert(alert)
        self.buildToolAlert(alert)
        self.buildReference(alert)

        self.beginSection(_("Analyzer #%d") % (len(alert["analyzer"]) - 1))
        self.buildAnalyzer(alert["analyzer(-1)"])

        self.buildAnalyzerList(alert)
        self.endSection()

        self.endSection()

        self.buildSourceTarget(alert)

        ip = self.buildIpHeaderTable(alert)
        tcp = self.buildTcpHeaderTable(alert)
        udp = self.buildUdpHeaderTable(alert)
        icmp = self.buildIcmpHeaderTable(alert)
        data = self.buildPayloadTable(alert)

        ignored_value = {}
        ip_options = []
        tcp_options = []

        group = ip.field_list + tcp.field_list + udp.field_list + icmp.field_list + data.field_list
        self.buildAdditionalData(alert,
                                 ignore=group,
                                 ignored=ignored_value,
                                 ip_options=ip_options,
                                 tcp_options=tcp_options)

        if len(ignored_value.keys()) > 0:

            def blah(b):
                if b >= 32 and b < 127:
                    return chr(b)
                else:
                    return "."

            self.beginSection(_("Network centric information"))

            self.beginTable(cl="table-borderless")
            ip.render_table(self, "IP", ignored_value)
            self.ipOptionRender(ip_options)

            tcp.render_table(self, "TCP", ignored_value)
            self.tcpOptionRender(tcp_options)

            udp.render_table(self, "UDP", ignored_value)
            icmp.render_table(self, "ICMP", ignored_value)

            if "payload" in ignored_value:
                val = {}

                payload = html.escape(utils.hexdump(
                    ignored_value["payload"])).replace(
                        " ", resource.HTMLSource("&nbsp;"))
                val["payload"] = resource.HTMLSource(
                    "<span class='fixed'>%s</span>" % payload)
                data.render_table(self, _("Payload"), val)

                pset = set(string.printable)
                payload = ''.join((i if i in pset else '.'
                                   for i in ignored_value["payload"]))
                val["payload"] = resource.HTMLSource(
                    "<div style='overflow: auto;'>%s</div>" %
                    html.escape(payload).replace("\n",
                                                 resource.HTMLSource("<br/>")))
                data.render_table(self, _("ASCII Payload"), val)

            self.endTable()
            self.endSection()
コード例 #7
0
    def buildAdditionalData(self, msg, ptype, ignore=[], ignored={}, ip_options=[], tcp_options=[]):
        self.beginSection(_("Additional data"))

        self.beginTable()
        self.newTableCol(0, _("Meaning"), header=True)
        self.newTableCol(0, _("Value"), header=True)

        index = 1
        for ad in msg["additional_data"]:
            value = None
            meaning = ad["meaning"]

            if meaning == "ip_option_code":
                ip_options.append((ad["data"], 0, None))
                ignored[meaning] = ""

            if meaning == "ip_option_data":
                data = ad["data"]
                ip_options[-1] = (ip_options[-1][0], len(data), data)
                ignored[meaning] = ""

            if meaning == "tcp_option_code":
                tcp_options.append((ad["data"], 0, None))
                ignored[meaning] = ""

            if meaning == "tcp_option_data":
                data = ad["data"]
                tcp_options[-1] = (tcp_options[-1][0], len(data), data)
                ignored[meaning] = ""

            if ad["data"] is not None:
                value = ad["data"]
                if ad["type"] == "byte-string" and meaning != "payload":
                    value = html.escape(utils.hexdump(value)).replace(" ", resource.HTMLSource("&nbsp;"))
                    value = resource.HTMLSource("<span class='fixed'>%s</span>" % value)

            for field in ignore:
                if meaning is not None and meaning == field[0]:
                    ignored[meaning] = value
                    break

            links = resource.HTMLSource()
            for obj in filter(None, hookmanager.trigger("HOOK_%sSUMMARY_MEANING_LINK" % ptype.upper(), msg, meaning, value)):
                links += obj

            if links:
                meaning = resource.HTMLNode("a", meaning, **{
                    "data-toggle": "popover",
                    "data-placement": "bottom",
                    "data-html": "true",
                    "data-content": '<span class="popup-menu">%s</span>' % links,
                    "data-template": POPOVER_HTML,
                })

            if meaning not in ignored:
                self.newTableCol(index, resource.HTMLSource(meaning or "Data content"))
                self.newTableCol(index, html.escape(value) if value is not None else None)
                index += 1

        self.endTable()
        self.endSection()