Hallo, ich wollte mal fragen, ob jemand die Software-Architektur hinter Seiten wie https://repl.it/languages/ kennt, wo man online jeden gewünschten Python- C- bash- oder sonstigen Code ausführen kann. Ich nehme an, dass für jeden Benutzer ein eigener Container (z.B. Docker) gestartet wird, in dem zusätzlich eine Sandbox (z.B. mit firejail oder chroot) errichtet wird. Nun sind genügend Exploits im Umlauf, wie man jede dieser Sicherheitsebenen verlassen kann. Wäre jede der Ebenen zum jetzigen Zeitpunkt sicher, könnte man die Überlagerung einer Sandbox und eines Containers vielleicht als ausreichend ansehen, da das System nur beim gleichzeitigen Bekanntwerden eines Exploits für jede Ebene gefährdet wäre. Da jedoch keine der Ebenen sicher ist, wächst der Aufwand zum Ausbrechen nur linear mit der Anzahl der Sicherheitsebenen. Man wendet einfach nacheinander Exploit1, Exploit2, ... ExploitN an, bis man nach ca. N Minuten Zugang zum Hostsystem hat. Wie kommt es, dass repl.it & Co ihre Seiten unbehelligt der Hackerwelt zugänglich machen können, ohne dass sie von den Usern übernommen werden? Das Angebot "Kompiliere jeden C-Code, den du möchtest und lasse ihn auf unserem Server laufen so lange du möchtest" ist doch die größte Sicherheitslücke, die man sich vorstellen kann? MfG Karsten
Karsten schrieb: > Wie kommt es, dass repl.it & Co ihre Seiten unbehelligt der Hackerwelt > zugänglich machen können, ohne dass sie von den Usern übernommen werden? Naja, das passiert sicher immer mal wieder. Die seiten die ich früher nutzte sind mittlerweile alle weg. > Das Angebot "Kompiliere jeden C-Code, den du möchtest und lasse ihn auf > unserem Server laufen so lange du möchtest" ist doch die größte > Sicherheitslücke, die man sich vorstellen kann? Jup, das schwierigste ist aus dem Container auszubrechen. Ich würde dem zwar auch nicht trauen, aber so extrem simpel ist es auch wieder nicht. Karsten schrieb: > Hallo, > ich wollte mal fragen, ob jemand die Software-Architektur hinter Seiten > wie https://repl.it/languages/ kennt, wo man online jeden gewünschten > Python- C- bash- oder sonstigen Code ausführen kann. Keine ahnung, aber man kann mit bash ja mal nachsehen: https://repl.it/repls/ExpensiveSentimentalSite Vermutlich ein x86-64 Linux system:
1 | runner@13255558d281:~$ uname -a |
2 | Linux 13255558d281 4.13.0-1011-gcp #15-Ubuntu SMP Mon Feb 12 16:29:04 UTC 2018 x86_64 x86_64x86_64 GNU/Linux |
/etc/fstab ist leer, vermutlich ein container. Als init system wurde tini verwendet, welches dann /bin/init startet. Nicht sicher was /bin/init ist, file meint es könnte SYSV sein, ist vermutlich aber was anderes:
1 | runner@13255558d281:~$ realpath /proc/1/exe |
2 | /dev/init |
3 | runner@13255558d281:~$ tr '\0' '\n' /proc/1/cmdline |
4 | tr: extra operand '/proc/1/cmdline' |
5 | Try 'tr --help' for more information. |
6 | runner@13255558d281:~$ tr '\0' '\n' </proc/1/cmdline |
7 | /dev/init |
8 | -- |
9 | /bin/init |
10 | runner@13255558d281:~$ tr '\0' '\n' </etc/environment |
11 | PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games" |
12 | runner@13255558d281:~$ /dev/init -h |
13 | init (tini version 0.18.0 - git.fec3683) |
14 | Usage: init [OPTIONS] PROGRAM -- [ARGS] | --version |
15 | runner@13255558d281:~$ file /bin/init |
16 | /bin/init: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, not stripped |
17 | runner@13255558d281:~$ ls /proc/1/fd |
18 | 0 1 2 |
tini scheint für docker gedacht zu sein, also vermutlich wird docker verwendet. /dev/init ist leider ro gemountet. Standard input, output und error worden nicht geschlossen, sind aber leider pipes, darüber kommen wir nicht aus dem mountns raus. Mount bestätigt die verwendung von docker, und das fs wird mit altmodischen linux overlay dateisystemen bereitgestellt, nud nicht mit aufs oder btrfs oder sowas. Der client verwendet kein Systemd, aber /sys/fs/cgroup/systemd/ enthält es, gemountet durch den host. Hostsystem verwendet Systemd. Internetverbindung mit wget geht. Könnte eventuell nen netten Proxy abgeben. Mehr finde ich auf die schnelle nicht über Container und Hostsystem raus. Wenn ich sowas machen müsste, würde ich versuchen clang nach WebAssembly zu kompilieren. Ist aber im moment leider höllisch schwer, das zum laufen zu kriegen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.