是誰在撩動着我的服務器

            安全--怎樣才能追根朔源

    有人說安全,安全是什麼,怎麼做,怎麼才能做好,其實是個永無止境的話題。

淺談下工作中那些方法:

1、所有的操作都必須流程化,可控化。

2、考覈機制。

3、相應的技術手段,提升安全的門檻<系統權限管理、堡壘機、跳板機、防火牆設置>。

4、主動防禦。<蜜罐、waf>

5、探測技術。<nmap zmap>

6、告警響應機制。

7、調查告警原因。


那就談談怎麼實現:

原理圖

wKioL1lEBCGQVXksAAFtn7UeTJc815.png



  • 怎麼監控惡意行爲

工欲善其事,必先利其器


怎麼監控 Windows server服務器  配置安全-高級審覈策略,怎麼配置,請聽我慢慢到來。

實例如下:《可根據生產環境,斟酌採取各種日誌,一下只是實例》



帳戶登錄事件(此類別中的事件幫助文檔域嘗試對帳戶數據、域控制器或本地安全帳戶管理器 (SAM)  進行身份驗證。與登錄和註銷事件(它們跟蹤訪問特殊計算機的嘗試)不同,此類別中的事件報告正在使用的帳戶數據庫。)憑據驗證
審覈由對用戶帳戶登錄憑據的驗證測試生成的事件。成功、失敗
Kerberos 身份驗證服務
審覈  Kerberos 服務票證請求生成的事件。失敗、成功
Kerberos服務票證操作
審覈由響應爲用戶帳戶登錄提交的憑據請求(非憑據驗證或  Kerberos 票證)生成的事件。成功、失敗
其他帳戶登錄事件
審覈由  Kerberos 身份驗證票證授予票證 (TGT) 請求生成的事件。成功、失敗
帳戶管理事件(可以使用此類別中的設置監視對用戶和計算機帳戶和組的更改。)用戶帳戶管理
審覈對用戶帳戶的更改。成功、失敗
計算機帳戶管理
審覈由對計算機帳戶的更改(如當創建、更改或刪除計算機帳戶時)生成的事件。成功、失敗
安全組管理
審覈由對安全組的更改生成的事件。成功、失敗
通訊組管理
審覈由對通訊組的更改生成的事件。注意:僅在域控制器上記錄此子類別中的事件。成功、失敗
應用程序組管理
審覈由對應用程序組的更改生成的事件。成功、失敗
其他帳戶管理事件
審覈由此類別中不涉及的其他用戶帳戶更改生成的事件。成功、失敗



  • 本地會產生日誌,怎麼將日誌發送到遠端日誌服務器,簡單圖上面已經標明,利用evtsys.exe 發送到指定的log服務器。


  • Linux 服務器開啓審計策略

1.1    命令時間戳記錄

    /etc/bashrc文件中增加如下行

    export  HISTTIMEFORMAT="%F %T "


2.1    日誌審計策略配置


    /etc/audit/audit.rules

        實現監控所有用戶的登錄行爲,包含用戶所有操作,以及shell腳本中的命令

    -a exit,always-F arch=b64 -S execve -k exec

    -a exit,always -Farch=b32 -S execve -k exec

2.2  實現對重點配置文件的監控(根據實際應用額外添加文件列表)    

    -w /etc/crontab -p wa -kcrontab

    -w /etc/hosts -p wa -khosts

    -w /etc/hosts.allow-p wa -k hosts-allow

    -w /etc/hosts.deny-p wa -k hosts-deny

    -w /etc/fstab -p wa -k fstab

    -w /etc/passwd-p wa -k passwd

    -w /etc/shadow-p wa -k shadow

    -w /etc/group-p wa -k group


3.1    

    配置audit日誌,audit日誌文件自動保存在/var/log/audit/目錄中。

    num_logs = 4       #個數

    max_log_file = 50   # 大小(MB)



4.1    添加無用日誌過濾規則:

    

    /etc/rsyslog.d/目錄添加audit_filter.conf文件,並在文件中添加如下內容:

:msg, ereregex,"(bin|sbin|sa)\/(ping|top|mpstat|iostat|iotop|vmstat|sar|sadc|sh)\""~

:msg, ereregex,"(sbin|udev)\/(fstab_import|udisks-part-id|path_id|edd_id|scsi_id)\""~

:msg, ereregex,"(bin|sbin)\/(tr|sort|wc|cut|awk|gawk|grep|fgrep|egrep|sed|head|tail|tailf)\""~

:msg, ereregex,"(bin|sbin)\/(sleep|ls|expr|nohup|date|cat|du|dirname|tar|gzip|df|sg_persist|ip)\""~

:msg, ereregex,"(bin|sbin)\/(basename|hostname|readlink|bc|touch|dmesg)\"" ~

:msg, ereregex,"(bin|sbin)\/(consoletype|blkid|lsblk)\"" ~

:msg, ereregex,"\"(ping|top|mpstat|iostat|iotop|vmstat|sar|sadc|sh)\"" ~

:msg, ereregex,"\"(fstab_import|udisks-part-id|path_id|edd_id|scsi_id)\""~

:msg, ereregex,"\"(tr|sort|wc|cut|awk|gawk|grep|fgrep|egrep|sed|head|tail|tailf)\""~

:msg, ereregex,"\"(sleep|ls|expr|nohup|date|cat|du|dirname|tar|gzip|df|sg_persist|ip)\""~

:msg, ereregex,"\"(basename|hostname|readlink|bc|touch|dmesg)\"" ~

:msg, ereregex,"\"(consoletype|blkid|lsblk)\"" ~

:msg, ereregex,"(type=PATH)" ~

:msg, ereregex,"(key=\"exec\"|type=EXECVE)" @x.x.x.x:514


啓動服務

# service auditd start

  # service rsyslog start


5.1     附上一個批量部署的腳本

            

#!/bin/bash
#
# Description: Linux audit and syslog/rsyslog autoconfig Scripts.
#
# Author: ldyhj <[email protected]>
#
# ver 1.0
# --------------------------------------------------------------------------------

OS_VERSION=""
uname -r | grep el5 > /dev/null && OS_VERSION=el5
uname -r | grep el6 > /dev/null && OS_VERSION=el6
uname -r | grep el7 > /dev/null && OS_VERSION=el7

if [ "$OS_VERSION" = "el7" -o "$OS_VERSION" = "el6" ];then
    FILENAME=/etc/rsyslog.conf
    SERVER=rsyslog
elif [ "$OS_VERSION" = "el5" ];then
    FILENAME=/etc/syslog.conf
    SERVER=syslog	
fi

unset ret
ret=`egrep ^active[[:space:]]*= /etc/audisp/plugins.d/syslog.conf 2> /dev/null |wc -l`
if [ "$ret" -eq 0 ];then
    echo "active = yes" >> /etc/audisp/plugins.d/syslog.conf
    service auditd restart
elif [ "$ret" -eq 1 ];then
    ret1=`egrep ^active[[:space:]]*= /etc/audisp/plugins.d/syslog.conf |awk -F'=' '{print $NF}' |awk 'gsub(/^ *| *$/,"")'`
    if [ "$ret1" != "yes" ];then
        sed -i 's/^\(active[[:space:]]*=\).*/\1 yes/g' /etc/audisp/plugins.d/syslog.conf
        service auditd restart
	fi
elif [ "$ret" -gt 1 ];then
    sed -i 's/^\(active[[:space:]]*=.*\)/#\1/g' /etc/audisp/plugins.d/syslog.conf
    echo "active = yes" >> /etc/audisp/plugins.d/syslog.conf
    service auditd restart
fi
egrep ^active[[:space:]]*= /etc/audisp/plugins.d/syslog.conf

unset ret
unset ret1

ret=`egrep "^\*\.\*[[:space:]]*@" $FILENAME 2> /dev/null |wc -l`
if [ "$ret" -eq 0 ];then
    echo "*.* @x.x.x.x:514" >> $FILENAME
    service $SERVER restart
elif [ "$ret" -eq 1 ];then
    ret1=`egrep "^\*\.\*[[:space:]]*@" $FILENAME |awk -F'@' '{print $2}' |awk 'gsub(/^ *| *$/,"")'`
	if [ "$ret1" != "x.x.x.x:514" ];then
        sed -i 's/^\(\*\.\*[[:space:]]*@\).*/\x.x.x.x:514/g' $FILENAME
        service $SERVER restart
    fi
elif [ "$ret" -gt 0 ];then
    sed -i 's/^\(\*\.\*[[:space:]]*@.*\)/#\1/g' $FILENAME
    echo "*.* @x.x.x.x:514" >> $FILENAME
    service $SERVER restart
fi
	
egrep "\*\.info[[:space:]]*@" $FILENAME > /dev/null
if [ $? -eq 0 ];then
    sed -i 's/^\(\*\.info[[:space:]]*@.*\)/#\1/g' $FILENAME
    service $SERVER restart
fi

egrep "^\*\.\*[[:space:]]*@" $FILENAME



6.1    linux rsyslog服務器  配置

    /etc/rsyslog.conf

    配置模板

   

$templatepipeformat,"%TIMESTAMP% %fromhost-ip%%syslogtag%%msg:::drop-last-lf%\n"

$templateevtsysformat,"%TIMESTAMP% %fromhost-ip% %pri-text% %FROMHOST%%fromhost-ip% %syslogtag%%msg:::drop-last-lf%\n"

$templateruncmdformat,"%TIMESTAMP% %HOSTNAME% %fromhost-ip%%msg:::drop-last-lf%\n"

                根據需求進行摘選模板存放位置

                

if$fromhost-ip == 'IP' or $fromhost-ip == '接收來自客戶端IP' or $fromhost-ip== '接收IP' or $fromhost-ip == '接收客戶端IP' or $fromhost-ip =='接收客戶端IP' or $fromhost-ip == '接收客戶端IP' or $fromhost-ip =='接收客戶端IP' then |/var/tmp/log


    配置完成後,檢查語法  rsyslogd -N1

    重啓服務


有了數據,你想實現什麼樣的告警都需要去摸索

目前,我採用的是電視屏幕展示,加事件風險等級做報警短信告警,因爲採用了固定的rsyslog模板,可以使用 AWK  python 取你想要的東西做參數;這樣實現誰操作了服務器,做了什麼都是一目瞭然。



附件、附上本次需要設計到的文檔,軟件



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章