偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

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

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

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

加固bash_history

假設你所管理的系統(tǒng)提供shell登錄功能,你的用戶當中有個別及其討人厭的家伙,于是你想監(jiān)控他的活動,因為你非常懷疑他半夜三更使用你所負責保護的CPU和系統(tǒng)資源作惡意行為(或是其他的,例如下毛片等)。我們暫且叫他二哥(此處原文為Bob,Bob一名在國外經(jīng)常用來指代壞蛋)。

因為所有用戶都是使用bash作為默認shell,你開始著手修改bash的配置文件:

第1步:使bash歷史記錄文件和相關文件無法被刪除或修改。

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

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

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

# chattr +a /home/bob/.bash_history

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

# sappnd /home/bob/.bash_history

你還應修改shell啟動相關的其他文件的這個屬性:

# 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

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

bob$ bash

此時只有.bashrc文件被讀取,而上面所列的前三個配置文件不會再次被讀取了。

做了以上屬性的修改后再來做更進一步的”加固”,一個所謂的保護措施。

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

所有的配置將針對.bashrc文件,因為其他三個配置文件本身會調用.bashrc,也就是說.bashrc無論如何都會被讀取 (不管用戶是否剛登錄或是登錄后手工調用bash shell)。

所以,所有修改都針對.bashrc的好處是可以防止二哥登錄后手工調用新的bash shell來跳過僅在.bash_profile,.bash_login,.profile三個配置文件中生效的配置選項,另一好處是這三個文件本身都會調用.bashrc,所以在首次登錄系統(tǒng)時.bashrc當中的配置也會生效。

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

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

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

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

最后要完成的步驟是使所有與bash_history相關的環(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)在,機敏點的管理員會抱怨上面的都是shit!

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

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

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

三:攻破logging機制

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

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

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

$ /bin/sh

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

因為它已不再是readonly。

$ unset HISTFILE

這會使得logging機制在當前會話中直接萎掉,因為此變量控制的歷史命令記錄文件將會是空的。

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

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

可以通過以下方法實現(xiàn):

$ /bin/bash –norc

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

$ HISTFILE=

會清空$HISTFILE變量—>無歷史記錄。

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

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

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

我們的接口的最佳放置點是parse.y文件,它由bash的yacc語法組成。當一條指令在shell中被下達時bash解釋器將迅速被調用。因此,將syslog鉤子放置在解釋器剛好完成它的工作前一點點,貌似是個好辦法。需要修改的僅僅是增加兩行代碼:包含進syslog.h和設置syslog調用。我們使用了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])

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

local0.crit                /var/log/hist.log

至此用戶下達的每條指令都將躺在/var/log/hist.log里,這個日志文件一般情況下日有root用戶有讀權限。

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

現(xiàn)在唯一剩下的問題是”上面的hack要怎樣才能被攻破?”其實這相當?shù)魏唵危?/p>

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

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

五:總結

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

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

更多信息參見:

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

在linux平臺,由來自紅帽的Steve Grubb開發(fā)的Linux Auditing System也是一個選擇: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下的實用bash命令分享
  2. Linux Bash 變量內容修改完整呈現(xiàn)
  3. Linux bash程序的調試大課堂
責任編輯:yangsai 來源: 西農開源社區(qū)
相關推薦

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目標用戶監(jiān)控

2022-09-02 08:24:07

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

2022-07-26 06:23:04

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

2022-09-28 11:34:27

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

2009-01-18 09:36:00

2024-06-06 09:04:15

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

2024-08-27 08:27:19

2013-07-15 15:47:35

App用戶行為

2013-09-05 09:33:25

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

2016-10-21 14:17:13

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

2014-03-13 10:45:40

大數(shù)據(jù)

2017-11-06 10:52:36

大數(shù)據(jù)

2021-04-02 09:43:10

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

2015-12-15 11:19:31

2017-05-02 10:30:46

2011-05-13 10:07:47

LBS簽到
點贊
收藏

51CTO技術棧公眾號