Hey everyone,
On 9/14/07, Dusty Candland - eonBusiness <[EMAIL PROTECTED]> wrote: > > > I would prefer the AGAC (maybe just call it the AAC) over storing dll's > in a database. I've not used db4o, but using a db seems like a lot of > overhead where the file system should work fine. Yes, the Alchemi Assembly Cache (as opposed to the Global Assembly Cache) is a good distinction to make. Using db4o does feel like overkill in this situation because the Fusion (the assembly loader) just looks in a certain folder. Secondly, how will other resources be handled? Things like config files > and other non dll resources. I guess everything could be required to be > included as an embedded resource. Another option would be to run a > crypo-hash (like MD5) on the files and use that value for the key in the > cache in place of the signed assembly full name. That's a very good point. I think that only assemblies should be cached. This is the bulk of the binary data going over the wire. Config files and other text files can still be FileDependencies. The only situation I could forsee where you'd want to cache non-assembly resources is if you had a grid application that had one extremely large input file (like an image or audio file or video or something to process) that was shared between all of the executors. This seems to be a fringe case though -- you could still write code in the thread that downloads the image from a certain URL or something. Any other ideas about how to handle non-assembly resources? I vote that we only cache assemblies and require everything else be FileDependencies. How would the grid handle un-signed dll's? Just not cache them? That's a > fine solution for me, but then there are two code paths. I guess what > I'm getting at is some consideration should be given regarding > development for the grid. Further, minimizing the requirements to get > something to run initially has some value. Good point. I suppose that it is quite unreasonable to require that all cached assemblies be signed. Because that would imply that all code using the assemblies that need cached are signed, and that is a strict requirement that would severly limit the places where Alchemi can be used. The system that I described would still work for unsigned assemblies -- just that instead of PublicKeyToken=<random string of hex digits>, it is just null. (just the output of the Assembly.FullName property...) I think it would be beneficial to just have one method of operation, and handle signed/unsigned cases the same. I suppose we need to have a more in-depth discussion about the security implications of the caching. What kinds of attacks is this method vulnerable to? One situation I can think of is this: A trusted GThread that relies on an image processing assembly (ImageLib.dll) is deployed (and cached) to all of the executors that processes an image. It's unsigned, so you can't tell if it's been tampered with or changed. An attacker could then notice that the DLL is cached on the system, and that the image processing GThread is uses every night between 2 and 3am to run some scientist's jobs. The attacker could then open ImageLib.dll in Reflector and see what the classes were called, and then write his own code into another malicious assembly with the same function signatures. Then the attacker could simply copy his malicious into the AAC and overwrite the existing (good) ImageLib.dll. When the Gthread is run that night, the malicious code is executed. So, yes, Dusty's idea of implementing a hash of the assembly (esp. if it's unsigned) is a good idea. How exactly would that work? Are there any other scenarios that we should be looking into? -Matt ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2005. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ _______________________________________________ Alchemi-developers mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/alchemi-developers
