Ограниченная функция (RF) с pysandbox
Моя проблема точно такая же, как здесь и здесь.
Я также использую simple2.py
для песочницы исполняемого файла этой программы test1.c
:
#include<stdio.h>
int main(){
puts("Hello World");
return 0;
}
Я использую следующую команду для создания исполняемого файла:
gcc -static test1.c
После этого, если я сделаю:
ldd a.out
Я получаю вывод:
не динамический исполняемый файл
Тем не менее, результат, когда я запускаю sample2.py по-прежнему
результат: РФ
процессор: 0мс
mem: 952 КБ
Что именно я делаю не так?
2 ответа
Я изменяю это:
x86_64=set([0,1,5,8,9,10,11,12,16,25,63,158,219,231])
за это:
x86_64=set([0,1,5,8,9,10,11,12,16,21,25,63,89,158,219,231])
в sample2.py, и работает.
Код результата RF был наиболее вероятен из-за неожиданных системных вызовов для файловых операций (то есть SYS_open(), SYS_close(), SYS_stat(), ...). Это происходит, когда (1) целевая программа фактически выполняет файловые операции, и (или) когда (2) она была динамически связана и должна загружать библиотеки.so во время выполнения. Поскольку ваша целевая программа не вызывает файловые операции, она относится к последнему случаю.
Затем, чтобы решить исход РФ, либо
statically link the target program to avoid dependencies on shared libraries; or,
extend the policy rules in the wrapper script to handle relevant SYSCALL / SYSRET events;
Для статического связывания системных вызовов мы используем коды системных вызовов, например, 0,1,2 3-sys_read 1-sys_exit и т. Д. Перейдите по ссылке для получения дополнительной информации о списке системных вызовов с кодом: http://docs.cs.up.ac.za/programming/asm/derick_tut/syscalls.html
Я изменяю это:
x86_64 = множество ([0,1,5,8,9,10,11,12,16,21,25,63,89,158,219,231])
за это:
x86_64 = множество ([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