Skip to content

Instantly share code, notes, and snippets.

@blackfist
Created March 20, 2014 19:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save blackfist/9672061 to your computer and use it in GitHub Desktop.
Save blackfist/9672061 to your computer and use it in GitHub Desktop.
import simplejson as sj
import os
from jsonschema import validate, ValidationError
sk = sj.loads(open('verisc.json').read())
enum = sj.loads(open('verisc-enum.json').read())
os.chdir('/Documents/development/python/vcdb/data/json')
# All of the action enumerations
for each in ['hacking','malware','social','error','misuse','physical']:
sk['properties']['action']['properties'][each]['properties']['variety']['items']['enum'] = enum['action'][each]['variety']
sk['properties']['action']['properties'][each]['properties']['vector']['items']['enum'] = enum['action'][each]['vector']
sk['properties']['action']['properties']['environmental']['properties']['variety']['items']['enum'] = enum['action']['environmental']['variety']
sk['properties']['action']['properties']['physical']['properties']['location']['items']['enum'] = enum['action']['physical']['location']
sk['properties']['action']['properties']['social']['properties']['target']['items']['enum'] = enum['action']['social']['target']
# actor enumerations
for each in ['external','internal','partner']:
sk['properties']['actor']['properties'][each]['properties']['motive']['items']['enum'] = enum['actor']['motive']
sk['properties']['actor']['properties']['external']['properties']['variety']['items']['enum'] = enum['actor']['external']['variety']
sk['properties']['actor']['properties']['internal']['properties']['variety']['items']['enum'] = enum['actor']['internal']['variety']
sk['properties']['actor']['properties']['external']['properties']['country']['items']['enum'] = enum['country']
sk['properties']['actor']['properties']['partner']['properties']['country']['items']['enum'] = enum['country']
# asset properties
sk['properties']['asset']['properties']['assets']['items']['properties']['variety']['pattern'] = '|'.join(enum['asset']['variety'])
for each in ['accessibility','cloud','hosting','management','ownership']:
sk['properties']['asset']['properties'][each]['pattern'] = '|'.join(enum['asset'][each])
# attribute properties
sk['properties']['attribute']['properties']['availability']['properties']['variety']['items']['enum'] = enum['attribute']['availability']['variety']
sk['properties']['attribute']['properties']['availability']['properties']['duration']['properties']['unit']['pattern'] = '|'.join(enum['timeline']['unit'])
sk['properties']['attribute']['properties']['confidentiality']['properties']['data']['items']['properties']['variety']['pattern'] = '|'.join(enum['attribute']['confidentiality']['data']['variety'])
sk['properties']['attribute']['properties']['confidentiality']['properties']['data_disclosure']['pattern'] = '|'.join(enum['attribute']['confidentiality']['data_disclosure'])
sk['properties']['attribute']['properties']['confidentiality']['properties']['state']['items']['enum'] = enum['attribute']['confidentiality']['state']
sk['properties']['attribute']['properties']['integrity']['properties']['variety']['items']['enum'] = enum['attribute']['integrity']['variety']
# impact
sk['properties']['impact']['properties']['iso_currency_code']['patter'] = '|'.join(enum['iso_currency_code'])
sk['properties']['impact']['properties']['loss']['items']['properties']['variety']['pattern'] = '|'.join(enum['impact']['loss']['variety'])
sk['properties']['impact']['properties']['loss']['items']['properties']['rating']['pattern'] = '|'.join(enum['impact']['loss']['rating'])
sk['properties']['impact']['properties']['overall_rating']['patter'] = '|'.join(enum['impact']['overall_rating'])
# timeline
for each in ['compromise','containment','discovery','exfiltration']:
sk['properties']['timeline']['properties'][each]['properties']['unit']['pattern'] = '|'.join(enum['timeline']['unit'])
# victim
sk['properties']['victim']['properties']['country']['pattern'] = '|'.join(enum['country'])
sk['properties']['victim']['properties']['employee_count']['pattern'] = '|'.join(enum['victim']['employee_count'])
sk['properties']['victim']['properties']['revenue']['properties']['iso_currency_code']['pattern'] = '|'.join(enum['iso_currency_code'])
# Randoms
for each in ['confidence','cost_corrective_action','discovery_method','security_incident','targeted']:
sk['properties'][each]['pattern'] = '|'.join(enum[each])
for eachFile in os.listdir('.'):
print "Now looking at %s" % eachFile
incident = sj.loads(open(eachFile).read())
try:
validate(incident,sk)
except ValidationError as e:
offendingPath = '.'.join(str(x) for x in e.path)
print "\t %s %s" % (offendingPath,e.message)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment