greybel-mock-environment 1.0.2 → 1.0.4
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/dist/default-fs.d.ts +2 -2
- package/dist/environment.d.ts +12 -47
- package/dist/environment.js +114 -367
- package/dist/generators/basic.d.ts +19 -0
- package/dist/generators/basic.js +83 -0
- package/dist/generators/email.d.ts +17 -0
- package/dist/generators/email.js +24 -0
- package/dist/generators/index.d.ts +5 -0
- package/dist/generators/index.js +16 -0
- package/dist/generators/network.d.ts +48 -0
- package/dist/generators/network.js +238 -0
- package/dist/generators/user.d.ts +15 -0
- package/dist/generators/user.js +29 -0
- package/dist/generators/vulnerability.d.ts +20 -0
- package/dist/generators/vulnerability.js +114 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +5 -1
- package/dist/types/computer.d.ts +9 -0
- package/dist/types/computer.js +29 -0
- package/dist/types/device.d.ts +21 -0
- package/dist/types/device.js +15 -0
- package/dist/types/email.d.ts +16 -0
- package/dist/types/email.js +20 -0
- package/dist/types/file-system.d.ts +56 -0
- package/dist/types/file-system.js +74 -0
- package/dist/types/index.d.ts +11 -0
- package/dist/types/index.js +36 -0
- package/dist/types/network-device.d.ts +11 -0
- package/dist/types/network-device.js +12 -0
- package/dist/types/port.d.ts +14 -0
- package/dist/types/port.js +13 -0
- package/dist/types/router.d.ts +13 -0
- package/dist/types/router.js +32 -0
- package/dist/types/service.d.ts +9 -0
- package/dist/types/service.js +20 -0
- package/dist/types/switch.d.ts +8 -0
- package/dist/types/switch.js +29 -0
- package/dist/types/user.d.ts +14 -0
- package/dist/types/user.js +18 -0
- package/dist/types/vulnerabilities.d.ts +63 -0
- package/dist/{types.js → types/vulnerabilities.js} +16 -39
- package/dist/types/wifi-network.d.ts +20 -0
- package/dist/types/wifi-network.js +16 -0
- package/dist/utils.d.ts +2 -0
- package/dist/utils.js +11 -0
- package/package.json +2 -2
- package/dist/types.d.ts +0 -152
package/dist/default-fs.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare function getUserFolder(parent:
|
|
1
|
+
import { Folder, FSEntity, User } from './types';
|
|
2
|
+
export declare function getUserFolder(parent: FSEntity, user: string): Folder;
|
|
3
3
|
export declare function getDefaultFileSystem(users: User[]): Folder;
|
package/dist/environment.d.ts
CHANGED
|
@@ -1,59 +1,25 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
1
|
+
import BasicGenerator from './generators/basic';
|
|
2
|
+
import EmailGenerator from './generators/email';
|
|
3
|
+
import NetworkGenerator from './generators/network';
|
|
4
|
+
import UserGenerator from './generators/user';
|
|
5
|
+
import VulnerabilityGenerator from './generators/vulnerability';
|
|
6
|
+
import { Computer, EMail, Port, Router, Switch, User } from './types';
|
|
3
7
|
export default class MockEnvironment {
|
|
4
8
|
seed: string;
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
passwordRng: RandomSeed;
|
|
11
|
-
usernameRng: RandomSeed;
|
|
12
|
-
portRng: RandomSeed;
|
|
13
|
-
users: User[];
|
|
14
|
-
routers: Router[];
|
|
15
|
-
computers: Computer[];
|
|
16
|
-
vulnerabilities: Vulnerability[];
|
|
17
|
-
networks: Network[];
|
|
18
|
-
emails: EMail[];
|
|
9
|
+
basicGenerator: BasicGenerator;
|
|
10
|
+
emailGenerator: EmailGenerator;
|
|
11
|
+
userGenerator: UserGenerator;
|
|
12
|
+
vulnerabilityGenerator: VulnerabilityGenerator;
|
|
13
|
+
networkGenerator: NetworkGenerator;
|
|
19
14
|
localComputer: Computer;
|
|
20
15
|
constructor(seed: string, localUser: {
|
|
21
16
|
username: string;
|
|
22
17
|
password: string;
|
|
23
18
|
});
|
|
24
|
-
generateUser(username: string, password: string): User;
|
|
25
|
-
generateDomain(): string;
|
|
26
|
-
generateEmail(options: {
|
|
27
|
-
name?: string;
|
|
28
|
-
domain?: string;
|
|
29
|
-
password?: string;
|
|
30
|
-
}): string;
|
|
31
|
-
generateRouter(options?: Partial<Router>): Router;
|
|
32
|
-
generateComputer(router: Router | null, users: User[], rootPassword?: string): Computer;
|
|
33
|
-
generatePorts(computer: Computer): Port[];
|
|
34
19
|
getComputerInLan(ipAddress: string, router: Router): Computer | null;
|
|
35
20
|
getComputersOfRouter(router: Router): Computer[];
|
|
36
21
|
getPortsOfRouter(router: Router): Port[];
|
|
37
22
|
getForwardedPortsOfRouter(router: Router): Port[];
|
|
38
|
-
getForwardedPortOfRouter(router: Router, port: number): {
|
|
39
|
-
computer: Computer;
|
|
40
|
-
port: Port;
|
|
41
|
-
} | null;
|
|
42
|
-
generateNetworkDevice(): NetworkDevice;
|
|
43
|
-
generateIp(): string;
|
|
44
|
-
generateLocalIp(): string;
|
|
45
|
-
generateMAC(): string;
|
|
46
|
-
generateUUID(): string;
|
|
47
|
-
generateUsername(): string;
|
|
48
|
-
generatePassword(): string;
|
|
49
|
-
generateNetwork(router: Router, options?: Partial<Network>): Network;
|
|
50
|
-
generateVulnerabilityAddress(): string;
|
|
51
|
-
generateVulnerability(library: Library, memAddress: string, remote: boolean): Vulnerability;
|
|
52
|
-
generateSectorVulnerabilities(library: Library, sector: string, remote: boolean): Vulnerability[];
|
|
53
|
-
generateVulnerabilitiesForLibrary(library: Library, options?: {
|
|
54
|
-
remote?: boolean;
|
|
55
|
-
local?: boolean;
|
|
56
|
-
}): void;
|
|
57
23
|
setupLibraries(): void;
|
|
58
24
|
getLocal(): {
|
|
59
25
|
computer: Computer;
|
|
@@ -61,10 +27,9 @@ export default class MockEnvironment {
|
|
|
61
27
|
};
|
|
62
28
|
connectLocal(router: Router): void;
|
|
63
29
|
getRouterByIp(ipAddress: string): Router | null;
|
|
30
|
+
getSwitchByIp(ipAddress: string): Switch | null;
|
|
64
31
|
getComputersOfRouterByIp(ipAddress: string): Computer[];
|
|
65
32
|
findRouterViaNS(name: string): Router;
|
|
66
33
|
getEmailViaLogin(email: string, password: string): EMail | null;
|
|
67
34
|
getEmail(email: string): EMail | null;
|
|
68
|
-
isValidIp(target: string): boolean;
|
|
69
|
-
isLanIp(target: string): boolean;
|
|
70
35
|
}
|
package/dist/environment.js
CHANGED
|
@@ -1,4 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __values = (this && this.__values) || function(o) {
|
|
3
|
+
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
4
|
+
if (m) return m.call(o);
|
|
5
|
+
if (o && typeof o.length === "number") return {
|
|
6
|
+
next: function () {
|
|
7
|
+
if (o && i >= o.length) o = void 0;
|
|
8
|
+
return { value: o && o[i++], done: !o };
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
12
|
+
};
|
|
2
13
|
var __read = (this && this.__read) || function (o, n) {
|
|
3
14
|
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
4
15
|
if (!m) return o;
|
|
@@ -15,157 +26,43 @@ var __read = (this && this.__read) || function (o, n) {
|
|
|
15
26
|
}
|
|
16
27
|
return ar;
|
|
17
28
|
};
|
|
18
|
-
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
19
|
-
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
20
|
-
if (ar || !(i in from)) {
|
|
21
|
-
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
22
|
-
ar[i] = from[i];
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
return to.concat(ar || Array.prototype.slice.call(from));
|
|
26
|
-
};
|
|
27
|
-
var __values = (this && this.__values) || function(o) {
|
|
28
|
-
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
29
|
-
if (m) return m.call(o);
|
|
30
|
-
if (o && typeof o.length === "number") return {
|
|
31
|
-
next: function () {
|
|
32
|
-
if (o && i >= o.length) o = void 0;
|
|
33
|
-
return { value: o && o[i++], done: !o };
|
|
34
|
-
}
|
|
35
|
-
};
|
|
36
|
-
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
37
|
-
};
|
|
38
29
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
39
30
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
40
31
|
};
|
|
41
32
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
-
var
|
|
43
|
-
var
|
|
44
|
-
var
|
|
33
|
+
var basic_1 = __importDefault(require("./generators/basic"));
|
|
34
|
+
var email_1 = __importDefault(require("./generators/email"));
|
|
35
|
+
var network_1 = __importDefault(require("./generators/network"));
|
|
36
|
+
var user_1 = __importDefault(require("./generators/user"));
|
|
37
|
+
var vulnerability_1 = __importDefault(require("./generators/vulnerability"));
|
|
45
38
|
var types_1 = require("./types");
|
|
46
|
-
var
|
|
39
|
+
var utils_1 = require("./utils");
|
|
47
40
|
var MockEnvironment = /** @class */ (function () {
|
|
48
41
|
function MockEnvironment(seed, localUser) {
|
|
49
42
|
if (seed === void 0) { seed = 'test'; }
|
|
50
43
|
this.seed = seed;
|
|
51
|
-
this.
|
|
52
|
-
this.
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
this.
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
this.
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
this.
|
|
44
|
+
this.basicGenerator = new basic_1.default({ seed: seed });
|
|
45
|
+
this.emailGenerator = new email_1.default({
|
|
46
|
+
seed: seed,
|
|
47
|
+
basicGenerator: this.basicGenerator
|
|
48
|
+
});
|
|
49
|
+
this.userGenerator = new user_1.default({
|
|
50
|
+
seed: seed,
|
|
51
|
+
basicGenerator: this.basicGenerator,
|
|
52
|
+
emailGenerator: this.emailGenerator
|
|
53
|
+
});
|
|
54
|
+
this.vulnerabilityGenerator = new vulnerability_1.default({
|
|
55
|
+
seed: seed,
|
|
56
|
+
basicGenerator: this.basicGenerator
|
|
57
|
+
});
|
|
58
|
+
this.networkGenerator = new network_1.default({
|
|
59
|
+
seed: seed,
|
|
60
|
+
basicGenerator: this.basicGenerator,
|
|
61
|
+
userGenerator: this.userGenerator,
|
|
62
|
+
emailGenerator: this.emailGenerator
|
|
63
|
+
});
|
|
64
|
+
this.localComputer = this.networkGenerator.generateLocalComputer([this.userGenerator.generate(localUser.username, localUser.password)], 'test');
|
|
66
65
|
}
|
|
67
|
-
MockEnvironment.prototype.generateUser = function (username, password) {
|
|
68
|
-
var me = this;
|
|
69
|
-
var user = {
|
|
70
|
-
username: username,
|
|
71
|
-
password: password,
|
|
72
|
-
passwordHashed: (0, blueimp_md5_1.default)(password),
|
|
73
|
-
email: me.generateEmail({
|
|
74
|
-
name: username,
|
|
75
|
-
password: password
|
|
76
|
-
}),
|
|
77
|
-
userBankNumber: me.bankIdRng.random().toString(36).substring(2, 10)
|
|
78
|
-
};
|
|
79
|
-
me.users.push(user);
|
|
80
|
-
return user;
|
|
81
|
-
};
|
|
82
|
-
MockEnvironment.prototype.generateDomain = function () {
|
|
83
|
-
var me = this;
|
|
84
|
-
return "".concat(me.generateUsername(), ".").concat(['org', 'com', 'de', 'tv'][me.networkRng.intBetween(0, 3)]);
|
|
85
|
-
};
|
|
86
|
-
MockEnvironment.prototype.generateEmail = function (options) {
|
|
87
|
-
var me = this;
|
|
88
|
-
var email = "".concat(options.name || me.generateUsername(), "@").concat(options.domain || me.generateDomain());
|
|
89
|
-
me.emails.push({
|
|
90
|
-
email: email,
|
|
91
|
-
password: options.password || me.generatePassword(),
|
|
92
|
-
messages: new Map()
|
|
93
|
-
});
|
|
94
|
-
return email;
|
|
95
|
-
};
|
|
96
|
-
MockEnvironment.prototype.generateRouter = function (options) {
|
|
97
|
-
if (options === void 0) { options = {}; }
|
|
98
|
-
var me = this;
|
|
99
|
-
var networkDevice = me.generateNetworkDevice();
|
|
100
|
-
var routerUsers = [
|
|
101
|
-
me.generateUser('root', me.generatePassword()),
|
|
102
|
-
me.generateUser(me.generateUsername(), me.generatePassword())
|
|
103
|
-
];
|
|
104
|
-
var domain = me.generateDomain();
|
|
105
|
-
var name = me.generateUsername();
|
|
106
|
-
var router = {
|
|
107
|
-
domain: options.domain || "www.".concat(domain),
|
|
108
|
-
whoisDescription: options.whoisDescription ||
|
|
109
|
-
[
|
|
110
|
-
"Domain name: ".concat(domain),
|
|
111
|
-
"Administrative contact: ".concat(name),
|
|
112
|
-
"Email address: ".concat(me.generateEmail({ name: name, domain: domain })),
|
|
113
|
-
'Phone: 123456891'
|
|
114
|
-
].join('\n'),
|
|
115
|
-
publicIp: options.publicIp || me.generateIp(),
|
|
116
|
-
localIp: options.localIp || me.generateLocalIp(),
|
|
117
|
-
activeNetCard: options.activeNetCard || networkDevice.type,
|
|
118
|
-
networkDevices: options.networkDevices || [networkDevice],
|
|
119
|
-
users: options.users || routerUsers,
|
|
120
|
-
fileSystem: options.fileSystem || (0, default_fs_1.getDefaultFileSystem)(routerUsers)
|
|
121
|
-
};
|
|
122
|
-
for (var index = me.networkRng.intBetween(4, 10); index >= 0; index--) {
|
|
123
|
-
me.generateComputer(router, [
|
|
124
|
-
me.generateUser(me.generateUsername(), me.generatePassword())
|
|
125
|
-
]);
|
|
126
|
-
}
|
|
127
|
-
me.routers.push(router);
|
|
128
|
-
return router;
|
|
129
|
-
};
|
|
130
|
-
MockEnvironment.prototype.generateComputer = function (router, users, rootPassword) {
|
|
131
|
-
var me = this;
|
|
132
|
-
var networkDevice = me.generateNetworkDevice();
|
|
133
|
-
var computerUsers = __spreadArray([
|
|
134
|
-
me.generateUser('root', rootPassword || me.generatePassword())
|
|
135
|
-
], __read(users), false);
|
|
136
|
-
var computer = {
|
|
137
|
-
router: router,
|
|
138
|
-
localIp: me.generateLocalIp(),
|
|
139
|
-
activeNetCard: networkDevice.type,
|
|
140
|
-
networkDevices: [networkDevice],
|
|
141
|
-
users: computerUsers,
|
|
142
|
-
fileSystem: (0, default_fs_1.getDefaultFileSystem)(computerUsers),
|
|
143
|
-
ports: []
|
|
144
|
-
};
|
|
145
|
-
computer.ports = me.generatePorts(computer);
|
|
146
|
-
me.computers.push(computer);
|
|
147
|
-
return computer;
|
|
148
|
-
};
|
|
149
|
-
MockEnvironment.prototype.generatePorts = function (computer) {
|
|
150
|
-
var me = this;
|
|
151
|
-
var portNumber = me.portRng.intBetween(1, 1000);
|
|
152
|
-
var router = computer.router;
|
|
153
|
-
var forwarded = false;
|
|
154
|
-
if (router) {
|
|
155
|
-
var forwardedPort = me.getForwardedPortOfRouter(router, portNumber);
|
|
156
|
-
if (!forwardedPort) {
|
|
157
|
-
forwarded = me.networkRng.intBetween(0, 2) === 1;
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
return __spreadArray([], __read(Array(me.portRng.intBetween(1, 3)).keys()), false).map(function () {
|
|
161
|
-
return {
|
|
162
|
-
port: me.portRng.intBetween(1, 1000),
|
|
163
|
-
isClosed: !!me.portRng.intBetween(0, 1),
|
|
164
|
-
service: types_1.ServiceList[me.portRng.intBetween(0, 5)],
|
|
165
|
-
forwarded: forwarded
|
|
166
|
-
};
|
|
167
|
-
});
|
|
168
|
-
};
|
|
169
66
|
MockEnvironment.prototype.getComputerInLan = function (ipAddress, router) {
|
|
170
67
|
var me = this;
|
|
171
68
|
return me.getComputersOfRouter(router).find(function (v) {
|
|
@@ -173,240 +70,55 @@ var MockEnvironment = /** @class */ (function () {
|
|
|
173
70
|
});
|
|
174
71
|
};
|
|
175
72
|
MockEnvironment.prototype.getComputersOfRouter = function (router) {
|
|
176
|
-
|
|
177
|
-
return me.computers.filter(function (v) {
|
|
178
|
-
var _a;
|
|
179
|
-
return ((_a = v.router) === null || _a === void 0 ? void 0 : _a.publicIp) === router.publicIp;
|
|
180
|
-
});
|
|
73
|
+
return Array.from(router.devices.values()).filter(function (d) { return d instanceof types_1.Computer; });
|
|
181
74
|
};
|
|
182
75
|
MockEnvironment.prototype.getPortsOfRouter = function (router) {
|
|
183
|
-
|
|
184
|
-
var computers = me.getComputersOfRouter(router);
|
|
185
|
-
return [].concat.apply([], __spreadArray([], __read(computers.map(function (v) {
|
|
186
|
-
return v.ports;
|
|
187
|
-
})), false));
|
|
76
|
+
return Array.from(router.ports.values());
|
|
188
77
|
};
|
|
189
78
|
MockEnvironment.prototype.getForwardedPortsOfRouter = function (router) {
|
|
190
79
|
var me = this;
|
|
191
80
|
return me.getPortsOfRouter(router).filter(function (v) { return v.forwarded; });
|
|
192
81
|
};
|
|
193
|
-
MockEnvironment.prototype.getForwardedPortOfRouter = function (router, port) {
|
|
194
|
-
var e_1, _a, e_2, _b;
|
|
195
|
-
var me = this;
|
|
196
|
-
var computers = me.computers.filter(function (v) {
|
|
197
|
-
var _a;
|
|
198
|
-
return ((_a = v.router) === null || _a === void 0 ? void 0 : _a.publicIp) === router.publicIp;
|
|
199
|
-
});
|
|
200
|
-
var computerResult;
|
|
201
|
-
var portResult;
|
|
202
|
-
try {
|
|
203
|
-
for (var computers_1 = __values(computers), computers_1_1 = computers_1.next(); !computers_1_1.done; computers_1_1 = computers_1.next()) {
|
|
204
|
-
var item = computers_1_1.value;
|
|
205
|
-
if (item.ports) {
|
|
206
|
-
try {
|
|
207
|
-
for (var _c = (e_2 = void 0, __values(item.ports)), _d = _c.next(); !_d.done; _d = _c.next()) {
|
|
208
|
-
var itemPort = _d.value;
|
|
209
|
-
if (itemPort.port === port && itemPort.forwarded) {
|
|
210
|
-
computerResult = item;
|
|
211
|
-
portResult = itemPort;
|
|
212
|
-
break;
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
217
|
-
finally {
|
|
218
|
-
try {
|
|
219
|
-
if (_d && !_d.done && (_b = _c.return)) _b.call(_c);
|
|
220
|
-
}
|
|
221
|
-
finally { if (e_2) throw e_2.error; }
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
if (computerResult || portResult) {
|
|
225
|
-
break;
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
230
|
-
finally {
|
|
231
|
-
try {
|
|
232
|
-
if (computers_1_1 && !computers_1_1.done && (_a = computers_1.return)) _a.call(computers_1);
|
|
233
|
-
}
|
|
234
|
-
finally { if (e_1) throw e_1.error; }
|
|
235
|
-
}
|
|
236
|
-
if (!computerResult || !portResult) {
|
|
237
|
-
return null;
|
|
238
|
-
}
|
|
239
|
-
return {
|
|
240
|
-
computer: computerResult,
|
|
241
|
-
port: portResult
|
|
242
|
-
};
|
|
243
|
-
};
|
|
244
|
-
MockEnvironment.prototype.generateNetworkDevice = function () {
|
|
245
|
-
return {
|
|
246
|
-
type: this.networkRng.intBetween(0, 1) === 0 ? 'wlan0' : 'eth0',
|
|
247
|
-
id: this.networkRng.random().toString(36).substring(2, 10),
|
|
248
|
-
active: true
|
|
249
|
-
};
|
|
250
|
-
};
|
|
251
|
-
MockEnvironment.prototype.generateIp = function () {
|
|
252
|
-
var me = this;
|
|
253
|
-
return "".concat(me.networkRng.intBetween(0, 255), ".").concat(me.networkRng.intBetween(0, 255), ".").concat(me.networkRng.intBetween(0, 255), ".").concat(me.networkRng.intBetween(0, 255));
|
|
254
|
-
};
|
|
255
|
-
MockEnvironment.prototype.generateLocalIp = function () {
|
|
256
|
-
var me = this;
|
|
257
|
-
return "192.168.".concat(me.networkRng.intBetween(0, 255), ".").concat(me.networkRng.intBetween(0, 255));
|
|
258
|
-
};
|
|
259
|
-
MockEnvironment.prototype.generateMAC = function () {
|
|
260
|
-
var me = this;
|
|
261
|
-
var d = '0123456789ABCDEF';
|
|
262
|
-
return __spreadArray([], __read(Array(6).keys()), false).map(function () {
|
|
263
|
-
return (d[me.macAddressRng.intBetween(0, 15)] +
|
|
264
|
-
d[me.macAddressRng.intBetween(0, 15)]);
|
|
265
|
-
})
|
|
266
|
-
.join(':');
|
|
267
|
-
};
|
|
268
|
-
MockEnvironment.prototype.generateUUID = function () {
|
|
269
|
-
var me = this;
|
|
270
|
-
var dt = me.uuidRng.random();
|
|
271
|
-
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
|
|
272
|
-
var r = (dt + me.uuidRng.random() * 16) % 16 | 0;
|
|
273
|
-
dt = Math.floor(dt / 16);
|
|
274
|
-
return (c === 'x' ? r : (r & 0x3) | 0x8).toString(16);
|
|
275
|
-
});
|
|
276
|
-
};
|
|
277
|
-
MockEnvironment.prototype.generateUsername = function () {
|
|
278
|
-
var me = this;
|
|
279
|
-
var nativeMath = Math.random;
|
|
280
|
-
Math.random = function () { return me.usernameRng.random(); };
|
|
281
|
-
var username = randomUsernameGenerator.generate();
|
|
282
|
-
Math.random = nativeMath;
|
|
283
|
-
return username;
|
|
284
|
-
};
|
|
285
|
-
MockEnvironment.prototype.generatePassword = function () {
|
|
286
|
-
var me = this;
|
|
287
|
-
return me.passwordRng.string(me.passwordRng.intBetween(4, 8));
|
|
288
|
-
};
|
|
289
|
-
MockEnvironment.prototype.generateNetwork = function (router, options) {
|
|
290
|
-
if (options === void 0) { options = {}; }
|
|
291
|
-
var me = this;
|
|
292
|
-
var network = {
|
|
293
|
-
mac: options.mac || me.generateMAC(),
|
|
294
|
-
percentage: options.percentage || me.networkRng.intBetween(20, 70),
|
|
295
|
-
name: options.name || me.generateUsername(),
|
|
296
|
-
bssid: options.bssid || me.generateUUID(),
|
|
297
|
-
essid: options.essid || me.generateUUID(),
|
|
298
|
-
password: options.password || me.generatePassword(),
|
|
299
|
-
router: router
|
|
300
|
-
};
|
|
301
|
-
me.networks.push(network);
|
|
302
|
-
return network;
|
|
303
|
-
};
|
|
304
|
-
MockEnvironment.prototype.generateVulnerabilityAddress = function () {
|
|
305
|
-
var me = this;
|
|
306
|
-
var d = '0123456789ABCDEF';
|
|
307
|
-
return ('0x' +
|
|
308
|
-
__spreadArray([], __read(Array(8).keys()), false).map(function () {
|
|
309
|
-
return d[me.vulnerabilityRng.intBetween(0, 15)];
|
|
310
|
-
})
|
|
311
|
-
.join(''));
|
|
312
|
-
};
|
|
313
|
-
MockEnvironment.prototype.generateVulnerability = function (library, memAddress, remote) {
|
|
314
|
-
var me = this;
|
|
315
|
-
var requirementAmount = me.vulnerabilityRng.intBetween(0, 3);
|
|
316
|
-
var required = [];
|
|
317
|
-
var action = types_1.VulnerabilityActionList[me.vulnerabilityRng.intBetween(0, 4)];
|
|
318
|
-
var user;
|
|
319
|
-
while (required.length < requirementAmount) {
|
|
320
|
-
var index = me.vulnerabilityRng.intBetween(0, 6);
|
|
321
|
-
var req = types_1.VulnerabilityRequirementList[index];
|
|
322
|
-
if (!required.includes(req)) {
|
|
323
|
-
required.push(req);
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
var userType = me.vulnerabilityRng.intBetween(0, 5);
|
|
327
|
-
switch (userType) {
|
|
328
|
-
case 0:
|
|
329
|
-
user = types_1.VulnerabilityActionUser.ROOT;
|
|
330
|
-
break;
|
|
331
|
-
case 1:
|
|
332
|
-
case 2:
|
|
333
|
-
user = types_1.VulnerabilityActionUser.NORMAL;
|
|
334
|
-
break;
|
|
335
|
-
default:
|
|
336
|
-
user = types_1.VulnerabilityActionUser.GUEST;
|
|
337
|
-
break;
|
|
338
|
-
}
|
|
339
|
-
return {
|
|
340
|
-
required: required,
|
|
341
|
-
memAddress: memAddress,
|
|
342
|
-
sector: me.vulnerabilityRng.random().toString(36).substring(2, 12),
|
|
343
|
-
details: 'loop in array',
|
|
344
|
-
remote: remote,
|
|
345
|
-
library: library,
|
|
346
|
-
action: action,
|
|
347
|
-
user: user,
|
|
348
|
-
folder: ['home', 'guest']
|
|
349
|
-
};
|
|
350
|
-
};
|
|
351
|
-
MockEnvironment.prototype.generateSectorVulnerabilities = function (library, sector, remote) {
|
|
352
|
-
var _a;
|
|
353
|
-
var me = this;
|
|
354
|
-
var vulAmount = me.vulnerabilityRng.intBetween(1, 4);
|
|
355
|
-
var result = [];
|
|
356
|
-
for (var index = vulAmount; index >= 0; index--) {
|
|
357
|
-
result.push(me.generateVulnerability(library, sector, remote));
|
|
358
|
-
}
|
|
359
|
-
(_a = this.vulnerabilities).push.apply(_a, __spreadArray([], __read(result), false));
|
|
360
|
-
return result;
|
|
361
|
-
};
|
|
362
|
-
MockEnvironment.prototype.generateVulnerabilitiesForLibrary = function (library, options) {
|
|
363
|
-
if (options === void 0) { options = {}; }
|
|
364
|
-
var me = this;
|
|
365
|
-
var address = me.generateVulnerabilityAddress();
|
|
366
|
-
for (var amount = me.vulnerabilityRng.intBetween(2, 5); amount >= 0; amount--) {
|
|
367
|
-
if (options.remote)
|
|
368
|
-
me.generateSectorVulnerabilities(library, address, true);
|
|
369
|
-
if (options.local)
|
|
370
|
-
me.generateSectorVulnerabilities(library, address, false);
|
|
371
|
-
address =
|
|
372
|
-
me.vulnerabilityRng.intBetween(0, 3) === 1
|
|
373
|
-
? me.generateVulnerabilityAddress()
|
|
374
|
-
: address;
|
|
375
|
-
}
|
|
376
|
-
};
|
|
377
82
|
MockEnvironment.prototype.setupLibraries = function () {
|
|
378
83
|
var me = this;
|
|
379
|
-
|
|
380
|
-
|
|
84
|
+
var vulnerabilityGenerator = me.vulnerabilityGenerator;
|
|
85
|
+
vulnerabilityGenerator.generateVulnerabilitiesForLibrary(types_1.Library.CRYPTO, {
|
|
86
|
+
local: true
|
|
87
|
+
});
|
|
88
|
+
vulnerabilityGenerator.generateVulnerabilitiesForLibrary(types_1.Library.FTP, {
|
|
381
89
|
local: true,
|
|
382
90
|
remote: true
|
|
383
91
|
});
|
|
384
|
-
|
|
92
|
+
vulnerabilityGenerator.generateVulnerabilitiesForLibrary(types_1.Library.HTTP, {
|
|
385
93
|
local: true,
|
|
386
94
|
remote: true
|
|
387
95
|
});
|
|
388
|
-
|
|
389
|
-
|
|
96
|
+
vulnerabilityGenerator.generateVulnerabilitiesForLibrary(types_1.Library.INIT, {
|
|
97
|
+
local: true
|
|
98
|
+
});
|
|
99
|
+
vulnerabilityGenerator.generateVulnerabilitiesForLibrary(types_1.Library.KERNEL_MODULE, {
|
|
390
100
|
local: true
|
|
391
101
|
});
|
|
392
|
-
|
|
102
|
+
vulnerabilityGenerator.generateVulnerabilitiesForLibrary(types_1.Library.KERNEL_ROUTER, {
|
|
393
103
|
remote: true
|
|
394
104
|
});
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
105
|
+
vulnerabilityGenerator.generateVulnerabilitiesForLibrary(types_1.Library.METAXPLOIT, { local: true });
|
|
106
|
+
vulnerabilityGenerator.generateVulnerabilitiesForLibrary(types_1.Library.NET, {
|
|
107
|
+
local: true
|
|
108
|
+
});
|
|
109
|
+
vulnerabilityGenerator.generateVulnerabilitiesForLibrary(types_1.Library.RSHELL, {
|
|
398
110
|
local: true,
|
|
399
111
|
remote: true
|
|
400
112
|
});
|
|
401
|
-
|
|
113
|
+
vulnerabilityGenerator.generateVulnerabilitiesForLibrary(types_1.Library.SMTP, {
|
|
402
114
|
local: true,
|
|
403
115
|
remote: true
|
|
404
116
|
});
|
|
405
|
-
|
|
117
|
+
vulnerabilityGenerator.generateVulnerabilitiesForLibrary(types_1.Library.SQL, {
|
|
406
118
|
local: true,
|
|
407
119
|
remote: true
|
|
408
120
|
});
|
|
409
|
-
|
|
121
|
+
vulnerabilityGenerator.generateVulnerabilitiesForLibrary(types_1.Library.SSH, {
|
|
410
122
|
local: true,
|
|
411
123
|
remote: true
|
|
412
124
|
});
|
|
@@ -420,19 +132,57 @@ var MockEnvironment = /** @class */ (function () {
|
|
|
420
132
|
};
|
|
421
133
|
};
|
|
422
134
|
MockEnvironment.prototype.connectLocal = function (router) {
|
|
423
|
-
|
|
135
|
+
var me = this;
|
|
136
|
+
var serverMap = me.networkGenerator.serverMap;
|
|
137
|
+
if (!serverMap.has(router.publicIp)) {
|
|
138
|
+
throw new Error("Router with ip ".concat(router.publicIp, " is unknown in serverMap."));
|
|
139
|
+
}
|
|
140
|
+
var localComputer = me.localComputer;
|
|
141
|
+
if (localComputer.router) {
|
|
142
|
+
localComputer.router.devices.delete(localComputer.localIp);
|
|
143
|
+
}
|
|
144
|
+
var serverMapGenerator = serverMap.get(router.publicIp);
|
|
145
|
+
var localIp = serverMapGenerator.generateLocalIp(router);
|
|
146
|
+
localComputer.router = router;
|
|
147
|
+
localComputer.localIp = localIp;
|
|
148
|
+
router.devices.set(localIp, localComputer);
|
|
424
149
|
};
|
|
425
150
|
MockEnvironment.prototype.getRouterByIp = function (ipAddress) {
|
|
426
151
|
var me = this;
|
|
427
|
-
if (
|
|
152
|
+
if ((0, utils_1.isValidIp)(ipAddress)) {
|
|
153
|
+
return null;
|
|
154
|
+
}
|
|
155
|
+
var serverMap = me.networkGenerator.serverMap;
|
|
156
|
+
if (serverMap.has(ipAddress)) {
|
|
157
|
+
return serverMap.get(ipAddress).router;
|
|
158
|
+
}
|
|
159
|
+
return me.networkGenerator.generateRouter({
|
|
160
|
+
publicIp: ipAddress
|
|
161
|
+
});
|
|
162
|
+
};
|
|
163
|
+
MockEnvironment.prototype.getSwitchByIp = function (ipAddress) {
|
|
164
|
+
var e_1, _a;
|
|
165
|
+
var me = this;
|
|
166
|
+
if (!(0, utils_1.isValidIp)(ipAddress) || !(0, utils_1.isLanIp)(ipAddress)) {
|
|
428
167
|
return null;
|
|
429
168
|
}
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
169
|
+
var localRouter = me.localComputer.router;
|
|
170
|
+
try {
|
|
171
|
+
for (var _b = __values(localRouter.devices), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
172
|
+
var _d = __read(_c.value, 2), localIp = _d[0], device = _d[1];
|
|
173
|
+
if (localIp === ipAddress && device instanceof types_1.Switch) {
|
|
174
|
+
return device;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
179
|
+
finally {
|
|
180
|
+
try {
|
|
181
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
182
|
+
}
|
|
183
|
+
finally { if (e_1) throw e_1.error; }
|
|
184
|
+
}
|
|
185
|
+
return null;
|
|
436
186
|
};
|
|
437
187
|
MockEnvironment.prototype.getComputersOfRouterByIp = function (ipAddress) {
|
|
438
188
|
var me = this;
|
|
@@ -440,29 +190,26 @@ var MockEnvironment = /** @class */ (function () {
|
|
|
440
190
|
if (!router) {
|
|
441
191
|
return [];
|
|
442
192
|
}
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
});
|
|
193
|
+
var devices = Array.from(router.devices.values());
|
|
194
|
+
return devices.filter(function (d) { return d instanceof types_1.Computer; });
|
|
446
195
|
};
|
|
447
196
|
MockEnvironment.prototype.findRouterViaNS = function (name) {
|
|
448
197
|
var me = this;
|
|
449
|
-
|
|
198
|
+
var serverMap = me.networkGenerator.serverMap;
|
|
199
|
+
var routers = Array.from(serverMap.values()).map(function (g) { return g.router; });
|
|
200
|
+
return routers.find(function (item) {
|
|
450
201
|
return item.domain === name;
|
|
451
202
|
});
|
|
452
203
|
};
|
|
453
204
|
MockEnvironment.prototype.getEmailViaLogin = function (email, password) {
|
|
454
205
|
var me = this;
|
|
455
|
-
|
|
206
|
+
var emails = me.emailGenerator.emails;
|
|
207
|
+
return emails.find(function (v) { return v.email === email && v.password === password; });
|
|
456
208
|
};
|
|
457
209
|
MockEnvironment.prototype.getEmail = function (email) {
|
|
458
210
|
var me = this;
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
MockEnvironment.prototype.isValidIp = function (target) {
|
|
462
|
-
return /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(target);
|
|
463
|
-
};
|
|
464
|
-
MockEnvironment.prototype.isLanIp = function (target) {
|
|
465
|
-
return /^1(0|27|69\.254|72\.(1[6-9]|2[0-9]|3[0-1])|92\.168)\./.test(target);
|
|
211
|
+
var emails = me.emailGenerator.emails;
|
|
212
|
+
return emails.find(function (v) { return v.email === email; });
|
|
466
213
|
};
|
|
467
214
|
return MockEnvironment;
|
|
468
215
|
}());
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { RandomSeed } from 'random-seed';
|
|
2
|
+
export interface BasicGeneratorOptions {
|
|
3
|
+
seed: string;
|
|
4
|
+
}
|
|
5
|
+
export default class BasicGenerator {
|
|
6
|
+
passwordRng: RandomSeed;
|
|
7
|
+
usernameRng: RandomSeed;
|
|
8
|
+
tldRng: RandomSeed;
|
|
9
|
+
bankIdRng: RandomSeed;
|
|
10
|
+
macAddressRng: RandomSeed;
|
|
11
|
+
uuidRng: RandomSeed;
|
|
12
|
+
constructor({ seed }: BasicGeneratorOptions);
|
|
13
|
+
generateDomain(): string;
|
|
14
|
+
generateUsername(): string;
|
|
15
|
+
generatePassword(): string;
|
|
16
|
+
generateBankNumber(): string;
|
|
17
|
+
generateMAC(): string;
|
|
18
|
+
generateUUID(): string;
|
|
19
|
+
}
|