Ограниченная функция (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

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