滲透痕迹分析隨筆

  • 2020 年 2 月 20 日
  • 筆記

網上,關於入侵痕迹分析的文章很多,在此將個人工作中常用的一些方法技巧(班門弄斧了),以及爬過的坑總結如下(當然,其中有些方法也是從各位前輩的經驗中學習的)。入侵痕迹分析,不外乎正向推理,和逆向推理。當已經掌握部分線索時,可通過逆向推理,快速確定事發時間、影響範圍、事發原因等;當沒有明確的線索,可以入侵者的視角,通過正向思維進行推理,從而發現入侵行為;兩種方法都可以以敏感文件、敏感命令、敏感IP、攻擊特徵關鍵字為線索,推理出事發時間、事發原因。

一、針對.bash_history的分析

在對日誌進行例行安全分析時,對文件.bash_history的分析必不可少,該文件記錄了命令執行歷史記錄,通過該文件,可以分析入侵者執行了哪些惡意操作(反彈shell、提權、資訊收集、修改文件隱藏後門、添加後門帳號、挖礦木馬特喜歡的添加計劃任務、以當前shell為跳板進行橫向滲透、刪除日誌文件)。

入侵者獲得的命令shell是啞shell時,為了提高交互性,可能會執行以下python語句反彈一個交互shell

python -c 'import pty; pty.spawn("/bin/bash")'

入侵者獲得反彈shell後,可能會執行相關的提權命令,比如嘗試suid提權時,可能會通過find命令,查找設置了SUID位的可執行文件,或者嘗試sudo提權時,先檢查當前帳號是否具有sudo許可權

find / -perm -u=s -type f 2>/dev/nullsudo -i 或者 sudo -l

入侵者提權後,可能會通過cat、more等命令查看配置文件,收集各種敏感資訊,通過useradd或者adduser命令添加後門帳號;但是這幾個命令也是運維人員常用的命令,因此要配合命令執行的時間來進一步分析,而.bash_history文件中記錄的時間是以unix時間戳形式記錄,可以直接轉換;或者直接修改passwd添加帳號,因此當passwd和shadow這兩個文件發生修改時,需要重點關注。

挖礦木馬特喜歡添加計劃任務,每次碰到挖礦木馬,通過計劃任務排查,一查一個準,添加計劃任務的命令如下:

crontab -e

入侵者為了干擾排查,可能會修改後門文件的時間,比如通過如下命令:

touch -d 或者 touch -t

橫向滲透方面,可能關閉iptables、進行埠掃描、搭建各種隧道等命令,比如使用nc或者nmap:

nc -z -v ip port          使用系統自帶的nc進行埠掃描  ssh -CfNg                 搭建ssh隧道  ew -s                     使用ew搭建隧道  service iptables stop     關閉iptables

當然很多入侵者乾脆通過命令清空命令歷史記錄,或者直接將整個.bash_history文件刪除,但最後一條清除歷史記錄的命令或者刪除文件的命令會保留下來

history -c  rm .bash_history

上面針對.bash_history文件,進行安全分析時,列舉了一些個人認為比較敏感的特徵,總之對.bash_history進行安全審計時,要對敏感命令、敏感工具持有敏銳的嗅覺。

部分人員日常工作中,因執行的終端命令太多,通過上下方向鍵查找歷史命令,不方便,於是習慣性的使用history -c清除,其實這對溯源工作帶來了很大的阻力,因此不建議使用history -c清除。

二、日誌分析

1、系統日誌

入侵痕迹分析,肯定少不了各種日誌的分析。secure記錄的是包括登錄相關的安全日誌,cron記錄的計劃任務日誌。安全日誌和計劃任務日誌文件名可能後面會接日期(日誌歸檔原因),因此為防遺漏,可以使用如下命令進行搜索

ls /var/log/cron*  ls /var/log/secure*

當嘗試ssh暴力破解溯源時,可用如下命令,指定用戶,對IP進行快速排查;lastb命令能列出登錄失敗的記錄,整條命令的作用就是找出對root用戶進行暴力破解的ip,並以次數從大到小輸出

lastb root | awk'{print $3}' | sort |uniq -c |sort -rn |more

篩選出可疑IP後,可以通過secure日誌,驗證是否有被爆破成功,如果定位了IP,事發時間也相應的能定位,接下來就可根據IP和時間,對相關日誌進行溯源分析

cat /var/log/secure* | grep Accepted | grep ip

2、資料庫日誌

有時候找不知道日誌文件的存放目錄,可以通過查看配置文件(如mysql的配置文件文件my.inf,tomcat的配置文件tomcat-user.xml)。mysql資料庫日誌分析時,帳號暴力破解這種,可以參考ssh爆破的思路進行排查。當mysql版本是5.6以上時,可以嘗試看下是否有執行過如下sql命令,

set global general_log = on       開啟日誌記錄(當outfile、dumpfile無法導出shell時,可配合日誌文件getshell)set global general_log_file = ''  設置日誌文件保存路徑(通常保存到web目錄)

有時候通過mysql進行udf提權,可直接通過sql語句查看,添加了什麼函數

select * from mysql.func

附帶提一下:mssql的日誌,可通過xp_cmdshell這個關鍵字,進行排查;因為當獲取的數據許可權為sa時,可利用xp_cmdshell進行提權操作;oracle日誌,因為oracle資料庫的特性,可以自定義函數,這個給入侵者提權帶來了便利,因此對oracle資料庫進行溯源時,可執行以下sql語句進行排查:

select * from USER_OBJECTS where OBJECT_TYPE = 'FUNCTION'     #排查自定義的函數select * from USER_PROCEDURES                                 #排查用戶自定義的資源,包括函數和對象select * from USER_SOURCE where NAME = 'GETSHELL'             #獲取前面排查出來的可疑對象的源程式碼

3、web應用日誌

關於web應用日誌,像acc、中間件日誌。當發生安全應急事件時,像後台暴力破解,同樣可以參考ssh帳號暴力破解的排查思路,進行快速排查。當入侵者使用其他手段時,一樣可以先分析acc日誌,將可疑IP篩選出來,篩選出IP後,再配合響應狀態碼,比如配合200狀態碼,分析入侵者成功訪問了哪些地址,通過這個可以說不定可以發現webshell,當然很多系統都有自定義的報錯頁面,此時的狀態碼也是200;配合302,發現跳轉到後台的日誌;配合500,發現java反序列化攻擊記錄。總之要根據應用系統的實際情況,實際分析。

或者使用各種攻擊特徵,對日誌進行快速排查,比如常見的sql注入攻擊,使用select關鍵字;xss攻擊,使用script關鍵字;任意文件讀取、包含、下載,使用目錄跳轉特徵「../」;也可根據當前系統用到的中間件如weblogic、fastjson,當前或以往出現的高危漏洞,進行快速排查;如weblogic可通過wls-wsat/CoordinatorPortType,fastjson可通過JdbcRowSetImpl等關鍵字進行快速排查。

其他特徵包括:常用webshell文件名如菜刀、蟻劍、冰蠍等;部分工具user-agent有明顯的特徵,如awvs。對這些特徵都有保持敏銳的嗅覺。

web應用日誌分析,怎麼少的的時下很火的業務風控安全,薅羊毛。這種行為都發生在特定的某個url地址,因此可以針對特定的url地址,快速篩選出IP,篩選出的IP肯定很多,同樣先進行排序,但是時下的羊毛黨也是很聰明且捨得投入,IP地址頻繁切換,因此推薦對網段進行篩選,此外如果IP是雲IP、國外IP(這得根據業務進行排查),再者就是IP訪問時間異常,如下半夜。

三、流量進程分析

當日誌分析,未排查出有價值的線索時,則從流量進程方向分析,也不失為另一個突破口;先使用netstat命令查看埠資訊,ps查看進程資訊,lsof查看進程和埠關聯情況。

lsof -i :port            可用於檢查那個進程使用了特定的埠lsof -p pid              檢查pid進程調用情況strace -f -p pid         跟蹤分析pid進程,可發現庫文件劫持

查找隱藏進程

ps -ef | awk'{print $2}'|sort -n| uniq > tasklist1.txt  ls /proc | sort -n | uniq > tasklist2.txt  diff tasklist1.txt tasklist2.txt

流量分析,肯定會碰到wireshark和tcpdump這兩款工具,網上都有詳細的使用教程,不在此贅述。

四、隱藏後門排查

隱藏後門排查,可能會碰到庫文件劫持,關於庫文件劫持溯源,已有同學做了很詳細的總結(學習了,多謝),地址是應急響應系列之Linux庫文件劫持技術分析。

另外可以使用diff命令,將整個web目錄和備份目錄進行對比,排查出被修改的文件

diff -urNA webdir webdir_bak

也可以使用find命令配合mtime、ctime參數,搜索事發時間時間段,指定格式的被修改文件

find /var/www/html -mtime +0 "*.jsp"       搜索web目錄下24小時內被修改的jsp文件

部分計劃任務可能會存在/var/spool/cron和/etc/cron.d目錄下,並且部分日誌並不是root添加的,而是其他具備root許可權的用戶添加的,可使用如下命令,查看指定用戶的計劃任務

crontab -l -u username

啟動項排查

cat /etc/rc.local            排查rc.local文件中添加的啟動項命令  ls /etc/init.d               排查init.d目錄下添加的自啟動腳本  ls /etc/profile.d            排查profile.d目錄下添加的自啟動腳本  chkconfig --list             centos系統列出自啟動項

隱藏後門排查,肯定也有相關的工具可藉助,如D盾、rkhunter、chkrootkit等。

五、後門處理

後門處理,有一個要注意的點是,需要做好備份,不能一股腦的直接刪除,因為如果是在系統或應用的文件中插入惡意後門程式碼,直接刪除,可能導致系統癱瘓。建議從備份或者官網下載,進行替換。有些後門文件,即便停掉了相關進程,仍然無法刪除,可用chattr命令去除相關標識後再刪除。

chattr -ia shell

六、其他

日誌分析前,要確認日誌記錄時間使用是格林尼治時間,還是我們常用的東八區時間,否則會給入侵痕迹分析帶來很大的誤導。一定要保護好日誌,根據網路安全法的要求來就行,否則巧婦難為無米之炊。

*本文原創作者:freebuf01,本文屬於FreeBuf原創獎勵計劃,未經許可禁止轉載