@mitre/hdf-converters 2.6.49 → 2.6.54
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -17
- package/lib/index.d.ts +2 -0
- package/lib/index.js +2 -0
- package/lib/index.js.map +1 -1
- package/lib/package.json +3 -3
- package/lib/src/ckl-mapper/checklist-jsonix-converter.d.ts +72 -0
- package/lib/src/ckl-mapper/checklist-jsonix-converter.js +123 -0
- package/lib/src/ckl-mapper/checklist-jsonix-converter.js.map +1 -0
- package/lib/src/ckl-mapper/checklist-mapper.d.ts +19 -0
- package/lib/src/ckl-mapper/checklist-mapper.js +292 -0
- package/lib/src/ckl-mapper/checklist-mapper.js.map +1 -0
- package/lib/src/ckl-mapper/jsonixMapping.d.ts +110 -0
- package/lib/src/ckl-mapper/jsonixMapping.js +586 -0
- package/lib/src/ckl-mapper/jsonixMapping.js.map +1 -0
- package/lib/src/converters-from-hdf/splunk/reverse-splunk-mapper.d.ts +8 -20
- package/lib/src/converters-from-hdf/splunk/reverse-splunk-mapper.js +77 -121
- package/lib/src/converters-from-hdf/splunk/reverse-splunk-mapper.js.map +1 -1
- package/lib/src/conveyor-mapper.d.ts +14 -0
- package/lib/src/conveyor-mapper.js +188 -0
- package/lib/src/conveyor-mapper.js.map +1 -0
- package/lib/src/dbprotect-mapper.d.ts +5 -2
- package/lib/src/dbprotect-mapper.js +21 -20
- package/lib/src/dbprotect-mapper.js.map +1 -1
- package/lib/src/jsonix-converter.d.ts +5 -0
- package/lib/src/jsonix-converter.js +16 -0
- package/lib/src/jsonix-converter.js.map +1 -0
- package/lib/src/jsonix-intermediate-converter.d.ts +4 -0
- package/lib/src/jsonix-intermediate-converter.js +8 -0
- package/lib/src/jsonix-intermediate-converter.js.map +1 -0
- package/lib/src/splunk-mapper.d.ts +13 -12
- package/lib/src/splunk-mapper.js +110 -99
- package/lib/src/splunk-mapper.js.map +1 -1
- package/lib/src/utils/fingerprinting.d.ts +2 -0
- package/lib/src/utils/fingerprinting.js +9 -0
- package/lib/src/utils/fingerprinting.js.map +1 -1
- package/lib/src/utils/splunk-tools.d.ts +5 -0
- package/lib/src/utils/splunk-tools.js +73 -0
- package/lib/src/utils/splunk-tools.js.map +1 -0
- package/lib/types/splunk-config-types.d.ts +13 -0
- package/lib/types/splunk-config-types.js +3 -0
- package/lib/types/splunk-config-types.js.map +1 -0
- package/lib/{src/converters-from-hdf/splunk → types}/splunk-control-types.d.ts +1 -1
- package/lib/types/splunk-control-types.js.map +1 -0
- package/lib/{src/converters-from-hdf/splunk → types}/splunk-profile-types.d.ts +1 -1
- package/lib/types/splunk-profile-types.js.map +1 -0
- package/lib/types/splunk-report-types.js.map +1 -0
- package/package.json +3 -3
- package/lib/src/converters-from-hdf/splunk/splunk-control-types.js.map +0 -1
- package/lib/src/converters-from-hdf/splunk/splunk-profile-types.js.map +0 -1
- package/lib/src/converters-from-hdf/splunk/splunk-report-types.js.map +0 -1
- /package/lib/{src/converters-from-hdf/splunk → types}/splunk-control-types.js +0 -0
- /package/lib/{src/converters-from-hdf/splunk → types}/splunk-profile-types.js +0 -0
- /package/lib/{src/converters-from-hdf/splunk → types}/splunk-report-types.d.ts +0 -0
- /package/lib/{src/converters-from-hdf/splunk → types}/splunk-report-types.js +0 -0
|
@@ -8,6 +8,7 @@ const inspecjs_1 = require("inspecjs");
|
|
|
8
8
|
const lodash_1 = __importDefault(require("lodash"));
|
|
9
9
|
const package_json_1 = require("../package.json");
|
|
10
10
|
const base_converter_1 = require("./base-converter");
|
|
11
|
+
const global_1 = require("./utils/global");
|
|
11
12
|
const IMPACT_MAPPING = new Map([
|
|
12
13
|
['high', 0.7],
|
|
13
14
|
['medium', 0.5],
|
|
@@ -88,55 +89,49 @@ function idToString(id) {
|
|
|
88
89
|
}
|
|
89
90
|
}
|
|
90
91
|
class DBProtectMapper extends base_converter_1.BaseConverter {
|
|
91
|
-
constructor(dbProtectXml) {
|
|
92
|
+
constructor(dbProtectXml, withRaw = false) {
|
|
92
93
|
super(compileFindings((0, base_converter_1.parseXml)(dbProtectXml)));
|
|
93
94
|
this.mappings = {
|
|
94
95
|
platform: {
|
|
95
96
|
name: 'Heimdall Tools',
|
|
96
|
-
release: package_json_1.version
|
|
97
|
-
target_id: ''
|
|
97
|
+
release: package_json_1.version
|
|
98
98
|
},
|
|
99
99
|
version: package_json_1.version,
|
|
100
|
-
statistics: {
|
|
101
|
-
duration: null
|
|
102
|
-
},
|
|
100
|
+
statistics: {},
|
|
103
101
|
profiles: [
|
|
104
102
|
{
|
|
105
103
|
name: { path: 'data.[0].Policy' },
|
|
106
|
-
version: '',
|
|
107
104
|
title: { path: 'data.[0].Job Name' },
|
|
108
|
-
maintainer: null,
|
|
109
105
|
summary: { path: 'data.[0]', transformer: formatSummary },
|
|
110
|
-
license: null,
|
|
111
|
-
copyright: null,
|
|
112
|
-
copyright_email: null,
|
|
113
106
|
supports: [],
|
|
114
107
|
attributes: [],
|
|
115
|
-
depends: [],
|
|
116
108
|
groups: [],
|
|
117
109
|
status: 'loaded',
|
|
118
110
|
controls: [
|
|
119
111
|
{
|
|
120
112
|
path: 'data',
|
|
121
113
|
key: 'id',
|
|
122
|
-
|
|
114
|
+
tags: {
|
|
115
|
+
nist: global_1.DEFAULT_STATIC_CODE_ANALYSIS_NIST_TAGS,
|
|
116
|
+
cci: (0, global_1.getCCIsForNISTTags)(global_1.DEFAULT_STATIC_CODE_ANALYSIS_NIST_TAGS)
|
|
117
|
+
},
|
|
118
|
+
refs: [],
|
|
119
|
+
source_location: {},
|
|
123
120
|
title: { path: 'Check' },
|
|
121
|
+
id: { path: 'Check ID', transformer: idToString },
|
|
124
122
|
desc: { transformer: formatDesc },
|
|
125
123
|
impact: {
|
|
126
124
|
path: 'Risk DV',
|
|
127
125
|
transformer: (0, base_converter_1.impactMapping)(IMPACT_MAPPING)
|
|
128
126
|
},
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
source_location: {},
|
|
133
|
-
code: '',
|
|
127
|
+
code: {
|
|
128
|
+
transformer: (vulnerability) => JSON.stringify(vulnerability, null, 2)
|
|
129
|
+
},
|
|
134
130
|
results: [
|
|
135
131
|
{
|
|
136
132
|
arrayTransformer: handleBacktrace,
|
|
137
133
|
status: { path: 'Result Status', transformer: getStatus },
|
|
138
134
|
code_desc: { path: 'Details' },
|
|
139
|
-
run_time: 0,
|
|
140
135
|
start_time: { path: 'Date' },
|
|
141
136
|
backtrace: [{ path: 'Result Status', transformer: getBacktrace }]
|
|
142
137
|
}
|
|
@@ -145,8 +140,14 @@ class DBProtectMapper extends base_converter_1.BaseConverter {
|
|
|
145
140
|
],
|
|
146
141
|
sha256: ''
|
|
147
142
|
}
|
|
148
|
-
]
|
|
143
|
+
],
|
|
144
|
+
passthrough: {
|
|
145
|
+
transformer: (data) => {
|
|
146
|
+
return { ...(this.withRaw && { raw: data }) };
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
149
|
};
|
|
150
|
+
this.withRaw = withRaw;
|
|
150
151
|
}
|
|
151
152
|
}
|
|
152
153
|
exports.DBProtectMapper = DBProtectMapper;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dbprotect-mapper.js","sourceRoot":"","sources":["../../src/dbprotect-mapper.ts"],"names":[],"mappings":";;;;;;AAAA,uCAAkC;AAClC,oDAAuB;AACvB,kDAAgE;AAChE,qDAM0B;
|
|
1
|
+
{"version":3,"file":"dbprotect-mapper.js","sourceRoot":"","sources":["../../src/dbprotect-mapper.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.JsonixConverter = void 0;
|
|
4
|
+
const jsonix_1 = require("@mitre/jsonix");
|
|
5
|
+
class JsonixConverter {
|
|
6
|
+
constructor(xmlString) {
|
|
7
|
+
this.xmlString = xmlString;
|
|
8
|
+
}
|
|
9
|
+
toJsonix(mapping) {
|
|
10
|
+
const context = new jsonix_1.Jsonix.Context([mapping]);
|
|
11
|
+
const unmarshaller = context.createUnmarshaller();
|
|
12
|
+
return unmarshaller.unmarshalString(this.xmlString);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
exports.JsonixConverter = JsonixConverter;
|
|
16
|
+
//# sourceMappingURL=jsonix-converter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsonix-converter.js","sourceRoot":"","sources":["../../src/jsonix-converter.ts"],"names":[],"mappings":";;;AAAA,0CAAqC;AAErC,MAAsB,eAAe;IAGnC,YAAY,SAAiB;QAC3B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED,QAAQ,CAAC,OAAgC;QACvC,MAAM,OAAO,GAAG,IAAI,eAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9C,MAAM,YAAY,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;QAClD,OAAO,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAM,CAAC;IAC3D,CAAC;CACF;AAZD,0CAYC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.JsonixIntermediateConverter = void 0;
|
|
4
|
+
const jsonix_converter_1 = require("./jsonix-converter");
|
|
5
|
+
class JsonixIntermediateConverter extends jsonix_converter_1.JsonixConverter {
|
|
6
|
+
}
|
|
7
|
+
exports.JsonixIntermediateConverter = JsonixIntermediateConverter;
|
|
8
|
+
//# sourceMappingURL=jsonix-intermediate-converter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsonix-intermediate-converter.js","sourceRoot":"","sources":["../../src/jsonix-intermediate-converter.ts"],"names":[],"mappings":";;;AAAA,yDAAmD;AAEnD,MAAsB,2BAGpB,SAAQ,kCAAkB;CAG3B;AAND,kEAMC"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { AxiosInstance } from 'axios';
|
|
2
2
|
import { ExecJSON } from 'inspecjs';
|
|
3
3
|
import { Logger } from 'winston';
|
|
4
|
-
import { SplunkConfig } from '
|
|
4
|
+
import { SplunkConfig } from '../types/splunk-config-types';
|
|
5
|
+
import { SplunkReport } from '../types/splunk-report-types';
|
|
5
6
|
export declare type Hash<T> = {
|
|
6
7
|
[key: string]: T;
|
|
7
8
|
};
|
|
@@ -19,9 +20,9 @@ export declare type FileMetaData = {
|
|
|
19
20
|
profile_sha256: string;
|
|
20
21
|
[key: string]: never[] | unknown;
|
|
21
22
|
};
|
|
22
|
-
export declare function
|
|
23
|
-
export declare function
|
|
24
|
-
export declare function
|
|
23
|
+
export declare function groupBy<T>(items: Array<T>, keyGetter: (v: T) => string): Hash<Array<T>>;
|
|
24
|
+
export declare function mapHash<T, G>(old: Hash<T>, mapFunction: (v: T) => G): Hash<G>;
|
|
25
|
+
export declare function consolidatePayloads(payloads: SplunkReport[]): ExecJSON.Execution[];
|
|
25
26
|
export declare function replaceKeyValueDescriptions(controls: (ExecJSON.Control & GenericPayloadWithMetaData & {
|
|
26
27
|
descriptions?: {
|
|
27
28
|
[key: string]: string;
|
|
@@ -31,17 +32,17 @@ export declare function replaceKeyValueDescriptions(controls: (ExecJSON.Control
|
|
|
31
32
|
[key: string]: string;
|
|
32
33
|
} | undefined;
|
|
33
34
|
})[];
|
|
34
|
-
export declare function checkSplunkCredentials(config: SplunkConfig, webCompatibility: boolean): Promise<boolean>;
|
|
35
35
|
export declare class SplunkMapper {
|
|
36
36
|
config: SplunkConfig;
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
constructor(config: SplunkConfig,
|
|
40
|
-
createJob(query: string): Promise<
|
|
37
|
+
axiosInstance: AxiosInstance;
|
|
38
|
+
hostname: string;
|
|
39
|
+
constructor(config: SplunkConfig, logService?: Logger, loggingLevel?: string);
|
|
40
|
+
createJob(query: string): Promise<string>;
|
|
41
|
+
trackJob(job: string): Promise<void>;
|
|
41
42
|
parseSplunkResponse(query: string, results: {
|
|
42
43
|
fields: string[];
|
|
43
44
|
rows: string[];
|
|
44
|
-
}):
|
|
45
|
-
queryData(query: string): Promise<
|
|
45
|
+
}): SplunkReport[];
|
|
46
|
+
queryData(query: string): Promise<SplunkReport[]>;
|
|
46
47
|
toHdf(guid: string): Promise<ExecJSON.Execution>;
|
|
47
48
|
}
|
package/lib/src/splunk-mapper.js
CHANGED
|
@@ -3,14 +3,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.SplunkMapper = exports.
|
|
7
|
-
const
|
|
8
|
-
const jquery_http_1 = __importDefault(require("@mitre/splunk-sdk-no-env/lib/platform/client/jquery_http"));
|
|
6
|
+
exports.SplunkMapper = exports.replaceKeyValueDescriptions = exports.consolidatePayloads = exports.mapHash = exports.groupBy = void 0;
|
|
7
|
+
const axios_1 = __importDefault(require("axios"));
|
|
9
8
|
const lodash_1 = __importDefault(require("lodash"));
|
|
10
9
|
const global_1 = require("./utils/global");
|
|
10
|
+
const splunk_tools_1 = require("./utils/splunk-tools");
|
|
11
11
|
const MAPPER_NAME = 'Splunk2HDF';
|
|
12
12
|
let logger = (0, global_1.createWinstonLogger)('Splunk2HDF');
|
|
13
|
-
function
|
|
13
|
+
function groupBy(items, keyGetter) {
|
|
14
14
|
const result = {};
|
|
15
15
|
for (const i of items) {
|
|
16
16
|
const key = keyGetter(i);
|
|
@@ -24,28 +24,28 @@ function group_by(items, keyGetter) {
|
|
|
24
24
|
}
|
|
25
25
|
return result;
|
|
26
26
|
}
|
|
27
|
-
exports.
|
|
28
|
-
function
|
|
27
|
+
exports.groupBy = groupBy;
|
|
28
|
+
function mapHash(old, mapFunction) {
|
|
29
29
|
const result = {};
|
|
30
30
|
for (const key in old) {
|
|
31
31
|
result[key] = mapFunction(old[key]);
|
|
32
32
|
}
|
|
33
33
|
return result;
|
|
34
34
|
}
|
|
35
|
-
exports.
|
|
36
|
-
function
|
|
37
|
-
const grouped =
|
|
38
|
-
const built =
|
|
35
|
+
exports.mapHash = mapHash;
|
|
36
|
+
function consolidatePayloads(payloads) {
|
|
37
|
+
const grouped = groupBy(payloads, (pl) => pl.meta.guid);
|
|
38
|
+
const built = mapHash(grouped, consolidateFilePayloads);
|
|
39
39
|
return Object.values(built);
|
|
40
40
|
}
|
|
41
|
-
exports.
|
|
41
|
+
exports.consolidatePayloads = consolidatePayloads;
|
|
42
42
|
function replaceKeyValueDescriptions(controls) {
|
|
43
43
|
return controls.map((control) => {
|
|
44
44
|
if (control.descriptions && !Array.isArray(control.descriptions)) {
|
|
45
45
|
const extractedDescriptions = [];
|
|
46
|
-
Object.entries(control.descriptions)
|
|
46
|
+
for (const [key, value] of Object.entries(control.descriptions)) {
|
|
47
47
|
extractedDescriptions.push({ label: key, data: value });
|
|
48
|
-
}
|
|
48
|
+
}
|
|
49
49
|
control.descriptions = extractedDescriptions;
|
|
50
50
|
}
|
|
51
51
|
return control;
|
|
@@ -54,7 +54,7 @@ function replaceKeyValueDescriptions(controls) {
|
|
|
54
54
|
exports.replaceKeyValueDescriptions = replaceKeyValueDescriptions;
|
|
55
55
|
function consolidateFilePayloads(filePayloads) {
|
|
56
56
|
var _a;
|
|
57
|
-
const subtypes =
|
|
57
|
+
const subtypes = groupBy(filePayloads, (event) => event.meta.subtype);
|
|
58
58
|
const execEvents = (subtypes['header'] ||
|
|
59
59
|
[]);
|
|
60
60
|
const profileEvents = (subtypes['profile'] ||
|
|
@@ -69,7 +69,7 @@ function consolidateFilePayloads(filePayloads) {
|
|
|
69
69
|
}
|
|
70
70
|
const exec = execEvents[0];
|
|
71
71
|
(_a = exec.profiles) === null || _a === void 0 ? void 0 : _a.push(...profileEvents);
|
|
72
|
-
const shaGroupedControls =
|
|
72
|
+
const shaGroupedControls = groupBy(controlEvents, (ctrl) => ctrl.meta.profile_sha256);
|
|
73
73
|
for (const profile of profileEvents) {
|
|
74
74
|
profile.controls = [];
|
|
75
75
|
const sha = profile.meta.profile_sha256;
|
|
@@ -80,75 +80,92 @@ function consolidateFilePayloads(filePayloads) {
|
|
|
80
80
|
}
|
|
81
81
|
return exec;
|
|
82
82
|
}
|
|
83
|
-
async function checkSplunkCredentials(config, webCompatibility) {
|
|
84
|
-
let service;
|
|
85
|
-
if (webCompatibility) {
|
|
86
|
-
service = new splunk_sdk_no_env_1.default.Service(new jquery_http_1.default.JQueryHttp(''), config);
|
|
87
|
-
}
|
|
88
|
-
else {
|
|
89
|
-
service = new splunk_sdk_no_env_1.default.Service(config);
|
|
90
|
-
}
|
|
91
|
-
return new Promise((resolve, reject) => {
|
|
92
|
-
setTimeout(() => reject(new Error('Login timed out. Please check your CORS configuration or validate you have inputted the correct domain')), 5000);
|
|
93
|
-
service.login((error, result) => {
|
|
94
|
-
try {
|
|
95
|
-
if (error && error.status === 401) {
|
|
96
|
-
if (error.status === 401) {
|
|
97
|
-
reject('Incorrect Username or Password');
|
|
98
|
-
}
|
|
99
|
-
else if ('data' in error) {
|
|
100
|
-
reject(lodash_1.default.get(error, 'data.messages[0].text'));
|
|
101
|
-
}
|
|
102
|
-
reject(error);
|
|
103
|
-
}
|
|
104
|
-
else if (result) {
|
|
105
|
-
resolve(result);
|
|
106
|
-
}
|
|
107
|
-
reject(new Error('Failed to Login'));
|
|
108
|
-
}
|
|
109
|
-
catch (e) {
|
|
110
|
-
reject(e);
|
|
111
|
-
}
|
|
112
|
-
});
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
exports.checkSplunkCredentials = checkSplunkCredentials;
|
|
116
83
|
function unixTimeToDate(unixTime) {
|
|
117
84
|
return new Date(parseFloat(unixTime) * 1000);
|
|
118
85
|
}
|
|
119
86
|
class SplunkMapper {
|
|
120
|
-
constructor(config,
|
|
87
|
+
constructor(config, logService, loggingLevel) {
|
|
121
88
|
this.config = config;
|
|
122
|
-
this.
|
|
89
|
+
this.axiosInstance = axios_1.default.create({ params: { output_mode: 'json' } });
|
|
90
|
+
this.hostname = (0, splunk_tools_1.generateHostname)(config);
|
|
123
91
|
if (logService) {
|
|
124
92
|
logger = logService;
|
|
125
93
|
}
|
|
126
94
|
else {
|
|
127
95
|
logger = (0, global_1.createWinstonLogger)(MAPPER_NAME, loggingLevel || 'debug');
|
|
128
96
|
}
|
|
129
|
-
logger.debug(`Initializing Splunk Client`);
|
|
130
|
-
if (this.webCompatibility) {
|
|
131
|
-
this.service = new splunk_sdk_no_env_1.default.Service(new jquery_http_1.default.JQueryHttp(''), config);
|
|
132
|
-
}
|
|
133
|
-
else {
|
|
134
|
-
this.service = new splunk_sdk_no_env_1.default.Service(config);
|
|
135
|
-
}
|
|
136
97
|
logger.debug(`Initialized ${this.constructor.name} successfully`);
|
|
137
98
|
}
|
|
138
99
|
async createJob(query) {
|
|
139
100
|
logger.debug(`Creating job for query: ${query}`);
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
101
|
+
let jobSID;
|
|
102
|
+
try {
|
|
103
|
+
jobSID = await this.axiosInstance.post(`${this.hostname}/services/search/jobs`, `exec_mode=blocking&search=${query}`);
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
const errorCode = (0, splunk_tools_1.handleSplunkErrorResponse)(error);
|
|
107
|
+
throw new Error(`Failed to create search job - ${errorCode}`);
|
|
108
|
+
}
|
|
109
|
+
if (lodash_1.default.has(jobSID, ['data', 'sid'])) {
|
|
110
|
+
return jobSID.data.sid;
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
throw new Error('Failed to create search job - Malformed search job creation response received');
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
async trackJob(job) {
|
|
117
|
+
const badState = new Set([
|
|
118
|
+
'PAUSE',
|
|
119
|
+
'INTERNAL_CANCEL',
|
|
120
|
+
'USER_CANCEL',
|
|
121
|
+
'BAD_INPUT_CANCEL',
|
|
122
|
+
'QUIT',
|
|
123
|
+
'FAILED'
|
|
124
|
+
]);
|
|
125
|
+
const searchJobTimeout = 120000;
|
|
126
|
+
const searchJobPing = 50;
|
|
127
|
+
let queryStatus;
|
|
128
|
+
let continuePing = true;
|
|
129
|
+
const queryTimer = setTimeout(() => {
|
|
130
|
+
continuePing = false;
|
|
131
|
+
clearTimeout(queryTimer);
|
|
132
|
+
throw new Error('Search job timed out - Unable to retrieve query');
|
|
133
|
+
}, searchJobTimeout);
|
|
134
|
+
const awaitJob = setInterval(async () => {
|
|
135
|
+
try {
|
|
136
|
+
queryStatus = await this.axiosInstance.get(`${this.hostname}/services/search/jobs/${job}`);
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
clearTimeout(queryTimer);
|
|
140
|
+
clearInterval(awaitJob);
|
|
141
|
+
throw new Error(`Failed search job - ${(0, splunk_tools_1.handleSplunkErrorResponse)(error)}`);
|
|
142
|
+
}
|
|
143
|
+
if (lodash_1.default.has(queryStatus, ['data', 'entry'[0], 'content'])) {
|
|
144
|
+
if (queryStatus.data.entry.length !== 1) {
|
|
145
|
+
clearTimeout(queryTimer);
|
|
146
|
+
clearInterval(awaitJob);
|
|
147
|
+
throw new Error(`Failed search job - Detected malformed entry field length ${queryStatus.data.entry.length}`);
|
|
146
148
|
}
|
|
147
|
-
|
|
148
|
-
|
|
149
|
+
if (queryStatus.data.entry[0].content.dispatchState === 'DONE' &&
|
|
150
|
+
queryStatus.data.entry[0].content.isDone) {
|
|
151
|
+
clearTimeout(queryTimer);
|
|
152
|
+
clearInterval(awaitJob);
|
|
149
153
|
}
|
|
150
|
-
|
|
151
|
-
|
|
154
|
+
else if (badState.has(queryStatus.data.entry[0].content.dispatchState)) {
|
|
155
|
+
clearTimeout(queryTimer);
|
|
156
|
+
clearInterval(awaitJob);
|
|
157
|
+
throw new Error(`Failed search job - Detected dispatch state ${queryStatus.data.entry[0].content.dispatchState}`);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
clearTimeout(queryTimer);
|
|
162
|
+
clearInterval(awaitJob);
|
|
163
|
+
throw new Error('Failed search job - Malformed search job response received');
|
|
164
|
+
}
|
|
165
|
+
if (!continuePing) {
|
|
166
|
+
clearInterval(awaitJob);
|
|
167
|
+
}
|
|
168
|
+
}, searchJobPing);
|
|
152
169
|
}
|
|
153
170
|
parseSplunkResponse(query, results) {
|
|
154
171
|
logger.info(`Got results for query: ${query}`);
|
|
@@ -166,7 +183,7 @@ class SplunkMapper {
|
|
|
166
183
|
}
|
|
167
184
|
logger.debug(`Got field _indextime at index ${indexTimeIndex}`);
|
|
168
185
|
logger.verbose(`Parsing data returned by Splunk and appending timestamps`);
|
|
169
|
-
results.rows
|
|
186
|
+
for (const value of results.rows) {
|
|
170
187
|
let object;
|
|
171
188
|
try {
|
|
172
189
|
object = JSON.parse(value[rawDataIndex]);
|
|
@@ -181,45 +198,39 @@ class SplunkMapper {
|
|
|
181
198
|
lodash_1.default.set(object, 'meta.parse_time', new Date().toISOString());
|
|
182
199
|
}
|
|
183
200
|
objects.push(object);
|
|
184
|
-
}
|
|
201
|
+
}
|
|
185
202
|
logger.debug('Successfully parsed and added timestamps');
|
|
186
203
|
return objects;
|
|
187
204
|
}
|
|
188
205
|
async queryData(query) {
|
|
206
|
+
let queryJob;
|
|
207
|
+
const authToken = await (0, splunk_tools_1.checkSplunkCredentials)(this.config);
|
|
208
|
+
this.axiosInstance.defaults.headers.common['Authorization'] = `Bearer ${authToken}`;
|
|
189
209
|
const job = await this.createJob(query);
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
if (err) {
|
|
196
|
-
reject(err);
|
|
197
|
-
}
|
|
198
|
-
else {
|
|
199
|
-
try {
|
|
200
|
-
resolve(this.parseSplunkResponse(query, results));
|
|
201
|
-
}
|
|
202
|
-
catch (e) {
|
|
203
|
-
reject(e);
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
});
|
|
207
|
-
}
|
|
210
|
+
await this.trackJob(job);
|
|
211
|
+
try {
|
|
212
|
+
const returnCount = 0;
|
|
213
|
+
queryJob = await this.axiosInstance.get(`${this.hostname}/services/search/v2/jobs/${job}/results`, {
|
|
214
|
+
params: { count: returnCount, output_mode: 'json_rows' }
|
|
208
215
|
});
|
|
209
|
-
}
|
|
216
|
+
}
|
|
217
|
+
catch (error) {
|
|
218
|
+
throw new Error(`Failed search job - ${(0, splunk_tools_1.handleSplunkErrorResponse)(error)}`);
|
|
219
|
+
}
|
|
220
|
+
if (lodash_1.default.has(queryJob, ['data'])) {
|
|
221
|
+
return this.parseSplunkResponse(query, queryJob.data);
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
throw new Error('Failed search job - Malformed search job results response received');
|
|
225
|
+
}
|
|
210
226
|
}
|
|
211
227
|
async toHdf(guid) {
|
|
212
|
-
logger.info(`Starting conversion of
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
return consolidate_payloads(executionData)[0];
|
|
219
|
-
})
|
|
220
|
-
.catch((error) => {
|
|
221
|
-
throw error;
|
|
222
|
-
});
|
|
228
|
+
logger.info(`Starting conversion of GUID ${guid}`);
|
|
229
|
+
await (0, splunk_tools_1.checkSplunkCredentials)(this.config);
|
|
230
|
+
logger.info(`Credentials valid, querying data for ${guid}`);
|
|
231
|
+
const executionData = await this.queryData(`search index="*" meta.guid="${guid}"`);
|
|
232
|
+
logger.info(`Data received, consolidating payloads for ${executionData.length} items`);
|
|
233
|
+
return consolidatePayloads(executionData)[0];
|
|
223
234
|
}
|
|
224
235
|
}
|
|
225
236
|
exports.SplunkMapper = SplunkMapper;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"splunk-mapper.js","sourceRoot":"","sources":["../../src/splunk-mapper.ts"],"names":[],"mappings":";;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"splunk-mapper.js","sourceRoot":"","sources":["../../src/splunk-mapper.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,8 @@ var INPUT_TYPES;
|
|
|
9
9
|
(function (INPUT_TYPES) {
|
|
10
10
|
INPUT_TYPES["ASFF"] = "asff";
|
|
11
11
|
INPUT_TYPES["BURP"] = "burp";
|
|
12
|
+
INPUT_TYPES["CHECKLIST"] = "checklist";
|
|
13
|
+
INPUT_TYPES["CONVEYOR"] = "conveyor";
|
|
12
14
|
INPUT_TYPES["FORTIFY"] = "fortify";
|
|
13
15
|
INPUT_TYPES["GOSEC"] = "gosec";
|
|
14
16
|
INPUT_TYPES["IONCHANNEL"] = "ionchannel";
|
|
@@ -29,6 +31,7 @@ var INPUT_TYPES;
|
|
|
29
31
|
})(INPUT_TYPES = exports.INPUT_TYPES || (exports.INPUT_TYPES = {}));
|
|
30
32
|
const fileTypeFingerprints = {
|
|
31
33
|
[INPUT_TYPES.ASFF]: ['Findings', 'AwsAccountId', 'ProductArn'],
|
|
34
|
+
[INPUT_TYPES.CONVEYOR]: ['api_error_message', 'api_response'],
|
|
32
35
|
[INPUT_TYPES.FORTIFY]: ['FVDL', 'FVDL.EngineData.EngineVersion', 'FVDL.UUID'],
|
|
33
36
|
[INPUT_TYPES.IONCHANNEL]: [
|
|
34
37
|
'analysis_id',
|
|
@@ -57,6 +60,7 @@ const fileTypeFingerprints = {
|
|
|
57
60
|
],
|
|
58
61
|
[INPUT_TYPES.ZAP]: ['@generated', '@version', 'site'],
|
|
59
62
|
[INPUT_TYPES.BURP]: [],
|
|
63
|
+
[INPUT_TYPES.CHECKLIST]: [],
|
|
60
64
|
[INPUT_TYPES.NESSUS]: [],
|
|
61
65
|
[INPUT_TYPES.PRISMA]: [],
|
|
62
66
|
[INPUT_TYPES.DB_PROTECT]: [],
|
|
@@ -129,6 +133,11 @@ function fingerprint(guessOptions) {
|
|
|
129
133
|
guessOptions.data.indexOf('detailedreport') !== -1) {
|
|
130
134
|
return INPUT_TYPES.VERACODE;
|
|
131
135
|
}
|
|
136
|
+
else if (guessOptions.data.indexOf('<CHECKLIST>') !== -1 &&
|
|
137
|
+
guessOptions.data.indexOf('<STIGS>') !== -1 &&
|
|
138
|
+
guessOptions.data.indexOf('<STIG_INFO>') !== -1) {
|
|
139
|
+
return INPUT_TYPES.CHECKLIST;
|
|
140
|
+
}
|
|
132
141
|
}
|
|
133
142
|
return INPUT_TYPES.NOT_FOUND;
|
|
134
143
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fingerprinting.js","sourceRoot":"","sources":["../../../src/utils/fingerprinting.ts"],"names":[],"mappings":";;;;;;AAAA,oDAAuB;AAEvB,IAAY,
|
|
1
|
+
{"version":3,"file":"fingerprinting.js","sourceRoot":"","sources":["../../../src/utils/fingerprinting.ts"],"names":[],"mappings":"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"}
|