運維安全應該怎麼作?

運維安全中的攻與防博弈,如何第一時間預警,這是咱們爲企業提供的第一道安全防線,建設安全體系創建統一安全管理平臺,是咱們爲企業打造一個安全可靠的平臺的惟一途徑。隨着互聯網的興起,衆多業務部署在互聯網上,時刻都面臨着威脅與考驗。專業的和自動化的惡意破壞,企業老是後知後覺,沒法作到有效的預警和響應,致使企業數據被竊取或服務中斷。在平常運維工做中,對linux服務器進行安全檢查是一個很是重要的環節。因爲安全意識不高或者沒有規範的安全約束致使生產環境中招被植入惡意程序的安全事件頻頻發生。那麼咱們必定要有一良好的安全習慣才能爲企業打造一個安全可靠穩定的生產環境。linux

一、如何安全防範

   首先要有安全規範的配置約束,系統文件如何配置,應該有什麼樣的權限,應該放置什麼位置,應該什麼用戶使用,都要有明確的邊界與要求。最基本的要有linux系統安全基線(以前博客中講到過安全基線能夠自行查閱)
   網絡環境流量策略要明確、要有業務、數據、運維安全域、全部流量權限控制要精確,生產區域的流量必定不要放行出方向流量避免僵屍網絡的產生致使服務器癱瘓、必要的狀況要配置、IDS\IPS,FW\WAF。常見問題應對,通常常見問題如網絡層的ddos,可使用隱藏ip技術,或購買流量清洗。
   主機系統要統一化配置、命名規範、目錄統1、版本統1、有能力的狀況下部署安全防禦系統,安裝主機IDS。主機配置要作變動限制、變動啓用報警、文件防篡改、登陸安全認證,用戶密碼設置複雜按期更改知足等保要求。遠程登陸要嚴格控制可使用堡壘機訪問。可疑文件及時檢查、無用文件及時清理不給惡意破壞程序留有餘地,有用文件及時進歸檔、重要文件及時備份。審計安全日誌不可缺乏或增強歷史命令的詳細定義。
運維安全應該怎麼作?
運維應具有病毒查殺、登陸審計、密碼破解、惡意請求、高危命令、本地提權、反彈Shell多維度的偵查,能夠快速的發現對企業服務器的掃描行爲,及時預警解決。主機安全漏洞也要按期升級、增強內網安全,部署安全補丁服務器或YUM源服務器。
   應用軟件須要作上線前安全評估後方能上線,沒有作過代碼安全檢測的軟件直接上生產環境都是在耍流氓,生產環境將面臨風險與挑戰,WEB安全更是不容忽視的,再強的安全防禦也怕代碼級的漏洞,業務漏洞影響更是嚴重,升級整改很是重要。有能力的企業能夠定製開發安全網關。像跨站,xss,sql注入等應用層漏洞,須要開發對業務代碼漏洞修復,須要有安全編碼規範,和使用代碼檢測工具作安全檢測,展現平臺類應用注意防篡改,被掛馬,權限合理管理分配,增強內部技術人員安全意識。
   數據安全應該是安全級別最高的,數據存儲須要作安全域隔離,針對平臺作通訊加密以及數據落地加密存儲(數據加密可選,如今這麼多法律法規出來,尤爲我的信息,數據安全,出現漏洞致使數據泄露,將會給公司帶來大損失,好比監管機構查和罰款,股票波動,聲譽損失,客戶流失。redis

  • 簡單的安全防禦體系:
    1. 主機層:防病毒、hids、基線加固、漏洞掃描
    2. 數據安全:加解密、數據庫審計
    3. 應用層:waf、風控、ids
    4. 網絡層:nids、防火牆
      ***:外網訪問公司內部網,或者不一樣區域間專網
      堡壘機:生產環境訪問必須堡壘機,權限控制,審計等。
      運維安全應該怎麼作?

二、常規安全檢查

1)檢查系統日誌
檢查系統錯誤登錄日誌,統計IP重試次數(last命令是查看系統登錄日誌,好比系統被reboot或登錄狀況)
[root@localhost ~] # lastsql

2)檢查系統用戶
查看是否有異常的系統用戶
[root@localhost ~] # cat /etc/passwd數據庫

查看是否產生了新用戶,UID和GID爲0的用戶
[root@localhost ~] # grep "0" /etc/passwd安全

查看 passwd 的修改時間,判斷是否在不知的狀況下添加用戶
[root@localhost ~] # ls -l /etc/passwd服務器

查看是否存在特權用戶
[root@localhost ~] # awk -F: '$3==0 {print $1}' /etc/passwd網絡

查看是否存在空口令賬戶
[root@localhost ~] # awk -F: 'length($2)==0 {print $1}' /etc/shadow運維

3)檢查異常進程
注意UID爲0的進程
使用 ps -ef命令查看進程socket

查看該進程所打開的端口和文件
[root@localhost ~] # lsof -p pid命令查看xss

檢查隱藏進程
[root@localhost ~] # ps -ef | awk '{print }' | sort -n | uniq >1
[root@localhost ~] # ls /proc |sort -n|uniq >2
[root@localhost ~] # diff 1 2
隱藏進程檢查工具unhide取證工具經過對全部可用的TCP/IP端口進行暴力求解的方式,辨別全部正在監聽,卻沒有列入/bin/netstat或者/bin/ss命令輸出的TCP/IP端口身份。

4)檢查異常系統文件
[root@localhost ~] # find / -uid 0 -perm -4000 -print
[root@localhost ~] # find / -size +10000k -print
[root@localhost ~] # find / -name "…" -print
[root@localhost ~] # find / -name ".." -print
[root@localhost ~] # find / -name "." -print
[root@localhost ~] # find / -name " " -print

5)檢查系統文件完整性
[root@localhost ~] # rpm -qf /bin/ls
[root@localhost ~] # rpm -qf /bin/login
[root@localhost ~] # md5sum -b 文件名
[root@localhost ~] # md5sum -t 文件名

6)檢查RPM的完整性
[root@localhost ~] # rpm -Va #注意相關的/sbin,/bin,/usr/sbin,/usr/bin
輸出格式說明:
S – File size differs
M – Mode differs (permissions)
5 – MD5 sum differs
D – Device number mismatch
L – readLink path mismatch
U – user ownership differs
G – group ownership differs
T – modification time differs

7)檢查網絡
[root@localhost ~] # ip link | grep PROMISC(正常網卡不應在promisc模式,可能存在sniffer)
[root@localhost ~] # lsof -i
[root@localhost ~] # netstat -nap(察看不正常打開的TCP/UDP端口)
[root@localhost ~] # arp -a

8)檢查系統計劃任務
[root@localhost ~] # crontab -u root -l
[root@localhost ~] # cat /etc/crontab
[root@localhost ~] # ls /etc/cron.*

9)檢查系統後門
[root@localhost ~] # cat /etc/crontab
[root@localhost ~] # ls /var/spool/cron/
[root@localhost ~] # cat /etc/rc.d/rc.local
[root@localhost ~] # ls /etc/rc.d
[root@localhost ~] # ls /etc/rc3.d

10)檢查系統服務
[root@localhost ~] # chkconfig --list 【Centos6】
[root@localhost ~] #systemctl list-unit-files 【Centos7】
[root@localhost ~] # rpcinfo -p(查看RPC服務)

11)檢查rootkit
[root@localhost ~] # rkhunter -c
[root@localhost ~] # chkrootkit -q

12)檢查應用訪問日誌的IP來源
awk '{count[$1]++}END{for (ip in count) {printf "%-20s:%d\n",ip,count[ip]}}' access_log

三、Linux系統安全響應思路

常見的中毒表如今如下三個方面:
1)服務器出方向的帶寬大這是僵屍網絡主機的一個特徵。
由於服務器中招後常見的就是拿去當肉雞;再者就是拿你的數據等。因此服務器帶寬方面須要特別注意下,若是服務器出去的帶寬很大,服務器或網絡確定有些異常,須要及時檢查一下!

2)系統裏是否存在多餘的不明的用戶?
中毒以後會致使系統裏產生一些不明用戶或者登錄日誌,因此這方面的檢查也是能夠看出一些異常的。

3)開機是否啓動一些不明服務和crond任務裏是否有一些異常任務?
由於中毒會隨系統的啓動而啓動的,因此通常會開機啓動,檢查一下啓動的服務或者文件是否有異常,通常會在 /etc/rc.local 和crondtab -l 顯示出來。
1)運行 ps 和 top 命令,查找佔用資源大的進程。
2)查看這些陌生程序所在路徑,ls /proc/ 進程號 /exe ,而後再次 kill 掉進程。
3)接着用 strace 命令跟蹤這些陌生程序:strace /bin/XX
1.調試命令
strace -p pid
2.跟蹤指定進程的PID
gdb -p pid
4)netstat 檢查網絡鏈接狀況,檢查主機對外的網絡鏈接,查找來源。
netstat -nta |awk '{print $5}' |cut -d: -f1 |sort|uniq -c |sort -n

netstat -n | awk '/^tcp/ {++state[$NF]}; END {for(key in state) print key,"\t",state[key]}'

[root@localhost tmp]# netstat -s | grep -E 'overflow|drop'
16 outgoing packets dropped
4 ICMP packets dropped because they were out-of-window
13852408 SYNs to LISTEN sockets dropped
從上面看出全鏈接隊列溢出的次數,隔幾秒鐘執行下,這個數字還在增長確定全鏈接隊列偶爾滿了。
運維安全應該怎麼作?
Recv-Q Send-Q分別表示網絡接收隊列,發送隊列。Q是Queue的縮寫。
這兩個值一般應該爲0,若是不爲0多是有問題的。packets在兩個隊列裏都不該該有堆積狀態。可接受短暫的非0狀況。短暫的Send-Q隊列發送pakets非0是正常狀態。
若是接收隊列Recv-Q一直處於阻塞狀態,多是遭受了拒絕服務 denial-of-service。
若是發送隊列Send-Q不能很快的清零,多是有應用向外發送數據包過快,或者是對方接收數據包不夠快。
Recv-Q:表示收到的數據已經在本地接收緩衝,可是還有多少沒有被進程取走,recv()
Send-Q:對方沒有收到的數據或者說沒有Ack的,仍是本地緩衝區.
下面是我在生產環境中的部分排查步驟:
查殺軟件顯示本機沒有感染文件:
運維安全應該怎麼作?
安全防禦軟件有時會顯示警告有異常流量:
運維安全應該怎麼作?

使用nethogs命令查看網絡進程使用流量狀況,發現異常流量:

運維安全應該怎麼作?
可疑IP溯源分析:
運維安全應該怎麼作?
目的地址變化可能在往外發包嘗試掃描動做。並且源端口使用了80、8080等端口來隱藏進程本身的身份。由此能夠判斷它就是隱藏在此服務器上。使用tcpdump -nn -vvv -i ens192 src 172.XX.XX.157 and port 8081 查看,發現確實有流量向外發出,源IP172.XX.XX.15七、源端口8081且與nethogs監控數據一致,說明確實本機已創建socket鏈接向外發送數據包。

再次嘗試查找:ccrontab –e沒有發現,咱們經過cat /etc/crontab再次查看計劃任務發現了兩個異常任務:
運維安全應該怎麼作?
查看文件內容:經過查詢已經得知它的名字是WatchBogMiner變種挖礦程序。
運維安全應該怎麼作?
再次刪除tmp下的文件,發現redis2和kdevtmpfsi這兩個文件不能刪除chattr 命令取消權限,將其刪除。
運維安全應該怎麼作?
問題排查主要卡在了隱藏進程沒法進一步定位分析,只要解決了隱藏進程就好排查了。問題延伸: 能夠安裝unhide查看隱藏進程,小試牛刀有但願了。
運維安全應該怎麼作?
[root@localhost ~] # awk -F":" '{if($3 == 0) print $1}' /etc/passwd
root
結果發現只輸入了root這一個用戶,說明系統用戶是正常的。
其實,當系統被感染rootkit後,系統已經變得不可靠了,惟一的辦法就是重裝系統了。

四、安全建議

1. 主動修復應用代碼級漏洞。
2. 創建監控系統觀察異常流量的動向。
3. 主機防禦要作好,容器安全權限增強也要作好。
4. 網絡防禦,不要輕意對外映射與業務無關的端口。
5. 聯動安全平臺,監控流量、主動查殺、主動防禦。

參考安全圖譜全景
運維安全應該怎麼作?

相關文章
相關標籤/搜索