成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

用戶行為監控:bash history logging攻防

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

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

加固bash_history

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

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

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

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

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

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

# chattr +a /home/bob/.bash_history

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

# 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調用時被讀取。這意味著當二哥已登進系統后,用以下方法自己調用一個新shell時:

bob$ bash

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

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

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

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

所以,所有修改都針對.bashrc的好處是可以防止二哥登錄后手工調用新的bash shell來跳過僅在.bash_profile,.bash_login,.profile三個配置文件中生效的配置選項,另一好處是這三個文件本身都會調用.bashrc,所以在首次登錄系統時.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被保存以此來節約空間。

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

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

最后要完成的步驟是使所有與bash_history相關的環境變量都變為readonly:

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

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

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

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

現在,機敏點的管理員會抱怨上面的都是shit!

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

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

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

三:攻破logging機制

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

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

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

$ /bin/sh

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

因為它已不再是readonly。

$ unset HISTFILE

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

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

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

可以通過以下方法實現:

$ /bin/bash –norc

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

$ HISTFILE=

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

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

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

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

我們的接口的最佳放置點是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])

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

local0.crit                /var/log/hist.log

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

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

現在唯一剩下的問題是”上面的hack要怎樣才能被攻破?”其實這相當滴簡單:

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

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

五:總結

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

現在已經有Linux包括FreeBSD下的審計框架可供選擇。在FreeBSD平臺,由Robert Watson和TrustedBSD項目開發的審計框架是選擇之一。

更多信息參見:

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

在linux平臺,由來自紅帽的Steve Grubb開發的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 變量內容修改完整呈現
  3. Linux bash程序的調試大課堂
責任編輯:yangsai 來源: 西農開源社區
相關推薦

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

2022-09-02 08:24:07

前端通用數據特定數據

2023-06-08 09:44:13

WindowSpy目標用戶監控

2022-07-26 06:23:04

搭建前端監控前端應用

2022-09-28 11:34:27

用戶行為數據業務

2009-01-18 09:36:00

2024-06-06 09:04:15

前端工具庫監控

2024-08-27 08:27:19

2013-07-15 15:47:35

App用戶行為

2016-10-21 14:17:13

大數據技術大數據行為分析

2013-09-05 09:33:25

大數據盧東明SAP

2017-11-06 10:52:36

大數據

2014-03-13 10:45:40

大數據

2021-04-02 09:43:10

Linux監控技術Linux系統

2015-12-15 11:19:31

2017-05-02 10:30:46

2011-05-13 10:07:47

LBS簽到
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产欧美日韩一区 | 亚洲欧美视频在线观看 | 国产有码 | 91精品久久久久久久久久入口 | 久久精品福利视频 | 国产成人自拍一区 | 欧美国产精品 | 美女视频黄色的 | 我我色综合| 亚洲成人精品视频 | 久久99精品视频 | 国产97在线看 | 亚洲 中文 欧美 日韩 在线观看 | 亚洲在线 | 亚洲精品黑人 | 国产成人小视频 | 国产精品区二区三区日本 | 午夜精品一区二区三区免费视频 | wwww.8888久久爱站网 | a久久久久久 | 97精品国产一区二区三区 | 久久久久久久一区二区三区 | 免费的av网站 | 色婷婷激情综合 | 中文字幕免费中文 | 亚洲人人 | 亚洲影音先锋 | 东京av男人的天堂 | 日韩电影免费观看中文字幕 | 国产高清免费 | 丁香综合 | 国内精品成人 | 亚洲欧美国产毛片在线 | 欧美在线观看一区 | 色综合天天综合网国产成人网 | 中文字幕在线视频免费观看 | av影片在线| 成人黄色电影在线观看 | 一区二区高清 | 妹子干综合 | 精品一区二区三区中文字幕 |