1. 极安网首页
  2. 网络安全工具

Linux应急响应检测脚本(挖矿/病毒检测)

挖矿病毒检测脚本

  1. #!/bin/bash
  2. echo "Linux安全检查与应急响应工具"
  3. echo "Version:1.3"
  4. echo "Author:Daily"
  5. echo "Date:2020-11-11"
  6. dos2unix buying.sh
  7. date=$(date +%Y%m%d-%H%M%S)
  8. ipadd=$(ifconfig -a | grep -w inet | grep -v 127.0.0.1 | awk 'NR==1{print $2}')
  9. check_file="/tmp/buying_${ipadd}_${date}/check_file/"
  10. danger_file="/tmp/buying_${ipadd}_${date}/danger_file.txt"
  11. log_file="/tmp/buying_${ipadd}_${date}/log/"
  12. rm -rf $check_file
  13. rm -rf $danger_file
  14. rm -rf log_file
  15. mkdir /tmp/buying_${ipadd}_${date}/
  16. echo "检查发现危险项,请注意:" > ${danger_file}
  17. mkdir $check_file
  18. echo "" >> $danger_file
  19. mkdir $log_file
  20. cd $check_file
  21. if [ $(whoami) != "root" ];then
  22.     echo "安全检查必须使用root账号,否则某些项无法检查"
  23.     exit 1
  24. fi
  25. saveresult="tee -a checkresult.txt"
  26. echo "[0.1]正在检查IP地址....." && "$saveresult"
  27. echo -------------0.IP及版本-------------------
  28. echo -------------0.1IP地址-------------------
  29. echo "[0.1]正在检查IP地址....." | $saveresult
  30. ip=$(ifconfig -a | grep -w inet | awk '{print $2}')
  31. if [ -n "$ip" ];then
  32.     (echo "[*]本机IP地址信息:" && echo "$ip")  | $saveresult
  33. else
  34.     echo "[!!!]本机未配置IP地址" | $saveresult
  35. fi
  36. printf "\n" | $saveresult
  37. echo ------------12历史命令--------------------------
  38. echo ------------12.1系统操作历史命令---------------
  39. echo ------------12.1.1系统操作历史命令---------------
  40. echo "[12.1.1]正在检查操作系统历史命令....." | $saveresult
  41. history=$(more /root/.bash_history)
  42. if [ -n "$history" ];then
  43.     (echo "[*]操作系统历史命令如下:" && echo "$history") | $saveresult
  44. else
  45.     echo "[!!!]未发现历史命令,请检查是否记录及已被清除" | $saveresult
  46. fi
  47. printf "\n" | $saveresult
  48. echo ------------2.网络连接---------------------
  49. echo "[2.1]正在检查网络连接情况....." | $saveresult
  50. netstat=$(netstat -anlp | grep ESTABLISHED)
  51. netstatnum=$(netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}')
  52. if [ -n "$netstat" ];then
  53.     (echo "[*]网络连接情况:" && echo "$netstat") | $saveresult
  54.     if [ -n "$netstatnum" ];then
  55.         (echo "[*]各个状态的数量如下:" && echo "$netstatnum") | $saveresult
  56.     fi
  57. else
  58.     echo "[*]未发现网络连接" | $saveresult
  59. fi
  60. printf "\n" | $saveresult
  61. echo ------------20.2CPU分析-----------------
  62. echo ------------20.2.1CPU情况-----------------
  63. echo "[20.2.1]正在检查CPU相关信息....." | $saveresult
  64. (echo "CPU硬件信息如下:" && more /proc/cpuinfo ) | $saveresult
  65. (echo "CPU使用情况如下:" && ps -aux | sort -nr -k 3 | awk  '{print $1,$2,$3,$NF}') | $saveresult
  66. printf "\n" | $saveresult
  67. echo ------------20.2.2占用CPU前5进程-----------------
  68. echo "[20.2.2]正在检查占用CPU前5资源的进程....." | $saveresult
  69. (echo "占用CPU资源前5进程:" && ps -aux | sort -nr -k 3 | head -5)  | $saveresult
  70. printf "\n" | $saveresult
  71. echo ------------20.2.3占用CPU较大进程-----------------
  72. echo "[20.2.3]正在检查占用CPU较大的进程....." | $saveresult
  73. pscpu=$(ps -aux | sort -nr -k 3 | head -5 | awk '{if($3>=20) print $0}')
  74. if [ -n "$pscpu" ];then
  75.     echo "[!!!]以下进程占用的CPU超过20%:" && echo "UID         PID   PPID  C STIME TTY          TIME CMD"
  76.     echo "$pscpu" | tee -a 20.2.3_pscpu.txt | tee -a $danger_file | $saveresult
  77. else
  78.     echo "[*]未发现进程占用资源超过20%" | $saveresult
  79. fi
  80. printf "\n" | $saveresult
  81. echo ------------7.进程分析--------------------
  82. echo ------------7.1系统进程--------------------
  83. echo "[7.1]正在检查进程....." | $saveresult
  84. ps=$(ps -aux)
  85. if [ -n "$ps" ];then
  86.     (echo "[*]系统进程如下:" && echo "$ps") | $saveresult
  87. else
  88.     echo "[*]未发现系统进程" | $saveresult
  89. fi
  90. printf "\n" | $saveresult
  91. echo "[7.2]正在检查守护进程....." | $saveresult
  92. if [ -e /etc/xinetd.d/rsync ];then
  93.     (echo "[*]系统守护进程:" && more /etc/xinetd.d/rsync | grep -v "^#") | $saveresult
  94. else
  95.     echo "[*]未发现守护进程" | $saveresult
  96. fi
  97. printf "\n" | $saveresult
  98. echo ------------9.运行服务----------------------
  99. echo "[9.1]正在检查运行服务....." | $saveresult
  100. services=$(systemctl | grep -E "\.service.*running" | awk -F. '{print $1}')
  101. if [ -n "$services" ];then
  102.     (echo "[*]以下服务正在运行:" && echo "$services") | $saveresult
  103. else
  104.     echo "[!!!]未发现正在运行的服务!" | $saveresult
  105. fi
  106. printf "\n" | $saveresult
  107. echo -------------4.启动项-----------------------
  108. echo -------------4.1 用户自定义启动项-----------------------
  109. echo "[4.1]正在检查用户自定义启动项....." | $saveresult
  110. chkconfig=$(chkconfig --list | grep -E ":on|启用" | awk '{print $1}')
  111. if [ -n "$chkconfig" ];then
  112.     (echo "[*]用户自定义启动项:" && echo "$chkconfig") | $saveresult
  113. else
  114.     echo "[!!!]未发现用户自定义启动项" | $saveresult
  115. fi
  116. printf "\n" | $saveresult
  117. echo -------------4.2 系统自启动项-----------------------
  118. echo "[4.2]正在检查系统自启动项....." | $saveresult
  119. systemchkconfig=$(systemctl list-unit-files | grep enabled | awk '{print $1}')
  120. if [ -n "$systemchkconfig" ];then
  121.     (echo "[*]系统自启动项如下:" && echo "$systemchkconfig")  | $saveresult
  122. else
  123.     echo "[*]未发现系统自启动项" | $saveresult
  124. fi
  125. printf "\n" | $saveresult
  126. echo -------------4.3 危险启动项-----------------------
  127. echo "[4.3]正在检查危险启动项....." | $saveresult
  128. dangerstarup=$(chkconfig --list | grep -E ":on|启用" | awk '{print $1}' | grep -E "\.(sh|per|py)$")
  129. if [ -n "$dangerstarup" ];then
  130.     (echo "[!!!]发现危险启动项:" && echo "$dangerstarup") | tee -a $danger_file | $saveresult
  131. else
  132.     echo "[*]未发现危险启动项" | $saveresult
  133. fi
  134. printf "\n" | $saveresult
  135. echo ------------5.查看定时任务-------------------
  136. echo ------------5.1系统定时任务分析-------------------
  137. echo ------------5.1.1查看系统定时任务-------------------
  138. echo "[5.1.1]正在分析系统定时任务....." | $saveresult
  139. syscrontab=$(more /etc/crontab | grep -v "# run-parts" | grep run-parts)
  140. if [ -n "$syscrontab" ];then
  141.     (echo "[!!!]发现存在系统定时任务:" && more /etc/crontab ) | tee -a $danger_file | $saveresult
  142. else
  143.     echo "[*]未发现系统定时任务" | $saveresult
  144. fi
  145. printf "\n" | $saveresult
  146. if [ $? -eq 0 ]表示上面命令执行成功;执行成功输出的是0;失败非0
  147. #ifconfig  echo $? 返回0,表示执行成功
  148. if [ $? != 0 ]表示上面命令执行失败
  149. echo ------------5.1.2分析系统可疑定时任务-------------------
  150. echo "[5.1.2]正在分析系统可疑任务....." | $saveresult
  151. dangersyscron=$(egrep "((chmod|useradd|groupadd|chattr)|((wget|curl)*\.(sh|pl|py)$))"  /etc/cron*/* /var/spool/cron/*)
  152. if [ $? -eq 0 ];then
  153.     (echo "[!!!]发现下面的定时任务可疑,请注意!!!" && echo "$dangersyscron") | tee -a $danger_file | $saveresult
  154. else
  155.     echo "[*]未发现可疑系统定时任务" | $saveresult
  156. fi
  157. printf "\n" | $saveresult
  158. echo ------------5.2分析用户定时任务-------------------
  159. echo ------------5.2.1查看用户定时任务-------------------
  160. echo "[5.2.1]正在查看用户定时任务....." | $saveresult
  161. crontab=$(crontab -l)
  162. if [ $? -eq 0 ];then
  163.     (echo "[!!!]发现用户定时任务如下:" && echo "$crontab") | $saveresult
  164. else
  165.     echo "[*]未发现用户定时任务"  | $saveresult
  166. fi
  167. printf "\n" | $saveresult
  168. echo ------------5.2.2查看可疑用户定时任务-------------------
  169. echo "[5.2.2]正在分析可疑用户定时任务....." | $saveresult
  170. danger_crontab=$(crontab -l | egrep "((chmod|useradd|groupadd|chattr)|((wget|curl).*\.(sh|pl|py)))")
  171. if [ $? -eq 0 ];then
  172.     (echo "[!!!]发现可疑定时任务,请注意!!!" && echo "$danger_crontab") | tee -a $danger_file | $saveresult
  173. else
  174.     echo "[*]未发现可疑定时任务" | $saveresult
  175. fi
  176. printf "\n" | $saveresult
  177. echo ------------6 最近24小时内变动的文件---------------------
  178. #查看最近24小时内有改变的文件
  179. (find / -mtime 0 | grep -E "\.(py|sh|per|pl|php|asp|jsp)$") | tee -a $danger_file | $saveresult
  180. printf "\n" | $saveresult
  181. echo ------------7 日志分析------------------------------
  182. echo ------------7.1 查看日志配置与打包-------------------
  183. echo ------------7.1.1 查看日志配置----------------------
  184. echo "[7.1.1]正在查看日志配置....." | $saveresult
  185. logconf=$(more /etc/rsyslog.conf | egrep -v "#|^$")
  186. if [ -n "$logconf" ];then
  187.     (echo "[*]日志配置如下:" && echo "$logconf") | $saveresult
  188. else
  189.     echo "[!!!]未发现日志配置文件" | tee -a $danger_file | $saveresult
  190. fi
  191. printf "\n" | $saveresult
  192. echo ------------7.1.2日志是否存在---------------
  193. echo "[7.1.2]正在分析日志文件是否存在....." | $saveresult
  194. logs=$(ls -l /var/log/)
  195. if [ -n "$logs" ];then
  196.     echo "[*]日志文件存在" | $saveresult
  197. else
  198.     echo "[!!!]日志文件不存在,请分析是否被清除!" | tee -a $danger_file | $saveresult
  199. fi
  200. printf "\n" | $saveresult
  201. echo ------------7.1.3 日志审核是否开启---------------
  202. echo "[7.1.3]正在分析日志审核是否开启....." | $saveresult
  203. service auditd status | grep running
  204. if [ $? -eq 0 ];then
  205.     echo "[*]系统日志审核功能已开启,符合要求" | $saveresult
  206. else
  207.     echo "[!!!]系统日志审核功能已关闭,不符合要求,建议开启日志审核。可使用以下命令开启:service auditd start" | tee -a $danger_file | $saveresult
  208. fi
  209. printf "\n" | $saveresult
  210. echo ------------7.1.4 打包日志---------------
  211. echo "[7.1.4]正在打包日志......" | $saveresult
  212. zip -r ${log_file}system_log.zip /var/log/
  213. if [ $? -eq 0 ];then
  214.     echo "[*]日志打包成功" | $saveresult
  215. else
  216.     echo "[!!!]日志打包失败,请工人导出日志" | tee -a $danger_file | $saveresult
  217. fi
  218. printf "\n" | $saveresult
  219. echo ------------7.3message日志分析---------------
  220. echo ------------7.3.1传输文件--------------------
  221. #下面命令仅显示传输的文件名,并会将相同文件名的去重
  222. #more /var/log/message* | grep "ZMODEM:.*BPS" | awk -F '[]/]' '{print $0}' | sort | uniq
  223. echo "[7.3.1]正在检查传输文件....." | $saveresult
  224. zmodem=$(more /var/log/message* | grep "ZMODEM:.*BPS")
  225. if [ -n "$zmodem" ];then
  226.     (echo "[!!!]传输文件情况:" && echo "$zmodem") | tee -a $danger_file | $saveresult
  227. else
  228.     echo "[*]日志中未发现传输文件" | $saveresult
  229. fi
  230. printf "\n" | $saveresult
  231. echo ------------7.4cron日志分析---------------
  232. echo ------------7.4.1定时下载-----------------
  233. echo "[7.4.1]正在分析定时下载....." | $saveresult
  234. cron_download=$(more /var/log/cron* | grep "wget|curl")
  235. if [ -n "$cron_download" ];then
  236.     (echo "[!!!]定时下载情况:" && echo "$cron_download") | tee -a $danger_file | $saveresult
  237. else
  238.     echo "[*]未发现定时下载情况" | $saveresult
  239. fi
  240. printf "\n" | $saveresult
  241. echo ------------7.4.2定时执行脚本-----------------
  242. echo "[7.4.2]正在分析定时执行脚本....." | $saveresult
  243. cron_shell=$(more /var/log/cron* | grep -E "\.py$|\.sh$|\.pl$")
  244. if [ -n "$cron_shell" ];then
  245.     (echo "[!!!]发现定时执行脚本:" && echo "$cron_download") | tee -a $danger_file | $saveresult
  246. else
  247.     echo "[*]未发现定时下载脚本" | $saveresult
  248. fi
  249. printf "\n" | $saveresult
  250. echo ------------8sshd配置文件--------------------
  251. echo ------------8.1sshd配置----------------------
  252. echo "[13.5.1]正在检查sshd配置....." | $saveresult
  253. sshdconfig=$(more /etc/ssh/sshd_config | egrep -v "#|^$")
  254. if [ -n "$sshdconfig" ];then
  255.     (echo "[*]sshd配置文件如下:" && echo "$sshdconfig") | $saveresult
  256. else
  257.     echo "[!]未发现sshd配置文件" | $saveresult
  258. fi
  259. printf "\n" | $saveresult

原创文章,作者: Admin ,转载请注明出处:https://secvery.com/3811.html