Avatar billede Droa Seniormester
27. oktober 2016 - 02:21 Der er 16 kommentarer

køre c# i sikker miljø

Hej Eksperter.

Jeg sidder og tænker på om c# kan blive kørt i et sikkert miljø, uden at være bange for at den kode der bliver kørt, vil smadre ens styresystem og læse fortrolige oplysninger.

jeg har kigget lidt på sandbox mode.
https://msdn.microsoft.com/en-us/library/bb763046(v=vs.110).aspx

men er det sikkert nok?

jeg regner med at man skriver koden i en browser, og kan compile og køre det igennem browseren (KUN Console programmer),

Jeg køre det på en Debian VPS, så håber jeg kan køre en Shell hvor programmet bliver kørt, så jeg kan pipeline Shell outputtet en browser med noget smart Server-side kode som jeg sådan set godt kan finde ud af.

Jeg håber bare at det er muligt at lave nogen utroligt sikre sandbox instanser til hver bruger der compiler noget kode, så de ikke kan få adgang til serverens tjenester eller filer, ud over dem de selv laver.

på forhånd tak
Avatar billede arne_v Ekspert
27. oktober 2016 - 03:09 #1
Det er .NET maaden at goere det paa.

Men sandbox er meget svaert at lave sikker med meget omfattende og komplekse frameworks.

Oracle har de facto givet op for Java applets.

Og MS er ikke forglad for .NET sandbox laengere.

Dit link siger jo selv:

We are updating our guidance to reflect that Code Access Security and Security-Transparent Code will not be supported as a security boundary with partially trusted code, especially code of unknown origin. We advise against loading and executing code of unknown origins without putting alternative security measures in place.

Der er ogsaa diverse andre referencer som f.eks.:

http://security.stackexchange.com/questions/87001/are-there-any-known-breaches-of-the-net-appdomain-isolation
Avatar billede arne_v Ekspert
27. oktober 2016 - 03:10 #2
Og saa er jeg lidt forvirret over din tale om Debian VPS.

Hvis du bruger Debian og Mono eller .NET Core, saa er det noget lidt andet end en traditionel .NET.

Jeg ved slet ikke om de tilbyder den sandboxing og hvis de goer, saa tror jeg at den er saa utestet at jeg ikke ville turde satse paa den.
Avatar billede arne_v Ekspert
27. oktober 2016 - 03:13 #3
Jeg kan kun se to veje frem:

1) .NET sandbox og yderlige OS sandboxing via account med limited access

2) Ask users to install SilverLight and let them run the code on their own computer
Avatar billede Droa Seniormester
27. oktober 2016 - 03:19 #4
helt i orden, det lyder nok til jeg må give op på min ide desværre, så hvis jeg skal køre noget sikkert, vil det være og lave noget virtuelt miljø/OS til og køre mit kode?

findes der eventuelt en C# Parser der simulere en kørsel af noget kode, istedet for at køre det compilet?
Avatar billede arne_v Ekspert
27. oktober 2016 - 03:39 #5
En C# fortolker med sandbox?

Aldrig hoert om en saadan. Men det udlukker naturligvis ikke at den findes.

Det helt optimale ville vaere hvis der fandtes en .NET runtime skrevet i JavaScript, saa det kunne koere i brugerens egen browser.

Men google kan ikke finde saadan en.

Det er muligt at lave saadan en - den findes til Java.
Avatar billede Droa Seniormester
27. oktober 2016 - 03:48 #6
helt i orden, jeg må kigge lidt mere på det, ellers kan man vel køre koden igennem en skanner og tjekke for hvad for referencer man implementere og fjerne dem fra koden før man compiler, jeg må prøve og se om det ikke findes VM miljøer da er udviklet til denne type situationer.
Avatar billede arne_v Ekspert
27. oktober 2016 - 04:10 #7
En oplagt mulighed var at compile til DLL og saa scanne den med et library som f.eks. Mono.Cecil.

Jeg har faktisk noget kode liggende som maaske kan bruges.
Avatar billede Droa Seniormester
27. oktober 2016 - 04:17 #8
Min ide var og lave et "lær C#"

dog ikke på en "clean" mono, jeg regner med og slette store dele af frameworket, som f.eks System.io osv. og erstatte dem med mine egne dll filer som ikke har nogen funktioner, ud over og retunernere simuleret værdier. det er grunden til jeg vil køre det i et VM miljø, så mono'en ikke skal bruget til andet.

men kan man godt "smadre" ens mono på denne måde, og erstatte .net bibliotekerne med "dummies"?
Avatar billede arne_v Ekspert
27. oktober 2016 - 04:22 #9
Det vil vaere et kaempe arbejde at lave de dummies.

Jeg tror at en white list med OK klasser og metoder + en scan som checker er nemmere.

Og en SetOut til en StringWriter can capture output.
Avatar billede Droa Seniormester
27. oktober 2016 - 04:23 #10
Går ud fra man eventuelt kunne compile med C# Core, og lave de "falske" framework filer på denne måde, da bruger ikke kan ændre andet end .cs filen, og jeg så kan lave min config fil til og bruge mine dummy namespaces
Avatar billede arne_v Ekspert
27. oktober 2016 - 04:28 #11
Klasser som ikke maa bruges kan du naturligvis bare undlade i dummy.

Problemet er hvis du vil aendre adfaerd og dermed skal lave klasser og metoder.
Avatar billede arne_v Ekspert
27. oktober 2016 - 04:34 #12
Og hvad med signing?

Signature er en del af DLL identifikation, saa man kan ikke erstatte en signed DLL uden at have adgang til at signed med samme key som original.

Det ville vaere et problem paa Windows med MS .NET.

Jeg ved ikke med Mono.

Worst case maa du kunne rebuilde hele Mono og signe det hele med din egen key.
Avatar billede Droa Seniormester
27. oktober 2016 - 04:38 #13
Jeg regner først og fremmest bare og udelukke at en bruger kan lavet kode der kan bruge System.IO der nok er den farligeste.

VPS'en og VM miljøet skal udelukket bruges til og teste C# øvelser, som f.eks at en bruger skal lave Properties der laver korrekte værdier, når de bliver kørt igennem nogen teste (Unit tests f.esk).

ideen var og lave øvelserne lidt som et spil, hvor man optjener en score, ud fra hvor mange øvelser der giver korrekte værdier.

lidt ligesom spillet "SHENZHEN I/O" hvor man udvikler assembly kode, jeg er godt nok vild med det spil, og det gav mig ideen og lave et browser basseret spil der minder om det, dog lidt mere fokuseret på at undervisning end spil delen.
27. oktober 2016 - 09:04 #14
Om der findes systemer, som er 100,0000  procent sikre ved jeg ikke. 

Og en tilkobling til internettet er (og vil altid være) en risiko.  Vi prøver så at sikre med ANTI-VIRUS / Mal-Ware - scanninger og brundmure.  Visse mere avancerede systemer bruger intelligente system-netværk, med gateways og intelligente routere og krypteringssystemer.

Men der er altid en risiko ved dette (du kan sammenligne med dit bankkort ). 

Jeg har 2 netværk. Et tilkoblet WWW- og et , som ikke er tilkoblet.  For ca. 3 1/2 år siden havde jeg en (måske flere) særdeles sejlivet-/de viru-s -/a på mit daværende system (eet stort) og  jeg måtte geninstallere hele systemet for at få det virus-frit. 
De tog 2 hele dage at få det op igen.  Da var det jeg delte det op i 2 netværk. 

Et internet -net (2 maskiner) og et udviklings-net    Jeg henter filer fra nettet som TEXT - pdf-  (kort sagt kode -filer),  scanner for virus- malware og lægger den / dem på en 16GB dongel og overfører manuelt til udviklings-nettet.  KUN TEXT filer da jeg i tvivlstilfælde kan læse filens indhold.   

Lidt langsommeligt - måske, men jeg har ikke haft virus på udviklings-nettet siden.
Og internet-nettet scannes dagligt for virus og malware.

Om det er sikkert  - tja - Men jeg er tilfreds med systemet.

Kristian
Avatar billede Droa Seniormester
27. oktober 2016 - 09:19 #15
det er derfor jeg nu overvejer og "banne" namespaces fra og blive brugt, så man slet ikke kan bruge redskaberne til og.. også selvfølgelig at fjerne dllimports.

alt jeg skal kunne er og bruge uskadeligt redskaber også fjerne alt andet. jeg regner med og læse filen igennem med et script og fjerne keywords først, men det kræver nok jeg bruger en form for streng forberedelse, så jeg ikke kommer ud i de kan escape eller andet, for at undgå filter.
Avatar billede arne_v Ekspert
27. oktober 2016 - 15:15 #16
System.IO er oplagt.

Men jeg tror ogsaa at der er andre. F.eks. System.Diagnostics.

Du skal ogsaa vaere opmaerksom paa at du kan risikere at der er assemblies som indeholder baade noedvendig kode og farlig kode.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester