@neurosec/sentry 1.0.0
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/LICENSE +21 -0
- package/README.md +118 -0
- package/bin/cli.js +18 -0
- package/bin/sentryd.js +19 -0
- package/dist/api.d.ts +21 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +161 -0
- package/dist/api.js.map +1 -0
- package/dist/audit.d.ts +18 -0
- package/dist/audit.d.ts.map +1 -0
- package/dist/audit.js +114 -0
- package/dist/audit.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +255 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +54 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +160 -0
- package/dist/config.js.map +1 -0
- package/dist/discovery.d.ts +5 -0
- package/dist/discovery.d.ts.map +1 -0
- package/dist/discovery.js +279 -0
- package/dist/discovery.js.map +1 -0
- package/dist/enforcement/enforcement-engine.d.ts +37 -0
- package/dist/enforcement/enforcement-engine.d.ts.map +1 -0
- package/dist/enforcement/enforcement-engine.js +325 -0
- package/dist/enforcement/enforcement-engine.js.map +1 -0
- package/dist/enforcement/file-monitor.d.ts +4 -0
- package/dist/enforcement/file-monitor.d.ts.map +1 -0
- package/dist/enforcement/file-monitor.js +114 -0
- package/dist/enforcement/file-monitor.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +248 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +2 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +17 -0
- package/dist/logger.js.map +1 -0
- package/dist/sandbox/index.d.ts +14 -0
- package/dist/sandbox/index.d.ts.map +1 -0
- package/dist/sandbox/index.js +91 -0
- package/dist/sandbox/index.js.map +1 -0
- package/dist/sandbox/linux-sandbox.d.ts +21 -0
- package/dist/sandbox/linux-sandbox.d.ts.map +1 -0
- package/dist/sandbox/linux-sandbox.js +186 -0
- package/dist/sandbox/linux-sandbox.js.map +1 -0
- package/dist/sandbox/macos-sandbox.d.ts +17 -0
- package/dist/sandbox/macos-sandbox.d.ts.map +1 -0
- package/dist/sandbox/macos-sandbox.js +145 -0
- package/dist/sandbox/macos-sandbox.js.map +1 -0
- package/dist/setup.d.ts +14 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +220 -0
- package/dist/setup.js.map +1 -0
- package/dist/skill-authz/skill-evaluator.d.ts +20 -0
- package/dist/skill-authz/skill-evaluator.d.ts.map +1 -0
- package/dist/skill-authz/skill-evaluator.js +159 -0
- package/dist/skill-authz/skill-evaluator.js.map +1 -0
- package/dist/skill-authz/skill-scanner.d.ts +18 -0
- package/dist/skill-authz/skill-scanner.d.ts.map +1 -0
- package/dist/skill-authz/skill-scanner.js +169 -0
- package/dist/skill-authz/skill-scanner.js.map +1 -0
- package/dist/telemetry.d.ts +18 -0
- package/dist/telemetry.d.ts.map +1 -0
- package/dist/telemetry.js +106 -0
- package/dist/telemetry.js.map +1 -0
- package/dist/types.d.ts +127 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +209 -0
- package/dist/types.js.map +1 -0
- package/package.json +69 -0
- package/scripts/install-sentry-macos.sh +238 -0
- package/scripts/install-sentry.sh +253 -0
- package/scripts/postinstall.js +191 -0
- package/scripts/prepack.js +33 -0
package/dist/types.js
ADDED
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AGENT_SANDBOX_PROFILES = void 0;
|
|
4
|
+
exports.AGENT_SANDBOX_PROFILES = [
|
|
5
|
+
{
|
|
6
|
+
name: 'claude-code',
|
|
7
|
+
frameworkIds: ['claude-code', 'mcp-server'],
|
|
8
|
+
allowedSyscalls: [
|
|
9
|
+
'read', 'write', 'open', 'openat', 'close', 'stat', 'fstat', 'lstat',
|
|
10
|
+
'newfstatat', 'mmap', 'munmap', 'mprotect', 'brk', 'futex',
|
|
11
|
+
'sched_yield', 'clock_gettime', 'nanosleep', 'getrandom',
|
|
12
|
+
'exit_group', 'exit', 'clone', 'clone3', 'execve', 'execveat',
|
|
13
|
+
'readlink', 'readlinkat', 'getdents', 'getdents64', 'lseek',
|
|
14
|
+
'connect', 'sendto', 'recvfrom', 'sendmsg', 'recvmsg', 'bind',
|
|
15
|
+
'getsockname', 'getpeername', 'setsockopt', 'getsockopt',
|
|
16
|
+
'ioctl', 'fcntl', 'dup', 'dup2', 'dup3', 'pipe', 'pipe2',
|
|
17
|
+
'socket', 'access', 'faccessat', 'faccessat2',
|
|
18
|
+
'getcwd', 'chdir', 'fchdir',
|
|
19
|
+
'getpid', 'getppid', 'gettid', 'getuid', 'getgid', 'geteuid', 'getegid',
|
|
20
|
+
'writev', 'readv', 'pread64', 'pwrite64',
|
|
21
|
+
'fallocate', 'ftruncate', 'truncate',
|
|
22
|
+
'uname', 'sysinfo', 'prctl',
|
|
23
|
+
'tgkill', 'rt_sigaction', 'rt_sigprocmask', 'rt_sigreturn',
|
|
24
|
+
'wait4', 'waitid', 'poll', 'ppoll', 'select', 'epoll_create', 'epoll_ctl', 'epoll_wait',
|
|
25
|
+
'eventfd2', 'timerfd_create', 'timerfd_settime',
|
|
26
|
+
'sendfile', 'copy_file_range',
|
|
27
|
+
'madvise', 'mlock', 'munlock',
|
|
28
|
+
],
|
|
29
|
+
blockedSyscalls: [
|
|
30
|
+
'ptrace', 'perf_event_open', 'bpf', 'kexec_load', 'swapon', 'swapoff',
|
|
31
|
+
'reboot', 'init_module', 'finit_module', 'delete_module',
|
|
32
|
+
'acct', 'setdomainname', 'sethostname',
|
|
33
|
+
'pivot_root', 'chroot',
|
|
34
|
+
'mount', 'umount', 'umount2',
|
|
35
|
+
'setns', 'unshare',
|
|
36
|
+
'iopl', 'ioperm',
|
|
37
|
+
'stty',
|
|
38
|
+
],
|
|
39
|
+
fsRules: [
|
|
40
|
+
{ path: '/home/**', permissions: 'rw' },
|
|
41
|
+
{ path: '/tmp/**', permissions: 'rw' },
|
|
42
|
+
{ path: '/workspace/**', permissions: 'rw' },
|
|
43
|
+
{ path: '/app/**', permissions: 'rw' },
|
|
44
|
+
{ path: '/var/tmp/**', permissions: 'rw' },
|
|
45
|
+
{ path: '/etc/**', permissions: 'r' },
|
|
46
|
+
{ path: '/usr/**', permissions: 'r' },
|
|
47
|
+
{ path: '/bin/**', permissions: 'rx' },
|
|
48
|
+
{ path: '/lib/**', permissions: 'r' },
|
|
49
|
+
{ path: '/lib64/**', permissions: 'r' },
|
|
50
|
+
{ path: '/opt/**', permissions: 'r' },
|
|
51
|
+
{ path: '/dev/**', permissions: 'none' },
|
|
52
|
+
{ path: '/sys/**', permissions: 'none' },
|
|
53
|
+
{ path: '/proc/**', permissions: 'r' },
|
|
54
|
+
{ path: '/var/lib/**', permissions: 'none' },
|
|
55
|
+
{ path: '/var/log/**', permissions: 'none' },
|
|
56
|
+
{ path: '/run/**', permissions: 'none' },
|
|
57
|
+
{ path: '/etc/shadow', permissions: 'none' },
|
|
58
|
+
{ path: '/etc/sudoers', permissions: 'none' },
|
|
59
|
+
{ path: '/etc/passwd', permissions: 'r' },
|
|
60
|
+
{ path: '/home/**/.ssh/**', permissions: 'none' },
|
|
61
|
+
{ path: '/home/**/.aws/**', permissions: 'none' },
|
|
62
|
+
{ path: '/home/**/.config/gcloud/**', permissions: 'none' },
|
|
63
|
+
{ path: '/home/**/.gnupg/**', permissions: 'none' },
|
|
64
|
+
{ path: '/home/**/.kube/**', permissions: 'none' },
|
|
65
|
+
],
|
|
66
|
+
networkRules: [
|
|
67
|
+
{ direction: 'egress', host: 'api.anthropic.com', port: 443, action: 'allow' },
|
|
68
|
+
{ direction: 'egress', host: '*.anthropic.com', port: 443, action: 'allow' },
|
|
69
|
+
{ direction: 'egress', host: 'api.openai.com', port: 443, action: 'allow' },
|
|
70
|
+
{ direction: 'egress', host: 'api.neurosec.ai', port: 443, action: 'allow' },
|
|
71
|
+
{ direction: 'egress', host: '127.0.0.1', port: 9081, action: 'allow' },
|
|
72
|
+
{ direction: 'egress', action: 'deny' },
|
|
73
|
+
{ direction: 'ingress', action: 'deny' },
|
|
74
|
+
],
|
|
75
|
+
retainedCapabilities: [],
|
|
76
|
+
cpuMax: '1.0',
|
|
77
|
+
memoryMax: '2GB',
|
|
78
|
+
pidMax: 200,
|
|
79
|
+
blockedCapabilities: [
|
|
80
|
+
'CAP_NET_RAW', 'CAP_NET_ADMIN', 'CAP_SYS_ADMIN', 'CAP_SYS_PTRACE',
|
|
81
|
+
'CAP_SYS_MODULE', 'CAP_SYS_BOOT', 'CAP_SYS_RAWIO',
|
|
82
|
+
'CAP_SYS_ADMIN', 'CAP_AUDIT_CONTROL', 'CAP_SETUID', 'CAP_SETGID',
|
|
83
|
+
'CAP_DAC_OVERRIDE', 'CAP_DAC_READ_SEARCH', 'CAP_FOWNER',
|
|
84
|
+
'CAP_IPC_OWNER', 'CAP_KILL',
|
|
85
|
+
],
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
name: 'langchain',
|
|
89
|
+
frameworkIds: ['langchain', 'langgraph', 'crewai', 'autogen', 'haystack', 'dspy'],
|
|
90
|
+
allowedSyscalls: [
|
|
91
|
+
'read', 'write', 'open', 'openat', 'close', 'stat', 'fstat', 'lstat',
|
|
92
|
+
'newfstatat', 'mmap', 'munmap', 'mprotect', 'brk', 'futex',
|
|
93
|
+
'sched_yield', 'clock_gettime', 'nanosleep', 'getrandom',
|
|
94
|
+
'exit_group', 'exit', 'clone', 'clone3', 'execve', 'execveat',
|
|
95
|
+
'readlink', 'readlinkat', 'getdents', 'getdents64', 'lseek',
|
|
96
|
+
'connect', 'sendto', 'recvfrom', 'sendmsg', 'recvmsg',
|
|
97
|
+
'ioctl', 'fcntl', 'dup', 'dup2', 'dup3', 'pipe', 'pipe2',
|
|
98
|
+
'socket', 'access', 'faccessat', 'faccessat2',
|
|
99
|
+
'getcwd', 'chdir', 'fchdir',
|
|
100
|
+
'getpid', 'getppid', 'gettid',
|
|
101
|
+
'writev', 'readv', 'pread64', 'pwrite64',
|
|
102
|
+
'uname', 'sysinfo', 'prctl',
|
|
103
|
+
'rt_sigaction', 'rt_sigprocmask',
|
|
104
|
+
'poll', 'ppoll', 'select', 'epoll_create', 'epoll_ctl', 'epoll_wait',
|
|
105
|
+
'eventfd2',
|
|
106
|
+
'madvise',
|
|
107
|
+
],
|
|
108
|
+
blockedSyscalls: [
|
|
109
|
+
'ptrace', 'perf_event_open', 'bpf', 'kexec_load', 'swapon', 'swapoff',
|
|
110
|
+
'reboot', 'init_module', 'finit_module', 'delete_module',
|
|
111
|
+
'mount', 'umount', 'umount2',
|
|
112
|
+
'setns', 'unshare',
|
|
113
|
+
'iopl', 'ioperm',
|
|
114
|
+
'acct',
|
|
115
|
+
],
|
|
116
|
+
fsRules: [
|
|
117
|
+
{ path: '/workspace/**', permissions: 'rw' },
|
|
118
|
+
{ path: '/home/**', permissions: 'rw' },
|
|
119
|
+
{ path: '/tmp/**', permissions: 'rw' },
|
|
120
|
+
{ path: '/app/**', permissions: 'rw' },
|
|
121
|
+
{ path: '/usr/**', permissions: 'r' },
|
|
122
|
+
{ path: '/etc/**', permissions: 'r' },
|
|
123
|
+
{ path: '/bin/**', permissions: 'rx' },
|
|
124
|
+
{ path: '/lib/**', permissions: 'r' },
|
|
125
|
+
{ path: '/lib64/**', permissions: 'r' },
|
|
126
|
+
{ path: '/dev/**', permissions: 'none' },
|
|
127
|
+
{ path: '/sys/**', permissions: 'none' },
|
|
128
|
+
{ path: '/proc/**', permissions: 'r' },
|
|
129
|
+
{ path: '/var/lib/**', permissions: 'none' },
|
|
130
|
+
{ path: '/var/log/**', permissions: 'none' },
|
|
131
|
+
{ path: '/run/**', permissions: 'none' },
|
|
132
|
+
{ path: '/home/**/.ssh/**', permissions: 'none' },
|
|
133
|
+
{ path: '/home/**/.aws/**', permissions: 'none' },
|
|
134
|
+
{ path: '/home/**/.config/gcloud/**', permissions: 'none' },
|
|
135
|
+
{ path: '/home/**/.gnupg/**', permissions: 'none' },
|
|
136
|
+
{ path: '/home/**/.kube/**', permissions: 'none' },
|
|
137
|
+
{ path: '/etc/shadow', permissions: 'none' },
|
|
138
|
+
{ path: '/etc/sudoers', permissions: 'none' },
|
|
139
|
+
],
|
|
140
|
+
networkRules: [
|
|
141
|
+
{ direction: 'egress', host: 'api.openai.com', port: 443, action: 'allow' },
|
|
142
|
+
{ direction: 'egress', host: 'api.anthropic.com', port: 443, action: 'allow' },
|
|
143
|
+
{ direction: 'egress', host: '*.openai.com', port: 443, action: 'allow' },
|
|
144
|
+
{ direction: 'egress', host: '*.anthropic.com', port: 443, action: 'allow' },
|
|
145
|
+
{ direction: 'egress', host: 'api.neurosec.ai', port: 443, action: 'allow' },
|
|
146
|
+
{ direction: 'egress', host: '127.0.0.1', port: 9081, action: 'allow' },
|
|
147
|
+
{ direction: 'egress', action: 'deny' },
|
|
148
|
+
{ direction: 'ingress', action: 'deny' },
|
|
149
|
+
],
|
|
150
|
+
retainedCapabilities: [],
|
|
151
|
+
cpuMax: '2.0',
|
|
152
|
+
memoryMax: '4GB',
|
|
153
|
+
pidMax: 500,
|
|
154
|
+
blockedCapabilities: [
|
|
155
|
+
'CAP_NET_RAW', 'CAP_NET_ADMIN', 'CAP_SYS_ADMIN', 'CAP_SYS_PTRACE',
|
|
156
|
+
'CAP_SYS_MODULE', 'CAP_SYS_BOOT', 'CAP_SYS_RAWIO',
|
|
157
|
+
'CAP_AUDIT_CONTROL', 'CAP_SETUID', 'CAP_SETGID',
|
|
158
|
+
'CAP_DAC_OVERRIDE', 'CAP_DAC_READ_SEARCH', 'CAP_FOWNER',
|
|
159
|
+
'CAP_IPC_OWNER', 'CAP_KILL',
|
|
160
|
+
],
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
name: 'default-restrictive',
|
|
164
|
+
frameworkIds: [],
|
|
165
|
+
allowedSyscalls: [
|
|
166
|
+
'read', 'write', 'open', 'openat', 'close', 'stat', 'fstat',
|
|
167
|
+
'mmap', 'munmap', 'brk', 'futex', 'exit_group', 'exit',
|
|
168
|
+
'clock_gettime', 'nanosleep', 'getrandom', 'getpid', 'gettid',
|
|
169
|
+
'connect', 'sendto', 'recvfrom',
|
|
170
|
+
'socket', 'setsockopt',
|
|
171
|
+
'rt_sigaction', 'rt_sigprocmask',
|
|
172
|
+
],
|
|
173
|
+
blockedSyscalls: [
|
|
174
|
+
'ptrace', 'perf_event_open', 'bpf', 'kexec_load', 'mount', 'umount',
|
|
175
|
+
'init_module', 'delete_module', 'reboot', 'swapon',
|
|
176
|
+
'clone', 'clone3', 'execve', 'execveat', 'fork', 'vfork',
|
|
177
|
+
'setns', 'unshare', 'chroot', 'pivot_root',
|
|
178
|
+
],
|
|
179
|
+
fsRules: [
|
|
180
|
+
{ path: '/tmp/**', permissions: 'rw' },
|
|
181
|
+
{ path: '/home/**', permissions: 'r' },
|
|
182
|
+
{ path: '/usr/**', permissions: 'r' },
|
|
183
|
+
{ path: '/dev/**', permissions: 'none' },
|
|
184
|
+
{ path: '/sys/**', permissions: 'none' },
|
|
185
|
+
{ path: '/proc/**', permissions: 'r' },
|
|
186
|
+
{ path: '/etc/**', permissions: 'r' },
|
|
187
|
+
{ path: '/etc/shadow', permissions: 'none' },
|
|
188
|
+
{ path: '/etc/sudoers', permissions: 'none' },
|
|
189
|
+
],
|
|
190
|
+
networkRules: [
|
|
191
|
+
{ direction: 'egress', host: '127.0.0.1', port: 9081, action: 'allow' },
|
|
192
|
+
{ direction: 'egress', action: 'deny' },
|
|
193
|
+
{ direction: 'ingress', action: 'deny' },
|
|
194
|
+
],
|
|
195
|
+
retainedCapabilities: [],
|
|
196
|
+
cpuMax: '0.5',
|
|
197
|
+
memoryMax: '512MB',
|
|
198
|
+
pidMax: 50,
|
|
199
|
+
blockedCapabilities: [
|
|
200
|
+
'CAP_NET_RAW', 'CAP_NET_ADMIN', 'CAP_SYS_ADMIN', 'CAP_SYS_PTRACE',
|
|
201
|
+
'CAP_SYS_MODULE', 'CAP_SYS_BOOT', 'CAP_SYS_RAWIO',
|
|
202
|
+
'CAP_AUDIT_CONTROL', 'CAP_SETUID', 'CAP_SETGID',
|
|
203
|
+
'CAP_DAC_OVERRIDE', 'CAP_DAC_READ_SEARCH', 'CAP_FOWNER',
|
|
204
|
+
'CAP_IPC_OWNER', 'CAP_KILL', 'CAP_CHOWN', 'CAP_FSETID',
|
|
205
|
+
'CAP_LINUX_IMMUTABLE', 'CAP_NET_BIND_SERVICE', 'CAP_NET_BROADCAST',
|
|
206
|
+
],
|
|
207
|
+
},
|
|
208
|
+
];
|
|
209
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@neurosec/sentry",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "NeuroShield Sentry — host-level agent protection daemon. Detects and blocks malicious AI agent actions at the OS level.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"ai-security",
|
|
7
|
+
"agent-security",
|
|
8
|
+
"llm-guard",
|
|
9
|
+
"neurosec",
|
|
10
|
+
"neuroshield",
|
|
11
|
+
"mcp-security",
|
|
12
|
+
"ai-governance"
|
|
13
|
+
],
|
|
14
|
+
"homepage": "https://neurosec.ai/sentry",
|
|
15
|
+
"bugs": {
|
|
16
|
+
"url": "https://github.com/neurosec-ai/neurosec/issues"
|
|
17
|
+
},
|
|
18
|
+
"license": "MIT",
|
|
19
|
+
"author": "NeuroSec <dev@neurosec.ai> (https://neurosec.ai)",
|
|
20
|
+
"repository": {
|
|
21
|
+
"type": "git",
|
|
22
|
+
"url": "https://github.com/neurosec-ai/neurosec.git",
|
|
23
|
+
"directory": "packages/sentry"
|
|
24
|
+
},
|
|
25
|
+
"engines": {
|
|
26
|
+
"node": ">=20.0.0",
|
|
27
|
+
"npm": ">=9.0.0"
|
|
28
|
+
},
|
|
29
|
+
"os": [
|
|
30
|
+
"linux",
|
|
31
|
+
"darwin"
|
|
32
|
+
],
|
|
33
|
+
"preferGlobal": true,
|
|
34
|
+
"bin": {
|
|
35
|
+
"neuroshield-sentryd": "./bin/sentryd.js",
|
|
36
|
+
"neuroshield-sentry": "./bin/cli.js"
|
|
37
|
+
},
|
|
38
|
+
"main": "dist/index.js",
|
|
39
|
+
"files": [
|
|
40
|
+
"bin/",
|
|
41
|
+
"dist/",
|
|
42
|
+
"scripts/",
|
|
43
|
+
"README.md",
|
|
44
|
+
"LICENSE"
|
|
45
|
+
],
|
|
46
|
+
"scripts": {
|
|
47
|
+
"build": "tsc",
|
|
48
|
+
"start": "node bin/sentryd.js",
|
|
49
|
+
"dev": "ts-node src/index.ts",
|
|
50
|
+
"lint": "eslint src --ext .ts",
|
|
51
|
+
"test": "vitest run",
|
|
52
|
+
"prepack": "npm run build && node scripts/prepack.js",
|
|
53
|
+
"postinstall": "node scripts/postinstall.js"
|
|
54
|
+
},
|
|
55
|
+
"dependencies": {
|
|
56
|
+
"yaml": "^2.3.4",
|
|
57
|
+
"uuid": "^9.0.0",
|
|
58
|
+
"winston": "^3.11.0"
|
|
59
|
+
},
|
|
60
|
+
"devDependencies": {
|
|
61
|
+
"@types/node": "^20.0.0",
|
|
62
|
+
"typescript": "^5.3.0",
|
|
63
|
+
"vitest": "^1.0.0"
|
|
64
|
+
},
|
|
65
|
+
"publishConfig": {
|
|
66
|
+
"access": "public",
|
|
67
|
+
"registry": "https://registry.npmjs.org/"
|
|
68
|
+
}
|
|
69
|
+
}
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# NeuroShield Sentry Daemon — macOS launchd Installation Script
|
|
3
|
+
# Usage: sudo bash install-sentry-macos.sh [--mode enforce|monitor|quarantine]
|
|
4
|
+
|
|
5
|
+
set -euo pipefail
|
|
6
|
+
|
|
7
|
+
SENTRY_VERSION="${SENTRY_VERSION:-1.0.0}"
|
|
8
|
+
INSTALL_DIR="/usr/local/lib/neuroshield"
|
|
9
|
+
CONFIG_DIR="/etc/neuroshield"
|
|
10
|
+
STATE_DIR="/var/lib/neuroshield/sentry"
|
|
11
|
+
LOG_DIR="/var/log/neuroshield"
|
|
12
|
+
BIN_PATH="/usr/local/bin/neuroshield-sentryd"
|
|
13
|
+
CONFIG_PATH="${CONFIG_DIR}/sentry.yaml"
|
|
14
|
+
PLIST_LABEL="com.neuroshield.sentry"
|
|
15
|
+
PLIST_PATH="/Library/LaunchDaemons/${PLIST_LABEL}.plist"
|
|
16
|
+
ENFORCEMENT_MODE="monitor"
|
|
17
|
+
|
|
18
|
+
# Parse --mode flag
|
|
19
|
+
for arg in "$@"; do
|
|
20
|
+
case "${arg}" in
|
|
21
|
+
--mode=*) ENFORCEMENT_MODE="${arg#*=}" ;;
|
|
22
|
+
--mode) shift; ENFORCEMENT_MODE="$1" ;;
|
|
23
|
+
esac
|
|
24
|
+
done
|
|
25
|
+
|
|
26
|
+
echo "============================================"
|
|
27
|
+
echo " NeuroShield Sentry v${SENTRY_VERSION} Installer (macOS)"
|
|
28
|
+
echo " Mode: ${ENFORCEMENT_MODE}"
|
|
29
|
+
echo "============================================"
|
|
30
|
+
|
|
31
|
+
if [ "$EUID" -ne 0 ]; then
|
|
32
|
+
echo "Error: This script must be run as root (sudo)" >&2
|
|
33
|
+
exit 1
|
|
34
|
+
fi
|
|
35
|
+
|
|
36
|
+
if ! command -v node &>/dev/null; then
|
|
37
|
+
echo "Error: Node.js is required (>= 20)" >&2
|
|
38
|
+
exit 1
|
|
39
|
+
fi
|
|
40
|
+
|
|
41
|
+
NODE_VERSION=$(node -v | sed 's/v//' | cut -d. -f1)
|
|
42
|
+
if [ "${NODE_VERSION}" -lt 20 ]; then
|
|
43
|
+
echo "Error: Node.js >= 20 required (found v${NODE_VERSION})" >&2
|
|
44
|
+
exit 1
|
|
45
|
+
fi
|
|
46
|
+
|
|
47
|
+
# Create directories
|
|
48
|
+
echo "Creating directories..."
|
|
49
|
+
mkdir -p "${INSTALL_DIR}"
|
|
50
|
+
mkdir -p "${CONFIG_DIR}"
|
|
51
|
+
mkdir -p "${STATE_DIR}"
|
|
52
|
+
mkdir -p "${LOG_DIR}"
|
|
53
|
+
mkdir -p /var/run
|
|
54
|
+
|
|
55
|
+
# Build
|
|
56
|
+
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
57
|
+
PROJECT_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)"
|
|
58
|
+
SENTRY_PACKAGE="${PROJECT_DIR}/packages/sentry"
|
|
59
|
+
|
|
60
|
+
if [ -f "${SENTRY_PACKAGE}/package.json" ]; then
|
|
61
|
+
echo "Building sentry daemon from source..."
|
|
62
|
+
cd "${SENTRY_PACKAGE}"
|
|
63
|
+
if [ ! -d "node_modules" ]; then
|
|
64
|
+
npm install --production
|
|
65
|
+
fi
|
|
66
|
+
npx tsc --outDir dist 2>/dev/null || true
|
|
67
|
+
cp -r dist "${INSTALL_DIR}/"
|
|
68
|
+
cp -r node_modules "${INSTALL_DIR}/"
|
|
69
|
+
cp package.json "${INSTALL_DIR}/"
|
|
70
|
+
fi
|
|
71
|
+
|
|
72
|
+
# Install binary wrapper
|
|
73
|
+
cat > "${BIN_PATH}" <<- 'BINEOF'
|
|
74
|
+
#!/usr/bin/env node
|
|
75
|
+
require('/usr/local/lib/neuroshield/dist/index.js');
|
|
76
|
+
BINEOF
|
|
77
|
+
chmod +x "${BIN_PATH}"
|
|
78
|
+
|
|
79
|
+
# Generate default config if not exists
|
|
80
|
+
if [ ! -f "${CONFIG_PATH}" ]; then
|
|
81
|
+
echo "Generating default config..."
|
|
82
|
+
cat > "${CONFIG_PATH}" <<- EOF
|
|
83
|
+
# NeuroShield Sentry Daemon Configuration (macOS)
|
|
84
|
+
sentry:
|
|
85
|
+
host_id: "$(scutil --get ComputerName 2>/dev/null || hostname)-sentry"
|
|
86
|
+
version: "${SENTRY_VERSION}"
|
|
87
|
+
health_port: 9190
|
|
88
|
+
api_port: 9191
|
|
89
|
+
state_dir: ${STATE_DIR}
|
|
90
|
+
pid_file_path: /var/run/neuroshield-sentry.pid
|
|
91
|
+
|
|
92
|
+
neurosec:
|
|
93
|
+
endpoint: "https://api.neurosec.ai"
|
|
94
|
+
org_id: "${NEUROSEC_ORG_ID:-}"
|
|
95
|
+
token_path: ${CONFIG_DIR}/sentry.token
|
|
96
|
+
tls_cert: ${CONFIG_DIR}/cert.pem
|
|
97
|
+
tls_key: ${CONFIG_DIR}/key.pem
|
|
98
|
+
sync_interval_ms: 30000
|
|
99
|
+
heartbeat_interval_ms: 300000
|
|
100
|
+
|
|
101
|
+
enforcement:
|
|
102
|
+
mode: "${ENFORCEMENT_MODE}"
|
|
103
|
+
sandbox_enabled: false
|
|
104
|
+
syscall_filter_enabled: false
|
|
105
|
+
network_filter_enabled: true
|
|
106
|
+
filesystem_filter_enabled: true
|
|
107
|
+
|
|
108
|
+
sandbox_defaults:
|
|
109
|
+
cpu_max: "0.5"
|
|
110
|
+
memory_max: "512MB"
|
|
111
|
+
pid_max: 100
|
|
112
|
+
|
|
113
|
+
network:
|
|
114
|
+
allow_hosts:
|
|
115
|
+
- "api.openai.com:443"
|
|
116
|
+
- "api.anthropic.com:443"
|
|
117
|
+
- "api.neurosec.ai:443"
|
|
118
|
+
block_hosts:
|
|
119
|
+
- "*.pastebin.com"
|
|
120
|
+
- "*.ngrok.io"
|
|
121
|
+
- "*.requestbin.net"
|
|
122
|
+
- "*.webhook.site"
|
|
123
|
+
allow_private: false
|
|
124
|
+
dns_monitor_enabled: true
|
|
125
|
+
|
|
126
|
+
skill_authz:
|
|
127
|
+
enabled: true
|
|
128
|
+
allow_unknown: false
|
|
129
|
+
require_approval:
|
|
130
|
+
- "shell_exec"
|
|
131
|
+
- "bash"
|
|
132
|
+
- "terminal"
|
|
133
|
+
- "run_command"
|
|
134
|
+
|
|
135
|
+
audit:
|
|
136
|
+
log_path: ${LOG_DIR}/sentry.log
|
|
137
|
+
retention_days: 90
|
|
138
|
+
max_size_mb: 500
|
|
139
|
+
|
|
140
|
+
discovery:
|
|
141
|
+
interval_ms: 30000
|
|
142
|
+
source_paths:
|
|
143
|
+
- /workspace
|
|
144
|
+
- /app
|
|
145
|
+
- /Users
|
|
146
|
+
- /tmp
|
|
147
|
+
EOF
|
|
148
|
+
echo " Config written to ${CONFIG_PATH}"
|
|
149
|
+
fi
|
|
150
|
+
|
|
151
|
+
# Create empty token file
|
|
152
|
+
if [ ! -f "${CONFIG_DIR}/sentry.token" ]; then
|
|
153
|
+
touch "${CONFIG_DIR}/sentry.token"
|
|
154
|
+
chmod 600 "${CONFIG_DIR}/sentry.token"
|
|
155
|
+
fi
|
|
156
|
+
|
|
157
|
+
# Install launchd plist
|
|
158
|
+
echo "Installing launchd service..."
|
|
159
|
+
cat > "${PLIST_PATH}" <<- EOF
|
|
160
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
161
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
|
|
162
|
+
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
163
|
+
<plist version="1.0">
|
|
164
|
+
<dict>
|
|
165
|
+
<key>Label</key>
|
|
166
|
+
<string>${PLIST_LABEL}</string>
|
|
167
|
+
|
|
168
|
+
<key>ProgramArguments</key>
|
|
169
|
+
<array>
|
|
170
|
+
<string>${BIN_PATH}</string>
|
|
171
|
+
<string>${CONFIG_PATH}</string>
|
|
172
|
+
</array>
|
|
173
|
+
|
|
174
|
+
<key>RunAtLoad</key>
|
|
175
|
+
<true/>
|
|
176
|
+
|
|
177
|
+
<key>KeepAlive</key>
|
|
178
|
+
<dict>
|
|
179
|
+
<key>Crashed</key>
|
|
180
|
+
<true/>
|
|
181
|
+
<key>SuccessfulExit</key>
|
|
182
|
+
<false/>
|
|
183
|
+
</dict>
|
|
184
|
+
|
|
185
|
+
<key>ThrottleInterval</key>
|
|
186
|
+
<integer>10</integer>
|
|
187
|
+
|
|
188
|
+
<key>WorkingDirectory</key>
|
|
189
|
+
<string>${INSTALL_DIR}</string>
|
|
190
|
+
|
|
191
|
+
<key>StandardOutPath</key>
|
|
192
|
+
<string>${LOG_DIR}/sentry-stdout.log</string>
|
|
193
|
+
|
|
194
|
+
<key>StandardErrorPath</key>
|
|
195
|
+
<string>${LOG_DIR}/sentry-stderr.log</string>
|
|
196
|
+
|
|
197
|
+
<key>EnvironmentVariables</key>
|
|
198
|
+
<dict>
|
|
199
|
+
<key>NODE_ENV</key>
|
|
200
|
+
<string>production</string>
|
|
201
|
+
<key>SENTRY_CONFIG_PATH</key>
|
|
202
|
+
<string>${CONFIG_PATH}</string>
|
|
203
|
+
<key>LOG_LEVEL</key>
|
|
204
|
+
<string>info</string>
|
|
205
|
+
</dict>
|
|
206
|
+
|
|
207
|
+
<key>UserName</key>
|
|
208
|
+
<string>root</string>
|
|
209
|
+
|
|
210
|
+
<key>SessionCreate</key>
|
|
211
|
+
<true/>
|
|
212
|
+
</dict>
|
|
213
|
+
</plist>
|
|
214
|
+
EOF
|
|
215
|
+
|
|
216
|
+
chmod 644 "${PLIST_PATH}"
|
|
217
|
+
echo " Plist: ${PLIST_PATH}"
|
|
218
|
+
|
|
219
|
+
# Load the service
|
|
220
|
+
launchctl load "${PLIST_PATH}"
|
|
221
|
+
|
|
222
|
+
echo ""
|
|
223
|
+
echo "============================================"
|
|
224
|
+
echo " Installation Complete!"
|
|
225
|
+
echo "============================================"
|
|
226
|
+
echo ""
|
|
227
|
+
echo " Next steps:"
|
|
228
|
+
echo " 1. Edit ${CONFIG_PATH} with your NeuroSec org ID"
|
|
229
|
+
echo " 2. Set your sentry token: echo 'your-token' > ${CONFIG_DIR}/sentry.token"
|
|
230
|
+
echo " 3. Start the daemon: launchctl start ${PLIST_LABEL}"
|
|
231
|
+
echo " 4. Check status: launchctl list ${PLIST_LABEL}"
|
|
232
|
+
echo " 5. View logs: tail -f ${LOG_DIR}/sentry-stdout.log"
|
|
233
|
+
echo " 6. Local API: curl http://127.0.0.1:9191/api/v1/status"
|
|
234
|
+
echo ""
|
|
235
|
+
echo " To uninstall:"
|
|
236
|
+
echo " sudo launchctl unload ${PLIST_PATH}"
|
|
237
|
+
echo " sudo rm ${PLIST_PATH}"
|
|
238
|
+
echo ""
|