throbber
Juniper Ex. 1009-p. 1
`Juniper v Finjan
`
`

`

`Juniper Ex. 1009-p. 2
`Juniper v Finjan
`
`

`

`
`
`
`
`
`
`EXHIBIT A
`
`Juniper Ex. 1009-p. 3
`Juniper v Finjan
`
`

`

`8/2/2018
`IEEE.org
`
`|
`
`
`|
`
`IEEE Xplore Digital Library
`
`
`|
`
`Mobile code security by Java bytecode instrumentation - IEEE Conference Publication
`IEEE-SA
`
`IEEE Spectrum
`
`More Sites
` Cart(0)
`
`Create Account
`|
`|
`|
`
`|
`
`
`|
`
` Personal Sign In
`
` Back to Results
`
`Related Articles
`
`Analysis of potential deadlock in Java
`multithreaded object-oriented programs
`
`A Teaching Path for Java Object
`Oriented Programming
`
`JR: flexible distributed programming in
`an extended Java
`
`View All View All
`
`Access provided by:
`IEEE Staff
`Sign Out
`
`
`
`Browse
`
`My Settings
`
`Get Help
`
`Browse Conferences > Proceedings DARPA Information...
`
`Mobile code security by Java bytecode instrumentation
`
` << Results
`
`View Document
`
`11
`Paper
`Citations
`
`18
`Patent
`Citations
`
`164
`Full
`Text Views
`
`3
`Author(s)
`
`A. Chander J.C. Mitchell I. Shin
`
` A. Chander ; J.C. Mitchell ; I. Shin
`
`View All Authors
`
`Abstract
`
`Authors
`
`Figures
`
`References
`
`Citations
`
`Keywords
`
`Abstract: Mobile code provides significant opportunities and risks. Java bytecode is used to provide executable
`content to Web pages and is the basis for dynamic service configuration in the Jini framework. While the Java
`Virtual Machine includes a bytecode verifier that checks bytecode programs before execution, and a bytecode
`interpreter that performs run-time tests, mobile code may still behave in ways that are harmful to users. We
`present techniques that insert run-time tests into Java code, illustrat... View more
`
` Metadata
`Abstract:
`Mobile code provides significant opportunities and risks. Java bytecode is used to provide executable content to
`Web pages and is the basis for dynamic service configuration in the Jini framework. While the Java Virtual
`Machine includes a bytecode verifier that checks bytecode programs before execution, and a bytecode
`interpreter that performs run-time tests, mobile code may still behave in ways that are harmful to users. We
`present techniques that insert run-time tests into Java code, illustrating them for Java applets and Jini proxy
`bytecodes. These techniques may be used to contain mobile code behavior or, potentially, insert code that is
`appropriate to profiling or other monitoring efforts. The main techniques are class modification, involving
`subclassing non-final classes, and method-level modifications that may be used when control over objects from
`final classes is desired.
`
`Published in: Proceedings DARPA Information Survivability Conference and Exposition II. DISCEX'01
`
`Date of Conference: 12-14 June 2001
`
`INSPEC Accession Number: 6991891
`
`Date Added to IEEE Xplore: 07 August 2002
`
`DOI: 10.1109/DISCEX.2001.932157
`
`Print ISBN: 0-7695-1212-7
`
`Publisher: IEEE
`
`Conference Location: Anaheim, CA, USA, USA
`
` Contents
`
` Contents
`
`
`
`Full Text
`
`https://ieeexplore.ieee.org/document/932157/
`
`1/20
`
`Juniper Ex. 1009-p. 4
`Juniper v Finjan
`
`

`

`8/2/2018
`
`Mobile code security by Java bytecode instrumentation - IEEE Conference Publication
`
` Download
`PDF
`
` Download PDF
`
` Download Citation
`
`View References
`
` Email
`
` Print
`
` Request Permissions
`
` Alerts
`
` Download Citation
`
`View References
`
` Email
`
` Print
`
` Request
`
`Permissions
`
` Alerts
`
`Authors
`
`References
`
`Citations
`
`Keywords
`
`Related Articles
`
`Footnotes
`
`Back to Top
`
`SECTION 1.
`Introduction
`
`Since its early beginnings in the Green project, the Java
`language [26] has come a long way in its applicability and
`prevalence. While its initial adoption was fuelled by the ability
`to add “active content” to web pages, Java has also become a
`predominant system and application development language,
`providing useful capabilities over and above the language
`features through an extensive set of application programming
`interfaces (APIs). The APIs' simplify programming by
`providing a rich set of domain-dependent libraries, as well as
`enabling new programmatic and computational paradigms. As
`an example, the Java Cryptography API makes it possible for
`applications to easily implement security protocols for their
`own needs, while the Jini API provides a specification for Java
`bytecode based distributed programming. One of the keys to
`Java's success and appeal is its platform independence,
`achieved by compilation of source code to a common
`intermediate format, namely Java Virtual Machine (JVM)
`bytecode, which can then be interpreted by various platforms.
`The ability to transport byte code between JVMs is most
`commonly encountered while browsing the net, and Java's
`platform independence ensures a client-independent
`experience.
`
`Although previous language implementations, such as Pascal
`and Smalltalk systems, have used intermediate byte code, the
`use of bytecode as a medium of exchange places Java bytecode
`in a new light. A networked computer can import and execute
`Java bytecode in ways that are invisible or partly invisible to
`the user. For example, a user (or his browser) may execute a
`Java applet embedded within a page as part of the HTIP
`protocol, or a client may execute a lookup service proxy as it
`prepares to join a Jini community. To protect against execution
`of erroneous or intentionally malicious code, the JVM verifies
`bytecode properties before execution and performs additional
`checks at run time. However, these checks only enforce some
`type correctness conditions and basic resource access control.
`For example, these tests will not protect against large classes of
`undesirable run-time behavior, including denial-of-service,
`compromise of integrity, and loss of sensitive information from
`password or credit card information files, say. The introduction
`of new security architectures [8] for Java has allowed for digital
`signature verification and resource access control through the
`
`https://ieeexplore.ieee.org/document/932157/
`
`2/20
`
` Export to
`
`Collabratec
`
` Export to Collabratec
`
`Juniper Ex. 1009-p. 5
`Juniper v Finjan
`
`

`

`8/2/2018
`
`Mobile code security by Java bytecode instrumentation - IEEE Conference Publication
`
`Permissions framework, but suffers from lack of specificity. A
`more expressive and fine-grained mechanism which can be
`customized to a user's security needs and is flexible enough to
`respond to security holes as they are discovered, is needed.
`
`The goal of our work is to develop methods for enforcing
`foreign bytecode properties, in a manner that may be
`customized easily. In this paper, we propose a technique, called
`bytecode instrumentation, through which we impose
`restrictions on bytecode by inserting additional instructions
`that will perform the necessary run-time tests. These additional
`instructions may monitor and control resource usage as well as
`limit code functionality. This. approach is essentially a form of
`software fault isolation [24], tailored to the file structure and
`commands of the Java language. Our technique falls into two
`parts: class-level modification and method-level modification.
`Class-level modification involves substituting references to a
`class by another class subclassed from it. As this method
`employs inheritance, it. can not be applied to final classes and
`interfaces. In these cases, method-levelmodification; which-
`may be applied on a method-by-method basis without regard to
`class hierarchy restrictions, enforces the ‘safe behavior that we.
`hope from foreign code.
`
`We have implemented these techniques within two contexts,
`each of which has a different bytecode delivery path. - For the
`case of Java applets transported via the HTTP protocol,
`instrumentation is done by a network proxy, which:in addition
`can also function as a Gl. Il-customizable firewall to specific
`sites, Java classes, and tagged advertisements, For Jini service
`proxies, for which there are only transport _ interfaces but no
`specific transport. mechanisms; we chose to modify the
`bytecode at the client's ClassLoader end, before its execution.
`Figures 5 and 6 summarize the system architecture for these
`two cases.
`
`The rest of the paper is. organized as follows. Section 2 gives
`examples of mobile code risks which cannot be checked within
`the scope of the current Java verifier and security model, and
`discusses. the extent of our technique. The bytecode
`instrumentation technique itself is presented in Section 3.
`Section 4 explains. how the mobile code transport frameworks
`for Java applets and Jini proxies are augmented to instrument
`the component bytecodes. Section 5 presents examples of the
`techniques presented, in Section 3, with one illustrative
`example for each of class-level and method-level modification.
`We make comparisons with existing work in Section 6, and
`conclude in Section 7.
`
`SECTION 2.
`Mobile Code Risks
`
`We preface our techniques for enforcing Java bytecode
`properties by examples of harmful behavior to illustrate the
`risk associated with untrusted mobile code. While these attacks
`have been around for a while, recent interest in peer to peer
`computing has added value to individual machine cycles,. and
`one may presume, incentive to deploying mobile code attacks.
`
`https://ieeexplore.ieee.org/document/932157/
`
`3/20
`
`Juniper Ex. 1009-p. 6
`Juniper v Finjan
`
`

`

`8/2/2018
`
`Mobile code security by Java bytecode instrumentation - IEEE Conference Publication
`
`The categorisations' below should be taken only as indicative,
`and not exhaustive. We situate the extent of our techniques
`w.r.t, the various kinds of attack threats posed by mobile code;
`Section 5 presents more detail for specific examples.
`
`2.1. Denial of Service
`The current Java security model provides a Permissions
`framework to specify the host resources that mobile code may
`access. However, the extent of use is not monitored, and code
`which has legitimate use for a certain resource, say the screen,
`or the audio driver, may abuse this privilege. The system may
`be rendered useless by greedy techniques: monopolizing and
`stealing CPU time, grabbing all available system memory, or
`starving other threads and system processes. Many variants on
`this' theme exist, a common scheme is for the foreign code to
`spawn ‘a “resource consuming” thread. The runaway thread
`redefines its stop method to execute a loop and effects an
`“infinite access” to the resource, which may result in annoying
`to crippling behavior, for example through screen flooding.
`Often a complete browser or system shutdown becomes the
`only viable, option.
`
`Since the safety of Java runtime system may be threatened by
`inordinate system resource use, it is useful to have some
`mechanism to monitor and control resource ‘usage.
`
`2.2. Information Leaks
`
`An applet may subvert its constrained channels of information
`flow through various means. A possible third-party channel is
`available with the URL redirect feature. Normally, an applet
`may instruct the browser to load any page on the web. An
`attacker's server could record the URL as a message, then
`redirect the browser to the original destination [5]. Another
`scenario exploits the ability of an applet to send out email
`messages [10]. If the web server is running an SMTP mail
`daemon, a hostile applet may forge email after connecting to
`port 25.
`
`Time-delayed access to files also can be used as a covert
`channel [19]. Specifically, if mobile code fragment
`, with
`access to private information is prohibited from accessing the
`net, information can still be sent out by another, mobile code
`fragment
`, which shares a file with
`. Inter code
`communication via storage channels may be detected by
`system logs, but these are hard to analyze in real time.
`
`It is generally accepted that theoretically feasible covert
`channels like refreshing a page at uneven time intervals to
`transmit a sequence of bits, are hard to detect. We ignore such
`arbitrary and unpredictable information channels, while using
`our techniques to plug more tractable pathways as in the case
`of email forgery.
`
`2.3. Spoofing
`
`In a spoofing attack, an attacker creates a misleading context in
`order to trick a user into making an inappropriate security-
`relevant decision [7]. For example, some applets display URLs
`as the mouse navigates over various components of a web page,
`like a graphic or a link. By convention, the URL is shown in a
`specific position on the status line. If an applet displays a fake
`URL the user may be misled into connecting to a potentially
`
`https://ieeexplore.ieee.org/document/932157/
`
`4/20
`
`Juniper Ex. 1009-p. 7
`Juniper v Finjan
`
`A
`B
`A
`

`

`8/2/2018
`
`Mobile code security by Java bytecode instrumentation - IEEE Conference Publication
`URL, the user may be misled into connecting to a potentially
`hazardous website. It is also possible to abuse weaknesses in
`mobile code-fetch conventions to spoof the real place of origin
`of a code fragment, laying client-side security policies
`regarding network connections to naught.
`
`Bytecode instrumentation is an effective technique against
`well-specified attacks, which include denial of service and
`information leaks via specific pathways. In this sense, its scope
`is monotonic; newly discovered attack specifications can be
`added to a client's policy files and any additional bytecodes that
`match them can be instrumented to enforce safety properties.
`The reader may like to think of this in virus checking terms,
`where the safety net widens with addition of new entries in the
`virus signature files. Byte code instrumentation thus allows for
`content-based protection, since the modification is a function
`of the bytecode and the client's safety policy.
`
`We now move on to the technical details of our scheme.
`
`SECTION 3.
`Bytecode Instrumentation
`
`Our goal is to design a safety mechanism for Java byte code
`that extends the signature based security manager with user-
`controlled content-based control. The basic idea is to restrict
`bytecode by the insertion of sentinel code. In the examples we
`have implemented and tested, sentinel code may monitor and
`control resource usage as well as limit functionality. This
`approach is a form of software fault isolation [24], adapted to
`the specific structure and representation of Java bytecode
`programs.
`
`Our safety mechanism substitutes one executable entity, such
`as a class or a method, with a related executable entity that
`performs additional run-time tests. For instance, a class such
`as Window can be replaced with a more restrictive class
`Safe$Window that performs additional security and sanity
`checks. This replacement must occur before the transported
`bytecode is loaded within the JVM of the client, and we achieve
`this at different points in the transport path in our experiments
`with Java applets and Jini proxies (see Section 4). Note that we
`will use the prefix SafeS to indicate a safe class.
`
`The following sections explain how modified executable entities
`are inserted in Java bytecode. The modifications may be
`performed at the level of the class or the method, by modifying
`the constant pool to replace references to substituted entities
`by their safe substitutes.
`
`3.1. Class-level Modification
`
`A class such as Window can be replaced with a subclass of
`Window (say Safe
`
`constructor can limit the number of windows that can be open
`at one time, by calling Window's constructor, and raising an
`exception when the number of windows opened currently
`(stored as a private variable in the method) exceeds the limit.
`Since Safe$Window is defined to be a subclass of Window, the
`
`https://ieeexplore.ieee.org/document/932157/
`
`5/20
`
`Juniper Ex. 1009-p. 8
`Juniper v Finjan
`
`W indow)thatrestrictsresourceusageandf unctionality. F orexam
`

`

`8/2/2018
`
`Mobile code security by Java bytecode instrumentation - IEEE Conference Publication
`
`applet should not notice the change, unless it attempts to create
`windows exceeding the limit.
`
`This class substitution is done by merely substitut-.ing
`references to class Window with references to class Safe
`Window is a subtype of Window, type
`Safe$Window can be used anywhere type Window is expected.
`
`In Java, all references to strings, classes, fields, and methods
`are through indices into the constant pool of the class file [16].
`Therefore, it is the constant pool that should be modified in a
`Java class file. More specifically, two entries are used to
`represent a class in the constant pool. A constant pool entry
`tagged as CONSTANT_Class represents a class while
`referencing a CONSTANT _Uft8 entry for a UTF-8 string
`representing a fully qualified name of the class, as in figure 1.
`
`If we replace a class name of a CONSTANT. Uft8 entry,
`Window, with a new class name, Safe
`
`as shown in figure 2.
`
`Substituting a class requires just one modification of a constant
`pool entry representing a class name string. This is
`straightforward since a subclass may appear anywhere a
`superclass is used without any modifications to the program.
`However, this approach cannot be applied to a final class or an
`interface class.
`
`3.2. Method-level Modification
`In class-level modification, the basic idea is to substitute a
`potentially harmful method (for example, those that provide
`direct access to system resources) with a safer version that
`provides for customized control. Unlike class-level
`modification, however, there is no relationship between the two
`methods. This provides more flexibility in that it can be used
`even when the method is final or is accessed through an
`interface, but requires more modifications than a simple
`substitution of methods.
`
`Figure 1. Class references in the constant pool
`
`Figure 2. Modfying class references
`
`https://ieeexplore.ieee.org/document/932157/
`
`Before getting into the general mechanism, let us consider a
`fi ld
`d
`h d d
`i
`i hi
`h
`l
`fil
`f
`
`6/20
`
`Juniper Ex. 1009-p. 9
`Juniper v Finjan
`
`W indow. W henS af e
`W indow, theCON S T AN lassentrywillrepresentthenewclass, S
`T
`C
`

`

`8/2/2018
`
`Mobile code security by Java bytecode instrumentation - IEEE Conference Publication
`field and a method descriptor within the Java class file format.
`The field descriptor represents the type of a class or instance
`variable. For example, the descriptor of an int instance variable
`is simply I. Table 1 shows the meaning of some field
`descriptors.
`
`Table 1. The meaning of the field & method descriptors
`
`The Method descriptor represents the parameters that the
`method takes and the value that it returns. A parameter
`descriptor represents zero or more field types, and a return
`descriptor a field type or v. The character V indicates that the
`method returns no value(void). For example, the method
`descriptor for the method
`
`is
`
`We will describe an instance method in the form <ClassName.
`MethodNameAndType> and an class(static) method in the
`form <ClassName: MethodNameAndType>, to distinguish
`them, though they are not distinguished in the constant pool.
`
`A method such as Thread.setPrioritY(I)V can be replaced with
`a safer version, say Safe
`
`The new safeguarding method takes priority of type integer as
`one of the arguments, and compares it with its upper limit. If
`the argument is higher, the argument is set to the upper limit.
`Eventually, the new method invokes Thread.setPrioritY(I) V
`with the verified argument. Since the new method invokes an
`instance method mentioned before, a reference to an instance
`of class Thread should be passed to the new method.
`
`3.2.1 Method Reference Modification
`It is more difficult to represent a method than a class;
`consequently the bytecode: modification procedure for
`methods is more involved. A constant pool entry tagged as
`CONSTANT. Methodref represents a method of a class(a static
`method) or of a class instance(an instance method). The
`CONSTANT_Class entry representing the class of which the
`method is a member and the CONSTANT _NameAndType
`entry representing the name and descriptor of the method are
`referenced by CONSTANT. Methodref, In our example, the
`CON-STANT_Class entry and the CONSTANT. NameAnd'Iype
`entry reference the CONSTANT Uft8 entries representing
`java/lang/Thread.setPriorityand(I) V, re-spectively.
`
`https://ieeexplore.ieee.org/document/932157/
`
`7/20
`
`Juniper Ex. 1009-p. 10
`Juniper v Finjan
`
`T hread : −setP riority(Ljava/lang/T hread; I )V , whichdoesnota
`

`

`8/2/2018
`
`Mobile code security by Java bytecode instrumentation - IEEE Conference Publication
`
`Since a new class appears, we should add a new CONSTANT
`_Uft8 entry representing a new classname string, Safe
`
`setPriority (Lj a-lang/Thread; I) V, as shown in figure 3.
`
`3.2.2 Method Invocation Modification
`Among various Java Virtual Machine instructions
`implementing method invocations, we are interested in
`invokevirtual for an instance method invocation and
`invokestatic for a class(static) method invocation. Both
`instructions require an index to a CONSTANT. Methodref
`constant pool entry, but they require slightly different
`environments. The instance method invocation is set up by first
`pushing a reference, to the instance which the method belongs
`to, onto the operand stack. The method invocation's arguments
`are then pushed onto the stack. The contents of the stack at this
`point (the environment), which include the reference to the
`method and the operand stack of the call to Thread.
`setPriority(I) V, is shown in Figure 4(a). The class method
`invocation requires an environment much like that of the
`instance method invocation, except that a reference to the
`instance is not pushed onto the operand stack. The
`environment of a call to Safe$Thread: setPriority (Ljaval
`lang/Thread; I) V is shown in Figure 4(b).
`
`A visual comparison of the two method invocation
`environments in figure 4 makes the modification required very
`clear. The contents of the operand stacks are the same, though
`an instruction for method invocation changes from
`invokevirtual to invokestatic.
`
`The distinct nature of methods and classes, and their distinct
`representation in bytecode thus leads to different mechanisms
`for their respective modification. Method-level modification
`requires a change in bytecodes in addition to some
`modifications in the constant pool, whereas class level
`modification requires only one change in the constant pool.
`The difference in the costs of these operations is made up by
`the difference in the applicability of the schemes; method-level
`modifications provide finer-grained control, and are the only
`choice for final classes and interfaces.
`
`SECTION 4.
`Application Frameworks
`
`Our experiments with bytecode transfer and untrusted code
`execution were carried out in the context of Java applets and
`Jini service proxies. While the same instrumentation
`mechanisms apply in both cases (and, in general, for arbitrary
`bytecode), the transport mechanism is modified at different
`points. In the following, we refer to the code which carries out
`the bytecode instrumentation as the byte code filter.
`
`4.1. Java Applets
`
`The ubiquity of Java applets and their usefulness comes at the
`price of an increased security risk owing to unintentional
`execution of malicious mobile code during web browsing.
`
`https://ieeexplore.ieee.org/document/932157/
`
`8/20
`
`Juniper Ex. 1009-p. 11
`Juniper v Finjan
`
`T hread, andanothernewCON S T AN T . C lassentryref erencingth
`

`

`8/2/2018
`
`Mobile code security by Java bytecode instrumentation - IEEE Conference Publication
`
`There are two obvious ways of inserting a Java bytecode filter
`into the network and browser architecture. One approach
`would be to modify the class loader of the Java virtual machine
`used by the browser. The other is to capture and modify Java
`bytecode before it enters the browser. The latter provides an
`easier experimental framework, since a user can easily
`configure his or her browser to obtain web content through a
`piece of software called a network proxy. This can be done by a
`simple modification to a standard browser dialog box. In
`contrast, modifying the class loader of the Java virtual machine
`requires installation of special purpose code in every browser.
`Moreover, using a standard proxy interface allows us to install
`a Java-based “security tuner” interface in every browser, which
`allows the user to specify their security constraints. Thus a
`proxy interface provides a simple, customizable and flexible
`framework for developing and testing Java bytecode filters.
`
`The basic architecture of our system is shown in Figure 5.
`When the web browser requests a web page or applet, this
`request goes through the network proxy. The proxy forwards
`the request to the web server and receives the desired display
`or executable content. When the web server sends a Java
`applet, the proxy will pass the applet code to the byte code
`filter. The bytecode filter will examine the bytecode for
`potential risks and modify the bytecode before sending the
`code for execution to the web browser. In this way, the web
`browser only receives bytecode that has been screened. The
`proxy also has access to a repository of Java classes, including
`secure safe classes that can be substituted for standard library
`classes and implementations of user-interface methods. The
`user interface, written in Java and run as an applet under
`control of the browser, allows the user to customize the security
`checks performed by the proxy and filter during a web session,
`without stopping or restarting the browser or Java virtual
`machine running under control of the browser.
`
`Figure 3. Modifying method reference
`
`https://ieeexplore.ieee.org/document/932157/
`
`9/20
`
`Juniper Ex. 1009-p. 12
`Juniper v Finjan
`
`

`

`8/2/2018
`
`Mobile code security by Java bytecode instrumentation - IEEE Conference Publication
`
`Figure 4. Modifying environments of method invocations
`
`4.2. Jini Proxies
`
`The Jini architecture and application program interfaces
`provide a convenient and relatively general framework for
`dynamic discovery and configuration of distributed ser-vices.
`Although Jini is designed to support dynamic federation, the
`security aspects of Jini are extremely limited. The proliferation
`of networked small devices and the availability of lean JVMs
`makes Jini an obvious target for attacks in such a distributed
`system. We describe the basic Jini mechanisms below, and
`demonstrate the use of our techniques to ensure safety in this
`framework.
`
`4.2.1 Protocols
`The Jini API extends the Java environment from a single
`virtual machine to a network of machines. In general, a Jini
`system contains a set of services each of which offers some
`functionality to any member of a federation. The initial
`handshake between the clients and the services is facilitated by
`lookup services. The location and installation of services via
`this lookup mechanism involves network transfer of Java
`bytecode. Specifically, if a process on machine A wishes to
`communicate with a process on machine B, then machine A
`installs a surrogate stub object that communicates with a
`corresponding object on machine B through remote method
`invocation. This surrogate stub object is called a proxy. If the
`object on machine B provides a lookup service, then the stub
`object installed on machine A is called a lookup proxy. If the
`object on machine B provides a general distributed service,
`then the stub object installed on machine A is called a service
`proxy.
`
`A Jini client obtains a lookup proxy and a service proxy
`through the following steps:
`
`Discovery The client broadcasts a request for a lookup
`service. The lookup service responds with a lookup proxy.
`This stub object (proxy) allows the client to make further
`queries of the lookup service.
`
`Query The client queries the lookup service for a service
`with specific attributes. The lookup service responds with
`a list of services and supplies a list of attributes
`associated with each service. v
`
`https://ieeexplore.ieee.org/document/932157/
`
`10/20
`
`Juniper Ex. 1009-p. 13
`Juniper v Finjan
`
`

`

`8/2/2018
`
`Mobile code security by Java bytecode instrumentation - IEEE Conference Publication
`
`Selection The client requests and receives a service
`proxy for a specific service. The result of selection may be
`a signed or unsigned jar (java archive) file.
`
`The first phase, used in discovery, involves communication
`with a subnet or multicast group, in order to locate a lookup
`service. In the second phase, which includes query and
`selection, the agent communicates with the lookup service
`through a lookup proxy that was obtained in the discovery
`phase. While standard Jini uses remote method invocation,
`other forms of communication could conceivably be
`substituted. Since the agent must install and execute a lookup
`proxy (interface or driver), the agent is susceptible to errors or
`attacks resulting from corrupted or malicious proxy code. In
`the third phase, the agent interfaces with the installed service
`through a service proxy. Again, standard Jini relies on remote
`method invocation, but if the service is distributed, then other
`communication mechanisms could be appropriate. As with
`installation of the lookup proxy, the agent is again subject to
`risks associated with execution of service proxy code received
`over the network.
`
`Figure 5. Architecture for instrumenting Java applets
`
`https://ieeexplore.ieee.org/document/932157/
`
`11/20
`
`Juniper Ex. 1009-p. 14
`Juniper v Finjan
`
`

`

`8/2/2018
`
`Mobile code security by Java bytecode instrumentation - IEEE Conference Publication
`
`Figure 6. Architecture for instrumenting Jini proxies
`
`4.2.2 Security
`The current Jini security model is simply the Java security
`model. The final jar file received as the result of selection may
`be signed. The client Java security manager may be configured
`to provide each lookup proxy or service proxy with specific
`access rights, according to the signing key used in creation of
`the Jar file. This provides some protection, but suffers from the
`familiar shortcomings of signature-based security. Specifically,
`authenticated code may have unintentional safety loopholes,
`which are only adequately addressed by a content-based
`protection mechanism. Instrumenting the proxy bytecode at
`the client's end, before it is loaded by the class loader for
`execution, provides for client-specified safe behavior.
`
`Figure 6 illustrates the augmented Jini architecture. Note that
`specific kinds of bytecode filtering may be appropriate for Jini.
`For example, if Jini service proxies (consisting of java
`bytecode) are not expected to contain loops, then filtering can
`be used to detect this and prevent looping. Another desirable
`property might be that the proxy only engages in secure
`authenticated network connections with the service it came
`from, and the code may be filtered to require this. Other client
`and service specific tests may be performed by instrumenting
`the proxy with sentinel code, which performs the required code
`analysis prior to execution of the original code. Jini-specific
`filtering can be achieved either by writing appropriate
`configuration files for our existing filter, or extending the filter
`implementation.
`
`The second piece of the augmented Jini infrastructure is an
`interception mechanism for proxy bytecode. As described
`above, for Java applets this was achieved by using a network
`proxy that intercepted http communication. For Jini, this must
`now be done using a network proxy or some other mechanism
`that has access to arguments and return values of Java RMI
`calls.
`
`4.2.3 Bytecode Interception
`The Jini specification only requires the protocols described
`above to be based on TCP and UDP transport and object
`serialization, and implementations are free to choose a
`communication mechanism. In particular, the specification
`makes no particular reference to the RMI registry or wire
`protocols. The only requirement is that Jini interfaces preserve
`the RMI remote interface semantics, which means that they
`need to only declare RemoteException on its methods. This
`makes the job of identifying a well known, constant path of
`remote-class delivery rather difficult. We note though that
`most Jini communities of services and clients actually use RMI,
`on account of it being used in Sun's default implementation.
`
`We focus on the relevant parts of the Jini discovery protocol.
`After the lookup server is found, it sends to the client an object
`implementing the net.jini.-core. lookup. ServiceRegistrar
`interface. This is done in the last phase of the discovery
`protocol, via a java.rni.MarshalledObject. This ServiceRegistrar
`object is the lookup proxy, and will receive all service proxies
`on the clients behalf. Accordingly, there are three places where
`one could intercept the service proxy bytecode:
`
`https://ieeexplore.ieee.org/document/932157/
`
`12/20
`
`Juniper Ex. 1009-p. 15
`Juniper v Finjan
`
`

`

`8/2/2018
`
`Mobile code security by Java bytecode instrumentation - IEEE Conference Publication
`
`during transport from the lookup server to the lookup
`service proxy,
`
`within the ServiceRegistrar before the serialized object is
`reconstructed, and
`
`within the ServiceRegistrar after

This document is available on Docket Alarm but you must sign up to view it.


Or .

Accessing this document will incur an additional charge of $.

After purchase, you can access this document again without charge.

Accept $ Charge
throbber

Still Working On It

This document is taking longer than usual to download. This can happen if we need to contact the court directly to obtain the document and their servers are running slowly.

Give it another minute or two to complete, and then try the refresh button.

throbber

A few More Minutes ... Still Working

It can take up to 5 minutes for us to download a document if the court servers are running slowly.

Thank you for your continued patience.

This document could not be displayed.

We could not find this document within its docket. Please go back to the docket page and check the link. If that does not work, go back to the docket and refresh it to pull the newest information.

Your account does not support viewing this document.

You need a Paid Account to view this document. Click here to change your account type.

Your account does not support viewing this document.

Set your membership status to view this document.

With a Docket Alarm membership, you'll get a whole lot more, including:

  • Up-to-date information for this case.
  • Email alerts whenever there is an update.
  • Full text search for other cases.
  • Get email alerts whenever a new case matches your search.

Become a Member

One Moment Please

The filing “” is large (MB) and is being downloaded.

Please refresh this page in a few minutes to see if the filing has been downloaded. The filing will also be emailed to you when the download completes.

Your document is on its way!

If you do not receive the document in five minutes, contact support at support@docketalarm.com.

Sealed Document

We are unable to display this document, it may be under a court ordered seal.

If you have proper credentials to access the file, you may proceed directly to the court's system using your government issued username and password.


Access Government Site

We are redirecting you
to a mobile optimized page.





Document Unreadable or Corrupt

Refresh this Document
Go to the Docket

We are unable to display this document.

Refresh this Document
Go to the Docket