Video summary
Velociraptor is introduced as an advanced visibility tool designed by Inpoint, enabling centralized monitoring and rapid response to network incidents through a server that manages multiple client instances. The tutorial guides users through setting up both Linux-based servers and clients using pre-compiled binaries from GitHub, with a strong emphasis on security best practices such as verifying binary integrity via GPG keys before deployment. While the software can function in various modes depending on execution context, production environments require careful resource management to handle the scale of collecting data from hundreds of simultaneous clients without degrading network performance or system stability.
Once operational, the platform offers powerful capabilities for forensic analysis and threat hunting through features like VFS, which allows administrators to query remote directory structures and recursively download specific files such as SSH known hosts for local investigation. Users can leverage Hunt Manager to create complex queries using Velociraptor Query Language (VQL) filtered by labels or operating systems, while artifacts serve as flexible detection mechanisms that collect evidence via regex patterns or execute remediation scripts without manual coding. To prevent network overload during large-scale operations, the system includes resource control settings that limit CPU usage and bandwidth per client, ensuring stable performance even when running intensive scans across a distributed fleet of devices.
Beyond active hunting, Velociraptor provides essential tools for long-term intelligence gathering through its Monitoring module, which tracks system states over time rather than just current status to identify trends before or after an attack occurs. This is complemented by Notebooks that facilitate collaborative artifact creation using Markdown and VQL, allowing teams to test queries against specific user contexts and integrate validated scripts into ongoing workflows. The Host Information module further supports deep investigation of individual machines for quarantine decisions or remote data acquisition, while the Virtual File System displays historical changes over time to provide a comprehensive view beyond immediate hunting activities.
The video concludes by highlighting that Hunts, Host Information, and Client Events form the three core pillars necessary for effective security operations, though users are encouraged to explore additional artifact definitions available on official documentation sites rather than relying solely on defaults. It is important to note that the demonstrated setup serves primarily as a testing and learning environment; organizations planning production deployment must carefully evaluate factors such as cloud provisioning needs and virtual machine requirements before rolling out these tools in a live setting where security posture and operational scale are critical considerations.
Read the full video transcript
welcome back everyone today we're going
to talk about Velociraptor an inpoint
visibility tool this tool lets you set
up a server and a bunch of clients that
are on your network and then you can
monitor and respond to incidents on each
of those clients through a centralized
server so imagine that you had a network
with 500 clients you want to be able to
Monitor and respond to network events or
maybe Network attacks this lets you
basically create a centralized server
that can very quickly scan through all
of those clients okay so today we're
going to get started with setting up
Velociraptor both the server and the
client and then start to practice with
Velociraptor special features this setup
is not necessarily something that you
would want to roll out in production
what I'm doing today is specifically so
you can start playing with the features
and understanding the Velociraptor
language how to get started thinking
about Velociraptor before you actually
implement it in your network in a more
secure way now we have Velociraptor at
velo.com is the blog and then we have
the velex Velociraptor GitHub repository
and this is where all of the current
code is going on it's actively
maintained and we're most interested in
the releases section go ahead and click
on that and if we look under the
releases I'm going to use
0653 so whatever the most recent version
is at the time that you're downloading
this I am installing both both the
server and the client as a Linux system
so I need to get the Velociraptor
0653 or whatever the most recent version
is Linux amd64 this is for my server and
my client are both going to be running
Linux if you have a Windows system
you're probably going to want the
windows AMD 64 with the newest version
if you're on Mac OS you probably want
Darwin you also want the Sig file so
whichever buying AR you download make
sure you also get the file with the same
name that ends in
sigsig that's the signature file so I
already have the pre-compiled
Velociraptor binary downloaded and I
have its corresponding signature file
now to get started I'm on my server
right now I have a virtual machine I
call it suspect workstation but I have a
virtual machine that's running as my
client and I have the Velociraptor
binary the same binary downloaded to the
client the interesting thing about
Velociraptor is that one binary can be
both the client or the server it just
depends on how you run it we're still at
our our server so I'm going to open up
bash here so if I do LS I can see my
binary that I've downloaded and I have
the signature file that I've downloaded
the first thing I need to do after
downloading Velociraptor is to verify
that it is the correct binary so the way
we can do that is to do gpg D- verify
and then I want to verify the Sig file
so gpg D- verify and then
Velociraptor do siig press enter and
then it'll say assuming sign so it kind
of found that signature was made using
RSA key but I don't have that key and
can't check the signature because no
public key was found this is because I
have not imported this key yet so the
next thing we can do is copy that key
and then I can type gpg D- search keys
and then just paste that key directly in
there and I should be able to find it
and then data source from keys. openpgp
org is what I have configured
Velociraptor team um so that key looks
correct and I would want to go and uh
confirm this and I already have
confirmed that that's the correct one I
want to enter the number one and then
now I have imported the Velociraptor
teams key so now I can go back to our
previous command gpg D- verify and then
Velociraptor doig hit enter and then
assuming the signed data is in the
binary file so we're actually checking
the binary file using this key good
signature and the key is not certified
or trusted because you know I'm not 100%
sure that's from them but I know whoever
owns this key is also the one that
signed that so that basically means that
the binary is correct if I trust that
key now why is that important
understanding that this binary is the
real binary that the developers want you
to have is important because you are
going to be pushing this out to
basically all of the important clients
on your network so you don't want to
push out a binary that might be
malicious or somebody might have
attached a Trojan to or something like
that we need to verify our binaries
every single time we download the next
thing I need to do in Linux I don't have
permission to actually run this yet um
you can kind of tell by the coloring
here but uh if we do ls- lha I can see
that I have read and write permissions
but I don't have execute permissions on
the binary so if I want to run it on my
system I need to change the permission
to be able to run it so I'm going to run
pseudo
chod plus X and that basically means
plus execute and then Velociraptor
binary hit enter give the password and
then if I do LS in Linux it turns green
so you can kind of see that you have
permission to run this or it is
executable now so now we can run it I
can just do do/ Velociraptor and I used
tab to do tab completion so I don't have
to type all of that out and then if I
want to check that it works I can use
the dashh switch at the end so the
binary plus DH if I can run the help
menu that means the binary at least can
run and we see that it can run if you
see that there's a lot of commands uh
related to Velociraptor and this is what
took a while for me to get my head
around Velociraptor has many different
commands a one binary can do a lot of
different tasks it can be your server it
can be your client you can run it just
from the command line to do kind of like
a query you can run it to make a gooey
interface kind of a web interface to
deal with and that's what we're going to
be doing today you can essentially run
everything just from the command line or
you can run everything from a user
interface I think it's easier to get
started using the user interface first
understanding how that works and then
the command line version makes a lot
more sense the most important thing that
we need to run is the config and
whenever we start the first time we have
to generate a new configuration so I
have my binary I want to run config and
then I want to generate that
configuration what that configuration
will do is set the configuration for the
server and the client for us so we don't
have to manually create those
configuration files
I'm going to run/
Velociraptor and then
config generate
dasi the Velociraptor binary I want to
create a config using config generate
and I want it to be interactive so I'm
going to use- I and then they give us
this menu welcome to the Velociraptor
configuration generator I'll be creating
a a new deployment configuration for you
which is very handy what OS will a
server be deployed on well our operating
system for the server server that we are
using is Linux now if you're using
Windows or Darwin then you can just hit
up or down to select the operating
system we're going to be using Linux
here the path to the data store
directory now the data store directory
is a really interesting feature of
velociraptor instead of using a database
they keep everything in directories and
then they kind of have small databases
around but basically they have a flat
file system structure you don't actually
have to create a special database to be
able to use use Velociraptor and keep
all of its data store if you have a lot
of systems in your network you're going
to be collecting a lot of data whenever
you're doing your hunts or trying to get
artifacts from those systems so you want
to make sure that you're saving this
data to a place with a lot of storage
I'm only dealing with one client right
now so I'm pretty sure I can handle my
computer can handle it so I'm going to
be putting it in the opt location but
really in a real deployment you'll
either be on a cloud service and then
you'll have cloud storage so it probably
won't be an issue or you'll want to make
sure that whatever your directory you're
saving your data store to has enough
space for all of the artifacts you're
going to be collecting I'm going to save
it into opt Velociraptor because I'm not
expecting a large amount of data since I
only have one client so that I've set
the data store directory to opt
Velociraptor I'm going to copy that and
I'm going to manually create it in
another uh command line so pseudo mkdir
and then put in the directory exact L
the way that it was so now I've created
the opt Velociraptor directory with root
permission so I'm going to go ahead and
set my user to own that directory so I
don't have access problems later so I'm
going to use pseudo CH own- R which just
means recursive and then my user is
Joshua and then SL opt
Velociraptor okay so now I have a new
directory created and my user account
owns it so I can actually access it so
the next option that we have is whether
we want to use a self-signed SSL
certificate automatically provision
certificates with let's encrypt or
authenticate users with SSO SSO can be
something like Google single sign on
GitHub single sign on but you actually
have to be deploying it out to a
publicly accessible system to be able to
have call backs from whatever your SSO
is let's encrypt is similar it only
generates certificates for you if you
are have a public domain name so you
have to register a public domain name
your IP has to be public and then let's
encrypt has to connect to your server to
actually generate those certificates
these are more like real deployments out
into your network or out onto the cloud
we are going to be using the self-signed
SSL because we just want to get this
running so we can practice with it so
just hit enter for self-signed SSL and
then what's the public DNS name of the
master front end and for that I'm just
going to keep Local Host which kind of
cut off here but you can see Local Host
is is the default so the public DNS name
I'm keeping Local Host for now front end
port to listen on so by default This
Server will listen on 8,000 and that'll
be the communication for all the clients
will basically talk on Port 8000 to your
server uh so we're just going to keep
the default port for the guey to listen
on and it's 8889 by default I'm going to
go ahead and click enter and are you
using Google domains. DNS no go username
or email address to authoriz I'm going
to use just admin again if this is
publicly accessible in any way do not
use something weak like admin and a weak
password because this admin interface
will allow anyone to be able to run
hunts or even run commands on all of
your clients using this interface
someone could take over your entire
network and run arbitrary commands from
this the password for that and then
it'll ask you again goe username or
email address to authorize and I'm just
going to hit enter because I only want
admin then we have the Velociraptor logo
generating keys and path to the logs
directory and by default it's going to
be opt Velociraptor logs that's okay for
our uh implementation here but I would
change that if it was actually
production to um some sort of log parser
so I'm going to go ahead and keep that
so hit enter and then I'm going to
switch back over to my other command
prompt and create a new directory so MK
kd/ opt Velociraptor and logs just to
make sure that those directories are
created and I don't have issues later so
now inside the op directory we have one
directory called Velociraptor and then
under Velociraptor we have another
directory called logs and that's just
creating kind of the framework for
Velociraptor to run next where should I
write the server config file and by
default it's server. config yaml go
ahead and hit enter I'm going to keep
that and then it also creates the client
config f F clientconfig yl so go ahead
and enter in that directory we have two
new files and these are generated from
everything that we just selected so this
is by far the easiest way to get started
is just generating a new config file in
the client config yaml we have some
information about the Velociraptor
version and the Go version that was used
to compile this and we have server URLs
and I have Local Host 8000 for the
server URL that is not necessarily true
because our client is working on a
different I IP address so instead of
local host for the client I'm going to
go ahead and enter the serers IP address
for my system this suspect workstation
virtual machine is going to be my client
and it's going to connect back to my
Velociraptor server on IP address 17216
037 okay so we have some certificates
here this is everything that it's the
client is using to be able to connect
back to the server and validate we want
to make sure that we protect both the
client config yaml and the server config
yaml because they do have certificate
information and connection information
so the next thing we want to do is copy
our client config to our client now
there's lots of different ways you can
push this out in a production
environment you would package up this
kind of client and then install it on
all of your clients and it would already
have its config here I have my suspect
workstation I'm just going to drag and
drop because this is a virtual machine I
can just kind of do that and it'll copy
it over and then I want the client
config in the same directory just to
make it easy to execute so now we have
our server config and our Velociraptor
binary that's been verified we have our
client config moved to our client and we
have the Velociraptor binary also on our
client that's all we need to kind of get
started so the next thing I'm going to
do is actually start the server and I
can start the server in lots of
different ways but I'm going to start it
with the guy interface and this is
probably the easiest way that I found to
kind of get started so we have our
Velociraptor binary and then I want to
do --c config because I want to tell it
to the config that I want to use and the
config that I want to use is server
config.yml and then I want to run the
graphical user interface so GUI so now
if I hit enter it's loading the config
file from server config yaml that looks
good it's checking the data store
starting local Services looking for all
the uh artifact plugins all of that is
just starting up the local server you
notice it also opened up a window in
Firefox and says security risk ahead
that's because I have a self-signed SSL
certificate so that could be a type of
attack but I know that I just did that
so I'm going to go ahead and go to
Advanced and then go to accept risk and
continue do you want to go to the
website yes okay so whenever you get
everything running you should see the
Velociraptor logo so if we go to home we
have information about our server so
server status CPU and memory uation
currently connected clients if you have
no clients connected there's not really
much to see so let's go ahead and go
over to our client workstation and here
if I do LS
lha we can see that the Velociraptor
client I don't have execute permissions
so I have to do the same thing pseudo
chod plus X
Velociraptor it turned green so we can
basically run it so I'm going to run the
same command for the client to start up
the the client it's slash Velociraptor
and then for the configuration I want to
do D- config config and then client
config yaml and then instead of saying
GUI I want to run client and then- V
what this will do is we have the
Velociraptor binary we have our config
for the client config that basically
connects back to our server and we
basically report back to the server and
also look for jobs if it needs to run
anything we are running this as a client
so it'll basically run in the background
um it won't pop up a GUI for the client
or anything like that and and then the
d-v just means that it will be verbose
in the output so we can actually see
what's going on if you don't use- V for
the client then nothing will print out
to the screen and you'll just see
reports back at the server which is fine
but if we're testing we really want to
see what's happening on the client so I
want to keep that- V for testing
purposes so the first thing that
happened is we loaded the con uh client
config file but then loading right back
from Etc Velociraptor right back yo we
didn't have permission to do that
because we're not running an as an
elevated privilege user or pseudo so
we're going to clear that out we're
going to run that command again with
pseudo and what this will do is give
veloc the Velociraptor binary root
privileges right so it'll give it top
privileges to be able to run all sorts
of different commands on the system so
this one looks a little bit different
how we have loading config from client
and then we were able to uh get right
back from yaml uh starting crypto
starting notification service
starting query execution so it did run a
couple queries and then here's the
interesting thing your first client has
to enroll itself so whenever it enrolls
itself if we go back to the interface we
should see this is where it enrolled
itself so now we have one client here
and we have one connection on the uh
interface because it did successfully
enroll itself whenever we go through you
would not see any of this if you did not
use the dash V or the verb B command for
the client so all of this is really
useful to be able to make sure that we
are actually making a connection to our
server that's pretty much all you have
to do on the client side we know that
this is working if our currently
connected clients actually went up so we
expect it to be at least one because we
do have a connected client how do we
actually start interacting with this
system and I found this guy interface to
be a little bit confusing because it's
designed for you know a 10,000 clients
right right you should be able to use
this interface to filter through 10,000
clients so it's not set up like a normal
digital forensics tool where we're
looking at one system in depth it's
really designed for Mass client scanning
it is a little bit hard to get used to
in my opinion so the first thing that we
want to do client's list is not on the
left side like you would normally kind
of expect the only thing you can do with
clients is actually search clients at
the top or there's this drop- down arrow
where we can show all or recent host so
if we just do show all then we see our V
client that is the one that we just
started our client on okay that's fine
and you notice that whenever we select
show all uh we type all into the search
menu and it will also show us all so you
can either select the the down menu or
just type all and you'll get every
client that you have available now since
we see our client we have the client ID
we have its host name uh fully qualified
domain name and then its operating
system system version so it is reporting
back as Linux Mint 21 we also have
labels if you click on the client then
we get kind of like a detailed client
page specifically the first scene the
last scene last scene IP address labels
are currently empty the operating system
and architecture so not a lot of
information but you can add more client
metadata if you know about it and these
are just any custom values so I could
say for example I don't know if I would
necessarily do this but user uh defer
science I don't know
right you can add any custom met
metadata that you want to this
particular client one of the most
important things to do though probably
more important than even metadata is to
add labels so we can do a lot of
different search filters with labels and
whenever you get a lot of clients on
your network having them labeled helps
to organize them so for example I might
want to organize something by front desk
sales it EXE itive something something
like that and then those labels I can
specifically filter out and not query
everything in my network to make a label
we can just click on this kind of label
icon at the top it looks like a tag we
can either select a label which we don't
have any created yet or add a new label
this is for Linux so I'm going to go
ahead and give it a label of Linux and
add it and I'm also going to give it a
label of I don't know we'll call it Dev
for
development Okay add it so now we have
two labels here right so so what I can
do is instead of selecting all I can
type label and then it actually
autocompletes what labels I might want
to use it could be Dev it could be Linux
and then if I select Linux then this is
all of the Linux systems that I have as
clients right now think of everything
you do in Velociraptor as scale you want
to keep everything like very filterable
and keep the amount of machines that
you're working on as small as possible
you can set off a very large job for
everything in your network and then you
might crash your network because you're
requesting just massive amounts of data
from every single client think about how
you can pair that down to the smallest
form possible maybe I only want to run
certain things on Linux clients or only
for the dev Team all right so now we
have our client uh it's been labeled
Linux Dev we have some custom metadata
here and we can do SE searches and
filters based on all of this right let's
go through uh this interface a little
bit you notice it kind of went down to
the host information section
automatically so let's look at
interrogate interrogate basically just
queries the client for basic information
again so if the IP address updated maybe
the version number changed or something
like that you can see that nothing
really updated except last seen at is
now updated interrogate basically just
gets the information that you see here
if you need to update it for some reason
just click that next is VFS and this is
interesting whenever you want to focus
on a specific system system so this is
the virtual file system we are on a
Linux system now so NTFS probably isn't
going to help us too much registry is
not going to help us these are for
Windows so we want to click Auto and
then you see that there's nothing there
but if you click the uh open folder icon
this will actually go out and query the
system for its directory structure now
this isn't just all of the directory
structure we don't want to query
everything because it's going to take a
long time what we want to do maybe is
query for example home so the home
directory structure we've opened that
now we can query it again and get the
next next level or we can do a recursive
query and this this is recursive
download where we're actually
downloading that directory to our server
I wouldn't recommend this unless you
really know what you're doing and you
need that directory what I would do is
recursive query and what that will do is
go through home and then you see now we
have client and then we have everything
under client because we searched it
recursively so now we can just kind of
scroll through here and see uh for
example maybe we're examining known
hosts for SSH we might be able to see if
there's something uh interesting there
I've clicked on known hosts you can see
that we do have timestamps if I click
collect from client then it's going to
download that file to my local server to
the server that I'm using this on and
then I can look at the text View and I
can look at my hex view I can scroll
through using the the VFS feature I can
scroll through and look at directory
structures and then pick specific files
out of a remote client now remember this
is not on the server this is the server
connecting to the client saying give me
your directory structure and then
reporting that back and then I found a
file collected that file from the uh
client system and then downloaded that
and now I have a copy on my system
locally so if I'm trying to collect
files from a system I can bring them in
locally and then I can analyze them
using any digital forensics tool that I
that I want now collected if I click on
collected we can see that we've been
creating a log of different things we've
listed directories listed directory and
then download file we basically have a
log of all of that information so
uploaded files we have the known hosts
file and where it's currently located
inside our VFS path clients uh
collections uploads autohome client. SSH
known hosts so let's go ahead and open
up opt Velociraptor and just see what's
in here we have our kind of server
artifacts our log files we have our
config clients and then client idx and
then Access Control lists this is mostly
server stuff except clients let's go
into clients we have our Collections and
then we have pea uploads Auto home
client SSH known host okay so we have
our known host file that we downloaded
this is the full path to it but it's
also the full path to it on our server
right now so inside here on our local
system which is our server we actually
have the real known hosts file so
whenever you're doing a download from
the client you are actually downloading
the file from the client to your server
now imagine these were each like one gig
files and you were collecting that from
500 clients at the same time if you're
trying to collect all of that data at
the same time you're going to slow down
your network and some problems so this
is what I mean by thinking about scale
you're actually downloading those files
from your clients consider how the
impact that's going to have on your
remote network if we go to collected we
can basically see what has been
collected from the system this is
basically an activity log of that
particular client here we have the
option to quarantine host quarantine
host currently only works for Windows
systems but basically it's running a
script whenever you know that something
has been infected or infiltrated or
whatever it is and you want to
quarantine that you can click this
button to run your quarantine procedure
on that system whatever that procedure
is that's up to you I don't have one
configured for Linux it comes default
with one configured for Windows but not
for Linux all right so quarantine just
basically runs an automated script think
about what your quarantine procedure
would be whenever you find an infected
system or a hacked system uh going to
overview overview is basically just the
first page that we see we have vql drill
down and vql is the query language that
Velociraptor uses it's kind of like SQL
except a little bit easier you kind of
mix local commands with SQL um we'll
talk more about that in a second and
I'll actually show it and then one of
the most interesting things um I'm
logged in as an admin account right now
you can also click on shell and then run
shell commands for the remote system so
if I do if config uh for bash Powershell
is for Windows bash is basically for
Linux and then VQ ql is the query
language um if I run let's say this bash
command launch it it's running now on
the client and then if I click the
eyeball then I can see the results from
that so it has two interfaces and its IP
address currently
is26 and that's what I expect so this is
why I say you definitely want to check
your binaries don't run this publicly
accessible because if anyone can
intercept this traffic if anyone can get
your admin credentials they can execute
remote commands on all of your clients
at the same time this is really
dangerous but it's also extremely useful
for incident response so from the
homepage I have for example the
currently connected clients I've been
dealing with vooc client the entire time
that's our remote um that's our virtual
machine client you can see that
sometimes vlo client looks like it's
down I find this is totally normal the
next option down is the hunt manager it
has a little crosshairs basically what
this does is lets us run a query across
all all of our connected clients so if
we want to create a hunt this is kind of
the core of where everything is going on
press the plus sign and then the hunt
description let's say I want to find
that jpeg image on our client so I'm
going to do find jpg now this is going
to run across all of the clients that I
select include condition run everywhere
or match by label so for example I could
match by label Dev or Linux let's do
Linux uh label so this is where the
power of label comes in at if I have
something like like sales and I have a
specific attack that's going after our
sales department I can just do hunts
against our sales department or against
our finance team uh we also have our
exclude condition so we can match by
label maybe I don't want any of these
hunts going through Dev make sure you
are labeling and it will really help you
filter down with your hunts or you can
of course do run everywhere or select by
operating system so operating system
included Linux in this case but it
really could be all but I'm going to
specify Linux as the operating system
okay so the estimated affected clients
are one again this is basically here
just to show you how much of an impact
you're going to have on the network so
if you're planning on downloading files
from each of these clients if it's one
client it's probably not going to hurt
the network too much if it's 10,000
clients and you're downloading a very
big file it's going to be a lot of space
uh on your server and it's going to be a
lot of bandwidth so one client we'll
just go ahead with that uh and also the
expiration time hunts do not finish they
keep running until they expire and the
idea behind this is if you have a very
large Network maybe even in different
time zones then people are going to be
putting clients on and off of the
network over time you can basically set
this hunt to expire at a specific time
and it will try to connect to any client
see if the query has already been run
for that client and if not then run this
query against that client so what this
lets you do is you can set this hunt to
run for like a week and then what if
somebody has been on vacation for an
entire week and then they come back the
next week well their computer didn't get
queried you get all of the clients that
you get during the active time and then
it will stop you can always reset it and
do it again later if you want to next
select artifacts artifacts we haven't
really talked about yet but this is the
core of velociraptor artifacts are these
scripts that do some particular action
related to your invest vation or data
collection or information gathering
these scripts are included with
Velociraptor but there is a whole
artifact exchange where people upload
custom scripts that they have run so for
example quarantine a lytic host using IP
table rules so this is actually a Linux
remediation quarantine for rule that you
could just download and install directly
in your Velociraptor rule so this
artifact exchange is excellent and very
active we have the default artifacts
available here and the one that I want
to look at is for Linux search file
finder so the naming convention here is
the operating system program that it's
related to and then file finder so under
that we have linux. s. authorized keys
and that will download your authorized
keys from clients Linux search file
finder just is a FAL finder for Linux so
we'll click on that so we have a
performance note here we have some
instructions when we would use this
thing and then different configur ations
like how we can actually configure this
I find this to be kind of useful but the
description I don't see is extremely
useful you kind of have to play around
to figure it out okay and then we
actually have the code that does the
thing so sometimes I find the code to be
a lot more enlightening than the
descriptions itself in a hunt you can
select multiple artifacts that you want
to collect or analyze at the same time
so for example if I also wanted to see
Linux SSH private keys I can just select
that and then they both turned blue and
then I can configure both of them how I
want to run them during the hunt to
deselect them just click it again and
then it will turn white and um whatever
ones are blue are the ones that you've
actually selected so next we go to
configure parameters now in the search
file finder we can't just run it like it
just doesn't work directly you need to
click it and then you have the option to
configure how you want to search or
whatever options are for that artifact
so what I'm going to do is remove the
search files glob table this basically
lets you search for several different
patterns at the same time just by adding
additional pluses and then putting your
search patterns here I'm going to close
that because I only want to search for
one thing and that is slome starstar
star. jpig now what the heck do all
those stars mean we're using something
kind of like a regular expression where
if you know regular Expressions star
means match anything and if I do star-
jpeg I mashing anything that ends with
JPG so it basically is returning
anything with a JPEG extension now what
to the other stars mean SL slome is the
home directory that you normally see in
Linux environments and then slash star
star that means search this area
recursively I don't know my client's
home user name so for example in my
client I'm looking in the home directory
and I don't necessarily know my client's
name of this folder so I need to use
star star to just look in every single
folder in this directory and then it
will also look in subdirectories as well
well what's in the subdirectory desktop
is there and inside desktop is our
evidence. jpg so I don't know the name
of this file I do know the extension but
I don't know the name of the client
folder like what their username is
necessarily so what that search lets me
do is search in the home directory of
the client and then do a recursive
search in the home home directory for
any name that ends with JPG okay that's
a little bit about regular Expressions
here so if you're searching files glob
it's just searching for one file if
you're searching several files then use
the glob table and then just hit the
plus sign and then add your searches one
line at a time here you can also set up
a Yara rule if you're using Yara if
you're more comfortable with that and
then uh we have the option to upload
file and that means once I find this
image am I going to upload it to the
server so we're going to select that
because yeah I want to upload that image
to the server just to make sure that I'm
finding whatever it is that I'm supposed
to find and then you know I come from
forensic side so I always want to
calculate hashes and then we have some
other filters more recent than modified
before just using the file system
information uh file system timestamps
for their modified and more recent
exclude paths so proxis run snap this is
um places that we want to exclude in a
Linux environment normally you don't
want to search through proc for files or
CIS or run or snap actually so yeah
local file system only so we don't want
to search any like external mounts so I
would keep this on local file system
only unless you think that it's on an
external mount on your client and then
one file system so if your client maybe
has you know an ext4 main partition and
then it has you know NTFS on an external
partition do we actually want to go look
in the other place if you only want one
then you select that if you don't select
that it'll just search everything and
then do not follow Sim links is just
specific to linking in Linux so here we
are searching for anything that
basically ends with jpeg inside the home
directory we're not using Y rules we
will upload any files that we find to
the server we will calculate the hash
value of any files that we find we don't
really have any other filters but we do
want to keep it in the local file system
only instead of some sort of mapped
device so now I can close that and if I
had more artifacts they would just list
here just click on them to expand them
set your settings and then minimize them
and keep keep selecting through so next
I need to collect specify resources this
is the resources of the client that we
want to use so if you are running it
during the day whenever your client is
actually on online and active which most
likely they are because their computer's
on unless it's a a server some resource
you keep on all the time if it is a
client and the user is using their work
workstation you might want to set it to
something low like 10% % instead of 100%
that way you don't affect your client
too much same for I/O and also maybe Max
megabits uploaded so you can build in a
catch so you don't download huge files
from the client by accident and then
overload your system overload your
network right so maybe one gigabyte is
the biggest you want to download if you
have a storage for that over all of your
different clients next review so this is
the configuration for your hunt that
you're going to run mine's very simple
because I'm just using one artifact to
find JPEG files then launch and it will
launch in the paused state so whenever
it says launch it's not actually
launching it you actually need to click
on it again you can see a summary of
everything that you have here requests
clients we haven't done anything yet
because we haven't run it and whenever
you're satisfied with that hunt over all
of the systems that you have selected or
filtered for any Linux systems then we
can hit the play
button are you sure you want to run this
hunt now it asks you so many times
because it's expecting you to query
hundreds of clients so are you sure you
want to run this hunt run it and then we
can see total scheduled one and finished
clients it happened really fast but
finished clients was also one okay so
next we can go to clients and then we
can see the clients that have connected
and basically their state whether
they've finished or not total bytes sent
total rows returned we can see the flow
ID for this specific client I'll come
back to that in a second but we also
have the notebook and under the notebook
we have everything that was returned for
that hunt so we did find something at
home client desktop evidence jpeg this
is the one that we wanted to find and
the information about the file we have
the Sha 256 md5 and sha one calculated
from that the flow ID and we also found
another jpeg inside uh what looks like
Mozilla but we did find the jpeg that
we're actually interested in here so if
I do a search for jpeg I can see inside
file home client desktop we have our
evidence JPEG that was automatically
downloaded from our hunt so now I could
work with this file directly I could
throw that directory into a analysis
tool maybe a Sandbox or sandbox or
something like that and then I could
analyze that file directly from the
server or using whatever other tools I
wanted to use so that's how we can run
hunts over all of our clients and you
can do this not just for you know
identifying files that are there any
logs that are on the system you can
analyze contents of files as well so we
can actually go into a log file and look
for specific things and if we find that
then do some other action we could go
into the Windows registry if we had a
Windows system we could go into the
Windows registry if we find a particular
key in the registry then we could
collect that and then do something with
it afterwards so it's a really great
interesting tool for both detection and
response because we could run detection
scripts whenever we're hunting we could
also respond by basically changing the
configurations of any of those clients
as we're we're hunting so there's a a
little bit about hunting using different
artifacts next let's look at view
artifacts and you can see all of the
artifacts that are installed on the
right hand side I only have the default
artifacts installed you can download a
lot more from the artifact exchange
let's go ahead and look at one of them
uh linuxis bash history so this will
collect bash history from Linux systems
you just click on it you can see
documentation parameters required and
then the source code for this particular
artifact if we click the pencil icon up
here here you get an editable version so
you can actually change this artifact
definition based on whatever you need
for your system we can edit these
artifacts and we can also create our own
we can create a hunt with it directly if
you click this uh target symbol then it
will just take that artifact and you can
set up a hunt based on that particular
artifact directly so next let's look at
server events and by default we have a
couple of server events these are things
that are logged on the server side by
default so for example we have artifact
modification at the top we have the
timeline of things that are going on and
we can scroll through this timeline and
look at different events that have
happened probably the most interesting
here is the system hunt creation so we
did create the one hunt called find JPEG
and then we ran that hunt and then you
can see details about that hunt so
whenever you have a lot of different
users on the system you can use this to
make sure that they're not actually
abusing particular clients or somebody
didn't get access to your server and
start running hunts that you didn't
expect or maybe even running malicious
code so you do want to be monitoring
some of this stuff these three are
created by default but to create a new
server monitor you can click the pencil
and paper icon select the artifacts that
you do want to monitor on the server
side again you can write your own custom
artifacts here as well and then you can
just select the artifact that you
want and then you click configure and
then configure the options basically
exactly like we did with hunting so the
server events are specifically for
things you want to log on the server
side it uses kind of like a plug-in
system for artifacts exactly like the
hunt manager except it's just for things
that are logged on the server side under
server artifacts it's the same concept
as view artifacts except these are
specifically for Server logging next
notebooks the only thing that I find
notebooks really useful for at least for
me so far is working on a new artifact
so let's call it
new artifact description and then select
a user if you want other people to use
it as other people to work on it as well
whatever you click on it then it will
try to run if we click on that then we
can edit it and we can see the original
code written in markdown or vql or
whatever whatever language we want to
use here add a new section that's vql
and then we can actually set up our
queries here so these notebooks in my
mind are a way to set up a new artifact
and then you can collaborate with other
users in the system to like test the
artifact and make sure it's working for
writing new artifacts based on what
you're searching for specifically and
then you can incorporate those artifacts
into your hunts or monitoring or server
monitoring next we have the host
information we already saw this once
this is where you find a specific host
that you're interested in and it lets
you do a little bit more specific things
with that individual host remotely next
we have our virtual file system this
option is available we already have a
host selected here we have everything
that was collected from the host that
was selected so you can kind of see the
host's history and what kind of
information uh changed over time other
than than hunting this is probably the
second most important thing so I don't
know why they put it at the end this is
monitoring so setting up monitoring on
the system so to create a new monitor
I'm going to select the pencil and paper
and then we need to click the label
group that we're going to monitor we can
do all but then think about there's
different operating systems and
different configurations on your network
so all most of the time probably doesn't
isn't going to make sense something like
our tags are going to make sense Dev or
Linux here I'm going to monitor
something specifically for Linux so I'll
click Linux and remember those are our
tags not the operating system
specifically so next select artifacts
that we're going to monitor these
artifacts are a little bit different
than the artifacts for our hunts so for
example this is things that we might
want to monitor over time whereas a hunt
is like the current state of the system
right now for example SSH logins or SSH
brute force is a really interesting
thing to be monitoring over time and
then those monitors will tell you if you
need to be looking into something for so
I'm going to go ahead and click SSH
login see if I can get some activity
here just like before we see the
artifact is using VAR log AOG this is
what it's working on on the client this
is the query and this is the actual code
for that monitor we can do multiple
monitors at the same time I'm just going
to do the SSH login next configure
parameters select it like normal and
then we can configure maybe if we're
keeping the SSH log or the O log in a
different location for some reason then
we can point it to where it needs to go
and if we want to configure or change
the SSH grock query the SSH grock query
is how information is going to be parsed
out of off the log so we might want to
change that and then review again we get
our setup and then we have launch okay
if we look click the binoculars then we
can see the raw client monitoring table
and basically what needs to happen is
the client needs to get this information
download it and process it and then run
the command so we're setting up a
command control center here and we can
see we have our query that we've just
added here so it has been added to the
monitoring table so notice it took a
while for any information to come back
and then the client actually had to
upload its information to us so now if
we click Linux events SSH login we can
see over time we don't really have any
events because I didn't do anything with
SSH login but now any client running
Linux is being monitored for SSH login
so whenever I go to monitor I should be
able to see any login events from SSH if
that monitoring is working properly
probably the three most important things
that I think you'll use the most are
hunts manager the host information once
you find a host you want to investigate
and client events which is basically
monitoring so immediately you could set
up some sort of client event monitoring
and then as you go along and new attacks
are happening on your network then you
can write your own custom hunts and
Implement them at the time that you need
them using monitoring has a way to be
getting in Intel before and after those
events are happening and then the host
information to drill down into a
specific host that you want to
investigate possibly take it off of the
network quarantine it possibly uh do
some remote acquisition and Analysis so
now we've basically gone through all of
the parts of velociraptor there's a lot
to practice here so I hope this at least
helps you get started if you want to
learn more about artifacts you can go to
the velex Velociraptor artifacts
definitions and then under definitions
they have for example Linux Mac OS uh
Network reporting server there's a lot
more stuff here that's not included in
just the default download so I recommend
you go through any artifacts you think
are going to be interesting to you and
then also the artifact exchange have a
look through that it's on docs.
Velociraptor app and I'll put a link to
all of these below so do check them out
they also have we've seen GitHub they
have Discord and a mailing list and
there is a lot more documentation on
doc. Velociraptor doapp specifically
under documentation getting help setting
everything up the only thing is I find
these instructions sometimes a little
bit difficult because there's so many
options hopefully this video helps solve
some of that if you're having any issues
with that but there is a lot more that
we can do with this remember the way
that I showed you to set up Velociraptor
is not for production it is specifically
for testing and understanding how
Velociraptor Works trying some Hunts on
maybe your local home network and then
once you get more familiar with it then
you can go to deployment and then look
at like Cloud deployment and
specifically how they recommend
provisioning virtual machines there's a
lot of things to consider before you
actually roll this out but it is
definitely a cool tool for monitoring
for hunting and for drilling down into
your systems I hope this helps get you
started thank you so much for watching