webarchive is a Web archive file format available on macOS and Windows for saving and reviewing complete web pages using the Safari web browser . The webarchive format differs from a standalone HTML file because it also saves linked files such as images, CSS , and JavaScript . The webarchive format is a concatenation of source files with filenames saved in the binary plist format using NSKeyedArchiver. Support for webarchive documents was added in Safari 4 Beta on Windows and is included in subsequent versions. Safari in iOS 13 (iPhone and iPad) has support for web archive files. Previously there was a third party iOS app called Web Archive Viewer that provided this functionality.
57-409: In February 2013, a vulnerability with the webarchive format was discovered and reported by Joe Vennix, a Metasploit Project developer. The exploit allows an attacker to send a crafted webarchive to a user containing code to access cookies , local files, and other data. Apple's response to the report was that it will not fix the bug, most likely because it requires action on the users' part in opening
114-450: A computer program . The program is then monitored for exceptions such as crashes , failing built-in code assertions , or potential memory leaks . Typically, fuzzers are used to test programs that take structured inputs. This structure is specified, e.g., in a file format or protocol and distinguishes valid from invalid input. An effective fuzzer generates semi-valid inputs that are "valid enough" in that they are not directly rejected by
171-475: A file , a sequence of keyboard or mouse events , or a sequence of messages . This structure distinguishes valid input that is accepted and processed by the program from invalid input that is quickly rejected by the program. What constitutes a valid input may be explicitly specified in an input model. Examples of input models are formal grammars , file formats , GUI -models, and network protocols . Even items not normally considered as input can be fuzzed, such as
228-455: A hash for a crashing input to determine its uniqueness and then assigns an exploitability rating: Previously unreported, triaged bugs might be automatically reported to a bug tracking system . For instance, OSS-Fuzz runs large-scale, long-running fuzzing campaigns for several security-critical software projects where each previously unreported, distinct bug is reported directly to a bug tracker. The OSS-Fuzz bug tracker automatically informs
285-404: A random testing tool that generates inputs at random is considered a blackbox fuzzer. Hence, a blackbox fuzzer can execute several hundred inputs per second, can be easily parallelized, and can scale to programs of arbitrary size. However, blackbox fuzzers may only scratch the surface and expose "shallow" bugs. Hence, there are attempts to develop blackbox fuzzers that can incrementally learn about
342-502: A reference implementation is available. For automated regression testing , the generated inputs are executed on two versions of the same program. For automated differential testing , the generated inputs are executed on two implementations of the same program (e.g., lighttpd and httpd are both implementations of a web server). If the two variants produce different output for the same input, then one may be buggy and should be examined more closely. Static program analysis analyzes
399-780: A command line interface, third-party import, manual exploitation and manual brute forcing. This free version of the Metasploit project also includes Zenmap , a well known security scanner, and a compiler for Ruby, the language in which this version of Metasploit was written. In October 2010, Rapid7 added Metasploit Pro, an open-core commercial Metasploit edition for penetration testers. Metasploit Pro adds onto Metasploit Express with features such as Quick Start Wizards/MetaModules, building and managing social engineering campaigns, web application testing, an advanced Pro Console, dynamic payloads for anti-virus evasion, integration with Nexpose for ad-hoc vulnerability scans, and VPN pivoting. The edition
456-455: A computer system. ) In April 2015, Hanno Böck showed how the fuzzer AFL could have found the 2014 Heartbleed vulnerability. (The Heartbleed vulnerability was disclosed in April 2014. It is a serious vulnerability that allows adversaries to decipher otherwise encrypted communication . The vulnerability was accidentally introduced into OpenSSL which implements TLS and is used by the majority of
513-448: A fuzzer does not exercise certain structural elements in the program, then it is also not able to reveal bugs that are hiding in these elements. Some program elements are considered more critical than others. For instance, a division operator might cause a division by zero error, or a system call may crash the program. A black-box fuzzer treats the program as a black box and is unaware of internal program structure. For instance,
570-548: A fuzzer must be able to distinguish expected (normal) from unexpected (buggy) program behavior. However, a machine cannot always distinguish a bug from a feature. In automated software testing , this is also called the test oracle problem. Typically, a fuzzer distinguishes between crashing and non-crashing inputs in the absence of specifications and to use a simple and objective measure. Crashes can be easily identified and might indicate potential vulnerabilities (e.g., denial of service or arbitrary code execution ). However,
627-419: A fuzzing campaign for several weeks without finding a bug does not prove the program correct. After all, the program may still fail for an input that has not been executed, yet; executing a program for all inputs is prohibitively expensive. If the objective is to prove a program correct for all inputs, a formal specification must exist and techniques from formal methods must be used. In order to expose bugs,
SECTION 10
#1732935433182684-593: A portable network tool using Perl . By 2007, the Metasploit Framework had been completely rewritten in Ruby . On October 21, 2009, the Metasploit Project announced that it had been acquired by Rapid7, a security company that provides unified vulnerability management solutions. Like comparable commercial products such as Immunity's Canvas or Core Security Technologies ' Core Impact, Metasploit can be used to test
741-414: A program with random inputs. While random testing had been widely perceived to be the worst means of testing a program, the authors could show that it is a cost-effective alternative to more systematic testing techniques. In 1983, Steve Capps at Apple developed "The Monkey", a tool that would generate random inputs for classic Mac OS applications, such as MacPaint . The figurative "monkey" refers to
798-410: A program without actually executing it. This might lead to false positives where the tool reports problems with the program that do not actually exist. Fuzzing in combination with dynamic program analysis can be used to try to generate an input that actually witnesses the reported problem. Modern web browsers undergo extensive fuzzing. The Chromium code of Google Chrome is continuously fuzzed by
855-566: A published specification) that enables saving of whole webpages in a single file. It is currently supported by Firefox , using an extension. Other web browsers use the MHTML format or do the equivalent by saving a directory of inline resources (usually images) alongside the HTML file, sometimes compressed, like the .war format used by Konqueror (tar+gzip or tar+bzip2). Safari does not support these alternative archive formats. For archiving entire websites,
912-453: A reasonable performance overhead but informs the fuzzer about the increase in code coverage during fuzzing, which makes gray-box fuzzers extremely efficient vulnerability detection tools. Fuzzing is used mostly as an automated technique to expose vulnerabilities in security-critical programs that might be exploited with malicious intent. More generally, fuzzing is used to demonstrate the presence of bugs rather than their absence. Running
969-499: A system using the Framework include. This modular approach – allowing the combination of any exploit with any payload – is the major advantage of the Framework. It facilitates the tasks of attackers, exploit writers and payload writers. Metasploit runs on Unix (including Linux and macOS) and on Windows. The Metasploit Framework can be extended to use add-ons in multiple languages. To choose an exploit and payload, some information about
1026-465: A third party Metasploit exploit module that highlights the exploitability, risk and remediation of that particular bug. Metasploit 3.0 began to include fuzzing tools, used to discover software vulnerabilities, rather than just exploits for known bugs. This avenue can be seen with the integration of the lorcon wireless (802.11) toolset into Metasploit 3.0 in November 2006. The basic steps for exploiting
1083-472: A tool for developing and executing exploit code against a remote target machine. Other important sub-projects include the Opcode Database, shellcode archive and related research. The Metasploit Project includes anti-forensic and evasion tools, some of which are built into the Metasploit Framework. In various operating systems it comes pre installed. Metasploit was created by H. D. Moore in 2003 as
1140-420: A week. Hence, many fuzzers provide a toolchain that automates otherwise manual and tedious tasks which follow the automated generation of failure-inducing inputs. Automated bug triage is used to group a large number of failure-inducing inputs by root cause and to prioritize each individual bug by severity. A fuzzer produces a large number of inputs, and many of the failure-inducing ones may effectively expose
1197-443: A wider variety of programs. For instance, AFL is a dumb mutation-based fuzzer that modifies a seed file by flipping random bits , by substituting random bytes with "interesting" values, and by moving or deleting blocks of data. However, a dumb fuzzer might generate a lower proportion of valid inputs and stress the parser code rather than the main components of a program. The disadvantage of dumb fuzzers can be illustrated by means of
SECTION 20
#17329354331821254-561: Is a free and open source network security tool notable for its contributions to red team collaboration allowing for shared sessions, data, and communication through a single Metasploit instance. The latest release of Armitage was in 2015. Cobalt Strike is a collection of threat emulation tools provided by HelpSystems to work with the Metasploit Framework. Cobalt Strike includes all features of Armitage and adds post-exploitation tools, in addition to report generation features. Metasploit currently has over 2074 exploits, organized under
1311-416: Is a stub . You can help Misplaced Pages by expanding it . Metasploit Project The Metasploit Project is a computer security project that provides information about security vulnerabilities and aids in penetration testing and IDS signature development. It is owned by Boston , Massachusetts-based security company, Rapid7 . Its best-known sub-project is the open-source Metasploit Framework ,
1368-455: Is accessible only to a privileged user. The term "fuzz" originates from a 1988 class project in the graduate Advanced Operating Systems class (CS736), taught by Prof. Barton Miller at the University of Wisconsin , whose results were subsequently published in 1990. To fuzz test a UNIX utility meant to automatically generate random input and command-line parameters for the utility. The project
1425-408: Is large and mostly malformed, it might be difficult for a developer to understand what exactly is causing the bug. Given the failure-inducing input, an automated minimization tool would remove as many input bytes as possible while still reproducing the original bug. For instance, Delta Debugging is an automated input minimization technique that employs an extended binary search algorithm to find such
1482-657: The Chromium web browser . Security researchers can upload their own fuzzers and collect bug bounties if ClusterFuzz finds a crash with the uploaded fuzzer. In September 2014, Shellshock was disclosed as a family of security bugs in the widely used UNIX Bash shell ; most vulnerabilities of Shellshock were found using the fuzzer AFL . (Many Internet-facing services, such as some web server deployments, use Bash to process certain requests, allowing an attacker to cause vulnerable versions of Bash to execute arbitrary commands . This can allow an attacker to gain unauthorized access to
1539-520: The Internet Archive has developed the Web ARChive (WARC) format which was standardized by ISO . HTMLD (HTML Directory) is a NeXT-developed format for saving web pages and their dependencies in a bundle that may also be served by a web server. Chrome offers the "webpage, complete" format which saves the page with a folder containing the required resources. This Macintosh-related article
1596-691: The infinite monkey theorem which states that a monkey hitting keys at random on a typewriter keyboard for an infinite amount of time will eventually type out the entire works of Shakespeare. In the case of testing, the monkey would write the particular sequence of inputs that would trigger a crash. In 1991, the crashme tool was released, which was intended to test the robustness of Unix and Unix-like operating systems by randomly executing systems calls with randomly chosen parameters. A fuzzer can be categorized in several ways: A mutation-based fuzzer leverages an existing corpus of seed inputs during fuzzing. It generates inputs by modifying (or rather mutating )
1653-405: The maintainer of the vulnerable software and checks in regular intervals whether the bug has been fixed in the most recent revision using the uploaded minimized failure-inducing input. Automated input minimization (or test case reduction) is an automated debugging technique to isolate that part of the failure-inducing input that is actually inducing the failure. If the failure-inducing input
1710-425: The 1950s when data was still stored on punched cards . Programmers would use punched cards that were pulled from the trash or card decks of random numbers as input to computer programs. If an execution revealed undesired behavior, a bug had been detected. The execution of random inputs is also called random testing or monkey testing . In 1981, Duran and Ntafos formally investigated the effectiveness of testing
1767-550: The Chrome Security Team with 15,000 cores. For Microsoft Edge and Internet Explorer , Microsoft performed fuzzed testing with 670 machine-years during product development, generating more than 400 billion DOM manipulations from 1 billion HTML files. A fuzzer produces a large number of inputs in a relatively short time. For instance, in 2016 the Google OSS-fuzz project produced around 4 trillion inputs
Webarchive - Misplaced Pages Continue
1824-503: The absence of a crash does not indicate the absence of a vulnerability. For instance, a program written in C may or may not crash when an input causes a buffer overflow . Rather the program's behavior is undefined . To make a fuzzer more sensitive to failures other than crashes, sanitizers can be used to inject assertions that crash the program when a failure is detected. There are different sanitizers for different kinds of bugs: Fuzzing can also be used to detect "differential" bugs if
1881-474: The community through GitHub.com pull requests. Submissions are reviewed by a team consisting of both Rapid7 employees and senior external contributors. The majority of contributions add new modules, such as exploits or scanners. List of original developers: Fuzzing In programming and software development , fuzzing or fuzz testing is an automated software testing technique that involves providing invalid, unexpected, or random data as inputs to
1938-408: The construction of a valid checksum for a cyclic redundancy check (CRC). A CRC is an error-detecting code that ensures that the integrity of the data contained in the input file is preserved during transmission . A checksum is computed over the input data and recorded in the file. When the program processes the received file and the recorded checksum does not match the re-computed checksum, then
1995-426: The contents of databases , shared memory , environment variables or the precise interleaving of threads . An effective fuzzer generates semi-valid inputs that are "valid enough" so that they are not directly rejected from the parser and "invalid enough" so that they might stress corner cases and exercise interesting program behaviours. A smart (model-based, grammar-based, or protocol-based ) fuzzer leverages
2052-454: The file is rejected as invalid. Now, a fuzzer that is unaware of the CRC is unlikely to generate the correct checksum. However, there are attempts to identify and re-compute a potential checksum in the mutated input, once a dumb mutation-based fuzzer has modified the protected data. Typically, a fuzzer is considered more effective if it achieves a higher degree of code coverage . The rationale is, if
2109-479: The file. Workarounds to allow the file to be viewed in other browsers are possible, though specific webpage contents may hinder this process. This requires one of the free tools WebArchive Folderizer (for OS X 10.2 and higher) or WebArchive Extractor (for OS X 10.4.3 and higher). Webarchives can be converted to WARC using the National Library of Norway 's Warchaeology set of tools. MAFF is an open format (with
2166-772: The following platforms: AIX , Android , BSD , BSDi , Cisco , Firefox , FreeBSD , HP-UX , Irix , Java , JavaScript , Linux , mainframe , multi (applicable to multiple platforms), NetBSD , NetWare , NodeJS , OpenBSD , macOS , PHP , Python , R , Ruby , Solaris , Unix , and Windows . Note that Apple iOS is based on FreeBSD, and some FreeBSD exploits may work, while most won't. Metasploit currently has over 592 payloads. Some of them are: The Metasploit Framework includes hundreds of auxiliary modules that can perform scanning, fuzzing, sniffing, and much more. There are three types of auxiliary modules namely scanners, admin and server modules. Metasploit Framework operates as an open-source project and accepts contributions from
2223-413: The grammar. However, generally the input model must be explicitly provided, which is difficult to do when the model is proprietary, unknown, or very complex. If a large corpus of valid and invalid inputs is available, a grammar induction technique, such as Angluin 's L* algorithm, would be able to generate an input model. A dumb fuzzer does not require the input model and can thus be employed to fuzz
2280-440: The input model to generate a greater proportion of valid inputs. For instance, if the input can be modelled as an abstract syntax tree , then a smart mutation-based fuzzer would employ random transformations to move complete subtrees from one node to another. If the input can be modelled by a formal grammar , a smart generation-based fuzzer would instantiate the production rules to generate inputs that are valid with respect to
2337-483: The internal structure (and behavior) of a program during fuzzing by observing the program's output given an input. For instance, LearnLib employs active learning to generate an automaton that represents the behavior of a web application. A white-box fuzzer leverages program analysis to systematically increase code coverage or to reach certain critical program locations. For instance, SAGE leverages symbolic execution to systematically explore different paths in
Webarchive - Misplaced Pages Continue
2394-408: The parser, but do create unexpected behaviors deeper in the program and are "invalid enough" to expose corner cases that have not been properly dealt with. For the purpose of security, input that crosses a trust boundary is often the most useful. For example, it is more important to fuzz code that handles a file uploaded by any user than it is to fuzz the code that parses a configuration file that
2451-447: The program (a technique known as concolic execution ). If the program's specification is available, a whitebox fuzzer might leverage techniques from model-based testing to generate inputs and check the program outputs against the program specification. A whitebox fuzzer can be very effective at exposing bugs that hide deep in the program. However, the time used for analysis (of the program or its specification) can become prohibitive. If
2508-425: The provided seeds. For example, when fuzzing the image library libpng , the user would provide a set of valid PNG image files as seeds while a mutation-based fuzzer would modify these seeds to produce semi-valid variants of each seed. The corpus of seed files may contain thousands of potentially similar inputs. Automated seed selection (or test suite reduction) allows users to pick the best seeds in order to maximize
2565-540: The same software bug . Only some of these bugs are security-critical and should be patched with higher priority. For instance the CERT Coordination Center provides the Linux triage tools which group crashing inputs by the produced stack trace and lists each group according to their probability to be exploitable . The Microsoft Security Research Centre (MSEC) developed the "!exploitable" tool which first creates
2622-594: The servers on the internet. Shodan reported 238,000 machines still vulnerable in April 2016; 200,000 in January 2017. ) In August 2016, the Defense Advanced Research Projects Agency (DARPA) held the finals of the first Cyber Grand Challenge , a fully automated capture-the-flag competition that lasted 11 hours. The objective was to develop automatic defense systems that can discover, exploit , and correct software flaws in real-time . Fuzzing
2679-465: The source code of the tools, the test procedures, and the raw result data were made publicly available. This early fuzzing would now be called black box, generational, unstructured (dumb or "classic") fuzzing. According to Prof. Barton Miller, "In the process of writing the project description, I needed to give this kind of testing a name. I wanted a name that would evoke the feeling of random, unstructured data. After trying out several ideas, I settled on
2736-606: The target system is needed, such as operating system version and installed network services. This information can be gleaned with port scanning and TCP/IP stack fingerprinting tools such as Nmap . Vulnerability scanners such as Nessus , and OpenVAS can detect target system vulnerabilities. Metasploit can import vulnerability scanner data and compare the identified vulnerabilities to existing exploit modules for accurate exploitation. There are several interfaces for Metasploit available. The most popular are maintained by Rapid7 and Strategic Cyber LLC. The free version. It contains
2793-457: The term fuzz." A key contribution of this early work was simple (almost simplistic) oracle. A program failed its test if it crashed or hung under the random input and was considered to have passed otherwise. While test oracles can be challenging to construct, the oracle for this early fuzz testing was simple and universal to apply. In April 2012, Google announced ClusterFuzz, a cloud-based fuzzing infrastructure for security-critical components of
2850-599: The total number of bugs found during a fuzz campaign. A generation-based fuzzer generates inputs from scratch. For instance, a smart generation-based fuzzer takes the input model that was provided by the user to generate new inputs. Unlike mutation-based fuzzers, a generation-based fuzzer does not depend on the existence or quality of a corpus of seed inputs. Some fuzzers have the capability to do both, to generate inputs from scratch and to generate inputs by mutation of existing seeds. Typically, fuzzers are used to generate inputs for programs that take structured inputs, such as
2907-478: The use of fuzzing to expose the existence of a hidden RISC core in a processor. This core was able to bypass existing security checks to execute Ring 0 commands from Ring 3. In September 2020, Microsoft released OneFuzz , a self-hosted fuzzing-as-a-service platform that automates the detection of software bugs . It supports Windows and Linux. It has been archived three years later on November 1st, 2023. Testing programs with random inputs dates back to
SECTION 50
#17329354331822964-469: The vulnerability of computer systems or to break into remote systems. Like many information security tools, Metasploit can be used for both legitimate and unauthorized activities. Since the acquisition of the Metasploit Framework, Rapid7 has added an open core proprietary edition called Metasploit Pro. Metasploit's emerging position as the de facto exploit development framework led to the release of software vulnerability advisories often accompanied by
3021-485: The whitebox fuzzer takes relatively too long to generate an input, a blackbox fuzzer will be more efficient. Hence, there are attempts to combine the efficiency of blackbox fuzzers and the effectiveness of whitebox fuzzers. A gray-box fuzzer leverages instrumentation rather than program analysis to glean information about the program. For instance, AFL and libFuzzer utilize lightweight instrumentation to trace basic block transitions exercised by an input. This leads to
3078-415: Was designed to test the reliability of UNIX command line programs by executing a large number of random inputs in quick succession until they crashed. Miller's team was able to crash 25 to 33 percent of the utilities that they tested. They then debugged each of the crashes to determine the cause and categorized each detected failure. To allow other researchers to conduct similar experiments with other software,
3135-470: Was released in April 2010, and was an open-core commercial edition for security teams who need to verify vulnerabilities. It offers a graphical user interface, It integrated nmap for discovery, and added smart brute-forcing as well as automated evidence collection. On June 4, 2019, Rapid7 discontinued Metasploit Express Edition. Armitage is a graphical cyber attack management tool for the Metasploit Project that visualizes targets and recommends exploits. It
3192-572: Was released in October 2011, and included a free, web-based user interface for Metasploit. Metasploit Community Edition was based on the commercial functionality of the paid-for editions with a reduced set of features, including network discovery, module browsing and manual exploitation. Metasploit Community was included in the main installer. On July 18, 2019, Rapid7 announced the end-of-sale of Metasploit Community Edition. Existing users were able to continue using it until their license expired. The edition
3249-602: Was used as an effective offense strategy to discover flaws in the software of the opponents. It showed tremendous potential in the automation of vulnerability detection. The winner was a system called "Mayhem" developed by the team ForAllSecure led by David Brumley . In September 2016, Microsoft announced Project Springfield, a cloud-based fuzz testing service for finding security critical bugs in software. In December 2016, Google announced OSS-Fuzz which allows for continuous fuzzing of several security-critical open-source projects. At Black Hat 2018, Christopher Domas demonstrated
#181818