2017年2月1日,Airbub安全團隊宣布開源框架StreamAlert發布了,它是一種實時數據分析框架,附帶伴隨時間點的報警功能。StreamAlert屬于無服務化開源框架,每小時可以橫向擴展到TB級別數據支撐力度,自動化的基礎設施部署以及默認開啟安全保護機制。
下面這張圖是StreamAlert的功能示意圖。
為什么會有StreamAlert?
Airbnb公司需要一種產品可以基于它們公司的實際運行環境,強化工程師和管理員的能力,特別是針對實時數據的獲取、分析和告警。
當安全團隊設計用戶用例,并且尋找各種可行性方案之后,團隊根據需求進行編碼,需要實現的需求包括:
針對任何AWS賬戶的簡單、安全、可重復的部署方式每天輕松從兆擴展為百萬兆最小化基礎設施維護,不需要專家級的devops人員默認開啟基礎設施安全機制,不需要安全專家支持從不同環境過來的數據(例如IT、PCI、工程部門)支持不同的環境類型的數據(例如云、數據中心、辦公室)支持數據的不同類型(例如JSON、CSV、Key-Value、Syslog)支持使用類似于安全、基礎設施、尊重以及其他方面的測試用例Airbub安全團隊因為找不到這樣一款適配所有需求的產品,所以他們決定自己構建一個。因為團隊需要的產品與環境無關,也就是說具有通用型,自然而然就滿足了成為開源項目的基礎。
優點
就像上面提到的,StreamAlert有一些特定的優點:
無服務器:StreamAlert利用了AWS的Lambda,這種做的好處是你不再需要自己管理服務器,不再需要對服務器打補丁,不再需要了解服務器的硬件配置差別可擴展性:StreamAlert利用AWS的Kinesis Streams特性,這樣做的好處是支持“流量每小時從兆擴展為百萬兆,每秒的寫入記錄數從千級擴展到百萬級”自動化:StreamAlert利用Terraform,支持基礎設施和支持服務以代碼的形式呈現出來,并支持自動化部署安全機制: StreamAlert使用安全傳輸(TLS),在容器/沙盒內進行數據分析,根據自定義的環境進行數據切分,支持基于角色的訪問控制(RBAC)開放源代碼:任何人都可以使用或者貢獻StreamAlert源代碼用戶用例
下面這張圖解釋了StreamAlert可以分析的一些數據集范例:
StreamAlert的產品目標是盡可能地支撐未知用戶需求,也就是說對于數據的分析和告警用戶用例,應該支撐得最為廣泛。
更高層次來說,StreamAlert支持如下:
任意源:StreamAlert可以接收從S3的bucket過來的數據,也可以接收來自任意支持亞馬遜Kinesis
Stream的第三方服務的數據。例如:fluentd、logstash、aws-kinesis-agent、osquery、Java、JavaScript、Ruby、PHP,以及任何被AWS SDK支持的語言。任何操作系統,StreamAlert可以接收從任何設備過來的數據,只要它們支持日志轉發功能,包括Linux、MacOS、Windows,等等。任何環境,StreamAlert可以接收從任何環境發送過來的數據,只要它們可以連接到互聯網,包括云、數據中心、辦公室,等等。從數據的角度考慮,StreamAlert支持例如JSON、CSV、Key-Value,以及Syslog等多種格式。
如果你是一個AWS客戶,可以通過S3的bucket方式壓縮數據格式。相應地,StreamAlert也支持CloudTrail、AWS Config,以及S3服務訪問日志。
如果你不是AWS客戶,StreamAlert也支持如下數據:
主機日志(例如Syslog、osquery、auditd)網絡日志(例如Palo Alto Networks、Cisco)Web應用日志(例如Apache、nginx)SaaS提供者(例如Box、OneLogin)需要注意的是,SmartAlert并不是為了解決分析指標或者時間序列的用戶用例設計的,在這個領域已經有很多很棒的開源框架或者商業軟件存在了,例如Prometheus、DataDog,以及NewRelic。
數據分析
使用Python編寫的規則包括數據分析和告警邏輯。以下是一段Python代碼,示范在PCI環境下對sudo的使用進行告警:
@rule('production_sudo', logs=['osquery'], matchers=['pci'], outputs=['s3', 'pagerduty', 'slack'])def production_sudo(record): table_name = record['name'] tag = record['columns']['tag'] return ( table_name == 'linux_syslog_auth' and fnmatch(tag, 'sudo*') )告警
如上圖可見,StreamAlert配置了靈活的告警框架,可以和全新的或者已經存在的故障管理工具集成在一起使用。StreamAlert可以啟用規則,實現發送給多個告警輸出。
架構
StreamAlert使用如下的設備:
AWS Kinesis Streams:數據流、AWS Lambda流(基于流的模型)AWS Kinesis Firehose:加載流數據到S3數據存儲層AWS Lambda (Python):數據分析和告警AWS SNS:告警隊列AWS S3:可選的數據源、長期數據存儲層、長期告警存儲層AWS Cloudwatch:基礎設施指標AWS KMS:應用密碼的加密和解密AWS IAM:基于規則的訪問控制(RBAC)下一步計劃
在2017年的Q2,Airbub的安全團隊預計會加強StreamAlert的分散流量處理能力,進一步提升告警的上下文關聯度。
對于歷史數據的檢索,StreamAlert預計在2017年年底實現功能,通過使用AWS Athena(一種S3提供的無服務器交互式查詢服務),這種方式將會允許用戶使用SQL語句進行實時和定時的分析數據查詢。