Firewall Wizards mailing list archives
Re: Firewall-Wizards Digest V1 #311
From: Ivan Arce <ivan () core-sdi com>
Date: Mon, 07 Jun 1999 16:54:39 -0300
hm im resending this to the list, as im not sure that my previous reply made it to it. Ryan Russell wrote:
Why not simply check the data field for the SR tag? A real proxy should be unable to forward traffic (source routed or not) without proxy intervention.Those types of things get stripped off before the daemon gets the data, no? Doesn't all the interesting info below layer 4 get "eaten" by the OS by the time an app using sockets gets it?FW-1 doesn't do it..Actually, it does. It has dropped SR by default since 2.1b or so. I remember having to apply the patch. ;)Sorry, I stand corrected. Ryan
That is not accurate, if a minimun amount of care is taken while
coding the proxies, connections with source routing can be shut down
at the application level (as an addition to the OS configration settings).
For example, in OpenBSD:
$ sysctl -a net.inet.ip.sourceroute
net.inet.ip.sourceroute = 0
BUT STILL, OpenBSD's named does:
if (getsockopt(rfd, IPPROTO_IP, IP_OPTIONS,
(char *)&ip_opts, &len) < 0) {
syslog(LOG_INFO,
"getsockopt(rfd, IP_OPTIONS): %m");
(void) my_close(rfd);
continue;
}
if (len != 0) {
int i;
nameserIncr(from_addr.sin_addr, nssRcvdOpts);
/* any socket with an LSRR or SSRR option
* must be killed immediately or it can be
* tcp sequenced */
for (i = 0; (void *)&ip_opts.ipopt_list[i] -
(void *)&ip_opts < len && rfd != -1; ) {
u_char c = (u_char)ip_opts.ipopt_list[i];
if (c == IPOPT_LSRR || c == IPOPT_SSRR) {
my_close(rfd);
rfd = -1;
break;
}
if (c == IPOPT_EOL)
break;
i += (c == IPOPT_NOP) ? 1 :
(u_char)ip_opts.ipopt_list[i+1];
}
if (!haveComplained((char*)
from_addr.sin_addr.s_addr,
"rcvd ip options")) {
syslog(LOG_INFO,
"rcvd IP_OPTIONS from [%s].%d (ignored)",
inet_ntoa(from_addr.sin_addr),
ntohs(from_addr.sin_port));
}
if (rfd == -1) /* LSRR or SSRR killed it */
continue;
if (setsockopt(rfd, IPPROTO_IP, IP_OPTIONS,
NULL, 0) < 0) {
syslog(LOG_INFO,
"setsockopt(!IP_OPTIONS): %m");
(void) my_close(rfd);
continue;
}
}
Note that IP_OPTIONS are shaved off the socket UNLESS they are LSRR or
SSRR, this is the correct behaviour (IMHO) as oppossed to several daemons
and proxies that do take into account ip options but just shave them off
and continue.
The named behaviour in OpenBSD WRT source routing can be explained
reading:
http://www.nai.com/products/security/advisory/07_tcpspoofing_adv.asp
It is quite amazing that this advisory is MORE THAN 2 YEARS OLD and
apparently application proxy developers are not aware of its
implications.
--
--
--------------------------------------------------------------------------------------------
Iván Arce <ivan () core-sdi com>
Presidente
CORE SDI S.A.
Pte. Juan D. Peron 315 4to UF17 (1394) Buenos Aires, Argentina.
TE/FAX: +54-11-43-31-54-02 +54-11-43-31-54-09
--------------------------------------------------------------------------------------------
Current thread:
- Re: Firewall-Wizards Digest V1 #311 Sandy Green (Jun 01)
- Re: Firewall-Wizards Digest V1 #311 Matt Curtin (Jun 01)
- Re: Firewall-Wizards Digest V1 #311 Carric Dooley (Jun 03)
- <Possible follow-ups>
- Re: Firewall-Wizards Digest V1 #311 Ryan Russell (Jun 03)
- Re: Firewall-Wizards Digest V1 #311 Chris Brenton (Jun 03)
- Re: Firewall-Wizards Digest V1 #311 Kevin Steves (Jun 14)
- Re: Firewall-Wizards Digest V1 #311 dreamwvr (Jun 03)
- Re: Firewall-Wizards Digest V1 #311 Chris Brenton (Jun 03)
- Re: Firewall-Wizards Digest V1 #311 Ryan Russell (Jun 03)
- Re: Firewall-Wizards Digest V1 #311 Ivan Arce (Jun 14)
- Re: Firewall-Wizards Digest V1 #311 Kevin Steves (Jun 14)
- Re: Firewall-Wizards Digest V1 #311 Matt Curtin (Jun 01)
