Skip to content

Commit 785f669

Browse files
committed
Added symlink link connect socket execve syscall helpers
Also added rules is yaml file are triggered Signed-off-by: GLVS Kiriti <glvskiriti2003369@gmail.com>
1 parent ac0198e commit 785f669

File tree

4 files changed

+124
-1
lines changed

4 files changed

+124
-1
lines changed

events/exampleyamlfile.yml

+54-1
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,62 @@ tests:
77
args:
88
filepath: "/etc/../etc/../etc/shadow"
99
flag: 0
10-
mode: 0655
10+
mode: 0644
11+
after: ""
12+
13+
- rule: ReadSensitiveFileUntrusted
14+
runner: HostRunner
15+
before: ""
16+
steps:
17+
- syscall: "open"
18+
args:
19+
filepath: "/etc/shadow"
20+
flag: 0
21+
mode: 0644
22+
after: ""
23+
24+
- rule: ReadSensitiveFileTrustedAfterStartup
25+
runner: HostRunner
26+
before: ""
27+
steps:
28+
- syscall: "open"
29+
args:
30+
filepath: "/etc/shadow"
31+
flag: 0
32+
mode: 0644
1133
after: ""
1234

35+
- rule: ClearLogActivities
36+
runner: HostRunner
37+
before: "mkdir /tmp/created-by-event-generator && touch /tmp/created-by-event-generator/syslog"
38+
steps:
39+
- syscall: "open"
40+
args:
41+
filepath: "/tmp/created-by-event-generator/syslog"
42+
flag: 513
43+
mode: 0644
44+
after: "rm -rf /tmp/created-by-event-generator"
45+
46+
- rule: CreateSymlinkOverSensitiveFiles
47+
runner: HostRunner
48+
before: "mkdir /created-by-event-generator"
49+
steps:
50+
- syscall: "symlink"
51+
args:
52+
oldpath: "/etc"
53+
newpath: "/created-by-event-generator/newpath"
54+
after: "rm /created-by-event-generator/newpath && rmdir /created-by-event-generator"
55+
56+
- rule: CreateHardlinkOverSensitiveFiles
57+
runner: HostRunner
58+
before: "mkdir /created-by-event-generator"
59+
steps:
60+
- syscall: "link"
61+
args:
62+
oldpath: "/etc/shadow"
63+
newpath: "/created-by-event-generator/newpath"
64+
after: "rm /created-by-event-generator/newpath && rmdir /created-by-event-generator"
65+
1366
- rule: LaunchIngressRemoteFileCopyToolsInsideContainer
1467
runner: ContainerRunner
1568
before: "wget example.com"

pkg/declarative/helpers.go

+24
Original file line numberDiff line numberDiff line change
@@ -88,3 +88,27 @@ func Openat2Syscall(dirfd int, filepath string, flags int, mode uint32, resolve
8888
}
8989
return fd, nil
9090
}
91+
92+
func ExecveSyscall(exepath string, cmnd []string, envv []string) error {
93+
return unix.Exec(exepath, cmnd, envv)
94+
}
95+
96+
func ConnectSyscall(sockfd int, socketAddr unix.Sockaddr) error {
97+
return unix.Connect(sockfd, socketAddr)
98+
}
99+
100+
func SocketSyscall(domain int, socktype int, protocol int) (int, error) {
101+
fd, err := unix.Socket(domain, socktype, protocol)
102+
if err != nil {
103+
return -1, fmt.Errorf("error creating a socket: %v", err)
104+
}
105+
return fd, nil
106+
}
107+
108+
func SymlinkSyscall(oldpath string, newpath string) error {
109+
return unix.Symlink(oldpath, newpath)
110+
}
111+
112+
func LinkSyscall(oldpath string, newpath string) error {
113+
return unix.Link(oldpath, newpath)
114+
}

pkg/declarative/host.go

+25
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,31 @@ func (r *Hostrunner) ExecuteStep(ctx context.Context, test Test) error {
5050
if err != nil {
5151
return fmt.Errorf("openat2 syscall failed with error: %v", err)
5252
}
53+
case "execve":
54+
err := ExecveSyscall(*step.Args.Exepath, *step.Args.Cmnd, *step.Args.Envv)
55+
if err != nil {
56+
return fmt.Errorf("execve syscall failed with error: %v", err)
57+
}
58+
case "connect":
59+
err := ConnectSyscall(*step.Args.Sockfd, *step.Args.Sockaddr)
60+
if err != nil {
61+
return fmt.Errorf("connect syscall failed with error: %v", err)
62+
}
63+
case "socket":
64+
_, err := SocketSyscall(*step.Args.Domain, *step.Args.SockType, *step.Args.Protocol)
65+
if err != nil {
66+
return fmt.Errorf("socket syscall failed with error: %v", err)
67+
}
68+
case "symlink":
69+
err := SymlinkSyscall(*step.Args.Oldpath, *step.Args.Newpath)
70+
if err != nil {
71+
return fmt.Errorf("symlink syscall failed with error: %v", err)
72+
}
73+
case "link":
74+
err := LinkSyscall(*step.Args.Oldpath, *step.Args.Newpath)
75+
if err != nil {
76+
return fmt.Errorf("link syscall failed with error: %v", err)
77+
}
5378
default:
5479
return fmt.Errorf("unsupported syscall: %s", step.Syscall)
5580
}

pkg/declarative/yamltypes.go

+21
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,34 @@ limitations under the License.
1414

1515
package declarative
1616

17+
import "golang.org/x/sys/unix"
18+
1719
// Yaml file structure
1820
type Args struct {
21+
// For open, openat, openat2 syscalls
1922
Dirfd *int `yaml:"dirfd,omitempty"`
2023
Filepath *string `yaml:"filepath,omitempty"`
2124
Flags *int `yaml:"flag,omitempty"`
2225
Mode *uint32 `yaml:"mode,omitempty"`
2326
Resolve *uint64 `yaml:"resolve,omitempty"`
27+
28+
// For execve syscall
29+
Exepath *string `yaml:"exepath,omitempty"`
30+
Cmnd *[]string `yaml:"cmnd,omitempty"`
31+
Envv *[]string `yaml:"envv,omitempty"`
32+
33+
// For connect syscall
34+
Sockfd *int `yaml:"sockfd,omitempty"`
35+
Sockaddr *unix.Sockaddr `yaml:"sockaddr,omitempty"`
36+
37+
// For socket syscall
38+
Domain *int `yaml:"domain,omitempty"`
39+
SockType *int `yaml:"socktype,omitempty"`
40+
Protocol *int `yaml:"protocol,omitempty"`
41+
42+
// For symlink and link syscalls
43+
Oldpath *string `yaml:"oldpath,omitempty"`
44+
Newpath *string `yaml:"newpath,omitempty"`
2445
}
2546

2647
type SyscallStep struct {

0 commit comments

Comments
 (0)