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

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

[[171681]]

前言

不久之前,黑客组织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”的名字。之所以说它非常重要,是因为它既可以作为一个网络后门来感染目标系统,而且攻击者还可以用它来监听数据。

[[171682]]

首先,方程式组织的黑客需要成功入侵目标系统,然后在系统中安装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的安全策略。

[[171683]]

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 [xml] 
  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.   [c]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工具的行为模式,我们可以利用“机器学习”来构建出新型的安全防御体系。通过机器学习来识别恶意工具的行为模式其检测效率和准确率都是非常高的。不仅如此,这样可以迫使攻击者不断改变他们的攻击方法,并且增加攻击者绕过下一代安全产品的难度。

 

责任编辑:武晓燕 来源: FreeBuf
相关推荐

2011-09-21 17:26:54

2017-05-12 13:58:30

2015-02-06 10:41:43

云许可软件即服务IaaS

2019-03-18 10:35:15

人工智能机器学习前端

2024-04-29 13:05:00

AI自动驾驶

2010-03-10 10:22:48

服务器芯片

2015-01-16 10:07:18

云计算云存储数据扩展

2022-02-24 11:00:12

安全美国中国

2016-08-31 00:47:23

2015-11-12 09:19:19

O2O创业死亡

2019-07-25 09:05:30

编程语言PythonJava

2009-07-07 17:12:05

创建UNIX后门

2011-05-11 09:16:30

IIS后门

2009-07-07 17:10:04

创建UNIX后门

2011-03-23 14:44:59

Unix系统root

2023-04-25 09:53:30

开发者计算

2013-12-24 09:56:45

2015-12-16 14:02:04

云存储成本

2020-05-20 12:50:32

代码线性方程开发

2010-04-14 09:40:05

点赞
收藏

51CTO技术栈公众号