Re: Linux Network Layer

Claudio <vecna-YmK/[email protected]> Mon, 31 Jan 2005 17:57:56 +0100
Newsgroups gmane.comp.security.italian.devel
Organization disorganized
Message-ID <20050131175756.230272fa@schlafen>
--===============1017621959==
Content-Type: multipart/signed; protocol="application/pgp-signature";
	micalg="pgp-sha1";
	boundary="Signature=_Mon__31_Jan_2005_17_57_56_+0100_tyLlaH3r7L7OZr.C"

--Signature=_Mon__31_Jan_2005_17_57_56_+0100_tyLlaH3r7L7OZr.C
Content-Type: text/plain; charset=ISO-8859-1
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

Mon, 31 Jan 2005 14:41:23 +0100 "Davide Denicolo"
<davide-o7tR/nIX9VhmatBWbxluYQC/[email protected]>:
> Ciao a tutti!
> Mi son ritrovato a leggere un paio di tutorial sul network layer di
> linux
> [1] http://www.phrack.org/phrack/55/P55-12
> [2] http://www.s0ftpj.org/bfi/online/bfi7/bfi07-08.html
>=20
> Provando ad utilizzare lo stesso procedimento per sostituire i flag
> syn e fin in un pacchetto tcp/ip, ho notato che ( come giusto che sia
> ) modificando questi campi, il checksum del pacchetto "va a quel
> paese" ! Ethereal infatti mi comunica che il checksum del pacchetto
> sia ip che tcp sono errati!!
e` vero, ma e` anche vero che nell'articolo di kossak nel modulo in cui
fanno lo scambio tra fin e syn quello che viene cambiato e` l'header TCP
che non viene controllato -di norma- sui router, probabilmente viene
fatto sui firewall, ma non so neanche se viene scartato, ho visto
firewall forwardare pacchetti con checksum errato risistemandolo loro,
come host che ricevono pacchetti con checksum errato e comunque
stabiliscono la connessione. cio` nonostante, per quanto riguarda
l'articolo 1 quando i pacchetti si trovano a dover andare veramente
sulla rete c'e`:

        /* calculate checksums again... bleh! :P */
        skb->csum =3D 0;
        csum =3D csum_partial(skb->h.raw + doff, size - doff, 0);
        skb->csum =3D csum; /* data checksum */

        th->check =3D 0;
        th->check =3D csum_tcpudp_magic(
                iph->saddr,
                iph->daddr,
                size,
                iph->protocol,
                csum_partial(skb->h.raw, doff, skb->csum)
                ); /* tcp or udp checksum */
        ip_send_check(iph); /* ip checksum */

il calcolo del checksum, su un modulo analogo fatto da me per far
spoofing trasparente -cosa del tutto inutile vista la presenza di SNAT-,
lo trovi qui:

http://mail.nl.linux.org/kernelnewbies/2003-10/msg00237.html

ho usato lo stesso sistema che si usa per ricomputare il checksum dopo
aver fatto NAT.

> Nel tutorial [2], pi=F9 o meno viene fatta la stessa cosa, vengono
> cambiati source e destination!
questo non lo so, freebsd non dovrebbe mettere autonomamente il checksum
in un pacchetto modificato a quel livello, ma sinceramente non ricordo.

> Com'=E8 possibile che gli autori non abbiano gestito il checksum?
> Sar=E0 forse perch=E8 loro hanno compilato su un kernel pi=F9 vecchio che
> prevedeva il fill dei campi restanti?
no l'unico fill dei campi restanti c'e` (o c'era, sui kernel vecchi) in
caso mancasse la setsockopt(IPPROTO_IP, IP_HDRINCL, ecc...) ma dal 2.4
i raw socket sono trattati con piu` sdegno, al punto da trovare righe di
commento come queste:

         /* root is playing with raw sockets. */
        if ((*pskb)->len < sizeof(struct iphdr)
            || (*pskb)->nh.iph->ihl * 4 < sizeof(struct iphdr)) {
                if (net_ratelimit())
                        printk("ipt_hook: happy cracking.\n");
                return NF_ACCEPT;
        }

cioe` senza nemmeno mettere il valore di warn della printk :P=20

ciao,
Claudio/vecna

--=20
0xC2752D4B pgp.mit.edu - http://www.gnupg.org - http://www.s0ftpj.org

--Signature=_Mon__31_Jan_2005_17_57_56_+0100_tyLlaH3r7L7OZr.C
Content-Type: application/pgp-signature

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (GNU/Linux)

iD8DBQFB/mOXqso6AcJ1LUsRAtpHAJ90gVdpkeXa2PjwmLJzzHxgXkRzDwCeMRBz
NzouDv4q2Dde0sJAGf0IhJU=
=iU42
-----END PGP SIGNATURE-----

--Signature=_Mon__31_Jan_2005_17_57_56_+0100_tyLlaH3r7L7OZr.C--

--===============1017621959==
Content-Type: text/plain; charset="iso-8859-1"
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline

________________________________________________________
http://www.sikurezza.org - Italian Security Mailing List
--===============1017621959==--