Taint-based Directed Whitebox Fuzzing
|
|
|
- Austin Carpenter
- 9 years ago
- Views:
Transcription
1 Taint-based Directed Whitebox Fuzzing Vijay Ganesh and Tim Leek and Martin Rinard MIT Computer Science and Artificial Intelligence Lab vganesh, tleek, Abstract We present a new automated white box fuzzing technique and a tool, BuzzFuzz, that implements this technique. Unlike standard fuzzing techniques, which randomly change parts of the input file with little or no information about the underlying syntactic structure of the file, BuzzFuzz uses dynamic taint tracing to automatically locate regions of original seed input files that influence values used at key program attack points (points where the program may contain an error). BuzzFuzz then automatically generates new fuzzed test input files by fuzzing these identified regions of the original seed input files. Because these new test files typically preserve the underlying syntactic structure of the original seed input files, they make it past the initial input parsing components to exercise code deep within the semantic core of the computation. We have used BuzzFuzz to automatically find errors in two open-source applications: Swfdec (an Adobe Flash player) and MuPDF (a PDF viewer). Our results indicate that our new directed fuzzing technique can effectively expose errors located deep within large applications. Because the directed fuzzing technique uses the taint information to automatically discover and exploit information about the input file format, it is especially appropriate for testing applications that have complex, highly structured input file formats. 1 Introduction Fuzz testing [19] is a form of automatic, black-box testing which uses a fuzzer to randomly generate or mutate sample inputs. This technique has been shown to be surprisingly effective in revealing errors in software systems [19, 25, 18]. It is especially useful for testing input parsing components the randomly generated inputs often exercise overlooked corner cases in the initial parsing and error checking code. But fuzz testing (or simply fuzzing) has been less effective at exposing deeper semantic errors revealed by legal inputs that the system fails to process correctly [25, 10] for many systems virtually all of the randomly generated inputs fail to satisfy the basic syntactic constraints that characterize well-formed inputs, and hence fail to make it past the initial parsing phase to exercise the remaining code. This paper presents a new testing approach, directed whitebox fuzz testing, and a new tool, BuzzFuzz, that implements this testing approach. Instead of generating random inputs that primarily exercise the initial input parsing components, directed fuzz testing is designed to produce well-formed test inputs that exercise code deep within the core semantic processing components of the program-under-test. As such, it complements random fuzzing and significantly extends the reach of automated testing techniques. Directed fuzz testing is based on the following techniques: Taint Tracing: The program-under-test executes on one or more valid sample inputs. The execution is instrumented to record taint information. Specifically, the instrumented execution records, for each value that the program computes, the input bytes that influence that value. Attack Point Selection: Specific points in the system under test are identified as potential attack points, i.e., locations that may exhibit an error if the system is presented with an appropriate error-revealing input. By default, our implemented BuzzFuzz system selects all library and system calls as attack points. BuzzFuzz can also be configured, under user control, to select any arbitrary set of program points as attack points. Directed Fuzzing: For each attack point and each sample input, BuzzFuzz computes the set of input bytes that affect the values at that attack point. For library and system calls, for example, the values at the attack point are the parameters passed to the library or system call. BuzzFuzz then generates new inputs as follows: Each new 1
2 input is identical to one of the sample inputs, except that the input bytes that affect the values at one or more attack points have been altered. By default, our implemented BuzzFuzz system sets these bytes to extremal values, e.g., large, small, or zero integer values. BuzzFuzz can also be configured to use different policies such as generating random values for the corresponding input bytes. Directed Testing: Finally, BuzzFuzz runs the system under test on the newly generated inputs to see if the inputs reveal any errors. This approach has several benefits: Preservation of Syntactic Structure: Directed fuzzing tends to target input bytes that can be changed without violating the legal syntactic structure of original inputs. The automatically generated fuzzed inputs therefore tend to make it past the initial parsing components to exercise code within the semantic core of the computation. Targeted Values: The altered input bytes are designed to target values that are directly relevant to specific potential vulnerabilities. The generated test suite therefore tends to have a high concentration of inputs that can reveal errors that may exist at these potential vulnerabilities. Coordinated Changes: Finally, directed fuzzing can identify and alter multiple disjoint regions of the input space that must change together in a coordinated way to reveal the presence of an error. We have used BuzzFuzz to test several systems that process highly structured binary data such as video, images, document, and sound files. We have found that directed fuzzing is able to successfully generate inputs that satisfy complex input consistency constraints, and make it past the initial input processing components to reveal errors at attack points within the semantic core. More specifically, our results show that BuzzFuzz is able to preserve the syntactic structure present in the original inputs, generate new inputs that satisfy the key properties that characterize legal inputs, and successfully target vulnerabilities deep within the semantic core of the system under test. In the context of programs for decoding highly structured inputs like movies or documents, BuzzFuzz nicely complements random fuzzing, since random fuzzing usually uncovers errors in shallower parts of the program such as input validation code. Figure 1 illustrates the information that BuzzFuzz manipulates. The tester provides BuzzFuzz with an Program Seed Inputs Program Attack Points BuzzFuzz Fuzzed Test Inputs Figure 1. BuzzFuzz Diagram. The inputs to BuzzFuzz are: source of a C program, seed inputs, and a list of program attack points. The output of BuzzFuzz is a set of fuzzed test inputs application and set of seed input files for that application. BuzzFuzz also accepts a specification of attack points; this set of attack points can be provided by the tester or automatically provided along with the BuzzFuzz system. Given these inputs, BuzzFuzz instruments the source to trace taint information, then runs the instrumented source on the provided inputs to find out which input file locations influence attack point values. It then uses this information to produce new fuzzed test input files. We have used BuzzFuzz to automatically expose errors in two open-source applications: Swfdec (an Adobe Flash player) and MuPDF (a PDF viewer). These results show that BuzzFuzz can automatically generate fuzzed test input files that preserve the syntactic validity of the original seed input files and that the fuzzed files can expose subtle errors within both applications. All of the experimental results presented in this paper are available at edu/vganesh/buzzfuzz.html. This web site includes the source code for our benchmark applications, the automatically generated test files that expose errors in these applications, and the seed test input files that BuzzFuzz started with to generate the test files. This paper makes the following contributions: Technique: It presents a new technique for using taint information to automatically fuzz input files. This technique uses the taint information to identify promising locations in the input file to fuzz, while preserving the syntactic structure and validity of the original input file. Results: It presents experimental results that demonstrate the effectiveness of our technique on two sizable open-source applications. These results show that our technique is effective in generating inputs that make it past the initial input 2
3 parsing components to automatically expose subtle errors within the core of applications that have complex input file formats. 2 Example We next present an example that illustrates the basic concepts and operation of BuzzFuzz. The example presents an error that BuzzFuzz exposed in Swfdec, an open source C program that decodes and renders Adobe Shockwave Flash movie and animation formats [23, 1]. Figure 2 presents two procedures: the jpeg_decoder procedure from the Swfdec Version source code and the clipconv8x8_u8_s16_c procedure that Swfdec invokes from the liboil library [3]. liboil is an optimized inner loop library; it contains a variety of simple functions that have been optimized to take advantage of extended instruction set features such as MMX [4] and Altivec [2]. Swfdec uses various liboil functions to improve the performance of its image processing operations. In the example code in Figure 2, the Swfdec jpeg_decoder procedure reads in JPEG images embedded inside Flash movie files, decodes the images, and populates the datastructure dec that holds the resulting decoded images. As part of this computation, it invokes the liboil clipconv8x8_u8_s16_c procedure to convert 8 by 8 arrays of signed 16 bit integers into corresponding 8 by 8 arrays of unsigned 8 bit integers. Each 8 by 8 destination array is embedded within a larger array that holds the converted image blocks. Because this larger array stores the decoded image, its size depends on the size of the image that Swfdec is currently processing. Before the call to jpeg_decoder, Swfdec stored the width and height of the image in dec->width and dec->height. Swfdec originally read these values in from the (syntactically valid) Flash input file. During the setup for the image decode, these values were copied into the dec data structure that Swfdec uses to store the decoded image. Taint Tracing: Figure 2 shows in boldface the flow of dynamic taint from dec->width and dec->height (line numbers 3 and 6, respectively, in the source code shown in Figure 2) to the ptr parameter of clipconv8x8_u8_s16_c (line number 27). As this flow illustrates, the taint flows from dec->height and dec->width through the computation of the image_size value to the ptr parameter of clipconv8x8_u8_s16_c. As part of its dynamic taint trace computation, BuzzFuzz records that input bytes 0x1843 through 0x1846 in the original input Flash file (these bytes contain the image 1 jpeg_decoder(jpegdecoder* dec){ dec->width_blocks = 4 (dec->width + 8*max_h_sample - 1)/ 5 (8*max_h_sample); 6 dec->height_blocks = 7 (dec->height + 8*max_v_sample - 1)/ 8 (8*max_v_sample); 9 int rowstride; 10 int image_size; rowstride = 13 dec->width_blocks * 8*max_h_sample/ 14 dec->compsi.h_subsample; 15 image_size = rowstride * 16 (dec->height_blocks * 8*max_v_sample/ 17 dec->compsi.v_subsample); dec->ci.image=malloc(image_size); //LibOIL API function call 22 clipconv8x8_u8_s16_c(dec->ci.image...); }end of jpeg_decoder //library code reproduced below 27 clipconv8x8_u8_s16_c(ptr...){ for (i = 0; i < 8; i++) { 30 for (j = 0; j < 8; j++) { 31 x = BLOCK8x8_S16 (src,sstr,i,j); 32 if (x < 0) x = 0; 33 if (x > 255) x = 255; 34 //CRASH POINT!!!!! 35 (*((uint8_t *)((void *)ptr + 36 stride*row) + column)) = x; 37 } 38 } 39 } 40 } Figure 2. Swfdec JPEG decoder, and liboil Code. Highlighted code indicates dynamic taint transfer from width and height of JPEG image to clipconv8x8 u8 s16 c, the liboil library API 3
4 height and width that Swfdec read and copied into dec->height and dec->width for that particular input) influence the parameter values at the call to clipconv8x8_u8_s16_c. BuzzFuzz also records the fact that Swfdec interprets input bytes 0x1843 through 0x1846 as integer values. Fuzzed Test Input Generation: Because the call to clipconv8x8_u8_s16_c is an attack point, BuzzFuzz fuzzes the corresponding input bytes 0x1843 through 0x1846 when it constructs its new test input. Specifically, BuzzFuzz uses the fact that Swfdec interprets the input bytes as integers to set the height and width to the extremal value 0xffff in the new test input files. Bytes that do not affect values at attack points are left unchanged. Execution on Test Input: When Swfdec attempts to process the new fuzzed test input, the computation of image_size overflows, causing the call to malloc to allocate a destination image array that is too small to hold the decoded image. The resulting out of bounds array writes in clipconv8x8_u8_s16_c cause Swfdec to fail with a SIGSEGV violation. Discussion: This example illustrates several features of the BuzzFuzz system. First, the use of taint tracing enables BuzzFuzz to automatically find input file bytes that it can change without destroying the syntactic structure of the original input file. In our example, the taint tracer identifies which bytes in the input file represent the integer height and width. This information enables BuzzFuzz to apply targeted changes that preserve the underlying syntactic structure of the input Flash file. The result is that the new fuzzed input Flash file makes it past the initial input parsing components to exercise components (like the jpeg_decode procedure) in the core of the computation. Second, this use of taint information enables BuzzFuzz to operate in a completely automatic, pushbutton fashion. In effect, BuzzFuzz observes how the application itself manipulates the input file bytes to discover how to change the input without invalidating the underlying synactic structure of the original input file. There is no need for the BuzzFuzz tester to specify or even understand the input file format. BuzzFuzz is therefore especially appealing for applications (such as Swfdec) with very complex input file formats. On the one hand, traditional random fuzzing techniques have great difficulty producing syntactically valid input files for such applications, and are therefore primarily useful for testing the input file parsing components of such applications. On the other hand, more structured techniques that assume the presence of some specification of the input file format require the tester to understand and specify the input file format before effective testing can begin [25, 14, 10]. By automatically discovering enough information about the input file format to enable effective directed fuzz testing, BuzzFuzz makes it possible to automatically obtain test cases that exercise the core of the computation (rather than the input parsing) without the requiring the tester to understand or specify the input file format. Finally, the example illustrates how library calls can provide relevant attack points. Many modern applications make extensive use of libraries, with the core data structures (as in Swfdec) passed as parameters to libraries. These library parameter values are often determined by specific combinations of input bytes (such as the image height and width in our example) that the application uses to compute the shape and form of its internal data structures. In many cases (as in Swfdec), related distinct values must be changed together in a coordinated way to expose the underlying error in the code that processes the data structures. Choosing library calls as attack points is one productive way to identify these kinds of related combinations of input file bytes. 3 Technique The BuzzFuzz system, as illustrated in Figure 1, requires three inputs: The source code of a program P written in the C language, A list of attack points in the form of a list of function names (our production BuzzFuzz system comes with this list preconfigured to include library and system calls), and One or more seed inputs I for the program P. Given these inputs, the system automatically and without any human intervention produces new test inputs T that are derived from I by appropriately fuzzing input bytes that affect values at attack points according to the types of these attack point values. Figure 3 graphically illustrates the operation of BuzzFuzz. The BuzzFuzz taint instrumentator takes as input the source of the application under test. It produces as output the instrumented program, which runs on the provided seed test inputs. The result of each instrumented execution is a BuzzFuzz attack point taint report which indicates how specific locations in the input file influence values at attack points. Finally, the BuzzFuzz test input generator uses the taint reports and the seed inputs to produce the fuzzed test inputs. We next describe the individual BuzzFuzz components in more detail. 4
5 Program Source Seed Inputs BuzzFuzz Taint Instrumentor Instrumented Program Attack Point Taint Report BuzzFuzz Test Input Generator Fuzzed Test Inputs Figure 3. Internals of BuzzFuzz 3.1 Dynamic Taint Tracing BuzzFuzz implements a standard taint tracing algorithm. The first step is to process the source code of the program-under-test to appropriately insert calls to the BuzzFuzz taint trace library. This library maintains a mapping that records, for each computed value, the input bytes that affect that value. This mapping is implemented as a hash table that maps addresses to sets of byte locations in the input file. Whenever the application uses a set of existing values to compute a new value, the inserted taint tracing calls use the hash table to retrieve the input byte locations for the existing values used to compute the new value, take the union of these sets of input byte locations, then record this set of input byte locations in the hash table indexed under the address where the new value is stored. For example, consider the case where the programunder-test uses an assignment statement to copy a value from an input buffer into a local variable. The inserted taint tracing call causes the BuzzFuzz dynamic taint tracing system to retrieve the set of input byte locations for the accessed input buffer address, then store that set of input byte locations in the hash table indexed under the address of the assigned local variable. Statements that combine multiple values to compute a new value (for example, a statement that adds several values) take the union of the input byte locations for all of the values used to compute the new value. Type Information: In addition to the file location (or input byte location) information, the taint tracing system also records the type of the new value. BuzzFuzz uses this information during its directed fuzzing step to choose appropriate extremal values for the fuzzed input file bytes. Procedure Calls: To trace taint across procedure calls, BuzzFuzz maintains a stack that records information about the taint information for procedure parameters. At each procedure call point, the inserted calls to the taint trace library push taint information for the parameters onto the stack. The taint trace calls inside the invoked procedure then use this stack to retrieve taint information for statements that use the parameters. Library Procedures: In certain cases BuzzFuzz does not have access to the source code for procedures in libraries. BuzzFuzz is therefore unable to insert the taint tracing calls into these procedures. BuzzFuzz instead maintains an internal database of information about how taint flows across a small set of important library procedure calls. For example, BuzzFuzz s database specifies that taint flows from the parameter of malloc to its return value. BuzzFuzz uses this information to insert appropriate calls to the taint library at such procedure call points. Attack Points: At each attack point the inserted BuzzFuzz instrumentation records the taint information for all of the values at the attack point each time the attack point executes. Report: When the execution terminates, BuzzFuzz produces a report that contains recorded taint information for each attack point. For each execution of each attack point, and for each value at that execution, the report presents the list of input file locations that influenced that value. The report also contains the type of each value as it is used in the program. We present several lines from a Swfdec report below. These lines identify an attack point, a list of input bytes that influence values at that attack point, and the types of these input bytes. clipconv8x8_u8_s16_c: ((int) 0x1862 0x1863 ) ((int) 0x1862 0x1863 0x1864 0x1865 ) Limitations: As is standard for most taint tracing systems of which we are aware, BuzzFuzz does not trace indirect tainting relationships that occur at conditionals or array accesses. So if a particular set of input 5
6 bytes is used to determine whether to execute the true or false branch of a conditional, the locations of those bytes may not appear as influencing the values computed along the executed side of the conditional. Similarly, for array assignments taint flows only from the array index to the assigned array element and not to the remaining unmodified array elements. Performance: The inserted instrumentation imposes a performance overhead. Specifically, our results indicate that the taint tracing calls cause the instrumented version of the program to execute between 20 and 30 times slower than the original non-instrumented version. As the results in Section 3.3 indicate, this performance overhead does not significantly impair the ability of our system to generate test inputs that reveal errors in our benchmark applications. 3.2 Generating Fuzzed Inputs The first step in generating fuzzed inputs is to acquire a corpus of seed inputs. Given such a set, BuzzFuzz runs the instrumented version of the application on each input in turn. The result is a report containing the taint tracing information for each execution of each attack point. The next step is to use the report to fuzz the corresponding seed input to obtain a new test input. Each report entry identifies a coherent set of input file bytes that BuzzFuzz can change along with the type of the value stored in that set of bytes. Many possible fuzzing strategies are possible for example, the new value for the bytes may be chosen at random or from a predefined set of values. The current implementation of BuzzFuzz chooses extremal values such as very large or small values. The specific bit-level representation of the value is chosen based on the type recorded in the report. The final step is to combine and apply the changes from all of the report entries. The current BuzzFuzz implementation simply combines and applies changes from all of the entries in the report. If two entries conflict (i.e., specify overlapping but not equal byte ranges or conflicting types), BuzzFuzz arbitrarily selects changes from only one of the entries. It is, of course, possible to apply strategies that select changes from some but not all of the entries. It is also possible to generate multiple fuzzed test input files from a single seed file (by simply selecting and applying changes from different subsets of entries). 3.3 Testing The last step is to run the uninstrumented version of the program on the new fuzzed test inputs and observe any failures. These failures can then be reported to developers. 4 Results We experimentally evaluate BuzzFuzz on two opensource C application programs, namely, Swfdec [23] version 0.5.5, an Adobe Flash player, and MuPDF [6] version 0.1, a PDF viewer. 4.1 Methodology We first obtained an initial corpus of seed input files for each application. We would like to thank Pedram Amini [25] for providing us with a corpus of Adobe Flash files, and Adam Kiezun of MIT for providing us with a corpus of Adobe PDF files. We verified that each application processes all of the files in its corpus correctly without failures. We next used the corpus as a basis for directed fuzz testing. Specifically, we provided BuzzFuzz with 1) an instrumented version of the application program under test (this version uses dynamic taint tracing to compute the input bytes that affect each value at each attack point), 2) the corpus of seed input files for that application, and 3) the uninstrumented production version of the application. BuzzFuzz then iterated through the files in the corpus of seed input files, performing the following steps for each file: Instrumented Execution: The instrumented version of the application executes on the seed input file. This execution produces a report that identifies, for each attack point, the input bytes that influence the values that occur at that attack point and the types of these values. Directed Fuzzing: BuzzFuzz processes the report generated in the step above, and the seed input file in order to produce a new fuzzed test file. This test file differs from the seed input file in only those bytes that affect values at attack points. Those bytes are set to extremal values, with the specific extremal value chosen as a function of the type of the corresponding attack point value. Testing: The uninstrumented version of the application executes on the automatically generated fuzzed test file. All failures are logged and information (such as the test input file and stack back trace at the point of failure) recorded. 6
7 Apps Lines of Number of Total Distinct Mean Crashes Distinct Code Fuzzed tests Crashes Errors Stack Depth per hour Errors/hour Swfdec 70, MuPDF 40, Table 1. BuzzFuzz Results App Crash Type File:# Library Stack Depth Swfdec BADALLOC XCreatePixMap X11 23 Swfdec BADALLOC XCreatePixMap X11 23 Swfdec SIGABRT cairo_pen.c:325 CAIRO library 43 Swfdec SIGSEGV convert8x8_c.c:130 LibOIL library 40 Swfdec SIGSEGV swfdec_sprite_movie.c:377 source code 11 MuPDF SIGSEGV atoi libc 7 Table 2. Information on Specific Errors revealed by BuzzFuzz We conducted all experiments on a 64 bit, 3 GHz Ubuntu Linux box. 4.2 Results Table 1 presents our results for both Swfdec and MuPDF. The first column presents the number of lines of code in each application (excluding libraries), the second presents the total number of fuzzed test inputs presented to each application, the third presents the number of executions that failed, and the fourth presents the number of distinct errors responsible for these failures (in some cases a single error was responsible for failures in multiple different runs), and the fifth presents the mean depth of the stack trace when the failure occurred. The last two columns represent the number of errors found per hour, and the number of distinct errors found per hour. We note that the error discovery rate per hour of testing reflects the overall effectiveness of our technique. In general, the mean stack depth trace numbers reflect the fact (discussed further below) that the errors occur deep within the core of application rather than in shallower, more peripheral components. Table 2 presents additional detail for each error. There is one row in the table for each error that BuzzFuzz revealed. The first column presents the application with the error; the second column identifies the manifestation of the error as a specific crash type. The next column identifies the location of the manifestation of the error, either as a filename plus line number or (if that information is not available) as a function name. The next column identifies this location as either in a specific named library (such as LibOIL, CAIRO, X11 [3], or libc) or within the source code of the application itself. The next column identifies the depth of the stack at the manifestation point. The final column gives a description of the fields in input files that were automatically discovered and fuzzed by BuzzFuzz in order to expose the errors in the table. The information in this table indicates that BuzzFuzz (configured with attack points at library and system calls) can effectively reveal errors related to problematic interactions across module boundaries. Specifically, five of the six errors manifest themselves within library rather than application code. The BADALLOC errors, for example, are caused by the application passing very large x and y window size parameters to the X11 graphics library. The memory management system is unable to satisfy the library s ensuing attempt to allocate a data structure to hold the (very large) window s contents, and the program fails because of a BADALLOC error. The CAIRO SIGABRT error similarly involves a problematic interaction between the application and the library. This error occurs when a field specifying the number of strokes in a given image representation is inconsistent with the actual number of strokes. This inconsistency does not effect the application until is deep within the CAIRO library actually using the number of strokes as it attempts to render the image. And as discussed above in Section 1, the SIGSEGV error in the libiol library occurs because of an overflow when computing the size of a memory block used to hold converted JPEG images. These errors reflect the difficulty of making libraries with complex interfaces robust in the face of inconsistent or simply unusual or unanticipated parameter settings. Many of the errors involve corrupted metadata that is passed (potentially after translation) from the input file through the application into the library, 7
8 which either fails to check the validity of the metadata or simply does not have enough information to do so. The application itself, on the other hand, is often acting primarily as a conduit for the information and is in no position to perform the detailed checks required to detect parameter combinations that may cause the library to fail. In effect, the division of the computational task into an application plus a library has left an information gap that provides room for errors to occur. 4.3 Comparison with Random Fuzzing To compare directed and random fuzzing, we implemented a random fuzzer that reads in an arbitrary input file, then randomly fuzzes bytes within the file to generate new fuzzed test files. Like the directed fuzzing technique that BuzzFuzz uses, the purely random fuzzer provides a fully automatic, push-button testing environment. Unlike directed fuzzing, however, the random fuzzer does not attempt to exploit any information about how the application processes input file bytes. It therefore implements a less targeted testing strategy. The random fuzzer can be configured to fuzz a chosen percentage of the input files. For our set of benchmark applications, randomly fuzzing bytes in the file headers also almost always produces an invalid file that is immediately rejected by the inital input parsing code. Moreover, fuzzing over 20 percent of the remaining input file bytes also almost invariably produces an immediately rejected invalid file. Fuzzing less than 5 percent of the remaining input bytes, on the other hand, produces minimally perturbed files that fail to reveal any errors at all. We therefore chose to randomly fuzz 10 percent of the non-header bytes in the input files. Table 3 presents our results for random fuzzing for both Swfdec and MuPDF. The first column presents the number of lines of code in each application (excluding libraries), the second presents the total number of fuzzed test inputs presented to each application. Unlike BuzzFuzz, the random fuzzer does not need to execute an instrumented version of the application on the seed input files. It can therefore generate new fuzzed input files much more quickly than BuzzFuzz, which in turn enables it to test the applications on more input files (we ran both testers for 12 hours). The third column presents the number of executions that failed, and the fourth presents the number of distinct errors responsible for these failures (in some cases a single error was responsible for failures in multiple different runs), and the fifth presents the mean depth of the stack trace when the failure occurred. The last two columns represent the number of errors found per hour, and the number of distinct errors found per hour. This random fuzzing strategy revealed three distinct errors in Swfdec and one error in MuPUDF. Table 4 presents additional information for each of the errors. Some of the errors overlap with the errors in Table 2 that BuzzFuzz revealed. Specifically, the first error in Table 4 and the third error in Table 2 are the same error. Also, the MuPDF errors are the same for both fuzzing techniques. The remaining errors, however, illustrate the different and complementary strengths of the two techniques. The remaining two errors that the random fuzzer revealed occurr in the initial parsing of the Flash action script language embedded within the Flash input file. In fact, both errors manifest themselves as assertion failures inside the Swfdec source code. They therefore trigger anticipated and handled fatal error conditions (and are therefore arguably not errors at all). On the other hand, the remaining four Swfdec errors from Table 2 that BuzzFuzz revealed all occur within the core of the computation after the input has passed the initial input parsing phase. These differences reflect the effectiveness of directed fuzz testing in 1) identifying parts of the input file that, when appropriately fuzzed, expose errors within the core of the application while 2) preserving the underlying syntactic structure of input files with complex formatting constraints to enable the automatically generated test files to make it past the initial parsing and input validation to exercise the error-containing code within the core. Note that because directed fuzz testing tends to preserve the synactic structure of the seed input files, it is not designed to reveal errors in the initial input parsing code. And in fact, the results show that simple random fuzzing is more effective at appropriately exercising the parsing code to expose such errors. 5 Related Work Fuzzing Fuzzing refers to a class of techniques for randomly generating or mutating seed inputs to get new test inputs. These techniques have been shown to be surprisingly effective in uncovering errors [19, 25], and are used heavily by security researchers. Fuzzing is relatively cheap and easy to apply. However, it suffers from several problems: many random inputs may lead to the same bug, and the probability of producing valid inputs may be low especially for deeply structured formats like movies. Furthermore, the probability of exposing certain classes of incorrect behavior, which require many conditions to be simultaneously true in deep program paths, can be vanishingly small. Our directed fuzzing technique provides similar ease 8
9 Apps Lines of Number of Total Distinct Mean Crashes Distinct Code Fuzzed tests Crashes Errors Stack Depth per hour Errors/hour Swfdec 70, MuPDF 40, Table 3. Random Fuzzing Results App Crash Type File:# Source Stack Depth Swfdec SIGSEGV swfdec_sprite_movie.c:377 source code 11 Swfdec SIGABRT swfdec_as_types.c:500 source code 22 Swfdec BADALLOC swfdec_as_context.c:967 source code 18 MuPDF SIGSEGV atoi libc 7 Table 4. Information on Specific Errors exposed by Random Fuzzing of use benefits. But because it exploits information about how the program accesses the input file bytes to preserve the important syntactic structure present in the initial seed inputs, it can effectively target deep errors in the core of the computation. The tradeoff is that it is not designed to expose errors in the initial input parsing code. Grammar-based Black Box Fuzzing Black box fuzzing tools use a grammar to characterize syntactically legal inputs [25, 5, 14]. The insight behind this approach is that a fuzzer that understands the input file format preserve the syntactic validity of the initial seed inputs (or even inputs generated from scratch) and therefore produce test inputs that make it past the initial input parsing code to exercise code in the core of the computation. Our directed fuzzing technique also preserves the syntactic validity of the seed inputs to produce fuzzed inputs that expose deep errors in the core of the computation. But because directed fuzzing exploits the availability of taint information to effectively identify and change appropriate parts of the seed input file, it achieves this effect without requiring the tester to understand or obtain a specification of the input file format. In general, the cost of obtaining this specification can be substantial, especially for files (such as movie, image, and document files) with complex file structure. For example, see [25], Chapter 21 for an analysis of the cost of developing a grammar-based fuzzer for the Adobe Flash file format. Another advantage is that the tainting information enables directed fuzzing to target multiple regions in the input file that must be changed together in a coordinated way to expose the error. Because the computation tends to combine the values of such regions when it builds its internal data structures, this grouping information is readily available in the taint reports that BuzzFuzz produces. Concolic Testing Another recent approach to automated testing has been concolic testing and its variants [12, 24, 9, 20]. Generally speaking, a concolic tester executes the subject program both concretely and symbolically [15] on a seed input, until some interesting program expression is reached. The concrete execution serves the purpose of choosing a program path cheaply, while the symbolic part of the execution is converted into a constraint, called a path constraint. The interesting program expression under consideration could be a program assertion or a conditional or a dangerous expression like division. The path constraint is conjoined with a query about this program expression (e.g., can the assertion be violated or can negation of the conditional lead to a viable alternate path or can the denominator of the division go to zero), and fed to a constraint solver for solution. The solution, in terms of variables representing the input, is a test case that can exercise the program path and the program expression in interesting ways, potentially revealing an error. Concolic testing has been shown to be effective, has the advantage of being systematic, and is usually completely automatic. However, concolic testing faces several challenges [7, 11]. First is the exponential explosion in the number of shallow paths in the early part of the code (usually parser code) that are systematically explored by concolic testers. In many cases, and especially for applications that process highly structured input files, the constraint solver gets bogged down exploring the many shallow execution paths that lead to parser errors. One way to ameliorate this problem is to augment the concolic tester with a grammar that specifies the legal input file format [13]. By using the grammar to guide the constraint satisfaction, it is possible to avoid exploring many error cases in the input parsing code. As 9
10 for grammer-based black box fuzzing, a potential drawback is the need to obtain a grammar that characterizes the legal inputs. The second issue is that, once the concolic tester makes it past the initial input parsing stages, the resulting deeper program paths may produce very large constraints with complex conditions that current state of the art constraint solvers are unable to handle. This is especially problematic for deep program paths that contain hard-to-invert functions like hash functions or encryption. The common denominator between concolic testing and its variants on the one hand, and BuzzFuzz on the other is that they both use the program source in order to generate some kind of symbolic information for each program variable in a particular concrete program run. However, the key difference is in the kind of symbolic information maintained by each technique. In the case of concolic testing, the symbolic information is essentially a logical expression for each variable that semantically captures all possible values these variables can take for the particular program path chosen by the concrete execution. In contrast, BuzzFuzz simply maintains the set of input bytes that influence the program variables in the particular program path chosen, in particular for the variables involved in the attack points. In other words, BuzzFuzz uses a simpler and more tractable algebra of symbolic expressions, i.e., sets of input bytes per program variable, as opposed to concolic testers, which maintain logical expressions per program variable. This distinction in the kind of symbolic information maintained by each technique is a key differentiator. For programs whose inputs are highly structured, concolic execution of deep program paths may result in heavyweight constraints that are difficult or even impossible to solve. BuzzFuzz, on the other hand, works with much lighter weight symbolic information and is therefore capable in practice of exploring much deeper program paths and revealing errors that occur deeper in the computation. The trade-off, of course, is that BuzzFuzz cannot systematically enumerate inputs that exhaust the program execution space the probability of exposing an error depends entirely on the interaction between the fuzzing algorithm and the characteristics of the application. Dynamic Monitoring using Taint Tracing Dynamic taint tracing has also been used to find potential security vulnerabilities and monitor deployed applications for the presence of potential security attacks. The idea is to use the taint information to detect situations in which the program uses input data in a potentially dangerous way (such as the target of a branch instruction) [16, 21, 22]. Protocol Induction The goal of automatic protocol induction or protocol reverse engineering is to automatically infer the file format or the grammar for valid inputs of a given program [8, 26, 17]. Like our technique, these techniques use taint tracing to obtain information about the structure of the input file. Unlike our technique, which aims to expose errors by modifying targeted parts of the input file, the goal of protocol induction is simply to obtain an understanding of the input format. 6 Conclusions and Future Work In comparison with other testing approaches, random testing offers clear advantages in automation, ease of use, and its ability to generate inputs that step outside the developer s expected input space. Our new directed fuzz testing technique, as implemented in our BuzzFuzz tool, complements existing random testing techniques to enable, for the first time, fully automatic generation of test inputs that exercise code deep within the semantic core of applications with complex input file formats. A key insight behind the success of our technique is the opportunity to use taint tracing to obtain information about which input bytes to change to target specific attack points deep within the computation. This taint information enables BuzzFuzz to perturb the seed input files without violating their syntactic validity. It also shows BuzzFuzz how to identify and change multiple regions of the input file that must be modified in a coordinated way to expose errors. One particularly important aspect of this taint information is that, with an appropriate taint tracing system in place, it is available without any human intervention or, indeed, any need for the tester to even understand the input file format. This property makes it especially appropriate for testing programs with complex input file formats. Testing is currently the most effective and widely used technique for enhancing program robustness and reliability. By opening up a new region of the testing space for automatic exploitation, our directed fuzz testing technique promises to help developers find and eliminate deep subtle errors more quickly, efficiently, and with less effort. References [1] Adobe macromedia shockwave flash file format. Adobe_Flash. 10
11 [2] Altivec instruction set. wikipedia.org/wiki/altivec. [3] Gnome and freedesktop enviroments. http: //en.wikipedia.org/wiki/freedesktop. org. [4] Mmx instruction set. org/wiki/mmx_(instruction_set). [5] Wikipedia entry on fuzzing. wikipedia.org/wiki/fuzz_testing. [6] T. Andersson. Mupdf: A pdf viewer. ccxvii.net/fitz/. [7] P. Boonstoppel, C. Cadar, and D. R. Engler. Rwset: Attacking path explosion in constraintbased test generation. In TACAS, pages , [8] J. Caballero, H. Yin, Z. Liang, and D. Song. Polyglot: automatic extraction of protocol message format using dynamic binary analysis. In CCS 07: Proceedings of the 14th ACM conference on Computer and communications security, pages , New York, NY, USA, ACM. [9] C. Cadar, V. Ganesh, P. Pawlowski, D. Dill, and D. Engler. EXE: Automatically generating inputs of death. In Proceedings of the 13th ACM Conference on Computer and Communications Security, October-November [10] J. DeMott. The evolving art of fuzzing. Evolving_Art_of_Fuzzing.pdf, [11] P. Godefroid, A. Kiezun, and M. Y. Levin. Grammar-based whitebox fuzzing. In PLDI, pages , [12] P. Godefroid, N. Klarlund, and K. Sen. Dart: directed automated random testing. In PLDI 05: Proceedings of the 2005 ACM SIGPLAN conference on Programming language design and implementation, pages , New York, NY, USA, ACM. [13] P. Godefroid, M. Y. Levin, and D. Molnar. Automated whitebox fuzz testing. In Network and Distributed Systems Security Symposium, [14] R. Kaksonen. A functional method for assessing protocol implementation security. Technical Report 448, VTT Electronics, [15] J. C. King. Symbolic execution and program testing. In Communications of the ACM, volume 19(7), pages , [16] E. Larson and T. Austin. High coverage detection of input-related security facults. In SSYM 03: Proceedings of the 12th conference on USENIX Security Symposium, pages 9 9, Berkeley, CA, USA, USENIX Association. [17] Z. Lin and X. Zhang. Deriving input syntactic structure from execution. In Proceedings of the 16th ACM SIGSOFT International Symposium on Foundations of Software Engineering (FSE 08), Atlanta, GA, USA, November [18] B. Miller. Fuzzing website. wisc.edu/ bart/fuzz/fuzz.html, [19] B. P. Miller, L. Fredriksen, and B. So. An empirical study of the reliability of unix utilities. Commun. ACM, 33(12):32 44, [20] D. Molnar and D. Wagner. Catchconv: Symbolic execution and run-time type inference for integer conversion errors. Technical Report UCB/EECS , University of California, Berkeley, CA, Feb [21] J. Newsome and D. Song. Dynamic taint analysis for automatic detection, analysis, and signature generation of exploits on comnodity software. In NDSS, [22] A. Nguyen-Tuong, S. Guarnieri, D. Greene, J. Shirley, and D. Evans. Automatically hardening web applications using precise tainting. In IFIP Security, [23] B. Otte and D. Schleef. Swfdec: A flash animation player. wiki/. [24] K. Sen, D. Marinov, and G. Agha. Cute: a concolic unit testing engine for c. SIGSOFT Softw. Eng. Notes, 30(5): , [25] M. Sutton, A. Greene, and P. Amini. Fuzzing: Brute Force Vulnerability Discovery. Addison- Wesley Professional, 1 edition, July [26] G. Wondracek, P. M. Comparetti, C. Kruegel, and E. Kirda. Automatic network protocol analysis. In Proceedings of the 15th Annual Network and Distributed System Security Symposium (NDSS08,
Peach Fuzzer Platform
Fuzzing is a software testing technique that introduces invalid, malformed, or random data to parts of a computer system, such as files, network packets, environment variables, or memory. How the tested
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
Software Vulnerability Detection using Backward Trace Analysis and Symbolic Execution
Software Vulnerability Detection using Backward Trace Analysis and Symbolic Execution Hongzhe Li, Taebeom Kim, Munkhbayar Bat-Erdene and Heejo Lee Div. of Computer and Communication Engineering Korea University
Dsc+Mock: A Test Case + Mock Class Generator in Support of Coding Against Interfaces
Dsc+Mock: A Test Case + Mock Class Generator in Support of Coding Against Interfaces Mainul Islam, Christoph Csallner Computer Science and Engineering Department University of Texas at Arlington Arlington,
Automatic Network Protocol Analysis
Gilbert Wondracek, Paolo M ilani C omparetti, C hristopher Kruegel and E ngin Kirda {gilbert,pmilani}@ seclab.tuwien.ac.at chris@ cs.ucsb.edu engin.kirda@ eurecom.fr Reverse Engineering Network Protocols
A Link Layer Discovery Protocol Fuzzer
The University of Texas at Austin, Department of Computer Sciences, Technical Report TR-07-24 A Link Layer Discovery Protocol Fuzzer Jeremy Hollander Department of Computer Sciences The University of Texas
The Advantages of Block-Based Protocol Analysis for Security Testing
The Advantages of Block-Based Protocol Analysis for Security Testing Dave Aitel Immunity,Inc. 111 E. 7 th St. Suite 64, NY NY 10009, USA [email protected] February, 4 2002 Abstract. This paper describes
PDF Primer PDF. White Paper
White Paper PDF Primer PDF What is PDF and what is it good for? How does PDF manage content? How is a PDF file structured? What are its capabilities? What are its limitations? Version: 1.0 Date: October
Automating Security Testing. Mark Fallon Senior Release Manager Oracle
Automating Security Testing Mark Fallon Senior Release Manager Oracle Some Ground Rules There are no silver bullets You can not test security into a product Testing however, can help discover a large percentage
Whitebox Fuzzing for Security Testing
Article development led by queue.acm.org SAGE has had a remarkable impact at Microsoft. SAGE: Whitebox Fuzzing for Security Testing doi:10.1145/2093548.2093564 by Patrice Godefroid, Michael Y. Levin, and
Chapter 8: Bags and Sets
Chapter 8: Bags and Sets In the stack and the queue abstractions, the order that elements are placed into the container is important, because the order elements are removed is related to the order in which
Data Model Bugs. Ivan Bocić and Tevfik Bultan
Data Model Bugs Ivan Bocić and Tevfik Bultan Department of Computer Science University of California, Santa Barbara, USA [email protected] [email protected] Abstract. In today s internet-centric world, web
Test Automation Architectures: Planning for Test Automation
Test Automation Architectures: Planning for Test Automation Douglas Hoffman Software Quality Methods, LLC. 24646 Heather Heights Place Saratoga, California 95070-9710 Phone 408-741-4830 Fax 408-867-4550
CVE-2012-1535 Adobe Flash Player Integer Overflow Vulnerability Analysis
Your texte here. CVE-2012-1535 Adobe Flash Player Integer Overflow Vulnerability Analysis October 11 th, 2012 Brian MARIANI & Frédéric BOURLA A FEW WORDS ABOUT FLASH PLAYER Your Adobe texte Flash here
Full System Emulation:
Full System Emulation: Achieving Successful Automated Dynamic Analysis of Evasive Malware Christopher Kruegel Lastline, Inc. [email protected] 1 Introduction Automated malware analysis systems (or sandboxes)
APPROACHES TO SOFTWARE TESTING PROGRAM VERIFICATION AND VALIDATION
1 APPROACHES TO SOFTWARE TESTING PROGRAM VERIFICATION AND VALIDATION Validation: Are we building the right product? Does program meet expectations of user? Verification: Are we building the product right?
DATA MASKING A WHITE PAPER BY K2VIEW. ABSTRACT K2VIEW DATA MASKING
DATA MASKING A WHITE PAPER BY K2VIEW. ABSTRACT In today s world, data breaches are continually making the headlines. Sony Pictures, JP Morgan Chase, ebay, Target, Home Depot just to name a few have all
Software Testing & Analysis (F22ST3): Static Analysis Techniques 2. Andrew Ireland
Software Testing & Analysis (F22ST3) Static Analysis Techniques Andrew Ireland School of Mathematical and Computer Science Heriot-Watt University Edinburgh Software Testing & Analysis (F22ST3): Static
Tool-Assisted Unit-Test Generation and Selection Based on Operational Abstractions
Tool-Assisted Unit-Test Generation and Selection Based on Operational Abstractions Tao Xie 1 and David Notkin 2 ([email protected],[email protected]) 1 Department of Computer Science, North Carolina
Automating SQL Injection Exploits
Automating SQL Injection Exploits Mike Shema IT Underground, Berlin 2006 Overview SQL injection vulnerabilities are pretty easy to detect. The true impact of a vulnerability is measured
Test Specification. Introduction
Test Specification Introduction Goals and Objectives GameForge is a graphical tool used to aid in the design and creation of video games. A user with little or no experience with Microsoft DirectX and/or
Empirically Identifying the Best Genetic Algorithm for Covering Array Generation
Empirically Identifying the Best Genetic Algorithm for Covering Array Generation Liang Yalan 1, Changhai Nie 1, Jonathan M. Kauffman 2, Gregory M. Kapfhammer 2, Hareton Leung 3 1 Department of Computer
Environment Modeling for Automated Testing of Cloud Applications
Environment Modeling for Automated Testing of Cloud Applications Linghao Zhang, Tao Xie, Nikolai Tillmann, Peli de Halleux, Xiaoxing Ma, Jian Lv {lzhang25, txie}@ncsu.edu, {nikolait, jhalleux}@microsoft.com,
Towards Automatic Discovery of Deviations in Binary Implementations with Applications to Error Detection and Fingerprint Generation
Towards Automatic Discovery of Deviations in Binary Implementations with Applications to Error Detection and Fingerprint Generation David Brumley, Juan Caballero, Zhenkai Liang, James Newsome, and Dawn
Loop-Extended Symbolic Execution on Binary Programs
Loop-Extended Symbolic Execution on Binary Programs Prateek Saxena Pongsin Poosankam Stephen McCamant Dawn Song University of California, Berkeley and Carnegie Mellon University Berkeley, California, USA
A Static Analyzer for Large Safety-Critical Software. Considered Programs and Semantics. Automatic Program Verification by Abstract Interpretation
PLDI 03 A Static Analyzer for Large Safety-Critical Software B. Blanchet, P. Cousot, R. Cousot, J. Feret L. Mauborgne, A. Miné, D. Monniaux,. Rival CNRS École normale supérieure École polytechnique Paris
Oracle Solaris Studio Code Analyzer
Oracle Solaris Studio Code Analyzer The Oracle Solaris Studio Code Analyzer ensures application reliability and security by detecting application vulnerabilities, including memory leaks and memory access
Visionet IT Modernization Empowering Change
Visionet IT Modernization A Visionet Systems White Paper September 2009 Visionet Systems Inc. 3 Cedar Brook Dr. Cranbury, NJ 08512 Tel: 609 360-0501 Table of Contents 1 Executive Summary... 4 2 Introduction...
Fuzzing in Microsoft and FuzzGuru framework
Fuzzing in Microsoft and FuzzGuru framework OWASP-IL May-2007 John Neystadt [email protected] Lead Program Manager Forefront Edge, Microsoft Agenda Overview Introduction to Fuzzing FuzzGuru Architecture
Dynamic Test Generation To Find Integer Bugs in x86 Binary Linux Programs
Dynamic Test Generation To Find Integer Bugs in x86 Binary Linux Programs David Molnar UC Berkeley Xue Cong Li UC Berkeley David A. Wagner UC Berkeley Abstract Recently, integer bugs, including integer
Using Concolic Testing to Refine Vulnerability Profiles in FUZZBUSTER
Using Concolic Testing to Refine Vulnerability Profiles in FUZZBUSTER David J. Musliner, Jeffrey M. Rye, Tom Marble Smart Information Flow Technologies (SIFT) Minneapolis, MN, USA Email: {dmusliner, jrye,
Checking Access to Protected Members in the Java Virtual Machine
Checking Access to Protected Members in the Java Virtual Machine Alessandro Coglio Kestrel Institute 3260 Hillview Avenue, Palo Alto, CA 94304, USA Ph. +1-650-493-6871 Fax +1-650-424-1807 http://www.kestrel.edu/
Ivan Medvedev Principal Security Development Lead Microsoft Corporation
Ivan Medvedev Principal Security Development Lead Microsoft Corporation Session Objectives and Takeaways Session Objective(s): Give an overview of the Security Development Lifecycle Discuss the externally
Experimental Comparison of Concolic and Random Testing for Java Card Applets
Experimental Comparison of Concolic and Random Testing for Java Card Applets Kari Kähkönen, Roland Kindermann, Keijo Heljanko, and Ilkka Niemelä Aalto University, Department of Information and Computer
Automated Testing With Commercial Fuzzing Tools
Automated Testing With Commercial Fuzzing Tools A Study of Commercially Available s: Identification of Undisclosed Vulnerabilities with the Aid of Commercial Fuzzing Tools Prof. Dr. Hartmut Pohl and Daniel
Testing LTL Formula Translation into Büchi Automata
Testing LTL Formula Translation into Büchi Automata Heikki Tauriainen and Keijo Heljanko Helsinki University of Technology, Laboratory for Theoretical Computer Science, P. O. Box 5400, FIN-02015 HUT, Finland
Eliminate Memory Errors and Improve Program Stability
Eliminate Memory Errors and Improve Program Stability with Intel Parallel Studio XE Can running one simple tool make a difference? Yes, in many cases. You can find errors that cause complex, intermittent
I Control Your Code Attack Vectors Through the Eyes of Software-based Fault Isolation. Mathias Payer, ETH Zurich
I Control Your Code Attack Vectors Through the Eyes of Software-based Fault Isolation Mathias Payer, ETH Zurich Motivation Applications often vulnerable to security exploits Solution: restrict application
Symbol Tables. Introduction
Symbol Tables Introduction A compiler needs to collect and use information about the names appearing in the source program. This information is entered into a data structure called a symbol table. The
Development and Industrial Application of Multi-Domain Security Testing Technologies. Innovation Sheet Model Inference Assisted Evolutionary Fuzzing
Development and Industrial Application of Multi-Domain Security Testing Technologies Innovation Sheet Model Inference Assisted Evolutionary Fuzzing Description The technique dynamically analyzes the application
Smarter Balanced Assessment Consortium. Recommendation
Smarter Balanced Assessment Consortium Recommendation Smarter Balanced Quality Assurance Approach Recommendation for the Smarter Balanced Assessment Consortium 20 July 2012 Summary When this document was
JOURNAL OF OBJECT TECHNOLOGY
JOURNAL OF OBJECT TECHNOLOGY Online at http://www.jot.fm. Published by ETH Zurich, Chair of Software Engineering JOT, 2006 Vol. 5, No. 6, July - August 2006 On Assuring Software Quality and Curbing Software
Towards a Framework for Generating Tests to Satisfy Complex Code Coverage in Java Pathfinder
Towards a Framework for Generating Tests to Satisfy Complex Code Coverage in Java Pathfinder Matt Department of Computer Science and Engineering University of Minnesota [email protected] Abstract We present
Automated Program Behavior Analysis
Automated Program Behavior Analysis Stacy Prowell [email protected] March 2005 SQRL / SEI Motivation: Semantics Development: Most engineering designs are subjected to extensive analysis; software is
æ A collection of interrelated and persistent data èusually referred to as the database èdbèè.
CMPT-354-Han-95.3 Lecture Notes September 10, 1995 Chapter 1 Introduction 1.0 Database Management Systems 1. A database management system èdbmsè, or simply a database system èdbsè, consists of æ A collection
Improved Software Testing Using McCabe IQ Coverage Analysis
White Paper Table of Contents Introduction...1 What is Coverage Analysis?...2 The McCabe IQ Approach to Coverage Analysis...3 The Importance of Coverage Analysis...4 Where Coverage Analysis Fits into your
Black box Fault Finder for Dynamic Web Application Using Dynamic Test Generation
Black box Fault Finder for Dynamic Web Application Using Dynamic Test Generation Anup P.Dabhade Dept. name of CSE Auroras Scientific Technological and Research Academy ASTRA Hyderabad, India V.Rajakumar.
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
SECFUZZ: Fuzz-testing Security Protocols
To appear in: In Proc. of the 7th International Workshop on Automation of Software Test (AST 2012). June 2-3, 2012, Zurich, Switzerland. SECFUZZ: Fuzz-testing Security Protocols Petar Tsankov, Mohammad
Real-Time Analysis of CDN in an Academic Institute: A Simulation Study
Journal of Algorithms & Computational Technology Vol. 6 No. 3 483 Real-Time Analysis of CDN in an Academic Institute: A Simulation Study N. Ramachandran * and P. Sivaprakasam + *Indian Institute of Management
2 SYSTEM DESCRIPTION TECHNIQUES
2 SYSTEM DESCRIPTION TECHNIQUES 2.1 INTRODUCTION Graphical representation of any process is always better and more meaningful than its representation in words. Moreover, it is very difficult to arrange
Database Programming with PL/SQL: Learning Objectives
Database Programming with PL/SQL: Learning Objectives This course covers PL/SQL, a procedural language extension to SQL. Through an innovative project-based approach, students learn procedural logic constructs
ThreatSpike Dome: A New Approach To Security Monitoring
ThreatSpike Dome: A New Approach To Security Monitoring 2015 ThreatSpike Labs Limited The problem with SIEM Hacking, insider and advanced persistent threats can be difficult to detect with existing product
Test case design techniques I: Whitebox testing CISS
Test case design techniques I: Whitebox testing Overview What is a test case Sources for test case derivation Test case execution White box testing Flowgraphs Test criteria/coverage Statement / branch
Considerations In Developing Firewall Selection Criteria. Adeptech Systems, Inc.
Considerations In Developing Firewall Selection Criteria Adeptech Systems, Inc. Table of Contents Introduction... 1 Firewall s Function...1 Firewall Selection Considerations... 1 Firewall Types... 2 Packet
Measuring the Effect of Code Complexity on Static Analysis Results
Measuring the Effect of Code Complexity on Static Analysis Results James Walden, Adam Messer, and Alex Kuhl Department of Computer Science Northern Kentucky University Highland Heights, KY 41099 Abstract.
Coverity White Paper. Effective Management of Static Analysis Vulnerabilities and Defects
Effective Management of Static Analysis Vulnerabilities and Defects Introduction According to a recent industry study, companies are increasingly expanding their development testing efforts to lower their
Pattern Insight Clone Detection
Pattern Insight Clone Detection TM The fastest, most effective way to discover all similar code segments What is Clone Detection? Pattern Insight Clone Detection is a powerful pattern discovery technology
ONLINE EXERCISE SYSTEM A Web-Based Tool for Administration and Automatic Correction of Exercises
ONLINE EXERCISE SYSTEM A Web-Based Tool for Administration and Automatic Correction of Exercises Daniel Baudisch, Manuel Gesell and Klaus Schneider Embedded Systems Group, University of Kaiserslautern,
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
RARP: Reverse Address Resolution Protocol
SFWR 4C03: Computer Networks and Computer Security January 19-22 2004 Lecturer: Kartik Krishnan Lectures 7-9 RARP: Reverse Address Resolution Protocol When a system with a local disk is bootstrapped it
Debugging A MotoHawk Application using the Application Monitor
CONTROL SYSTEM SOLUTIONS Debugging A MotoHawk Application using the Application Monitor Author(s): New Eagle Consulting 3588 Plymouth Road, #274 Ann Arbor, MI 48105-2603 Phone: +1 (734) 929-4557 Ben Hoffman
Introduction to Computers and Programming. Testing
Introduction to Computers and Programming Prof. I. K. Lundqvist Lecture 13 April 16 2004 Testing Goals of Testing Classification Test Coverage Test Technique Blackbox vs Whitebox Real bugs and software
1) The postfix expression for the infix expression A+B*(C+D)/F+D*E is ABCD+*F/DE*++
Answer the following 1) The postfix expression for the infix expression A+B*(C+D)/F+D*E is ABCD+*F/DE*++ 2) Which data structure is needed to convert infix notations to postfix notations? Stack 3) The
Framework for Injecting the Attacks and Analyzing the Behaviour of Vulnerability on Server s
Framework for Injecting the Attacks and Analyzing the Behaviour of Vulnerability on Server s Panchamukesh Ch #1, Kumar.J *2, Neelima.S *3, Sailaja.D *4 #1 Department of CSE, HITAM, Gowdavally, Hyderabad,
Improving the Database Logging Performance of the Snort Network Intrusion Detection Sensor
-0- Improving the Database Logging Performance of the Snort Network Intrusion Detection Sensor Lambert Schaelicke, Matthew R. Geiger, Curt J. Freeland Department of Computer Science and Engineering University
How To Develop A Static Analysis System For Large Programs
Towards the Industrial Scale Development of Custom Static Analyzers John Anton, Eric Bush, Allen Goldberg, Klaus Havelund, Doug Smith, Arnaud Venet Kestrel Technology LLC 4984 El Camino Real #230 Los Altos,
Sandy. The Malicious Exploit Analysis. http://exploit-analysis.com/ Static Analysis and Dynamic exploit analysis. Garage4Hackers
Sandy The Malicious Exploit Analysis. http://exploit-analysis.com/ Static Analysis and Dynamic exploit analysis About Me! I work as a Researcher for a Global Threat Research firm.! Spoke at the few security
C# and Other Languages
C# and Other Languages Rob Miles Department of Computer Science Why do we have lots of Programming Languages? Different developer audiences Different application areas/target platforms Graphics, AI, List
Will Dormann: Sure. Fuzz testing is a way of testing an application in a way that you want to actually break the program.
The Power of Fuzz Testing to Reduce Security Vulnerabilities Transcript Part 1: Why Fuzz Testing? Julia Allen: Welcome to CERT's podcast series: Security for Business Leaders. The CERT program is part
Transparent Monitoring of a Process Self in a Virtual Environment
Transparent Monitoring of a Process Self in a Virtual Environment PhD Lunchtime Seminar Università di Pisa 24 Giugno 2008 Outline Background Process Self Attacks Against the Self Dynamic and Static Analysis
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
Extend Table Lens for High-Dimensional Data Visualization and Classification Mining
Extend Table Lens for High-Dimensional Data Visualization and Classification Mining CPSC 533c, Information Visualization Course Project, Term 2 2003 Fengdong Du [email protected] University of British Columbia
Generating Test Cases With High Branch Coverage for Web Applications
Generating Test Cases With High Branch Coverage for Web Applications Andrey Zakonov and Anatoly Shalyto National Research University of Information Technologies, Mechanics and Optics, Saint-Petersburg,
Software Model Checking Improving Security of a Billion Computers
Software Model Checking Improving Security of a Billion Computers Patrice Godefroid Microsoft Research Page 1 November 2009 Acknowledgments Joint work with Michael Levin (CSE) and others: Chris Marsh,
Storing Measurement Data
Storing Measurement Data File I/O records or reads data in a file. A typical file I/O operation involves the following process. 1. Create or open a file. Indicate where an existing file resides or where
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
Analysis of Object Oriented Software by Using Software Modularization Matrix
Analysis of Object Oriented Software by Using Software Modularization Matrix Anup 1, Mahesh Kumar 2 1 M.Tech Student, 2 Assistant Professor, Department of Computer Science and Application, RPS College,
How to select the right Marketing Cloud Edition
How to select the right Marketing Cloud Edition Email, Mobile & Web Studios ith Salesforce Marketing Cloud, marketers have one platform to manage 1-to-1 customer journeys through the entire customer lifecycle
Model Checking based Software Verification
Model Checking based Software Verification 18.5-2006 Keijo Heljanko [email protected] Department of Computer Science and Engineering Helsinki University of Technology http://www.tcs.tkk.fi/~kepa/ 1/24
ENHANCING INTELLIGENCE SUCCESS: DATA CHARACTERIZATION Francine Forney, Senior Management Consultant, Fuel Consulting, LLC May 2013
ENHANCING INTELLIGENCE SUCCESS: DATA CHARACTERIZATION, Fuel Consulting, LLC May 2013 DATA AND ANALYSIS INTERACTION Understanding the content, accuracy, source, and completeness of data is critical to the
Automating Mimicry Attacks Using Static Binary Analysis
Automating Mimicry Attacks Using Static Binary Analysis Christopher Kruegel and Engin Kirda Technical University Vienna [email protected], [email protected] Darren Mutz, William Robertson,
Adobe Flash Player and Adobe AIR security
Adobe Flash Player and Adobe AIR security Both Adobe Flash Platform runtimes Flash Player and AIR include built-in security and privacy features to provide strong protection for your data and privacy,
Countering The Faults Of Web Scanners Through Byte-code Injection
Countering The Faults Of Web Scanners Through Byte-code Injection Introduction Penetration testing, web application scanning, black box security testing these terms all refer to a common technique of probing
Secure Web Application Coding Team Introductory Meeting December 1, 2005 1:00 2:00PM Bits & Pieces Room, Sansom West Room 306 Agenda
Secure Web Application Coding Team Introductory Meeting December 1, 2005 1:00 2:00PM Bits & Pieces Room, Sansom West Room 306 Agenda 1. Introductions for new members (5 minutes) 2. Name of group 3. Current
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
How To Test Your Web Site On Wapt On A Pc Or Mac Or Mac (Or Mac) On A Mac Or Ipad Or Ipa (Or Ipa) On Pc Or Ipam (Or Pc Or Pc) On An Ip
Load testing with WAPT: Quick Start Guide This document describes step by step how to create a simple typical test for a web application, execute it and interpret the results. A brief insight is provided
A Visualization System and Monitoring Tool to Measure Concurrency in MPICH Programs
A Visualization System and Monitoring Tool to Measure Concurrency in MPICH Programs Michael Scherger Department of Computer Science Texas Christian University Email: [email protected] Zakir Hussain Syed
Implementing and Maintaining Microsoft SQL Server 2008 Integration Services
Course 6234A: Implementing and Maintaining Microsoft SQL Server 2008 Integration Services Length: 3 Days Language(s): English Audience(s): IT Professionals Level: 200 Technology: Microsoft SQL Server 2008
Fuzzing Apache OpenOffice
Fuzzing Apache OpenOffice An Approach to Automated Black-box Security Testing Rob Weir April 7th, 2014 Who is Rob? 1) Rob Weir from Westford Massachusetts 2) [email protected], @rcweir, http://www.linkedin.com/in/rcweir
Natural Language to Relational Query by Using Parsing Compiler
Available Online at www.ijcsmc.com International Journal of Computer Science and Mobile Computing A Monthly Journal of Computer Science and Information Technology IJCSMC, Vol. 4, Issue. 3, March 2015,
Comprehensive Static Analysis Using Polyspace Products. A Solution to Today s Embedded Software Verification Challenges WHITE PAPER
Comprehensive Static Analysis Using Polyspace Products A Solution to Today s Embedded Software Verification Challenges WHITE PAPER Introduction Verification of embedded software is a difficult task, made
Comparing Microsoft SQL Server 2005 Replication and DataXtend Remote Edition for Mobile and Distributed Applications
Comparing Microsoft SQL Server 2005 Replication and DataXtend Remote Edition for Mobile and Distributed Applications White Paper Table of Contents Overview...3 Replication Types Supported...3 Set-up &
