# Play in a Sandbox!? [Github link](https://github.com/rwe0214/Unix-Programming/tree/master/sandbox) ###### tags: `NCTU`, `Unix Programming`, `API hijacking`, `library injection`, `GitHub` ## How to Compile ``` shell $ make gcc -g -fPIC -shared -o sandbox.so sandboxso.c -ldl gcc -g -o sandbox sandbox.c ``` ## How to Run ```shell $ ./sandbox no command given. $ ./sandbox -h usage: ./sandbox [-h] [-p sopath] [-d basedir] [--] cmd [cmd args ...] -h: this help text -p: set the path to sandbox.so, default = ./sandbox.so -d: the base directory that is allowed to access, default = . --: separate the arguments for sandbox and for the executed command $ ls Makefile README.md sandbox sandbox.c sandbox.so sandboxso.c $ ./sandbox ls [sandbox] fopen: access to /proc/filesystems is not allowed [sandbox] fopen: access to /proc/mounts is not allowed Makefile README.md sandbox sandbox.c sandbox.so sandboxso.c $ ./sandbox ls -a ./sandbox: invalid option -- 'a' usage: ./sandbox [-h] [-p sopath] [-d basedir] [--] cmd [cmd args ...] -h: this help text -p: set the path to sandbox.so, default = ./sandbox.so -d: the base directory that is allowed to access, default = . --: separate the arguments for sandbox and for the executed command $ ./sandbox -- ls -a [sandbox] fopen: access to /proc/filesystems is not allowed [sandbox] fopen: access to /proc/mounts is not allowed . .. Makefile README.md sandbox sandbox.c sandbox.so sandboxso.c $ ls / addons cdrom etc initrd.img.old lib64 media platforms run srv usr vmlinuz.old bin cfg home lib libx32 mnt proc sbin sys var boot dev initrd.img lib32 lost+found opt root snap tmp vmlinuz $ ./sandbox -- ls / [sandbox] fopen: access to /proc/filesystems is not allowed [sandbox] fopen: access to /proc/mounts is not allowed [sandbox] __xstat: access to / is not allowed [sandbox] opendir: access to / is not allowed ls: cannot open directory '/' $ ./sandbox -d / ls / addons cdrom etc initrd.img.old lib64 media platforms run srv usr vmlinuz.old bin cfg home lib libx32 mnt proc sbin sys var boot dev initrd.img lib32 lost+found opt root snap tmp vmlinuz $ ./sandbox -- ls -la / Makefile [sandbox] fopen: access to /proc/filesystems is not allowed [sandbox] fopen: access to /proc/mounts is not allowed [sandbox] fopen: access to /etc/passwd is not allowed [sandbox] fopen: access to /etc/group is not allowed [sandbox] fopen: access to /etc/passwd is not allowed [sandbox] fopen: access to /etc/group is not allowed -rw-rw-r-- 1 1000 1000 435 5月 10 14:13 Makefile [sandbox] opendir: access to / is not allowed ls: cannot open directory '/' $ ./sandbox -- ls -la / Makefile >/dev/null [sandbox] fopen: access to /proc/filesystems is not allowed [sandbox] fopen: access to /proc/mounts is not allowed [sandbox] fopen: access to /etc/passwd is not allowed [sandbox] fopen: access to /etc/group is not allowed [sandbox] fopen: access to /etc/passwd is not allowed [sandbox] fopen: access to /etc/group is not allowed [sandbox] opendir: access to / is not allowed ls: cannot open directory '/' $ ./sandbox -- ls -la / Makefile >/dev/null 2>&1 [sandbox] fopen: access to /proc/filesystems is not allowed [sandbox] fopen: access to /proc/mounts is not allowed [sandbox] fopen: access to /etc/passwd is not allowed [sandbox] fopen: access to /etc/group is not allowed [sandbox] fopen: access to /etc/passwd is not allowed [sandbox] fopen: access to /etc/group is not allowed [sandbox] opendir: access to / is not allowed $ ./sandbox -- sh -c 'ls' [sandbox] __xstat64: access to /home/swchiu/.local/bin/ls is not allowed [sandbox] __xstat64: access to /usr/local/sbin/ls is not allowed [sandbox] __xstat64: access to /usr/local/bin/ls is not allowed [sandbox] __xstat64: access to /usr/sbin/ls is not allowed [sandbox] __xstat64: access to /usr/bin/ls is not allowed [sandbox] __xstat64: access to /sbin/ls is not allowed [sandbox] __xstat64: access to /bin/ls is not allowed [sandbox] __xstat64: access to /usr/games/ls is not allowed [sandbox] __xstat64: access to /usr/local/games/ls is not allowed [sandbox] __xstat64: access to /snap/bin/ls is not allowed sh: 1: ls: not found ``` ## Error Messages The return value of each rejected functions is `-1` or `NULL` depends on the return type of the rejected function. Besides, the `errno` of them are always set to `EACCES`. ## The List of Monitored Functions 1. `chdir` 2. `chmod` 3. `chown` 4. `creat` 5. `fopen` 6. `link` 7. `mkdir` 8. `open` 9. `open64` 10. `openat` 11. `opendir` 12. `readlink` 13. `remove` 14. `rename` 15. `rmdir` 16. `stat` * `__xstat` and `__xsata64` 17. `symlink` 18. `unlink` ## The List of Rejected Functions 1. `execl` 2. `execle` 3. `execlp` 4. `execv` 5. `execve` 6. `execvp` 7. `system`