Как начать работать с libsandbox

Я пытаюсь написать простой судья, который будет компилировать и выполнять пользовательские c файлы. Я нашел libsandbox и вопрос здесь о stackru.

Я установил модуль Python и в соответствии с инструкциями я пытаюсь запустить программу Hello World, написанную на C

➜  sandbox git:(V_0_3_x) ✗ ./hello                            
Hello World%                                                                   
➜  sandbox git:(V_0_3_x) ✗ python sample2.py hello   
result: RF
cpu: 2ms
mem: 288kB

Как вы можете видеть, когда я запускаю программу в песочнице, я ничего не получаю. Было бы замечательно, если бы кто-нибудь сказал мне, как правильно его использовать.

2 ответа

Решение

Пример кода libsandbox запрещает системные вызовы для файловых операций, таких как open(), stat(), close(), Тем не менее, вам нужно либо (1) связать программу hello world статически, чтобы избежать открытия файлов, таких как общие библиотеки (т.е. libc.so) или (2) написать настраиваемую политику изолированной программной среды, которая разрешает соответствующие системные вызовы. Некоторые примеры настройки политик песочницы можно найти по адресу https://github.com/liuyu81/TR-OJA-201209A.

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я автор libsandbox,

Код результата RF был наиболее вероятен из-за неожиданных системных вызовов для файловых операций (то есть SYS_open(), SYS_close(), SYS_stat(), ...). Это происходит, когда (1) целевая программа фактически выполняет файловые операции, и (или) когда (2) она была динамически связана и должна загружать библиотеки.so во время выполнения. Поскольку ваша целевая программа не вызывает файловые операции, она относится к последнему случаю.

Затем, чтобы решить исход РФ, либо

статически связать целевую программу, чтобы избежать зависимостей от разделяемых библиотек; или расширить правила политики в скрипте-оболочке для обработки соответствующих событий SYSCALL / SYSRET;

Для статического связывания системных вызовов мы используем коды системных вызовов, например, 0,1,2 3-sys_read 1-sys_exit и т. Д. Перейдите по ссылке для получения дополнительной информации о списке системных вызовов с кодом: http://docs.cs.up.ac.za/programming/asm/derick_tut/syscalls.html

Я изменяю это:

x86_64=set([0,1,5,8,9,10,11,12,16,21,25,63,89,158,219,231])

за это:

x86_64=set([0,1,2,3,4,5,8,9,10,11,12,16,21,25,63,89,158,219,231,])

в sample2.py, и работает.

Модифицированный sample2.py доступен в моей ссылке на репозиторий github: https://github.com/palashmaran/libsandbox.git

Другие вопросы по тегам