GithubHelp home page GithubHelp logo

forensicartifacts / artifacts Goto Github PK

View Code? Open in Web Editor NEW
979.0 74.0 201.0 1.57 MB

Digital Forensics artifact repository

License: Apache License 2.0

Python 97.39% Makefile 0.45% Shell 1.43% PowerShell 0.74%

artifacts's Introduction

Digital Forensics Artifacts Repository

A free, community-sourced, machine-readable knowledge base of digital forensic artifacts that the world can use both as an information source and within other tools.

If you'd like to use the artifacts in your own tools, all you need to be able to do is read YAML. That is it, no other dependencies. The Python code in this project is just used to validate all the artifacts to make sure they follow the specification.

For more information see:

Contributing

Please send us your contribution! See the developers guide for instructions.

Contact

artifacts's People

Contributors

2xyo avatar ant1 avatar berggren avatar binglot avatar chb2mn avatar cugu avatar deke42 avatar destijl avatar hed-g avatar joachimmetz avatar kaiqtpi avatar karneades avatar liamjm avatar mattchurchill avatar obsidianforensics avatar ogarod avatar onager avatar panhania avatar pidydx avatar pstirparo avatar raisfathin avatar recvfrom avatar rgayon avatar roshanmaskey avatar sebastianwelsh avatar someguyiknow avatar sydp avatar timevortex avatar tomchop avatar vonnopsled avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

artifacts's Issues

Artifact package pollutes the environment.

The artifacts package installs files in the top level of site-packages which breaks any other packages installed in the same virtualenvs. It should create a single directory and install itself into it. Instead this causes a generic name like "utils" to be at the top of the import path thus masking any other such package.

⟫ virtualenv Test
New python executable in Test/bin/python
Installing setuptools, pip...done.
⟫ source  Test/bin/activate
(Test)⟫ pip install --upgrade pip 
Downloading/unpacking pip from https://pypi.python.org/packages/b6/ac/7015eb97dc749283ffdec1c3a88ddb8ae03b8fad0f0e611408f196358da3/pip-9.0.1-py2.py3-none-any.whl#md5=297dbd16ef53bcef0447d245815f5144
  Downloading pip-9.0.1-py2.py3-none-any.whl (1.3MB): 1.3MB downloaded
Installing collected packages: pip
  Found existing installation: pip 1.5.4
    Uninstalling pip:
      Successfully uninstalled pip
Successfully installed pip
Cleaning up...
(Test)⟫ pip install artifacts
Collecting artifacts
Collecting PyYAML>=3.11 (from artifacts)
Installing collected packages: PyYAML, artifacts
Successfully installed PyYAML-3.12 artifacts-20170522
(Test)⟫ python
Python 2.7.6 (default, Oct 26 2016, 20:30:19) 
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import utils
>>> utils.__file__
'/tmp/Test/local/lib/python2.7/site-packages/utils/__init__.pyc'

update documentation

per: #197

Empty value is what we decided on for default key value? We should put that in the style guide.

Improve documentation

  • describe Parameter expansion and globs
    • describe use of ** notation and **[0-9], also why not use **{2} which is closer to regexp notation
  • describe provides
  • add section about naming conventions #25
  • merge style and definitions guide: #42

Deprecate provides

Deprecate provides

Per GRR team, provides are used in interpolation dependency resolving, but provides make GRR more fragile.

  • remove provides from GRR
  • undo changes in #506 seeing this currently breaks GRR tests

Deprecate LinuxWtmp

Determine if LinuxWtmp is used by GRR deprecate this in favor more generic LinuxUtmpFiles

Artifact collector agent

Hi, how are these usually utilised? What tools consume these (apart from GRR).
Are there any stand alone agents?
TIA

Improve artifact definition specification

Done

  • Change request: #11
    • Rename collectors to sources
    • Split Registry key and value types
    • add file and path separator
  • update documentation: #36

To do

  • add tags/labels e.g. for persistence method
    • this is not going to be very useful as filter method since there are many persistence methods
    • Labels will be removed in #465
    • separate "trait" definitions might be more useful, especially if they can be pro-grammatically validated
  • Make path relative to the file system root (absolute?)
  • Change provides so that it has clear type indicators like sources
  • Define a way to specify data streams
  • have artifact names contain type information e.g "files" in "browser history files"
    • add source type to artifact name e.g. instead of ChromeHistory use ChromeHistoryFiles
  • define environment variables (path expanders)

Based on #12 there is a need to specify:

  • NTFS ADS names
  • HFS resource fork
  • extended attribute names

Improve validator

  • check for key paths starting with %current_control_set%
    • #120
    • currently non-fatal fix GRR to support CurrentControlSet
  • Warn that '%%users.homedir%%\AppData\Roaming can be replaced by %%users.appdata%%
  • Warn that '%%users.homedir%%\AppData\Local can be replaced by %%users.localappdata%%
  • enforce naming conversions
    • #25
    • add legacy indicator for GRR compatibility in legacy.yaml
  • warn about use of **
  • check for trailing whitespace
  • add check to see if GRR and plaso dependencies are broken
  • #181
  • move HKEY_CURRENT_USERS check(
    if key_path.startswith(u'HKEY_CURRENT_USER\\'):
    ) to validator
  • change validation test not to use validator tool and remove __init__.py from tools
  • check path expansion variable (#301)

https://en.wikipedia.org/wiki/Special_folder

We should rename ARTIFACT to ARTIFACT_GROUP or similar

Here's something I've seen a couple of times now, it's not obvious that the REGISTRY_VALUE is the artifact. People think they need to create a separate ARTIFACT object to hold it. In reality you only need to do this if you are grouping artifacts into a meta artifact.

ARTIFACT_GROUP
ARTIFACT_LIST
META_ARTIFACT

would probably be more intuitive names.

name: ConfickerIndicators
doc: Conficker Indicators.
sources:
- type: ARTIFACT
  attributes:
    names:
      - ConfickerWindowsRegKeys
supported_os: [Windows]
urls: ['https://www.iocbucket.com/iocs/e2903921f8b21d71dc88f34bee8b2f3491ea4656']

---
name: ConfickerWindowsRegKeys
doc: Windows Conficker IOCs.
sources:
- type: REGISTRY_VALUE
  attributes:
    key_value_pairs:
    - {key: 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\[RANDOM CHARACTERS]\"ImagePath"', value: '"%System%\svchost.exe -k netsvcs"'}
    - {key: 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\[WORM GENERATED SERVICE NAME]\"ImagePath"', value: '%SystemRoot%\system32\svchost.exe -k netsvcs'}
    - {key: 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\explorer\Advanced\Folder\Hidden\SHOWALL\"CheckedValue"', value: '0'}
    - {key: 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\"TcpNumConnections"', value: '00FFFFFE'}
supported_os: [Windows]
urls: ['https://www.iocbucket.com/iocs/e2903921f8b21d71dc88f34bee8b2f3491ea4656']

Windows version conditions do not apply for Windows 10

Some artifacts have conditions in the form of os_major_version >= X AND os_minor_version >= Y.
This fails starting with Windows 10, which can have version 10.0. A condition like os_major_version >= 6 AND os_minor_version >= 1 will fail here although the artifact applies.

One example is

conditions: [os_major_version >= 6 AND os_minor_version >= 1]

I can think of multiple solutions to this:

  • More complicated conditions like (os_major_version >= 6 AND os_minor_version >= 1) OR os_major version >= 7
  • A semantic version compare, something like os_version >= "6.1"

Change behavior %%current_control_set%%

%%current_control_set%% now maps to HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001 however this should be ControlSet001. The expansion should be used as HKEY_LOCAL_MACHINE\SYSTEM\%%current_control_set%% to match the behavior of the OS more closely.

Clarification on Wildcards in REGISTRY_KEY

Hi everyone,

this is probably covered by #23, but since I'm working on an extractor for artifacts, I'd like to understand how wildcards are used in the artifacts:

Many of the REGISTRY_KEY artifacts have a \* at the end. My understanding is that this means a subkey. This is strange, because some of the defined registry paths (e.g. the Autorun "Run"-Keys in WindowsRunKeys) clearly do not have subkeys, but still are given with a \* at the end. Although not all of them do, for example WindowsControlPanelFilePaths.

Can you clarify if a wildcard at the end of a REGISTRY_KEY path means "All subkeys" or "All values in this key" or both?

Thanks!
Demian

Artifact Sources deprecated fields

Should supported_os, conditions, and returned_types be getting removed from sources?
Comments in the code indicate they should be removed.
Documentation on style indicates they are correct.

I think ideally ArtifactDefinition.AppendSource() would create a source with all of its valid fields rather than attaching supported_os, conditions, and returned_types in the ArtifactsReader.
Also Source.CopyToDict() should return the entire Source as dict (type, supported_os if defined, conditions if defined, returned_types if defined, attributes) rather than constructing it in ArtifactWriter.

I didn't want to refactor any of this without knowing what direction supported_os, conditions, and returned_types should be going in.

Improve validation/linting

Improve validation/linting to:

  • detect multi line documentation string that does not have long docs with a white line after the first line. Also see Style Guide
  • detect duplicate paths
    • Registry keys
    • Registry values
    • etc.
  • non existent artifact names defines in meta artifacts
  • check for WOW64 missing Registry key aliases
  • detect cyclic artifact groups
  • check naming
    • artifact definitions in windows.yaml should always start with Windows
  • detect duplicate sources section?
sources:
sources:
- type: FILE

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.