<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="https://blog.bl4nk.kr/feed_style.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ko">
    <tabi:metadata xmlns:tabi="https://github.com/welpo/tabi">
        <tabi:base_url>https://blog.bl4nk.kr</tabi:base_url>
        <tabi:separator>
            •
        </tabi:separator>
        <tabi:about_feeds>
            이것은 웹 피드이며, Atom 피드로도 알려져 있습니다. 주소 표시 줄의 URL을 뉴스 리더로 복사하여 구독하세요. About Feeds를 방문하여 자세히 알아보고 시작하세요. 무료입니다.
        </tabi:about_feeds>
        <tabi:visit_the_site>
            웹사이트 방문하기
        </tabi:visit_the_site>
        <tabi:recent_posts>
            최근 게시물
        </tabi:recent_posts>
        <tabi:last_updated_on>
            $DATE에 업데이트됨
        </tabi:last_updated_on>
        <tabi:default_theme></tabi:default_theme>
        <tabi:post_listing_date>date</tabi:post_listing_date>
        <tabi:current_section>seccomp</tabi:current_section>
    </tabi:metadata><link rel="extra-stylesheet" href="https://blog.bl4nk.kr/skins/lavender.css?h=31ee0a710ed660d122f6" /><title>~/bl4nk - seccomp</title>
        <subtitle>fill in the bl4nk</subtitle>
    <link href="https://blog.bl4nk.kr/ko/tags/seccomp/atom.xml" rel="self" type="application/atom+xml"/>
    <link href="https://blog.bl4nk.kr/ko/tags/seccomp/" rel="alternate" type="text/html"/>
    <generator uri="https://www.getzola.org/">Zola</generator><updated>2024-06-15T00:00:00+00:00</updated><id>https://blog.bl4nk.kr/ko/tags/seccomp/atom.xml</id><entry xml:lang="ko">
        <title>[SECCOMP] prctl를 이용한 SECCOMP 정리</title>
        <published>2024-06-15T00:00:00+00:00</published>
        <updated>2024-06-15T00:00:00+00:00</updated>
        <author>
            <name>bl4nk</name>
        </author>
        <link rel="alternate" href="https://blog.bl4nk.kr/ko/blog/seccomp-using-prctl-function/" type="text/html"/>
        <id>https://blog.bl4nk.kr/ko/blog/seccomp-using-prctl-function/</id>
        
            <content type="html">&lt;h2 id=&quot;0x00-introduction&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#0x00-introduction&quot; aria-label=&quot;Anchor link for: 0x00-introduction&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/a&gt;
0x00. Introduction&lt;/h2&gt;
&lt;p&gt;SECCOMP(SECure COMPuting mode)는 프로세스 샌드박싱을 제공하는 기능이다.
자세하게는 프로세스에서 실행되는 syscall을 제한시켜, 호출 가능한 것 이외의 syscall이 호출될 경우 프로세스를 종료시킨다(&lt;code&gt;SIGKILL&lt;/code&gt;).
다른 보호 기법들처럼 컴파일 시 적용하는게 아니라 소스코드 단에서 설정하는 코드를 넣어주어야 한다.&lt;/p&gt;
&lt;p&gt;예전에는 &lt;code&gt;/proc/&amp;lt;pid&amp;gt;/seccomp&lt;/code&gt; 파일의 값을 통해 활성화 했었던 것 같으나, &lt;code&gt;prctl&lt;/code&gt; 혹은 &lt;code&gt;sys_seccomp&lt;/code&gt;를 통해서 설정되는 것으로 바뀌었다. (언제부터인지는 모르겠다…)&lt;/p&gt;
&lt;p&gt;본 포스트에서는 &lt;code&gt;prctl&lt;/code&gt; 함수를 통한 SECCOMP 기법을 기술한다.&lt;/p&gt;
&lt;h2 id=&quot;0x01-prctl-hamsu&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#0x01-prctl-hamsu&quot; aria-label=&quot;Anchor link for: 0x01-prctl-hamsu&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/a&gt;
0x01. prctl 함수&lt;/h2&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;c&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; prctl&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;z-l-9 z-d-12&quot;&gt; option&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; ...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;            /*&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; unsigned long arg2, unsigned long arg3,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;            unsigned long arg4, unsigned long arg5 &lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;*/&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;prctl&lt;/code&gt; 함수는 프로세스나 쓰레드의 속성을 관리하기 위한 함수이다(PRocess ConTroL).
자세하게 설명할 SECCOMP 적용 이외에도 프로세스 이름을 얻는다든가, 엔디안 상태를 얻는다든가하는 다양한 행위를 할 수 있다.
원하는 행위에 따라 가변 인자를 받아서 동작하는 구조이다.&lt;/p&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;c&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;/*&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; Values to pass as first argument to prctl() &lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;*/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;define&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; PR_SET_PDEATHSIG&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;  1&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;  /*&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; Second arg is a signal &lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;*/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;define&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; PR_GET_PDEATHSIG&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;  2&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;  /*&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; Second arg is a ptr to return the signal &lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;*/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;/*&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; Get/set current-&amp;gt;mm-&amp;gt;dumpable &lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;*/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;define&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; PR_GET_DUMPABLE&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;   3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;define&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; PR_SET_DUMPABLE&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;   4&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;/*&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; Get/set unaligned access control bits (if meaningful) &lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;*/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;define&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; PR_GET_UNALIGN&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;    5&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;define&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; PR_SET_UNALIGN&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;    6&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;/*&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; Set/Get process name &lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;*/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;define&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; PR_SET_NAME&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;    15&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;define&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; PR_GET_NAME&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;    16&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;/*&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; Get/set process endian &lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;*/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;define&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; PR_GET_ENDIAN&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;   19&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;define&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; PR_SET_ENDIAN&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;   20&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;/*&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; Get/set process seccomp mode &lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;*/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;//&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; -----------------------------------------&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;define&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; PR_GET_SECCOMP&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;  21&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;                //&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;define&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; PR_SET_SECCOMP&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;  22&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;                //&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;define&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; PR_SET_NO_NEW_PRIVS&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;     38&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;        //&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;define&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; PR_GET_NO_NEW_PRIVS&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;     39&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;        //&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;//&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; -----------------------------------------&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;prctl.h&lt;/code&gt;를 확인해보면 첫 번째 인자인 &lt;code&gt;option&lt;/code&gt;에 들어가는 매크로의 값들을 확인할 수 있다.
이 중에서 SECCOMP와 관련이 있는 &lt;code&gt;PR_SET_NO_NEW_PRIVS&lt;/code&gt;와 &lt;code&gt;PR_SET_SECCOMP&lt;/code&gt;에 대해 자세히 알아보자.&lt;/p&gt;
&lt;h3 id=&quot;pr-set-no-new-privs&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#pr-set-no-new-privs&quot; aria-label=&quot;Anchor link for: pr-set-no-new-privs&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/a&gt;
PR_SET_NO_NEW_PRIVS&lt;/h3&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;c&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; prctl&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;PR_SET_NO_NEW_PRIVS&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt; int&lt;/span&gt;&lt;span class=&quot;z-l-9 z-d-12&quot;&gt; value&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;현재 프로세스의 &lt;code&gt;no_new_privs&lt;/code&gt; 속성을 &lt;code&gt;value&lt;/code&gt; 값으로 설정해주는 동작을 수행한다.&lt;/p&gt;
&lt;p&gt;이 속성은 리눅스 커널 4.10 이후부터는 &lt;code&gt;/proc/&amp;lt;pid&amp;gt;/status&lt;/code&gt;의 &lt;code&gt;NoNewPrivs&lt;/code&gt; 필드에서 확인할 수 있다고 한다.
이 속성이 1으로 설정되어있으면 현재 프로세스와 자식 프로세스에서 새로운 권한을 주는 명령을 수행할 수 없게 된다.
다만 권한을 제거하는 명령은 여전히 수행할 수 있다고 한다.&lt;/p&gt;
&lt;p&gt;이 속성이 왜 중요한지는 &lt;a href=&quot;https://blog.bl4nk.kr/ko/blog/seccomp-using-prctl-function/#seccomp-mode-filter&quot;&gt;SECCOMP_MODE_FILTER&lt;/a&gt; 파트에서 서술하겠다.&lt;/p&gt;
&lt;h3 id=&quot;pr-set-seccomp&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#pr-set-seccomp&quot; aria-label=&quot;Anchor link for: pr-set-seccomp&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/a&gt;
PR_SET_SECCOMP&lt;/h3&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;c&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; prctl&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;PR_SET_SECCOMP&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt; int&lt;/span&gt;&lt;span class=&quot;z-l-9 z-d-12&quot;&gt; mode&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;드디어 SECCOMP를 실제 적용하는 부분으로, 두 가지 모드가 존재한다.&lt;/p&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;c&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; /*&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; Valid values for seccomp.mode and prctl(PR_SET_SECCOMP, &amp;lt;mode&amp;gt;) &lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;*/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt; #&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;define&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; SECCOMP_MODE_DISABLED&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;   0&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; /*&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; seccomp is not in use. &lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;*/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt; #&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;define&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; SECCOMP_MODE_STRICT&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 1&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; /*&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; uses hard-coded filter. &lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;*/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt; #&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;define&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; SECCOMP_MODE_FILTER&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 2&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; /*&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; uses user-supplied filter. &lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;*/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;seccomp.h&lt;/code&gt;를 확인해보면 모드가 각각 매크로로 정의되어있다.&lt;/p&gt;
&lt;h4 id=&quot;seccomp-mode-strict&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#seccomp-mode-strict&quot; aria-label=&quot;Anchor link for: seccomp-mode-strict&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/a&gt;
SECCOMP_MODE_STRICT&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;read&lt;/code&gt;, &lt;code&gt;write&lt;/code&gt;, &lt;code&gt;exit&lt;/code&gt;, &lt;code&gt;sigreturn&lt;/code&gt; 네 가지 syscall만 가능한 모드로 이미 가능한 syscall이 정해져있기 때문에 세 번째 인자가 필요없다.&lt;/p&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;c&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;include&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;stdio.h&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;include&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;sys/prctl.h&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;include&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;linux/seccomp.h&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; main&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;        int&lt;/span&gt;&lt;span&gt; fd&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;        char&lt;/span&gt;&lt;span class=&quot;z-l-9 z-d-12&quot;&gt; buf&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;16&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt; =&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;0&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;        if&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;prctl&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;PR_SET_SECCOMP&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; SECCOMP_MODE_STRICT&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt; !=&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;                perror&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;SET_SECCOMP error&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;        read&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; buf&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 16&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;        write&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; buf&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        fd &lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; open&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a.txt&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;w&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;        write&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;fd&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; buf&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;        close&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;fd&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;        return&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;예시 코드를 컴파일해서 실행한 결과, &lt;code&gt;open&lt;/code&gt;에서 &lt;code&gt;SIGKILL&lt;/code&gt;이 발생했다.&lt;/p&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ./strict&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;hihi&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;hihi&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;    517393 killed     ./strict&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;seccomp-mode-filter&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#seccomp-mode-filter&quot; aria-label=&quot;Anchor link for: seccomp-mode-filter&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/a&gt;
SECCOMP_MODE_FILTER&lt;/h4&gt;
&lt;p&gt;사용자가 직접 어떤 syscall을 차단할지 룰 셋을 만들어서 SECCOMP를 설정하는 모드이다.
앞서 언급한 &lt;code&gt;PR_SET_NO_NEW_PRIVS&lt;/code&gt;를 통해 &lt;code&gt;no_new_privs&lt;/code&gt; 속성이 설정되어야 filter 모드를 실행할 수 있다.&lt;/p&gt;
&lt;p&gt;이 때 룰 셋은 Berkeley Packet Filter(BPF)라는 어셈블리같은 문법을 사용하는데, &lt;a href=&quot;https://blog.bl4nk.kr/ko/blog/seccomp-using-prctl-function/#0x02-seccomp-tools&quot;&gt;seccomp-tools&lt;/a&gt; 부분에서 자세하게 다뤄보자.
다음은 &lt;code&gt;write&lt;/code&gt; syscall을 호출하지 못하게 필터링한 모드의 예시 코드이다.&lt;/p&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;c&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;include&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;stdio.h&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;include&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;sys/prctl.h&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;include&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;linux/seccomp.h&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;static&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt; unsigned&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt; char&lt;/span&gt;&lt;span&gt; filter&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;[]&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt; =&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;    32&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;    //&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; A = sys_number&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;    21&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 1&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 1&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;    //&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; if (A == write) goto 0003&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;    6&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 255&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 127&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;    //&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; return ALLOW&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;    6&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;        //&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; return KILL&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;struct&lt;/span&gt;&lt;span&gt; sock_fprog &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;    unsigned&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt; short&lt;/span&gt;&lt;span&gt; len&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;    unsigned&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt; char&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt; *&lt;/span&gt;&lt;span&gt;filter&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; main&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;    int&lt;/span&gt;&lt;span&gt; fd&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;    char&lt;/span&gt;&lt;span class=&quot;z-l-9 z-d-12&quot;&gt; buf&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;16&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt; =&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;0&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;    struct&lt;/span&gt;&lt;span&gt; sock_fprog prog&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;    if&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;prctl&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;PR_SET_NO_NEW_PRIVS&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 1&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt; !=&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;        perror&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;SET_NO_NEW_PRIVS error&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    prog&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt; sizeof&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;filter&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt; /&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 8&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    prog&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;filter&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt; =&lt;/span&gt;&lt;span&gt; filter&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;    if&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;prctl&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;PR_SET_SECCOMP&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; SECCOMP_MODE_FILTER&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt; &amp;amp;&lt;/span&gt;&lt;span&gt;prog&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt; !=&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;        perror&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;SET_SECCOMP error&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;    read&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; buf&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 16&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;    write&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;1&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; buf&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;          //&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt; &amp;lt;----- This will be blocked&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    fd &lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; open&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;a.txt&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;w&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;    write&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;fd&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; buf&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;    close&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;fd&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;    return&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ./filter&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;hihi&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;    669145 invalid system call (&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;core&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; dumped&lt;/span&gt;&lt;span&gt;)  ./filter&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;예시 코드를 컴파일해서 실행한 결과, &lt;code&gt;write&lt;/code&gt;에서 &lt;code&gt;SIGSYS&lt;/code&gt;가 발생했다.
Strict mode에서의 &lt;code&gt;SIGKILL&lt;/code&gt;과는 다른 메세지가 출력되길래 디버깅을 해봤는데 filter mode에서는 &lt;code&gt;SIGSYS&lt;/code&gt;로 인해 프로세스가 종료되는 것을 확인했다.&lt;/p&gt;
&lt;h2 id=&quot;0x02-seccomp-tools&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#0x02-seccomp-tools&quot; aria-label=&quot;Anchor link for: 0x02-seccomp-tools&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/a&gt;
0x02. seccomp-tools&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;SECCOMP_MODE_FILTER&lt;/code&gt;의 예시 코드를 보면, &lt;code&gt;filter&lt;/code&gt; 배열에 필터링 룰을 바이트 코드처럼 바꾸어서 넣어야 한다.
하지만 아무리 숙련자라고 하더라도 원하는 BPF 룰을 자유자재로 바이트 코드화 하기는 어렵다.
이럴 때 쓰기 좋은 것이 바로 seccomp-tools이다.&lt;/p&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; sudo&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; apt&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; install&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; gcc&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ruby-dev&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;y&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; gem&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; install&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; seccomp-tools&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;seccomp-tools 설치는 위와 같이 하면 된다.&lt;/p&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; seccomp-tools&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;Usage:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; seccomp-tools&lt;/span&gt;&lt;span&gt; [--version&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;--help&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span&gt;command&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; of&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; commands:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;        asm&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;     Seccomp&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; bpf&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; assembler.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;        disasm&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  Disassemble&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; seccomp&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; bpf.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;        dump&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;    Automatically&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; dump&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; seccomp&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; bpf&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; from&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; execution&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; file&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;s&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;        emu&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;     Emulate&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; seccomp&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; rules.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;See&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;seccomp-tools &amp;lt;command&amp;gt; --help&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; to&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; read&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; about&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; a&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; specific&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; subcommand.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Usage에서 확인할 수 있듯이 &lt;code&gt;asm&lt;/code&gt;, &lt;code&gt;disasm&lt;/code&gt;, &lt;code&gt;dump&lt;/code&gt;, &lt;code&gt;emu&lt;/code&gt; 기능을 지원하고 있다.&lt;/p&gt;
&lt;h3 id=&quot;asm&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#asm&quot; aria-label=&quot;Anchor link for: asm&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/a&gt;
asm&lt;/h3&gt;
&lt;p&gt;BPF로 작성한 룰을 바이트 코드로 변환해주는 기능으로 BPF는 주로 다음과 같이 작성한다.&lt;/p&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;A = arch&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;if (A != ARCH_X86_64) goto dead&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;A = sys_number&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;if (A &amp;gt;= 0x40000000) goto dead&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;if (A == write) goto ok&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;if (A == close) goto ok&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;if (A == dup) goto ok&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;if (A == exit) goto ok&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;return ERRNO(5)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ok:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;return ALLOW&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;dead:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;return KILL&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;뜬금없이 &lt;code&gt;A&lt;/code&gt;라는 변수가 등장해서 처음에 뭐지 싶었는데, 그냥 임의 변수라고 생각하면 편하다.&lt;/p&gt;
&lt;p&gt;이제 이 내용을 파일로 저장해서 seccomp-tools의 인자로 전달해주면 된다.&lt;/p&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; seccomp-tools&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; asm&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; rule.txt&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; \x00\x00\x00\x04\x00\x00\x00\x15\x00\x00\b&amp;gt;\x00\x00\xC0 \x00\x00\x00\x00\x00\x00\x005\x00\x06\x00\x00\x00\x00@\x15\x00\x04\x00\x01\x00\x00\x00\x15\x00\x03\x00\x03\x00\x00\x00\x15\x00\x02\x00 \x00\x00\x00\x15\x00\x01\x00&amp;lt;\x00\x00\x00\x06\x00\x00\x00\x05\x00\x05\x00\x06\x00\x00\x00\x00\x00\xFF\x7F\x06\x00\x00\x00\x00\x00\x00\x00&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; seccomp-tools&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; asm&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; rule.txt&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; c_array&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;unsigned&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; char&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; bpf[]&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; {32,0,0,0,4,0,0,0,21,0,0,8,62,0,0,192,32,0,0,0,0,0,0,0,53,0,6,0,0,0,0,64,21,0,4,0,1,0,0,0,21,0,3,0,3,0,0,0,21,0,2,0,32,0,0,0,21,0,1,0,60,0,0,0,6,0,0,0,5,0,5,0,6,0,0,0,0,0,255,127,6,0,0,0,0,0,0,0}&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; seccomp-tools&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; asm&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; rule.txt&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; c_source&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;include &amp;lt;linux/seccomp.h&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;include &amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;include &amp;lt;stdlib.h&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;#&lt;/span&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;include &amp;lt;sys/prctl.h&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;static&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; void&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; install_seccomp&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;  static&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; unsigned&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; char&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; filter[]&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; {32,0,0,0,4,0,0,0,21,0,0,8,62,0,0,192,32,0,0,0,0,0,0,0,53,0,6,0,0,0,0,64,21,0,4,0,1,0,0,0,21,0,3,0,3,0,0,0,21,0,2,0,32,0,0,0,21,0,1,0,60,0,0,0,6,0,0,0,5,0,5,0,6,0,0,0,0,0,255,127,6,0,0,0,0,0,0,0}&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;  struct&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; prog&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;    unsigned&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; short&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; len&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;    unsigned&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; char&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; *&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;filter&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  } rule = &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;    .len&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; sizeof&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;filter&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt; &amp;gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; 3,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;    .filter&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; filter&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;  if(prctl(PR_SET_NO_NEW_PRIVS,&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; 1,&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; 0,&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; 0,&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span&gt; 0) &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; perror(&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;prctl(PR_SET_NO_NEW_PRIVS)&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; exit&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  if(&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;prctl(PR_SET_SECCOMP,&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; SECCOMP_MODE_FILTER,&lt;/span&gt;&lt;span&gt; &amp;amp;&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;rule&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span&gt; 0) &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; perror(&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;prctl(PR_SET_SECCOMP)&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; exit&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;2&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;예시를 보면 결과를 다양한 포맷으로 출력할 수 있는데, -f 옵션에 &lt;code&gt;raw&lt;/code&gt;, &lt;code&gt;c_array&lt;/code&gt;, &lt;code&gt;c_source&lt;/code&gt;, &lt;code&gt;assembly&lt;/code&gt; 등 바로 사용하기 좋은 포맷들이 있다.&lt;/p&gt;
&lt;h3 id=&quot;disasm&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#disasm&quot; aria-label=&quot;Anchor link for: disasm&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/a&gt;
disasm&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;asm&lt;/code&gt;과는 반대로 바이트 코드 형식의 BPF를 필터링 룰로 변환해준다.
입력 파일로 바이트 코드가 저장된 파일을 인자로 주면 된다.&lt;/p&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; xxd&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; rule.raw&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;00000000:&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 2000&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0000&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0400&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0000&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 1500&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0008&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; 3e00&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; 00c0&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;   ..........&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;00000010:&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 2000&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0000&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0000&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0000&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 3500&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0600&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0000&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0040&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;   .......5......@&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;00000020:&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 1500&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0400&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0100&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0000&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 1500&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0300&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0300&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0000&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  ................&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;00000030:&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 1500&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0200&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 2000&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0000&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 1500&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0100&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; 3c00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0000&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  ....&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; .......&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;00000040:&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0600&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0000&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0500&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0500&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0600&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0000&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0000&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ff7f&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  ................&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;00000050:&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0600&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0000&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0000&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0000&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;                      ........&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; seccomp-tools&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; disasm&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; rule.raw&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; line&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  CODE&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  JT&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;   JF&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;      K&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; 0000:&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x20&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00000004&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; arch&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; 0001:&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x15&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x08&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0xc000003e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  if&lt;/span&gt;&lt;span&gt; (A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; !=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ARCH_X86_64&lt;/span&gt;&lt;span&gt;) goto 0010&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; 0002:&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x20&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00000000&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; sys_number&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; 0003:&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x35&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x06&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x40000000&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  if&lt;/span&gt;&lt;span&gt; (A&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt; &amp;gt;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x40000000&lt;/span&gt;&lt;span&gt;) goto 0010&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; 0004:&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x15&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x04&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00000001&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  if&lt;/span&gt;&lt;span&gt; (A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ==&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; write&lt;/span&gt;&lt;span&gt;) goto 0009&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; 0005:&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x15&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x03&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00000003&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  if&lt;/span&gt;&lt;span&gt; (A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ==&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; close&lt;/span&gt;&lt;span&gt;) goto 0009&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; 0006:&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x15&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x02&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00000020&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  if&lt;/span&gt;&lt;span&gt; (A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ==&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; dup&lt;/span&gt;&lt;span&gt;) goto 0009&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; 0007:&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x15&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x01&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x0000003c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  if&lt;/span&gt;&lt;span&gt; (A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ==&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; exit&lt;/span&gt;&lt;span&gt;) goto 0009&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; 0008:&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x06&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00050005&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  return&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ERRNO&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;5&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; 0009:&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x06&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x7fff0000&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  return&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ALLOW&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; 0010:&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x06&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00000000&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  return&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; KILL&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; seccomp-tools&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; asm&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; rule.txt&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; raw&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt; |&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; seccomp-tools&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; disasm&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; -&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; line&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  CODE&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  JT&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;   JF&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;      K&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; 0000:&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x20&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00000004&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; arch&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; 0001:&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x15&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x08&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0xc000003e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  if&lt;/span&gt;&lt;span&gt; (A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; !=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ARCH_X86_64&lt;/span&gt;&lt;span&gt;) goto 0010&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; 0002:&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x20&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00000000&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; sys_number&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; 0003:&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x35&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x06&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x40000000&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  if&lt;/span&gt;&lt;span&gt; (A&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt; &amp;gt;&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x40000000&lt;/span&gt;&lt;span&gt;) goto 0010&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; 0004:&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x15&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x04&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00000001&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  if&lt;/span&gt;&lt;span&gt; (A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ==&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; write&lt;/span&gt;&lt;span&gt;) goto 0009&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; 0005:&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x15&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x03&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00000003&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  if&lt;/span&gt;&lt;span&gt; (A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ==&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; close&lt;/span&gt;&lt;span&gt;) goto 0009&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; 0006:&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x15&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x02&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00000020&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  if&lt;/span&gt;&lt;span&gt; (A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ==&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; dup&lt;/span&gt;&lt;span&gt;) goto 0009&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; 0007:&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x15&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x01&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x0000003c&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  if&lt;/span&gt;&lt;span&gt; (A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ==&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; exit&lt;/span&gt;&lt;span&gt;) goto 0009&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; 0008:&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x06&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00050005&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  return&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ERRNO&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;5&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; 0009:&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x06&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x7fff0000&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  return&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ALLOW&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; 0010:&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x06&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00000000&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  return&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; KILL&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;asm&lt;/code&gt;기능과 연계해서 출력값을 &lt;code&gt;raw&lt;/code&gt; 포맷으로 지정한 뒤 파이프라인을 연결해주면 BPF 룰이 제대로 작성되었는지 확인할 수 있다.&lt;/p&gt;
&lt;h3 id=&quot;dump&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#dump&quot; aria-label=&quot;Anchor link for: dump&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/a&gt;
dump&lt;/h3&gt;
&lt;p&gt;바이너리 내에 적용되는 BPF 룰을 출력해주는 기능이다.
동작 방식이 궁금해서 찾아보니 &lt;code&gt;ptrace&lt;/code&gt;를 이용하여 동적으로 분석해주는 모양이다.&lt;/p&gt;
&lt;p&gt;단 첫 번째 &lt;code&gt;prctl(PR_SET_SECCOMP)&lt;/code&gt;를 기준으로 룰을 출력해주기 때문에 &lt;code&gt;prctl&lt;/code&gt; 함수가 여러번 호출된다면 실제와 다를 수 있다.
그럴 때는 &lt;code&gt;-l&lt;/code&gt; 혹은 &lt;code&gt;--limit&lt;/code&gt; 옵션을 줘서 검사할 &lt;code&gt;prctl&lt;/code&gt; 함수의 개수를 늘릴 수 있다.&lt;/p&gt;
&lt;p&gt;또한 &lt;code&gt;-p&lt;/code&gt; 혹은 &lt;code&gt;--pid&lt;/code&gt; 옵션을 줘서 현재 실행중인 프로세스에 걸려있는 룰을 확인할 수도 있다.&lt;/p&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; seccomp-tools&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; dump&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ./filter&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; line&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  CODE&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  JT&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;   JF&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;      K&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; 0000:&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x20&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00000004&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; arch&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; 0001:&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x15&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x03&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0xc000003e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  if&lt;/span&gt;&lt;span&gt; (A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; !=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ARCH_X86_64&lt;/span&gt;&lt;span&gt;) goto 0005&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; 0002:&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x20&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00000000&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; sys_number&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; 0003:&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x15&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x01&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00000001&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  if&lt;/span&gt;&lt;span&gt; (A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ==&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; write&lt;/span&gt;&lt;span&gt;) goto 0005&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; 0004:&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x06&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x7fff0000&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  return&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ALLOW&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; 0005:&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x06&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00000000&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  return&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; KILL&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; sudo&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; seccomp-tools&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; dump&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; `&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;pgrep&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; filter&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;`&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; line&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  CODE&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  JT&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;   JF&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;      K&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; 0000:&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x20&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00000004&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; arch&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; 0001:&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x15&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x03&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0xc000003e&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  if&lt;/span&gt;&lt;span&gt; (A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; !=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ARCH_X86_64&lt;/span&gt;&lt;span&gt;) goto 0005&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; 0002:&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x20&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00000000&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; sys_number&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; 0003:&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x15&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x01&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00000001&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  if&lt;/span&gt;&lt;span&gt; (A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ==&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; write&lt;/span&gt;&lt;span&gt;) goto 0005&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; 0004:&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x06&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x7fff0000&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  return&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ALLOW&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; 0005:&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x06&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00000000&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  return&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; KILL&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;dump&lt;/code&gt; 기능을 이렇게 활용할 수 있다.&lt;/p&gt;
&lt;h3 id=&quot;emu&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#emu&quot; aria-label=&quot;Anchor link for: emu&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/a&gt;
emu&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;emu&lt;/code&gt;는 룰셋을 에뮬레이팅해서 syscall이 잘 호출되는지 혹은 잘 차단되는지를 확인하기 좋은 기능이다.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;bash&lt;/code&gt;에서 사용하면 색깔이 입혀져서 출력이 나오기 때문에 보기 편하다.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.bl4nk.kr/ko/blog/seccomp-using-prctl-function/./image.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.bl4nk.kr/ko/blog/seccomp-using-prctl-function/./image-1.png&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;
&lt;h2 id=&quot;0x03-expected-vulnerability&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#0x03-expected-vulnerability&quot; aria-label=&quot;Anchor link for: 0x03-expected-vulnerability&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/a&gt;
0x03. Expected Vulnerability&lt;/h2&gt;
&lt;p&gt;당연히 코딩을 어떻게 하느냐에 따라 다르겠지만 발생할 법한 취약점들을 생각해보았다.
좋은 아이디어나 댓글이 있다면 추가할 예정이다.&lt;/p&gt;
&lt;h3 id=&quot;x32-syscall&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#x32-syscall&quot; aria-label=&quot;Anchor link for: x32-syscall&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/a&gt;
x32 Syscall&lt;/h3&gt;
&lt;p&gt;앞선 seccomp-tools &lt;code&gt;disasm&lt;/code&gt;의 예시에서 이런 룰이 있었다.&lt;/p&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;0000: 0x20 0x00 0x00 0x00000004  A = arch&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;0001: 0x15 0x00 0x08 0xc000003e  if (A != ARCH_X86_64) goto 0010&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;0002: 0x20 0x00 0x00 0x00000000  A = sys_number&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;0003: 0x35 0x06 0x00 0x40000000  if (A &amp;gt;= 0x40000000) goto 0010&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;0001&lt;/code&gt; 라인은 아키텍처가 &lt;code&gt;X86_64&lt;/code&gt;인지 확인하는 로직이고, &lt;code&gt;0003&lt;/code&gt; 라인의 &lt;code&gt;sys_number&lt;/code&gt;가 &lt;code&gt;0x40000000&lt;/code&gt;보다 큰지는 왜 확인하는걸까?&lt;/p&gt;
&lt;p&gt;이유는 &lt;code&gt;X86_64&lt;/code&gt; 아키텍처의 호환성에 있다.
64비트 아키텍처에서 이전 32비트에서 사용하던 명령어들을 그대로 사용할 수 있게끔 개발되었는데, 이런걸 x32 ABI라고 한다.
때문에 64비트 아키텍처에서도 32비트의 syscall을 호출할 수 있는데, 그 방법이 리눅스에서는 64bit syscall number에 &lt;code&gt;0x40000000&lt;/code&gt;을 더하는 것이다.&lt;/p&gt;
&lt;p&gt;실제 리눅스 커널에서 32비트 syscall을 호출했을 때 호출되는 &lt;code&gt;do_syscall_x32&lt;/code&gt; 함수의 코드를 보자.&lt;/p&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;c&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;static&lt;/span&gt;&lt;span&gt; __always_inline &lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;bool&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; do_syscall_x32&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;struct&lt;/span&gt;&lt;span&gt; pt_regs &lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;z-l-9 z-d-12&quot;&gt;regs&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt; int&lt;/span&gt;&lt;span class=&quot;z-l-9 z-d-12&quot;&gt; nr&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;    /*&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;     * Adjust the starting offset of the table, and convert numbers&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;     * &amp;lt; __X32_SYSCALL_BIT to very high and thus out of range&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;     * numbers for comparisons.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-5 z-d-3&quot;&gt;     */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;    unsigned&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt; int&lt;/span&gt;&lt;span&gt; xnr &lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span&gt; nr &lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;-&lt;/span&gt;&lt;span&gt; __X32_SYSCALL_BIT&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;    if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;IS_ENABLED&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;CONFIG_X86_X32_ABI&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt; &amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; likely&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;xnr &lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span&gt; X32_NR_syscalls&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        xnr &lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; array_index_nospec&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;xnr&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; X32_NR_syscalls&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        regs&lt;/span&gt;&lt;span&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt;ax&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-l-9 z-d-12&quot;&gt; x32_sys_call_table&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;xnr&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;regs&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;        return&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; true&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;    return&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; false&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;함수의 첫 줄에서 &lt;code&gt;xnr = nr - __X32_SYSCALL_BIT&lt;/code&gt;으로 할당이 되는데, 이 때 &lt;code&gt;__X32_SYSCALL_BIT&lt;/code&gt; 값이 사전 정의된 &lt;code&gt;0x40000000&lt;/code&gt;이라고 한다.&lt;/p&gt;
&lt;p&gt;따라서 어떤 64비트 바이너리의 BPF 룰에 syscall number가 &lt;code&gt;0x40000000&lt;/code&gt;보다 작은지 검증하는 로직이 존재하지 않는다면,
특정 syscall이 차단되었다고 하더라도 x32 ABI를 이용하여 syscall number에 &lt;code&gt;0x40000000&lt;/code&gt;을 더해서 32비트 아키텍처의 syscall을 호출할 수 있다.&lt;/p&gt;
&lt;h3 id=&quot;filter-overwrite&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#filter-overwrite&quot; aria-label=&quot;Anchor link for: filter-overwrite&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/a&gt;
Filter Overwrite&lt;/h3&gt;
&lt;p&gt;가장 단순하게 떠오른 생각으로 메모리에 있는 BPF 필터 룰 부분을 SECCOMP가 설정되기 전에 원하는 값으로 덮을 수 있을 때 발생할 수 있는 취약점이다.
원하는 syscall을 호출할 수 있도록 룰을 바꿔준다든가, 룰을 &lt;code&gt;return ALLOW&lt;/code&gt;로 도배한다든가하는 방법이 있을 것이다.&lt;/p&gt;
&lt;p&gt;이와 관련된 문제가 &lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https://dreamhack.io&quot;&gt;dreamhack.io&lt;/a&gt;에 있으니 풀어보길 추천한다.&lt;/p&gt;
&lt;h3 id=&quot;seccomp-bypass&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#seccomp-bypass&quot; aria-label=&quot;Anchor link for: seccomp-bypass&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/a&gt;
SECCOMP Bypass&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;PR_SET_SECCOMP&lt;/code&gt; 하다가 알게 된 사실인데, BPF 룰이 좀 잘못되어있으면 prctl 함수가 에러만 리턴하고 프로세스를 종료시키지는 않는다.&lt;/p&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; cat&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; wrong.txt&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; sys_number&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ==&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; write&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; goto&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ALLOW&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; KILL&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; seccomp-tools&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; asm&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; wrong.txt&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; -&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; raw&lt;/span&gt;&lt;span class=&quot;z-l-8 z-d-10&quot;&gt; |&lt;/span&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; seccomp-tools&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; disasm&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; -&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; line&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  CODE&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  JT&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;   JF&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;      K&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;=&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; 0000:&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x20&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00000000&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; sys_number&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; 0001:&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x15&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x03&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00000001&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  if&lt;/span&gt;&lt;span&gt; (A&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ==&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; write&lt;/span&gt;&lt;span&gt;) goto 0005&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; 0002:&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x06&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x7fff0000&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  return&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ALLOW&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt; 0003:&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x06&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00&lt;/span&gt;&lt;span class=&quot;z-l-1 z-d-4&quot;&gt; 0x00000000&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt;  return&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; KILL&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;잘못된 BPF룰의 예시로, 잘 보면 0001 라인에서 goto 0005라고 되어있다.
&lt;code&gt;wrong.txt&lt;/code&gt;를 구성할 때 &lt;code&gt;goto&lt;/code&gt;에서 생각 없이 &lt;code&gt;return KILL&lt;/code&gt;이 위치하게 될 3번 라인으로 가라고 했는데, 알고보니 상대주소 개념으로 값을 넣어주어야 했다.&lt;/p&gt;
&lt;p&gt;예를 들어 현재 라인인 0001에서 &lt;code&gt;goto 0&lt;/code&gt;이면 다음 라인인 0002, &lt;code&gt;goto 1&lt;/code&gt;이면 다음 X 2 라인인 0003으로 가라는 식으로 해석되어서, &lt;code&gt;goto 3&lt;/code&gt;은 0005 라인으로 가라는 명령어가 되었다.
&lt;code&gt;wrong.txt&lt;/code&gt;에는 0005라인이 존재하지 않으니 &lt;code&gt;prctl&lt;/code&gt;의 옵션으로 전달 시 에러가 발생한다.&lt;/p&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; ./filter&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;SET_SECCOMP&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; error:&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; Invalid&lt;/span&gt;&lt;span class=&quot;z-l-2 z-d-6&quot;&gt; argument&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;hihi&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-l-6 z-d-7&quot;&gt;hihi&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;잘못된 룰을 적용했을 때 이런 식으로 SECCOMP 에러가 발생한다.
결과적으로 &lt;code&gt;write&lt;/code&gt; syscall을 차단하려는 룰이 적용되지 않아 입력받은 문자열을 &lt;code&gt;STDOUT&lt;/code&gt;에 출력할 수 있게 되었다.&lt;/p&gt;
&lt;p&gt;따라서 Filter Overwrite처럼 필터 전체를 덮어쓰지 못하더라도 몇 바이트로 룰 자체를 말이 안되게 할 수 있다면 에러는 발생하되 프로세스는 유지되므로 SECCOMP bypass가 가능할 것이다.&lt;/p&gt;
&lt;h2 id=&quot;0x04-camgojaryo&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#0x04-camgojaryo&quot; aria-label=&quot;Anchor link for: 0x04-camgojaryo&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;/a&gt;
0x04. 참고자료&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https://man7.org/linux/man-pages/man2/prctl.2.html&quot;&gt;https://man7.org/linux/man-pages/man2/prctl.2.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https://jeongzero.oopy.io/06eebad5-8306-493f-9c6d-e7a04d5aacff&quot;&gt;https://jeongzero.oopy.io/06eebad5-8306-493f-9c6d-e7a04d5aacff&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https://velog.io/@woounnan/LINUX-Seccomp&quot;&gt;https://velog.io/@woounnan/LINUX-Seccomp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https://velog.io/@dandb3/SECCOMP2&quot;&gt;https://velog.io/@dandb3/SECCOMP2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https://learn.dreamhack.io/280&quot;&gt;https://learn.dreamhack.io/280&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;external&quot; rel=&quot;external&quot; href=&quot;https://github.com/david942j/seccomp-tools&quot;&gt;https://github.com/david942j/seccomp-tools&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
        <summary type="html">prctl 사용법부터 관련 도구, 예상 취약점까지</summary>
        </entry>
</feed>
