Service providers and manufacturers are challenged to deliver quality and value to consumers, for example by providing secure applications. Software security testing is used to identify vulnerabilities in an application such as a web application. Static Code Analysis is the analysis of computer software that is performed without actually executing programs.
The following detailed description references the drawings, wherein:
Software security testing is used to identify vulnerabilities in an application such as a web application. Static Code Analysis is the analysis of computer software that is performed without actually executing programs. Secure Code Analysis (SCA) is a static analyzer for security that analyzes the source code of applications to report security vulnerabilities. One application area of SCA is analyzing applications such as web applications. Examples of such application environments include the JAVA SERVLET, JAVASERVER PAGES (JSP), .NET, JavaEE, ASP.NET, WebObjects, web2py, OpenACS, Zend Framework, and Django framework technologies. These provide a general framework for developing web applications (e.g., JAVA web applications) by managing the life cycles of many data objects such as protocol requests and responses and providing functions that allow applications to transfer both data and control from one web resource to another. Other types of applications and/or application frameworks can also be used.
Using the frameworks means that application developers do not have to write code that implements these functionalities. However, the frameworks present challenges for static analyzers because the code that implements the functionalities is not a part of the application code and it is a challenge for the analyzer to report vulnerabilities that are present in the combination of the application code and framework usage without special measures taken to model the framework.
One approach could be a global data model to analyze web frameworks. Critical data objects would be treated as global variables through which data can flow from one method to another even if there is no apparent connection between these methods in application code. This model solves the problem of missing vulnerabilities that are present. However, it also causes a negative effect: it creates false data flows, which can result in false reports of vulnerabilities that are not actually present in the code. The number of false vulnerabilities can be very high, and auditing analysis results manually can become impractical.
Accordingly, various embodiments described herein relate to an approach to analyze web applications while avoiding false vulnerabilities. The approaches described herein create a precise data and control flow model where one or more data objects provided by the framework are treated as method parameters or fields of method parameters, and control flows between methods are explicitly created based on the specifications of the web framework in use. In some examples, the model treats the data objects as local variables of methods and bridges data flows across methods with explicit method calls. The objects can include simple variables (e.g., values of primitive data types) and/or references to class instances.
Static code analysis includes a set of techniques to find security vulnerabilities in code. Examples of such vulnerabilities are cross-site scripting (XSS), command injection, SQL injection, JavaScript Hijacking, buffer overflows, deadlocks and race conditions, format string vulnerabilities, access control issues, etc. One of techniques to find some of the vulnerabilities is taint analysis. Other examples include analyses for one or more of the other vulnerabilities described.
In the example of taint analysis, user input is considered untrusted data. Applications may propagate the untrusted data from one variable to another and to other places in code. When the untrusted data is used to perform certain operations (e.g., sending feedback to users, executing a command, querying a database, etc.), it can cause a security policy violation. This can result in compromised computer systems. Taint analysis discovers where the untrusted data enters an application, how it is propagated through the application, and where it causes security violations,
Therefore, there are two XSS vulnerabilities in this application. When a static security analyzer analyzes the source code without using any model for critical data objects such as the request and response, it does not report the XSS vulnerabilities as shown in the no model example 130 because there is no connection between servlets and JSP pages by merely examining the application code statically.
The global data model example 140 shows an example of that XSS vulnerabilities are determined using the global data model, which treats the request and response as globals. A write to a global causes data to flow to all reads from the same global. The analyzer reports the vulnerabilities because the model tells the analyzer that the request object in admin.jsp is the same global request object in AdminS. Using the global data model, untrusted data can now flow from the latter to the former through the request object. The arrows in the figure indicate the direction of untrusted data flow. A similar data flow happens between the UserS servlet and the user.jsp page. However, in this example, the request object causes false data flows: untrusted data can also flow from AdminS to user.jsp and from UserS to admin.jsp through the global request object. So there are total of four XSS vulnerabilities reported by the analyzer with two being false.
The number of false reports can get large for applications with a moderate number of servlets and JSP pages. With the approaches described herein, the number of false reports can be reduced, Suppose that there are M servlets with each forwarding its request to a single JSP page. Then the total number of true XSS vulnerabilities is M, while the global data model causes M*M=M{circumflex over ( )}2 vulnerabilities to be reported. In an application with M=20, the number of false vulnerabilities is 20{circumflex over ( )}2−20=380. It would be time-consuming to audit all vulnerabilities, if possible, to discover the real ones.
A local parameter model example 150 illustrates the data flows enabled by the solution described herein. Certain data objects such as request and response are treated as method parameters or fields of method parameters. This particular example defines the request and response objects as parameters, while other web frameworks such as Struts may not do so. In that case, artificial parameters are added to the methods in the model.
This treatment of certain data objects removes the false data flows generated by using a global data model. In some examples, the original code can be transformed in certain ways. For example, when there is a read from a field of an artificial parameter, the model can replace the read with a field access. Further, when there is a write, the model can substitute it for an assignment statement. Explicit method calls are created to enable tracking data flows across functions on these method parameters.
Call relationships can be discovered based on the specifications of the framework in use (e.g., for JAVA, the Servlet and JSP specifications provide information about what method should be invoked when there is a forward function call). For the example code in
An application load engine 210 can be used to load code of an application that uses a particular framework for code analysis. In certain examples, loading the code need not execute the code. Further, the application itself uses the framework. The application load engine 210 need not use a framework or the same framework.
In one example, a framework identification and model setup engine 212 can determine what framework is used in the code and what data objects of the framework should be modeled as local parameters. One or more data objects associated with the framework can be modeled. The modeling can be based on a specification associated with the framework. Different frameworks and/or versions of frameworks can have different models. The model can use local parameters with explicit control flows based on the respective specification. In some examples, certain coding features present in the code can be used to determine the associated framework/specification. The model can then be loaded.
In certain examples, a local parameter is a function parameter whose scope is only valid inside the function. Examples of local parameters include: request, response etc. Further, explicit control flow can refer to the order in which individual statements, instructions, function calls, etc. are evaluated. The explicit control flow can link particular objects of the framework across different methods and is implemented in the form of direct function calls.
In one example, a replacement engine 214 can replace corresponding data objects with one or more local parameters. In some examples, the replacement engine 214 can replace existing framework function calls with new function calls. In other examples, data objects can be replaced with local parameters.
The analysis engine 216 can identify one or more security vulnerabilities by analyzing one or more execution paths of the code using the explicit control flow. Because the control flow is explicit, the usage of an object can be tied to particular destinations. The destination for a particular object can be determined by analyzing the code. In the example of
In one example, the model uses one or more artificial parameters to represent the data object(s). In this example, the code can include a read from a property or an attribute of one of the artificial parameters. In this case, the read can be replaced with a field access because the field access makes the read explicit to the analyzer.
In another example, where the model use artificial parameters, the code can include a write to a property or an attribute of one of the artificial parameters. The write can be replaced with an assignment statement to a field of the artificial parameter.
The engines 210, 212, 214, 216 include hardware and/or combinations of hardware and programming to perform functions provided herein. Moreover, modules (not shown) can include programing functions and/or combinations of programming functions to be executed by hardware as provided herein. When discussing the engines and modules, it is noted that functionality attributed to an engine can also be attributed to a corresponding module and vice versa. Moreover, functionality attributed to a particular module and/or engine may also be implemented using another module and/or engine.
A processor 230, such as a central processing unit (CPU) or a microprocessor suitable for retrieval and execution of instructions and/or electronic circuits can be configured to perform the functionality of any of the engines 210, 212, 214, 216 described herein. In certain scenarios, instructions and/or other information, such as code, can be included in memory 232 or other memory. Input/output interfaces 234 may additionally be provided by the computing system 200b. For example, input devices 240, such as a keyboard, a sensor, a touch interface, a mouse, a microphone, etc. can be utilized to receive input from an environment surrounding the computing system 200b. Further, an output device 242, such as a display, can be utilized to present information to users. Examples of output devices include speakers, display devices, amplifiers, etc. Moreover, in certain embodiments, some components can be utilized to implement functionality of other components described herein. Input/output devices such as communication devices like network communication devices or wireless devices can also be considered devices capable of using the input/output interfaces 234.
Each of the engines and modules may include, for example, hardware devices including electronic circuitry for implementing the functionality described herein. In addition or as an alternative, each module may be implemented as a serles of instructions encoded on a machine-readable storage medium of computing system 200 and executable by processor 230. It should be noted that, in some embodiments, some modules are implemented as hardware devices, while other modules are implemented as executable instructions in conjunction with hardware.
Processor 410 may be, at least one central processing unit (CPU), at least one semiconductor-based microprocessor, at least one graphics processing unit (GPU), other hardware devices suitable for retrieval and execution of instructions stored in machine-readable storage medium 420, or combinations thereof. For example, the processor 410 may include multiple cores on a chip, include multiple cores across multiple chips, multiple cores across multiple devices (e.g., if the computing device 400 includes multiple node devices), or combinations thereof. Processor 410 may fetch, decode, and execute instructions 422, 424, 426 to implement the tasks described herein. As an alternative or in addition to retrieving and executing instructions, processor 410 may include at least one integrated circuit (IC), other control logic, other electronic circuits, or combinations thereof that include a number of electronic components for performing the functionality of instructions 422, 424, 426.
Machine-readable storage medium 420 may be any electronic, magnetic, optical, or other physical storage device that contains or stores executable instructions. Thus, machine-readable storage medium may be, for example, Random Access Memory (RAM), an Electrically Erasable Programmable Read-Only Memory (EEPROM), a storage drive, a Compact Disc Read Only Memory (CD-ROM), and the like. As such, the machine-readable storage medium can be non-transitory. As described in detail herein, machine-readable storage medium 420 may be encoded with a series of executable instructions for determining vulnerabilities of code analyzed using a local parameter model (e.g., as described in method 500).
Code instructions 422 can be processed by processor 410 to load code 430. The code can be associated with a framework. Data objects of the framework used by the code can be modeled using local parameters with explicit control flow as described herein. In certain examples, data objects can include one or more request objects and/or one or more response objects. In some examples, a request object is used to retrieve values from a client browser to be passed to a server. In other examples, a response object is used to send output to a user from a server.
Model instructions 424 can be used to determine a model associated with the code 430. In some examples, the code 430 can include one or more cues to determine which model to use. In one example, the code 430 can include functions that link the code 430 to a framework and/or framework version. This can be used to determine what model to use. For example, the code can be analyzed to determine the model to use based on matching (e.g., fingerprinting or signature matching). The model can be determined by matching code patterns to a specification associated with the framework. In some examples, certain objects can be associated with explicit method calls, field access, assignments, combinations thereof, etc.
Analyze instructions 426 can be used to analyze the code 430 to determine vulnerabilities 440. One or more execution paths of the code 430 can be analyzed using static code analysis and following explicit control flow used in the model. In some examples, the model can cause replacing of portions of the code with modeled local parameters. In some examples, the specification may not define a data object(s) as parameters, but the model can use artificial parameters to represent the data object(s). Further, the specification can be used to determine explicit method calls with modeled data objects in the code during analysis.
In one example, the code 430 can include a read from a property or an attribute of one of the artificial parameters. In this scenario, the read from the object can be replaced with a field access. This modeling can be used to determine vulnerabilities that correspond to field access or reading data.
In another example, the code 430 can include a write to a property and/or an attribute of one of the artificial parameters. The write can be replaced with an assignment statement to a field of the respective local parameter. As noted, the modeling can be used to determine vulnerabilities that correspond to writing to data/deleting data.
At 502, code of a web application using a framework can be loaded by the computing device 400. As used herein, the web application using the framework refers to the web application code that uses one or more features of the framework. A code analyzer need not use the same framework for analysis.
At 504, the computing device 400 can determine a model for the framework. The model can use local parameters with explicit control flow based on a specification of the framework. In one example, the determination can be based on selection. In another example, the determination can be based on processing of code loaded at 502. In some examples, the model can be created manually by following the specification. The model can be used to replace one or more lines of code calling framework functions.
The model itself can be determined by analyzing the framework. It can be determined which objects are global and which objects are not global. Global objects can be modeled using a global model. Non-global objects can be modeled using other approaches. For example, data objects that are not global can be identified. When a user receives a response based on a request, it may be considered not global (e.g., a different user may receive a different response). The framework can be analyzed to determine how the dataflow happens. Then a flow can be modeled from point A to point B based on the effect of a method on the object. Explicit method calls can be established by following the specification in this manner.
Data objects of the framework used by the code can be determined at 506. In some examples, a set of data objects and/or associated parameters to be used in the model can be listed with the model. These data objects can be compared to the code to determine whether the objects are present in the code.
If present, at 508, one or more of the data objects in the code can be replaced with local parameters of the model. In some examples, if the specification does not define the data objects as parameters, the model can use one or more artificial parameters to represent the data objects. In one example, the code can include a read from a property or an attribute of one of the artificial parameters. The read can be replaced with a field access. In another example, the code can include a write to a property or an attribute of one of the artificial parameters. The write can be replaced with an assignment statement.
In some examples, the specification can include parameters associated with functions called. In certain examples, the code may not have these parameters called out. Artificial parameters can be used in place of these parameters.
At 510, the code can be analyzed using the model to identify at least one security vulnerability by analyzing one or more execution paths of the code using the explicit control flow of the model. As noted, the code analysis can be a static code analysis that helps verify that the code is trustworthy. The static code analysis can scan the code, identify root causes of software security vulnerabilities, and correlate and/or prioritize results. In some examples, the embodiments described herein can allow for additional code to be analyzed while limiting false security vulnerabilities being found.
Filing Document | Filing Date | Country | Kind |
---|---|---|---|
PCT/US2013/076650 | 12/19/2013 | WO | 00 |
Publishing Document | Publishing Date | Country | Kind |
---|---|---|---|
WO2015/094300 | 6/25/2015 | WO | A |
Number | Name | Date | Kind |
---|---|---|---|
20030159063 | Apfelbaum et al. | Aug 2003 | A1 |
20100325620 | Rohde et al. | Dec 2010 | A1 |
20110030061 | Artzi | Feb 2011 | A1 |
20110126213 | Macken | May 2011 | A1 |
20110197180 | Huang et al. | Aug 2011 | A1 |
20120102471 | Artzi | Apr 2012 | A1 |
20120102474 | Artzi | Apr 2012 | A1 |
20120131670 | Artzi | May 2012 | A1 |
20120151449 | Maeda | Jun 2012 | A1 |
20130055220 | Murthy | Feb 2013 | A1 |
20130086688 | Patel et al. | Apr 2013 | A1 |
20130091487 | Chandra et al. | Apr 2013 | A1 |
20130205399 | Kalman | Aug 2013 | A1 |
20130312102 | Brake | Nov 2013 | A1 |
20130339311 | Ferrari et al. | Dec 2013 | A1 |
20140082327 | Ghose | Mar 2014 | A1 |
20150332055 | Siman | Nov 2015 | A1 |
20160241585 | Zhao | Aug 2016 | A1 |
Number | Date | Country |
---|---|---|
PCT-WO2007025279 | Mar 2007 | WO |
Entry |
---|
Chen, H., et al., Data-flow Based Vulnerability Analysis and Java Bytecode, 7th WSEAS International Conference on Applied Computer Science, Nov. 21-23, 2007, pp. 201-207. |
Doupe, A., et al., Fear the Ear: Discovering and Mitigating Execution After Redirect Vulnerabilities, CCS '11, Oct. 17-21, 2011, 11 pages. |
International Search Report & Written Opinion, PCT Patent Application No. PCT/US2013/076650, dated Aug. 21, 2014, 9 pages. |
Jovanovic, N., et al., Pixy: a Static Analysis Tool for Detecting Web Application Vulnerabilities (technical Report), Vienna University of Technology, Aug. 15, 2005, 19 pages. |
Liu, Y., et al., Static Information Flow Analysis with Handling of Implicit Flows and a Study on Effects of Explicit Flows VS Implicit Flows, Rensselaer Polytechnic Institute, Oct. 23, 2009, 10 pages0 |
Tripp. O., et al.. Andromeda: Accurate and Scalable Security Analysis of Web Applications, Tel Aviv University, Jan. 9, 2013, 16 pages. |
Delisle et al., Sun Microsystems: JavaServer Pages™, Specification, Version 2.2, MaintenaceRelease2, Dec. 10, 2009 (594 pages). |
Mordant. Rajiv, Sun Microsystems, Java™ Servlet Specification, Version 3.0, Dec. 2009 (230 pages). |
Srioharan et al., F4F: Taint Analysis of Framework-based Web Applications, OOPSLA 2011 (38 pages). |
Number | Date | Country | |
---|---|---|---|
20160241585 A1 | Aug 2016 | US |