A cross platform forensic parser written in Rust!

Overview

artemis

artemis is a powerful command line digital forensic and incident response (DFIR) tool that collects forensic data from Windows and macOS endpoints. Its primary focus is: speed, ease of use, and low resource usage.
Notable features so far:

  • Setup collections using basic TOML files
  • Parsing support for large amount of forensic artifacts (25+)
  • Output to JSON or JSONL file(s) (remote uploading support coming soon)
  • Embedded JavaScript runtime via Deno
  • Can be used as a library via artemis-core
  • MIT license

Checkout the online guide at https://puffycid.github.io/artemis-book for indepth walkthrough on using artemis

Quick Guide

  1. Download the latest release binary from GitHub
  2. Download an example TOML collection
  3. Execute artemis using a provided TOML file with elevated privileges
  4. Review the output
artemis -t processes.toml
[artemis] Starting artemis collection!
[artemis] Finished artemis collection!

puffycid> ls -R
process_collection

./process_collection:
692f6c76-8312-472f-8005-2a3ecd2203f9.jsonl	d97b86bb-a762-4bae-b8e8-16dad8708fa4.log	status.log
Comments
  • Linux Support and changelog tracking.

    Linux Support and changelog tracking.

    This PR adds Linux support to artemis. So far the following artifacts have been added:

    • filelisting
    • processes
    • chromium and firefox
    • cron
    • shellhistory

    The GitHub actions files have been updated to include Linux runners.
    In addition, changie files have been added to track major changes.

    Completes #1

    enhancement 
    opened by puffyCid 1
  • Add support for Linux

    Add support for Linux

    What new feature do you think would be cool to add to artemis? Right now artemis only supports Windows and macOS. Linux is a popular OS/kernel and adding support for Linux would allow users and analysts to use artemis for reviewing forensic artifacts on Linux

    Describe the solution you'd like Include support for Linux

    Minimum Requirements

    • [x] Compile under Linux
    • [x] Support parsing TOML collection format
    • [x] Port filelisting artifact
    • [x] Port systeminfo artifact
    • [x] Port processes artifact
    enhancement 
    opened by puffyCid 0
  • Consider removing unused Deno modules

    Consider removing unused Deno modules

    What new feature do you think would be cool to add to artemis? Currently artemis uses the deno_runtime crate (https://crates.io/crates/deno_runtime) to embed Deno in artemis. It works great, but it brings in the whole runtime. Even things that we probably wont ever use like deno_http, deno_kv, deno_ffi, etc.

    I think we can remove deno_runtime and just import the modules we want.

    Describe the solution you'd like Remove deno_runtime and just import the modules we want.

    Additional context The biggest disadvantage of removing deno_runtime is that it will probably prevent usage of third-party Deno modules. Since those modules may expect a function from a module we have removed. Ex: A web framework module probably expects deno_http to be available.

    In addition, removing modules will make it a little more difficult for new users to start scripting. Right now since we import the deno_runtime most/all of the Deno documentation can be referenced when scripting.

    But if we remove modules, we have to make sure we state what parts of the Deno documentation should be read.

    The advantage is: fewer dependencies and hopefully smaller binary size. For context, Deno currently makes the artemis binary size ~10 times bigger

    Modules imported by deno_runtime

    pub use deno_broadcast_channel;
    pub use deno_cache;
    pub use deno_console;
    pub use deno_core;
    pub use deno_crypto;
    pub use deno_fetch;
    pub use deno_ffi;
    pub use deno_fs;
    pub use deno_http;
    pub use deno_io;
    pub use deno_kv;
    pub use deno_napi;
    pub use deno_net;
    pub use deno_node;
    pub use deno_tls;
    pub use deno_url;
    pub use deno_web;
    pub use deno_webidl;
    pub use deno_websocket;
    pub use deno_webstorage;
    
    Deno 
    opened by puffyCid 0
  • Figure out cross compiling aarch64-apple-darwin on GitHub actions

    Figure out cross compiling aarch64-apple-darwin on GitHub actions

    What new feature do you think would be cool to add to artemis? Cross compiling using Rust is difficult. Trying to accomplish it on GitHub actions is even more difficult. Currently aarch64-apple-darwin (ARM) builds on GitHub actions are failing. I am not 100% sure why, but it might be related to cross compiling Deno.

    Artemis compiles natively on macOS ARM fine.

    Describe the solution you'd like Figure out how to get cross compiling working on GitHub actions

    Additional context This may be related to https://crates.io/crates/deno_ffi based on the runner error.
    See #22

    help wanted Deno 
    opened by puffyCid 0
  • Add support for parsing Windows WMI database files

    Add support for parsing Windows WMI database files

    What new feature do you think would be cool to add to artemis? It would be cool if artemis could support parsing the Windows WMI database files. WMI can be used as a form of persistence on Windows.

    Describe the solution you'd like Support parsing WMI database files

    Additional context The format looks pretty complex. Quick overview: https://netsecninja.github.io/dfir-notes/wmi-forensics/ libyal: https://github.com/libyal/dtformats/blob/main/documentation/WMI%20repository%20file%20format.asciidoc

    enhancement Windows 
    opened by puffyCid 0
  • Try to expose nom to the Deno runtime

    Try to expose nom to the Deno runtime

    What new feature do you think would be cool to add to artemis? One of the current limitations of the forensics parsers in artemis is that they are compiled into the actual binary. So anytime we need to update one, we have to recompile and update the whole binary. Which kind of stinks 😕.

    The Deno runtime currently can help us with this a little bit with plaintext artifacts (technically Deno can also read binary files, but parsing them is challenging). The benefit however is instead of coding a parser in Rust we can code a parser in TypeScript using the Deno platform. This allows us to make dynamic parsers (TypeScript/JavaScript) that we can update much easier and do not need to recompile artemis.

    However, complex plaintext artifacts and binary artifacts might benefit from exposing parts of nom to Deno.

    Describe the solution you'd like Expose parts of nom to the Deno runtime so users can create parsers in TypeScript

    Additional context Nom is a huge project with lots of functions, we are not going to expose them all immediately. A prerequisite for this feature will likely be a paged/stream binary reader. See #5

    This will help ensure that we do not read too much binary data from the TypeScript caller. Also V8 seems to have a raw byte size limit, if too many bytes are read it will crash. (Though it seems to handle really large strings fine, ex: if you base64 encoding the large raw bytes, V8 is ok)

    A good starting point could be:

    • [ ] Expose a paged/stream binary reader to Deno (requires #5 )
    • [ ] Expose 3 nom functions: take, take_while, take_until
    • [ ] Expose nom_helper functions
    enhancement Deno 
    opened by puffyCid 0
  • Support NTFS compression

    Support NTFS compression

    What new feature do you think would be cool to add to artemis? Currently artemis just labels files that are compressed with the builtin NTFS compression types. It would be cool if it could decompress the data.
    This is primarily useful when hashing files and reporting file sizes.

    Describe the solution you'd like Support decompressing NTFS compressed files. Might be dependent/solvable by #6

    Additional context NTFS compressed files are kind of finicky to deal with. For example, if explorer.exe is compressed with the builtin NTFS compression and we want to answer the question "How big is the file?". Do we want the compressed size or decompressed size? But if someone copies the file to a different location/drive, Windows decompresses the file and now the size is different.

    NTFS: https://en.wikipedia.org/wiki/NTFS (File Compression) libyal: https://github.com/libyal/libfsntfs/blob/main/documentation/New%20Technologies%20File%20System%20(NTFS).asciidoc#9-compression

    enhancement Windows 
    opened by puffyCid 0
  • Support lzx compression on Windows Overlay Filter (WOF) data

    Support lzx compression on Windows Overlay Filter (WOF) data

    What new feature do you think would be cool to add to artemis? Currently artemis supports decompressing Windows Overlay Filter (WOF) compressed data smaler than 2GBs.
    WOF actually supports four (4) compression types.
    Artemis supports all of them except the lzx compression type.

    Describe the solution you'd like Support the lzx compression on WOF data. Might be dependent/solved by #6

    Additional context Quick review of WOF: https://github.com/wbenny/woftool NTFS with WOF: https://en.wikipedia.org/wiki/NTFS (System compression) Microsoft blog: https://devblogs.microsoft.com/oldnewthing/20190618-00/?p=102597

    enhancement Windows 
    opened by puffyCid 0
Releases(v0.1.0)
Owner
null
A cross-platform application for custom presence on Discord.

Discord Presence ⚠️ macOS is NOT supported. This is due the package for setting the presence being broken on mac. It may work for some people (only wh

Tofix.js 2 Dec 30, 2022
An `abilists` parser crate for Rust

An `abilists` parser crate for Rust

Erich Gubler 24 Aug 28, 2022
lightweight and customizable rust s-expression (s-expr) parser and printer

s-expr Rust library for S-expression like parsing and printing parser keeps track of spans, and representation (e.g. number base) number and decimal d

Vincent Hanquez 5 Oct 26, 2022
A zero-copy parser for the contents of the __unwind_info section of a mach-O binary.

A parser for Apple's Compact Unwinding Format, which is used in the __unwind_info section of mach-O binaries.

Markus Stange 10 May 31, 2022
A simple cross-process locking API

A simple cross-process locking API

Tabnine 33 Dec 20, 2022
Display strings in a safe platform-appropriate way

os_display Printing strings can be tricky. They may contain control codes that mess up the message or the whole terminal. On Unix even filenames can c

Jan Verbeek 19 Dec 19, 2022
Erlang Language Platform. LSP server and CLI.

Erlang Language Platform (ELP) Description ELP integrates Erlang into modern IDEs via the language server protocol. ELP was inspired by rust-analyzer.

WhatsApp 31 Aug 7, 2023
Efficent platform for inference and serving local LLMs including an OpenAI compatible API server.

candle-vllm Efficient platform for inference and serving local LLMs including an OpenAI compatible API server. Features OpenAI compatible API server p

Eric Buehler 21 Nov 15, 2023
A highly modular Bitcoin Lightning library written in Rust. Its Rust-Lightning, not Rusty's Lightning!

Rust-Lightning is a Bitcoin Lightning library written in Rust. The main crate, lightning, does not handle networking, persistence, or any other I/O. Thus, it is runtime-agnostic, but users must implement basic networking logic, chain interactions, and disk storage. More information is available in the About section.

Lightning Dev Kit 850 Jan 3, 2023
A language server for lua written in rust

lua-analyzer lua-analyzer is a lsp server for lua. This is mostly for me to learn the lsp protocol and language analysis so suggestions are helpful. T

null 61 Dec 11, 2022
Opensource diagnostic software for Daimler vehicles, inspired by Xentry and DAS, written in Rust

OPENSTAR An opensource diagnostic application for Daimler vehicles inspired by DAS and Xentry. Some of the work here is based on OpenVehicleDiag If yo

Ashcon Mohseninia 21 Nov 20, 2022
Benchmarking web frameworks written in rust with rewrk tool.

Web Framework Benchmarks Benchmarking web frameworks written in rust with rewrk tool.

null 103 Dec 8, 2022
Yet another ROS2 client library written in Rust

RclRust Target CI Status Document Foxy (Ubuntu 20.04) Introduction This is yet another ROS2 client library written in Rust. I have implemented it inde

rclrust 42 Dec 1, 2022
A little bit fast and modern Ruby version manager written in Rust

A little bit fast and modern Ruby version manager written in Rust Features Pure Rust implementation not using ruby-build Cross-platform support (macOS

Takayuki Maeda 510 Jan 5, 2023
Music bot written in Rust

Akasuki What is Akasuki? Akasuki is a simple discord music bot written in rust. Highlights Select your music using discord's new select menu feature,

Forbidden A 0 Dec 19, 2021
A Discord bot for sending GeoGuessr challenge links that uses the GeoGuessr API written in rust.

GeoGuessr-bot-rs This is a simple implementation of a discord bot that send GeoGuessr-challenge links on demand. Features: Slash-commands Lightning-fa

Luukas Pörtfors 6 Nov 18, 2022
Some tools for streaming frames to rpi-rgb-led-matrix using ZeroMQ, written in Rust.

led_matrix_zmq Some tools for streaming frames to rpi-rgb-led-matrix using ZeroMQ, written in Rust. This repository includes: Rust client and server l

Dan 2 Sep 6, 2022
A gui api explorer written in Rust.

Zzz - GUI Api platform Pronounced "Zees"; as in "catching some Z's". A pun on RESTful APIs. example URL: https://jsonplaceholder.typicode.com/todos/ T

Ryan Blecher 0 Nov 11, 2021
A variation of the solana helloworld program example with a client written in Rust instead of Typescript

Simple Solana Smart Contract Example This repository demonstrates how to create and invoke a program on the Solana blockchain. In Solana the word prog

zeke 56 Dec 26, 2022