Automated Vulnerability Detection in Source Code Using Deep Representation Learning
Organizations: Computer Science University of Cyprus Nicosia, Cyprus · Computer Science and Engineering Texas A&M University College Station, TX, USA
Abstract
Each year, software vulnerabilities are discovered, which pose significant risks of exploitation and system compromise. We present a convolutional neural network model that can successfully identify bugs in C code. We trained our model using two complementary datasets: a machine-labeled dataset created by Draper Labs using three static analyzers and the NIST SATE Juliet human-labeled dataset designed for testing static analyzers. In contrast with the work of Russell et al. on these datasets, we focus on C programs, enabling us to specialize and optimize our detection techniques for this language. After removing duplicates from the dataset, we tokenize the input into 91 token categories. The category values are converted to a binary vector to save memory. Our first convolution layer is chosen so that the entire encoding of the token is presented to the filter. We use two convolution and pooling layers followed by two fully connected layers to classify programs into either a common weakness enumeration category or as ``clean.'' We obtain higher recall than prior work by Russell et al. on this dataset when requiring high precision. We also demonstrate on a custom Linux kernel dataset that we are able to find real vulnerabilities in complex code with a low false-positive rate.
Figures & tables
| CWE ID | CWE Description | Label |
|---|---|---|
| 120/121/122 | Buffer Overflow | BUFFER |
| 119 | Improper Restriction of Operations within the Bounds of a Memory Buffer | BUFFER |
| 476 | NULL Pointer Dereference | MEMORY |
| 469 | Use of Pointer Subtraction to Determine Size | MEMORY |
| 20, 457, etc. | Improper Input Validation, Use of Uninitialized Variable, Buffer Access with Incorrect Length Value, etc. | NUMERICAL |
Software Vulnerability Detection
Software vulnerability detection identifies insecure code, pinpoints weaknesses, and helps developers validate or prevent exploitable bugs.
See all 139 papers