Newsgroup: it.comp.sicurezza.unix
Titolo: upgrade di ssh

Ho fatto l'upgrade di ssh per il problemaccio saltato fuori
ultimamente (
www.openssh.org
).
Su molti server, tutto e' andato bene:
1) compilato con l'opzione extra
--with-privsep-user=sshd
2) creato l'utente sshd
3) creata la directory /var/empty
4) messo nel file di configurazione l'opzione 
   UsePrivilegeSeparation yes
Riavviato il server, tutto a posto: mi collego tranquillamente.
Su due server, pero', il demone di mette in ascolto, ma, non appena
provo a collegarmi con un client ssh, ottengo (in /var/log/message),
un errore del tipo
sshd[numeroprocesso]: FATAL:mmap[65536] argomento non valido
Che e'?
hola
Buttha
-- 
No more antispam

> sshd[numeroprocesso]: FATAL:mmap[65536] argomento non valido
Non so aiutarti, io, ma uno 'strace sshd -d' forse si :)
Fabio

Non so aiutarti, io, ma uno 'strace sshd -d' forse si :)
Ecco qua:
il client si connette e trasmette il client protocol version:
*****************************************************
write(4, "SSH-2.0-OpenSSH_3.3\n", 20)   = 20
read(4, "S", 1)                         = 1
read(4, "S", 1)                         = 1
read(4, "H", 1)                         = 1
read(4, "-", 1)                         = 1
read(4, "2", 1)                         = 1
read(4, ".", 1)                         = 1
read(4, "0", 1)                         = 1
read(4, "-", 1)                         = 1
read(4, "O", 1)                         = 1
read(4, "p", 1)                         = 1
read(4, "e", 1)                         = 1
read(4, "n", 1)                         = 1
read(4, "S", 1)                         = 1
read(4, "S", 1)                         = 1
read(4, "H", 1)                         = 1
read(4, "_", 1)                         = 1
read(4, "3", 1)                         = 1
read(4, ".", 1)                         = 1
read(4, "3", 1)                         = 1
read(4, "\n", 1)                        = 1
write(2, "debug1: Client protocol version "..., 74debug1: Client
protocol version 2.0; client software version OpenSSH_3.3
) = 74
write(2, "debug1: match: OpenSSH_3.3 pat O"..., 41debug1: match:
OpenSSH_3.3 pat OpenSSH*
) = 41
write(2, "Enabling compatibility mode for "..., 46Enabling
compatibility mode for protocol 2.0
) = 46
write(2, "debug1: Local version string SSH"..., 50debug1: Local
version string SSH-2.0-OpenSSH_3.3
) = 50
fcntl(4, F_SETFL, O_RDONLY|O_NONBLOCK)  = 0
socketpair(PF_UNIX, SOCK_STREAM, 0, [3, 7]) = 0
fcntl(3, F_SETFD, FD_CLOEXEC)           = 0
fcntl(7, F_SETFD, FD_CLOEXEC)           = 0
mmap2(NULL, 65536, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANONYMOUS, -1,
0) = -1 ENOSYS (Function not implemented)
old_mmap(NULL, 65536, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANONYMOUS,
-1, 0) = -1 EINVAL (Invalid argument)
open("/usr/share/locale/locale.alias", O_RDONLY) = 8
fstat(8, {st_mode=S_IFREG|0644, st_size=2265, ...}) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS,
-1, 0) = 0x40015000
read(8, "# Locale name alias data base.\n#"..., 4096) = 2265
read(8, "", 4096)                       = 0
close(8)                                = 0
munmap(0x40015000, 4096)                = 0
open("/usr/share/i18n/locale.alias", O_RDONLY) = -1 ENOENT (No such
file or directory)
open("/usr/share/locale/it_IT/LC_MESSAGES/libc.mo", O_RDONLY) = -1
ENOENT (No such file or directory)
open("/usr/share/locale/it/LC_MESSAGES/libc.mo", O_RDONLY) = 8
fstat(8, {st_mode=S_IFREG|0644, st_size=89406, ...}) = 0
old_mmap(NULL, 89406, PROT_READ, MAP_PRIVATE, 8, 0) = 0x4022f000
close(8)                                = 0
write(2, "mmap(65536): Argomento non valid"..., 35mmap(65536):
Argomento non valido
) = 35
write(2, "debug1: Calling cleanup 0x806806"..., 40debug1: Calling
cleanup 0x8068068(0x0)
) = 40
shutdown(4, 2 /* send and receive */)   = 0
close(4)                                = 0
_exit(255)                              = ?
*****************************************************
A quanto pare, le righe incriminate sono:
mmap2(NULL, 65536, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANONYMOUS, -1,
0) = -1 ENOSYS (Function not implemented)
old_mmap(NULL, 65536, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANONYMOUS,
-1, 0) = -1 EINVAL (Invalid argument)
cioe' viene fatta una chiamata a mmap2 che non e' implementata.
Allora viene chiamata mmap con un argomento (65536) che evidentemente
non gradisce.
Mah.


 [snip]
Ho trovato il pezzo di codice:
e' in monitor_mm.c
#if  defined(HAVE_MMAP) && defined(MAP_ANON)
        address = mmap(NULL, size, PROT_WRITE|PROT_READ,
MAP_ANON|MAP_SHARED,
            -1, 0);
        if (address == MAP_FAILED)
                fatal("mmap(%lu): %s", (u_long)size, strerror(errno));
#else
        fatal("%s: UsePrivilegeSeparation=yes not supported",
            __func__);
#endif
a questo punto dovrei dire, in 
config.h.in
:
/* Define to 1 if you have the `mmap' function. */
#undef HAVE_MMAP
che non ho mmap, ma guardando il codice quello che succederebbe
sarebbe:
        fatal("%s: UsePrivilegeSeparation=yes not supported",
E quindi sono al punto di partenza:
un demone ssh senza Privilege Separation...


 un demone ssh senza Privilege Separation...
:(
A giudicare dal pezzo di codice che hai postato e dal risultato
dello strace sembra che ci sia poco da fare, ma siamo ai limiti
estremi delle mie misere capacita'(gia' non sento piu' il fondo
sotto i piedi). Per curiosita': hai lo stesso kernel su tutti i
server? Se no, quali kernel non supportano la chiamata a mmap2?
Ho letto che alcuni pacchetti di openssh3.3 precompilati non si
installano sui kernel 2.2 e precedenti: sara' questo il motivo?
Io ho solo macchine 2.4, ormai, e non ho potuto fare prove. Ho,
pero', dato un'occhiata ai sorgenti del 2.2.18 e non trovato un
riferimento a mmap2.
Fabio
PS: un oretta fa e' uscito su bugtraq l'advisory di ISS. Basta,
    a quanto pare, disabilitare l'auth challenge-response.

installano sui kernel 2.2 e precedenti: sara' questo il motivo?
openssh l'ho installato dai sorgenti.
Faro' qualche altra ricerca in merito.
hola


 kernel 2.2.* sono quelli che non funzionano.
Ma non c'era una patch per i kernel 2.2?!? Mi pareva di aver letto 
qualche cosa... si... sono abbastanza sicuro che ci fosse una patch da 
installare... bisognerebbe rileggere l'advisory...
-- 
don't feed the troll
partecipa anche tu all'iniziativa:
"il primo fanculo ? quello che conta"
killa in silenzio, vivi felice

            -1, 0);
È ben noto che i kernel 2.2 non implementano gli shared anon mappings.
-- 
ciao, | The Internet is full. Go away.  -- Joel Furr      | #156856496
Marco | (Ri)scoprire fidonet: 
http://bbs.bofh.it
          | 
m...@jabber.linux.it

È ben noto che i kernel 2.2 non implementano gli shared anon mappings.
A questo punto non utilizzo il privilege separation dato che non
utilizzo ChallengeResponseAuthentication.
Poi, con calma, mi cerchero' la patch per i 2.2.* per supportare il
meccanismo.


 openssh l'ho installato dai sorgenti.
Ok, l'avevo capito :) Quello che intendevo e' che le distribuzioni
pacchettizate precompilate hanno come dipendenza il kernel 2.4, ed
il motivo, quasi sicuramente, e' per il mancato supporto di mmap2,
come conferma marco d'itri. Un post di solar designer, su bugtraq,
parla di una patch per kernel 2.2 che dovrebbe consentire di usare
i privilege separation ma non ho capito se sara' parte di openwall
(come probabile) o se potra' essere usata da sola.
Fabio