環(huán)境 RedHat 7.3
在網(wǎng)上越來(lái)越多的 hacker 的出現(xiàn), 越來(lái)越多的高手出現(xiàn)的情況下.如何才能確保自己可以保存一份完整的 log 呢?稍微有點(diǎn)概念的 hacker 都知道,進(jìn)入系統(tǒng)后的第一見(jiàn)事情就是去清理 log, 而發(fā)現(xiàn)入侵的最簡(jiǎn)單最直接的方法就是去看系統(tǒng)紀(jì)錄文件.現(xiàn)在我們來(lái)說(shuō)說(shuō)如何設(shè)定一個(gè)安全的 log 服務(wù)器。
想想看,如果入侵者無(wú)法連結(jié)您的 log 服務(wù)器,又如何能改您的 log 呢?現(xiàn)在我們來(lái)學(xué)習(xí)如何設(shè)定一個(gè)無(wú) ip 的 log 服務(wù)器。
現(xiàn)在,來(lái)介紹一下如何用 Snort 來(lái)做三件事情∶
Stealth sniffer
stealth NIDS porbe
stealth logger
這一切都是用在一臺(tái)沒(méi)有 ip 的服務(wù)器上面的. NIDS 是 Network Intrusion Dectection Server 的簡(jiǎn)稱,也就是說(shuō)入侵檢測(cè)服務(wù)器。
為什么要 stealth 呢?
在 internet 中運(yùn)行任何一種服務(wù),都是有一定的危險(xiǎn)的.不管是 http 也好, ftp 也好, telnet 也好,總之都會(huì)有機(jī)會(huì)被 hack 入侵. stealth logger 的獨(dú)特性可以讓我們?cè)诮邮召Y料的同時(shí),不發(fā)送任何的資料.這樣外界的電腦(被 hack 入侵的電腦)就根本無(wú)法去更改 loger server 所收到的信息.也就是說(shuō)保證了我們信息的完整性,以及原始性. 為了確保 log 服務(wù)器的安全,最好不要將 log 服務(wù)器連接在網(wǎng)路中。也就是說(shuō),當(dāng)您需要檢查 logger 服務(wù)器上得東西的時(shí)侯,您需要到電腦前,打開(kāi)屏幕.而不是遠(yuǎn)端 login 進(jìn)來(lái).但是,如果說(shuō)您一定要連接網(wǎng)路的話的話,那么請(qǐng)用兩個(gè)的介面來(lái)做.也就是說(shuō)兩片網(wǎng)卡,并且注意,第一,IP forwarding 一定要關(guān)閉。第二就是,用來(lái)做 stealth logger 的介面是沒(méi)有 ip 的一張網(wǎng)卡,這張網(wǎng)卡必須不能跟另外一個(gè)有 ip 的網(wǎng)卡在同一網(wǎng)路下面。
設(shè)定:
首先當(dāng)然是確定您的網(wǎng)卡安裝無(wú)誤,并且可以被 kernel 抓到.然后把網(wǎng)卡所需要的 module 寫(xiě)到 /etc/modules.conf 文件中.
現(xiàn)在我們來(lái)設(shè)定一個(gè)沒(méi)有 ip 的網(wǎng)卡介面。
編輯文件 /etc/sysconfig/network-scripts/ifcfg-eth0
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
USERCTL=no
ONBOOT=yes
BOOTPROTO=
BROADCAST=
NETWORK=
NETMASK=
IPADDR=
存檔后,用 ifconfig 來(lái) active 我們的 eth0 介面.
初試 stealth
這里我們用到了 snort 這個(gè)程式.如果您的電腦中沒(méi)有這個(gè)程式,可以到 www.snort.org 下載.
現(xiàn)在我們運(yùn)行
snort -dvi eth0
這里 -d 的選項(xiàng)告訴 snort 對(duì)資料進(jìn)行 decode (解碼)
-v 告訴 snort 將結(jié)果顯示在屏幕上面
-i 則是指定所需要的 interface
可以用 -C 選項(xiàng)告訴 snort 只顯示 ASCII 部份. 忽略 hexadecimal 資料.
?$snort -dviC eth0
Log directory= /var/log/snort
Initializing Network Interface eth0
kernel filter, protocol ALL, TURBO mode
(63 frames), raw packet socket
--== Initializing Snort ==--
Decoding Ethernet on interface eth0
--== Initialization Complate ==--
-*> Snort! <*-
Version 1.8.4 (Build 99)
By Martin Roesch (roesch@sourcefire.com,
www.snort.org)
......
......
......
NIDS(入侵偵測(cè)) 入侵檢測(cè)本身是一件很復(fù)雜的事情。snort 本身也提供了強(qiáng)大的入侵檢測(cè)的功能。這里我只做一個(gè)簡(jiǎn)單的介紹,好讓大家有一個(gè)概念.如果真正實(shí)體去做一個(gè) NIDS 的話.需要些更復(fù)雜的動(dòng)作.例如設(shè)定更完善的 rules, 定時(shí)更新 snort.conf 中所定義的 rules (當(dāng)新的攻擊方式出現(xiàn)以后,要及時(shí)更新)
首先,我們需要更改一下 /etc/snort/snort.conf 具體需要參照您自己的機(jī)器來(lái)設(shè)定。
#設(shè)定 log 存放的地方
config logdir: /var/log/snort
#設(shè)定網(wǎng)路
var HOME_NET 192.168.1.0/24
var EXTERNAL_NET any
var SMTP ?$HOME_NET
var HTTP_SERVERS ?$HOME_NET
var SQL_SERVERS ?$HOME_NET
var DNS_SERVERS 192.168.1.250/32
var RULE_PATH ./
#設(shè)定 preprocessors
preprocessor frag2
preprocessor stream4: detect_scans
preprocessor stream4_reassemblt
preprocessor portscan: ?$HOME_NET 4 3 portscan.log
#設(shè)定 output
output database: log, mysql, user=root
dbname-snort host=localhost
#rules
alert tcp ?$HOME_NET 7161 -> ?$EXTERNAL_NET any
(msg: "MISC Cisco Catalyst Remote Access";
flags: SA; reference:arachnids, 129;
reference:cve, CVE-1999-0430;
classtype:bad-unknow; sid:513; rev:1;)
#設(shè)定 patch , 這些都是些附加的 rules 的文件
include ?$RULE_PATH/bad-traffic.rules
include ?$RULE_PATH/exploit.rules
include ?$RULE_PATH/scan.rules
include ?$RULE_PATH/ftp.rules
#這些 rule 其實(shí)還有很多.您可以自己去寫(xiě),也可以找人家寫(xiě)好的下載拿來(lái)用.
現(xiàn)在讓我們把 snort 跑起來(lái)∶
snort -c /etc/snort/snort.conf -D -i eth0
現(xiàn)在 snort NIDS 的模式跑起來(lái)了. 在 default 的情況下∶
alerts 會(huì)放在 /var/log/snort/alert 中
port-scanning 會(huì)放在 /var/log/snort/portscan.log
當(dāng)您真正跑 NIDS 的時(shí)侯,需要把 snort 以 daemon 的模式來(lái)跑. 如果您安裝的是 rpm 的東西,那么 rpm 文件中已經(jīng)包含了一個(gè) snortd 的文件,并且會(huì)幫您安裝在 /etc/rc.d/init.d/ 下面. 當(dāng)您設(shè)定好 snort 的 configure 文件以后,只要用 chkconfig 把 snortd 打開(kāi)就可以了:
加入 snortd
chkconfig --add snortd
打開(kāi) snortd
chkconfig snortd on
或者
chkconfig --level 3 snortd on
這里的 level 請(qǐng)自行更改到您所跑的 runlevel
您可以用 cat /etc/inittab | grep id 來(lái)看自己在哪個(gè)runlevel 上面。
cat /etc/inittab | grep id
id:5:initdefault:
這里就是說(shuō)跑在 run level 5 上面。
設(shè)定服務(wù)器 我們需要對(duì)服務(wù)器做一些設(shè)定,讓服務(wù)器把 log 送到我們的 logger 服務(wù)器去. 首先,我們需要設(shè)定 /etc/syslog.conf 把 log 送到一個(gè)有效的,但是不存在的 ip 下面.例如我們的網(wǎng)路是 192.168.1.0/24 其中并沒(méi)有 192.168.1.123 這臺(tái)機(jī)器,也就是說(shuō)這個(gè) ip 實(shí)際上是空的.我們就把 log 指向這里.您可以指向任意一個(gè)空的有效 ip.
vim /etc/syslog.conf
加入
*.info @192.168.1.123
如果您的系統(tǒng)是用 syslog-ng 的話
vim /etc/syslog-ng/syslog-ng.conf
destination d_loghost { udp(ip(192.168.123)
port (514)); };
filter f_info { level(info); };
log {filter(f_info); destination(d_loghost);};
我們還需要加入 static ARP entry 才可以. 如果您的網(wǎng)路只是接了記個(gè) Hub 而已, 那么 ARP 地址一樣可以好象 ip 一樣,設(shè)定成虛構(gòu)的. 如果您有連結(jié) switch, 您需要加入 log 服務(wù)器的真實(shí) MAC 地址.
我們這里加入我們 logger 服務(wù)器的真實(shí) MAC 地址就可以了.
arp -s 192.168.1.123 00:D0:B7:DB:BF:95
在 Logger 服務(wù)器設(shè)定 snort
/etc/snort/snort.conf
var EXTERNAL_NET any
#等于 snort -d
config dump_payload
#等于 snort -C
config dump_chars_only
#設(shè)定 log 存放的 path
config logdir: /var/log/snort
# frag2 所做的動(dòng)作就是把 fragmented 給我們 re-assembly
preprocessor frag2
log udp 192.168.1.1/32 any -> 192.168.1.123/32 514
(logto: "logged-packets";)
最后一行需要稍微解釋一下∶
我們這里把 snort 來(lái)做 packet logger. 也就是說(shuō),并不是把所有的東西都寫(xiě)入到 /var/log/snort/alert 中.而是 log any packets with match the rule without writing an alert。
udp: 是說(shuō),我們這里用 udp 的 protocol. system log 通常都是使用 udp 的。
192.168.1.1/32: 就是只我們的服務(wù)器啦,也就是送 log 的機(jī)器. 如果您是從整個(gè)一個(gè)網(wǎng)路段中收 log 也可以用 192.168.1.0/24.
any: any source port 任何 port
->: 這個(gè)是 direction operator 大家都知道的
192.168.1.123/35 514 就是我們給出的那個(gè)空 ip 啦,port 514
如果沒(méi)有指定 logto: 的話,log 會(huì)分別保存在不同的文件中. 而指定 logto 的話,就會(huì)把 log 全部存放到我們指定的文件中,看起來(lái)方便多了。
更安全的保存 log 就可以更安全的保護(hù)服務(wù)器. snort 的功能實(shí)際上非常的強(qiáng)大, 這里只是一個(gè)簡(jiǎn)單的介紹而已.如果您對(duì)這些東西有興趣.可以去 www.snort.org/docs/ 下面看到非常多的有用的文件。