解密方程式组织的Unix后门NOPEN

解密方程式组织的Unix后门NOPEN

在ShadowBrokers所泄漏的黑客工具中,有一款名为“NOPEN”的工具。NOPEN”实际上是一款针对Unix操作系统的远程管理工具(RAT)。“RAT”这个词通常形容的是那些针对Windows系统和Android设备的恶意软件,攻击者可以利用这些恶意软件来与受感染的目标主机进行网络通信。

解密方程式组织的Unix后门NOPEN

前言

不久之前,黑客组织ShadowBrokers(影子经纪人)曾声称他们从EquationGroup(方程式组织)那里窃取来了大量的黑客工具,并且他们还将部分工具放在网上进行拍卖。

近日,Vectra公司的安全研究专家NickBeauchesne对其中的一份泄漏文件进行了分析,并且发现了一个名叫“NOPEN”的Unix远程管理工具(RAT)。

Nick Beauchesne说到:

“当我在对方程式组织泄漏的文件以及黑客工具进行分析时,我发现了一些非常有意思的东西,而这些东西似乎没有得到它们应得的关注。虽然很多安全研究专家将他们的注意力全部放在了那些潜在的0day漏洞上,但是我认为我们应该还可以从这些泄漏文件中了解到方程式组织的攻击手法和操作模式,毕竟这是全世界最危险的黑客组织之一。”

NOPEN-针对Unix系统的远程管理工具(RAT)

根据NickBeauchesne的描述,在ShadowBrokers所泄漏的黑客工具中,有一款名为“NOPEN”的工具。在此之前,安全研究人员普遍认为这款工具是一种“Post-ExploitationShell”,方程式组织可以用它来感染一台被入侵的设备,而这款工具将允许攻击者与被入侵的设备进行持续性地通信。

但是通过深入分析之后Beauchesne发现,“NOPEN”实际上是一款针对Unix操作系统的远程管理工具(RAT)。各位应该知道,“RAT”这个词通常形容的是那些针对Windows系统和Android设备的恶意软件,攻击者可以利用这些恶意软件来与受感染的目标主机进行网络通信。

根据Beauchesne的分析结果,NOPEN毫无疑问是属于RAT工具这一类的。Beauchesne还表示,这是一款非常复杂的恶意软件,而且该工具似乎是方程式组织的一款非常重要的黑客工具,因为在泄漏文件(script/ops/doc)中曾多次提到了“NOPEN”的名字。之所以说它非常重要,是因为它既可以作为一个网络后门来感染目标系统,而且攻击者还可以用它来监听数据。

解密方程式组织的Unix后门NOPEN

首先,方程式组织的黑客需要成功入侵目标系统,然后在系统中安装NOPEN。安装成功之后,攻击者就可以在自己的计算机与被入侵的设备之间建立一条通信链接,并开始监听目标主机中的各种数据。当他们发现并获取到了他们所要寻找的数据之后,黑客可以立刻删除NOPEN。NOPEN的主要功能就是在被感染主机与方程式组织的服务器之间建立一条通信隧道,并运行反向shell(命令行接口)。攻击者运行的是NOPEN的客户端,而NOPEN的服务器端则安装在被感染的设备上。

Beauchesne在分析报告中写到:

“这款工具不仅可以允许攻击者运行功能强大的shell脚本,而且还为他们提供了通信隧道的支持。需要注意的是,所有的操作信息和通信数据都采用了RC6加密算法来进行保护。但好消息是,尽管NOPEN采用了RC6加密算法来保护其网络通信数据,但是目前的很多安全解决方案也许能够在网络中检测到NOPEN的存在。”

Linux、FreeBSD、SunOS、Solaris和HP-UX等操作系统也难逃厄运

根据Beauchesne的分析,NOPEN可以在i386、i486、i586、i686、i86pc、i86、SPARC、Alpha、x86_64、以及AMD64等架构的计算机上正常运行。除此之外,安全专家表示,NOPEN还可以在Linux、FreeBSD、SunOS、Solaris和HP-UX等操作系统上运行。

深入分析NOPEN

简单而言,NOPEN就是一款静态编译的后门。这款UnixRAT会对其所有的控制命令和通信隧道数据进行加密保护,并且还允许攻击者在目标主机中实现提权。接下来,我们会对NOPEN进行深入分析,并且找出可以检测到NOPEN的安全策略。

解密方程式组织的Unix后门NOPEN

NOPEN的欢迎界面

再简单的命令行工具也得有一个欢迎界面才对,NOPEN也不例外,而且NOPEN的欢迎界面还非常的友好。

  1. NOPEN!                             v3.0.5.3
  2. sh: 1: scanner: not found
  3. sh: 1: ourtn: not found
  4. sh: 1: scripme: not found
  5. Wed Aug 31 18:07:05 GMT 2016
  6. NHOME: environment variable not set, assuming”NHOME=/root/Firewall/TOOLS/NOPEN/..”
  7. NHOME=/root/Firewall/TOOLS/NOPEN/..
  8. Reading resource file”/root/Firewall/TOOLS/NOPEN/../etc/norc”…/root/Firewall/TOOLS/NOPEN/../etc/norc: No such file or directory
  9. TERM=xterm-256color
  10. Entering connect mode
  11. Attempting connection to 127.0.0.1:32754(127.0.0.1:32754)… ok
  12. Initiating RSA key exchange
  13.   Generating randomnumber… ok
  14.   Initializing RC6…ok
  15.   Sending randomnumber… ok
  16.   Receiving randomnumber… ok
  17.   Generating sessionkey… 0x0DE6200E48AB016831720B109B8B2874
  18.   Sending first verifystring… ok
  19.   Receiving secondverify string… ok
  20.   Checking secondverify string… ok
  21. RSA key exchange complete
  22. NOPEN server version… 3.0.5.3
  23. Connection
  24.   Bytes In / Out     201/94 (213%C) / 63/4 (1575%C)
  25.   Local Host:Port    localhost:41847 (127.0.0.1:41847)
  26.   RemoteHost:Port   127.0.0.1:32754(127.0.0.1:32754)
  27.   RemoteHost:Port   kali:32754 (127.0.0.1:32754)
  28. Local
  29.   NOPEN client       3.0.5.3
  30.   Date/Time          Wed Aug 31 18:07:05 UTC 2016
  31.   History
  32.   Command Out
  33.   CWD                /root/Firewall/TOOLS/NOPEN
  34.   NHOME              /root/Firewall/TOOLS/NOPEN/..
  35.   PID (PPID)         6904 (6896)
  36. Remote
  37.   NOPEN server       3.0.5.3
  38.   WDIR               NOT SET
  39.   OS                 Linux 4.6.0-kali1-amd64 #1 SMPDebian 4.6.4-1kali1 (2016-07-21) x86_64
  40.   CWD
  41.   PID (PPID)         6908 (6889)
  42. Reading resource file”/root/Firewall/TOOLS/NOPEN/../etc/norc.linux”…/root/Firewall/TOOLS/NOPEN/../etc/norc.linux: No such file or directory
  43. History loaded from”/root/Firewall/TOOLS/NOPEN/../down/history/kali.127.0.0.1″… ok
  44. Creating command output file”/root/Firewall/TOOLS/NOPEN/../down/cmdout/kali.127.0.0.1-2016-08-31-18:07:05″…ok
  45. Lonely?  Bored?  Need advice? Maybe “-help” will show you the way.
  46. We are starting up our virtual autoport

我们可以通过“-help”命令来获取帮助信息:

  1. We are bound and ready to go on port 1025
  2. NO! kali:>-help
  3. [08-31-16 18:07:17 GMT][localhost:41847 ->kali.127.0.0.1:32754]
  4. [-help]
  5. Remote General Commands:
  6. Usage: -elevate
  7. Usage: -getenv
  8. Usage: -gs category|filename [options-if-any]
  9. Usage: -setenv VAR=[val]
  10. Usage: -shell
  11. Usage: -status
  12. Usage: -time
  13. Remote Server Commands:
  14. Usage: -burn
  15. Usage: -call ip port
  16. Usage: -listen port
  17. Usage: -pid
  18. Remote Network Commands:
  19. Usage: -icmptime target_ip [source_ip]
  20. Usage: -ifconfig
  21. Usage: -nslookup name1 …
  22. Usage: -ping -r remote_target_ip [-l local_source_ip][-i|-u|-t] [-p dest_port] [-s src_port]
  23.        -ping host
  24.        -ping[-u|-t|-i] host
  25. Usage: -trace -r remote_target_ip [-l local_source_ip][-i|-u|-t] [-p dest_port] [-s src_port]
  26.        -trace host
  27.        -trace[-u|-t|-i] host
  28. Remote Redirection Commands:
  29. Usage: -fixudp port
  30. Usage: -irtun target_ip call_back_port [call_back_ip] [ourtnarguements]
  31. Usage: -jackpop target_ip target_port source_ip source_port
  32. Usage: -nrtun port [toip [toport]]
  33. Usage: -nstun toip [toport [localport [srcport [command]]]]
  34.        -nstuntoip:port
  35. Usage: -rawsend tcp_port
  36. Usage: -rtun port [toip [toport]]
  37. Usage: -scan
  38. Usage: -sentry target_address source_address (tcp|udp)dest_port src_port interface
  39. Usage: -stun toip toport [localport [srcport]]
  40. Usage: -sutun [-t ttl] toip toport [localport [srcport]]
  41. Usage: -tunnel [command_listen_port [udp]]
  42. Usage: -vscan  (shouldadd help)
  43. Remote File Commands:
  44. Usage: -cat remfile
  45. Usage: -chili [-l] [-s lines] [-m max] MM-DD-YYYY remdirremfile [remfile …]
  46. Usage: -cksum remfile …
  47. Usage: -fget [MM-DD-YYYY] loclist
  48. Usage: -get [-l] [-q] [-s minimumsize] [-m MM-DD-YYYY]remfile …
  49. Usage: -grep [-d] [-v] [-n] [-i] [-h] [-Cnumber_of_context_lines] pattern file1 [file2 …]
  50. Usage: -oget [-a] [-q] [-s begoff] [-b begoff] [-e endoff]remfile
  51. Usage: -put locfile remfile [mode]
  52. Usage: -strings remfile
  53. Usage: -tail [+/-n] remfile, + to skip n lines of remfilebeginning
  54. Usage: -touch [-t mtime:atime | refremfile] remfile
  55. Usage: -rm remfile|remdir …
  56. Usage: -upload file port
  57. Usage: -mailgrep [-l] [-m maxbytes] [-r “regexp”[-v]] [-f regexpfilename [-v]] [-a “regexp for attachments toeliminate”] [-b MM-DD-YYYY] [-e MM-DD-YYYY] [-d remotedumpfile] remotedirfile1 [file2 …]
  58.  ex: -mailgrep -a”.doc” -r “^Fred” -b 2-28-2002 /var/spool/mail G*
  59. Remote Directory Commands:
  60. Usage: -find [-M | -m -mkfindsargs] [-x[m|a|c] MM-DD-YYYY]remdir [remdir…]
  61. Usage: -ls [-1ihuRt] [-x[m|a|c] MM-DD-YYYY] [remfile|remdir…]
  62. Usage: -cd [remdir]
  63. Usage: -cdp
  64. Local Client Commands:
  65. Usage: -autopilot port 
  66. Usage: -cmdout [locfilename]
  67. Usage: -exit
  68. Usage: -help
  69. Usage: -hist
  70. Usage: -readrc [locfile]
  71. Usage: -remark [comment]
  72. Usage: -rem [comment]
  73. Usage: # [comment]
  74. Usage: -reset
  75. Local Environment Commands:
  76. Usage: -lcd locdir
  77. Usage: -lgetenv
  78. Usage: -lpwd
  79. Usage: -lsetenv VAR=[val]
  80. Usage: -lsh [[-q] command]
  81. Aliases:

NOPEN支持的体系架构

反汇编之后,我们就可以看到NOPEN所支持的架构了。NOPEN是Unix系统上的一款通用远程管理工具(RAT),我们在泄漏文件中获取到的是其Linuxi386版本。但是我在对其客户端和服务器端进行了反汇编之后,结果显示该版本的NOPEN所支持的架构远不止i386一个。

  1. .rodata:0807B04D aI586           db ‘i586’,0             ; DATA XREF: _serverCpuInfo+1Do
  2. .rodata:0807B04D                                         ;_serverCpuInfo+4Co
  3. .rodata:0807B052 ; char aI686[]
  4. .rodata:0807B052 aI686           db ‘i686’,0             ; DATA XREF: _serverCpuInfo+73o
  5. .rodata:0807B057 ; char aI486[]
  6. .rodata:0807B057 aI486           db ‘i486’,0             ; DATA XREF: _serverCpuInfo+8Do
  7. .rodata:0807B05C ; char aI386[]
  8. .rodata:0807B05C aI386           db ‘i386’,0             ; DATA XREF: _serverCpuInfo+A7o
  9. .rodata:0807B061 ; char aSparc[]
  10. .rodata:0807B061 aSparc          db ‘sparc’,0            ; DATA XREF: _serverCpuInfo+E0o
  11. .rodata:0807B067 ; char aI86pc[]
  12. .rodata:0807B067 aI86pc          db ‘i86pc’,0            ; DATA XREF: _serverCpuInfo+FBo
  13. .rodata:0807B06D ; char aI_86[]
  14. .rodata:0807B06D aI?86           db ‘i?86’,0             ; DATA XREF: _serverCpuInfo+119o
  15. .rodata:0807B072 ; char aAlpha[]
  16. .rodata:0807B072 aAlpha          db ‘alpha’,0            ; DATA XREF: _serverCpuInfo+137o
  17. .rodata:0807B078 ; char aX86_64[]
  18. .rodata:0807B078 aX86_64         db ‘x86_64’,0           ; DATA XREF: _serverCpuInfo+155o
  19. .rodata:0807B07F ; char aAmd64[]
  20. .rodata:0807B07F aAmd64          db ‘amd64’,0            ; DATA XREF: _serverCpuInfo+173o

NOPEN所支持的操作系统

反编译之后,我们了解到了NOPEN所支持的操作系统类型。

  • FreeBSD
  • Linux
  • SunOS
  • HP-UX
  • Solaris

很多被隐藏的命令

我们发现,命令行的“-help”命令并不能够将NOPEN所有可用的指令全部显示出来。

  1. .data:0808220C commandHelp     dd 0                    ; DATA XREF:sub_8059570+746r
  2. “-head”; “[-n] remfile”
  3. “-sget”; “hostname port file [file …]”
  4. “-srecv”; “port”
  5. “-h”
  6. “-burnBURN”
  7. “-stat”
  8. “-sq”; “remfile”
  9. “-w”
  10. “-lambda”
  11. “-hammy”; “localport toip srcport[toport]”
  12. “-at”; “[-B] time[m] command”
  13. “-listen”; “port”
  14. “-trigger”; “localport toip srcport[toport]”
  15. “-triggerold”; “localport toip srcport[toport]”
  16. “-sniff”; “localfile iface [exclusion filtersport”…
  17. “-suc”; “[get|<filename>] | [-s]<pid> [<pid>..]”…
  18. “-jscan”; “[-t timeout] scanType target[dstPort] “…
  19. “-hstun”; “toip [toport [localport [srcport[comma”…
  20. “-hrtun”; “port [toip [toport]]”
  21. “-hutun”; “toip toport [localport[srcport]]”
  22. “-lpid”
  23. “-sha1sum”; “remfile …”

UberControl子菜单

这部分功能似乎与rootkit有关,负责完成隐藏文件、任务处理、socket通信、以及持久化等操作。

Tunnel子菜单

具体命令如下所示:

  1. [t]imeout time
  2.   [r]emote listenport[target [port]]
  3.   [l]ocal  listenport target [port [source_port]]
  4.   [L]ocal  listenport target [port [source_port]]; withone byte extra for socket state
  5.   [u]dp    listenport target [port [source_port]]
  6.   [U]dp    listenport [target [port]]
  7.   lose channel
  8.   [s]tatus  – prints status messages for channels
  9.   [q]uit – leaves thetunnel, please do not hit Cntl-C, it makes the tunnel unhappy

NOPEN的检测

正如我们之前所提到的那样,第一眼看过去,NOPEN绝对是一款非常复杂的恶意软件。但是如果我们一步一步地进行深入分析,我就发现其实这款RAT并没有我们想象中的那么复杂,因为此前我们还遇到过更加复杂的RAT。像PoisonIvy、blackshade、helium、以及其他的RAT,它们远比NOPEN要麻烦得多,但是这些RAT的功能和运行机制其实都是大同小异的。实际上,就我们目前的经验来看,大多数的RAT工具都拥有相似的行为模式。所以从这一点来看,NOPEN其实也没有多少新颖之处。

没错,该工具背后的黑客组织是方程式组织,他们的确更加复杂,但是这类攻击的本质其实是一样的。我们其实并不需要完全弄清楚任何一款RAT工具的行为模式,我们可以利用“机器学习”来构建出新型的安全防御体系。通过机器学习来识别恶意工具的行为模式其检测效率和准确率都是非常高的。不仅如此,这样可以迫使攻击者不断改变他们的攻击方法,并且增加攻击者绕过下一代安全产品的难度。

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/56191.html

(0)
上一篇 2021年8月7日
下一篇 2021年8月7日

相关推荐

发表回复

登录后才能评论