一次烏龍的SSH攻擊處理

猛禽大叔發表於2018-03-26

發現

FreeBSD有個很好的功能就是每天會自動給root使用者發兩封郵件,一封是日常報告,一封是安全報告。我一般都會把這個郵件轉發到自己的郵箱,這樣每天就可以在手機上關注一下系統狀態了。

前幾天在手機上看每日安全報告時發現家裡的伺服器有大量失敗的SSH登入,回電腦上登上去一看:

grep error auth.log | tail
複製程式碼

基本上每隔幾分鐘就出現一次,統計了一下IP,只有少數幾個,並且都是來自於本市。

...
Mar 26 03:00:41 myserver sshd[33056]: error: PAM: authentication error for raptor from 117.25.180.xx
Mar 26 03:00:41 myserver sshd[33056]: error: maximum authentication attempts exceeded for raptor from 117.25.180.xx port 2423 ssh2 [preauth]
...
複製程式碼

首先想到的就是:不會是黑客來攻擊了吧?

但是分析下來又覺得不可能:

  1. 家裡IP是動態的,除非知道我的動態域名
  2. 其次,我的SSH用的不是預設埠
  3. 第三,ROOT使用者是禁止登入的,所以得知道我的使用者名稱

除非我的電腦被黑,但是以我這麼小心的人,可能性不太大啊,難道是某個國產軟體在耍流氓?電腦裡裝的國產軟體屈指可數,都是正經軟體啊。

查了幾天沒有頭緒,換了埠,加了一些遮蔽IP的配置也沒什麼用。

直到上週末忽然發現其中一個攻擊IP居然就是自己家裡的外網IP,才知道原來攻擊來自自己的電腦。

排查

(假設SSH埠號為2222)

lsof -i :2222
複製程式碼

然而並沒有結果。看了一下日誌,顯示是每隔五分鐘左右嘗試登入,所以這個程式應該不是長期執行,而是定時執行,但是cron裡並沒有這樣的東西,所以只能迴圈監控了:

while (( $? == 1 )) ; do lsof -i :2222 ; done;
複製程式碼

等了五分鐘,終於抓住一個:

ssh     25390 raptor    3u  IPv4 0x59231eed85a432f3      0t0  TCP 10.0.xxx.xxx:64077->217.180.xxx.xxx.broad.xm.fj.dynamic.163data.com.cn:2222 (SYN_SENT)
複製程式碼

居然是SSH?看來還得抓一下它的父程式:

(while (( $? == 1 )) ; do lsof -i :2222 ; done; ) && ps -ef $(lsof -i :2222 | tail -n 1 | cut -b 8-14)
複製程式碼

居然是HG?

  501 25390 25374   0 11:05上午 ??         0:00.04 ssh raptor@xxxxx hg -R hg/proj serve --stdio
複製程式碼

得,繼續排查。當然,到這一步基本上已經可猜到是誰了,要麼是zsh,要麼是pycharm。

不過單行命令已經不太好寫了,寫成一個指令碼來跑吧:

#!/bin/bash

RES=1
while [[ $RES == 1 ]]
do
    lsof -i :2222
    RES=$?
done

PID=`lsof -i :2222 | tail -n 1 | cut -b 8-14`
PID1=`ps -ef $PID | tail -n 1 | cut -b 12-18`
PID2=`ps -ef $PID1 | tail -n 1 | cut -b 12-18`
ps aux | grep $PID2 | grep -v grep
複製程式碼

果然是pycharm:

raptor            4806   0.0  9.7  7425152 812648   ??  S    五10下午  12:55.38 /Applications/PyCharm CE.app/Contents/MacOS/pycharm
複製程式碼

解決

開啟pycharm的Preferences-Version Control-Mercurial,將Check incomming and outgoing changesets的選中去掉。

觀察了半小時,終於沒有再出現那些“攻擊”了。

原因是:

pycharm每隔五分鐘會呼叫hg serve --studio連我的hg服務端檢查更新,我又在這個專案的hgrc裡配置了預設的ssh連線,但是這臺電腦又沒有配置ssh證書,需要登入密碼,於是pycharm的這個操作就會立即失敗,在服務端就留下了一次失敗的ssh登入記錄。

相關文章