...a simple, self-contained modular host-based IOC scanner
Spyre is a simple host-based IOC scanner built around the YARApattern matching engine and other scan modules. The main goal of this project is easy operationalization of YARA rules and other indicators of compromise.
Users need to bring their own rule sets. The awesome-yara repository gives a good overview of free yara rule sets out there.
Spyre is intended to be used as an investigation tool by incident responders. It is not meant to evolve into any kind of endpoint protection service.
Overview
Using Spyre is easy:
- Add YARA signatures. Per default, YARA rules for file scans are read from
filescan.yar
,procscan.yar
for file scans, process memory scans, respectively. The following options exist for providing rules files to Spyre (and will be tried in this order):- Add the rule files to ZIP file and append that file to the binary.
- Add the rule files to a ZIP file name
$PROGRAM.zip
: If the Spyre binary is calledspyre
orspyre.exe
, usespyre.zip
. - Put the rule files into the same directory as the binary.
infected
(AV industry standard) to prevent antivirus software from mistaking parts of the ruleset as malicious content and preventing the scan.
YARA rule files may containinclude
statements. - Deploy, run the scanner
- Collect report
Configuration
Run-time options can be either passed via command line parameters or via file that
params.txt
. Empty lines and lines starting with the #
character are ignored. Every line is interpreted as a single command line argument.If a ZIP file has been appended to the Spyre binary, configuration and other files such as YARA rules are only read from this ZIP file. Otherwise, they are read from the directory into which the binary has been placed.
Some options allow specifying a list of items. This can be done by separating the items using a semicolon (
;
).--high-priority
Normally (unless this switch is enabled), Spyre instructs the OS scheduler to lower the priorities of CPU time and I/O operations, in order to avoid disruption of normal system operation.
--set-hostname=NAME
Explicitly set the hostname that will be used in the log file and in the report. This is usually not needed.
--loglevel=LEVEL
Set the log level. Valid: trace, debug, info, notice, warn, error, quiet.
--report=SPEC
Set one or more report targets, separated by a semicolon (
;
). Default: spyre.log
in the current working directory, using the plain format.A different output format can be specified by appending
,format=FORMAT
. The following formats are currently supported:plain
, the default, a simple human-readable text formattsjson
, a JSON document that can be imported into Timesketch
--path=PATHLIST
Set one or more specific filesystem paths to scan. Default:
/
(Unix) or all fixed drives (Windows).--yara-file-rules=FILELIST
Set list of YARA rule files for scanning files on the system. Default: Use
filescan.yar
from appended ZIP file, $PROGRAM.ZIP
, or current working directory.--yara-proc-rules=FILELIST
Set list of YARA rule files for scanning processes' memory regions. Default: Use
procscan.yar
from appended ZIP file, $PROGRAM.ZIP
, or current working directory.--max-file-size=SIZE
Set maximum size for files to be scanned using YARA. Default: 32MB
--ioc-file=FILE
Notes about YARA rules
YARA is configured with default settings, plus the following explicit switches (cf.
3rdparty.mk
):--disable-magic
--disable-cuckoo
--enable-dotnet
--enable-macho
--enable-dex
Building
Spyre can be built for 32bit and 64bit Linux and Windows targets on a Debian/buster system (or a chroot) in which the following packages have been installed:
- make
- gcc
- gcc-multilib
- gcc-mingw-w64
- autoconf
- automake
- libtool
- pkg-config
- wget
- patch
- sed
- golang-$VERSION-go, e.g. golang-1.8-go. The Makefile will automatically select the newest version unless
GOROOT
has been set. - git-core
- ca-certificates
- zip
make
. This should download archives for musl-libc, openssl, yara, build those and then build spyre.The bare spyre binaries are created in
_build/<triplet>/
.Running
make release
creates a ZIP file that contains those binaries for all supported architectures.