Telnel的hontel蜜罐分析

Telnel的hontel蜜罐分析

簡介

互聯(lián)網(wǎng)上經(jīng)常有機(jī)器人等爆破telnet嘹锁,ssh弱口令等。如果爆破成功阀湿,則植入病毒等赶熟,為后續(xù)的DDos,遠(yuǎn)控等作準(zhǔn)備陷嘴。本文分析360netlab的hontel蜜罐映砖,并用其部署,捕獲真實(shí)的樣本灾挨。

蜜罐的原理其實(shí)很簡單邑退。模擬一個(gè)真實(shí)的linux系統(tǒng),提供基于telnet的shell操作劳澄。執(zhí)行并記錄每一條命令到日志地技。蜜罐在中病毒木馬后,不會影響真實(shí)的系統(tǒng)秒拔,就像安裝還原卡一樣莫矗,一鍵恢復(fù)到初始話狀態(tài)。

360netlab開源了一個(gè)小巧實(shí)用的蜜罐砂缩,很適合初學(xué)者理解蜜罐的原理作谚。蜜罐基于linux的chroot去限制蜜罐不會影響到真實(shí)機(jī)器。chroot是在unix系統(tǒng)的一個(gè)操作庵芭,針對正在運(yùn)作的軟件進(jìn)程和它的子進(jìn)程妹懒,改變它外顯的根目錄。一個(gè)運(yùn)行在這個(gè)環(huán)境下喳挑,經(jīng)由chroot設(shè)置根目錄的程序彬伦,它不能夠?qū)@個(gè)指定根目錄之外的文件進(jìn)行訪問動(dòng)作滔悉,不能讀取伊诵,也不能更改它的內(nèi)容。chroot這一特殊表達(dá)可能指chroot(2)系統(tǒng)調(diào)用或chroot(8)前端程序回官。由chroot創(chuàng)造出的那個(gè)根目錄曹宴,叫做“chroot監(jiān)獄”(chroot jail,或chroot prison)歉提。

我們的主要目標(biāo)是為了模擬存在弱口令的Iot智能設(shè)備笛坦。此類設(shè)備一般運(yùn)行嵌入式linux(openwrt等),shell為busybox環(huán)境苔巨。所以我們還需要在chroot中安裝busybox文件版扩。還需要建立類似于Iot設(shè)備的文件目錄。推薦直接解壓一個(gè)Iot的固件包即可侄泽。

代碼分析

該蜜罐主要使用python的Tcpserver框架和telnetsrv框架礁芦。只需要繼承telnetsrv框架并重載handler方法。這樣大大降低了開發(fā)難度。

if TELNET_ISSUE:
    self.writeline(TELNET_ISSUE)
            

首先向telnet的客戶端寫入提示信息柿扣。

        authenticated = False
        for attempt in xrange(MAX_AUTH_ATTEMPTS):
            authenticated = self.authentication_ok()
            if authenticated:
                break
        if not authenticated:
            return

然后調(diào)用認(rèn)證肖方。這里只需要重寫類變量authNeedUser,authNeedPass即可實(shí)現(xiàn)認(rèn)證方法未状。如果還有特殊需求俯画,可以重載authCallback(self, username, password),在里面記錄爆破的username和password等司草。

    def authCallback(self, username, password):
        if username is not None and password is not None:
            self._log("AUTH", "%s:%s" % (username, password))

這樣艰垂,我們就實(shí)現(xiàn)記錄爆破用戶名密碼的功能。

回到handler中埋虹,handler這時(shí)開始調(diào)用self.session_start()材泄,session_start函數(shù)很簡單,使用subprocess通過busybox開啟一個(gè)shell吨岭。并且使用PIPE的方式去交換數(shù)據(jù)拉宗,也就是執(zhí)行命令。然后設(shè)置為NoneBlock辣辫。

    def session_start(self):
        self._log("SESSION_START")
        self.process = subprocess.Popen(SHELL, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, preexec_fn=os.setsid)

        flags = fcntl.fcntl(self.process.stdout, fcntl.F_GETFL)
        fcntl.fcntl(self.process.stdout, fcntl.F_SETFL, flags | os.O_NONBLOCK)

設(shè)置好shell環(huán)境后旦事,這時(shí)候就可以接收命令了。通過如下代碼獲取用戶用過telnet輸入的命令

line = self.input_reader(self, self.readline(prompt=self.PROMPT).strip())
            raw = line.raw
            cmd = line.cmd
            params = line.params

在蜜罐中急灭,我們主要是記錄用戶輸入的命令內(nèi)容姐浮,如果用戶通過wget等下載一個(gè)文件,我們順便把文件也記錄下來葬馋÷衾穑可以直接調(diào)用self._log("CMD", raw)即可。針對于wget命令來講畴嘶,我們可以通過正則表達(dá)式匹配到wget后面網(wǎng)址參數(shù)蛋逾,然后下載下來。代碼如下

match = re.search(r"(?i)(wget|curl).+(http[^ >;\"']+)", raw)
                if match:
                    url = match.group(2)
                    original = posixpath.split(urlparse.urlsplit(url).path)[-1]
                    filename = self._retrieve_url(url)

通過正則表達(dá)式匹配到下載文件參數(shù)后窗悯,調(diào)用_retrieve_url去下載這個(gè)文件区匣,然后保存下來作為樣本等待研究人員的后續(xù)分析。

所有的流程都結(jié)束后蒋院,我們需要運(yùn)行用戶輸入的這個(gè)命令以便于更好的模擬真實(shí)的linux亏钩。所以我們可以通過如下代碼運(yùn)行

if RUN_ATTACKERS_COMMANDS:
    self.process.stdin.write(raw.strip() + "\n")
else:
    self.process.stdin.write("\n")

首先判斷蜜罐的配置,是否去允許執(zhí)行命令欺旧,如果允許姑丑,則執(zhí)行raw的內(nèi)容,如果不允許辞友,相當(dāng)于執(zhí)行空命令栅哀。

執(zhí)行完命令后,需要講結(jié)果輸出給用戶,self.write(self._processRead())昌屉。這里我們需要重載write函數(shù)去實(shí)現(xiàn)自己的邏輯钙蒙。為了保險(xiǎn)起見,運(yùn)行結(jié)果中可能會有關(guān)于該蜜罐的信息间驮。例如X86躬厌,Debian,Ubuntu等竞帽。我們需要講這些信息替換成Iot設(shè)備的信息扛施,例如Mipsel,Openwrt等屹篓。所以我們在write中實(shí)現(xiàn)如下代碼

        for key, value in REPLACEMENTS.items():
            text = text.replace(key, value)
        TelnetHandler.write(self, text)

Replacements主要是一些需要替換的信息

    REPLACEMENTS["Ubuntu"] = "Debian"
    FAKE_ARCHITECTURE = "arm7"
    for arch in ("i386", "i686", "x86_64 x86_64 x86_64", "x86_64 x86_64", "x86_64", "amd64"):
        REPLACEMENTS[arch] = FAKE_ARCHITECTURE

至此疙渣,一個(gè)簡易的蜜罐就寫完了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末堆巧,一起剝皮案震驚了整個(gè)濱河市妄荔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌谍肤,老刑警劉巖啦租,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異荒揣,居然都是意外死亡篷角,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進(jìn)店門系任,熙熙樓的掌柜王于貴愁眉苦臉地迎上來恳蹲,“玉大人,你說我怎么就攤上這事俩滥〖卫伲” “怎么了?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵举农,是天一觀的道長荆针。 經(jīng)常有香客問我敞嗡,道長颁糟,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任喉悴,我火速辦了婚禮棱貌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘箕肃。我一直安慰自己婚脱,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著障贸,像睡著了一般错森。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上篮洁,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天涩维,我揣著相機(jī)與錄音,去河邊找鬼袁波。 笑死瓦阐,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的篷牌。 我是一名探鬼主播睡蟋,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼枷颊!你這毒婦竟也來了戳杀?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤夭苗,失蹤者是張志新(化名)和其女友劉穎豺瘤,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體听诸,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡坐求,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了晌梨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片桥嗤。...
    茶點(diǎn)故事閱讀 38,650評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖仔蝌,靈堂內(nèi)的尸體忽然破棺而出泛领,到底是詐尸還是另有隱情,我是刑警寧澤敛惊,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布渊鞋,位于F島的核電站,受9級特大地震影響瞧挤,放射性物質(zhì)發(fā)生泄漏锡宋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一特恬、第九天 我趴在偏房一處隱蔽的房頂上張望执俩。 院中可真熱鬧,春花似錦癌刽、人聲如沸役首。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽衡奥。三九已至爹袁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間矮固,已是汗流浹背呢簸。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留乏屯,地道東北人根时。 一個(gè)月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像辰晕,于是被迫代替她去往敵國和親蛤迎。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內(nèi)容

  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,370評論 0 5
  • linux資料總章2.1 1.0寫的不好抱歉 但是2.0已經(jīng)改了很多 但是錯(cuò)誤還是無法避免 以后資料會慢慢更新 大...
    數(shù)據(jù)革命閱讀 12,146評論 2 34
  • 一含友、Python簡介和環(huán)境搭建以及pip的安裝 4課時(shí)實(shí)驗(yàn)課主要內(nèi)容 【Python簡介】: Python 是一個(gè)...
    _小老虎_閱讀 5,725評論 0 10
  • 運(yùn)行操作 CMD命令:開始->運(yùn)行->鍵入cmd或command(在命令行里可以看到系統(tǒng)版本替裆、文件系統(tǒng)版本) CM...
    小明yz閱讀 2,752評論 0 8
  • 命令簡介 cmd是command的縮寫.即命令行 。 雖然隨著計(jì)算機(jī)產(chǎn)業(yè)的發(fā)展窘问,Windows 操作系統(tǒng)的應(yīng)用越來...
    ___大魚___閱讀 1,119評論 1 5