Git Product home page Git Product logo

autofirm's Introduction

AutoFirm - Automatic Firmware Analysis

Data Collection

This repository is an open-source tool of AutoFirm, as well as the artifacts of our paper "AutoFirm: Automatically Identifying Reused Libraries inside IoT Firmware at Large-Scale".

The repository is organized as follows:

AutoFirm/
│ ├── README.md
│ ├── tool/
|   ├── main.py 
|   ├── scan.py
|   ├── path_search.py
|   ├── linux_shell.py
|   ├── common.py
|   ├── bin_analysis.py
|   ├── bin_process.py
|   ├── decompress.py
|   ├── filesystem.py
|   ├── regex/
│   │ ├── arch.json
│   │ ├── black_list.csv
│   │ ├── special_command.csv
│   │ ├── special_regex.csv
│   │ └── special_ver.csv
└── artifact/
  ├── firmware/
  └── library/
  └── vulnearbility/
  └── RQ/

The Autofirm/ folder is organized such that the top level directories are different splits of bench (tool, artifact).

The tool/ folder contains the source code of AutoFirm, which automatically downloading, decompressing firmware, and identifying libraries and versions, and detecting vulnearable versions. The tool/regex is a folder that contains the regex rules for identifying the firmware architecture, black list, special command, special regex, and special version. The artifact/ folder contains dataset of firmware, library, vulnearbility, and research questions for our paper.

Usage

  1. iterate vendor
  2. read vendor.json to get info (the conjunction of firmware real name and local storage name)
  3. use binwalk to extract filesystem
  4. judge if the step 3 succeed
  5. iterate the successfully extracted filesystem
  6. search the /bin and /sbin directory and get executable binary
  7. use linux file command to get the firmware architecture
  8. iterate binary of step 6
  9. use qemu to emulate and get version info
  10. write to excel named by vendor

Artifacts

License

This dataset is released under the Apache-2.0 license. You're welcome to use it with attribution.

FAQ

Are you maintaining this dataset?

We will be regularly maintaining new packages to the dataset.

How do you know these vulnerable version are correct?

Every vulnerable library version should be matched with CVE ID. Every vulnerable library version has been manually triaged by a human.

Do you accept contributions?

At the time, the repository is not accepting contributions.

autofirm's People

Contributors

sure17 avatar

Stargazers

 avatar Ben Demick avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.