<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://www.wikicshse.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%91%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2018%2FSECCOMP</id>
	<title>Безопасность компьютерных систем 2018/SECCOMP - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://www.wikicshse.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%91%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2018%2FSECCOMP"/>
	<link rel="alternate" type="text/html" href="https://www.wikicshse.ru/index.php?title=%D0%91%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2018/SECCOMP&amp;action=history"/>
	<updated>2026-06-06T12:34:14Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://www.wikicshse.ru/index.php?title=%D0%91%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2018/SECCOMP&amp;diff=2015&amp;oldid=prev</id>
		<title>imported&gt;Gamajun: Migrated current public revision from wiki.cs.hse.ru</title>
		<link rel="alternate" type="text/html" href="https://www.wikicshse.ru/index.php?title=%D0%91%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_2018/SECCOMP&amp;diff=2015&amp;oldid=prev"/>
		<updated>2019-11-24T19:51:57Z</updated>

		<summary type="html">&lt;p&gt;Migrated current public revision from wiki.cs.hse.ru&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Linux seccomp ==&lt;br /&gt;
Ссылки для изучения:&lt;br /&gt;
&lt;br /&gt;
# Рекомендуемая основная презентация (пригодится для выполнения бонусного задания к заданию 3): http://events.linuxfoundation.org/sites/events/files/slides/limiting_kernel_attack_surface_with_seccomp-ContainerCon.eu_2016-Kerrisk.pdf&lt;br /&gt;
# https://eigenstate.org/notes/seccomp&lt;br /&gt;
# Kafel - язык для конструирования политик seccomp (not an official Google product) https://github.com/google/kafel&lt;br /&gt;
&lt;br /&gt;
== Тестовый пример 1 ==&lt;br /&gt;
&lt;br /&gt;
  #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
  #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
  #include &amp;lt;linux/seccomp.h&amp;gt;&lt;br /&gt;
  #include &amp;lt;sys/prctl.h&amp;gt;&lt;br /&gt;
  int main () {&lt;br /&gt;
  pid_t pid;&lt;br /&gt;
  printf(&amp;quot;Step 1: no restrictions yet\n&amp;quot;);&lt;br /&gt;
  prctl (PR_SET_SECCOMP, SECCOMP_MODE_STRICT);&lt;br /&gt;
  printf (&amp;quot;Step 2: entering the strict mode. Only read(), write(), exit() and sigreturn() syscalls    are allowed\n&amp;quot;);&lt;br /&gt;
  pid = getpid ();&lt;br /&gt;
  printf (&amp;quot;!!YOU SHOULD NOT SEE THIS!! My PID = %d&amp;quot;, pid);&lt;br /&gt;
  return 0;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
== Тестовый пример 2 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
  #include &amp;lt;seccomp.h&amp;gt;&lt;br /&gt;
  #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
  #include &amp;lt;sys/fcntl.h&amp;gt;&lt;br /&gt;
  #include &amp;lt;errno.h&amp;gt;&lt;br /&gt;
  int main() {&lt;br /&gt;
    pid_t pid;&lt;br /&gt;
    scmp_filter_ctx ctx = seccomp_init(SCMP_ACT_TRAP);&lt;br /&gt;
    seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(read), 0);&lt;br /&gt;
    seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(write), 0);&lt;br /&gt;
    seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(sigreturn), 0);&lt;br /&gt;
    seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(exit_group), 0);&lt;br /&gt;
    printf (&amp;quot;No restrictions yet\n&amp;quot;);&lt;br /&gt;
    seccomp_load(ctx);&lt;br /&gt;
    pid = getpid();&lt;br /&gt;
    printf(&amp;quot;!! YOU SHOULD NOT SEE THIS!! My PID is%d\n&amp;quot;, pid);&lt;br /&gt;
    return 0;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
== Тестовый пример 3 ==&lt;br /&gt;
&lt;br /&gt;
  #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
  #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
  #include &amp;lt;stddef.h&amp;gt;&lt;br /&gt;
  #include &amp;lt;string.h&amp;gt;&lt;br /&gt;
  #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
  #include &amp;lt;errno.h&amp;gt;&lt;br /&gt;
  #include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;
  #include &amp;lt;sys/prctl.h&amp;gt;&lt;br /&gt;
  #include &amp;lt;sys/syscall.h&amp;gt;&lt;br /&gt;
  #include &amp;lt;sys/socket.h&amp;gt;&lt;br /&gt;
  #include &amp;lt;sys/fcntl.h&amp;gt;&lt;br /&gt;
  #include &amp;lt;linux/filter.h&amp;gt;&lt;br /&gt;
  #include &amp;lt;linux/seccomp.h&amp;gt;&lt;br /&gt;
  #include &amp;lt;linux/audit.h&amp;gt;&lt;br /&gt;
  #include &amp;lt;asm/unistd_64.h&amp;gt;&lt;br /&gt;
  static void install_filter ( void ) {&lt;br /&gt;
  struct sock_filter filter [] = {&lt;br /&gt;
  BPF_STMT ( BPF_LD | BPF_W | BPF_ABS ,&lt;br /&gt;
  ( offsetof ( struct seccomp_data , arch ))) ,&lt;br /&gt;
  BPF_JUMP ( BPF_JMP | BPF_JEQ | BPF_K ,&lt;br /&gt;
  AUDIT_ARCH_X86_64 , 1 , 0) ,&lt;br /&gt;
  BPF_STMT ( BPF_RET | BPF_K , SECCOMP_RET_KILL ) ,&lt;br /&gt;
  BPF_STMT ( BPF_LD | BPF_W | BPF_ABS ,&lt;br /&gt;
  ( offsetof ( struct seccomp_data , nr ))) ,&lt;br /&gt;
  BPF_JUMP ( BPF_JMP | BPF_JEQ | BPF_K , __NR_open ,&lt;br /&gt;
 1 , 0) ,&lt;br /&gt;
  BPF_STMT ( BPF_RET | BPF_K , SECCOMP_RET_ALLOW ) ,&lt;br /&gt;
  BPF_STMT ( BPF_RET | BPF_K , SECCOMP_RET_KILL )&lt;br /&gt;
  };&lt;br /&gt;
  struct sock_fprog prog = {&lt;br /&gt;
  .len = ( unsigned short ) ( sizeof ( filter ) /&lt;br /&gt;
  sizeof ( filter [0])) ,&lt;br /&gt;
  . filter = filter ,&lt;br /&gt;
  };&lt;br /&gt;
  syscall( __NR_seccomp , SECCOMP_SET_MODE_FILTER , 0 , &amp;amp; prog );&lt;br /&gt;
 }&lt;br /&gt;
  int main (int argc , char ** argv ) {&lt;br /&gt;
   prctl ( PR_SET_NO_NEW_PRIVS , 1 , 0 , 0 , 0);&lt;br /&gt;
   install_filter ();&lt;br /&gt;
   open ( &amp;quot;/tmp/a&amp;quot; , O_RDONLY );&lt;br /&gt;
   printf ( &amp;quot;We shouldn ’t see this message \n&amp;quot; );&lt;br /&gt;
  exit ( EXIT_SUCCESS );&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
== Тестовый пример 4 ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stddef.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
#include &amp;lt;errno.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sys/prctl.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sys/syscall.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sys/socket.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;linux/filter.h&amp;gt;&lt;br /&gt;
#include &amp;lt;linux/seccomp.h&amp;gt;&lt;br /&gt;
#include &amp;lt;linux/audit.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define ArchField offsetof(struct seccomp_data, arch)&lt;br /&gt;
&lt;br /&gt;
#define Allow(syscall) \&lt;br /&gt;
    BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, SYS_##syscall, 0, 1), \&lt;br /&gt;
    BPF_STMT(BPF_RET+BPF_K, SECCOMP_RET_ALLOW)&lt;br /&gt;
&lt;br /&gt;
struct sock_filter filter[] = {&lt;br /&gt;
    /* validate arch */&lt;br /&gt;
    BPF_STMT(BPF_LD+BPF_W+BPF_ABS, ArchField),&lt;br /&gt;
    BPF_JUMP( BPF_JMP+BPF_JEQ+BPF_K, AUDIT_ARCH_X86_64, 1, 0),&lt;br /&gt;
    BPF_STMT(BPF_RET+BPF_K, SECCOMP_RET_TRAP),&lt;br /&gt;
&lt;br /&gt;
    /* load syscall */&lt;br /&gt;
    BPF_STMT(BPF_LD+BPF_W+BPF_ABS, offsetof(struct seccomp_data, nr)),&lt;br /&gt;
&lt;br /&gt;
    /* list of allowed syscalls */&lt;br /&gt;
    Allow(exit_group),  /* exits a processs */&lt;br /&gt;
    Allow(brk),     /* for malloc(), inside libc */&lt;br /&gt;
    Allow(mmap),        /* also for malloc() */&lt;br /&gt;
    Allow(munmap),      /* for free(), inside libc */&lt;br /&gt;
    Allow(write),       /* called by printf */&lt;br /&gt;
    Allow(fstat),       /* called by printf */&lt;br /&gt;
&lt;br /&gt;
    /* and if we don&amp;#039;t match above, die */&lt;br /&gt;
    BPF_STMT(BPF_RET+BPF_K, SECCOMP_RET_KILL),&lt;br /&gt;
};&lt;br /&gt;
struct sock_fprog filterprog = {&lt;br /&gt;
    .len = sizeof(filter)/sizeof(filter[0]),&lt;br /&gt;
    .filter = filter&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char **argv) {&lt;br /&gt;
    char buf[1024];&lt;br /&gt;
&lt;br /&gt;
    /* set up the restricted environment */&lt;br /&gt;
    if (prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0)) {&lt;br /&gt;
        perror(&amp;quot;Could not start seccomp:&amp;quot;);&lt;br /&gt;
        exit(1);&lt;br /&gt;
    }&lt;br /&gt;
    if (prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &amp;amp;filterprog) == -1) {&lt;br /&gt;
        perror(&amp;quot;Could not start seccomp:&amp;quot;);&lt;br /&gt;
        exit(1);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /* printf only writes to stdout, but for some reason it stats it. */&lt;br /&gt;
    printf(&amp;quot;hello there!\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    if (argc &amp;gt; 1 &amp;amp;&amp;amp; strcmp(argv[1], &amp;quot;haxor&amp;quot;) == 0) {&lt;br /&gt;
        int fd = socket(AF_INET6, SOCK_STREAM, 0);&lt;br /&gt;
        /* ...and start sending spam */&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>imported&gt;Gamajun</name></author>
	</entry>
</feed>