コード例 #1
0
class AttackerEnvironmentPanel(wx.Panel):
    def __init__(self, parent, dp):
        wx.Panel.__init__(self, parent, ATTACKER_PANELENVIRONMENT_ID)
        self.dbProxy = dp
        self.theAttackerId = None
        self.theEnvironmentDictionary = {}
        self.theSelectedIdx = -1

        mainSizer = wx.BoxSizer(wx.HORIZONTAL)
        environmentBox = wx.StaticBox(self)
        environmentListSizer = wx.StaticBoxSizer(environmentBox, wx.HORIZONTAL)
        mainSizer.Add(environmentListSizer, 0, wx.EXPAND)
        self.environmentList = EnvironmentListCtrl(
            self, ATTACKERENVIRONMENT_LISTENVIRONMENTS_ID, self.dbProxy)
        environmentListSizer.Add(self.environmentList, 1, wx.EXPAND)
        environmentDimSizer = wx.BoxSizer(wx.VERTICAL)
        mainSizer.Add(environmentDimSizer, 1, wx.EXPAND)
        rmSizer = wx.BoxSizer(wx.HORIZONTAL)
        environmentDimSizer.Add(rmSizer, 1, wx.EXPAND)
        self.roleList = DimensionListCtrl(self,
                                          ATTACKERENVIRONMENT_LISTROLES_ID,
                                          wx.DefaultSize, 'Role', 'role',
                                          self.dbProxy)
        roleBox = wx.StaticBox(self)
        roleSizer = wx.StaticBoxSizer(roleBox, wx.HORIZONTAL)
        roleSizer.Add(self.roleList, 1, wx.EXPAND)
        rmSizer.Add(roleSizer, 1, wx.EXPAND)

        self.motiveList = DimensionListCtrl(
            self, ATTACKERENVIRONMENT_LISTMOTIVES_ID, wx.DefaultSize, 'Motive',
            'motivation', self.dbProxy)
        motiveBox = wx.StaticBox(self)
        motiveSizer = wx.StaticBoxSizer(motiveBox, wx.HORIZONTAL)
        motiveSizer.Add(self.motiveList, 1, wx.EXPAND)
        rmSizer.Add(motiveSizer, 1, wx.EXPAND)
        capBox = wx.StaticBox(self)
        capSizer = wx.StaticBoxSizer(capBox, wx.HORIZONTAL)
        environmentDimSizer.Add(capSizer, 1, wx.EXPAND)
        self.capabilitiesList = CapabilitiesListCtrl(
            self, ATTACKERENVIRONMENT_LISTCAPABILITIES_ID, self.dbProxy)
        capSizer.Add(self.capabilitiesList, 1, wx.EXPAND)
        self.SetSizer(mainSizer)
        self.environmentList.Bind(wx.EVT_LIST_INSERT_ITEM,
                                  self.OnAddEnvironment)
        self.environmentList.Bind(wx.EVT_LIST_DELETE_ITEM,
                                  self.OnDeleteEnvironment)

    def loadControls(self, attacker):
        self.environmentList.Unbind(wx.EVT_LIST_ITEM_SELECTED)
        self.environmentList.Unbind(wx.EVT_LIST_ITEM_DESELECTED)
        self.theAttackerId = attacker.id()
        environmentNames = []
        for cp in attacker.environmentProperties():
            environmentNames.append(cp.name())
        self.environmentList.load(environmentNames)

        for cp in attacker.environmentProperties():
            environmentName = cp.name()
            self.theEnvironmentDictionary[environmentName] = cp
            environmentNames.append(environmentName)
        environmentName = environmentNames[0]
        p = self.theEnvironmentDictionary[environmentName]
        self.roleList.setEnvironment(environmentName)
        self.roleList.load(p.roles())
        self.motiveList.setEnvironment(environmentName)
        self.motiveList.load(p.motives())
        self.capabilitiesList.setEnvironment(environmentName)
        self.capabilitiesList.load(p.capabilities())
        self.environmentList.Select(0)
        self.environmentList.Bind(wx.EVT_LIST_ITEM_SELECTED,
                                  self.OnEnvironmentSelected)
        self.environmentList.Bind(wx.EVT_LIST_ITEM_DESELECTED,
                                  self.OnEnvironmentDeselected)
        self.theSelectedIdx = 0

    def OnEnvironmentSelected(self, evt):
        self.theSelectedIdx = evt.GetIndex()
        environmentName = self.environmentList.GetItemText(self.theSelectedIdx)
        p = self.theEnvironmentDictionary[environmentName]
        self.roleList.setEnvironment(environmentName)
        self.roleList.load(p.roles())
        self.motiveList.setEnvironment(environmentName)
        self.motiveList.load(p.motives())
        self.capabilitiesList.setEnvironment(environmentName)
        self.capabilitiesList.load(p.capabilities())

    def OnEnvironmentDeselected(self, evt):
        self.theSelectedIdx = evt.GetIndex()
        environmentName = self.environmentList.GetItemText(self.theSelectedIdx)
        self.theEnvironmentDictionary[
            environmentName] = AttackerEnvironmentProperties(
                environmentName, self.roleList.dimensions(),
                self.motiveList.dimensions(),
                self.capabilitiesList.capabilities())

        self.roleList.setEnvironment('')
        self.roleList.DeleteAllItems()
        self.motiveList.setEnvironment('')
        self.motiveList.DeleteAllItems()
        self.capabilitiesList.setEnvironment('')
        self.capabilitiesList.DeleteAllItems()
        self.theSelectedIdx = -1

    def OnAddEnvironment(self, evt):
        self.theSelectedIdx = evt.GetIndex()
        environmentName = self.environmentList.GetItemText(self.theSelectedIdx)
        self.theEnvironmentDictionary[
            environmentName] = AttackerEnvironmentProperties(
                environmentName, [], [], [])
        self.environmentList.Select(self.theSelectedIdx)
        self.capabilitiesList.setEnvironment(environmentName)
        inheritedEnv = self.environmentList.inheritedEnvironment()
        if (inheritedEnv != '' and self.theAttackerId != None):
            p = self.dbProxy.inheritedAttackerProperties(
                self.theAttackerId, inheritedEnv)
            self.theEnvironmentDictionary[environmentName] = p
            self.roleList.setEnvironment(environmentName)
            self.roleList.load(p.roles())
            self.motiveList.setEnvironment(environmentName)
            self.motiveList.load(p.motives())
            self.capabilitiesList.setEnvironment(environmentName)
            self.capabilitiesList.load(p.capabilities())

    def OnDeleteEnvironment(self, evt):
        selectedIdx = evt.GetIndex()
        environmentName = self.environmentList.GetItemText(selectedIdx)
        del self.theEnvironmentDictionary[environmentName]
        self.theSelectedIdx = -1

    def environmentProperties(self):
        if (self.theSelectedIdx != -1):
            environmentName = self.environmentList.GetItemText(
                self.theSelectedIdx)
            self.theEnvironmentDictionary[
                environmentName] = AttackerEnvironmentProperties(
                    environmentName, self.roleList.dimensions(),
                    self.motiveList.dimensions(),
                    self.capabilitiesList.capabilities())
        return self.theEnvironmentDictionary.values()
コード例 #2
0
class RoleEnvironmentPanel(wx.Panel):
    def __init__(self, parent, dp):
        wx.Panel.__init__(self, parent, ROLE_PANELENVIRONMENT_ID)
        self.dbProxy = dp
        self.theEnvironmentDictionary = {}
        self.theSelectedIdx = -1

        mainSizer = wx.BoxSizer(wx.HORIZONTAL)
        environmentBox = wx.StaticBox(self)
        environmentListSizer = wx.StaticBoxSizer(environmentBox, wx.HORIZONTAL)
        mainSizer.Add(environmentListSizer, 0, wx.EXPAND)
        self.environmentList = DimensionListCtrl(self,
                                                 ROLE_LISTENVIRONMENTS_ID,
                                                 wx.DefaultSize,
                                                 'Environment',
                                                 'environment',
                                                 self.dbProxy,
                                                 listStyle=wx.LC_REPORT
                                                 | wx.LC_SINGLE_SEL)
        environmentListSizer.Add(self.environmentList, 1, wx.EXPAND)

        environmentDimSizer = wx.BoxSizer(wx.VERTICAL)
        mainSizer.Add(environmentDimSizer, 1, wx.EXPAND)

        rSizer = wx.BoxSizer(wx.HORIZONTAL)
        environmentDimSizer.Add(rSizer, 1, wx.EXPAND)
        self.responseList = DimensionCostListCtrl(self, ROLE_LISTRESPONSES_ID,
                                                  'Response')
        responseBox = wx.StaticBox(self)
        responseSizer = wx.StaticBoxSizer(responseBox, wx.HORIZONTAL)
        responseSizer.Add(self.responseList, 1, wx.EXPAND)
        rSizer.Add(responseSizer, 1, wx.EXPAND)

        cSizer = wx.BoxSizer(wx.HORIZONTAL)
        environmentDimSizer.Add(cSizer, 1, wx.EXPAND)
        self.cmList = DimensionListCtrl(self,
                                        ROLE_LISTCOUNTERMEASURES_ID,
                                        wx.DefaultSize,
                                        'Countermeasure',
                                        'countermeasure',
                                        self.dbProxy,
                                        listStyle=wx.LC_REPORT
                                        | wx.LC_SINGLE_SEL)
        cmBox = wx.StaticBox(self)
        cmSizer = wx.StaticBoxSizer(cmBox, wx.HORIZONTAL)
        cmSizer.Add(self.cmList, 1, wx.EXPAND)
        cSizer.Add(cmSizer, 1, wx.EXPAND)

        self.SetSizer(mainSizer)
        self.environmentList.Unbind(wx.EVT_RIGHT_DOWN)
        self.responseList.Unbind(wx.EVT_RIGHT_DOWN)
        self.cmList.Unbind(wx.EVT_RIGHT_DOWN)

    def loadControls(self, role):
        self.environmentList.Unbind(wx.EVT_LIST_ITEM_SELECTED)
        self.environmentList.Unbind(wx.EVT_LIST_ITEM_DESELECTED)

        # We load the environment name control before anything else.  Weird stuff happens if we don't do this.  Don't ask me why!!!
        environmentNames = []
        for cp in role.environmentProperties():
            environmentNames.append(cp.name())
        self.environmentList.load(environmentNames)

        for cp in role.environmentProperties():
            environmentName = cp.name()
            self.theEnvironmentDictionary[environmentName] = cp

        if (len(environmentNames) > 0):
            environmentName = environmentNames[0]
            p = self.theEnvironmentDictionary[environmentName]
            self.responseList.load(p.responses())
            self.cmList.load(p.countermeasures())
            self.environmentList.Select(0)
        self.environmentList.Bind(wx.EVT_LIST_ITEM_SELECTED,
                                  self.OnEnvironmentSelected)
        self.environmentList.Bind(wx.EVT_LIST_ITEM_DESELECTED,
                                  self.OnEnvironmentDeselected)
        self.theSelectedIdx = 0

    def OnEnvironmentSelected(self, evt):
        self.theSelectedIdx = evt.GetIndex()
        environmentName = self.environmentList.GetItemText(self.theSelectedIdx)
        p = self.theEnvironmentDictionary[environmentName]
        self.responseList.load(p.responses())
        self.cmList.load(p.countermeasures())

    def OnEnvironmentDeselected(self, evt):
        self.responseList.DeleteAllItems()
        self.cmList.DeleteAllItems()
        self.theSelectedIdx = -1
コード例 #3
0
class MitigateEnvironmentPanel(wx.Panel):
    def __init__(self, parent, dp):
        wx.Panel.__init__(self, parent, armid.MITIGATE_PANELENVIRONMENT_ID)
        self.theResponsePanel = parent
        self.dbProxy = dp
        self.theEnvironmentDictionary = {}
        self.theSelectedIdx = -1

        mainSizer = wx.BoxSizer(wx.HORIZONTAL)
        environmentBox = wx.StaticBox(self)
        environmentListSizer = wx.StaticBoxSizer(environmentBox, wx.HORIZONTAL)
        mainSizer.Add(environmentListSizer, 0, wx.EXPAND)
        self.environmentList = RiskEnvironmentListCtrl(
            self, armid.MITIGATE_LISTENVIRONMENTS_ID, self.dbProxy)
        environmentListSizer.Add(self.environmentList, 1, wx.EXPAND)
        environmentDimSizer = wx.BoxSizer(wx.VERTICAL)
        mainSizer.Add(environmentDimSizer, 1, wx.EXPAND)

        typeBox = wx.StaticBox(self, -1, 'Type')
        typeBoxSizer = wx.StaticBoxSizer(typeBox, wx.HORIZONTAL)
        environmentDimSizer.Add(typeBoxSizer, 0, wx.EXPAND)
        self.typeCombo = wx.ComboBox(
            self,
            armid.MITIGATE_COMBOTYPE_ID,
            "",
            choices=['Deter', 'Prevent', 'Detect', 'React'],
            style=wx.CB_READONLY)
        typeBoxSizer.Add(self.typeCombo, 1, wx.EXPAND)

        pointBox = wx.StaticBox(self, -1, 'Detection Point')
        pointBoxSizer = wx.StaticBoxSizer(pointBox, wx.HORIZONTAL)
        environmentDimSizer.Add(pointBoxSizer, 0, wx.EXPAND)
        self.pointCombo = wx.ComboBox(self,
                                      armid.MITIGATE_COMBODETECTIONPOINT_ID,
                                      "",
                                      choices=['Before', 'At', 'After'],
                                      style=wx.CB_READONLY)
        pointBoxSizer.Add(self.pointCombo, 1, wx.EXPAND)

        dmBox = wx.StaticBox(
            self,
            -1,
        )
        dmBoxSizer = wx.StaticBoxSizer(dmBox, wx.HORIZONTAL)
        environmentDimSizer.Add(dmBoxSizer, 1, wx.EXPAND)
        self.dmList = DimensionListCtrl(self,
                                        armid.MITIGATE_LISTDETMECH_ID,
                                        wx.DefaultSize,
                                        'Detection Mechanism',
                                        'detection_mechanism',
                                        self.dbProxy,
                                        listStyle=wx.LC_REPORT)
        dmBoxSizer.Add(self.dmList, 1, wx.EXPAND)

        self.typeCombo.Disable()
        self.pointCombo.Disable()
        self.dmList.Disable()

        self.SetSizer(mainSizer)
        self.typeCombo.Bind(wx.EVT_COMBOBOX, self.onTypeChange)
        self.environmentList.Bind(wx.EVT_LIST_INSERT_ITEM,
                                  self.OnAddEnvironment)
        self.environmentList.Bind(wx.EVT_LIST_DELETE_ITEM,
                                  self.OnDeleteEnvironment)
        self.environmentList.Bind(wx.EVT_LIST_ITEM_SELECTED,
                                  self.OnEnvironmentSelected)
        self.environmentList.Bind(wx.EVT_LIST_ITEM_DESELECTED,
                                  self.OnEnvironmentDeselected)

    def onTypeChange(self, evt):
        self.activateTypeCtrls()
        mitType = self.typeCombo.GetValue()
        riskCombo = self.theResponsePanel.FindWindowById(
            armid.RESPONSE_COMBORISK_ID)
        riskName = riskCombo.GetValue()
        if (riskName != ''):
            riskNameCtrl = self.theResponsePanel.FindWindowById(
                armid.RESPONSE_TEXTNAME_ID)
            riskNameLabel = mitType + ' ' + riskName
            riskNameCtrl.SetValue(riskNameLabel)

    def activateTypeCtrls(self):
        mitType = self.typeCombo.GetValue()
        if ((mitType == 'Deter') or (mitType == 'Prevent')):
            self.pointCombo.SetValue('')
            self.pointCombo.Disable()
            self.dmList.DeleteAllItems()
            self.dmList.Disable()
        elif (mitType == 'Detect'):
            self.pointCombo.Enable()
            self.dmList.Disable()
        elif (mitType == 'React'):
            self.pointCombo.Disable()
            self.dmList.Enable()

    def loadControls(self, accept):
        self.environmentList.Unbind(wx.EVT_LIST_ITEM_SELECTED)
        self.environmentList.Unbind(wx.EVT_LIST_ITEM_DESELECTED)
        environmentNames = []
        for cp in accept.environmentProperties():
            environmentNames.append(cp.name())
        self.environmentList.load(environmentNames)

        for cp in accept.environmentProperties():
            environmentName = cp.name()
            self.theEnvironmentDictionary[environmentName] = cp
            environmentNames.append(environmentName)
        environmentName = environmentNames[0]
        p = self.theEnvironmentDictionary[environmentName]

        self.typeCombo.SetStringSelection(p.type())
        self.pointCombo.SetStringSelection(p.detectionPoint())
        self.dmList.setEnvironment(environmentName)
        self.dmList.load(p.detectionMechanisms())

        self.environmentList.Select(0)

        self.activateTypeCtrls()
        self.environmentList.Bind(wx.EVT_LIST_ITEM_SELECTED,
                                  self.OnEnvironmentSelected)
        self.environmentList.Bind(wx.EVT_LIST_ITEM_DESELECTED,
                                  self.OnEnvironmentDeselected)
        self.theSelectedIdx = 0

    def OnEnvironmentSelected(self, evt):
        self.theSelectedIdx = evt.GetIndex()
        environmentName = self.environmentList.GetItemText(self.theSelectedIdx)
        p = self.theEnvironmentDictionary[environmentName]

        self.typeCombo.SetStringSelection(p.type())
        self.pointCombo.SetStringSelection(p.detectionPoint())
        self.dmList.setEnvironment(environmentName)
        self.dmList.load(p.detectionMechanisms())
        self.typeCombo.Enable()
        self.activateTypeCtrls()

    def OnEnvironmentDeselected(self, evt):
        self.theSelectedIdx = evt.GetIndex()
        environmentName = self.environmentList.GetItemText(self.theSelectedIdx)
        self.theEnvironmentDictionary[
            environmentName] = MitigateEnvironmentProperties(
                environmentName, self.typeCombo.GetValue(),
                self.pointCombo.GetValue(), self.dmList.dimensions())
        self.typeCombo.SetValue('')
        self.pointCombo.SetValue('')
        self.dmList.setEnvironment('')
        self.dmList.DeleteAllItems()

        self.theSelectedIdx = -1
        self.typeCombo.Disable()
        self.pointCombo.Disable()
        self.dmList.Disable()

    def OnAddEnvironment(self, evt):
        self.theSelectedIdx = evt.GetIndex()
        environmentName = self.environmentList.GetItemText(self.theSelectedIdx)
        self.theEnvironmentDictionary[
            environmentName] = MitigateEnvironmentProperties(environmentName)
        self.typeCombo.SetValue('')
        self.pointCombo.SetValue('')
        self.dmList.setEnvironment(environmentName)
        self.dmList.DeleteAllItems()
        self.environmentList.Select(self.theSelectedIdx)
        self.typeCombo.Enable()

    def OnDeleteEnvironment(self, evt):
        selectedIdx = evt.GetIndex()
        environmentName = self.environmentList.GetItemText(selectedIdx)
        del self.theEnvironmentDictionary[environmentName]
        self.theSelectedIdx = -1

    def environmentProperties(self):
        if (self.theSelectedIdx != -1):
            environmentName = self.environmentList.GetItemText(
                self.theSelectedIdx)
            properties = MitigateEnvironmentProperties(
                environmentName, self.typeCombo.GetValue(),
                self.pointCombo.GetValue(), self.dmList.dimensions())
            self.theEnvironmentDictionary[environmentName] = properties
        for cname in self.environmentList.dimensions():
            p = self.theEnvironmentDictionary[cname]
            mitType = p.type()
            if (len(mitType) == 0):
                exceptionText = 'No mitigation type selected for environment ' + p.name(
                )
                raise ARM.EnvironmentValidationError(exceptionText)
            if (mitType == 'Detect') and (len(p.detectionPoint()) == 0):
                exceptionText = 'No detection point selected for environment ' + p.name(
                )
                raise ARM.EnvironmentValidationError(exceptionText)
            if (mitType == 'React') and (len(p.detectionMechanisms()) == 0):
                exceptionText = 'No detection mechanisms selected for environment ' + p.name(
                )
                raise ARM.EnvironmentValidationError(exceptionText)
        return self.theEnvironmentDictionary.values()

    def setRisk(self, riskName):
        self.environmentList.setRisk(riskName)
コード例 #4
0
class VulnerabilityEnvironmentPanel(wx.Panel):
    def __init__(self, parent, dp):
        wx.Panel.__init__(self, parent,
                          armid.VULNERABILITY_PANELENVIRONMENT_ID)
        self.dbProxy = dp
        self.theVulId = None
        self.theEnvironmentDictionary = {}
        self.theSelectedIdx = -1

        mainSizer = wx.BoxSizer(wx.HORIZONTAL)
        environmentBox = wx.StaticBox(self)
        environmentListSizer = wx.StaticBoxSizer(environmentBox, wx.HORIZONTAL)
        mainSizer.Add(environmentListSizer, 0, wx.EXPAND)
        self.environmentList = EnvironmentListCtrl(
            self, armid.VULNERABILITYENVIRONMENT_LISTENVIRONMENTS_ID,
            self.dbProxy)
        environmentListSizer.Add(self.environmentList, 1, wx.EXPAND)

        environmentDimSizer = wx.BoxSizer(wx.VERTICAL)
        mainSizer.Add(environmentDimSizer, 1, wx.EXPAND)

        sevBox = wx.StaticBox(self)
        sevSizer = wx.StaticBoxSizer(sevBox, wx.HORIZONTAL)
        environmentDimSizer.Add(sevSizer, 0, wx.EXPAND)
        sevSizer.Add(wx.StaticText(self, -1, 'Severity'))
        sevList = ['Negligible', 'Marginal', 'Critical', 'Catastrophic']
        self.sevCtrl = wx.ComboBox(
            self,
            armid.VULNERABILITYENVIRONMENT_COMBOSEVERITY_ID,
            choices=sevList,
            size=wx.DefaultSize,
            style=wx.CB_READONLY)
        sevSizer.Add(self.sevCtrl, 1, wx.EXPAND)

        aSizer = wx.BoxSizer(wx.HORIZONTAL)
        environmentDimSizer.Add(aSizer, 1, wx.EXPAND)
        self.assetList = DimensionListCtrl(
            self, armid.VULNERABILITYENVIRONMENT_LISTASSETS_ID, wx.DefaultSize,
            'Asset', 'asset', self.dbProxy)
        assetBox = wx.StaticBox(self)
        assetSizer = wx.StaticBoxSizer(assetBox, wx.HORIZONTAL)
        assetSizer.Add(self.assetList, 1, wx.EXPAND)
        aSizer.Add(assetSizer, 1, wx.EXPAND)

        self.SetSizer(mainSizer)
        self.environmentList.Bind(wx.EVT_LIST_INSERT_ITEM,
                                  self.OnAddEnvironment)
        self.environmentList.Bind(wx.EVT_LIST_DELETE_ITEM,
                                  self.OnDeleteEnvironment)

    def loadControls(self, vulnerability):
        self.environmentList.Unbind(wx.EVT_LIST_ITEM_SELECTED)
        self.environmentList.Unbind(wx.EVT_LIST_ITEM_DESELECTED)
        self.theVulId = vulnerability.id()
        # We load the environment name control before anything else.  Weird stuff happens if we don't do this.  Don't ask me why!!!
        environmentNames = []
        if (len(vulnerability.environmentProperties()) > 0):
            for cp in vulnerability.environmentProperties():
                environmentNames.append(cp.name())
            self.environmentList.load(environmentNames)
            for cp in vulnerability.environmentProperties():
                environmentName = cp.name()
                self.theEnvironmentDictionary[environmentName] = cp
            environmentName = environmentNames[0]
            p = self.theEnvironmentDictionary[environmentName]
            self.sevCtrl.SetStringSelection(p.severity())
            self.assetList.setEnvironment(environmentName)
            self.assetList.load(p.assets())
            self.environmentList.Select(0)

        self.environmentList.Bind(wx.EVT_LIST_ITEM_SELECTED,
                                  self.OnEnvironmentSelected)
        self.environmentList.Bind(wx.EVT_LIST_ITEM_DESELECTED,
                                  self.OnEnvironmentDeselected)
        self.theSelectedIdx = 0

    def OnEnvironmentSelected(self, evt):
        self.theSelectedIdx = evt.GetIndex()
        environmentName = self.environmentList.GetItemText(self.theSelectedIdx)
        p = self.theEnvironmentDictionary[environmentName]
        self.sevCtrl.SetStringSelection(p.severity())
        self.assetList.setEnvironment(environmentName)
        self.assetList.load(p.assets())

    def OnEnvironmentDeselected(self, evt):
        self.theSelectedIdx = evt.GetIndex()
        environmentName = self.environmentList.GetItemText(self.theSelectedIdx)
        self.theEnvironmentDictionary[
            environmentName] = VulnerabilityEnvironmentProperties(
                environmentName, self.sevCtrl.GetValue(),
                self.assetList.dimensions())
        self.sevCtrl.SetValue('')
        self.assetList.setEnvironment('')
        self.assetList.DeleteAllItems()
        self.theSelectedIdx = -1

    def OnAddEnvironment(self, evt):
        self.theSelectedIdx = evt.GetIndex()
        environmentName = self.environmentList.GetItemText(self.theSelectedIdx)
        self.theEnvironmentDictionary[
            environmentName] = VulnerabilityEnvironmentProperties(
                environmentName, '', [])
        self.environmentList.Select(self.theSelectedIdx)
        self.assetList.setEnvironment(environmentName)
        inheritedEnv = self.environmentList.inheritedEnvironment()
        if (inheritedEnv != '' and self.theVulId != None):
            p = self.dbProxy.inheritedVulnerabilityProperties(
                self.theVulId, inheritedEnv)
            self.theEnvironmentDictionary[environmentName] = p
            self.sevCtrl.SetStringSelection(p.severity())
            self.assetList.setEnvironment(environmentName)
            self.assetList.load(p.assets())

    def OnDeleteEnvironment(self, evt):
        selectedIdx = evt.GetIndex()
        environmentName = self.environmentList.GetItemText(selectedIdx)
        del self.theEnvironmentDictionary[environmentName]
        self.theSelectedIdx = -1

    def environmentProperties(self):
        if (self.theSelectedIdx != -1):
            environmentName = self.environmentList.GetItemText(
                self.theSelectedIdx)
            self.theEnvironmentDictionary[
                environmentName] = VulnerabilityEnvironmentProperties(
                    environmentName, self.sevCtrl.GetValue(),
                    self.assetList.dimensions())
        return self.theEnvironmentDictionary.values()
コード例 #5
0
class ThreatEnvironmentPanel(wx.Panel):
    def __init__(self, parent, dp):
        wx.Panel.__init__(self, parent, armid.THREAT_PANELENVIRONMENT_ID)
        self.dbProxy = dp
        self.theThreatId = None
        self.theEnvironmentDictionary = {}
        self.theSelectedIdx = -1

        mainSizer = wx.BoxSizer(wx.HORIZONTAL)
        environmentBox = wx.StaticBox(self)
        environmentListSizer = wx.StaticBoxSizer(environmentBox, wx.HORIZONTAL)
        mainSizer.Add(environmentListSizer, 0, wx.EXPAND)
        self.environmentList = EnvironmentListCtrl(
            self, armid.THREATENVIRONMENT_LISTENVIRONMENTS_ID, self.dbProxy)
        environmentListSizer.Add(self.environmentList, 1, wx.EXPAND)

        environmentDimSizer = wx.BoxSizer(wx.VERTICAL)
        mainSizer.Add(environmentDimSizer, 1, wx.EXPAND)

        lhoodBox = wx.StaticBox(self)
        lhoodSizer = wx.StaticBoxSizer(lhoodBox, wx.HORIZONTAL)
        environmentDimSizer.Add(lhoodSizer, 0, wx.EXPAND)
        lhoodSizer.Add(wx.StaticText(self, -1, 'Likelihood'))
        lhoodList = [
            'Incredible', 'Improbable', 'Remote', 'Occasional', 'Probable',
            'Frequent'
        ]
        self.lhoodCtrl = wx.ComboBox(
            self,
            armid.THREATENVIRONMENT_COMBOLIKELIHOOD_ID,
            choices=lhoodList,
            size=wx.DefaultSize,
            style=wx.CB_READONLY)
        lhoodSizer.Add(self.lhoodCtrl, 1, wx.EXPAND)

        aaSizer = wx.BoxSizer(wx.HORIZONTAL)
        environmentDimSizer.Add(aaSizer, 1, wx.EXPAND)
        self.attackerList = DimensionListCtrl(
            self, armid.THREATENVIRONMENT_LISTATTACKERS_ID, wx.DefaultSize,
            'Attacker', 'attacker', self.dbProxy)
        attackerBox = wx.StaticBox(self)
        attackerSizer = wx.StaticBoxSizer(attackerBox, wx.HORIZONTAL)
        attackerSizer.Add(self.attackerList, 1, wx.EXPAND)
        aaSizer.Add(attackerSizer, 1, wx.EXPAND)

        self.assetList = DimensionListCtrl(
            self, armid.THREATENVIRONMENT_LISTASSETS_ID, wx.DefaultSize,
            'Asset', 'asset', self.dbProxy)
        assetBox = wx.StaticBox(self)
        assetSizer = wx.StaticBoxSizer(assetBox, wx.HORIZONTAL)
        assetSizer.Add(self.assetList, 1, wx.EXPAND)
        aaSizer.Add(assetSizer, 1, wx.EXPAND)

        propertiesBox = wx.StaticBox(self)
        propertiesSizer = wx.StaticBoxSizer(propertiesBox, wx.HORIZONTAL)
        environmentDimSizer.Add(propertiesSizer, 1, wx.EXPAND)
        values = self.dbProxy.getDimensionNames('threat_value')
        valueLookup = ValueDictionary(values)
        self.propertiesList = PropertiesListCtrl(
            self, armid.THREATENVIRONMENT_LISTPROPERTIES_ID, valueLookup)
        propertiesSizer.Add(self.propertiesList, 1, wx.EXPAND)
        self.SetSizer(mainSizer)
        self.environmentList.Bind(wx.EVT_LIST_INSERT_ITEM,
                                  self.OnAddEnvironment)
        self.environmentList.Bind(wx.EVT_LIST_DELETE_ITEM,
                                  self.OnDeleteEnvironment)

    def loadControls(self, threat):
        self.environmentList.Unbind(wx.EVT_LIST_ITEM_SELECTED)
        self.environmentList.Unbind(wx.EVT_LIST_ITEM_DESELECTED)
        self.theThreatId = threat.id()
        # We load the environment name control before anything else.  Weird stuff happens if we don't do this.  Don't ask me why!!!
        environmentNames = []
        if (len(threat.environmentProperties()) > 0):
            for cp in threat.environmentProperties():
                environmentNames.append(cp.name())
            self.environmentList.load(environmentNames)
            for cp in threat.environmentProperties():
                environmentName = cp.name()
                self.theEnvironmentDictionary[environmentName] = cp
            environmentName = environmentNames[0]
            p = self.theEnvironmentDictionary[environmentName]
            self.lhoodCtrl.SetStringSelection(p.likelihood())
            self.attackerList.setEnvironment(environmentName)
            self.attackerList.load(p.attackers())
            self.assetList.setEnvironment(environmentName)
            self.assetList.load(p.assets())
            self.propertiesList.setEnvironment(environmentName)
            self.propertiesList.load(p.properties(), p.rationale())
            self.environmentList.Select(0)

        self.environmentList.Bind(wx.EVT_LIST_ITEM_SELECTED,
                                  self.OnEnvironmentSelected)
        self.environmentList.Bind(wx.EVT_LIST_ITEM_DESELECTED,
                                  self.OnEnvironmentDeselected)
        self.theSelectedIdx = 0

    def OnEnvironmentSelected(self, evt):
        self.theSelectedIdx = evt.GetIndex()
        environmentName = self.environmentList.GetItemText(self.theSelectedIdx)
        p = self.theEnvironmentDictionary[environmentName]
        self.lhoodCtrl.SetStringSelection(p.likelihood())
        self.attackerList.setEnvironment(environmentName)
        self.attackerList.load(p.attackers())
        self.assetList.setEnvironment(environmentName)
        self.assetList.load(p.assets())
        self.propertiesList.setEnvironment(environmentName)
        self.propertiesList.load(p.properties(), p.rationale())

    def OnEnvironmentDeselected(self, evt):
        self.theSelectedIdx = evt.GetIndex()
        environmentName = self.environmentList.GetItemText(self.theSelectedIdx)
        syProperties, pRationale = self.propertiesList.properties()
        self.theEnvironmentDictionary[
            environmentName] = ThreatEnvironmentProperties(
                environmentName, self.lhoodCtrl.GetValue(),
                self.assetList.dimensions(), self.attackerList.dimensions(),
                syProperties, pRationale)
        self.lhoodCtrl.SetValue('')
        self.attackerList.setEnvironment('')
        self.attackerList.DeleteAllItems()
        self.assetList.setEnvironment('')
        self.assetList.DeleteAllItems()
        self.propertiesList.setEnvironment('')
        self.propertiesList.DeleteAllItems()
        self.theSelectedIdx = -1

    def OnAddEnvironment(self, evt):
        self.theSelectedIdx = evt.GetIndex()
        environmentName = self.environmentList.GetItemText(self.theSelectedIdx)
        self.theEnvironmentDictionary[
            environmentName] = ThreatEnvironmentProperties(
                environmentName, '', [], [], [0, 0, 0, 0, 0, 0, 0, 0], [
                    'None', 'None', 'None', 'None', 'None', 'None', 'None',
                    'None'
                ])
        self.environmentList.Select(self.theSelectedIdx)
        self.attackerList.setEnvironment(environmentName)
        self.assetList.setEnvironment(environmentName)
        self.propertiesList.setEnvironment(environmentName)
        inheritedEnv = self.environmentList.inheritedEnvironment()
        if (inheritedEnv != '' and self.theThreatId != None):
            p = self.dbProxy.inheritedThreatProperties(self.theThreatId,
                                                       inheritedEnv)
            self.theEnvironmentDictionary[environmentName] = p
            self.lhoodCtrl.SetStringSelection(p.likelihood())
            self.attackerList.setEnvironment(environmentName)
            self.attackerList.load(p.attackers())
            self.assetList.setEnvironment(environmentName)
            self.assetList.load(p.assets())
            self.propertiesList.setEnvironment(environmentName)
            self.propertiesList.load(p.properties(), p.rationale())

    def OnDeleteEnvironment(self, evt):
        selectedIdx = evt.GetIndex()
        environmentName = self.environmentList.GetItemText(selectedIdx)
        del self.theEnvironmentDictionary[environmentName]
        self.theSelectedIdx = -1

    def environmentProperties(self):
        if (self.theSelectedIdx != -1):
            environmentName = self.environmentList.GetItemText(
                self.theSelectedIdx)
            syProperties, pRationale = self.propertiesList.properties()
            self.theEnvironmentDictionary[
                environmentName] = ThreatEnvironmentProperties(
                    environmentName, self.lhoodCtrl.GetValue(),
                    self.assetList.dimensions(),
                    self.attackerList.dimensions(), syProperties, pRationale)
        return self.theEnvironmentDictionary.values()