我們在運維過程中,需要記住不同操作系統之間的相關運維指令,有時同一系統不同版本也會存在指令語法不一致的問題,雖然很多企業通過SNMP等技術形成監控系統或形成一系列相關腳本文件對目標主機進行有效、細粒度、實時的監控,但有時針對個體問題或企業非正規化時,我們還是需要對指令有所瞭解才能有效解決。OSQuery對指令進行封裝,解決不同操作系統命令、語法不一致問題,通過SQL查詢方式,展現系統的CPU、內存、硬盤、進程等相關信息,打破指令間壁壘,加快整體運維效率。
一、現有模式
目前很多企業常見的運維監控是通過SNMP(簡單網關協議)協議,實現對目標主機從CPU、內存、磁盤等方面進行監控,該技術主要實現系統層面監控;通過探針形式將中間件如Tomcat、Weblogic進行監控,獲取堆棧信息、進程信息等,該技術主要實現應用層面監控;通過創建數據庫賬戶,獲取連接信息、鎖信息等,該技術主要實現數據庫層面監控,調用VMware相關接口,實現宿主機及存儲層面的監控。通過彙集多個層面監控技術形成的運維管理系統是業界主流的運維監控方式。
本文並非實現所有相關層面技術,而是討論另一種SNMP的替代方式,即使用OSQuery實現對系統層面監控,該方式比傳統SNMP相對靈活,可將簡單採集需求形成SQL,從而將處理能力前置,無需再從後端處理,減輕後端壓力(傳統方式是採集內容後,彙集到後端,後端進行統一業務處理)。
二、OSQuery
OSQuery支持MACOS、Linux(Ubuntu、Centos)、Windows、FreeBSD4種操作系統。具體詳細介紹可從官網瞭解。
- OSQuery安裝
本文以centos7操作系統為例對OSQuery進行介紹,首先是下載、安裝介質。
下載地址: wget https://pkg.osquery.io/rpm/osquery-4.1.1-1.linux.x86_64.rpm
安裝:yum install -y osquery-4.1.1-1.linux.x86_64.rpm
- OSQuery使用
OSQuery包含osqueryd及osqueryi。
osqueryd:是主機監視守護程序,主要用於調度查詢和記錄操作系統狀態變化。osqueryd會以時間為軸不斷聚合查詢結果並生成日誌。守護程序還使用操作系統事件API來記錄受監視的文件和目錄更改,硬件事件,網絡事件等。
osqueryi:是交互式查詢控制檯,提供SQL界面,以SQL語句形式查詢操作系統的CPU、內存、進程等信息。通過osqueryi,可實現快速對事件響應,診斷系統操作異常,性能問題故障排除等多種應用場景。
通過osqureyi指令進入後,使用“.help”查看具體操作。
其中.mode為輸出模式;.schema為表結構;.table為表;.show為顯示當前配置;
當我們輸入“.tables”時,會顯示所有表信息,如下圖:
2.1系統信息(system_info)查詢
當mode為默認pretty時,查詢系統信息表(system_info)返回效果如下:
當mode為line模式時(執行語句:.mode line),查詢系統信息表(system_info)返回效果如下:
上圖包括:hostname、uuid、cpu_type、cpu_brand等,返回結果大家都非常瞭解,再次不逐一介紹。
2.2內存信息(memory_info)查詢
上圖計算以字節為單位,環境所用服務器內存60G+。
2.3用戶信息(user)查詢
包含uid、用戶名、shell信息等。
2.4網卡信息(interface_addresses)查詢
2.5進程信息(processes)查詢
OSQuery還可以使用WHERE、Desc、Limit等條件進行排序和限制,總之有非常多的信息可以查詢,再次不逐一介紹。
- OSQuery應用於安全監控
通過對OSQuery有基礎瞭解後,我們可結合安全場景進行使用。
1.很多程序文件在開始執行後立刻刪除自己。針對該場景SQL語句可以為,“select *from processes where on_disk=0;”,即線程存在,但磁盤不存在。
2.基線對比。我們可以設置OSQuery的配置文件,設置定時任務計劃,存儲數據,或通過自己開發程序封裝OSQuery,將採集後的數據存入數據庫中,隨後我們可將最新查詢內容與歷史數據比對,發現異常問題。
3.反彈shell。可查詢記錄主機當前的網絡行為的process_open_socket與進程processes表結合(join),通過process_open_socket表中的remote_address字段判斷ip,通過processes表中的name判斷是否bash,便可實現反彈shell的檢測。
雖然目前OSQuery本身不支持遠程結合,即建立一個統一的server端對各個終端(安裝OSquery)進行日誌彙集監控,不過我們可以對程序進行封裝,通過api接口或者消息隊列等多種形式實現日誌的彙集監控。本文最後通過OSQuery與安全場景結合探索,主要是嘗試更多安全防護手段的可能性(這也是OSQuery有趣的地方),對可能性的不斷累計是我們走向安全前沿的必經之路。
閱讀更多 MR王峰 的文章