2016-11-28 15:56:12 +00:00
|
|
|
# osquery
|
2015-02-18 20:51:20 +00:00
|
|
|
|
|
|
|
<p align="center">
|
2018-12-12 21:12:55 +00:00
|
|
|
<img alt="osquery logo" width="200"
|
|
|
|
src="https://github.com/facebook/osquery/raw/master/docs/img/logo-2x-dark.png" />
|
|
|
|
</p>
|
2015-02-18 20:51:20 +00:00
|
|
|
|
|
|
|
<p align="center">
|
2018-12-12 21:12:55 +00:00
|
|
|
osquery is a SQL powered operating system instrumentation, monitoring, and analytics framework.
|
|
|
|
<br>
|
|
|
|
Available for Linux, macOS, Windows and FreeBSD.
|
|
|
|
</p>
|
2016-11-28 15:56:12 +00:00
|
|
|
|
|
|
|
## What is osquery?
|
2014-08-12 00:51:30 +00:00
|
|
|
|
2018-12-12 21:12:55 +00:00
|
|
|
osquery exposes an operating system as a high-performance relational database. This allows you to
|
|
|
|
write SQL-based queries to explore operating system data. With osquery, SQL tables represent
|
|
|
|
abstract concepts such as running processes, loaded kernel modules, open network connections,
|
|
|
|
browser plugins, hardware events or file hashes.
|
2014-09-03 08:42:15 +00:00
|
|
|
|
2018-12-12 21:12:55 +00:00
|
|
|
SQL tables are implemented via a simple plugin and extensions API. A variety of tables already exist
|
|
|
|
and more are being written: [https://osquery.io/schema](https://osquery.io/schema/). To best
|
|
|
|
understand the expressiveness that is afforded to you by osquery, consider the following SQL
|
|
|
|
queries:
|
2014-09-03 08:42:15 +00:00
|
|
|
|
2018-06-02 19:47:07 +00:00
|
|
|
List the [`users`](https://osquery.io/schema/current#users):
|
2015-02-18 20:51:20 +00:00
|
|
|
```sql
|
2015-04-10 06:17:27 +00:00
|
|
|
SELECT * FROM users;
|
2015-02-18 20:51:20 +00:00
|
|
|
```
|
2014-10-29 00:36:22 +00:00
|
|
|
|
2018-06-02 19:47:07 +00:00
|
|
|
Check the [`processes`](https://osquery.io/schema/current#processes) that have a deleted executable:
|
2015-02-18 20:51:20 +00:00
|
|
|
```sql
|
2015-04-10 06:17:27 +00:00
|
|
|
SELECT * FROM processes WHERE on_disk = 0;
|
2015-02-18 20:51:20 +00:00
|
|
|
```
|
2014-09-03 08:42:15 +00:00
|
|
|
|
2015-08-26 20:53:08 +00:00
|
|
|
Get the process name, port, and PID, for processes listening on all interfaces:
|
2014-09-03 08:42:15 +00:00
|
|
|
```sql
|
2015-11-21 20:32:34 +00:00
|
|
|
SELECT DISTINCT processes.name, listening_ports.port, processes.pid
|
|
|
|
FROM listening_ports JOIN processes USING (pid)
|
|
|
|
WHERE listening_ports.address = '0.0.0.0';
|
2014-09-03 08:42:15 +00:00
|
|
|
```
|
2014-11-04 16:59:46 +00:00
|
|
|
|
2018-12-13 13:15:41 +00:00
|
|
|
Find every macOS LaunchDaemon that launches an executable and keeps it running:
|
2014-09-03 08:42:15 +00:00
|
|
|
```sql
|
2015-02-18 20:51:20 +00:00
|
|
|
SELECT name, program || program_arguments AS executable
|
2015-11-21 20:32:34 +00:00
|
|
|
FROM launchd
|
2016-04-22 16:57:50 +00:00
|
|
|
WHERE (run_at_load = 1 AND keep_alive = 1)
|
2015-11-21 20:32:34 +00:00
|
|
|
AND (program != '' OR program_arguments != '');
|
2014-09-03 08:42:15 +00:00
|
|
|
```
|
|
|
|
|
2015-02-18 20:51:20 +00:00
|
|
|
Check for ARP anomalies from the host's perspective:
|
2015-03-09 21:12:44 +00:00
|
|
|
|
|
|
|
```sql
|
2015-11-21 20:32:34 +00:00
|
|
|
SELECT address, mac, COUNT(mac) AS mac_count
|
|
|
|
FROM arp_cache GROUP BY mac
|
|
|
|
HAVING count(mac) > 1;
|
2015-03-09 21:12:44 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
Alternatively, you could also use a SQL sub-query to accomplish the same result:
|
|
|
|
|
2015-02-18 20:51:20 +00:00
|
|
|
```sql
|
2015-03-09 21:12:44 +00:00
|
|
|
SELECT address, mac, mac_count
|
2015-11-21 20:32:34 +00:00
|
|
|
FROM
|
|
|
|
(SELECT address, mac, COUNT(mac) AS mac_count FROM arp_cache GROUP BY mac)
|
|
|
|
WHERE mac_count > 1;
|
2015-03-09 21:12:44 +00:00
|
|
|
```
|
2015-02-18 20:51:20 +00:00
|
|
|
|
2014-09-03 08:42:15 +00:00
|
|
|
These queries can be:
|
2018-12-12 21:12:55 +00:00
|
|
|
* performed on an ad-hoc basis to explore operating system state using the
|
|
|
|
[osqueryi](https://osquery.readthedocs.org/en/latest/introduction/using-osqueryi/) shell
|
|
|
|
* executed via a [scheduler](https://osquery.readthedocs.org/en/latest/introduction/using-osqueryd/)
|
|
|
|
to monitor operating system state across a set of hosts
|
2015-02-18 20:51:20 +00:00
|
|
|
* launched from custom applications using osquery Thrift APIs
|
2014-09-03 08:42:15 +00:00
|
|
|
|
2018-12-12 21:12:55 +00:00
|
|
|
## Download & Install
|
2014-10-30 02:24:20 +00:00
|
|
|
|
2018-12-12 21:12:55 +00:00
|
|
|
To download the latest stable builds and for repository information and installation instructions
|
|
|
|
visit [https://osquery.io/downloads](https://osquery.io/downloads/).
|
2014-11-03 09:41:30 +00:00
|
|
|
|
2018-12-12 21:12:55 +00:00
|
|
|
## Build from source
|
2016-11-28 15:56:12 +00:00
|
|
|
|
2018-12-12 21:12:55 +00:00
|
|
|
Building osquery from source is encouraged! Check out our [contributing guide](CONTRIBUTING.md) and
|
2018-12-13 13:15:41 +00:00
|
|
|
join the community on [Slack](https://slack.osquery.io).
|
2015-11-21 20:32:34 +00:00
|
|
|
|
2017-12-19 00:04:06 +00:00
|
|
|
## License
|
|
|
|
|
2018-12-12 21:12:55 +00:00
|
|
|
By contributing to osquery you agree that your contributions will be licensed as defined on the
|
|
|
|
LICENSE file.
|
2017-12-19 00:04:06 +00:00
|
|
|
|
2016-11-28 15:56:12 +00:00
|
|
|
## Vulnerabilities
|
2015-01-15 21:59:46 +00:00
|
|
|
|
2018-12-12 21:12:55 +00:00
|
|
|
We keep track of security announcements in our tagged version release notes on GitHub. We aggregate
|
|
|
|
these into [SECURITY.md](SECURITY.md) too.
|
2017-10-04 17:07:43 +00:00
|
|
|
|
2018-12-12 21:12:55 +00:00
|
|
|
Facebook has a [bug bounty](https://www.facebook.com/whitehat/) program that includes osquery. If
|
|
|
|
you find a security vulnerability in osquery, please submit it via the process outlined on that page
|
|
|
|
and **do not file a public issue**. For more information on finding vulnerabilities in osquery, see
|
|
|
|
our blog post [Bug Hunting
|
|
|
|
osquery](https://www.facebook.com/notes/facebook-bug-bounty/bug-hunting-osquery/954850014529225).
|
2015-01-15 21:59:46 +00:00
|
|
|
|
2016-11-28 15:56:12 +00:00
|
|
|
## Learn more
|
2014-08-12 00:51:30 +00:00
|
|
|
|
2018-12-12 21:12:55 +00:00
|
|
|
If you're interested in learning more about osquery read the [launch blog
|
|
|
|
post](https://code.facebook.com/posts/844436395567983/introducing-osquery/) for background on the
|
|
|
|
project, visit the [users guide](https://osquery.readthedocs.org/).
|
|
|
|
|
|
|
|
Development and usage discussion is happening in the osquery Slack, grab an invite automatically
|
|
|
|
[here](https://slack.osquery.io)!
|