Slide 1

Slide 1 text

mike arpaia / facebook OS X Security at Scale ted reed / facebook

Slide 2

Slide 2 text

OS X security at Facebook production hardening client engineering intrusion detection     

Slide 3

Slide 3 text

“detection” and “response” catch attackers •insider threats •espionage
 •external threats •APT •hacktivists •mass malware •the list is endless

Slide 4

Slide 4 text

defend enterprise and production infra single intrusion detection team •extract as much signal as possible •make high confidence decisions •harder for the more variable OS X client fleet
 •avoid duplication in production •ease burden for humans •apply the same intelligence feeds •reuse storage

Slide 5

Slide 5 text

mac and linux laptops focus on client machines developer
 laptop    Most variable Largest attack surface ‘Highest’ risk

Slide 6

Slide 6 text

but it’s a hard problem “install to win”  network-based IDS host-based IDS

Slide 7

Slide 7 text

but it’s a hard problem “install to win” network-based IDS host-based IDS your machine is cooked must be time for a new laptop do not install that again “install and pray”

Slide 8

Slide 8 text

we live in a windows centric world •more OS X laptops •most production infrastructure runs on Linux
 •few are instrumenting their OS X and Linux hosts •affordably •tailored to medium enterprises or large infrastructures •how would we solve that problem? but, times are changing

Slide 9

Slide 9 text

desired properties

Slide 10

Slide 10 text

performant easy flexible simple development deployable upgrades low maintenance user impact long uptime metrics configurable integrations compliance automation vulnerability management

Slide 11

Slide 11 text

osquery

Slide 12

Slide 12 text

SQL for your infrastructure osquery use SQL queries to explore OS state •running processes •loaded kernel modules •active network connections •route table •firewall settings •installed software •file modifications

Slide 13

Slide 13 text

why SQL? SELECT pid, name, uid FROM processes OS concepts are shared on Mac, Linux, and Windows the “concepts” have attributes: user ids, process ids, descriptors, ports, paths most developers and administrators know SQL

Slide 14

Slide 14 text

why SQL? SELECT pid, name, uid FROM processes [concept]

Slide 15

Slide 15 text

why SQL? SELECT pid, name, uid FROM processes [attributes] [concept]

Slide 16

Slide 16 text

why SQL? SELECT pid, name, uid FROM processes [constraints] WHERE uid != 0

Slide 17

Slide 17 text

why SQL? JOIN users ON processes.uid=users.uid SELECT pid, name, username FROM processes WHERE uid != 0 [join] [attribute]

Slide 18

Slide 18 text

more tables are being written every day many tables are available •acpi_tables •arp_cache •crontab •file_events •kernel_info •listening_ports •logged_in_users •mounts •pci_devices •processes •routes •shell_history •smbios_tables •suid_bin •system_controls •usb_devices •users •groups •rpm_packages •apt_sources •deb_packages •homebrew_packages •kernel_modules •memory_map •shared_memory •browser_plugins •startup_items

Slide 19

Slide 19 text

use simple tables, together osquery enables complex analysis by allowing users to join and aggregate across several simple tables •simple tables have many advantages •easier to write •easier to maintain •can be used in many contexts

Slide 20

Slide 20 text

osquery is much more than a security tool

Slide 21

Slide 21 text

osquery is much more than a security tool actually, literally… it is a family of tools

Slide 22

Slide 22 text

osqueryi

Slide 23

Slide 23 text

No content

Slide 24

Slide 24 text

LaunchDaemons which run a binary at boot

Slide 25

Slide 25 text

running processes

Slide 26

Slide 26 text

processes listening on ports

Slide 27

Slide 27 text

osqueryd

Slide 28

Slide 28 text

daemon for low-level host monitoring osqueryd know how the results of a query change over time •schedule a query on your hosts via a config
 •the daemon takes care of periodically executing your queries •buffers results to disk and generates a log of state changes •logs results for aggregation and analytics

Slide 29

Slide 29 text

event-based operating system introspection host eventing stream subscribe to key OS events to create dynamically growing tables •subscribe to “publishers” •filesystem changes (inotify, FSEvents) •network setting changes (SCNetwork) •application usages (NSNotificationCenter) •query the history of your host, as it evolves

Slide 30

Slide 30 text

for config distribution, data infrastructure and more plugin system •simple plugin API •specify your plugins at runtime with a command-line flag filesystem http zookeeper configuration filesystem flume scribe logging tls ldap oauth enrollment

Slide 31

Slide 31 text

how we config and log results facebook workflow 1. osquery.pkg published automatically to https://osquery.io 2. download weekly and update chef cookbook 3. chef writes configuration and installs pkg 1. newsyslog.d rotation file 2. list of scheduled queries 4. results written to /var/log/osqueryd.results.log 5. splunk lightweight forwarder 6. backend analytics

Slide 32

Slide 32 text

tables

Slide 33

Slide 33 text

creating tables is easy easily define what your tables “look like” in Python and use C++ to implement what a full-table scan would return •the Python is used to generate faster C++ code transparently •you write a single C++ function which implements a full-table scan

Slide 34

Slide 34 text

table_name("time") schema([ Column("hour", INTEGER), Column("minutes", INTEGER), Column("seconds",INTEGER), ]) implementation("time@genTime")

Slide 35

Slide 35 text

namespace osquery { namespace tables { QueryData genTime(QueryContext& ctx) { QueryData results; struct tm* now = localtime(time(0)); Row r; r["hour"] = INTEGER(now->tm_hour); r["minutes"] = INTEGER(now->tm_min); r["seconds"] = INTEGER(now->tm_sec); results.push_back(r); return results; } } }

Slide 36

Slide 36 text

https://osquery.io/tables browse all tables, columns, descriptions, and example queries

Slide 37

Slide 37 text

open source

Slide 38

Slide 38 text

all development happens in the open, on GitHub work on osquery with us the problem that osquery solves isn't unique to facebook •https://github.com/facebook/osquery •https://osquery.io •https://osquery.readthedocs.org this journey is 1% finished: get involved •we’re excited to take on future challenges in the open •let’s build together

Slide 39

Slide 39 text

No content

Slide 40

Slide 40 text

questions https://osquery.io