2024年3月,INC组织在暗网论坛上公开出售其勒索软件及网络基础设施的源代码,标价为30万美元,并限定潜在买家数量为3人。
同年7月,新出现的Lynx勒索组织所使用的勒索软件及攻击基础设施与INC组织高度相似。Lynx组织随后声明,其工具是通过购买INC组织的源代码获得的。
截至目前,尚未发现该组织公开的解密工具。
2. Lynx勒索软件分析
Lynx勒索软件基本用法,可指定要加密的文件、目录、模式等。
Curve25519 指的是一条曲线,称为蒙哥马利曲线
C:y^2=x^3 + 486662x^2 + x
并且定义在质数模域 p=2^255 − 19 上,故将曲线称之为 Curve25519。
-
Alice生成自己的私钥 a,并且计算公钥 A=a·G
-
Bob 生成自己的私钥 b,并且计算公钥 B=b·G
-
Alice 和 Bob 将自己的公钥通过不安全信道发送给对方
-
Alice 计算 K=a·B=a·(b·G)=ab·G
-
Bob 计算 K=b·A=b·(a·G)=ab·G
Alice 和 Bob 可以得到一个相同的结果作为对称加密的密钥,但是攻击者仅得到的 A(公钥)和 B(公钥),难以计算出 a(私钥),b(私钥)的值,也很难计算得出 K(共享密钥)的结果。
2.2 Lynx加密过程概述
该样本生成随机值作为的椭圆曲线ECC curve 25519加密算法的私钥b,再使用攻击者的公钥A,结合密钥协商交换算法(Differ Hillman)生成共享密钥shared key,最后用共享密钥shared key的SHA512计算结果作为AES的加密密钥,进行加密AES-128-CTR加密数据。
加密文件中写入随机值生成的ECC curve 25519公钥B以及公钥B对应的SHA512值,确保攻击者使用自己私钥a,解出共享密钥shared key。
2.3 Lynx加密过程分析
首先Base64解码得到ECC Curve25519公钥A,并将其传递给 generate_key。
再使用ECC curve25519密钥协商交换算法(x25519)创建共享密钥shared key,再使用SHA512对shared key进行哈希处理。
最后,取哈希值前32字节,其中前16字节用作 AES 密钥key,后16字节用作IV,传递给 aes_key_expansion 以生成轮密钥。
一次加密过程:
攻击者ECC curve25519 公钥A,由 Base64 解码得到
42 A1 18 E2 F9 88 8D 2B 7A 25 B3 62 00 4B 49 9D 91 34 B8 3B 80 16 2B AD 02 8C E4 11 A2 55 75 5E |
CryptGenRandom API 随机生成的 ECC curve25519 私钥b
F2 68 E0 7C E0 75 AD FE 06 A4 4D D5 22 F6 1E E2 01 D4 1A D7 9C BA AB F5 63 FE 16 D8 A3 A8 93 D4 |
随机生成的 ECC curve25519 私钥b与攻击者 ECC curve25519公钥A,协商生成 ECC curve25519共享密钥 shared_key
0D 08 59 D0 FA D4 13 F6 BA 35 78 15 55 8D 7E C3 10 44 D6 5C D0 9A 3B 9C 52 C5 EF E3 10 DD 9D 4E |
ECC curve25519 共享密钥 shared_key 计算 SHA512后的前32字节
EB 46 16 A7 F5 F4 72 C4 7C 03 42 70 DA EB E8 01 84 CB B5 E5 65 C9 09 8B 73 D7 B4 7C 35 34 A8 9E |
shared_key SHA512 结果作为 AES-128-CTR加密密钥key,加密文件内容
前16字节为 AES key
EB 46 16 A7 F5 F4 72 C4 7C 03 42 70 DA EB E8 01 |
后16字节为 AES IV
84 CB B5 E5 65 C9 09 8B 73 D7 B4 7C 35 34 A8 9E |
AES-128-CTR 加密txt文件后的数据解析
test.txt中的数据(len(file)=19字节): 1C 44 C8 77 29 23 84 9C B1 E9 4C D9 DD 6A 65 79 90 B2 3A |
加密数据后的固定116字节:
主机上生成的ECC公钥B(32字节) 00 C4 09 9E 60 CC AC B6 CE E4 54 5A 95 7B A4 C7 06 AC 4D 5B 6D C3 C0 77 99 B7 61 BA 7F A7 18 5B |
ECC公钥SHA512计算结果(64字节) 50 F7 01 55 BE 53 CA 30 76 FA 90 AE 3F 67 23 65 EA AD 9B 50 4F 43 FA 70 2E 74 AE 0B 31 53 A7 49 1F 32 77 1E 09 E2 B3 DB FD F1 E1 C2 22 DA 2E 15 2F D6 A2 5F 09 42 DE 3F 7D EF 92 37 EB 7B D2 94 |
banner “LYNX”(4字节) 4C 59 4E 58 |
未知标志与加密块配置(16字节) 00 00 00 00 40 42 0F 00 05 00 00 00 01 00 00 00 |
理论上,获取到主机上生成的ECC私钥b,可以通过ECC私钥b与攻击者公钥A计算,获得共享密钥shared key,最终得到AES key与IV,实现数据解密。
实际上,随机值(私钥b)分配在堆上,生成共享密钥后就销毁堆区,必须在进程执行时,马上dump进程的堆区才有可能获取到,但很难做到dump时,刚好私钥b被分配,所以只存在理论上解密的可能性。
下面是通过调试获取到ECC私钥b,复现整个解密过程。
-
eaa0e773eb593b0046452f420b6db8a47178c09e6db0fa68f6a2d42c3f48e3bc
-
571f5de9dd0d509ed7e5242b9b7473c2b2cbb36ba64d38b32122a0a337d6cf8b
-
b378b7ef0f906358eec595777a50f9bb5cc7bb6635e0f031d65b818a26bdc4ee
-
ecbfea3e7869166dd418f15387bc33ce46f2c72168f571071916b5054d7f6e49
-
85699c7180ad77f2ede0b15862bb7b51ad9df0478ed394866ac7fa9362bf5683
-
lynxblog.net
-
lynxchat.net
Reference
-
https://blog.sww.moe/post/x25519/
-
https://qr9.net/ed25519-key-pair-generator
-
https://www.picussecurity.com/resource/blog/lynx-ransomware
-
https://www.nextron-systems.com/2024/10/11/in-depth-analysis-of-lynx-ransomware/
-
https://www.cl.cam.ac.uk/teaching/2122/Crypto/curve25519.pdf
原文始发于微信公众号(TahirSec):Windows | Lynx勒索软件加密算法分析
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论