On Sun, Apr 25, 2010 at 2:56 AM, Binyamin Dissen <bdis...@dissensoftware.com > wrote:
> Why is there a requirement that no authorized code could ever run in the > address space afterwards? > Because the unauthorized code could have modified storage and/or code belonging to the authorized code. Non-reentrant code (if any) will be loaded in job step key (8) and any data areas that are not specifically requested in another key will also be in key 8. Once those have been "exposed" to unauthorized code there's no going back. > I don't know that it is possible to prevent (logical) APF when running in a > system key. > It isn't possible. In fact, being in a system key is considered to be privileged, even if you're running in problem state and with JSCBAUTH off. You can MODESET to sup stat in that condition. > I don't understand the insistence that the authorized program MUST use key > 8 > storage. I'm not insisting that it must use key 8!!!! I am merely observing that that is the default and you can't assume that all of the code running in that address space will be clued in on what you're up to. If you're writing the mainline application code you can certainly run in a system key for everything you do, but running in a key that is different than the job step key requires exception vigilance in the choice of storage keys and subpools and EVEN WITH that level of vigilance, there are a lot of things that just don't work out. For example, any externally called code (e.g. access methods, home grown exits, ISV code... etc etc) that mindlessly assumes that it is running in a completely unprivileged environment will potentially fail in a variety of ways. You can't predict what assumptions that code may make that would be ok in a true APF environment and in a non-APF environment, but not both at the same time. > Yes, some will be assigned by the system - but it need not be used. > Return via SVC 3 rather than RETURN using the passed save area (which is in > key8 and may have been altered). Getmain all working storage in 229/230. > Etc. > Once again true in the abstract, but you can't assume everyone else is in on the secret. If you're mixing auth/sup code and unauth code in the same address space you're begging for trouble. > :>But even worse, if any of the APF application's tasks had already > switched > :>to supervisor state and continued to run during or after when the > :>unauthorized code had been allowed to run, then there's a very high > :>likelihood that the unauthorized code could fool that supervisor state > code > :>into violating integrity. You could do it. I could do it. > > Not if written properly. > > For example, SVCs run all the time - and unauthorized code runs both before > and after the SVCs do their stuff. > Sorry you're missing the point entirely. There is a huge difference between an SVC that is being called out of mainline task code maintaining integrity over the narrow function that it is performing and having the mainline task code maintain integrity over whatever it does during the life of the application. The SVC (or PC) is encapsulated from the rest of the logic and it follows the rules to the letter. It receives control in sup state and key zero from the OS or the hardware and it remains that way throughout. Inputs are checked and moved to fetch protected key zero storage, results are moved back to the caller's storage using the caller's PSW key (not zero) etc. It is a closed and bounded environment. If it needs to do something non-privileged, it will SYNCH to a new RB that runs that work and the system returns control to the SVC/PC in the same state it left. So if the SVC/PC is done right, the unauthorized code can't "touch" anything that its caller doesn't allow it to. In contrast to that, the code that runs from initial startup through mainline operation in an arbitrary task is not closed or bounded. With exceptional diligence you might make it so, but even then you would likely be undone by assumptions made by code that you did not write that you ended up calling, e.g. library routines, or by other system services, exits, ISV code etc. etc. that you don't control and can't predict what it is going to do. > :> There just > isn't > :>any safe way to avoid that in general. There are too many moving parts in > a > :>typical address space and not all of those parts (e.g. home grown exits > :>and/or ISV code) are going to be in on the secret of what's supposed to > be > :>going on. > > What would be your case? If the exits can be fooled by this, they can be > fooled by other things. > How many times does the question come up here on ibm-main about choice of subpools for exits, or whether exit code has to be reentrant? There are a huge variety of ways that authorized code can be spoofed if it makes assumptions about the environment that are invalid because somebody is trying to do something fundamentally stupid like running privileged and unprivileged work alongside each other within the same address space. > > Disagree if you like but you would be flying in the face of > :>literally decades of integrity studies. While we're at it, let's not > forget > :>that (again, unless the authorized application goes out of its way) the > :>unauthorized code is going to get control with the security identity of > the > :>server where it is running (usually some sort of production ID) Of > course, > :>that can be handled too, but the number of things that have to go just > right > :>in order for the OP's idea to work out is enormous and it only takes one > :>slip for the whole house of cards to fall down. > > If that is the case (that it is running under a special ID) then SVC > screening > should also be used to control the environment. > Maybe so, but my point is that the amount of work a developer would have to go through to make an application like this safe (FSVO "safe") is just enormous. Experienced developers will take short cuts because "it's too hard and it will take too long". Inexperienced developers won't even know what the potential problems are. Which leads me back to my original contention; the chances of a mixed mode application like this being done correctly are essentially zero. > :>Ok, then I must be dense. If you agree with this, how can you disagree > with > :>the preceding argument? > > There is no reason to reenable APF. The code that requires authorization > should already be in supervisor state thus APF is not needed. > > In general, there is no reason for an authorized routine to keep switching > in > and out of supervisor state. Yes, it should not run with key0 when not > needed, > but SUP state alone does not allow you to overwrite storage. well here again you're splitting a hair that shouldn't be split. Yes, once you've switched into supervisor state you no longer need APF. But if you ran in sup state and key 8 your unauthorized code could simply find one of your save areas and futz with it. So you would have no choice but to make your privileged worker tasks run entirely in a system key (not necessarily zero) and as I already pointed out, running in a key other than the job step key causes lots of things to fail (often spectacularly) My bottom line and my final word on this: contemplating running mainline auth/sup state tasks along side of unauthorized tasks within the same address space will inevitably result in integrity violations. I don't care how clever the developer is. Arguing about all of the ways to close off all of the potential exposures is futile. There will be more than you can think of and the OP who was proposing to do this doesn't have the experience (yet) to even know there are exposures. The only rational answer is to separate the privileged functions into their own address space. There will still be work to do, but it will be vastly safer and less work than trying to anticipate and design around each exposure one at a time. Now I'm done on this topic. -- This email might be from the artist formerly known as CC (or not) You be the judge. ---------------------------------------------------------------------- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@bama.ua.edu with the message: GET IBM-MAIN INFO Search the archives at http://bama.ua.edu/archives/ibm-main.html