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

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

NOPEN的欢迎界面

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

NOPEN! v3.0.5.3

sh: 1: scanner: not found

sh: 1: ourtn: not found

sh: 1: scripme: not found

Wed Aug 31 18:07:05 GMT 2016

NHOME: environment variable not set, assuming"NHOME=/root/Firewall/TOOLS/NOPEN/.."

NHOME=/root/Firewall/TOOLS/NOPEN/..

Reading resource file"/root/Firewall/TOOLS/NOPEN/../etc/norc".../root/Firewall/TOOLS/NOPEN/../etc/norc: No such file or directory

TERM=xterm-256color

Entering connect mode

Attempting connection to 127.0.0.1:32754(127.0.0.1:32754)... ok

Initiating RSA key exchange

Generating randomnumber... ok

Initializing RC6...ok

Sending randomnumber... ok

Receiving randomnumber... ok

Generating sessionkey... 0x0DE6200E48AB016831720B109B8B2874

Sending first verifystring... ok

Receiving secondverify string... ok

Checking secondverify string... ok

RSA key exchange complete

NOPEN server version... 3.0.5.3

Connection

Bytes In / Out 201/94 (213%C) / 63/4 (1575%C)

Local Host:Port localhost:41847 (127.0.0.1:41847)

RemoteHost:Port 127.0.0.1:32754(127.0.0.1:32754)

RemoteHost:Port kali:32754 (127.0.0.1:32754)

Local

NOPEN client 3.0.5.3

Date/Time Wed Aug 31 18:07:05 UTC 2016

History

Command Out

CWD /root/Firewall/TOOLS/NOPEN

NHOME /root/Firewall/TOOLS/NOPEN/..

PID (PPID) 6904 (6896)

Remote

NOPEN server 3.0.5.3

WDIR NOT SET

OS Linux 4.6.0-kali1-amd64 #1 SMPDebian 4.6.4-1kali1 (2016-07-21) x86_64

CWD

PID (PPID) 6908 (6889)

Reading resource file"/root/Firewall/TOOLS/NOPEN/../etc/norc.linux".../root/Firewall/TOOLS/NOPEN/../etc/norc.linux: No such file or directory

History loaded from"/root/Firewall/TOOLS/NOPEN/../down/history/kali.127.0.0.1"... ok

Creating command output file"/root/Firewall/TOOLS/NOPEN/../down/cmdout/kali.127.0.0.1-2016-08-31-18:07:05"...ok

Lonely? Bored? Need advice? Maybe "-help" will show you the way.

We are starting up our virtual autoport

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

We are bound and ready to go on port 1025

NO! kali:>-help

08-31-16 18:07:17 GMT

[-help]

Remote General Commands:

Usage: -elevate

Usage: -getenv

Usage: -gs category|filename [options-if-any]

Usage: -setenv VAR=[val]

Usage: -shell

Usage: -status

Usage: -time

Remote Server Commands:

Usage: -burn

Usage: -call ip port

Usage: -listen port

Usage: -pid

Remote Network Commands:

Usage: -icmptime target_ip [source_ip]

Usage: -ifconfig

Usage: -nslookup name1 ...

Usage: -ping -r remote_target_ip -l local_source_ip [-p dest_port] [-s src_port]

-ping host

-ping[-u|-t|-i] host

Usage: -trace -r remote_target_ip -l local_source_ip [-p dest_port] [-s src_port]

-trace host

-trace[-u|-t|-i] host

Remote Redirection Commands:

Usage: -fixudp port

Usage: -irtun target_ip call_back_port [call_back_ip] [ourtnarguements]

Usage: -jackpop target_ip target_port source_ip source_port

Usage: -nrtun port [toip [toport]]

Usage: -nstun toip [toport [localport [srcport [command]]]]

-nstuntoip:port

Usage: -rawsend tcp_port

Usage: -rtun port [toip [toport]]

Usage: -scan

Usage: -sentry target_address source_address (tcp|udp)dest_port src_port interface

Usage: -stun toip toport [localport [srcport]]

Usage: -sutun [-t ttl] toip toport [localport [srcport]]

Usage: -tunnel [command_listen_port [udp]]

Usage: -vscan (shouldadd help)

Remote File Commands:

Usage: -cat remfile

Usage: -chili [-l] [-s lines] [-m max] MM-DD-YYYY remdirremfile [remfile ...]

Usage: -cksum remfile ...

Usage: -fget [MM-DD-YYYY] loclist

Usage: -get [-l] [-q] [-s minimumsize] [-m MM-DD-YYYY]remfile ...

Usage: -grep [-d] [-v] [-n] [-i] [-h] [-Cnumber_of_context_lines] pattern file1 [file2 ...]

Usage: -oget [-a] [-q] [-s begoff] [-b begoff] [-e endoff]remfile

Usage: -put locfile remfile [mode]

Usage: -strings remfile

Usage: -tail [+/-n] remfile, + to skip n lines of remfilebeginning

Usage: -touch [-t mtime:atime | refremfile] remfile

Usage: -rm remfile|remdir ...

Usage: -upload file port

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 ...]

ex: -mailgrep -a".doc" -r "^Fred" -b 2-28-2002 /var/spool/mail G*

Remote Directory Commands:

Usage: -find [-M | -m -mkfindsargs] [-x[m|a|c] MM-DD-YYYY]remdir [remdir...]

Usage: -ls [-1ihuRt] [-x[m|a|c] MM-DD-YYYY] [remfile|remdir...]

Usage: -cd [remdir]

Usage: -cdp

Local Client Commands:

Usage: -autopilot port [xml]

Usage: -cmdout [locfilename]

Usage: -exit

Usage: -help

Usage: -hist

Usage: -readrc [locfile]

Usage: -remark [comment]

Usage: -rem [comment]

Usage: # [comment]

Usage: -reset

Local Environment Commands:

Usage: -lcd locdir

Usage: -lgetenv

Usage: -lpwd

Usage: -lsetenv VAR=[val]

Usage: -lsh [[-q] command]

Aliases:

NOPEN支持的体系架构

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

.rodata:0807B04D aI586 db 'i586',0 ;DATA XREF: _serverCpuInfo+1Do

.rodata:0807B04D ;_serverCpuInfo+4Co

.rodata:0807B052 ;char aI686[]

.rodata:0807B052 aI686 db 'i686',0 ;DATA XREF: _serverCpuInfo+73o

.rodata:0807B057 ;char aI486[]

.rodata:0807B057 aI486 db 'i486',0 ;DATA XREF: _serverCpuInfo+8Do

.rodata:0807B05C ;char aI386[]

.rodata:0807B05C aI386 db 'i386',0 ;DATA XREF: _serverCpuInfo+A7o

.rodata:0807B061 ;char aSparc[]

.rodata:0807B061 aSparc db 'sparc',0 ;DATA XREF: _serverCpuInfo+E0o

.rodata:0807B067 ;char aI86pc[]

.rodata:0807B067 aI86pc db 'i86pc',0 ;DATA XREF: _serverCpuInfo+FBo

.rodata:0807B06D ;char aI_86[]

.rodata:0807B06D aI?86 db 'i?86',0 ;DATA XREF: _serverCpuInfo+119o

.rodata:0807B072 ;char aAlpha[]

.rodata:0807B072 aAlpha db 'alpha',0 ;DATA XREF: _serverCpuInfo+137o

.rodata:0807B078 ;char aX86_64[]

.rodata:0807B078 aX86_64 db 'x86_64',0 ;DATA XREF: _serverCpuInfo+155o

.rodata:0807B07F ;char aAmd64[]

.rodata:0807B07F aAmd64 db 'amd64',0 ;DATA XREF: _serverCpuInfo+173o

NOPEN所支持的操作系统

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

FreeBSD

Linux

SunOS

HP-UX

Solaris

很多被隐藏的命令

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

.data:0808220C commandHelp dd 0 ;DATA XREF:sub_8059570+746r

"-head"; "[-n] remfile"

"-sget"; "hostname port file [file ...]"

"-srecv"; "port"

"-h"

"-burnBURN"

"-stat"

"-sq"; "remfile"

"-w"

"-lambda"

"-hammy"; "localport toip srcport[toport]"

"-at"; "[-B] time[m] command"

"-listen"; "port"

"-trigger"; "localport toip srcport[toport]"

"-triggerold"; "localport toip srcport[toport]"

"-sniff"; "localfile iface [exclusion filtersport"...

"-suc"; "[get|] | [-s] [..]"...

"-jscan"; "[-t timeout] scanType target[dstPort] "...

"-hstun"; "toip [toport [localport [srcport[comma"...

"-hrtun"; "port [toip [toport]]"

"-hutun"; "toip toport [localport[srcport]]"

"-lpid"

"-sha1sum"; "remfile ..."

UberControl子菜单

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

Tunnel子菜单

具体命令如下所示:

[t]imeout time

[r]emote listenport[target [port]]

[l]ocal listenport target [port [source_port]]

[L]ocal listenport target [port [source_port]]; withone byte extra for socket state

[u]dp listenport target [port [source_port]]

[U]dp listenport [target [port]]

[c]lose channel

[s]tatus - prints status messages for channels

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

本文转自d1net(转载)

相关文章
|
6月前
|
缓存 网络协议 Unix
Linux(UNIX)五种网络I/O模型与IO多路复用
Linux(UNIX)五种网络I/O模型与IO多路复用
170 0
|
6月前
|
Unix Shell Linux
在Unix/Linux操作系统中,Shell脚本广泛用于自动化任务
在Unix/Linux操作系统中,Shell脚本广泛用于自动化任务
69 2
|
30天前
|
Unix 物联网 大数据
操作系统的演化与比较:从Unix到Linux
本文将探讨操作系统的历史发展,重点关注Unix和Linux两个主要的操作系统分支。通过分析它们的起源、设计哲学、技术特点以及在现代计算中的影响,我们可以更好地理解操作系统在计算机科学中的核心地位及其未来发展趋势。
|
3月前
|
Unix Linux 程序员
Unix:Linux的“逗趣祖师爷”与它的不凡传承
在科技长河中,Unix犹如一颗恒星,既是历史见证者也是未来的启发者。1969年,因程序员肯·汤普森想在他的PDP-7上玩“Space Travel”游戏,意外创造了Unix,以简洁优雅的代码改变了操作系统的世界。进入90年代,林纳斯·托瓦兹受Unix启发,开发了开源免费的Linux,像是Unix调皮的孙子,不仅继承其精髓还增添了开放共享的精神。Unix与Linux之间的传承,就像是智者与追蝶孩童的故事,充满了岁月的智慧与新生的活力,提醒我们科技传奇往往源于不起眼的小事。下次使用Linux时,不妨会心一笑吧!
54 0
|
3月前
|
开发框架 Unix Linux
LangChain 构建问题之在Unix/Linux系统上设置OpenAI API密钥如何解决
LangChain 构建问题之在Unix/Linux系统上设置OpenAI API密钥如何解决
48 0
|
6月前
|
Unix Shell Linux
在Linux和类Unix系统中,Shell提供了多种命令用于用户和权限管理
在Linux和类Unix系统中,Shell提供了多种命令用于用户和权限管理
77 4
|
Unix 大数据 Linux
【Linux is not Unix】Linux前言
【Linux is not Unix】Linux前言
|
6月前
|
Oracle Ubuntu Unix
Unix与Linux区别
Unix: Unix是一个操作系统家族的名称,最早由贝尔实验室(Bell Labs)的肖像电机公司(AT&T)开发。最早的Unix版本是在1969年创建的。 Linux: Linux是由芬兰计算机科学家Linus Torvalds在1991年创建的。它是作为一个免费、开放源代码的Unix克隆而开始的。
101 1
|
6月前
|
Unix Shell Linux
在Unix/Linux Shell中,管道(`|`)和重定向
在Unix/Linux Shell中,管道(`|`)和重定向
91 1
|
6月前
|
Ubuntu Unix Linux
Unix/Linux操作系统的最强入门科普(经典)
Unix/Linux操作系统的最强入门科普(经典)
395 0