服務(wù)器被黑給我上了一課

當你作為一個獨立開發(fā)者的時候總要面臨這樣那樣的問題淑蔚,以前認為的小概率事件也總是某個時間點蜂擁而至考驗?zāi)愕哪托奶婢茫耙魂囮噭倓偨?jīng)歷了一次木馬驚魂 (參見文章獵豹清理大師值得我們信任么? )坡椒,這次又遇到了服務(wù)器被黑拓巧。

部署服務(wù)器及一般的服務(wù)配置管理對于一個寫代碼的人自然不在話下环壤,但是相對專業(yè)的運維人員程序員確少的卻是一個安全意識涯保,總以為服務(wù)器被攻擊是一個小概率的事件诉濒。以前是這么考慮的“互聯(lián)網(wǎng)上的主機那么多偏偏你的主機被駭客盯上? 這不跟重大獎一樣么夕春,我有那么幸運么未荒?”雖然前一段時間自己的產(chǎn)品被當成木馬已經(jīng)是中了一次大獎了。所以心存僥幸心理及志,能省事就省事片排,先把服務(wù)部署起來能用就行寨腔,這也倒是符合我的極簡主義行事風格。只有經(jīng)歷才能成長率寡,這句話說的一點沒錯迫卢,感謝這個不太聰明的駭客給我上了一課,從此在做任何服務(wù)器部署和管理的時候我的腦袋里也多了一根弦兒“安全意識"冶共。 事情是這樣的 乾蛤。。捅僵。

前幾日像往常一樣家卖,訪問我的產(chǎn)品網(wǎng)站 http://www.xbext.com , 突然頁面出現(xiàn)了404頁面未找到。奇怪庙楚,怎么會這樣上荡?我有檢查了一下輸入的域名,沒錯確實是自己的網(wǎng)站馒闷。這時我心理突然一驚酪捡,倒吸一口冷氣,莫非是因為前幾天發(fā)布了一篇文章紀念我要廢棄的產(chǎn)品功能-一鍵翻墻 這么快就被GFW注意到了纳账? 給我來了一個DNS劫持沛善? 為了驗證這一想法我馬上打開了電腦的VPN程序,通過VPN再次訪問我的網(wǎng)站(這樣可以避免GFW的DNS劫持) 塞祈。網(wǎng)頁呈現(xiàn)出來的依然是“404頁面未找到”,這說明不是DNS劫持的問題帅涂,GFW并沒有注意到我议薪。這時候我不知道是喜還是憂,但是這究竟是什么原因造成的呢媳友?為了查找真相我立刻登錄了自己的服務(wù)器斯议。

首先我進入到了webserver根目錄查看,果然看到網(wǎng)站文件被刪掉了醇锚。還好我的程序有備份哼御,這點損失我還是能夠承受的,關(guān)鍵駭客的意圖是什么呢焊唬?篡改主頁恋昼?沒有道理啊,對于我這個一沒有知名度二沒有影響力的小站點沒有意義啊赶促。好吧液肌,不猜測原因了,這個哥們動作那么大我反而要慶幸鸥滨,否則就憑我那點兒安全意識被當成肉雞肯定毫無察覺嗦哆。這時候我趕緊看看都有誰登錄了服務(wù)器

$ last | more 
chengkai pts/0        111.199.208.96   Mon May 18 14:41   still logged in   
chengkai pts/4        192.154.200.61   Mon May 18 12:39   still logged in   
chengkai pts/4        111.199.208.96   Sun May 10 02:40 - 14:39 (1+11:59)   
chengkai pts/4        111.199.208.96   Sat May  9 14:02 - 14:03  (00:00)    
chengkai pts/9        111.199.208.96   Sat May  9 00:15 - 02:31  (02:15)   

從日志上看谤祖,都是我自己的用戶名,但是很明顯有一個不一樣的IP地址來源老速,我趕緊查了一下ip地址來源, 處理了北京網(wǎng)通的IP另外一個不同的IP來著臺灣粥喜。很顯然駭客已經(jīng)攻破了我的root密碼然后為了掩人耳目使用我的用戶名進行線上操作,但是更讓人驚愕的是此時這哥們竟然正在線上橘券。

chengkai pts/4        192.154.200.61   Mon May 18 12:39   still logged in   

尼瑪這真是大姑娘出嫁頭一遭啊额湘,這是要現(xiàn)場對決啊。第一閃念我要先把這下家伙給踢下去约郁,可是又一想不行缩挑,這家伙已經(jīng)拿到了我的root權(quán)限,被我踢下去很可能會氣急敗壞的重新登錄破壞系統(tǒng)鬓梅,還是先修改root密碼及看看有沒有留下什么后門再說,先看看對方有沒有啟動什么特殊的服務(wù)進程供置。

$ netstat -nl

80、22绽快、1723 這些端口是我知道的webserver,ssh和vpn芥丧。剩下的幾個大端口號尤其值得懷疑.

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:1723            0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:48988         0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:52732         0.0.0.0:*               LISTEN     

那么接下來我用"lsof" 命令來看看這幾個大的端口號是什么進程啟動的?

lsof -i :48988
ruby    13727 chengkai    9u  IPv4 98307068      0t0  TCP localhost:58185 (LISTEN)
lsof -i  :52732
ruby    18258 chengkai    9u  IPv4 97802878      0t0  TCP localhost:52732 (LISTEN)

還好都是ruby進程坊罢,我猜想應(yīng)該是passenger 轉(zhuǎn)發(fā)http請求到rails的監(jiān)聽端口,為了證明我的猜想我停掉了nginx服務(wù)续担,果然ruby進程占用的端口號沒有了。

排除了駭客監(jiān)聽端口的嫌疑后活孩,接下來看看會不會拿我的服務(wù)器當"肉雞"使用物遇,檢測這一問題的最好辦法就是查看外面的流量出口,這時候我想到了iftop命令憾儒。

$ sudo iftop -np 

                                   195kb                               391kb                              586kb                               781kb                          977kb
└──────────────────────────────────┴───────────────────────────────────┴──────────────────────────────────┴───────────────────────────────────┴───────────────────────────────────
96.126.127.11:7000                                                          => 101.219.21.98:50726                                                         30.1kb  6.03kb  1.51kb
                                                                            <=                                                                             1.12kb   230b     57b
96.126.127.11:ssh                                                           => 111.199.216.183:63446                                                       5.09kb  5.91kb  6.13kb
                                                                            <=                                                                              416b    291b    250b
96.126.127.11:7000                                                          => 101.219.21.98:54488                                                         25.3kb  5.06kb  1.27kb
                                                                            <=                                                                             1.12kb   230b     58b
96.126.127.11:7000                                                          => 101.219.21.98:36312                                                         24.3kb  4.87kb  1.22kb
                                                                            <=                                                                             1.12kb   230b     58b
96.126.127.11:ssh                                                           => 222.186.21.250:56628                                                        5.20kb  2.61kb   668b
                                                                            <=                                                                             3.14kb  1.44kb   368b
96.126.127.11                                                               => 187.184.246.118                                                             8.39kb  3.65kb  3.65kb
                                                                            <=                                                                                0b      0b      0b
96.126.127.11:7000                                                          => 101.219.21.98:34993                                                         15.8kb  3.17kb   811b
                                                                            <=                                                                             1.13kb   231b     58b
96.126.127.11:7000                                                          => 103.254.203.177:58825                                                       8.54kb  1.71kb   437b

在這里面询兴,并沒有發(fā)現(xiàn)什么異常的流量和往外的出口連接,又進行了一些常規(guī)檢查起趾,也沒有發(fā)現(xiàn)特別異常的問題诗舰。

# 查看有無異常進程
$ ps aux 
......
# 查看系統(tǒng)資源占用有無異常
$ top
......
# 有沒有新增異常用戶
$ cat /etc/passwd
......
#查看了root用戶的命令歷史記錄,當然這個對稍有經(jīng)驗家伙是沒有意義的,拿到了root權(quán)限后可以清理任何痕跡
# history
......

我知道接下來需呀做的兩件事情训裆,修改root及我當前用戶的用戶名密碼及把入侵者踢下去眶根。在修改了服務(wù)器的密碼后,我在終端上輸入了下面兩個命令.

 $ write chengkai pts/4
what are you fucking about
#結(jié)束消息
ctrl+d
# 踢掉在線終端
 $ pkill -kill -t pts/4

第一個命令是向入侵者發(fā)送一條信息“what are you fucking about”边琉,而第二條命令緊接著把入侵者踢了下去属百。這時候不免有了一絲滿足感,可以想象對方收到消息并被我踢下終端時的表情变姨,當然我想他可能不會這么容易善罷甘休诸老。(其實我知道這種挑釁是蠻危險的,對方曾經(jīng)拿到了root用戶權(quán)限,如果在某個地方設(shè)置了一些后門會非常難以發(fā)現(xiàn),系統(tǒng)很容易會被再次攻破)别伏。 我打開了認證日志靜靜等待對方的再次破解登錄蹄衷,果然對方很快就來了,而且是發(fā)動了不同的主機進行ssh暴力破解厘肮。

$ sudo tail -f /var/log/auth.log

Received disconnect from 222.186.21.243: 11:  [preauth]
May 18 14:36:52 localhost sshd[16428]: PAM 2 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost=222.186.21.243  user=root
May 18 14:36:54 localhost sshd[16432]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=222.186.21.243  user=root
May 18 14:36:56 localhost sshd[16432]: Failed password for root from 222.186.21.243 port 56722 ssh2
May 18 14:37:01 localhost sshd[16432]: message repeated 2 times: [ Failed password for root from 222.186.21.243 port 56722 ssh2]
May 18 14:37:01 localhost sshd[16432]: Received disconnect from 222.186.21.243: 11:  [preauth]
May 18 14:37:01 localhost sshd[16432]: PAM 2 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost=222.186.21.243  user=root
May 18 14:37:03 localhost sshd[16438]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=222.186.21.243  user=root
May 18 14:37:05 localhost sshd[16438]: Failed password for root from 222.186.21.243 port 45780 ssh2
May 18 14::42:26 localhost sshd[18573]: Received disconnect from 222.186.21.244: 11:  [preauth]
May 18 14::42:26 localhost sshd[18573]: PAM 2 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost=222.186.21.244  user=root
May 18 14::42:29 localhost sshd[18579]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=222.186.21.244  user=root
May 18 14::42:30 localhost sshd[18579]: Failed password for root from 222.186.21.244 port 38062 ssh2
May 18 14::42:35 localhost sshd[18579]: message repeated 2 times: [ Failed password for root from 222.186.21.244 port 38062 ssh2]
May 18 14::42:35 localhost sshd[18579]: Received disconnect from 222.186.21.244: 11:  [preauth]
May 18 14::42:35 localhost sshd[18579]: PAM 2 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost=222.186.21.244  user=root
May 18 14::42:39 localhost sshd[18585]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=222.186.21.244  user=root
May 18 14::42:41 localhost sshd[18585]: Failed password for root from 222.186.21.244 port 50864 ssh2
May 18 14::42:47 localhost sshd[18585]

某種意義上來講這是好事愧口,因為這說明對方并還沒有來得及安置后門程序,只能采取暴力破解的方式类茂。那么接下來我要做的事情就是把對方IP加入到 "hosts.deny"

$ sudo vi /etc/hosts.deny

ALL:110.164.67.47
ALL:222.89.166.12
ALL:221.229.166.30
ALL:58.218.205.69   
ALL:58.218.204.239  
ALL:58.218.211.155  
ALL:222.186.21.236  
ALL:58.218.204.225  
ALL:58.218.204.241  
.......

由于暴力破解駭客首先會嘗試root 用戶耍属,所以還要禁止root ssh登錄,修改sshd_conf文件。

$ sudo vi /etc/ssh/sshd_config
#把PermitRootLogin 屬性 yes 改為 no
PermitRootLogin no

到此巩检,我能想到的檢測及阻止對方的手段已經(jīng)差不多了厚骗,是時候?qū)σ粋€最起碼的安全意識做個總結(jié)了。

  • 設(shè)置用戶名密碼一定要大小寫字母數(shù)字及一些特殊符號的組合兢哭,增加暴力破解的難度,有可能的話可以定期更換密碼领舰。
  • 禁止ssh root 登錄
  • 定期維護hosts.deny文件,可以選擇安裝一些第三方的工具自動根據(jù)一些規(guī)則維護hosts.deny 比如 "DenyHosts"
  • 為了避免駭客掃描已知服務(wù)器程序端口漏洞迟螺,修改服務(wù)程序的默認端口好冲秽,比如ssh服務(wù)不使用22端口
  • 設(shè)置 iptables 開啟一些通用的防火墻規(guī)則,ubuntu系統(tǒng)可以使用 ufw

以下為一些網(wǎng)友建議及補充:

  • 禁止密碼登陸矩父,同樣修改 sshd_config 設(shè)置屬性“PasswordAuthentication no” 锉桑,然后公鑰和私鑰的方式進行登陸。
  • 使用fail2ban 窍株,fail2ban可以監(jiān)視你的系統(tǒng)日志民轴,然后匹配日志的錯誤信息(正則式匹配)執(zhí)行相應(yīng)的屏蔽動作(一般情況下是調(diào)用防火墻屏蔽),如:當有人在試探你的SSH球订、SMTP后裸、FTP密碼,只要達到你預(yù)設(shè)的次數(shù)辙售,fail2ban就會調(diào)用防火墻屏蔽這個IP,而且可以發(fā)送e-mail通知系統(tǒng)管理員飞涂,是一款很實用旦部、很強大的軟件!

還好這次事件也沒有給我造成太大的影響和損失较店,反而讓我加強了一些安全意識士八,對于菜鳥級的駭客還是能夠抵擋一陣子的。歡迎跟帖討論梁呈,你了解的一些入侵監(jiān)測手段和防范方法婚度,謝謝。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末官卡,一起剝皮案震驚了整個濱河市蝗茁,隨后出現(xiàn)的幾起案子醋虏,更是在濱河造成了極大的恐慌,老刑警劉巖哮翘,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件颈嚼,死亡現(xiàn)場離奇詭異,居然都是意外死亡饭寺,警方通過查閱死者的電腦和手機阻课,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來艰匙,“玉大人限煞,你說我怎么就攤上這事≡蹦” “怎么了署驻?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長绊序。 經(jīng)常有香客問我硕舆,道長,這世上最難降的妖魔是什么骤公? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任抚官,我火速辦了婚禮,結(jié)果婚禮上阶捆,老公的妹妹穿的比我還像新娘凌节。我一直安慰自己,他們只是感情好洒试,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布倍奢。 她就那樣靜靜地躺著,像睡著了一般垒棋。 火紅的嫁衣襯著肌膚如雪卒煞。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天叼架,我揣著相機與錄音畔裕,去河邊找鬼。 笑死乖订,一個胖子當著我的面吹牛扮饶,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播乍构,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼甜无,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起岂丘,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤陵究,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后元潘,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體畔乙,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年翩概,在試婚紗的時候發(fā)現(xiàn)自己被綠了牲距。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡钥庇,死狀恐怖牍鞠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情评姨,我是刑警寧澤难述,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站吐句,受9級特大地震影響胁后,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜嗦枢,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一攀芯、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧文虏,春花似錦侣诺、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至丸相,卻和暖如春搔确,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背灭忠。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工膳算, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人更舞。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓畦幢,卻偏偏與公主長得像坎吻,于是被迫代替她去往敵國和親缆蝉。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)刊头,斷路器黍瞧,智...
    卡卡羅2017閱讀 134,651評論 18 139
  • Ubuntu的發(fā)音 Ubuntu穿肄,源于非洲祖魯人和科薩人的語言年局,發(fā)作 oo-boon-too 的音。了解發(fā)音是有意...
    螢火蟲de夢閱讀 99,256評論 9 467
  • 名詞延伸 通俗的說僵朗,域名就相當于一個家庭的門牌號碼,別人通過這個號碼可以很容易的找到你屑彻。如果把IP地址比作一間房子...
    楊大蝦閱讀 20,600評論 2 57
  • 1验庙、密碼足夠復雜: 密碼的長度要大于8位最好大于14位。密碼的復雜度是密碼要盡可能有數(shù)字社牲、大小寫字母和特殊符號混合...
    平凡拒絕平庸閱讀 675評論 1 5
  • DFSGSDFFDSGDFG FDG FDG DFSG DFSGFDGFDDSFGF DFGSDFG
    GoDandan閱讀 359評論 0 0