Automatic Creation of SQL Injection and Cross-Site Scripting Attacks
|
|
|
- Richard Pearson
- 10 years ago
- Views:
Transcription
1 Automatic Creation of SQL Injection and Cross-Site Scripting Attacks Adam Kieżun MIT Philip J. Guo Stanford University Karthick Jayaraman Syracuse University Michael D. Ernst University of Washington Abstract We present a technique for finding security vulnerabilities in Web applications. SQL Injection (SQLI) and crosssite scripting (XSS) attacks are widespread forms of attack in which the attacker crafts the input to the application to access or modify user data and execute malicious code. In the most serious attacks (called second-order, or persistent, XSS), an attacker can corrupt a database so as to cause subsequent users to execute malicious code. This paper presents an automatic technique for creating inputs that expose SQLI and XSS vulnerabilities. The technique generates sample inputs, symbolically tracks taints through execution (including through database accesses), and mutates the inputs to produce concrete exploits. Ours is the first analysis of which we are aware that precisely addresses second-order XSS attacks. Our technique creates real attack vectors, has few false positives, incurs no runtime overhead for the deployed application, works without requiring modification of application code, and handles dynamic programming-language constructs. We implemented the technique for PHP, in a tool ARDILLA. We evaluated ARDILLA on five PHP applications and found 68 previously unknown vulnerabilities (23 SQLI, 33 first-order XSS, and 12 second-order XSS). 1 Introduction This paper presents a technique and an automated tool for finding security vulnerabilities in Web applications. Multi-user Web applications are responsible for handling much of the business on today s Internet. Such applications often manage sensitive data for many users, and that makes them attractive targets for attackers: up to 70% of recently reported vulnerabilities affected Web applications [5]. Therefore, security and privacy are of great importance for Web applications. Two classes of attacks are particularly common and damaging [5]. In SQL injection (SQLI), the attacker executes malicious database statements by exploiting inadequate validation of data flowing from the user to the database. In cross-site scripting (XSS), the attacker executes malicious code on the victim s machine by exploiting inadequate validation of data flowing to statements that output HTML. Previous approaches to identifying SQLI and XSS vulnerabilities and preventing exploits include defensive coding, static analysis, dynamic monitoring, and test generation. Each of these approaches has its own merits, but also offers opportunities for improvement. Defensive coding [6] is error-prone and requires rewriting existing software to use safe libraries. Static analysis tools [19, 29] can produce false warnings and do not create concrete examples of inputs that exploit the vulnerabilities. Dynamic monitoring tools [13,25,27] incur runtime overhead on the running application and do not detect vulnerabilities until the code has been deployed. Black-box test generation does not take advantage of the application s internals, while previous whitebox techniques have not been shown to discover unknown vulnerabilities [30]. We have created a new technique for identifying SQLI and XSS vulnerabilities. Unlike previous approaches, our technique works on unmodified existing code, creates concrete inputs that expose vulnerabilities, operates before software is deployed, has no overhead for the released software, and analyzes application internals to discover vulnerable code. As an implementation of our technique, we created ARDILLA, an automated tool for creating SQLI and XSS attacks in PHP/MySQL applications. ARDILLA is a white-box testing tool, i.e., it requires the source code of the application. ARDILLA is designed for testing PHP applications before deployment. Security vulnerabilities that ARDILLA identifies can be fixed before the software reaches the users because ARDILLA creates concrete attacks that exploit the vulnerability. In our experiments, ARDILLA discovered 68 previously unknown vulnerabilities in five applications. ARDILLA is based on input generation, taint propagation, and input mutation to find variants of an execution that exploit a vulnerability. We now discuss these components. ARDILLA can use any input generator. Our current implementation uses combined concrete and symbolic execution [1, 11, 30]. During each execution, this input generator monitors the program to record path constraints that capture the outcome of control-flow predicates. The input generator automatically and iteratively generates new inputs by negating one of the observed constraints and solving the modified constraint system. Each newly-created input explores at least one additional control-flow path. ARDILLA s vulnerability detection is based on dynamic taint analysis [13,29]. ARDILLA marks data coming from the 1
2 user as potentially unsafe (tainted), tracks the flow of tainted data in the application, and checks whether tainted data can reach sensitive sinks. An example of a sensitive sink is the PHP mysql query function, which executes a string argument as a MySQL statement. If a string derived from tainted data is passed into this function, then an attacker can potentially perform an SQL injection if the tainted string affects the structure of the SQL query as opposed to just being used as data within the query. Similarly, passing tainted data into functions that output HTML can lead to XSS attacks. ARDILLA s taint propagation is unique in that it tracks the flow of tainted data through the database. When tainted data is stored in the database, the taint information is stored with it. When the data is later retrieved from the database, it is marked with the stored taint. Thus, only data that was tainted upon storing is tainted upon retrieval. This precision makes ARDILLA able to accurately detect secondorder (persistent) XSS attacks. By contrast, previous techniques either treat all data retrieved from the database as tainted [28, 29] (which may lead to false warnings) or treat all such data as untainted [19] (which may lead to missing real vulnerabilities). To convincingly demonstrate a vulnerability, a tester or a tool must create concrete example attack vectors [4, 8, 10]. ARDILLA creates concrete attack vectors by systematically mutating inputs that propagate taints to sensitive sinks, using a library of strings that can induce SQLI and XSS attacks. This step is necessary because not every flow of tainted data to a sensitive sink indicates a vulnerability because the data may flow through routines that check or sanitize it. ARDILLA then analyzes the difference between the parse trees of application outputs (SQL and HTML) to check whether the attack may subvert the behavior of a database or a Web browser, respectively. This step enables ARDILLA to reduce the number of false warnings and to precisely identify real vulnerabilities. This paper makes the following contributions: A fully-automatic technique for creating SQLI and XSS attack vectors, including those for second-order (persistent) XSS attacks. (Section 3) A novel technique that determines whether a propagated taint is a vulnerability, using input mutation and output comparison. (Section 4.3) A novel approach to symbolically tracking the flow of tainted data through a database. (Section 4.4) An implementation of the technique for PHP in a tool ARDILLA (Section 4), and evaluation of ARDILLA on real PHP applications (Section 5). 2 SQL Injection and Cross-Site Scripting This section describes SQLI and XSS Web-application vulnerabilities and illustrates attacks that exploit them. SQL Injection. A SQLI vulnerability results from the application s use of user input in constructing database statements. The attacker invokes the application, passing as an input a (partial) SQL statement, which the application executes. This permits the attacker to get unauthorized access to, or to damage, the data stored in a database. To prevent this attack, applications need to sanitize input values that are used in constructing SQL statements, or else reject potentially dangerous inputs. First-order XSS. A first-order XSS (also known as Type 1, or reflected, XSS) vulnerability results from the application inserting part of the user s input in the next HTML page that it renders. The attacker uses social engineering to convince a victim to click on a (disguised) URL that contains malicious HTML/JavaScript code. The user s browser then displays HTML and executes JavaScript that was part of the attacker-crafted malicious URL. This can result in stealing of browser cookies and other sensitive user data. To prevent first-order XSS attacks, users need to check link anchors before clicking on them, and applications need to reject or modify input values that may contain script code. Second-order XSS. A second-order XSS (also known as persistent, stored, or Type 2 XSS) vulnerability results from the application storing (part of) the attacker s input in a database, and then later inserting it in an HTML page that is displayed to multiple victim users (e.g., in an online bulletin board application). It is harder to prevent second-order XSS than first-order XSS, because applications need to reject or sanitize input values that may contain script code and are displayed in HTML output, and need to use different techniques to reject or sanitize input values that may contain SQL code and are used in database commands. Second-order XSS is much more damaging than firstorder XSS, for two reasons: (a) social engineering is not required (the attacker can directly supply the malicious input without tricking users into clicking on a URL), and (b) a single malicious script planted once into a database executes on the browsers of many victim users. 2.1 Example PHP/MySQL Application PHP is a server-side scripting language widely used in creating Web applications. The program in Figure 1 implements a simple message board that allows users to read and post messages, which are stored in a MySQL database. To use the message board, users of the program fill an HTML form (not shown here) that communicates the inputs to the server via a specially formatted URL, e.g., Input parameters passed inside the URL are available in the $ GET associative array. In this example URL, the input has two key-value pairs: mode=display and topicid=1. This program can operate in two modes: posting a message or displaying all messages for a given topic. When
3 1 // exit if parameter mode is not provided 2 if(!isset($_get[ mode ])){ 3 exit; 4 } 5 6 if($_get[ mode ] == "add") 7 addmessagefortopic(); 8 else if($_get[ mode ] == "display") 9 displayallmessagesfortopic(); 10 else 11 exit; function addmessagefortopic(){ 14 if(!isset($_get[ msg ]) 15!isset($_GET[ topicid ]) 16!isset($_GET[ poster ])){ 17 exit; 18 } $my_msg = $_GET[ msg ]; 21 $my_topicid = $_GET[ topicid ]; 22 $my_poster = $_GET[ poster ]; //construct SQL statement 25 $sqlstmt = "INSERT INTO messages VALUES( $my_msg, $my_topicid )"; //store message in database 28 $result = mysql_query($sqlstmt); 29 echo "Thank you $my_poster for using the message board"; 30 } function displayallmessagesfortopic(){ 33 if(!isset($_get[ topicid ])){ 34 exit; 35 } $my_topicid = $_GET[ topicid ]; $sqlstmt = "SELECT msg FROM messages WHERE topicid= $my_topicid "; 40 $result = mysql_query($sqlstmt); //display all messages 43 while($row = mysql_fetch_assoc($result)){ 44 echo "Message ". $row[ msg ]; 45 } 46 } Figure 1: Example PHP program that implements a simple message board using a MySQL database. This program is vulnerable to SQL injection and cross-site scripting attacks. Section 2.1 discusses the vulnerabilities. (For simplicity, the figure omits code that establishes a connection with the database.) posting a message, the program constructs and submits the SQL statement to store the message in the database (lines 25 and 28) and then displays a confirmation message (line 29). In the displaying mode, the program retrieves and displays messages for the given topic (lines 39, 40, and 44). This program is vulnerable to the following attacks, all of which our technique can automatically generate: SQL injection attack. Both database queries, in lines 28 and 40, are vulnerable but we discuss only the latter, which exploits the lack of input validation for topicid. Consider the following string passed as the value for input parameter topicid: 1 OR 1 = 1 This string leads to an attack because the query that the program submits to the database in line 40, SELECT msg FROM messages WHERE topicid= 1 OR 1 = 1 contains a tautology in the WHERE clause and will retrieve all messages, possibly leaking private information. To exploit the vulnerability, the attacker must create an attack vector, i.e., the full set of inputs that make the program follow the exact path to the vulnerable mysql query call and execute the attack query. In our example, the attack vector must contain at least parameters mode and topicid set to appropriate values. For example: mode display OR 1 = 1 First-order XSS attack. This attack exploits the lack of validation of the input parameter poster. After storing a message, the program displays a confirmation note (line 29) using the local variable my poster, whose value is derived directly from the input parameter poster. Here is an attack vector that, when executed, opens a popup window on the user s computer: msg Hello poster Villain<script>alert("XSS")</script> This particular popup is innocuous; however, it demonstrates the attacker s ability to execute script code in the victim s browser (with access to the victim s session data and permissions). A real attack might, for example, send the victim s browser credentials to the attacker. Second-order XSS attack. This attack exploits the lack of SQL validation of parameter msg when storing messages in the database (line 25) and the lack of HTML validation when displaying messages (line 44). The attacker can use the following attack vector to store the malicious script in the application s database. msg Hello<script>alert("XSS")</script> poster Villain Now every user whose browser displays messages in topic 1 gets an unwanted popup. For example, executing the following innocuous input results in an attack: mode display 3 Technique Our attack-creation technique generates a set of concrete inputs, executes the program under test with each input, and dynamically observes whether data flows from an input to a sensitive sink (e.g., a function such as mysql query or echo), including any data-flows that pass through a database. If an input reaches a sensitive sink, our technique modifies the input by using a library of attack patterns, in an attempt to pass malicious data through the program. This section first shows the four components of our technique (Section 3.1) and then describes the algorithms for au-
4 Database state PHP Program Input Generator inputs MySQL Executor/Taint Propagator Ardilla Concrete+Symbolic Database parameters: program P, database state db result : SQLI or first-order XSS attack vectors 1 attacks ; 2 while not timeexpired() do 3 input generatenewinput(p); 4 taints, db exec&propagatetaints(p, input, db); 5 attacks attacks gen&checkattacks(taints, P, input); 6 return attacks; Figure 3: Algorithm for creating SQLI and first-order XSS attacks. Section 3.2 describes the algorithm. taint sets Attack Generator/Checker Attack vectors Figure 2: The architecture of ARDILLA. The inputs to ARDILLA are the PHP program and its associated MySQL database. The output is a set of attack vectors for the program, each of which is a complete input that exposes a security vulnerability. tomatically generating first-order (Section 3.2) and secondorder (Section 3.3) attacks. 3.1 Technique Components Figure 2 shows the architecture of our technique and of the ARDILLA tool that we created as an implementation of the technique for PHP. Here, we briefly describe its four components as an aid in understanding the algorithms. Section 4 describes ARDILLA and the four components in detail. The Input Generator creates a set of inputs for the program under test, aiming to cover many control-flow paths. The Executor/Taint Propagator runs the program on each input produced by the input generator and tracks which parts (parameters) of the input flow into sensitive sinks. For each sensitive sink, the executor outputs a set of input parameters whose values flow into the sink (called a taint set). The Attack Generator/Checker takes a list of taint sets (one for each sensitive sink), creates candidate attacks by modifying the inputs in the taint sets using a library of SQLI and XSS attack patterns, and runs the program on the candidate attacks to determine (check) which are real attacks. The Concrete+Symbolic Database is a relational database engine that can execute SQL statements both concretely and symbolically. Our technique uses this component to track the flow of tainted data through the database, which is critical for accurate detection of second-order XSS attacks. 3.2 First-order Attacks Figure 3 shows the algorithm for generating SQLI and first-order XSS attacks (both called first-order because they do not involve storing malicious inputs in the database). The algorithms for creating SQLI and first-order XSS attacks are identical except for the sensitive sinks (mysql query for SQLI, echo and print for XSS) and certain details in the attack generator/checker. The algorithm takes the program P under test and its associated database db populated with the proper tables and initial data (usually done via an installation script or taken from an existing installation). Until a time limit expires, the algorithm generates new concrete inputs (line 3), runs the program on each input and collects taint sets (line 4), and then creates attack vectors (line 5). Example. Here is how our technique generates the firstorder XSS attack presented in Section 2.1: First, new inputs are successively generated and the program executes on each input (and propagates taints) until some input allows the program to reach line 29 in the code in Figure 1, which contains the sensitive sink echo. An example of such an input I is: msg 1 poster 1 (Even though only the value of mode determines whether execution reaches line 29, all parameters are required to be set; otherwise the program rejects the input in line 17. Our input generator picks 1 as the default don t care value.) Second, the executor/taint propagator runs the program on I and creates taint sets for sensitive sinks. In the example, the executor marks all input parameters as tainted and determines that the value of the parameter poster flows into the local variable my poster, which flows into the sensitive sink echo in line 29: $my poster = $ GET[ poster ];... echo "Thank you $my poster for using the message board"; Thus, the taint set of this echo call contains (only) the input parameter poster. Third, the attack generator mutates the input I by replacing the value of all parameters in the taint set (here only poster) with XSS attack patterns. An example pattern is
5 parameters: program P, database state db result : second-order XSS attack vectors 1 inputs ; 2 attacks ; 3 db sym makesymboliccopy(db); 4 while not timeexpired() do 5 inputs inputs generatenewinput(p); 6 input 1 pickinput(inputs); 7 input 2 pickinput(inputs); 8 taints 1, db sym exec&propagatetaints(p, input 1, db sym ); 9 taints 2, db sym exec&propagatetaints(p, input 2, db sym); 10 attacks attacks gen&checkattacks(taints 2, P, input 1, input 2 ); 11 return attacks; Figure 4: Algorithm for creating second-order XSS attacks. Section 3.3 describes the algorithm. <script>alert("xss")</script>. Picking this pattern alters input I into I : msg 1 poster <script>alert("xss")</script> Fourth, the attack checker runs the program on I and determines that I is a real attack. Finally, the algorithm outputs I as an attack vector for the first-order XSS vulnerability in line 29 of Figure Second-order Attacks Figure 4 shows the algorithm for generating secondorder XSS attacks, which differs from the first-order algorithm by using a concrete+symbolic database and by running the program on two inputs during each iteration. The first input represents one provided by an attacker, which contains malicious values. The second input represents one provided by a victim, which does not contain malicious values. The algorithm tracks the flow of data from the attacker s input, through the database, and to a sensitive sink in the execution on the victim s innocuous input. The algorithm takes the program P under test and a database db. In the first step (line 3), the algorithm makes a symbolic copy of the concrete database, creating a concrete+symbolic database. Then, until a time limit expires, the algorithm generates new concrete inputs and attempts to create attack vectors by modifying the inputs. The algorithm maintains a set of inputs generated so far (in the inputs variable), from which, in each iteration, the algorithm picks two inputs (lines 6 and 7). Then, the algorithm executes the two inputs in sequence (lines 8 and 9) using the concrete+symbolic database. The first execution (simulating the attacker) sets the state of the database (db sym) that the second execution (simulating the victim) uses. Finally, the attack generator/checker (line 10) creates second-order XSS attack scenarios (i.e., input pairs). To favor execution paths that lead to second-order XSS attacks, on line 6 our implementation picks an input that executes a database write, and on line 7 picks an input that executes a database read on the same table. Example. Here is how our technique generates the secondorder XSS attack introduced in Section 2.1: First, the input generator creates inputs and picks the following pair I 1 : msg 1 poster 1 and I 2 : mode display Second, the executor/taint propagator runs the program on I 1, using the concrete+symbolic database. During this execution, the program stores the value 1 of the input parameter msg (together with the taint set that contains the parameter msg itself) in the database (line 25 of Figure 1). Third, the executor/taint propagator runs the program on I 2, using the concrete+symbolic database. During this execution, the program retrieves the value 1 from the database (together with the value s stored taint set that contains msg) and outputs the value via the echo in line 44. echo is a sensitive sink, and its taint set contains the parameter msg from I 1. Thus, the algorithm has dynamically tracked the taint from msg to the local variable my msg (line 20), into the database (line 28), back out of the database (line 40), into the $row array (line 43), and finally as a parameter to echo (line 44), across two executions. Fourth, the attack generator uses the library of attack patterns to alter msg in I 1 to create an attack candidate input I 1 : msg <script>alert("xss")</script> poster 1 Fifth, the attack checker runs the program, in sequence, on I 1 and I 2 (note that I 2 remains unchanged), and determines that this sequence of inputs is an attack scenario. Finally, the algorithm outputs the pair I 1, I 2 as a second-order XSS attack scenario that exploits the vulnerability in line 44 of Figure 1. 4 The ARDILLA Tool As an implementation of our technique, we created ARDILLA, an automated tool that generates concrete attack vectors for Web applications written in PHP. The user of ARDILLA needs to specify the type of attack (SQLI, firstorder XSS, or second-order XSS), the PHP program to analyze, and the initial database state. The outputs of ARDILLA are attack vectors. This section describes ARDILLA s implementation of each component of the technique described in Section Dynamic Input Generator The dynamic input generator creates inputs for the PHP program under test. Inputs for PHP Web applications are
6 Web server requests: their parameters are mappings from keys (strings) to values (strings and integers) in associative arrays such as $ GET[] and $ POST[]. ARDILLA uses the input-generation component from Apollo [1], but ARDILLA could potentially use any generator for PHP applications such as the one described by Wassermann et al. [30]. The Apollo input generator is based on systematic dynamic test-input generation that combines concrete and symbolic execution [11]. Here, we briefly describe this technique, which ARDILLA uses as a black box. For each program input (starting with an arbitrary well-formed concrete input, and then using subsequentlygenerated ones), the input generator executes the program concretely and also collects symbolic constraints for each runtime value. These constraints describe an input that follows a given control-flow path through the program. Negating the symbolic constraint at a branch-point (e.g., an if statement) and discarding subsequent constraints gives a set of constraints for a different path through the program. The input generator then attempts to solve those constraints to create a concrete input that executes the new path. The input generator repeats this process for each branch-point in an execution, possibly generating many new inputs from each executed one. 4.2 Executor and Taint Propagator The Executor and Taint Propagator runs the program under test on each input and tracks the dynamic data-flow of input parameters throughout the execution. For each sensitive sink, the executor outputs the set of input parameters, the taint set, whose values flow into the sink. ARDILLA s taint propagation is unique in that it can track the flow of tainted data through the database, by using a concrete+symbolic database (Section 4.4). Dynamic taint propagation in ARDILLA can be characterized by the following five components. 1. Taint sources give rise to tainted data during execution of the PHP program under test. Taint sources are inputs (e.g., $ GET and $ POST). ARDILLA assigns a unique taint to each value read from an input parameter, identified by the value s origin. For example, ARDILLA assigns taint msg to a value retrieved from $ GET[ msg ]. 2. Taint sets describe how each runtime value is influenced by taint sources, and can contain any number of elements. For example, taint set {msg, poster} may correspond to a runtime value derived from input parameters msg and poster (e.g., via string concatenation). 3. Taint propagation specifies how runtime values acquire and lose taint. ARDILLA propagates taint sets unchanged across assignments and procedure calls in application code. At a call to a built-in PHP function (e.g., chop, which removes trailing whitespace from a string) that is not a taint filter (see next component), ARDILLA constructs a taint set for the return value that is a union of taint sets for function argument values. ARDILLA also constructs taint sets for string values created from concatenation by taking a union of taint sets for component strings. At a call to a database function (e.g., mysql query), ARDILLA stores or retrieves taint for the data values. (Section 4.4 describes the interaction of taint propagation with the database.) 4. Taint filters are built-in PHP functions that are known to sanitize inputs (i.e., modify the inputs to make them harmless for XSS or SQLI attacks). For example, htmlentities converts characters to HTML entities (e.g., < to <) and makes the output safe from XSS attacks. At a call to a taint filter function, ARDILLA creates an empty taint set for the return value. A user of ARDILLA can optionally specify a list of taint filters. 5. Sensitive taint sinks are built-in PHP functions that are exploitable in XSS and SQLI attacks: for example, echo and print for XSS and mysql query for SQLI. When reaching a call to a sensitive sink, ARDILLA records the taint sets of the argument, indicating a data-flow from the inputs to the sink, and thus a possibility of an attack. ARDILLA s Executor and Taint Propagator is implemented by modifying the Zend PHP interpreter 1 to perform regular program execution and to simultaneously propagate taints from inputs to other runtime values. 4.3 Attack Generator and Checker The attack generator creates candidate attack vectors that are variants of the given input. The attack checker determines whether a candidate is an attack, by comparing the candidate s execution to that of the original input. The attack generator and checker ensure that ARDILLA creates concrete exploits, which are are much easier for programmers to fix than reports of abstract traces [4, 8]. ARDILLA generates candidate attack vectors and checks their validity. Not every flow of tainted data to a sensitive sink indicates a vulnerability. The data may flow through routines that check or sanitize it. ARDILLA generates candidate attack vectors by mutating innocuous inputs that demonstrate the data flow to sensitive sinks. ARDILLA checks the validity of the candidate attacks by comparing innocuous and candidate-attack executions Attack Generator The attack generator starts with an input for which there is dataflow from a parameter to a sensitive sink. For each parameter whose value flows into the sink (member of the taint set), the generator creates new inputs that differ only for that parameter. The generator systematically replaces the value of that parameter by values taken from an attack pattern library a set of values that may result in an attack if supplied to a vulnerable input parameter. ARDILLA uses attack patterns developed by security professionals. ARDILLA s SQLI attack pattern library contains 6 1
7 patterns distilled from several lists 2,3 ARDILLA s XSS attack pattern library 4 contains 113 XSS attack patterns, including many filter-evading patterns (that use various character encodings, or that avoid specific strings in patterns). ARDILLA s goal is creating concrete exploits, not verifying the absence of vulnerabilities. Moreover, ARDILLA checks every candidate attack input. Therefore, ARDILLA is useful even given the pattern library s inevitable incompleteness (missing attack patterns), and potential unsoundness (patterns that do not lead to attacks). The attack library needs to be integrated in ARDILLA to be effective; the library alone is not enough to construct attacks. ARDILLA constructs each attack input so that the execution reaches the vulnerable call site (using random values is ineffective [1]). In particular, the constructed attack inputs contain many key-value pairs and strings from the attack library constitute only 1 value in each attack input. A string constraint solver is a potential replacement for the attack library. Given the string at the vulnerable call site, the solver could find a string that transforms the innocuous input into a malicious input. The solver needs to define malicious formally, e.g., SQL query with a tautology in the WHERE clause. Fu et al. used a custom-made solver in a static analysis [9]. We have built a prototype string-constraint solver, HAMPI [16], and preliminary results indicate that creating concrete attacks can be successfully reduced to generating and solving string constraints Attack Checker In SQLI and XSS attacks, the PHP program interacts with another component (a database or a Web browser) in a way the programmer did not intend. The essence of an SQLI attack is a change in the structure of the SQL statement that preserves its syntactic validity (otherwise, the database rejects the statement and the attack attempt is unsuccessful) [27]. The essence of an XSS attack is the introduction of additional script-inducing constructs (e.g., <script> tags) into a dynamically-generated HTML page [29]. ARDILLA detects attacks by looking for differences in the way the program behaves when run on two inputs: one innocuous and the other potentially malicious. We assume that the input generator creates innocuous (non-attack) inputs, since the input parameters values are simple constants such as 1 or literals from the program text. Therefore, the innocuous input represents how the program is intended to interact with a component (database or browser). The attack generator creates the potentially malicious input. 2 mysql-injection-cheat-sheet, ARDILLA s list omits attacks that transform one query into multiple queries, because the PHP mysql query function only allows one query to be executed per call. 4 msg topicid msg s topicid s Test message 1 Hello 2 {msg} {topicid} Figure 5: Example state of the concrete+symbolic database table messages used by the PHP program of Figure 1. Each concrete column (left-most two columns) has a symbolic counterpart (right-most two columns) that contains taint sets. The values represent empty taint sets. The checker runs the program on the two inputs and compares the executions. Running the program on the attack candidate input avoids two potential sources of false warnings: (i) input sanitizing the program may sanitize (i.e., modify to make harmless) the input before passing it into a sensitive sink. ARDILLA does not require the user to specify a list of sanitizing routines. (ii) input filtering the program may reject inputs that satisfy a malicious-input pattern (blacklisting), or else fail to satisfy an innocuous-input pattern (whitelisting). However, the taint sets are unaffected by control-flow (taint sets only reflect data-flow) and cannot capture input filtering. The SQLI attack checker compares database statements (e.g., SELECT, INSERT) issued by the PHP program executed separately on the two inputs. The checker compares the first pair of corresponding statements, then the second, etc. The checker signals an attack if the statements in any pair are both valid SQL but have different syntactic structure (i.e., parse tree). The XSS attack checker signals an attack if the HTML page produced from the execution of a candidate attack input (or sequence of inputs, for second-order attacks) contains additional script-inducing constructs. 4.4 Concrete+Symbolic Database The concrete+symbolic database stores both concrete and symbolic values for each data record. In a PHP Web application, the database is shared state that enables the exchange of data between users. The concrete+symbolic database tracks the flow of user-provided data between different runs of the PHP program and is critical in creating second-order XSS attacks. The concrete+symbolic database is implemented as a duplicate of the concrete database, with each table having additional columns that store symbolic data. ARDILLA uses these columns to store taint sets, but it is also possible to store symbolic expressions there. Figure 5 shows an example database state during the execution of the program in Figure 1. Assume the database was pre-populated with a test message in topic 1, so the taint sets for fields in the first row are empty. When the user posts a message Hello in topic 2 (line 28), the taint sets from the respective input parameters are stored along with their concrete values in the second row. Later, when the user fetches
8 data from that row (line 43), the taint sets are also fetched and propagated to the assigned variables. ARDILLA dynamically rewrites each SQL statement in the PHP program to account for the new columns either updating or reading taint sets, as appropriate. Our current implementation handles a subset of SQL, rewriting their strings before passing them into mysql query: CREATE TABLE, INSERT, UPDATE, and (non-nested) SELECT. (Note that the DELETE statement and WHERE condition do not need to be rewritten MySQL can locate the relevant rows using the concrete values.) CREATE TABLE creates a new table. ARDILLA rewrites the statement to add a duplicate for each column (e.g., the two right-most columns in Figure 5) to use for storing taint sets. INSERT adds new rows to tables. ARDILLA rewrites the statement to store taint sets in the duplicate columns. For example, consider the following PHP string representing an SQL statement (PHP automatically performs the string concatenation): INSERT INTO messages VALUES( $ GET[ msg ], $ GET[ topicid ] ) Consider an execution in which parameters msg and topicid have concrete values Hello and 2 and have oneelement taint sets that contain only the parameters themselves. ARDILLA dynamically rewrites the statement as follows: INSERT INTO messages VALUES( Hello, 2, {msg}, {topicid} ) UPDATE modifies values in tables. For example, for: UPDATE messages SET msg= $ GET[ msg ] WHERE topicid= $ GET[ topicid ] ARDILLA s dynamic rewriting for UPDATE is similar to that for INSERT (the WHERE condition is unchanged): UPDATE messages SET msg= Hi, msg s= {msg} WHERE topicid= 3 SELECT finds and returns table cells. ARDILLA rewrites the statement to include the duplicate (symbolic) column names in the selection. Thereafter, ARDILLA uses the value retrieved from the duplicate column as the taint set for the concrete value retrieved from the original column. For example, consider the concrete statement executed in line 39 of the program in Figure 1 (given the example state of the concrete+symbolic database in Figure 5). SELECT msg FROM messages WHERE topicid = 2 ARDILLA rewrites the statement to: SELECT msg, msg s FROM messages WHERE topicid = 2 The result of executing this rewritten statement on the table in Figure 5 is a 1-row table with concrete string Hello and associated taint set {msg}, in columns msg and msg s. ARDILLA augments functions such as mysql fetch assoc to assign concrete values to the proper variables (e.g., row in line 43) and to simultaneously propagate their taint sets. 5 Evaluation We evaluated ARDILLA on five open-source programs downloaded from schoolmate (tool for school administration, 8181 lines of code, or LOC), webchess (online chess game, 4722 LOC), faqforge (tool for creating and managing documents, 1712 LOC), EVE 1.0 (player activity tracker for an online game, 915 LOC), and geccbblite 0.1 (a simple bulletin board, 326 LOC). We used the latest available versions as of 5 September We performed the following procedure for each subject program. First, we ran the program s installation script to create the necessary database tables. Second, we prepopulated the database with representative data (e.g., defaults where available). Third, we ran ARDILLA with a 30- minute time limit in each of three modes: SQLI, first-order XSS, and second-order XSS. The time limit includes all experimental tasks, i.e., input generation, program execution and taint propagation, and attack generation and attack checking. When necessary, we provided the input generator with (non-administrator) username and password combinations. Doing so poses no methodological problems because an attacker can use a legitimate account to launch an attack. Fourth, we manually examined attack vectors reported by ARDILLA to determine if they reveal true security vulnerabilities. We did not know any SQLI or XSS vulnerabilities in the subject programs before performing the experiments. (Thanks to previous studies [28, 29], we were aware of the presence of first-order XSS and SQLI vulnerabilities in geccbblite and EVE.) We ran ARDILLA in two modes for checking validity of XSS attacks: lenient and strict. (The SQLI checker has only one mode.) In the lenient mode, the XSS checker reports a vulnerability when the outputs differ in script-inducing elements or HTML elements like href. In the strict mode, the XSS checker only reports a vulnerability when the outputs differ in script-inducing elements. 5.1 Measurements Number of sensitive sinks (all) is the statically computed number of echo/print (for XSS) or mysql query statements (for SQLI), whose parameter is not a constant string. Number of reached sinks (reach) on all generated inputs is an indication of coverage achieved by the input generator. This measure is suitable for ARDILLA, because ARDILLA looks for attacks on sensitive sinks. Number of tainted sinks (taint) is the number of sensitive sinks reached with non-empty taint sets during execution. Each such occurrence potentially exposes a vulnerability, which ARDILLA uses the attack generator and checker to test. Number of verified vulnerabilities (Vuln): We count at most one vulnerability per sensitive sink, since a single-line code-fix would eliminate all attacks on the sink. If a single
9 sensitive sinks lenient strict program mode all reach taint Vuln F Vuln F SQLI schoolmate XSS XSS SQLI webchess XSS XSS SQLI faqforge XSS XSS SQLI EVE XSS XSS SQLI geccbblite XSS XSS SQLI Total XSS XSS Figure 6: Results of running ARDILLA to create SQLI, XSS1 (first-order XSS), and XSS2 (second-order XSS) attacks. The lenient and strict columns refer to ARDILLA modes (Section 5). Section 5.1 describes the remaining columns (Vuln columns in bold list the discovered real vulnerabilities). attack vector attacks multiple sensitive sinks, then we examine and count each vulnerability separately. This number does not include false positives. Number of false positives (F): We manually inspected each ARDILLA report and determined whether it really constituted an attack (i.e., corruption or unintended disclosure of data for SQL, and unintended HTML structure for XSS). For second-order XSS, we checked that the attacker s malicious input can result in an unintended Web page for the victim. 5.2 Results ARDILLA found 23 SQLI, 33 first-order XSS, and 12 second-order XSS vulnerabilities in the subject programs (see Figure 6). The attacks that ARDILLA found, as well as the attack patterns we used, are available at csail.mit.edu/ardilla. We examined two of the three instances in which ARDILLA found no vulnerabilities. In geccbblite, we manually determined that there are no first-order XSS vulnerabilities. In faqforge, we manually determined that each database write requires administrator access, so there are no second-order XSS vulnerabilities. (We did not manually inspect webchess for second-order XSS attacks, due to the program s size and our unfamiliarity with the code.) We examined all 23 SQLI reports issued by ARDILLA and found no false positives. All attacks involved disrupting the SQL WHERE clause. In 4 cases, attacks result in data corruption; in 19 cases, attacks result in information leaking, sometimes as serious as bypassing login authentication. We examined all 69 ( ) unique XSS reports issued by ARDILLA. We found 24 false positives in the lenient mode for first-order XSS (42% false-positive rate), and 0% percent false-positive rate for all other cases: strict firstorder XSS, lenient and strict second-order XSS. The attack generator and checker show which potential vulnerabilities are exploitable. We examined cases of tainted sinks for which ARDILLA did not create attacks. The most common reason is that the same think may not be reachable with a malicious input because of control-flow filtering that dynamic tainting does not capture. Such reachability is very hard to determine manually from program text. ARDILLA s concrete attacks directly demonstrate the vulnerability and how to exploit it. Our prototype string solver [16] did not discover more attacks, which indicates that the attack pattern library was sufficiently complete for our subjects. Example created SQLI attack. In webchess, ARDILLA found a vulnerability in mainmenu.php that allows an attacker to retrieve information about all players without entering a password. The application constructs the vulnerable statement directly from user input: "SELECT * FROM players WHERE nick = ". $ POST[ txtnick ]. " AND password = ". $ POST[ pwdpassword ]. " " The attack vector contains the following two crucial parameters (others omitted for brevity) ToDo NewUser txtnick foo or 1=1 -- which causes execution to construct the following malicious SQL statement which bypasses authentication (-- starts an SQL comment): SELECT * FROM players WHERE nick = foo or 1=1 -- AND password = Comparison to previous studies. Two of our subject programs were previously analyzed for vulnerabilities. In geccbblite, a previous study [29] found 1 first-order XSS vulnerabilities, and 7 second-order XSS vulnerabilities (possibly including false positives). However, ARDILLA and our manual examination of geccbblite found no first-order XSS vulnerabilities. In EVE, another study [28] found 4 SQLI vulnerabilities. The result data from neither study are available so we cannot directly compare the findings. Comparison to black-box fuzzing. We compared ARDILLA s ability to find first-order XSS attacks to that of a black-box fuzzer for finding XSS attacks: Burp Intruder 5 (listed in the 10 most popular Web-vulnerability scanners 6 ). We configured the fuzzer according to its documentation. The fuzzer requires manual setting up of HTTP request patterns to send to the Web application (and requires manual indication of variables to mutate). We ran the fuzzer using the same attack pattern library that ARDILLA uses, and on the same subject programs. (We have not been able to successfully configure webchess to run with the fuzzer.) We
10 ran the fuzzer until completion (up to 8 hours). The fuzzer found 1 first-order XSS vulnerability in schoolmate, 3 in faqforge, 0 in EVE, and 0 in geccbblite. All 4 vulnerabilities reported by the fuzzer were also discovered by ARDILLA. Limitations. ARDILLA can only generate attacks for a sensitive sink if the input generator creates an input that reaches the sink. However, effective input generation for PHP is challenging [1,21,30], complicated by its dynamic language features and execution model (running a PHP program often generates an HTML page with forms and links that require user interaction to execute code in additional files). In particular, the generator that ARDILLA uses can create inputs only for one PHP script at a time and cannot simulate sessions (i.e., user application interactions that involve multiple pages), which is a serious hindrance to achieving high coverage in Web applications; line coverage averaged less than 50%. In fact, only on one application (webchess) did the input generator run until the full 30-minute time-limit in all other cases, the generator finished within 2 minutes because it could not manage to cover more code. We also attempted to run the generator on a larger application, the phpbb Web-forum creator (35 KLOC), but it achieved even lower coverage (14%). ARDILLA uses the input generator as a black box and any improvement in input generation is likely to improve ARDILLA s effectiveness. 6 Related Work We describe previous approaches to securing Web applications from input-based attacks. Defensive coding relies on special libraries to create safe SQL queries [6, 22]. Defensive coding can, in principle, prevent all SQLI attacks. The technique is suitable for new code. However, it requires rewriting existing code, while our technique requires no change to the programming language, the libraries, or the application. Static approaches can, in principle, prove the absence of vulnerabilities [12, 19, 28, 29, 31]. In practice, however, analysis imprecision causes false warnings. Additionally, static techniques do not create concrete attack vectors. In contrast, our technique does not introduce such imprecision, and it creates attack vectors. Dynamic monitoring aims to prevent SQLI attacks by tracking user-provided values [13, 24, 25, 27] during operation of a deployed application. However, dynamic monitoring does not help to remove errors before software deployment, and requires either modifying the application, or running a modified server. For example, CANDID [3] modifies the application source and requires changing the runtime system, with performance overhead of up to 40% on the production application. Information-flow control restricts the flow of information between pieces of software, either statically [26] or dynamically [17, 32]. Information-flow control enforces confidentiality and integrity policies on the data and prevents attacks that use inappropriate information flows. However, some SQLI and XSS attacks abuse legitimate information flows; the SQL queries or the JavaScript can be dynamically generated and can depend on legal user input. Informationflow control requires modifying the application and either the operating system and the libraries, or the programming language. System-level techniques may have runtime performance overhead up to 40% [17]. Static and dynamic approaches can be combined [14,15]. Lam et al. [18] combine static analysis, model checking, and dynamic monitoring. QED [20] combines static analysis and model checking to automatically create SQLI and first-order XSS attacks on Java applications. In contrast to ARDILLA, QED (i) does not target second-order XSS, and (ii) requires programmers to use a custom specification language to describe attacks. Saner [2] combines static and dynamic analyses to find potential XSS and SQLI vulnerabilities. Saner focuses on the sanitization process and abstracts away other details of the application, i.e., Saner creates attack vectors only for extracted, possibly infeasible, paths from the static dependency graph (Saner does dynamically validate the exploitability of string-manipulating code from those paths, but ignores control flow). Saner also reports a vulnerability whenever a path from source to sink contains no custom sanitation. The path, however, may be infeasible or not exploitable. Saner tests each source-to-sink path independently and may miss attacks in which output is constructed from multiple sinks. To detect attacks, Saner simply searches for specific strings in the output, whereas ARDILLA compares the structure of HTML or SQL between innocuous and attack runs. Apollo [1] generates test inputs for PHP, checks the execution for crashes, and validates the output s conformance to HTML standards. The goal of ARDILLA is different: to find security vulnerabilities. ARDILLA uses the test-input generator subcomponent of Apollo as a black box. ARDILLA s taint propagation implementation is partially based on that of Apollo, but we enhanced it significantly by adding propagation across function calls, taint filters, taint sinks, and tracing taint across database calls. Emmi et al. [7] model a database using symbolic constraints and provide a custom string solver to create database states that help exercise various execution paths in the Web application. Our work differs in objective (finding security vulnerabilities vs. improving test coverage) and in the targeted language (PHP vs. Java). Wassermann et al. s tool [30] executes a PHP application on a concrete input and collects symbolic constraints. Upon reaching an SQL statement, the tool attempts to create an input that exposes an SQL injection vulnerability, by using a string analysis [23]. The tool has re-discovered 3 previously known vulnerabilities. The most important differences between Wassermann s work and ours are: (i) Their tool has not discovered any previously unknown vulnerabilities, and
11 requires a precise indication of an attack point. Our tool has discovered 68 previously unknown vulnerabilities and requires no indication of vulnerable points. (ii) Their technique focuses on SQLI, while ours targets both SQLI and XSS. (iii) Their tool performs source-code instrumentation and backward-slice computation by re-executing and instrumenting additional code. Our tool works on unchanged application code. (iv) Their tool requires manual loading of pages and supplying of inputs to the page, while ours is fully automatic. 7 Conclusion We have presented a technique for creating SQL injection and cross-site scripting (XSS) attacks in Web applications and an automated tool, ARDILLA, that implements the technique for PHP. Our technique is based on input generation, dynamic taint propagation, and input mutation to find a variant of the input that exposes a vulnerability. Using a novel concrete+symbolic database to store taint, ARDILLA can effectively and accurately find the most damaging type of input-based Web application attack: stored (second-order) XSS. A novel attack checker that compares the output from running on an innocuous input and on a candidate attack vector allows ARDILLA to detect vulnerabilities with high accuracy. In our experiments, ARDILLA found 68 attack vectors in five programs, each exposing a different vulnerability, with few false positives. Acknowledgements Igor Peshansky gave helpful suggestions about the symbolic database implementation. Shay Artzi and Julian Dolby helped with the PHP interpreter. Vijay Ganesh, Danny Dig, Derek Rayside, Jeff Perkins, Carlos Pacheco, Ethan Heilman, David Molnar, Andrzej Wasylkowski, and the ISSTA reviewers gave valuable comments on the paper. References [1] S. Artzi, A. Kieżun, J. Dolby, F. Tip, D. Dig, A. Paradkar, and M. Ernst. Finding bugs in dynamic Web applications. In ISSTA, [2] D. Balzarotti, M. Cova, V. Felmetsger, N. Jovanovic, E. Kirda, C. Kruegel, and G. Vigna. Saner: Composing static and dynamic analysis to validate sanitization in Web applications. In S&P, [3] S. Bandhakavi, P. Bisht, P. Madhusudan, and V. N. Venkatakrishnan. CANDID: preventing SQL injection attacks using dynamic candidate evaluations. In CCS, [4] N. Bettenburg, S. Just, A. Schröter, C. Weiss, R. Premraj, and T. Zimmermann. What makes a good bug report? In FSE, [5] Cenzic. Application security trends report Q [6] W. Cook and S. Rai. Safe query objects: statically typed objects as remotely executable queries. In ICSE, [7] M. Emmi, R. Majumdar, and K. Sen. Dynamic test input generation for database applications. In ISSTA, [8] D. Engler and M. Musuvathi. Static analysis versus software model checking for bug finding. In VMCAI, [9] X. Fu, X. Lu, B. Peltsverger, S. Chen, K. Qian, and L. Tao. A static analysis framework for detecting SQL injection vulnerabilities. In COMPSAC, [10] P. Godefroid. The soundness of bugs is what matters (position statement). In BUGS, [11] P. Godefroid, N. Klarlund, and K. Sen. DART: Directed automated random testing. In PLDI, [12] C. Gould, Z. Su, and P. Devanbu. Static checking of dynamically generated queries in database applications. In ICSE, [13] W. Halfond, A. Orso, and P. Manolios. WASP: Protecting Web applications using positive tainting and syntax-aware evaluation. IEEE TSE, 34(1):65, [14] W. G. Halfond and A. Orso. AMNESIA: Analysis and Monitoring for NEutralizing SQL-Injection Attacks. In ASE, [15] Y.-W. Huang, F. Yu, C. Hang, C.-H. Tsai, D.-T. Lee, and S.- Y. Kuo. Securing Web application code by static analysis and runtime protection. In WWW, [16] A. Kieżun, V. Ganesh, P. J. Guo, P. Hooimeijer, and M. D. Ernst. Hampi: A solver for string constraints. Technical Report MIT-CSAIL-TR , MIT, [17] M. Krohn, M. Brodsky, M. Kaashoek, and R. Morris. Information flow control for standard OS abstractions. In SOSP, [18] M. Lam, M. Martin, B. Livshits, and J. Whaley. Securing Web applications with static and dynamic information flow tracking. In PEPM, [19] B. Livshits and M. Lam. Finding security vulnerabilities in Java applications with static analysis. In USENIX Security, [20] M. Martin and M. Lam. Automatic generation of XSS and SQL injection attacks with goal-directed model checking. In USENIX Security, [21] S. McAllister, E. Kirda, and C. Krügel. Leveraging user interactions for in-depth testing of Web applications. In RAID, [22] R. McClure and I. Krüger. SQL DOM: compile time checking of dynamic SQL statements. In ICSE, [23] Y. Minamide. Static approximation of dynamically generated Web pages. In WWW, [24] J. Newsome and D. Song. Dynamic taint analysis for automatic detection, analysis, and signature generation of exploits on commodity software. In NDSS, [25] T. Pietraszek and C. V. Berghe. Defending against injection attacks through context-sensitive string evaluation. In RAID, [26] A. Sabelfeld and A. Myers. Language-based informationflow security. Selected Areas in Communications, [27] Z. Su and G. Wassermann. The essence of command injection attacks in Web applications. In POPL, [28] G. Wassermann and Z. Su. Sound and precise analysis of Web applications for injection vulnerabilities. In PLDI, [29] G. Wassermann and Z. Su. Static detection of cross-site scripting vulnerabilities. In ICSE, [30] G. Wassermann, D. Yu, A. Chander, D. Dhurjati, H. Inamura, and Z. Su. Dynamic test input generation for Web applications. In ISSTA, [31] Y. Xie and A. Aiken. Static detection of security vulnerabilities in scripting languages. In USENIX-SS, [32] N. Zeldovich, S. Boyd-Wickizer, and D. Mazières. Securing distributed systems with information flow control. In NSDI, 2008.
Automatic Creation of SQL Injection and Cross-Site Scripting Attacks
Automatic Creation of SQL Injection and Cross-Site Scripting Attacks Adam Kieżun MIT [email protected] Philip J. Guo Stanford University [email protected] Karthick Jayaraman Syracuse University [email protected]
How I hacked PacketStorm (1988-2000)
Outline Recap Secure Programming Lecture 8++: SQL Injection David Aspinall, Informatics @ Edinburgh 13th February 2014 Overview Some past attacks Reminder: basics Classification Injection route and motive
An Effective Approach for Detecting and Preventing Sqlinjection Attacks
An Effective Approach for Detecting and Preventing Sqlinjection Attacks M. Roslinmary 1, S. Sivasakthi 2, A. Shenbaga Bharatha Priya 3 1, 2, 3 PG scholar, Department of IT, Dr. Sivanthi Aditanar College
A Multi agent Scanner to Detect Stored XSS Vulnerabilities
A Multi agent Scanner to Detect Stored XSS Vulnerabilities E. Galán, A. Alcaide, A. Orfila, J. Blasco University Carlos III of Madrid, UC3M Leganés, Spain {edgalan,aalcaide,adiaz,jbalis}@inf.uc3m.es Abstract
RIPS - A static source code analyser for vulnerabilities in PHP scripts
RIPS - A static source code analyser for vulnerabilities in PHP scripts Johannes Dahse 1 Introduction The amount of websites have increased rapidly during the last years. While websites consisted mostly
Saner: Composing Static and Dynamic Analysis to Validate Sanitization in Web Applications
Saner: Composing Static and Dynamic Analysis to Validate Sanitization in Web Applications Davide Balzarotti, Marco Cova, Vika Felmetsger, Nenad Jovanovic, Engin Kirda, Christopher Kruegel, and Giovanni
Bayesian Classification for SQL Injection Detection
Bayesian Classification for SQL Injection Detection Brandon Skari College of Engineering and Applied Science University of Wyoming Laramie, Wyoming 82070 [email protected] April 6, 2011 Overview
Security Test s i t ng Eileen Donlon CMSC 737 Spring 2008
Security Testing Eileen Donlon CMSC 737 Spring 2008 Testing for Security Functional tests Testing that role based security functions correctly Vulnerability scanning and penetration tests Testing whether
A Novel Frame Work to Detect Malicious Attacks in Web Applications
Technology, Volume-2, Issue-1, January-March, 2014, pp. 23-28, IASTER 2014, www.iaster.com, Online:2347-5099, Print:2348-0009 A Novel Frame Work to Detect Malicious Attacks in Web Applications N. Jayakanthan
INTRUSION PROTECTION AGAINST SQL INJECTION ATTACKS USING REVERSE PROXY
INTRUSION PROTECTION AGAINST SQL INJECTION ATTACKS USING REVERSE PROXY Asst.Prof. S.N.Wandre Computer Engg. Dept. SIT,Lonavala University of Pune, [email protected] Gitanjali Dabhade Monika Ghodake Gayatri
HOD of Dept. of CSE & IT. Asst. Prof., Dept. Of CSE AIET, Lko, India. AIET, Lko, India
Volume 5, Issue 12, December 2015 ISSN: 2277 128X International Journal of Advanced Research in Computer Science and Software Engineering Research Paper Available online at: www.ijarcsse.com Investigation
Webapps Vulnerability Report
Tuesday, May 1, 2012 Webapps Vulnerability Report Introduction This report provides detailed information of every vulnerability that was found and successfully exploited by CORE Impact Professional during
Toward A Taxonomy of Techniques to Detect Cross-site Scripting and SQL Injection Vulnerabilities
NCSU CSC TR 2008-4 1 Toward A Taxonomy of Techniques to Detect Cross-site Scripting and SQL Injection Vulnerabilities Yonghee SHIN, Laurie WILLIAMS, Members, IEEE Abstract Since 2002, over half of reported
A Server and Browser-Transparent CSRF Defense for Web 2.0 Applications. Slides by Connor Schnaith
A Server and Browser-Transparent CSRF Defense for Web 2.0 Applications Slides by Connor Schnaith Cross-Site Request Forgery One-click attack, session riding Recorded since 2001 Fourth out of top 25 most
State of The Art: Automated Black Box Web Application Vulnerability Testing. Jason Bau, Elie Bursztein, Divij Gupta, John Mitchell
Stanford Computer Security Lab State of The Art: Automated Black Box Web Application Vulnerability Testing, Elie Bursztein, Divij Gupta, John Mitchell Background Web Application Vulnerability Protection
Finding Execution Faults in Dynamic Web Application
International Journal of Information and Computation Technology. ISSN 0974-2239 Volume 4, Number 5 (2014), pp. 445-452 International Research Publications House http://www. irphouse.com /ijict.htm Finding
Exploitation of Cross-Site Scripting (XSS) Vulnerability on Real World Web Applications and its Defense
Exploitation of Cross-Site Scripting (XSS) Vulnerability on Real World Web Applications and its Defense Shashank Gupta Lecturer in Department of Information Technology, Model Institute of Engineering and
Check list for web developers
Check list for web developers Requirement Yes No Remarks 1. Input Validation 1.1) Have you done input validation for all the user inputs using white listing and/or sanitization? 1.2) Does the input validation
Is Drupal secure? A high-level perspective on web vulnerabilities, Drupal s solutions, and how to maintain site security
Is Drupal secure? A high-level perspective on web vulnerabilities, Drupal s solutions, and how to maintain site security Presented 2009-05-29 by David Strauss Thinking Securely Security is a process, not
Application security testing: Protecting your application and data
E-Book Application security testing: Protecting your application and data Application security testing is critical in ensuring your data and application is safe from security attack. This ebook offers
What is Web Security? Motivation
[email protected] http://www.brucker.ch/ Information Security ETH Zürich Zürich, Switzerland Information Security Fundamentals March 23, 2004 The End Users View The Server Providers View What is Web
Client vs. Server Implementations of Mitigating XSS Security Threats on Web Applications
Journal of Basic and Applied Engineering Research pp. 50-54 Krishi Sanskriti Publications http://www.krishisanskriti.org/jbaer.html Client vs. Server Implementations of Mitigating XSS Security Threats
SQL INJECTION MONITORING SECURITY VULNERABILITIES IN WEB APPLICATIONS
SQL INJECTION MONITORING SECURITY VULNERABILITIES IN WEB APPLICATIONS Manas Kumar 1, S. Senthil kumar 2 and D. Sarvanan 3 1 M.C.A. (Final Year) Abstract Sql injection: a recently discovered application
EC-Council CAST CENTER FOR ADVANCED SECURITY TRAINING. CAST 619 Advanced SQLi Attacks and Countermeasures. Make The Difference CAST.
CENTER FOR ADVANCED SECURITY TRAINING 619 Advanced SQLi Attacks and Countermeasures Make The Difference About Center of Advanced Security Training () The rapidly evolving information security landscape
Advanced Web Security, Lab
Advanced Web Security, Lab Web Server Security: Attacking and Defending November 13, 2013 Read this earlier than one day before the lab! Note that you will not have any internet access during the lab,
SQL Injection January 23, 2013
Web-based Attack: SQL Injection SQL Injection January 23, 2013 Authored By: Stephanie Reetz, SOC Analyst Contents Introduction Introduction...1 Web applications are everywhere on the Internet. Almost Overview...2
XSS-GUARD : Precise Dynamic Prevention of Cross Site Scripting (XSS) Attacks
XSS-GUARD : Precise Dynamic Prevention of Cross Site Scripting (XSS) Attacks Prithvi Bisht (http://cs.uic.edu/~pbisht) Joint work with : V.N. Venkatakrishnan Systems and Internet Security Laboratory Department
SQL INJECTION ATTACKS By Zelinski Radu, Technical University of Moldova
SQL INJECTION ATTACKS By Zelinski Radu, Technical University of Moldova Where someone is building a Web application, often he need to use databases to store information, or to manage user accounts. And
Cross Site Scripting Prevention
Project Report CS 649 : Network Security Cross Site Scripting Prevention Under Guidance of Prof. Bernard Menezes Submitted By Neelamadhav (09305045) Raju Chinthala (09305056) Kiran Akipogu (09305074) Vijaya
WEB ATTACKS AND COUNTERMEASURES
WEB ATTACKS AND COUNTERMEASURES February 2008 The Government of the Hong Kong Special Administrative Region The contents of this document remain the property of, and may not be reproduced in whole or in
EVALUATING COMMERCIAL WEB APPLICATION SECURITY. By Aaron Parke
EVALUATING COMMERCIAL WEB APPLICATION SECURITY By Aaron Parke Outline Project background What and why? Targeted sites Testing process Burp s findings Technical talk My findings and thoughts Questions Project
A Novel Approach to detect SQL injection in web applications
A Novel Approach to detect SQL injection in web applications Kuldeep Kumar 1, Dr. Debasish Jena 2 and Ravi Kumar 3 1&2 IIIT Bhubaneswar, Bhubaneswar-751003 3 InstaSafe Technologies Pvt. Ltd, Bangalore-560076
CHAPTER 5 INTELLIGENT TECHNIQUES TO PREVENT SQL INJECTION ATTACKS
66 CHAPTER 5 INTELLIGENT TECHNIQUES TO PREVENT SQL INJECTION ATTACKS 5.1 INTRODUCTION In this research work, two new techniques have been proposed for addressing the problem of SQL injection attacks, one
HTTPParameter Pollution. ChrysostomosDaniel
HTTPParameter Pollution ChrysostomosDaniel Introduction Nowadays, many components from web applications are commonly run on the user s computer (such as Javascript), and not just on the application s provider
Swaddler: An Approach for the Anomaly-based Detection of State Violations in Web Applications
Swaddler: An Approach for the Anomaly-based Detection of State Violations in Web Applications Marco Cova, Davide Balzarotti, Viktoria Felmetsger, and Giovanni Vigna Department of Computer Science, University
Integrated Network Vulnerability Scanning & Penetration Testing SAINTcorporation.com
SAINT Integrated Network Vulnerability Scanning and Penetration Testing www.saintcorporation.com Introduction While network vulnerability scanning is an important tool in proactive network security, penetration
Detect and Sanitise Encoded Cross-Site Scripting and SQL Injection Attack Strings Using a Hash Map
Detect and Sanitise Encoded Cross-Site Scripting and SQL Injection Attack Strings Using a Hash Map Erwin Adi and Irene Salomo School of Computer Science BINUS International BINUS University, Indonesia
A Platform Independent Testing Tool for Automated Testing of Web Applications
A Platform Independent Testing Tool for Automated Testing of Web Applications December 10, 2009 Abstract Increasing complexity of web applications and their dependency on numerous web technologies has
External Vulnerability Assessment. -Technical Summary- ABC ORGANIZATION
External Vulnerability Assessment -Technical Summary- Prepared for: ABC ORGANIZATI On March 9, 2008 Prepared by: AOS Security Solutions 1 of 13 Table of Contents Executive Summary... 3 Discovered Security
How To Fix A Web Application Security Vulnerability
Proposal of Improving Web Application Security in Context of Latest Hacking Trends RADEK VALA, ROMAN JASEK Department of Informatics and Artificial Intelligence Tomas Bata University in Zlin, Faculty of
FINAL DoIT 11.03.2015 - v.4 PAYMENT CARD INDUSTRY DATA SECURITY STANDARDS APPLICATION DEVELOPMENT AND MAINTENANCE PROCEDURES
Purpose: The Department of Information Technology (DoIT) is committed to developing secure applications. DoIT s System Development Methodology (SDM) and Application Development requirements ensure that
CS 558 Internet Systems and Technologies
CS 558 Internet Systems and Technologies Dimitris Deyannis [email protected] 881 Heat seeking Honeypots: Design and Experience Abstract Compromised Web servers are used to perform many malicious activities.
Finding Your Way in Testing Jungle. A Learning Approach to Web Security Testing.
Finding Your Way in Testing Jungle A Learning Approach to Web Security Testing. Research Questions Why is it important to improve website security? What techniques are already in place to test security?
Application Security Testing. Generic Test Strategy
Application Security Testing Generic Test Strategy Page 2 of 8 Contents 1 Introduction 3 1.1 Purpose: 3 1.2 Application Security Testing: 3 2 Audience 3 3 Test Strategy guidelines 3 3.1 Authentication
Bug Report. Date: March 19, 2011 Reporter: Chris Jarabek ([email protected])
Bug Report Date: March 19, 2011 Reporter: Chris Jarabek ([email protected]) Software: Kimai Version: 0.9.1.1205 Website: http://www.kimai.org Description: Kimai is a web based time-tracking application.
WHITE PAPER. FortiWeb and the OWASP Top 10 Mitigating the most dangerous application security threats
WHITE PAPER FortiWeb and the OWASP Top 10 PAGE 2 Introduction The Open Web Application Security project (OWASP) Top Ten provides a powerful awareness document for web application security. The OWASP Top
An Analysis of the Effectiveness of Black-Box Web Application Scanners in Detection of Stored XSSI Vulnerabilities
An Analysis of the Effectiveness of Black-Box Web Application Scanners in Detection of Stored XSSI Vulnerabilities Shafi Alassmi,Pavol Zavarsky, Dale Lindskog, Ron Ruhl, Ahmed Alasiri, Muteb Alzaidi Master
Advanced PostgreSQL SQL Injection and Filter Bypass Techniques
Advanced PostgreSQL SQL Injection and Filter Bypass Techniques INFIGO-TD TD-200 2009-04 2009-06 06-17 Leon Juranić [email protected] INFIGO IS. All rights reserved. This document contains information
Res. J. Appl. Sci. Eng. Technol., 8(5): 658-663, 2014
Research Journal of Applied Sciences, Engineering and Technology 8(5): 658-663, 2014 ISSN: 2040-7459; e-issn: 2040-7467 Maxwell Scientific Organization, 2014 Submitted: May 09, 2014 Accepted: June 16,
Detecting SQL Injection Vulnerabilities in Web Services
Detecting SQL Injection Vulnerabilities in Web Services Nuno Antunes, {nmsa, mvieira}@dei.uc.pt LADC 2009 CISUC Department of Informatics Engineering University of Coimbra Outline n Web Services n Web
Project 2: Web Security Pitfalls
EECS 388 September 19, 2014 Intro to Computer Security Project 2: Web Security Pitfalls Project 2: Web Security Pitfalls This project is due on Thursday, October 9 at 6 p.m. and counts for 8% of your course
Detection and Prevention of SQL Injection Attacks
Detection and Prevention of SQL Injection Attacks 1 Sailor Pratik, 2 Prof. Jaydeep Gheewala 1 Computer Department 1 Sarvajanik College of Engineering and Technology, Surat, Gujarat, India 1 [email protected],
Client Side Filter Enhancement using Web Proxy
Client Side Filter Enhancement using Web Proxy Santosh Kumar Singh 1, Rahul Shrivastava 2 1 M Tech Scholar, Computer Technology (CSE) RCET, Bhilai (CG) India, 2 Assistant Professor, CSE Department, RCET
Systematically Enhancing Black-Box Web Vulnerability Scanners
Systematically Enhancing Black-Box Web Vulnerability Scanners Thesis submitted in partial fulfillment of the requirements for the degree of Master of Science (by Research) in Computer Science by Sai Sathyanarayan
External Network & Web Application Assessment. For The XXX Group LLC October 2012
External Network & Web Application Assessment For The XXX Group LLC October 2012 This report is solely for the use of client personal. No part of it may be circulated, quoted, or reproduced for distribution
Evaluation of Web Security Mechanisms Using Inline Scenario & Online Scenario
Evaluation of Web Security Mechanisms Using Inline Scenario & Online Scenario M. Durai Ganesh (Research Scholars) Information Technology, St. Peter s University, Chennai- 54, Tamil Nadu, India Dr. G.Gunasekaran,
WEB APPLICATION VULNERABILITY DETECTION USING DYNAMIC ANALYSIS WITH PENETERATION TESTING
WEB APPLICATION VULNERABILITY DETECTION USING DYNAMIC ANALYSIS WITH PENETERATION TESTING Sreenivasa Rao B 1 Dept. of Computer Science & Engineering CMJ University, Shillong, India Kumar N 2 Dept. of Computer
A Survey on Server-side Approaches to Securing Web Applications
A Survey on Server-side Approaches to Securing Web Applications XIAOWEI LI Vanderbilt University YUAN XUE Vanderbilt University Web applications are one of the most prevalent platforms for information
Institutionen för datavetenskap
Institutionen för datavetenskap Department of Computer and Information Science Final thesis Generating web applications containing XSS and CSRF vulnerabilities by Gustav Ahlberg LIU-IDA/LITH-EX-A--14/054--SE
LASTLINE WHITEPAPER. Large-Scale Detection of Malicious Web Pages
LASTLINE WHITEPAPER Large-Scale Detection of Malicious Web Pages Abstract Malicious web pages that host drive-by-download exploits have become a popular means for compromising hosts on the Internet and,
Preventing SQL Injection through Automatic Query Sanitization with ASSIST
Preventing SQL Injection through Automatic Query Sanitization with ASSIST Raymond Mui Polytechnic Institute of NYU 6 Metrotech Center Brooklyn, NY, 11201, USA [email protected] Phyllis Frankl Polytechnic
Cyber Security Challenge Australia 2014
Cyber Security Challenge Australia 2014 www.cyberchallenge.com.au CySCA2014 Web Penetration Testing Writeup Background: Pentest the web server that is hosted in the environment at www.fortcerts.cysca Web
Detection of DOM-based Cross-Site Scripting by Analyzing Dynamically Extracted Scripts
Detection of DOM-based Cross-Site Scripting by Analyzing Dynamically Extracted Scripts Suman Saha 1, Shizhen Jin 2,3 and Kyung-Goo Doh 3 1 LIP6-Regal, France [email protected] 2 GTOne, Seoul, Korea [email protected]
Penetration Test Report
Penetration Test Report Acme Test Company ACMEIT System 26 th November 2010 Executive Summary Info-Assure Ltd was engaged by Acme Test Company to perform an IT Health Check (ITHC) on the ACMEIT System
How To Prevent An Sql Injection Attack
CHAPTER 1 PROJECT OVERVIEW 1.1 Introduction Database security is the degree to which all data is fully protected from tampering or unauthorized acts. Security vulnerability, security threat and security
DISCOVERY OF WEB-APPLICATION VULNERABILITIES USING FUZZING TECHNIQUES
DISCOVERY OF WEB-APPLICATION VULNERABILITIES USING FUZZING TECHNIQUES By Michael Crouse Dr. Errin W. Fulp, Ph.D., Advisor Abstract The increasingly high volume of users on the web and their use of web
Finding and Preventing Cross- Site Request Forgery. Tom Gallagher Security Test Lead, Microsoft
Finding and Preventing Cross- Site Request Forgery Tom Gallagher Security Test Lead, Microsoft Agenda Quick reminder of how HTML forms work How cross-site request forgery (CSRF) attack works Obstacles
Chapter 1 Web Application (In)security 1
Introduction xxiii Chapter 1 Web Application (In)security 1 The Evolution of Web Applications 2 Common Web Application Functions 4 Benefits of Web Applications 5 Web Application Security 6 "This Site Is
Magento Security and Vulnerabilities. Roman Stepanov
Magento Security and Vulnerabilities Roman Stepanov http://ice.eltrino.com/ Table of contents Introduction Open Web Application Security Project OWASP TOP 10 List Common issues in Magento A1 Injection
Web Application Security. Vulnerabilities, Weakness and Countermeasures. Massimo Cotelli CISSP. Secure
Vulnerabilities, Weakness and Countermeasures Massimo Cotelli CISSP Secure : Goal of This Talk Security awareness purpose Know the Web Application vulnerabilities Understand the impacts and consequences
An analysis on Blocking of SQL Injection Attacks by Comparing Static and Dynamic Queries
An analysis on Blocking of SQL Injection Attacks by Comparing Static and Dynamic Queries Jaskanwal Minhas Dept. of Computer Science and Engineering, Sant Baba Bhag Singh Institute of Engineering and Technology,
Intrusion detection for web applications
Intrusion detection for web applications Intrusion detection for web applications Łukasz Pilorz Application Security Team, Allegro.pl Reasons for using IDS solutions known weaknesses and vulnerabilities
Web applications. Web security: web basics. HTTP requests. URLs. GET request. Myrto Arapinis School of Informatics University of Edinburgh
Web applications Web security: web basics Myrto Arapinis School of Informatics University of Edinburgh HTTP March 19, 2015 Client Server Database (HTML, JavaScript) (PHP) (SQL) 1 / 24 2 / 24 URLs HTTP
A Tale of the Weaknesses of Current Client-Side XSS Filtering
Call To Arms: A Tale of the Weaknesses of Current Client-Side XSS Filtering Martin Johns, Ben Stock, Sebastian Lekies About us Martin Johns, Ben Stock, Sebastian Lekies Security Researchers at SAP, Uni
SQLAS: TOOL TO DETECT AND PREVENT ATTACKS IN PHP WEB APPLICATIONS
SQLAS: TOOL TO DETECT AND PREVENT ATTACKS IN PHP WEB APPLICATIONS Vandana Dwivedi 1, Himanshu Yadav 2 and Anurag Jain 3 1 Department of Computer Science & Engineering, RITS,Bhopal (India) 2 Department
Detecting Web Application Vulnerabilities Using Open Source Means. OWASP 3rd Free / Libre / Open Source Software (FLOSS) Conference 27/5/2008
Detecting Web Application Vulnerabilities Using Open Source Means OWASP 3rd Free / Libre / Open Source Software (FLOSS) Conference 27/5/2008 Kostas Papapanagiotou Committee Member OWASP Greek Chapter [email protected]
A Tokenization and Encryption based Multi-Layer Architecture to Detect and Prevent SQL Injection Attack
A Tokenization and Encryption based Multi-Layer Architecture to Detect and Prevent SQL Injection Attack Mr. Vishal Andodariya PG Student C. U. Shah College Of Engg. And Tech., Wadhwan city, India [email protected]
1. Introduction. 2. Web Application. 3. Components. 4. Common Vulnerabilities. 5. Improving security in Web applications
1. Introduction 2. Web Application 3. Components 4. Common Vulnerabilities 5. Improving security in Web applications 2 What does World Wide Web security mean? Webmasters=> confidence that their site won
Application Security Testing. Erez Metula (CISSP), Founder Application Security Expert [email protected]
Application Security Testing Erez Metula (CISSP), Founder Application Security Expert [email protected] Agenda The most common security vulnerabilities you should test for Understanding the problems
Criteria for web application security check. Version 2015.1
Criteria for web application security check Version 2015.1 i Content Introduction... iii ISC- P- 001 ISC- P- 001.1 ISC- P- 001.2 ISC- P- 001.3 ISC- P- 001.4 ISC- P- 001.5 ISC- P- 001.6 ISC- P- 001.7 ISC-
Web Application Penetration Testing
Web Application Penetration Testing 2010 2010 AT&T Intellectual Property. All rights reserved. AT&T and the AT&T logo are trademarks of AT&T Intellectual Property. Will Bechtel [email protected]
WEB SECURITY CONCERNS THAT WEB VULNERABILITY SCANNING CAN IDENTIFY
WEB SECURITY CONCERNS THAT WEB VULNERABILITY SCANNING CAN IDENTIFY www.alliancetechpartners.com WEB SECURITY CONCERNS THAT WEB VULNERABILITY SCANNING CAN IDENTIFY More than 70% of all websites have vulnerabilities
ABC LTD EXTERNAL WEBSITE AND INFRASTRUCTURE IT HEALTH CHECK (ITHC) / PENETRATION TEST
ABC LTD EXTERNAL WEBSITE AND INFRASTRUCTURE IT HEALTH CHECK (ITHC) / PENETRATION TEST Performed Between Testing start date and end date By SSL247 Limited SSL247 Limited 63, Lisson Street Marylebone London
Understanding Web Application Security Issues
Understanding Web Application Security Issues Pankaj Sharma January 30, 2009 Indian Computer Emergency Response Team ( CERT - IN ) Department Of Information Technology 1 Agenda Introduction What are Web
White Paper. Blindfolded SQL Injection
White Paper In the past few years, SQL Injection attacks have been on the rise. The increase in the number of Database based applications, combined with various publications that explain the problem and
Client logo placeholder XXX REPORT. Page 1 of 37
Client logo placeholder XXX REPORT Page 1 of 37 Report Details Title Xxx Penetration Testing Report Version V1.0 Author Tester(s) Approved by Client Classification Confidential Recipient Name Title Company
Web Application Security
E-SPIN PROFESSIONAL BOOK Vulnerability Management Web Application Security ALL THE PRACTICAL KNOW HOW AND HOW TO RELATED TO THE SUBJECT MATTERS. COMBATING THE WEB VULNERABILITY THREAT Editor s Summary
Guidelines for Web applications protection with dedicated Web Application Firewall
Guidelines for Web applications protection with dedicated Web Application Firewall Prepared by: dr inŝ. Mariusz Stawowski, CISSP Bartosz Kryński, Imperva Certified Security Engineer INTRODUCTION Security
DETECTION AND PREVENTION OF TAUTOLOGY AND UNION QUERY BASED SQL INJECTION ATTACKS
DETECTION AND PREVENTION OF TAUTOLOGY AND UNION QUERY BASED SQL INJECTION ATTACKS Jyoti Agrawal 1, Mukesh Gupta 2 1,2 Dept. of Computer Science, SKIT, (India) ABSTRACT Web applications are pervasive and
Recommended Practice Case Study: Cross-Site Scripting. February 2007
Recommended Practice Case Study: Cross-Site Scripting February 2007 iii ACKNOWLEDGEMENT This document was developed for the U.S. Department of Homeland Security to provide guidance for control system cyber
