Again, I want to stress that from my position we are completely ignoring 
desktop Java users who will update Java to JDK 9 and never know that they’ve 
broken something by doing that.

Java is not a server only enterprise deployed environment…

Gregg

> On Apr 2, 2017, at 6:39 PM, Stephen Felts <stephen.fe...@oracle.com> wrote:
> 
> I agree with Andrew's position that if the argument is added in JDK9, it 
> should default to allow dynamic loading of agents.
> 
> Arguing from the position "Isn't it already the case, however, that migrating 
> existing applications to JDK 9 is often going to require the use of a few new 
> options anyway, in order to expose internal APIs" isn't a valid argument IMO. 
>  Although migration to JDK 9 will be painful, I think that we will get to 
> zero JDK 9 command line arguments.  As proposed, this new argument will never 
> go away.
> 
> It's highly likely that customers will have scripts that they migrate from 
> JDK 8 to JDK 9.  We don't control that.
> And many developers don't use any scripts because for many cases, they don't 
> care about the garbage collector or memory or whatever the scripts provide.
> But they do care about product functionality provided by an agent.
> 
> 
> 
> -----Original Message-----
> From: Andrew Dinn [mailto:ad...@redhat.com] 
> Sent: Friday, March 31, 2017 5:46 AM
> To: Mark Reinhold
> Cc: jigsaw-dev@openjdk.java.net
> Subject: Re: Disallowing the dynamic loading of agents by default
> 
> Hi Mark,
> 
> On 30/03/17 16:38, mark.reinh...@oracle.com wrote:
>> // Moving the general discussion to jigsaw-dev for the record; // 
>> bcc'ing {hotspot-runtime,serviceability}-dev for reference.
>> 
>> Andrew,
>> 
>> Thanks for your feedback on this topic [1][2][3].
> 
> ... and thank you for your considered reply.
> 
>> First, we apologize for the way in which this topic was raised.  Our 
>> intent was to post a proposal for discussion prior to code review, but 
>> unfortunately that review was posted prematurely (as is evident by its 
>> inclusion of Oracle-internal e-mail addresses and URLs).
> 
> Hmm, yes! I must say I didn't notice that. I appreciate the apology but it's 
> not really necessary. I certainly didn't expect any explanation to omit some 
> element of miscommunication and/or cock-up :-)
> 
>> Second, I agree with your earlier analysis as to the security impact 
>> of this change.  If an attack is possible via this vector then closing 
>> the vector would only slow the attack, not prevent it.
> 
> Good, I am glad to hear there is not some terrible loop-hole at play that I 
> am not aware of.
> 
>> The motivation for this change is, however, not merely to improve the 
>> security of the platform but to improve its integrity, which is one of 
>> the principal goals of the entire modularity effort.  ...
> 
> Ok, I understand the motive here although I'm still not personally convinced 
> by it. I'll come to the practical considerations below. Before that I'd like 
> to address the question of integrity at a more abstract level.
> 
> I'm certainly not against providing -XX+/-EnableDynamicAgentLoading as a 
> command line option. I agree that it's probably useful for some users to have 
> the option to completely lock down the platform to guarantee its integrity. 
> It seems from what you say above that this lock-down option is only there to 
> provide 'belt and braces'. In other words, it is only necessary to guard 
> against a security breach that could be managed by other means (e.g. a 
> failure to control what jars go into your classpath; a failure to control 
> access to the JVM uid on on the JVM host machine).
> I cannot fault the idea of a belt and braces lockdown per se but I am still 
> not convinced why that extra protection needs to be enabled /by default/.
> 
> You specifically bring up the scenario where rogue code, once entered into 
> the JVM, might use the attach API to raise its privilege level.
> 
> "As things stand today, code in any JAR file can use the 
> `VirtualMachine.loadAgent` API to load an agent into the JVM in which it's 
> running and, via that agent, break into any module it likes."
> 
> Yet, you also acknowledge above that this merely constitutes an opportunistic 
> escalation of a situation that is already a serious security breach in its 
> own right. I don't think I follow the logic here.
> 
> Are you saying that we need the extra braces because there is a real danger 
> here? one that users cannot rightly always be expected to guard against? Or 
> are you just being extra cautious. This is really the crux of the matter 
> because that extra caution has to be weighed against the extra cost of lost 
> opportunities to deploy agents in abnormal situations.
> 
> n.b. I know in the case of Red Hat's middleware that this is a real cost 
> which will definitely arise no matter how hard we work to educate users about 
> the necessary advance preparation required. It is also a significant cost 
> because it will damage our ability to resolve certain very difficult support 
> issues where only an agent can provide the information needed. And that is 
> above above and beyond the cost of the re-education task itself. I don't 
> doubt other companies will be affected similarly.
> 
> My mention above of 'abnormal' situations underlines why your argument about 
> integrity is somewhat moot (to me). Yes, it is important to know that 
> encapsulation means encapsulation -- at least, I agree that is so in /normal/ 
> circumstances. However, agents are clearly not normal code performing the 
> normal program operations of an application. Many agents are specifically 
> designed fro deployment in abnormal situations and perform abnormal actions. 
> That is precisely what provides the impetus to deploy agents dynamically.
> 
> It is highly valuable in such circumstances, and only in those circumstances, 
> to be able to allow privileged agent code to /selectively/ remove certain 
> integrity barriers, even if -- perhaps, especially because -- any dismantling 
> of the normal rules of operation only happens modulo the specific licence the 
> agent has been crafted and configured to grant. Useful agents clearly scope 
> the degree to which they perturb normality to achieve abnormal results. 
> Careful and thoughtful users can (must) still feel safe that an agent is not 
> going to do catastrophic damage to the running application and the integrity 
> of its data and operation. Ironically, this means that deployment of my agent 
> is actually a relatively normal (even if infrequent) procedure for many of 
> our users.
> 
> So, while I agree that platform (or even application) integrity is a valuable 
> property to maintain in normal program operation, I don't think those 
> concerns are warranted in the case of an agent that has been deliberately and 
> carefully deployed by those in charge of an application. I suspect we are 
> probably not going to agree about the proposed default on these grounds (and 
> I also suspect I will not be the only one to disagree with your position). 
> So, perhaps we would be better off moving on to pragmatic concerns.
> 
>> I understand your points about the practical difficulties of having to 
>> educate users about this new option and enhance startup scripts to use 
>> the option only when invoking JDK 9.  Isn't it already the case, 
>> however, that migrating existing applications to JDK 9 is often going 
>> to require the use of a few new options anyway, in order to expose internal 
>> APIs?
>> If so then would it really be that much more burdensome for users also 
>> to think explicitly, at the same time, about whether they want to 
>> enable dynamic agent loading?
> 
> If the default is reset to allow dynamic loading then I am happy to fully 
> endorse this change and see no significant consequences. If this change is 
> going to happen with your proposed default then I would very much prefer it 
> to be staged: introduce the flag in 9 but with the default being to allow 
> dynamic loading of agents (i.e. default to the status quo); reset the default 
> in 10 to disable loading. The benefit of that is
> 
>  aware JDK9 users can still use or ignore the option as they see fit
> 
>  unaware JDK9 users will not get hit by the change by surprise in JDK9
> 
>  unaware JDK10 users may still get hit by surprise but by that stage any 
> configuration option they add to their JDK10 scripts will be compatible if 
> they need to switch back and forth between JDK10 and JDK9
> 
>  implementers of agents and implementers of middleware that might benefit 
> from using those agents have more time to prepare their users, limiting the 
> potential for any such nasty surprise in JDK10
> 
>> This change would be disruptive to some but it's the best way we've 
>> found, so far, to preserve platform integrity in the face of dynamic 
>> agent loading.  If there's a better way to do that, we'd like to know.
> 
> No, I don't think there is a better mechanism, only a better default.
> That reflects my belief that, while 'preserving platform integrity' is a 
> highly desirable goal, for most users it does not merit being pursued 'in the 
> face of dynamic agent loading'.
> 
> regards,
> 
> 
> Andrew Dinn
> -----------
> Senior Principal Software Engineer
> Red Hat UK Ltd
> Registered in England and Wales under Company Registration No. 03798903
> Directors: Michael Cunningham, Michael ("Mike") O'Neill, Eric Shander

Reply via email to