自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

用戶(hù)行為監(jiān)控:bash history logging攻防

運(yùn)維 系統(tǒng)運(yùn)維
Bash堪稱(chēng)*nix世界使用最廣泛的shell,其特性之一是歷史命令(history)機(jī)制。被廣泛討論的是bash_history可以用作logging機(jī)制以此來(lái)監(jiān)控用戶(hù)的活動(dòng)。此文將對(duì)上述問(wèn)題進(jìn)行討論,我們將看到bash_history的logging機(jī)制如何被突破,如何被加固,以及之后可能被攻破的方式。

Bash堪稱(chēng)*nix世界使用最廣泛的shell,其特性之一是歷史命令(history)機(jī)制。此機(jī)制主要用于為用戶(hù)提供方便--少敲幾下鍵盤(pán),提高工作效率。然而,被廣泛討論的是bash_history可以用作logging機(jī)制以此來(lái)監(jiān)控用戶(hù)的活動(dòng)。此文將對(duì)上述問(wèn)題進(jìn)行討論并解釋為啥logging機(jī)制在少數(shù)人面前會(huì)失效。我們將見(jiàn)到各種用于保護(hù)history文件的防御措施是如何不費(fèi)吹灰之力或稍微費(fèi)點(diǎn)力就被突破的。隨著討論的跟進(jìn),突破的限制也將變得更嚴(yán),但這并不代表突破起來(lái)就更困難,與之相反大部分方法都是可以不費(fèi)腦子的。最后,我們將修改bash的源碼來(lái)實(shí)現(xiàn)”無(wú)敵”logging機(jī)制,也將看到”無(wú)敵”并不是真正的無(wú)敵。

加固bash_history

假設(shè)你所管理的系統(tǒng)提供shell登錄功能,你的用戶(hù)當(dāng)中有個(gè)別及其討人厭的家伙,于是你想監(jiān)控他的活動(dòng),因?yàn)槟惴浅岩伤胍谷褂媚闼?fù)責(zé)保護(hù)的CPU和系統(tǒng)資源作惡意行為(或是其他的,例如下毛片等)。我們暫且叫他二哥(此處原文為Bob,Bob一名在國(guó)外經(jīng)常用來(lái)指代壞蛋)。

因?yàn)樗杏脩?hù)都是使用bash作為默認(rèn)shell,你開(kāi)始著手修改bash的配置文件:

第1步:使bash歷史記錄文件和相關(guān)文件無(wú)法被刪除或修改。

二哥所做的第一件事應(yīng)該是建立history到/dev/null的鏈接。

bob$ rm ~/.bash_history
bob$ ln -s /dev/null  ~/.bash_history

這可以通過(guò)修改歷史記錄文件為只能被追加來(lái)進(jìn)行阻止,執(zhí)行以下命令來(lái)改變其屬性:

# chattr +a /home/bob/.bash_history

這是使用文件系統(tǒng)附加屬性來(lái)指定文件只能被追加,大多數(shù)文件系統(tǒng)支持此功能(例如ext2/3,XFS,JFS)。在FreeBSD上可以執(zhí)行:

# sappnd /home/bob/.bash_history

你還應(yīng)修改shell啟動(dòng)相關(guān)的其他文件的這個(gè)屬性:

# chattr +a /home/bob/.bash_profile
# chattr +a /home/bob/.bash_login
# chattr +a /home/bob/.profile
# chattr +a /home/bob/.bash_logout
# chattr +a /home/bob/.bashrc

前三個(gè)文件在交互式bash shell(或非交互式sehll使用–login選項(xiàng))調(diào)用時(shí)被讀取(在讀完全局配置文件/etc/profile后)。.bashrc文件只在當(dāng)non-login交互式shell調(diào)用時(shí)被讀取。這意味著當(dāng)二哥已登進(jìn)系統(tǒng)后,用以下方法自己調(diào)用一個(gè)新shell時(shí):

bob$ bash

此時(shí)只有.bashrc文件被讀取,而上面所列的前三個(gè)配置文件不會(huì)再次被讀取了。

做了以上屬性的修改后再來(lái)做更進(jìn)一步的”加固”,一個(gè)所謂的保護(hù)措施。

第2步:配置 .bash*配置文件

所有的配置將針對(duì).bashrc文件,因?yàn)槠渌齻€(gè)配置文件本身會(huì)調(diào)用.bashrc,也就是說(shuō).bashrc無(wú)論如何都會(huì)被讀取 (不管用戶(hù)是否剛登錄或是登錄后手工調(diào)用bash shell)。

所以,所有修改都針對(duì).bashrc的好處是可以防止二哥登錄后手工調(diào)用新的bash shell來(lái)跳過(guò)僅在.bash_profile,.bash_login,.profile三個(gè)配置文件中生效的配置選項(xiàng),另一好處是這三個(gè)文件本身都會(huì)調(diào)用.bashrc,所以在首次登錄系統(tǒng)時(shí).bashrc當(dāng)中的配置也會(huì)生效。

# cat >> /home/bob/.bashrc << EOF
> shopt -s histappend
> readonly PROMPT_COMMAND=”history -a”
> EOF

此處histappend選項(xiàng)的作用是讓bash附加上最后一行$HISTSIZE給$HISTFILE文件(一般是~/.bash_history文件),不管交互式shell何時(shí)退出。默認(rèn)的,bash每次均會(huì)覆蓋$HISTFILE以保證只有一個(gè)session被保存以此來(lái)節(jié)約空間。

環(huán)境變量PROMPT_COMMAND會(huì)保存一條將被優(yōu)先執(zhí)行的命令,意思是說(shuō)”history -a”命令將在用戶(hù)執(zhí)行命令前被優(yōu)先執(zhí)行,這將保證不管當(dāng)前命令前一條是執(zhí)行的什么,它將立即被追加進(jìn)$HISTFILE,而不用等待整個(gè)會(huì)話(huà)結(jié)束再將歷史命令從內(nèi)存記錄至硬盤(pán)。

此處的readonly作用是使變量不可修改以防止被二哥覆蓋掉或是直接屏蔽掉。

最后要完成的步驟是使所有與bash_history相關(guān)的環(huán)境變量都變?yōu)閞eadonly:

readonly HISTFILE
readonly HISTFILESIZE
readonly HISTSIZE
readonly HISTCMD
readonly HISTCONTROL
readonly HISTIGNORE

第3步:禁掉系統(tǒng)中所有其他shell,一般包括csh,tcsh,ksh。

# chmod 750 csh
# chmod 750 tcsh
# chmod 750 ksh

這將阻止二哥把bash shell切換成其他shell。

現(xiàn)在,機(jī)敏點(diǎn)的管理員會(huì)抱怨上面的都是shit!

還有一個(gè)shell逃出了我們的掌控!在你看完以上敘述跳入浮想聯(lián)翩之前,讓我們來(lái)搞清一些事情。

很久很久以前… (你懂的),原本只有一個(gè)Bourne shell 或者叫sh,現(xiàn)如今,/bin/sh實(shí)際上是/bin/bash的一個(gè)鏈接。Bash在被調(diào)用時(shí)檢查它是以哪個(gè)名字被調(diào)用的并以此來(lái)判斷是不是調(diào)用sh,它試圖模仿歷史版本的sh的行為并和POSIX標(biāo)準(zhǔn)保持一致。

如果以交互式login shell或非交互式shell帶上–login選項(xiàng)啟動(dòng),它才讀取/etc/profile和~/.profile來(lái)初始化配置。如果以交互式shell被調(diào)用,則試圖解釋$ENV變量,當(dāng)$ENV非空則使用它的值當(dāng)作默認(rèn)配置并執(zhí)行。我們將在本文的下一節(jié)討論如何利用這點(diǎn)來(lái)秒殺bash的所有設(shè)置。

三:攻破logging機(jī)制

現(xiàn)在是時(shí)候站在二哥的角度來(lái)看下所有問(wèn)題了。我們將驗(yàn)證上面的防御是如何一步步被攻破的。在實(shí)踐中的可能性是無(wú)窮進(jìn)的。

以下所提及的突破bash_history logging機(jī)制的技巧只是九牛一毛。

方法1:使用Bourne shell –/bin/sh逃脫術(shù)

$ /bin/sh

調(diào)用sh會(huì)導(dǎo)致bash模仿如前所述的歷史版本sh而不會(huì)讀取與bash直接相關(guān)的任何配置文件。因此,二哥現(xiàn)在能夠避開(kāi)$HISTFILE變量了,

因?yàn)樗巡辉偈莚eadonly。

$ unset HISTFILE

這會(huì)使得logging機(jī)制在當(dāng)前會(huì)話(huà)中直接萎掉,因?yàn)榇俗兞靠刂频臍v史命令記錄文件將會(huì)是空的。

注:也可以通過(guò)調(diào)用/bin/rbash(如果系統(tǒng)里存在的話(huà))來(lái)實(shí)現(xiàn)相同效果,它會(huì)模仿受限版本的bash,和sh一樣也是一個(gè)bash的鏈接,但是使用起來(lái)確實(shí)有些讓人蛋疼。

方法2:讓bash不加載.bashrc配置文件

可以通過(guò)以下方法實(shí)現(xiàn):

$ /bin/bash –norc

這樣即可禁止bash讀取.bashrc從而被設(shè)置成readonly的變量變成了writeable,然后像下面這樣做:

$ HISTFILE=

會(huì)清空$HISTFILE變量—>無(wú)歷史記錄。

四:Hacking bash-使用syslog日志接口

從以上我們很清楚地得出結(jié)論--傳統(tǒng)的加固bash_history的方法實(shí)際上都是扯淡。然而我們卻可以更向前一步的hack bash本身來(lái)減少logging機(jī)制的脆弱性并提高其隱秘性。需要注意的是即便如此也是可以被攻破的。由于bash與內(nèi)核的差距導(dǎo)致它并不是足夠的健壯來(lái)作為一個(gè)logging設(shè)備,即便是hack了它的核心。

現(xiàn)在的想法是修改bash源碼使用戶(hù)鍵入的所有指令全部發(fā)送給syslog,由syslog將日志記錄到/var/log目錄下。我們將提供一個(gè)快速而且很黃很暴力的方法來(lái)實(shí)現(xiàn)這一目標(biāo)--這里,哪個(gè)用戶(hù)鍵入的哪條指令將沒(méi)有差別的被對(duì)待,而這也是可以被實(shí)現(xiàn)的。

我們的接口的最佳放置點(diǎn)是parse.y文件,它由bash的yacc語(yǔ)法組成。當(dāng)一條指令在shell中被下達(dá)時(shí)bash解釋器將迅速被調(diào)用。因此,將syslog鉤子放置在解釋器剛好完成它的工作前一點(diǎn)點(diǎn),貌似是個(gè)好辦法。需要修改的僅僅是增加兩行代碼:包含進(jìn)syslog.h和設(shè)置syslog調(diào)用。我們使用了bash-3.2的源碼:

[ithilgore@fitz]$diff -E -b -c ~/bash-3.2/parse.y ~/hacked_bash/parse.y
*** ../../bash-3.2/bash-3.2/parse.y     Tue Sep 19 13:37:21 2006
— parse.y     Sat Jul 12 18:32:26 2008
***************
*** 19,24 ****
— 19,25 —-
Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */
%{
+ #include  #include “config.h” #include “bashtypes.h” *************** *** 1979,1984 **** — 1980,1986 —- shell_input_line_len = i;             /* == strlen (shell_input_line) */ set_line_mbstate (); +         syslog(LOG_LOCAL0 | LOG_CRIT, “%s”, shell_input_line); #if defined (HISTORY) if (remember_on_history && shell_input_line && shell_input_line[0])

上面的調(diào)用產(chǎn)生了一條日志消息,此消息將被syslog根據(jù)LOG_CRIT級(jí)別送到local0的設(shè)備上。要讓這個(gè)東東生效則還必須要在/etc/syslog.conf配置文件中加入一條:

local0.crit                /var/log/hist.log

至此用戶(hù)下達(dá)的每條指令都將躺在/var/log/hist.log里,這個(gè)日志文件一般情況下日有root用戶(hù)有讀權(quán)限。

要注意的是上面所提到的hack并不區(qū)分是否為不同用戶(hù)的輸入。要實(shí)現(xiàn)的話(huà)還有更多的事情需要做的。由于所有的命令都被記錄下來(lái),那么由shell腳本執(zhí)行或啟動(dòng)bash時(shí)的配置文件執(zhí)行所產(chǎn)生的垃圾信息也是會(huì)被記錄下來(lái)的。

現(xiàn)在唯一剩下的問(wèn)題是”上面的hack要怎樣才能被攻破?”其實(shí)這相當(dāng)?shù)魏?jiǎn)單:

—->編譯或上傳一個(gè)你自己的干凈的bash或其他shell即可搞定。

由于上面的hack是在特定版本的基礎(chǔ)上的所以你編譯或上傳的干凈bash可能在他的系統(tǒng)上會(huì)運(yùn)行失敗。

五:總結(jié)

Bash 只是一個(gè)shell,并不是一個(gè)logging設(shè)備,而bash_history只是用來(lái)為用戶(hù)提供點(diǎn)方便少敲幾下鍵盤(pán)而已。毫不裝逼的說(shuō)一句所有使用它來(lái)當(dāng)監(jiān)控設(shè)備的做法都是白搭。如果你是個(gè)較真的系統(tǒng)管理員且確實(shí)需要監(jiān)控用戶(hù)的活動(dòng),那就寫(xiě)個(gè)內(nèi)核模塊記錄所有用戶(hù)的鍵盤(pán)記錄,并根據(jù)uid或其他參數(shù)進(jìn)行過(guò)濾。這個(gè)方法將會(huì)非常管用并且很難被攻破(只是很難不是沒(méi)那可能)。

現(xiàn)在已經(jīng)有Linux包括FreeBSD下的審計(jì)框架可供選擇。在FreeBSD平臺(tái),由Robert Watson和TrustedBSD項(xiàng)目開(kāi)發(fā)的審計(jì)框架是選擇之一。

更多信息參見(jiàn):

http://www.freebsd.org/doc/en_US … handbook/audit.html

在linux平臺(tái),由來(lái)自紅帽的Steve Grubb開(kāi)發(fā)的Linux Auditing System也是一個(gè)選擇:http://people.redhat.com/sgrubb/audit/

六:參考資料

a. bash & syslog man pages

b. bash-3.2 source code -http://ftp.gnu.org/gnu/bash/bash-3.2.tar.gz

c. thanks go to

- Michael Iatrou for pointing out a correction

- gorlist for participating in a mini-wargame, set up to test the subject 

【編輯推薦】

  1. Linux下的實(shí)用bash命令分享
  2. Linux Bash 變量?jī)?nèi)容修改完整呈現(xiàn)
  3. Linux bash程序的調(diào)試大課堂
責(zé)任編輯:yangsai 來(lái)源: 西農(nóng)開(kāi)源社區(qū)
相關(guān)推薦

2020-09-02 07:43:02

Bash histor命令Linux

2020-06-24 15:30:39

Bashhistory命令Linux

2016-01-31 17:45:31

2021-05-25 09:01:21

Linux命令Bash histor

2023-06-08 09:44:13

WindowSpy目標(biāo)用戶(hù)監(jiān)控

2022-09-02 08:24:07

前端通用數(shù)據(jù)特定數(shù)據(jù)

2022-07-26 06:23:04

搭建前端監(jiān)控前端應(yīng)用

2022-09-28 11:34:27

用戶(hù)行為數(shù)據(jù)業(yè)務(wù)

2024-06-06 09:04:15

前端工具庫(kù)監(jiān)控

2009-01-18 09:36:00

2024-08-27 08:27:19

2013-07-15 15:47:35

App用戶(hù)行為

2016-10-21 14:17:13

大數(shù)據(jù)技術(shù)大數(shù)據(jù)行為分析

2013-09-05 09:33:25

大數(shù)據(jù)盧東明SAP

2017-11-06 10:52:36

大數(shù)據(jù)

2014-03-13 10:45:40

大數(shù)據(jù)

2015-12-15 11:19:31

2021-04-02 09:43:10

Linux監(jiān)控技術(shù)Linux系統(tǒng)

2017-05-02 10:30:46

2013-01-11 13:30:38

觸屏智能手機(jī)新聞閱讀
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)