Skip to content

Commit cad293b

Browse files
author
Anh Ho
committed
BluStealer IOC
1 parent 88b70ae commit cad293b

File tree

6 files changed

+427
-0
lines changed

6 files changed

+427
-0
lines changed

BluStealer/README.md

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
# IoC for BluStealer
2+
3+
Malware analysis and more technical information at <https://decoded.avast.io/anhho/blustealer/>
4+
5+
6+
### Table of Contents
7+
* [BluStealer](#samples-sha-256)
8+
* [Network indicators](#network-indicators)
9+
10+
11+
## BluStealer
12+
#### SHA-256
13+
```
14+
678e9028caccb74ee81779c5dd6627fb6f336b2833e9a99c4099898527b0d481
15+
3151ddec325ffc6269e6704d04ef206d62bba338f50a4ea833740c4b6fe770ea
16+
7603f8e827ab78d5ff15be1b04b9a02821edf3bf90475295e0c7c792bc328f63
17+
7abe87a6b675d3601a4014ac6da84392442159a68992ce0b24e709d4a1d20690
18+
49da8145f85c63063230762826aa8d85d80399454339e47f788127dafc62ac22
19+
5ff29232adcc335d007ee55421d2d6bb4ac171becf2b9b9a7595d6e4b9fc13e1
20+
edab175c91e078e92b57446111cb07c61e357d9a12274cab33872e14d4511ea9
21+
8ba38dfdaed05011a8f9d19eec1670efa63cce30f23609a3c00afb265aa22ad8
22+
c52a0ce16c6db82bf194988a0094a4b18aec550f1953b5e9ab127c0b84f4ecca
23+
1885c2faae1cf90783c7fc9ea93506e8241232e90bdaeae4ca04a5cb305e13f3
24+
e6ed1d0f3827d5a2e6fd38ec812456b62ee702bdaa460f7f6ef5298db5136df5
25+
61560f470822a249950e3d35574aae0ee9c93da31c1fd6f001c0cec97069a4fb
26+
1e41442f28a2328a8cec90459483ae5da9b21484b2bdd2b2e206e34a8f5672bc
27+
6384e3d112dfb4f7d3f2761764e491383f20cffbb7a180a087b22ef903bcc9a6
28+
037815f51ba857c16a5c98aa37a2acba3430b0d27de3abf558cda2bff50fa35e
29+
b9dcf75696ba71f292246a31877cc8c833676c5c8c241e65c741711388d99bcb
30+
d1c69a54577f5c6491b2979279b04c5db668e20968363d7476848d152bb94362
31+
e6ed1d0f3827d5a2e6fd38ec812456b62ee702bdaa460f7f6ef5298db5136df5
32+
fbab6f778d521589e9371227f25112fed34c19efa9f3cc068bdcffe304d67111
33+
620ce6c90baeaba37fb4e4ad1edcb0a862e12e1b058eaa8c41bed7439c3bd983
34+
0872abe29cc9231cdded3a44e02a7ea17f09cf2ac2bdbd7077065858829c3723
35+
b340e287c5c5cd48a5d27c71808dc75c3fd3a69a6cad029db2332e19d998bb82
36+
aef52ead2a03729f95962c511947226d78fe856d29ccfaacf25e1c002c0c9f92
37+
35d443578b1eb0708d334d3e1250f68550a5db4d630f1813fed8e2fc58a2c6d0
38+
c783bdf31d6ee3782d05fde9e87f70e9f3a9b39bf1684504770ce02f29d5b7e1
39+
42fe72df91aa852b257cc3227329eb5bf4fce5dabff34cd0093f1298e3b5454e
40+
1c29ee414b011a411db774015a98a8970bf90c3475f91f7547a16a8946cd5a81
41+
81bbcc887017cc47015421c38703c9c261e986c3fdcd7fef5ca4c01bcf997007
42+
6322ebb240ba18119193412e0ed7b325af171ec9ad48f61ce532cc120418c8d5
43+
4932ea0c29c86544f03f9425b8088886d68a5965be8541a8d9c36a9b95eeacf9
44+
7b1fc82d47470ee3c7f8de53a959eb55febe3c4c6ba408190a877396907f8293
45+
5d5e9bc60284b01bc75bec81489654b56a739d81acce580cdff735070d9e831f
46+
43c2649b8f43a3a39f3d5f93347ac0460b9ccf910bda544e84a07769e1af34bd
47+
bc52d9795f801ca6872502c6e8af05cf3730384062f3b90113abc30ff9395879
48+
304c188b1452beea8b8a1f8bd4ac64b02781665792b46df692762b18685b1ccb
49+
75839121c06dd5f7ea7a32ced2755c8913ae81f7225ef6e790c131a5554034fa
50+
b2a74a9349ed9ebe01b89786e5472ac4cb437cec7bfb7107e135baa69d41e11a
51+
21f75377b964d884a9c32849b766d52f43dc05a5e53a3bf5665473abc15d7740
52+
efd63437050cbce03fb4e13c4be8858d0793ceaf678ffed8e6369578037fb6e1
53+
274bcc8a907b7f1bbfceb5b0e9f0f8f6d0dbdc65d774ce135467b704f755db81
54+
7881a0b4a3b923ae091c09e3498e1513ff8872a56fbf7977777ad6776a781b0b
55+
b9933e298be75df66ed2eee62207815a20ec36cbfae9b098c24739f0d712aacf
56+
add711e10bfde4da3e2048a27d8c8eab084e2df5bde714437ff2dd5dc0baa505
57+
```
58+
59+
#### Crypto Address List
60+
```
61+
1ARtkKzd18Z4QhvHVijrVFTgerYEoopjLP (1.67227860 BTC)
62+
1AfFoww2ajt5g1YyrrfNYQfKJAjnRwVUsX (0.06755943 BTC)
63+
1MEf31xHgNKqyB7HEeAbcU6BhofMdwLE3r
64+
38atNsForzrDRhJoVAhyXsQLqWYfYgodd5
65+
bc1qrjl4ksg5h7p70jjtypr8s6cjpngzd3kerfj9rt
66+
bc1qjg3y4d4t6hwg6h22khknlxcstevjg2qkrxt6qu
67+
1KfRWVcShzwE2Atp1njogAqH8qodsif3pi
68+
3P6JnvWtubxbCxgPW7GAAj8u6CLV2h9MkY
69+
13vZcoMYRcKrDRDYUyH9Cd4kCRMZVjFkyn
70+
qrej5ltx0sgk5c7aygdsvt2gh7fq04umvusxhxl7wq
71+
qrzakt59udz893u2uuwtgrwrjj9dhtk0gc3m4m2sj5
72+
0xd070c48cd3bdeb8a6ca90310249aae90a7f26303 (0.10 ETH)
73+
0x95d3763546235393B77aC188E5B08dD4Af68d89D
74+
0xcfE71c720b7E99e555c0e98b725919B7a69f8Bb0
75+
46W5WHQG2B1Df9uKrkyuhoLNVtJouMfPR9wMkhrzRiEtD2PmdcXMvQt52jQVWKXUC45hwYRXhBYVjLRbpDu8CK2UN2xzenr
76+
43Q4G9CdM3iNbkwhujAQJ7TedSLxYQ8hJJHYqsqns7qz696gkPgMvUvDcDfZJ7bMzcaQeoSF86eFE2fL9njU59dQRfPHFnv
77+
LfADbqTZoQhCPBr39mqQpf9myUiUiFrDBG
78+
LY5jmjdFnvgFjJET2wX5fVV6Gv89QdQRv3
79+
GCGIOH2DY63P3EX4UIKXDN757DFGHWAYRBFZ5FD7QOJTXAOUTHF64RIA
80+
GBQAOVKWPEY3M373CZSN2EQSIGRXWG3J4SNLOQNVCWRUYK7S4RJXKTOJ
81+
r3xDYvq9FEqk37aDmS8S1WWSst58AiykVq
82+
rKJedgqQy12s8Y7y4ziL9kWkMMzfJ2wfAm
83+
```
84+
85+
## Network indicators
86+
#### Download URL
87+
```
88+
hxxps://cdn[.]discordapp.com/attachments/829530662406193185/881703391888281630/TME_delivery_status.iso
89+
hxxps://cdn[.]discordapp.com/attachments/829530662406193185/882099214866333706/Shipment_Receipt.pdf.iso
90+
```
91+
92+
#### SMTP
93+
```
94+
andres.galarraga@sismode.com (smtp.1and1.com)
95+
saleseuropower@yandex.com
96+
info@starkgulf.com (mail.starkgulf.com )
97+
etopical@bojtai.club (mail.bojtai.club)
98+
fernando@digitaldirecto.es (smtp.ionos.es)
99+
baerbelscheibll1809@gmail.com
100+
dashboard@grandamishabot.ru (shepherd.myhostcpl.com)
101+
logs@grandamishabot.ru
102+
shan@farm-finn.com (mail.farm-finn.com)
103+
info@starkgulf.com (mail.starkgulf.com)
104+
netline@netjul.shop (mail.restd.club)
105+
```
106+
107+
#### Telegram Token
108+
```
109+
1901905375:AAFoPAvBxaWxmDiYbdJWH-OdsUuObDY0pjs
110+
1989667182:AAFx2Rti45m06IscLpGbHo8v4659Q8swfkQ
111+
```
112+
113+

BluStealer/extras/ida-decrypt.py

Lines changed: 172 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,172 @@
1+
import idautils
2+
from Cryptodome.Cipher import AES
3+
from Cryptodome.Util.Padding import pad
4+
import hashlib
5+
import base64
6+
7+
def KSA(key: bytes) -> bytes:
8+
S = bytearray(256)
9+
for i in range(256):
10+
S[i] = i
11+
j = 0
12+
for i in range(256):
13+
j = (j + S[i] + key[i % len(key)]) % 256
14+
temp = S[i]
15+
S[i] = S[j]
16+
S[j] = temp
17+
return S
18+
19+
def PRGA(key: bytes, ci: bytes) -> bytes:
20+
S = KSA(key)
21+
a = 0
22+
b = 0
23+
pl = bytearray(len(ci))
24+
for i in range(len(ci)):
25+
a = (a+1) % 256
26+
b = (b + S[a]) % 256
27+
temp = S[a]
28+
S[a] = S[b]
29+
S[b] = temp
30+
K = S[(S[a] + S[b]) % 256]
31+
pl[i] = ci[i] ^ K
32+
return pl
33+
34+
def rc4_decrypt_str(citext, key):
35+
citext = bytearray.fromhex(citext.decode('utf-8'))
36+
pltext = PRGA(key, citext)
37+
return pltext
38+
39+
40+
return pltext
41+
42+
def xor_decrypt_str(citext, key):
43+
citext = bytearray.fromhex(citext.decode('utf-8'))
44+
pltext = bytearray()
45+
46+
for i in range(0, len(citext)):
47+
pltext.append(citext[i] ^ key[(i+1) % len(key)])
48+
49+
return pltext
50+
51+
def prepad(size):
52+
pre_pad = []
53+
nonce = 0
54+
for i in range(0, size, 16) :
55+
nonce +=1
56+
padding = nonce.to_bytes(16, 'little')
57+
pre_pad += padding
58+
return bytearray(pre_pad)
59+
60+
def aes_decrypt(citext, password):
61+
salt = b'SaltVb6CryptoAes'
62+
key = hashlib.pbkdf2_hmac('sha1', password, salt, 1000, dklen=32)
63+
aes_stream = prepad(len(citext))
64+
aes_stream.extend(citext)
65+
cipher = AES.new(key, AES.MODE_ECB)
66+
xor_key = cipher.encrypt(pad(aes_stream, 16))
67+
plaintext = bytearray(len(citext))
68+
for i in range(len(citext)) : plaintext[i] = xor_key[i] ^ citext[i]
69+
return plaintext
70+
71+
def aes_decrypt_str(citext, password):
72+
citext = bytearray.fromhex(citext.decode('utf-8'))
73+
citext = base64.b64decode(citext)
74+
return aes_decrypt(citext, password)
75+
76+
def get_str(addr):
77+
res = bytearray()
78+
length = 0
79+
data = idc.get_wide_word(addr+length)
80+
81+
while data:
82+
res.append(data)
83+
length += 2
84+
data = idc.get_wide_word(addr+length)
85+
return res
86+
87+
def decrypt_all_strs(hex_func, decrypt_func, algo=0, patch=1):
88+
#List of addreses required manual provision
89+
citext_exception = []
90+
key_exception = []
91+
citext_addrs = []
92+
key_addrs = []
93+
strings = []
94+
95+
for addr in idautils.XrefsTo(hex_func, flags=0):
96+
citext_addr = addr.frm
97+
while True:
98+
citext_addr = idc.prev_head(citext_addr)
99+
if idc.print_insn_mnem(citext_addr) == "mov" and idc.get_operand_type(citext_addr, 1) == 0x5 :
100+
temp = idc.get_operand_value(citext_addr, 1)
101+
if temp not in citext_exception:
102+
citext_addrs.append(temp)
103+
break
104+
105+
for addr in idautils.XrefsTo(decrypt_func, flags=0):
106+
key_addr = addr.frm
107+
while True:
108+
key_addr = idc.prev_head(key_addr)
109+
if idc.print_insn_mnem(key_addr) == "mov" and idc.get_operand_type(key_addr, 1) == 0x5 and idc.get_operand_value(key_addr, 0) == 0x2:
110+
temp = idc.get_operand_value(key_addr, 1)
111+
if temp not in key_exception:
112+
key_addrs.append(temp)
113+
break
114+
115+
decrypted = []
116+
size = min(len(key_addrs), len(citext_addrs))
117+
citext_addrs = citext_addrs[:size]
118+
citext_addrs.extend(citext_exception)
119+
key_addrs = key_addrs[:size]
120+
key_addrs.extend(key_exception)
121+
122+
for i in range(0, size+len(citext_exception)) :
123+
if citext_addrs[i] not in decrypted:
124+
decrypted.append(citext_addrs[i])
125+
else:
126+
continue
127+
128+
print(f"{hex(citext_addrs[i])} {hex(key_addrs[i])}")
129+
if algo == 1:
130+
pltext = xor_decrypt_str(get_str(citext_addrs[i]), get_str(key_addrs[i]))
131+
elif algo == 2:
132+
pltext = rc4_decrypt_str(get_str(citext_addrs[i]), get_str(key_addrs[i]))
133+
else:
134+
pltext = aes_decrypt_str(get_str(citext_addrs[i]), get_str(key_addrs[i]))
135+
print(pltext)
136+
137+
if pltext not in strings:
138+
idc.set_cmt(citext_addrs[i], pltext.decode('utf-8'), 1)
139+
strings.append(pltext)
140+
if patch:
141+
for idx in range(len(pltext)) :
142+
idc.patch_word(citext_addrs[i] + idx*2, pltext[idx])
143+
for pad_idx in range(idx + 1, idx*2) :
144+
idc.patch_word(citext_addrs[i] + pad_idx*2, 0x00)
145+
return strings
146+
147+
''''
148+
Please provide the address of the following functions
149+
hex_func as Proc_1_3
150+
decrypt_func as Proc_1_5
151+
152+
(void (__fastcall *)(char *, const wchar_t *))_vbaStrCopy)(
153+
v165,
154+
L"9FB61391D8974B3D8AD01F88F3CECED5B4E9100A3C10C6A37AC8670C078E23B9C0C7");
155+
v8 = Proc_1_3(v165);
156+
((void (__fastcall *)(int *, int))_vbaStrMove)(&v162, v8);
157+
((void (__fastcall *)(char *, const wchar_t *))_vbaStrCopy)(v163, L"OMSkahFpbDoSRbwObPrXoXrL");
158+
v120 = v162;
159+
v162 = 0;
160+
((void (__fastcall *)(char *, int))_vbaStrMove)(v164, v120);
161+
v156 = Proc_1_5(v164, v163);
162+
163+
Please apply an IDC Script generated from http://sandsprite.com/vbdec/ to help fix up all functions
164+
'''
165+
hex_func =
166+
decrypt_func =
167+
strings = decrypt_all_strs(hex_func, decrypt_func, patch=0)
168+
169+
#Decrypt payload from resource file example
170+
#citext = bytearray(open('CUSTOM101', 'rb').read())
171+
#password = b'DDDJJFHHDII8387474765HHFNNFBGGFJJRKJKERJ439485TH8THTJMNBGJTIGH4I5YYIU45VBIUG4I7I1123405TY'
172+
#open('payload.bin', 'wb').write(aes_decrypt(citext, password))

BluStealer/network.txt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
cdn[.]discordapp.com/attachments/829530662406193185/881703391888281630/TME_delivery_status.iso
2+
cdn[.]discordapp.com/attachments/829530662406193185/882099214866333706/Shipment_Receipt.pdf.iso
3+
andres.galarraga@sismode.com
4+
saleseuropower@yandex.com
5+
info@starkgulf.com
6+
etopical@bojtai.club
7+
fernando@digitaldirecto.es
8+
baerbelscheibll1809@gmail.com
9+
dashboard@grandamishabot.ru
10+
logs@grandamishabot.ru
11+
shan@farm-finn.com
12+
info@starkgulf.com
13+
netline@netjul.shop

BluStealer/samples.md5

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
9d68d62ba648dc881076bbd7d70ac59c
2+
925b9684983a46b984f190c18c868db3
3+
79a97d24433615837251fe141b7174d4
4+
6f7302e24899d1c05dcabbc8ec3e84d4
5+
6ada9bd1462fbfd331cf512e5818845c
6+
e1cb274e093a6511f3f4fe455f914544
7+
0126cf58488b9c91b900d66990dea74a
8+
6b7904fcf4f57299a961a746d83cef89
9+
d4acddc42c8a82dfe42b86f02eb8bc76
10+
7b67428d037e03d486bfc80126a86fc9
11+
f2f6a1a59fea21aae4341827feea8d0b
12+
b3d0b8c065ad75dfd646829bc7c87735
13+
75cd3d2c8c439e9e7bb66b3b102bfda0
14+
716f710f6f2b57d83ad58644fbd96b8b
15+
fd5bcdac791022b5452b12542a4be250
16+
07ddb19024ba308280048375e9be32ff
17+
5ad315813b752aa9483c5868dbc7d37b
18+
199bab13ac407a49891dabb0c1c8e303
19+
e0b26c5b50a37a6672d29e90b8b0adbd
20+
91b41651e6e9ab352805c6d35a297d08
21+
6ae510da968ebcbf5a8661c080ac12fd
22+
4b975596502b87cd63ac969b13ea998f
23+
6f8bb2ff11646a8e47c1b2a27d475010
24+
3729ddb118ee2c7addc09de37b00c7bf
25+
6fe6ba1439d88cf7fd8debb37324ce82
26+
479de94fbadd83fce799ed3389da1ce5
27+
4ac6f9f4017f83d0582f445584bb143c
28+
659add09ffc62a07b044a31d8b0df624
29+
906dccd51a18df6ea9f18d092976f942
30+
28896e0518936c1d15f282b7cba5f7c6
31+
818d803e3bb3a1b21fd663db75b3c6ae
32+
852272ecaca074fc886617a92886c511
33+
4a7e2d2455e0a69ffd9f67c1d3742a0e
34+
e07778f09aa5030ed8552e5038f8fc1c
35+
5a025fd5a54ec9b733c5c7936977839f
36+
9907b4c2e52595de42ae8cda0cb10613
37+
98c0be7dfb690e61ba2a0eb9352e1497
38+
a14f2cf850e04ec669fdb46462895541
39+
f71be3c684a4cc97288b3b7609adeda3
40+
71be01727b86c69e893e046be8f9fa1b
41+
03ebd4eb395cf8a547048504d8c97540
42+
61ae6cda7bcd244e8bd4717425ec823d
43+
46349f1af3adcf917df984040a8dce52

BluStealer/samples.sha1

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
9a896957321b89c4ad55d906f98d58024f05b9f9
2+
d8452cda97b9efc597254055e1d3089a21aa5582
3+
6629ebd021eefece2411f6253e2d0b2c7a04d577
4+
11a5cbb08fc5698fd3bf3fd086ba0fcd954ecdec
5+
a0960b16e2057ed5ec1a5b356005392beb59de64
6+
42e6134c8ab92fb8bcdf1e222d9b80c117640b27
7+
731c5fd198ff88c8819d99a2d499a2d23e50114f
8+
bfe71a81fc2a1ee0e45a705fe021b0302b07c927
9+
1ab7ff892bb1cfa2b88e3024561288efc5a9c0c8
10+
a50ff1bc36532a11b987471ee42d34a657a0b7ad
11+
6a5abba4d17f275eb4c28028f815642c7e22a1ce
12+
629655f03b356ad46ae106855eb004c7be7098c0
13+
d2a2717f22f5ce326a3e8f8e7efd852e5b5c68f7
14+
f2a9b68f3222ca133ffd26c22c358f3f285b8eba
15+
7ad684c4d6969dc2292fd73a924c6109614190c3
16+
e2714ca01a6e8e8713e9e2a175c0e3598ebb75df
17+
73375d743067ada0569acc444143b56fa66c1ff3
18+
e332094b0ffd29f0fc0e7a70a03345ef725181d9
19+
9d70d4c5bed44e6a3375cf16d9f8830f0a85c8ab
20+
11b8eaa7b7941461bc952b11ec3f07d25dcd1c2e
21+
954411a295d35020e447be1535253d800d463efe
22+
c3f2fa95e2b668b5e32b3a494f81d8ac5f476f60
23+
a300b7be64343ce6ab88edb0c71f3052663674d4
24+
4c56754e3261a7368ade6033e6cca69b316cc834
25+
6dd21af92d79085a4140be5db5c6faa7c5de2f81
26+
4ae4c57faeab4e3b4cbf07f34c0cb12f542bc422
27+
15d11f71b884c4ce0c1c4a83e760bf7a7c492cab
28+
bef7500a5e3a62295f102ef5f6f100597d78a546
29+
7328e378ec766d7a898c4043f3d9ec0885a2d209
30+
87d3b5c8b1d284f446cf3a0dc955551c4d42fe3c
31+
37f7b510514953113fd7cbc1b5ff246e2e486a7a
32+
e3a16c367d0672868c65f5bffbfa33264458a84d
33+
a35989cc8343c5afbfa7eab186dc6c72129cfc2a
34+
994c26d20165cb5be37a18a61211d713f8c6d487
35+
a46c05b5ea797f490ac8d5379b1be3278e9d512e
36+
aef892e87feb647658b4dd5a1596018febb54bc4
37+
8354b56569ccd489f6f183154f233b4421899b83
38+
adfa3cc683f488a3adf1b0260b0b447aac6db575
39+
7c5ece45eed87e34b1a138bb2dedddc982d8c8b9
40+
be2d44249d8dae9a8370686c9b44e21cf3e53bf9
41+
5bbef49ef15239fade1d94ea21d542268a781857
42+
4daa6d18aa326da1e70fc488cecec5ff7f66c3cf
43+
a8b368324a9188ca6af687c1fc62f48474ea742d

0 commit comments

Comments
 (0)