一、linux入侵排查
思路:
1、查看帳號
-
查看/etc/passwd文件中使用 /bin/bash 作為默認 shell 的用戶。
-
查詢特權用戶特權用戶(uid 為0)
-
查詢可以遠程登錄的帳號信息
-
除root帳號外,其他帳號是否存在sudo權限。
-
禁用或刪除多余及可疑的帳號
用find命令查看擁有可疑權限的文件
2、查看執行過的系統命令
-
進入用戶目錄下,導出歷史命令。cat .bash_history >> history.txt
3、檢查異常端口、異常進程、開機啟動項、定時任務防止后門
4、檢查系統日志
1.1 賬號安全
方式:
1、用戶信息文件 /etc/passwd root:x:0:0:root:/root:/bin/bash account:password:UID:GID:GECOS:directory:shell 用戶名:密碼:用戶ID:組ID:用戶說明:家目錄:登陸之后的 shell 注意:無密碼只允許本機登陸,遠程不允許登陸
2、影子文件 /etc/shadow root:$6$oGs1PqhL2p3ZetrE$X7o7bzoouHQVSEmSgsYN5UD4.kMHx6qgbTqwNVC5oOAouXvcjQSt.Ft7ql1WpkopY0UV9ajBwUt1DpYxTCVvI/:16809:0:99999:7::: 用戶名:加密密碼:密碼最后一次修改日期:兩次密碼的修改時間間隔:密碼有效期:密碼修改到期到的警告天數:密碼過期之后的寬限天數:賬號失效時間:保留
查看特權賬號
查詢登錄信息
成功:
失敗:
1.2 歷史命令
基本使用:
通過 .bash_history 文件查看帳號執行過的系統命令
1、root 用戶的歷史命令histroy
2、打開 /home 各帳號目錄下的 .bash_history,查看普通帳號執行的歷史命令。 為歷史的命令增加登錄的 IP 地址、執行命令時間等信息: 1)保存1萬條命令 sed -i 's/^HISTSIZE=1000/HISTSIZE=10000/g' /etc/profile 2)在/etc/profile的文件尾部添加如下行數配置信息: ######jiagu history xianshi######### USER_IP=`who -u am i 2>/dev/null | awk '{print $NF}' | sed -e 's/[()]//g'` if [ "$USER_IP" = "" ] then USER_IP=`hostname` fi export HISTTIMEFORMAT="%F %T $USER_IP `whoami` " shopt -s histappend export PROMPT_COMMAND="history -a" ######### jiagu history xianshi ##########
3)source /etc/profile 讓配置生效
生成效果:
3、歷史操作命令的清除:history -c 但此命令并不會清除保存在文件中的記錄,因此需要手動刪除 .bash_profile 文件中的記錄。
1.3 檢查異常端口
使用 netstat 網絡連接命令,分析可疑端口、IP、PID
netstat -antlp | more
查看下 pid 所對應的進程文件路徑, 運行 ls -l /proc/$PID/exe 或 file /proc/$PID/exe($PID 為對應的 pid 號)
1.4 檢查異常進程
使用 ps 命令,分析進程
ps aux | grep pid
1.5 檢查開機啟動項
查看運行級別命令 runlevel
系統默認允許級別
vi /etc/inittab id=3:initdefault #系統開機后直接進入哪個運行級別
開機啟動配置文件
/etc/rc.local /etc/rc.d/rc[0~6].d
1.6 檢查定時任務
基本使用
1、利用 crontab 創建計劃任務
-
基本命令
-
crontab -l ? 列出某個用戶cron服務的詳細內容 ? Tips:默認編寫的crontab文件會保存在 (/var/spool/cron/用戶名 例如: /var/spool/cron/root ? crontab -r ? 刪除每個用戶cront任務(謹慎:刪除所有的計劃任務) ? crontab -e ? 使用編輯器編輯當前的crontab文件 ? 如:*/1 * * * * echo "hello world" >> /tmp/test.txt 每分鐘寫入文件
2、利用 anacron 命令實現異步定時任務調度
-
使用案例
每天運行 /home/backup.sh 腳本: vi /etc/anacrontab @daily 10 example.daily /bin/bash /home/backup.sh 當機器在 backup.sh 期望被運行時是關機的,anacron會在機器開機十分鐘之后運行它,而不用再等待 7天。
入侵排查
重點關注以下目錄中是否存在惡意腳本
/var/spool/cron/* /etc/crontab /etc/cron.d/* /etc/cron.daily/* /etc/cron.hourly/* /etc/cron.monthly/* /etc/cron.weekly/ /etc/anacrontab /var/spool/anacron/*
小技巧:
more /etc/cron.daily/* 查看目錄下所有文件
1.7 檢查服務
服務自啟動
第一種修改方法:
chkconfig [--level 運行級別] [獨立服務名] [on|off] chkconfig –level 2345 httpd on 開啟自啟動 chkconfig httpd on (默認level是2345)
第二種修改方法:
修改 /etc/re.d/rc.local 文件 加入 /etc/init.d/httpd start
第三種修改方法:
使用 ntsysv 命令管理自啟動,可以管理獨立服務和 xinetd 服務。
入侵排查
1、查詢已安裝的服務:
RPM 包安裝的服務
chkconfig --list 查看服務自啟動狀態,可以看到所有的RPM包安裝的服務 ps aux | grep crond 查看當前服務系統在3與5級別下的啟動項 中文環境 chkconfig --list | grep "3:啟用\|5:啟用" 英文環境 chkconfig --list | grep "3:on\|5:on"
源碼包安裝的服務
查看服務安裝位置 ,一般是在/user/local/ service httpd start 搜索/etc/rc.d/init.d/ 查看是否存在
1.8 檢查異常文件
1、查看敏感目錄,如/tmp目錄下的文件,同時注意隱藏文件夾,以“..”為名的文件夾具有隱藏屬性
2、得到發現WEBSHELL、遠控木馬的創建時間,如何找出同一時間范圍內創建的文件?
可以使用find命令來查找,如 find /opt -iname "*" -atime 1 -type f 找出 /opt 下一天前訪問過的文件
3、針對可疑文件可以使用 stat 進行創建修改時間。
1.9 檢查系統日志
日志默認存放位置:/var/log/
查看日志配置情況:more /etc/rsyslog.conf
日志文件 | 說明 |
---|---|
/var/log/cron | 記錄了系統定時任務相關的日志 |
/var/log/cups | 記錄打印信息的日志 |
/var/log/dmesg | 記錄了系統在開機時內核自檢的信息,也可以使用dmesg命令直接查看內核自檢信息 |
/var/log/mailog | 記錄郵件信息 |
/var/log/message | 記錄系統重要信息的日志。這個日志文件中會記錄Linux系統的絕大多數重要信息,如果系統出現問題時,首先要檢查的就應該是這個日志文件 |
/var/log/btmp | 記錄錯誤登錄日志,這個文件是二進制文件,不能直接vi查看,而要使用lastb命令查看 |
/var/log/lastlog | 記錄系統中所有用戶最后一次登錄時間的日志,這個文件是二進制文件,不能直接vi,而要使用lastlog命令查看 |
/var/log/wtmp | 永久記錄所有用戶的登錄、注銷信息,同時記錄系統的啟動、重啟、關機事件。同樣這個文件也是一個二進制文件,不能直接vi,而需要使用last命令來查看 |
/var/log/utmp | 記錄當前已經登錄的用戶信息,這個文件會隨著用戶的登錄和注銷不斷變化,只記錄當前登錄用戶的信息。同樣這個文件不能直接vi,而要使用w,who,users等命令來查詢 |
/var/log/secure | 記錄驗證和授權方面的信息,只要涉及賬號和密碼的程序都會記錄,比如SSH登錄,su切換用戶,sudo授權,甚至添加用戶和修改用戶密碼都會記錄在這個日志文件中 |
日志分析技巧
1、定位有多少IP在爆破主機的root帳號: grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more定位有哪些IP在爆破: grep "Failed password" /var/log/authlog | grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"|uniq -c2、登錄成功的IP有哪些: grep "Accepted " /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more登錄成功的日期、用戶名、IP: grep "Accepted " /var/log/secure | awk '{print $1,$2,$3,$9,$11}' 3、增加一個用戶kali日志: Jul 10 00:12:15 localhost useradd[2382]: new group: name=kali, GID=1001 Jul 10 00:12:15 localhost useradd[2382]: new user: name=kali, UID=1001, GID=1001, home=/home/kali , shell=/bin/bash Jul 10 00:12:58 localhost passwd: pam_unix(passwd:chauthtok): password changed for kali #grep "useradd" /var/log/secure 4、刪除用戶kali日志: Jul 10 00:14:17 localhost userdel[2393]: delete user 'kali' Jul 10 00:14:17 localhost userdel[2393]: removed group 'kali' owned by 'kali' Jul 10 00:14:17 localhost userdel[2393]: removed shadow group 'kali' owned by 'kali'# grep "userdel" /var/log/secure5、su切換用戶: Jul 10 00:38:13 localhost su: pam_unix(su-l:session): session opened for user good by root(uid=0)sudo授權執行: sudo -l Jul 10 00:43:09 localhost sudo: good : TTY=pts/4 ; PWD=/home/good ; USER=root ; COMMAND=/sbin/shutdown -r now
二、利用腳本進行應急響應防止暴力破解
應急響應
記錄日志
#!/bin/bashlogfile=/var/log/nginx last_minutes=1 開始時間1分鐘之前(這里可以修改,如果要幾分鐘之內攻擊次數多少次,這里可以自定義)start_time=`date -d"$last_minutes minutes ago" +"%d/%m/%Y:%H:%M:%S"` echo $start_time結束時間現在stop_time=`date +"%d/%m/%Y:%H:%M:%S"`//當前時間 echo $stop_time cur_date="`date +%d/%m/%Y`" echo $cur_date過濾出單位之間內的日志并統計最高ip數,請替換為你的日志路徑tac $logfile/access.log | awk -v st="$start_time" -v et="$stop_time" '{t=substr($4,2);if(t>=st && t<=et){print $1}}' |sort | uniq -c | sort -nr > $logfile/log_ip_top10 #ip_top=`cat $logfile/log_ip_top10 | head -1 | awk '{print $1}'`出現橫杠使用sed去掉第一行#sed -i '1d' $logfile/log_ip_top10 單位時間[1分鐘]內單ip訪問次數超過200次的ip記錄入black.txtip=`cat $logfile/log_ip_top10 | awk '{if($1 > 100)print $2}'` for line in $ip do echo $line >> $logfile/getip.txt echo $line iptables -I INPUT -p tcp -m multiport --dport 80,443 -s $line -j DROP done
暴力破解
第一步:創建密碼字典
開始爆破:
利用hydra -l root -P pass.txt ssh://192.168.157.135
爆破成功!
應急響應
通過awk '/Failed password/ {print $11}' /var/log/auth.log | sort | uniq -c | sort -nr
查詢定位有多少IP在登錄主機的root帳號
發現有異常IP登錄多次,懷疑是對root進行了密碼爆破
通過sudo awk '/Accepted / {print $(NF-3)}' /var/log/auth.log | sort | uniq -c | sort -nr
篩查登陸成功的ip
發現其可疑ip已經成功登錄多次
查詢登陸時間
查看該ip是否登錄到系統中last -f wtmp
為了防止再次進行爆破進行下一步操作
遏制暴力破解
#!/bin/bash dompurity IP=$(awk '/Failed password/ {IP[$(NF-3)]++} END { for (k in IP) { if (IP[k]>=10) print k }}' /var/log/auth.log)//篩選ip,當ip在文件中超過10次則打印出來 NF表示當前行有多少個字段(列) for i in $IP dotmpIP=(`iptables -L -n | tr -s " " | awk '/^DROP/ && /22$/ {print $4}'`)//echo ${tmpIP[@]} | grep -qw $i//查看該ip有沒有被封禁if [ $? -ne 0 ]theniptables -I INPUT -p tcp --dport 22 -s $i -j DROP fi done iptables-save > /etc/sysconfig/iptables unset tmpIP
給deny_ssh.sh
chmod +x deny_ssh.sh
將文件放入任務計劃
查詢發現已被封禁,之后登錄的IP
再次嘗試爆破
爆破失敗,已將次IP封禁。
如何處理誤封呢?
1、查看 INPUT 鏈中所有 DROP 規則,并顯示行號
sudo iptables -L INPUT -n --line-numbers | grep 'DROP.*dpt:22'
2、刪除指定編號的規則sudo iptables -D INPUT 1
將誤封IP拉出。
三、Windows入侵排查
勒索軟件(定期備份)
思路:
1、排查賬號安全,防止可疑賬號
2、排查異常進程和端口,防止木馬
查看三次握手pid對應的程序,以及可疑端口(非常用端口)和惡意進程
3、排查啟動項、組策略、任務計劃、服務防止留后門
4、使用工具
1.1 檢查系統賬號安全
總結思路
查看是否有可疑賬號、新增賬號、隱藏賬號、克隆賬號等---->懷疑使用MimiKatz
抓取明文密碼----> 使用Log Parser官方工具篩選登錄日志比如登陸時間、Event ID=4624的登錄成功的日志Event type 10的遠程登錄、再篩選字段5:登錄賬號、字段8:登錄類型、18:登錄ip等
1、查看服務器是否有弱口令,遠程端口是否對公網開放
檢測方法:
詢問管理員
2、查看是否存在可疑賬號、新增賬號
檢測方法:cmd窗口輸入lusrmgr.msc
查看是否有可疑賬號、新增賬號
3、查看是否存在隱藏賬號、克隆賬號
檢測方法:
-
注冊表查看管理員對應鏈值
-
使用D盾web查殺工具,集成了對克隆賬號檢測的功能。
4、使用工具篩選遠程登錄日志
懷疑使用MimiKatz
抓取明文密碼
使用工具篩選遠程登錄日志
打開組策略
檢測方法:
-
Win+R 打開運行,輸入"eventvwr.msc",回車運行,打開“事件查看器”。
查看安全日志
篩選Event ID查看登陸者的id,ip,登錄類型(type 10:遠程登錄、type 2:本地登錄)等信息(如短時間內4624、4625出現較多次數則表示遇到暴力破解)
Event ID:查看登錄情況
登錄類型:
-
導出 Windows 日志 -- 安全,利用微軟官方工具 Log Parser 進行分析。
利用官方工具操作:
篩取登錄時間范圍的信息并提取用戶與ip
常用字段的行數
EXTRACT_TOKEN(Strings, 5, '|') AS UserName,EXTRACT_TOKEN(Strings, 6, '|') AS DomainName,8 AS LogonType,18 AS IpAddress,19 AS IpPort,10 AS LogonProcessName,11 AS AuthPackageName
登錄成功的所有事件 LogParser.exe -i:EVT –o:DATAGRID "SELECT * FROM c:\Security.evtx where EventID=4624"指定登錄時間范圍的事件: LogParser.exe -i:EVT –o:DATAGRID "SELECT * FROM c:\Security.evtx where TimeGenerated>'2018-06-19 23:32:11' and TimeGenerated<'2018-06-20 23:34:00' and EventID=4624"提取登錄成功的用戶名和IP: LogParser.exe -i:EVT –o:DATAGRID "SELECT EXTRACT_TOKEN(Message,13,' ') as EventType,TimeGenerated as LoginTime,EXTRACT_TOKEN(Strings,5,'|') as Username,EXTRACT_TOKEN(Message,38,' ') as Loginip FROM c:\Security.evtx where EventID=4624"
windows登錄流程
明文轉成哈希值存入sim中后進行登錄時將明文轉成哈希值與存儲中的哈希進行比較
重要日志?
linux日志、中間件日志access.log
1.2 檢查異常端口、進程
1、檢查端口連接情況,是否有遠程連接、可疑連接。
檢查方法:
-
使用
netstat -ano
命令查看目前的網絡連接,定位可疑的 ESTABLISHED -
根據 netstat 命令定位出的 PID 編號,再通過 tasklist 命令進行進程定位
tasklist | findstr "PID"
netstat -ano | findstr ESTABLISHED
查看當前連接
-
查找異常IP、端口(如C2服務器)
-
記錄PID,使用
tasklist | findstr <PID>
查進程
查看監聽端口netstat -anb | findstr LISTENING
-
注意非標準端口上的監聽(如8080、5555)
DNS解析記錄
-
使用
ipconfig /displaydns
查看本地DNS緩存 -
發現可疑域名(如長隨機字符串域名)
windows遠程端口 rdp協議 3389
linux遠程端口 ssh協議 22
1.3 檢查啟動項、組策略、計劃任務、服務(防止留后門)
1、檢查服務器啟動項是否有異常啟動項
檢查方法:
-
登錄服務器,單擊【開始】>【所有程序】>【啟動】,默認情況下此目錄在是一個空目錄,確認是否有非業務程序在該目錄下。
-
單擊開始菜單 >【運行】,輸入
msconfig
,查看是否存在命名異常的啟動項目,是則取消勾選命名異常的啟動項目,并到命令中顯示的路徑刪除文件。 -
單擊【開始】>【運行】,輸入 regedit,打開注冊表,查看開機啟動項是否正常,特別注意如下三個注冊表項:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\run HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Runonce
檢查右側是否有啟動異常的項目,如有請刪除,并建議安裝殺毒軟件進行病毒查殺,清除殘留病毒或木馬。
-
利用安全軟件查看啟動項、開機時間管理等。
-
組策略,運行
gpedit.msc
2、檢查計劃任務
檢查方法:
-
a、單擊【開始】>【設置】>【控制面板】>【任務計劃】,查看計劃任務屬性,便可以發現木馬文件的路徑。
-
b、單擊【開始】>【運行】;輸入
cmd
,然后輸入at
,檢查計算機與網絡上的其它計算機之間的會話或計劃任務,如有,則確認是否為正常連接。
3、服務自啟動
檢查方法:
-
單擊【開始】>【運行】,輸入
services.msc
,注意服務狀態和啟動類型,檢查是否有異常服務。