Hi Pautl.
Thanks for the swift response.
But i'm getting following error while compiling above code.
#gcc test-seccomp.c -l seccomp -o seccomp
In file included from test-seccomp.c:6:0:
test-seccomp.c: In function ‘main’:
test-seccomp.c:37:51: error: ‘__NR_argv’ undeclared (first use in this function)
seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(argv[iterator]), 0);
^
test-seccomp.c:37:51: note: each undeclared identifier is reported only once
for each function it appears in
Am i doing something wrong here? Can this be achieved differently?
On Tuesday, May 22, 2018 at 3:34:21 AM UTC+5:30, Paul Moore wrote:
> On Mon, May 21, 2018 at 4:24 PM, Amit Malav <[email protected]> wrote:
> > Hi,
> > I want to add seccomp filters at run time and not at compile time. I want
> > to pass list of syscalls that needs to be blocked to a c executable which
> > spawns new child process with these filters in place.
>
> Hi Amit,
>
> Yes, the libseccomp filters are generated at run time. Also, you
> shouldn't need to manually set PR_SET_NO_NEW_PRIVS, it is enabled by
> default when libseccomp loads the seccomp-bpf filter into the kernel;
> see the seccomp_attr_set(3) manpage, especially the
> SCMP_FLTATR_CTL_NNP attribute.
>
> > Source code:
> >
> > #include <stdlib.h>
> > #include <unistd.h>
> > #include <stdio.h>
> > #include <linux/limits.h>
> > #include <string.h>
> > #include <seccomp.h> /* libseccomp */
> > #include <sys/prctl.h> /* prctl */
> >
> > int show_usage(char *argv)
> > {
> > printf("Usage: %s <command> <syscalls>\n\tcommand: command to be
> > executed with command line arguments\n\tsyscalls: space separated list of
> > syscalls\n", argv);
> > return 0;
> > }
> >
> > int main(int argc, char **argv)
> > {
> > int iterator;
> > if (argc < 2)
> > {
> > show_usage(argv[0]);
> > return 0;
> > }
> > if (argc >= 3)
> > {
> > //Add seccomp filters
> > // ensure none of our children will ever be granted more privileges
> > // (via setuid, capabilities, ...)
> > prctl(PR_SET_NO_NEW_PRIVS, 1);
> > // ensure no escape is possible via ptrace
> > prctl(PR_SET_DUMPABLE, 0);
> > // Init the filter
> > scmp_filter_ctx ctx;
> > ctx = seccomp_init(SCMP_ACT_KILL); // default action: kill
> > // setup basic whitelisting
> > for (iterator = 2; iterator < argc; iterator++)
> > {
> > seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(argv[iterator]),
> > 0);
> > }
> > seccomp_load(ctx);
> > }
> > FILE *pipe_fp;
> > /* Create one way pipe line with call to popen() */
> > char path[PATH_MAX];
> > //Run command present in argv[1]
> > if ((pipe_fp = popen(strcat(argv[1], " 2>&1"), "r")) == NULL)
> > {
> > perror("Error in popen");
> > exit(EXIT_FAILURE);
> > }
> > // Get output from child's stdout/stderr
> > /* Processing loop */
> > while (fgets(path, PATH_MAX, pipe_fp) != NULL)
> > {
> > printf("%s", path);
> > }
> > /* Close the pipe */
> > int close_status = pclose(pipe_fp);
> > if (close_status != 0)
> > {
> > exit(EXIT_FAILURE);
> > }
> > exit(EXIT_SUCCESS);
> > }
> >
> > --
> > You received this message because you are subscribed to the Google Groups
> > "libseccomp" group.
> > To unsubscribe from this group and stop receiving emails from it, send an
> > email to [email protected].
> > To post to this group, send email to [email protected].
> > For more options, visit https://groups.google.com/d/optout.
>
>
>
> --
> paul moore
> www.paul-moore.com
On Tuesday, May 22, 2018 at 3:34:21 AM UTC+5:30, Paul Moore wrote:
> On Mon, May 21, 2018 at 4:24 PM, Amit Malav <[email protected]> wrote:
> > Hi,
> > I want to add seccomp filters at run time and not at compile time. I want
> > to pass list of syscalls that needs to be blocked to a c executable which
> > spawns new child process with these filters in place.
>
> Hi Amit,
>
> Yes, the libseccomp filters are generated at run time. Also, you
> shouldn't need to manually set PR_SET_NO_NEW_PRIVS, it is enabled by
> default when libseccomp loads the seccomp-bpf filter into the kernel;
> see the seccomp_attr_set(3) manpage, especially the
> SCMP_FLTATR_CTL_NNP attribute.
>
> > Source code:
> >
> > #include <stdlib.h>
> > #include <unistd.h>
> > #include <stdio.h>
> > #include <linux/limits.h>
> > #include <string.h>
> > #include <seccomp.h> /* libseccomp */
> > #include <sys/prctl.h> /* prctl */
> >
> > int show_usage(char *argv)
> > {
> > printf("Usage: %s <command> <syscalls>\n\tcommand: command to be
> > executed with command line arguments\n\tsyscalls: space separated list of
> > syscalls\n", argv);
> > return 0;
> > }
> >
> > int main(int argc, char **argv)
> > {
> > int iterator;
> > if (argc < 2)
> > {
> > show_usage(argv[0]);
> > return 0;
> > }
> > if (argc >= 3)
> > {
> > //Add seccomp filters
> > // ensure none of our children will ever be granted more privileges
> > // (via setuid, capabilities, ...)
> > prctl(PR_SET_NO_NEW_PRIVS, 1);
> > // ensure no escape is possible via ptrace
> > prctl(PR_SET_DUMPABLE, 0);
> > // Init the filter
> > scmp_filter_ctx ctx;
> > ctx = seccomp_init(SCMP_ACT_KILL); // default action: kill
> > // setup basic whitelisting
> > for (iterator = 2; iterator < argc; iterator++)
> > {
> > seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(argv[iterator]),
> > 0);
> > }
> > seccomp_load(ctx);
> > }
> > FILE *pipe_fp;
> > /* Create one way pipe line with call to popen() */
> > char path[PATH_MAX];
> > //Run command present in argv[1]
> > if ((pipe_fp = popen(strcat(argv[1], " 2>&1"), "r")) == NULL)
> > {
> > perror("Error in popen");
> > exit(EXIT_FAILURE);
> > }
> > // Get output from child's stdout/stderr
> > /* Processing loop */
> > while (fgets(path, PATH_MAX, pipe_fp) != NULL)
> > {
> > printf("%s", path);
> > }
> > /* Close the pipe */
> > int close_status = pclose(pipe_fp);
> > if (close_status != 0)
> > {
> > exit(EXIT_FAILURE);
> > }
> > exit(EXIT_SUCCESS);
> > }
> >
> > --
> > You received this message because you are subscribed to the Google Groups
> > "libseccomp" group.
> > To unsubscribe from this group and stop receiving emails from it, send an
> > email to [email protected].
> > To post to this group, send email to [email protected].
> > For more options, visit https://groups.google.com/d/optout.
>
>
>
> --
> paul moore
> www.paul-moore.com
--
You received this message because you are subscribed to the Google Groups
"libseccomp" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
For more options, visit https://groups.google.com/d/optout.