黑客Shell神技:掩蓋Linux服務(wù)器上的操作痕跡
來(lái)自:開(kāi)源Linux
1前言
使用Shell腳本在Linux服務(wù)器上能夠控制、毀壞或者獲取任何東西,通過(guò)一些巧妙的攻擊方法黑客可能會(huì)獲取巨大的價(jià)值,但大多數(shù)攻擊也留下蹤跡。當(dāng)然,這些蹤跡也可通過(guò)Shell腳本等方法來(lái)隱藏。尋找攻擊證據(jù)就從攻擊者留下的這些痕跡開(kāi)始,如文件的修改日期。每一個(gè)Linux文件系統(tǒng)中的每個(gè)文件都保存著修改日期。系統(tǒng)管理員發(fā)現(xiàn)文件的最近修改時(shí)間,便提示他們系統(tǒng)受到攻擊,采取行動(dòng)鎖定系統(tǒng)。然而幸運(yùn)的是,修改時(shí)間不是絕對(duì)可靠的記錄,修改時(shí)間本身可以被欺騙或修改,通過(guò)編寫 Shell腳本,攻擊者可將備份和恢復(fù)修改時(shí)間的過(guò)程自動(dòng)化。2操作步驟
第一步:查看和操作時(shí)間戳
多數(shù)Linux系統(tǒng)中包含一些允許我們快速查看和修改時(shí)間戳的工具,其中最具影響的當(dāng)數(shù)“Touch”,它允許我們創(chuàng)建新文件、更新文件 /文件組最后一次被“touched”的時(shí)間。touch?file
若該文件不存在,運(yùn)行上面的命令將創(chuàng)建一個(gè)名為“file”的新文件;若它已經(jīng)存在,該命令將會(huì)更新修改日期為當(dāng)前系統(tǒng)時(shí)間。我們也可以使用一個(gè)通配符,如下面的字符串。touch?*
這個(gè)命令將更新它運(yùn)行的文件夾中的每個(gè)文件的時(shí)間戳。在創(chuàng)建和修改文件之后,有幾種方法可以查看它的詳細(xì)信息,第一個(gè)使用的為“stat”命令。stat?file
ls?–l
touch?-d"2001-01-01?20:00:00"?file
通過(guò)ls命令來(lái)確認(rèn)修改信息:ls?-l?file
步驟二:組織Shell腳本
在開(kāi)始編寫腳本之前需要考慮清楚需要執(zhí)行哪些過(guò)程。為了在服務(wù)器上隱藏痕跡,攻擊者需要將文件夾的原始時(shí)間戳寫入一個(gè)文件,同時(shí)能夠在我們進(jìn)行任何修改設(shè)置之后還能回到原始文件。這兩個(gè)不同的功能會(huì)根據(jù)用戶的輸入或者參數(shù)的不同而觸發(fā),腳本會(huì)根據(jù)這些參數(shù)執(zhí)行相應(yīng)的功能,同時(shí)我們需要有一種方法來(lái)處理錯(cuò)誤。根據(jù)用戶的輸入將會(huì)進(jìn)行三種可能的操作:- 沒(méi)有參數(shù)——返回錯(cuò)誤消息;
- 保存時(shí)間戳標(biāo)記——將時(shí)間戳保存到文件中;
- 恢復(fù)時(shí)間戳標(biāo)記——根據(jù)保存列表恢復(fù)文件的時(shí)間戳。
步驟三:開(kāi)始腳本
從命令行啟動(dòng)nano并創(chuàng)建一個(gè)名為“timestamps.sh”的腳本,命令如下:nano?timestamps.sh
然后進(jìn)行下列命令:#!/bin/bash
if?[?$#?-eq?0?];then
echo?“Use?asave?(-s)?or?restore?(-r)?parameter.”
exit?1
fi
chmod? x?timestamps.sh
然后運(yùn)行腳本,測(cè)試無(wú)參數(shù)時(shí)返回錯(cuò)誤信息的功能。如果腳本返回我們的echo語(yǔ)句,我們就可以繼續(xù)下一個(gè)條件了。./timestamps.sh
步驟四:將時(shí)間戳寫入文件
定義if語(yǔ)句的條件,“-s”表示執(zhí)行保存功能:if?[?$1?="-s"?]?;?then
fi
當(dāng)然,需要檢查計(jì)劃保存的時(shí)間戳文件是否存在,如果存在,我們可以刪除它(名為timestamps的文件),避免重復(fù)或錯(cuò)誤的輸入,使用下面的命令:rm?-f?timestamps;
然后使用“l(fā)s”命令列出所有文件和它的修改時(shí)間,可將其輸出到另一個(gè)程序,如sed,以幫助我們稍后清理這個(gè)輸入。ls?–l
通常會(huì)出現(xiàn)下面的顯示結(jié)果:-rw-r--r--?1?user?user?0?Jan?1?2017?file
為了保存時(shí)間戳,我們只需要年、月、日及文件名,下面命令可以清除“Jan”之前的信息:ls?-l?file?|?sed?'s/^.*Jan/Jan/p'
這樣顯示的就是我們程序需要的信息,只是需要修改月份格式為數(shù)字格式:ls?-l?file?|?sed?'s/^.*Jan/01/p'
將所有月份都替換為數(shù)字:ls?-l?|?sed?-n?'s/^.*Jan/01/p;s/^.*Feb/02/p;s/^.*Mar/03/p;s/^.*Apr/04/p;s/^.*May/05/p;s/^.*Jun/06/p;s/^.*Jul/07/p;s/^.*Aug/08/p;s/^.*Sep/09/p;s/^.*Oct/10/p;s/^.*Nov/11/p;s/^.*Dec/12/p;'
在一個(gè)文件夾中運(yùn)行我們會(huì)看到如下圖所示的結(jié)果:do?echo?$x?|?ls?-l?|?sed?-n?'s/^.*Jan/01/p;s/^.*Feb/02/p;s/^.*Mar/03/p;s/^.*Apr/04/p;s/^.*May/05/p;s/^.*Jun/06/p;s/^.*Jul/07/p;s/^.*Aug/08/p;s/^.*Sep/09/p;s/^.*Oct/10/p;s/^.*Nov/11/p;s/^.*Dec/12/p;'?>>?timestamps
此腳本的前兩個(gè)操作就完成了,顯示結(jié)果如下圖:./timestamps.sh?–s
cat?timestamps
步驟五:恢復(fù)文件的時(shí)間戳
在保存好原始時(shí)間戳后,需要恢復(fù)時(shí)間戳讓別人覺(jué)察不到文件被修改過(guò),可使用下面命令:if?$1?=?"-r"?;?then
fi
然后使用下面命令,轉(zhuǎn)發(fā)文本文件的內(nèi)容,并一行一行運(yùn)行:cat?timestamps?|while?read?line
do
done
然后再分配一些變量讓文件數(shù)據(jù)的使用更簡(jiǎn)單:MONTH=$(echo?$line?|?cut?-f1?-d\?);
DAY=$(echo?$line|?cut?-f2?-d\?);
FILENAME=$(echo?$line?|?cut?-f4?-d\?);
YEAR=$(echo?$line?|?cut?-f3?-d\?)
雖然這四個(gè)變量在保存的時(shí)間戳文件中是一致的,但是如果時(shí)間戳是在過(guò)去一年中發(fā)生的,它只會(huì)顯示時(shí)間而不是年份。如果需要確定當(dāng)前年份,我們可以分配為寫腳本的年份,也可以從系統(tǒng)中返回年份,使用cal命令可以查看日歷。CURRENTYEAR=$(cal?|?head?-1?|?cut?-f6-?-d\?|?sed?'s/?//g')
touch?-d?"2001-01-01?20:00:00"?file
由于每個(gè)時(shí)間都包含冒號(hào),因此可使用下面的“ifelse”語(yǔ)句完成操作,整體操作如下圖所示:if?[?$YEAR?==?*:*?];?then
touch?-d?$CURRENTYEAR-$MONTH-$DAY\?$YEAR:00?$FILENAME;
else
touch?-d?""$YEAR-$MONTH-$DAY""?$FILENAME;
fi
步驟六:使用腳本
使用的命令主要有以下幾個(gè):- ./timestamps.sh –s ? 保存文件時(shí)間戳
- touch -d “2050-10-12 10:00:00″ * ? 修改目錄下的所有文件時(shí)間戳
- ls –a ? 確認(rèn)修改的文件
- ./timestamps.sh –r ? 恢復(fù)文件原始時(shí)間戳
3總結(jié)
該腳本只是用來(lái)清除攻擊服務(wù)器之后遺留的一些痕跡。為了隱藏痕跡,黑客在針對(duì)服務(wù)器實(shí)施具體的攻擊時(shí),必須仔細(xì)考慮使用的每一個(gè)方法,以及入侵服務(wù)器之后如何隱藏自己的痕跡。通過(guò)上面的介紹我們了解到,時(shí)間戳也是“會(huì)撒謊的”,因此系統(tǒng)管理員必須意識(shí)到他們的許多日志和保護(hù)措施是可以被操縱的,雖然看起來(lái)好像沒(méi)有異常。END
來(lái)源:開(kāi)源Linux版權(quán)歸原作者所有,如有侵權(quán),請(qǐng)聯(lián)系刪除。
▍