安全運維之如何找到隱匿於last和w命令中的ssh登錄痕迹
*本文原創作者:ForrestX386,本文屬FreeBuf原創獎勵計劃,未經許可禁止轉載
0x00 前言
在我最近的一些安全應急響應經歷中,遇到了入侵者利用一些小的有意思tricks——將自己的ssh登錄痕迹隱匿於w和last命令中,這對於一些經驗不足或者沒有相關意識的運維管理人員來說,可能不會發現這些已經發生的非法登錄行為,亦或者既使覺察出有點異常,但卻不理解為啥能將ssh登錄痕迹隱匿於w和last命令(這種隱匿不涉及修改相關日誌文件)。
本文將會為大家介紹和闡述這種隱匿登錄痕迹的手法以及如何確切的發現他們的痕迹。
0x01 正文
1、現象及原理解釋
首先有一個正常的登錄(bastion 登錄至code-audit),從pts/0登錄 ( 14:31分正常登錄)。
在code-audit 上輸入 w 命令顯示。
在code-audit 上輸入 last 命令顯示。
然後我利用一個小trick 將我的ssh登錄痕迹隱匿於w 和last 命令中,且看下圖。
在code-audit 上輸入 w 命令顯示。
在code-audit 上輸入 last 命令顯示。
這時候,我們就會有以下疑問(黑人問號)。
1)為什麼w和last都沒有記錄呢?
這是因為w 命令顯示信息來源於utmp,last 來源於wtmp,並不是所有程序登錄的時候都會調用utmp 和wtmp 日誌記錄介面,只有互動式會話,才會調用utmp 和 wtmp的日誌記錄介面,比如 通過tty 或者pts或者圖形界面登錄的都會調用utmp 和wtmp 日誌記錄介面,然後我們在使用w 和last 命令的時候就會發現登錄信息
2)ssh -lroot 192.168.12.51 /usr/bin/bash 為什麼不屬於互動式會話
ssh -lroot 192.168.12.51 /usr/bin/bash 其實就相當於登錄之後直接調用bash這個名,此時系統沒有為其分配tty,不算一個完整互動式會話,只不過bash 接受輸入,然後有輸出,讓我們誤以為是互動式會話,其實不然,你可以將/usr/bin/bash 替換成/usr/bin/ls 試一下,就是簡單執行以下就退出了
還有一種看起來更像是互動式會話的,但實際卻不是的一種登錄技巧,這種方式也會將登錄行為隱匿於w 和 last 命令
-T 表示不分配偽終端 (正常的會話,在分配偽終端之後才會調用utmp和wtmp的日誌介面)
/usr/bin/bash -i 表示在登錄之後 調用bash命令
-i 表示是互動式shell
2、如何發現隱匿的ssh登錄行為
如果是隱匿的ssh正在進行,可以通過lsof 或者 netstat 或者ps 命令發現
1)通過lsof發覺異常ssh登錄
兩條已建立的連接,一條是通過pts/0正常登錄的(前文已交代),一條就是隱匿於w和last的ssh登錄
2)通過ps命令發現異常ssh登錄
這裡有個notty的 sshd 進程,說明就是通過上文所述的trick隱匿於w和last命令的ssh登錄行為
如果是歷史ssh 隱匿登錄行為,如何找出歷史登錄行為呢
通過分析/var/log/secure 日誌(有的系統是/var/log/auth.log)
從 Accepted publickey for root from 192.168.12.54 一行可以得出ssh的登錄時間
從Disconnected from 192.168.12.54 port 43000 一行可以得出ssh的退出時間
如果從secure中的分析結果和 last 對不上,那麼這些對不上的登錄行為有可能就是通過本文所介紹的隱匿方式登錄的
0x02. 總結
其實像scp 、sftp 等也涉及到ssh登錄,但卻不會在w 和last中留下日誌的程序,也都是因為他們不輸入互動式會話。希望本文能給大家帶來幫助
本文涉及重要參考資料如下
https://news.ycombinator.com/item?id=1937139
https://unix.stackexchange.com/questions/20070/user-logged-in-by-sftp-does-not-show-up-in-w
*本文原創作者:ForrestX386,本文屬FreeBuf原創獎勵計劃,未經許可禁止轉載


※思科設備存在硬編碼密碼,安全更新第四次刪除後門賬戶
※攻擊索尼影業、發動Wannacry勒索軟體攻擊、竊取孟加拉央行的背後真兇找到了!
TAG:FreeBuf |