[精讚] [會員登入]
3878

自行撰寫syslog server建立資訊安全控管中心#1 -- 前言及syslog介紹

利用PERL將syslog收攏到資料庫的程式

分享此文連結 //n.sfs.tw/11437

分享連結 自行撰寫syslog server建立資訊安全控管中心#1 -- 前言及syslog介紹@新精讚
(文章歡迎轉載,務必尊重版權註明連結來源)
2019-10-25 10:39:21 最後編修
2017-07-16 21:51:36 By 張○○
 

自動目錄

此文分為四個部分

自行撰寫syslog server建立資訊安全控管中心 #1 -- 前言及syslog介紹
自行撰寫syslog server建立資訊安全控管中心 #2 -- 架構和作法
自行撰寫syslog server建立資訊安全控管中心 #3 -- 程式下載和安裝
自行撰寫syslog server建立資訊安全控管中心 #4 -- 過濾條件設定

原文撰於2009-11。為研討會論文,該程式運作良好,從安裝後置之不理運作了六年,收錄資料庫約4億筆紀錄,2016年底又重裝在Centos7作業系統上,持續運作中。這個簡易版的程式適合不花錢作記錄檔的收攏,現重新整理並刪減其中的內容

前言

現在企業及學校單位都開始注意到資訊安全的重要,也了解建立一個資訊安全監控中心(Security Operation Center, SOC)的重要性,假設單位內部有數量眾多的伺服器和網路設備,沒有一個資訊安全控管中心來統籌管理,就算伺服器或網路設備發生異常,也沒有辦法即時發現及即時處理。

要建立資訊安全控管中心第一步,就要能將網路設備、伺服器上的log收錄進來,因為系統的錯誤發生前,常常會先有錯誤的log出現,可是一般人不會也不可能隨時進去觀察異常的log。這些 log 的名稱,非常早就出現在 unix 系統的稱之為 syslog,之後的 linux, bsd, solaris等 unix-like 的系統也沿用此一名稱,但格式上有小小的差異;而網路設備大廠思科也在IOS中支援了 syslog,包括他的6000列和CISCO PIX,但是CISCO 送出的 syslog 有其自己的格式,和 unix-like 伺服器的syslog有諸多的差異。

log在Windows系統下有另一個名稱,叫作 eventlog,他的格式和syslog完全不同也不相容,因此要將 eventlog 轉成syslog就必需針對他的格式進行調整,另一個麻煩的地方,對非英語系的語系使用者而言,eventlog的內容轉存到syslog會有編碼的轉換問題,目前已知的轉換程式都是針對英語Windows而撰寫,其中eventlog 的中文轉換後全會變成亂碼,這也是待解決的地方。

市面上已有許多 logs server 的軟體,搭配管理介面販售,除了預算考量外,尚有無法客製化進行編修、無法整合 Windows server、無法辨視部分網路設備等等問題存在,而網路上諸多免費的解決方案首推就是syslog- ng,但syslog-ng 經我們單位實測長達一年半發現以下的問題:

(1) syslog-ng只是單純將資料收錄到資料庫,並無報警的功能

(2) 收錄CISCO 6509 router的syslog時也會發生無法辨視格式的問題,但 CISCO PIX 可以正常收錄。

(3) Freebsd + syslog-ng+ mysql 的組合似乎有存在一些問題但沒找出原因,主要是syslog-ng會在收錄一段時間後「自動停止」將資料放到資料庫。觀察系統的 process 有在執行中,資料庫也運作正確,udp 的log 封包也有正常的進來,除了寫不進資料庫以外,一切正常,(而Linux+ syslog-ng + mysql的組合顯然比較穩,但是還是有自動停止餵入的問題)。

(4) syslog-ng server 收錄的syslog 針對資料的過濾相當的詳細,很難寫得比他還完善,但是 server 端僅能只能做全域的設定,無法在server端對個別伺服器做調整,如要調整就必須在syslog-ng client 端做調整,並不是理想的做法。例如不希望收錄 A 伺服器 sendmail 的log 但是又希望收錄 B 伺服器 sendmail 的log,syslog-ng 就無能為力;此外,syslog-ng 也無法針對「訊息內容」作過濾。

(5) syslog-ng + mysql 是使用一個 "pipe" 當作中間人,讓資料庫和 syslog-ng 進行溝通,例如在 syslog-ng.conf

destination d_mysql {
pipe("/tmp/mysql.pipe"
template("INSERT INTO logs (host, facility, priority, level, tag, date, time, program, msg) VALUES ( '$HOST', '$FACILITY', '$PRIORITY', '$LEVEL', '$TAG', '$YEAR-$MONTH-$DAY', '$HOUR:$MIN:$SEC', '$PROGRAM', '$MSG' );\n") template-escape(yes));
}

並在 shell 下執行一個 pipe 導入的方法:

# mysql -uaxer -p123456 --database=logdb < /tmp/mysql.pipe & 這個方法的缺點就是不夠直接,不直接的方法直覺上就容易出問題,我猜測也許是產生第一個問題的原因。

(6) 第(5)點的方法會在 process 中產生一個執行緒,這個執行緒會很清楚的把密碼寫出來,會有安全性的問題。例如:

USER       PID %CPU %MEM   VSZ  RSS TTY      STAT START   TIME COMMAND
root     21909  0.0  0.0  4300  748 pts/0    R+   22:44   0:00 mysql -uaxer -p123456 --database=logdb &

(7) syslog-ng server 可將收錄到的 logs 放入資料庫,但無法對進入的 log 作即時的處理分析,log 分析的網管程式也只能針對已存入資料庫的內容進行事後的分析。例如假說發生大量的 FTP 猜測密碼的掃描式攻擊,同時系統也會伴隨產生大量的ftp 登入失敗的log記錄。但若能即時得知這個訊息會比事後分析這些log記錄來得有意義。

(8) syslog-ng 的安裝雖不麻煩,但可能對普通的管理者造成怯步,而且網路設備應該都無法另外安裝syslog-ng。假如能用 unix 系統中本身就有的 syslogd 而不另外安裝 syslog-ng 就達到整合 log 的效果,會是最理想的方法。

Syslog 探討

2.1 Syslog 的歷史

Syslog 最早約在1980年代由 Sendmail project 的 Eric Allman 所發展,最初單純只為了 Sendmail。由於 syslog 顯示出了他的價值,所以後來慢慢的成為 unix 及 unix-like 系統的標準記錄方式,直到演進成為大部分網路設備廠所支援的情況。可是奇妙的是,syslog 和大部分的網路協定標準不同,他一直沒有任何標準去規定他的記錄格式,造成許多的syslog判讀及分析困難。直到2001年由 Internet Engineering Task Force (IETF) 才制定了 RFC3164 - The BSD Syslog Protocol 作為 syslog 第一個標準,這個標準一直到 2009年的 RFC 5424 - The Syslog Protocol 出現後才被廢止,而 RFC 5424 也成為今日 syslog 的標準,但是此標準非常的新,只有非常少的系統會去支援RFC 5424,現存設備仍以RFC 3164為基準。

2.2 Syslog 的結構概述

從上一節 syslog 的歷史得知,syslog 沒有一個大家共同的標準規範,也造成各式各樣的 syslog 格式出現。但是只要目的是514埠的udp封包,我們就要當他是syslog 的封包,且受限於udp,一個syslog的封包最大是1024個bytes。其內容可分為三個部分:PRI, HEADER, MSG,以下作簡單扼要的說明:

PRI 是由'<','>'所包覆的數字組成,數字值是由以下公式所計算出來

數字值 = Facility *8 + Severity

Facility 是預先定義的機構名,系統的服務會使用固定的 Facility ,而使用者的程式或服務則使用最後local0~local7 作為Facility 的名稱。
Severity (別名Level)是訊息的重要等級,共有八個等級,以Emergency最高,Debug最低,列於表1。

所以我們可以由PRI值得知訊息的Facility 及 Severity。

HEADER 是有關訊息的相關資訊,例如日期、時間、伺服器名稱、伺服器IP或IP6位址等。

MSG 是有關訊息的本身內容,可分兩部份,TAG和CONTENT,TAG是執行的程式名稱,限定32字元且只能使用字母A-Za-z,而Content是訊息的內容。

2.3 Syslog 的實際內容範例

既然想把syslog分析並存放到資料庫,就不得不對單位內各種想收錄的設備的 syslog 進行搜集及分析,以下是CISCO的網路設備及其他伺服器所搜集到的syslog封包內容。

(1)  CISCO WS-C6509-E Router (Version 12.2(33)SXH4)

<188>746609: Nov 18 07:33:37: %CDP-4-NATIVE_VLAN_MISMATCH: Native VLAN mismatch discovered on GigabitEthernet3/16 (2), with Switch GigabitEthernet0/33 (3).

(2) CISCO FWSM Firewall Version 3.2(7) PIX

<186>Nov 18 2009 14:01:23: %FWSM-2-106016: Deny IP spoof from (::) to ff02::1:ff9b:54b3 on interface outside
<187>Nov 20 2009 22:05:08: %FWSM-3-106014: Deny inbound icmp src outside:2001:288:5400:2:201:a8ff:fe06:667c dst outside:ff02::1:ff00:17 (type 135, code 0)

(3) Freebsd 6.2 syslogd

<38>Nov 18 17:23:01 sshd[13247]: Accepted keyboard-interactive/pam for axer from 163.17.40.11 port 62757 ssh2

(4) Linux syslogd

<86>sshd[31860]: pam_unix(sshd:session): session opened for user axer by (uid=0)
<22>sendmail[30024]: nAKE3LQp030024: from=, size=1267, class=0, nrcpts=2, msgid=<200911201403.nAKE3LQp030024@localhost.localdomain>, bodytype=8BITMIME, proto=SMTP, daemon=MTA, relay=newnetflow [127.0.0.1]

(5) DLINK 3000 Switch

<138>Nov 11 01:26:24 192.168.44.2 CRIT: Unit 1, Back Fan failed

(6) Syslog-ng 1.6

<28>Nov 20 22:02:29 dns named[41283]: client 163.17.90.16#57503: RFC 1918 response from Internet for 38.1.168.192.in-addr.arpa

(7) Syslog-ng 2.0

<38>Nov 20 22:02:00 dns3 su(pam_unix)[21799]: session closed for user root
<78>Nov 10 13:10:01 dns2 crond[1336]: (root) CMD (env LANG=C /usr/bin/mrtg /home/mrtg/mrtg.schools.cfg.utf8 /home/mrtg/schools/)

2.4 Windows Eventlog

Windows 的 eventlog 和 syslog 有極大的差異,如果把windows 的log用現有的 [1] Eventlog to Syslog Utility 或 [2] winlogd - Windows EventLog to Syslog Service 儲存過來,就能管理所有的 syslog 了,不過這兩套程式目前還存在編碼轉換的問題,餵過來的資料變成亂碼,也許是因為程式是外國人寫的,系統丟出來時並沒有考慮到中文的問題,收到的內容中只要有中文字全變成亂碼,以下是收錄到兩者的轉換成syslog資料內容:

[1]

<29>Security: 552: NT AUTHORITY\SYSTEM: ¨Ï¥Î©ú½T«Å§iªº»{ÃÒ¹Á¸Õµn¤J: µn¤Jªº¨Ï¥ÎªÌ: ¨Ï¥ÎªÌ¦WºÙ: SPADE µn¤JÃѧO½X: (0x0,0x3E7) µn¤J GUID: - »{ÃÒ³Q¨Ï¥Îªº¨Ï¥ÎªÌ: ¥Ø¼Ð¨Ï¥ÎªÌ¦WºÙ: Administrator ¥Ø¼Ðºô°D:- ¥Ø¼Ð¦øªA¾¹¦WºÙ: localhost ¥Ø¼Ð¦øªA¾¹¸ê°T: localhost ©I¥sªÌ³B²zÃѧO½X: 6072 ¨Ó·½ºô¸ô¦ð: 65417.249.113.99 ¨Ó·½³s±µ° <27>TermServDevices: 1111: µLªk¿ëÃѦLªí¾÷ HP Officejet Pro L7500 S... fax ©Ò»ÝªºÅX°Êµ{¦¡ HP Officejet Pro fax¡C¦b±z­«·sµn¤J«e¡A½Ð³sµ¸¨t²ÎºÞ²z­û¨Ó¦w¸ËÅX°Êµ{¦¡¡C

[2]

<158>Nov 11 23:25:27 SPADE Service Control Manager[7035] Category:(0); User:SPADE\Axer; winlogd ?????????? ?? ???

了解了各種系統不同的syslog格式後,我們想要收錄這些資料的內容,就得要分析及這些不同的syslog 格式,下一章我們會來探討[log server的架構和作法]。

參考資料

[1] BalaBit IT Security, Syslog-ng logging system, http://www.balabit.com/network-security/syslog-ng/

[2] C. Lonvick, RFC 3164 - The BSD syslog Protocol , August 2001

[3] R. Gerhards, Adiscon GmbH, RFC 5424 - The Syslog Protocol, March 2009

[4] Purdue University, West Lafayette, evtsys- Eventlog to Syslog Utility, https://engineering.purdue.edu/ECN/Resources/Documents/UNIX/evtsys

[5] Edoceo, Inc., winlogd - Windows EventLog to Syslog Service, http://edoceo.com/creo/winlogd

[6] ASDM-Cisco Adaptive Security Device Manager http://www.cisco.com/en/US/products/ps6121/index.html

[7] Larry Wall, Tom Christiansen, Jon Orwant, Programming Perl, Third Edition, O'Reilly, July 2000

[8] awstats- Free real-time logfile analyzer to get advanced statistics http://awstats.sourceforge.net/

 

END

你可能感興趣的文章

[PERL] 06-運算子 #2 PERL的運算子介紹,總共有21種

[PERL] 取得字串長度 使用length來取得字串長度

[PERL] 使用CPAN安裝模組 在Linux 上,CPAN 可以用來安裝或管理 perl 的模組,此文教你怎麼做。

[PERL] 18-套件及模組 套件和模組入門

[PERL] 08-陣列 #2 --操作 更多perl陣列的操作,如拆開、黏合、取出、加入等等

[PERL] 常態分配亂數產生函數 一般而言我們使用程式內建的 rand 函數取得的亂數是平均分配的,但如果需要常態分配的亂數產生器該怎麼做?

我有話要說

>>

限制:留言最高字數1000字。 限制:未登入訪客,每則留言間隔需超過10分鐘,每日最多5則留言。

訪客留言

[無留言]

隨機好文

如何在linux下執行java 原生的java應用程式可以使用簡單的方法在console下面寫出來,適合作簡單的應用

Smarty安裝 smarty 是著名的樣版引擎,非常的好用,用多了突然發現拿掉smarty反而不會寫php了,以下是安裝過程..

[AS3] 我做的唯一一個Flash As3遊戲UFO INVADSION [AS3] 我做的唯一一個Flash As3遊戲,是第一個也是最後一個,後來就沒再寫as3,不過as3還滿好玩的。

[AS3] FLASH 引入外部as檔 FLASH AS3中,若要引用另外撰寫的 class(*.as) 檔案,該如何處理?

[Apache] 自訂錯誤頁面及移掉歡迎頁 Apache 有一個歡迎頁,以正式網站來說,出現這頁有點不專業,該移除它..