-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathfacets.py
More file actions
executable file
·126 lines (116 loc) · 4.97 KB
/
facets.py
File metadata and controls
executable file
·126 lines (116 loc) · 4.97 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#!/usr/bin/env python
#
#The MIT License (MIT)
#
# Copyright (c) 2015 Bit9 + Carbon Black
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
#
# -----------------------------------------------------------------------------
# The purpose of this script is to get the smallest frequency or percentage of a given process
# child processes. Once you specify less than x percentage it will walk that process
# all the way down.
#
#
# last updated 2015-11-23
#
import sys
import struct
import socket
import json
import pprint
from optparse import OptionParser
# in the github repo, cbapi is not in the example directory
sys.path.append('../src/cbapi')
from cbapi import CbApi
#this is the size of the data returned
pagesize=20
def build_cli_parser():
parser = OptionParser(usage="%prog [options]", description="Allows for the ability to check the frequency of child process based on a given parent process")
# for each supported output type, add an option
parser.add_option("-c", "--cburl", action="store", default=None, dest="server",
help="CB server's URL. e.g., http://127.0.0.1 ")
parser.add_option("-p", "--percentage", action="store", default="2", dest="percentless",
help="Max Percentage of Term Frequency e.g., 2 ")
parser.add_option("-a", "--apitoken", action="store", default=None, dest="token",
help="API Token for Carbon Black server")
parser.add_option("-q", "--query", action="store", default=None, dest="query",
help="Comma separated list of parent processes to get term frequency")
parser.add_option("-n", "--no-ssl-verify", action="store_false", default=True, dest="ssl_verify",
help="Do not verify server SSL certificate.")
return parser
def getchildprocs(results):
for b in results:
bst, bid, bmd5, bpath, bpid, bcom, bblah = b.split("|")
q = 'process_id:%s' % (bid)
if "true" == bcom:
cdata = cb.process_search(q, start=0)
for c in cdata['results']:
getproc(c['id'],c['segment_id'])
def getproc( procid, procseg):
procdata = cb.process_events(procid,procseg)
bprocess = procdata['process']
myrow.append(bprocess["id"])
if bprocess.has_key("cmdline"):
cmdline = bprocess["cmdline"]
else:
cmdline = ""
myrow.append(cmdline)
if bprocess.has_key("childproc_complete"):
getchildprocs(bprocess['childproc_complete'])
parser = build_cli_parser()
opts, args = parser.parse_args(sys.argv[1:])
if not opts.server or not opts.token or not opts.query or not opts.percentless:
print "Missing required param."
sys.exit(-1)
cb = CbApi(opts.server, ssl_verify=opts.ssl_verify, token=opts.token)
start = 0
data = cb.process_search(opts.query, rows=1, start=start)
facetterms = data['facets']
pprint.pprint(facetterms)
'''
for term in reversed(facetterms['process_name']):
termratio = int(float(term['ratio']))
if int(opts.percentless) >= termratio:
start = 0
while True:
q = "parent_name:%s AND process_name:%s" % (proc,term['name'])
data = cb.process_search(q , rows=int(pagesize), start=start)
if 0 == len(data['results']):
break
for a in data['results']:
myrow = []
parent = proc
hostname = a["hostname"]
username = a["username"]
id = a['id']
segid = a['segment_id']
idurl = "%s/#analyze/%s/%s" % (opts.server, id, segid)
myrow.append(parent)
myrow.append(term['name'])
myrow.append(str(term['value']))
myrow.append(str(term['ratio']))
myrow.append(q)
myrow.append(hostname)
myrow.append(username)
myrow.append(idurl)
getproc(a['id'],a['segment_id'])
print "'"+"','".join(myrow)+"'"
start = start + int(pagesize)
'''