Seccomp: различия между версиями
[непроверенная версия] | [непроверенная версия] |
Метки: с мобильного устройства из мобильной версии |
Нет описания правки Метка: визуальный редактор отключён |
||
Строка 1: | Строка 1: | ||
'''seccomp''' (сокр. от {{lang-en|secure computing mode}}) - механизм [[Linux|ядра Linux]], который даёт возможность ограничивать набор доступных [[Системный вызов|системных вызовов]] для приложений, а также производить сложную фильтрацию вызовов и их аргументов с помощью [[BPF|BPF]]-программ. Впервые появился в ядре версии 2.6.12 в 2005 году. |
'''seccomp''' (сокр. от {{lang-en|secure computing mode}}) - механизм [[Linux|ядра Linux]], который даёт возможность ограничивать набор доступных [[Системный вызов|системных вызовов]] для приложений, а также производить сложную фильтрацию вызовов и их аргументов с помощью [[BPF|BPF]]-программ. Впервые появился в ядре версии 2.6.12 в 2005 году.{{Sfn|Imamjafar Borate, Chavan R. K.|2016}}{{Sfn|Kroah-Hartman|2007}} На данный момент существует для архитектур [[x86]] и [[x86_64]]. |
||
== История == |
== История == |
||
Первое появление - март 2005 года (версия 2.6.12). Автору оригинального патча, Andrea Arcangeli, требовалась возможность предоставлять ресурсы компьютера для исполнения стороннего кода в рамках проекта CPUShare. Чтобы включить seccomp, процесс был должен записать 1 в файл /proc/PID/seccomp. После этого процесс мог выполнить только 4 системных вызова: <code>read()</code>, <code>write()</code>, <code>exit()</code>, и <code>sigreturn()</code>. Затем, в 2007 году, в версии 2.6.23, была добавлена возможность включения seccomp через <code>prctl()</code> с помощью операции PR_SET_SECCOMP, а интерфейс взаимодействия через /proc был убран.{{Sfn|Jake Edge, Michael Kerrisk|2015}} |
Первое появление - март 2005 года (версия 2.6.12). Автору оригинального патча, Andrea Arcangeli, требовалась возможность предоставлять ресурсы компьютера для исполнения стороннего кода в рамках проекта CPUShare. Чтобы включить seccomp, процесс был должен записать 1 в файл /proc/PID/seccomp. После этого процесс мог выполнить только 4 системных вызова: <code>read()</code>, <code>write()</code>, <code>exit()</code>, и <code>sigreturn()</code>.{{Sfn|Kurt Dietrich, Johannes Winter|2011}} Затем, в 2007 году, в версии 2.6.23, была добавлена возможность включения seccomp через <code>prctl()</code> с помощью операции PR_SET_SECCOMP, а интерфейс взаимодействия через /proc был убран.{{Sfn|Jake Edge, Michael Kerrisk|2015}} |
||
Не смотря на то, что проект CPUShare, для которого seccomp был придуман, не стал популярным, а затем вообще закрылся, seccomp остался в ядре Linux. Но феврале 2009 года в коде seccomp обнаружилась уязвимость. Она была основана на том факте, что в 32-разрядной и 64-разрядной версиях Linux одним и тем же номерам соответствуют разные системные вызовы. Например, разрешенному вызову <code>read()</code> из 64-битной версии соответствует запрещённый вызов <code>restart_syscall()</code> из 32-битной версии. После этого встал вопрос о присутствии seccomp в Linux. В частности, Линус Торвальдс предположил, что seccomp никем не используется.<ref>{{Статья|автор=Jonathan Corbet|заглавие=Seccomp and sandboxing|ссылка=https://lwn.net/Articles/332974/|язык=|издание=LWN.net|тип=|год=2009|месяц=May|число=13|том=|номер=|страницы=|issn=}}</ref> |
Не смотря на то, что проект CPUShare, для которого seccomp был придуман, не стал популярным, а затем вообще закрылся, seccomp остался в ядре Linux.{{Sfn|Kurt Dietrich, Johannes Winter|2011}} Но феврале 2009 года в коде seccomp обнаружилась уязвимость. Она была основана на том факте, что в 32-разрядной и 64-разрядной версиях Linux одним и тем же номерам соответствуют разные системные вызовы. Например, разрешенному вызову <code>read()</code> из 64-битной версии соответствует запрещённый вызов <code>restart_syscall()</code> из 32-битной версии. После этого встал вопрос о присутствии seccomp в Linux. В частности, Линус Торвальдс предположил, что seccomp никем не используется.<ref>{{Статья|автор=Jonathan Corbet|заглавие=Seccomp and sandboxing|ссылка=https://lwn.net/Articles/332974/|язык=|издание=LWN.net|тип=|год=2009|месяц=May|число=13|том=|номер=|страницы=|issn=}}</ref> |
||
Так как seccomp был достаточно прост для использования, у разработчиков Google Chrome возникла идея реализовать на его основе средство для запуска сторонних плагинов. Но простого блокирования четырёх системных вызовов было недостаточно для этой задачи. Хотя споры о существовании seccomp в рамках ядра Linux продолжались - даже предлагалось осуществлять контроль над системными вызовами с помощью инструмента трассировки ftrace - в 2012 году, в версии 3.5, добавлен второй режим работы - SECCOMP_MODE_FILTER, значительно расширивший возможности seccomp. Теперь процесс сам смог выбирать, какие вызовы разрешить или запретить, присоединяя соответствующую BPF-программу.{{Sfn|Jake Edge, Michael Kerrisk|2015}} |
Так как seccomp был достаточно прост для использования, у разработчиков Google Chrome возникла идея реализовать на его основе средство для запуска сторонних плагинов. Но простого блокирования четырёх системных вызовов было недостаточно для этой задачи. Хотя споры о существовании seccomp в рамках ядра Linux продолжались - даже предлагалось осуществлять контроль над системными вызовами с помощью инструмента трассировки ftrace - в 2012 году, в версии 3.5, добавлен второй режим работы - SECCOMP_MODE_FILTER, значительно расширивший возможности seccomp. Теперь процесс сам смог выбирать, какие вызовы разрешить или запретить, присоединяя соответствующую BPF-программу.{{Sfn|Jake Edge, Michael Kerrisk|2015}} |
||
Строка 18: | Строка 18: | ||
Был единственным режимом работы до Linux 3.5. Чтобы его можно было использовать, ядро должно быть сконфигурировано с ключом CONFIG_SECCOMP=y.{{Sfn|Kroah-Hartman|2007}} |
Был единственным режимом работы до Linux 3.5. Чтобы его можно было использовать, ядро должно быть сконфигурировано с ключом CONFIG_SECCOMP=y.{{Sfn|Kroah-Hartman|2007}} |
||
Чтобы войти в этот режим, нужно сделать вызов <code>prctl(PR_SET_SECCOMP, SECCOMP_MODE_STRICT)</code> или, что тоже самое, <code>seccomp(SECCOMP_SET_MODE_STRICT, 0, NULL)</code>. Теперь процесс может использовать только 4 системных вызова: <code>read()</code>, <code>write()</code>, <code>_exit()</code> и <code>sigreturn()</code>. Результатом использования других системных вызовов будет прерывание процесса сигналом SIGKILL. Поскольку системный вызов <code>open()</code> запрещён, если потребуется проверка включения seccomp, файл status из procfs стоит открыть с правами на чтения до включения seccomp в процессе.{{Sfn|Jake Edge, Michael Kerrisk|2015}} |
Чтобы войти в этот режим, нужно сделать вызов <code>prctl(PR_SET_SECCOMP, SECCOMP_MODE_STRICT)</code> или, что тоже самое, <code>seccomp(SECCOMP_SET_MODE_STRICT, 0, NULL)</code>. Теперь процесс может использовать только 4 системных вызова: <code>read()</code>, <code>write()</code>, <code>_exit()</code> и <code>sigreturn()</code>.{{Sfn|Kurt Dietrich, Johannes Winter|2011}} Результатом использования других системных вызовов будет прерывание процесса сигналом SIGKILL. Поскольку системный вызов <code>open()</code> запрещён, если потребуется проверка включения seccomp, файл status из procfs стоит открыть с правами на чтения до включения seccomp в процессе.{{Sfn|Jake Edge, Michael Kerrisk|2015}} |
||
== SECCOMP_MODE_FILTER == |
== SECCOMP_MODE_FILTER == |
||
Строка 82: | Строка 82: | ||
== ПО, использующее seccomp == |
== ПО, использующее seccomp == |
||
* Операционная система [[Chrome OS]]{{Sfn|Anto.Y|2012}} |
|||
* В операционной системе [[Android Oreo |
* В операционной системе [[Android Oreo]] seccomp используется для запрета приложениям делать некоторые системные вызовы. |
||
* Браузер [[Firefox]] использует seccomp для безопасного запуска плагинов. |
* Браузер [[Firefox]] использует seccomp для безопасного запуска плагинов. |
||
* FTP-сервер [[vsftpd]] |
* FTP-сервер [[vsftpd]]{{Sfn|Imamjafar Borate, Chavan R. K.|2016}} |
||
* [[Flatpak]], инструмент для распространения и установки приложений внутри контейнеров. Seccomp обеспечивает безопасный запуск программ внутри песочницы. |
* [[Flatpak]], инструмент для распространения и установки приложений внутри контейнеров. Seccomp обеспечивает безопасный запуск программ внутри песочницы. |
||
* Система виртуализации [[Docker]]{{Sfn|Adrian Mouat|2015}} |
|||
* [[Docker]] |
|||
* Браузер с открытым исходным кодом [[Chromium]]{{Sfn|Imamjafar Borate, Chavan R. K.|2016}}, на котором основан браузер [[Google Chrome]] |
|||
* Система контейнерной виртуализации [[LXC]]{{Sfn|Senthil Kumaran S.|2017}} |
|||
== Литература == |
== Литература == |
||
Строка 95: | Строка 98: | ||
* {{Статья|автор=Taesoo Kim, Nickolai Zeldovich|заглавие=Practical and effective sandboxing for non-root users|ссылка=https://www.usenix.org/system/files/conference/atc13/atc13-kim.pdf|издание=2013 USENIX Annual Technical Conference|год=2013|ref=Taesoo Kim, Nickolai Zeldovich}} |
* {{Статья|автор=Taesoo Kim, Nickolai Zeldovich|заглавие=Practical and effective sandboxing for non-root users|ссылка=https://www.usenix.org/system/files/conference/atc13/atc13-kim.pdf|издание=2013 USENIX Annual Technical Conference|год=2013|ref=Taesoo Kim, Nickolai Zeldovich}} |
||
* {{Статья|автор=Ma Bo, Mu Dejun, Fan Wei, Hu Wei|заглавие=Improvements the Seccomp sandbox based on PBE theory|ссылка=http://ieeexplore.ieee.org/abstract/document/6550418|язык=Английский|издание=IEEE|тип=|год=2013|месяц=Июль|число=01|том=|номер=|страницы=|issn=|doi=10.1109/WAINA.2013.81}} |
* {{Статья|автор=Ma Bo, Mu Dejun, Fan Wei, Hu Wei|заглавие=Improvements the Seccomp sandbox based on PBE theory|ссылка=http://ieeexplore.ieee.org/abstract/document/6550418|язык=Английский|издание=IEEE|тип=|год=2013|месяц=Июль|число=01|том=|номер=|страницы=|issn=|doi=10.1109/WAINA.2013.81}} |
||
* {{Статья|автор=Imamjafar Borate, Chavan R. K.|заглавие=Sandboxing in Linux: From Smartphone to Cloud|ссылка=http://www.ijcaonline.org/archives/volume148/number8/borate-2016-ijca-911256.pdf|язык=English|издание=International Journal of Computer Applications|тип=|год=2016|месяц=August|число=|том=148|номер=8|страницы=|ref=Imamjafar Borate, Chavan R. K.}} |
|||
* {{Книга|автор=Senthil Kumaran S.|заглавие=Practical LXC and LXD: Linux Containers for Virtualization and Orchestration|издательство=Apress|год=2017|страницы=147|страниц=159|isbn=978-1-4842-3024-4|ref=Senthil Kumaran S.}} |
|||
* {{Книга|автор=Adrian Mouat|заглавие=Using Docker: Developing and Deploying Software with Containers|издательство=O'Reilly Media|год=2015|страницы=320|страниц=354|место=1005 Gravenstein Highway North, Sebastopol, CA 95472|ref=Adrian Mouat}} |
|||
* {{Статья|автор=Kurt Dietrich, Johannes Winter|заглавие=Towards a Trustworthy, Lightweight CLoud Computing Framework for Embedded Systems|изданиеTrust and Trustworthy Computing: 4th International Conference|место=Pittsburgh, PA, USA|месяц=June|год=2011|ссылка=https://books.google.ru/books?id=LWKrCAAAQBAJ&pg=PA22&dq=seccomp&hl=ru&sa=X&ved=0ahUKEwjP_O3j6JPYAhXBd5oKHTV1CNUQ6AEITTAF#v=onepage&q=seccomp&f=false|издательство=Springer|ref=Kurt Dietrich, Johannes Winter}} |
|||
* {{Книга|автор=Anto.Y|заглавие=Chrome OS and Secret of Google|isbn=978-3-659-17127-7|издательство=Lambert Academic Publishing|год=2012|страницы=41|страниц=228|ref=Anto.Y}} |
|||
== Примечания == |
== Примечания == |
Версия от 15:58, 18 декабря 2017
seccomp (сокр. от англ. secure computing mode) - механизм ядра Linux, который даёт возможность ограничивать набор доступных системных вызовов для приложений, а также производить сложную фильтрацию вызовов и их аргументов с помощью BPF-программ. Впервые появился в ядре версии 2.6.12 в 2005 году.[1][2] На данный момент существует для архитектур x86 и x86_64.
История
Первое появление - март 2005 года (версия 2.6.12). Автору оригинального патча, Andrea Arcangeli, требовалась возможность предоставлять ресурсы компьютера для исполнения стороннего кода в рамках проекта CPUShare. Чтобы включить seccomp, процесс был должен записать 1 в файл /proc/PID/seccomp. После этого процесс мог выполнить только 4 системных вызова: read()
, write()
, exit()
, и sigreturn()
.[3] Затем, в 2007 году, в версии 2.6.23, была добавлена возможность включения seccomp через prctl()
с помощью операции PR_SET_SECCOMP, а интерфейс взаимодействия через /proc был убран.[4]
Не смотря на то, что проект CPUShare, для которого seccomp был придуман, не стал популярным, а затем вообще закрылся, seccomp остался в ядре Linux.[3] Но феврале 2009 года в коде seccomp обнаружилась уязвимость. Она была основана на том факте, что в 32-разрядной и 64-разрядной версиях Linux одним и тем же номерам соответствуют разные системные вызовы. Например, разрешенному вызову read()
из 64-битной версии соответствует запрещённый вызов restart_syscall()
из 32-битной версии. После этого встал вопрос о присутствии seccomp в Linux. В частности, Линус Торвальдс предположил, что seccomp никем не используется.[5]
Так как seccomp был достаточно прост для использования, у разработчиков Google Chrome возникла идея реализовать на его основе средство для запуска сторонних плагинов. Но простого блокирования четырёх системных вызовов было недостаточно для этой задачи. Хотя споры о существовании seccomp в рамках ядра Linux продолжались - даже предлагалось осуществлять контроль над системными вызовами с помощью инструмента трассировки ftrace - в 2012 году, в версии 3.5, добавлен второй режим работы - SECCOMP_MODE_FILTER, значительно расширивший возможности seccomp. Теперь процесс сам смог выбирать, какие вызовы разрешить или запретить, присоединяя соответствующую BPF-программу.[4]
Для упрощения использования seccomp, в 2013 году, в версии 3.8, добавлено поле "Seccomp" в /proc/PID/status, которое позволяет узнать, включен ли seccomp (после того как включение убрали из /proc, узнать, работает ли уже включенный seccomp, было невозможно без завершения процесса). В 2014 году, в версии 3.17, добавлен специальный системный вызов - seccomp()
, который частично повторяет функциональность prctl()
.[4]
В ноябре 2017 года, с выходом glibc 2.26, стала очевидной новая проблема: поскольку в программах на языке C системные вызовы делаются не напрямую, а через обёртки стандартной библиотеки, названия которых могут не совпадать с названиями системных вызовов, запрет какого-либо вызова может неожиданным образом повлиять на программу. Например, функция open()
из стандартной библиотеки glibc версии 2.26 реализована через системный вызов openat()
, который не совпадает с вызовом open()
и может быть ошибочно заблокирован автором фильтра.[6]
Описание
Чтобы включить в программе seccomp, можно воспользоваться системным вызовом seccomp()
или prctl()
. На данный момент, существуют два режима работы seccomp: SECCOMP_MODE_STRICT и SECCOMP_MODE_FILTER. Узнать, включен ли seccomp и в каком режиме, можно из поля "Seccomp" в файла /proc/[pid]/status. Поле принимает значения 0, 1 или 2: 0 - seccomp для процесса не включен, 1 - seccomp в режиме SECCOMP_MODE_STRICT, 2 - в режиме SECCOMP_MODE_FILTER.[4]
SECCOMP_MODE_STRICT
Был единственным режимом работы до Linux 3.5. Чтобы его можно было использовать, ядро должно быть сконфигурировано с ключом CONFIG_SECCOMP=y.[2]
Чтобы войти в этот режим, нужно сделать вызов prctl(PR_SET_SECCOMP, SECCOMP_MODE_STRICT)
или, что тоже самое, seccomp(SECCOMP_SET_MODE_STRICT, 0, NULL)
. Теперь процесс может использовать только 4 системных вызова: read()
, write()
, _exit()
и sigreturn()
.[3] Результатом использования других системных вызовов будет прерывание процесса сигналом SIGKILL. Поскольку системный вызов open()
запрещён, если потребуется проверка включения seccomp, файл status из procfs стоит открыть с правами на чтения до включения seccomp в процессе.[4]
SECCOMP_MODE_FILTER
Режим работы, который появился в ядре Linux версии 3.5.[7] Доступен, если при сборке ядра был установлен флаг CONFIG_SECCOMP_FILTER=y.
Перед тем как переходить в этот режим, нужно выполнить вызов prctl(PR_SET_NO_NEW_PRIVS, 1)
и, таким образом, установить для процесса бит no_new_privs. Это обязательное требование объясняется тем, что иначе непривилегированный процесс мог бы выполнить привилегированную программу с помощью execve()
. Если этого не сделать, то переход в режим SECCOMP_MODE_FILTER не удастся.[4]
После установки бита no_new_privs, чтобы присоединить к процессу фильтр, нужно выполнить вызов prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, args)
или seccomp(SECCOMP_SET_MODE_FILTER, 0, args)
, где args - указатель на структуру sock_fprog
, которая из состоит массива BPF-инструкций и его длины. Фильтр запускается каждый раз, когда процесс совершает системный вызов. При запуске фильтр получает на вход структуру с данными о номере системного вызова, архитектуре, текущем состоянии счётчика команд и аргументах вызова.[7] Фильтр обязательно должен возвратить 32-битное значение, в котором верхние 16 бит содержат код действия, которое будет произведено, а нижние 16 бит содержат данные. Если в алгоритме фильтра по ошибке не предусмотрен возврат значения, то он не пройдет статический анализ и такой фильтр присоединен не будет.[8]
Если к процессу присоединено несколько фильтров, то они будут запущены в порядке, обратном порядку их добавления, даже если один из фильтров должен убить процесс. В таком случае, возвращаемое значение системного вызова будет определяться первым (по порядку запуска фильтров) возвращаемым значением с наивысшим приоритетом, в соответствии с таблицей (в порядке уменьшения приоритета):
Действие | Результат |
---|---|
SECCOMP_RET_KILL | Системный вызов не выполняется, процесс будет убит с помощью сигнала SIGSYS[4] |
SECCOMP_RET_TRAP | Системный вызов не выполняется, процесс получает сигнал SIGSYS, обработчику сигнала доступна информация о системном вызове, который привел к этому результату |
SECCOMP_RET_ERRNO | Системный вызов не выполняется, в переменной errno находится возвращаемое значение фильтра
|
SECCOMP_RET_TRACE | Если с помощью ptrace() для процесса указан трассировщик, то он будет уведомлён о вызове. Если не указан, то системный вызов не выполняется
|
SECCOMP_RET_ALLOW | Системный вызов выполняется |
libseccomp
libseccomp - библиотека, которая позволяет создавать фильтры для seccomp, не кодируя BPF-инструкции вручную. Предоставляет API в виде макросов для составления правил и функций для добавления этих правил, загрузки фильтра, генерации BPF-кода и т.д. Появилась в 2012 году.[4]
Примеры использования
Включение режима SECCOMP_MODE_STRICT
# include <stdio.h>
# include <unistd.h>
# include <linux/seccomp.h>
# include <sys/prctl.h>
# include <fcntl.h>
int main () {
int fd;
prctl(PR_SET_SECCOMP, SECCOMP_MODE_STRICT);
fprintf(stderr, "try open\n");
fd = open("test_file", O_CREAT);
fprintf(stderr, "fd = %d", fd);
return 0;
}
Результат работы:
$ gcc test_seccomp.c -o test_seccomp
$ ./test_seccomp
try open
Killed
В приведённом примере, после вызова prctl()
процесс работает ровно до момента, когда попытается сделать вызов open()
.
ПО, использующее seccomp
- Операционная система Chrome OS[9]
- В операционной системе Android Oreo seccomp используется для запрета приложениям делать некоторые системные вызовы.
- Браузер Firefox использует seccomp для безопасного запуска плагинов.
- FTP-сервер vsftpd[1]
- Flatpak, инструмент для распространения и установки приложений внутри контейнеров. Seccomp обеспечивает безопасный запуск программ внутри песочницы.
- Система виртуализации Docker[10]
- Браузер с открытым исходным кодом Chromium[1], на котором основан браузер Google Chrome
- Система контейнерной виртуализации LXC[11]
Литература
- Steven McCanne, Van Jacobson. The BSD Packet Filter: A New Architecture for User-level Packet Capture // 1993 Winter USENIX. — San Diego, CA, 1993. — 2 января.
- Greg Kroah-Hartman. Linux Kernel in a Nutshell. — 1005 Gravenstein Highway North, Sebastopol, CA 95472: O'Reilly Media, 2007. — 208 с. — ISBN 978-0596100797.
- Michael Kerrisk. The Linux Programming Interface. — San Francisco: No Starch Press, 2010. — 1556 с. — ISBN 978-1-59327-220-3.
- Jake Edge, Michael Kerrisk. A seccomp overview // LWN.net : Linux Plumbers Conference. — Seattle, Washington, USA, 2015. — 1 сентября.
- Taesoo Kim, Nickolai Zeldovich. Practical and effective sandboxing for non-root users // 2013 USENIX Annual Technical Conference. — 2013.
- Ma Bo, Mu Dejun, Fan Wei, Hu Wei. Improvements the Seccomp sandbox based on PBE theory (англ.) // IEEE. — 2013. — 01 Июль. — doi:10.1109/WAINA.2013.81.
- Imamjafar Borate, Chavan R. K. Sandboxing in Linux: From Smartphone to Cloud (англ.) // International Journal of Computer Applications. — 2016. — Август (т. 148, № 8).
- Senthil Kumaran S. Practical LXC and LXD: Linux Containers for Virtualization and Orchestration. — Apress, 2017. — С. 147. — 159 с. — ISBN 978-1-4842-3024-4.
- Adrian Mouat. Using Docker: Developing and Deploying Software with Containers. — 1005 Gravenstein Highway North, Sebastopol, CA 95472: O'Reilly Media, 2015. — С. 320. — 354 с.
- Kurt Dietrich, Johannes Winter. Towards a Trustworthy, Lightweight CLoud Computing Framework for Embedded Systems. — Pittsburgh, PA, USA: Springer, 2011. — Июнь.
- Anto.Y. Chrome OS and Secret of Google. — Lambert Academic Publishing, 2012. — С. 41. — 228 с. — ISBN 978-3-659-17127-7.
Примечания
- ↑ 1 2 3 Imamjafar Borate, Chavan R. K., 2016.
- ↑ 1 2 Kroah-Hartman, 2007.
- ↑ 1 2 3 Kurt Dietrich, Johannes Winter, 2011.
- ↑ 1 2 3 4 5 6 7 8 Jake Edge, Michael Kerrisk, 2015.
- ↑ Jonathan Corbet. Seccomp and sandboxing // LWN.net. — 2009. — 13 мая.
- ↑ Jonathan Corbet. The inherent fragility of seccomp() // LWN.net. — 2017. — 1 ноября.
- ↑ 1 2 Taesoo Kim, Nickolai Zeldovich, 2013.
- ↑ Steven McCanne, Van Jacobson, 1993.
- ↑ Anto.Y, 2012.
- ↑ Adrian Mouat, 2015.
- ↑ Senthil Kumaran S., 2017.
Ссылки
- seccomp/seccomp_perf.c - пример использования seccomp из The Linux Programming Interface. (англ.)
- Documentation/prctl/seccomp_filter.txt, часть документации ядра Linux kernel (англ.)
- Security In-Depth for Linux Software: Preventing and Mitigating Security Bugs / 2009 год (англ.)
- A seccomp overview (англ.)
- Seccomp and sandboxing (англ.)
- http://outflux.net/blog/archives/2012/03/22/seccomp-filter-now-in-ubuntu/ (англ.)
- https://xakep.ru/2013/01/11/unix-apps-limit-launch/ (рус.)