  The automatic detection of software vulnerabilities is an important research
problem. However, existing solutions to this problem rely on human experts to
define features and often miss many vulnerabilities (i.e., incurring high false
negative rate). In this paper, we initiate the study of using deep
learning-based vulnerability detection to relieve human experts from the
tedious and subjective task of manually defining features. Since deep learning
is motivated to deal with problems that are very different from the problem of
vulnerability detection, we need some guiding principles for applying deep
learning to vulnerability detection. In particular, we need to find
representations of software programs that are suitable for deep learning. For
this purpose, we propose using code gadgets to represent programs and then
transform them into vectors, where a code gadget is a number of (not
necessarily consecutive) lines of code that are semantically related to each
other. This leads to the design and implementation of a deep learning-based
vulnerability detection system, called Vulnerability Deep Pecker
(VulDeePecker). In order to evaluate VulDeePecker, we present the first
vulnerability dataset for deep learning approaches. Experimental results show
that VulDeePecker can achieve much fewer false negatives (with reasonable false
positives) than other approaches. We further apply VulDeePecker to 3 software
products (namely Xen, Seamonkey, and Libav) and detect 4 vulnerabilities, which
are not reported in the National Vulnerability Database but were "silently"
patched by the vendors when releasing later versions of these products; in
contrast, these vulnerabilities are almost entirely missed by the other
vulnerability detection systems we experimented with.
