[comp.protocols.tcp-ip.domains] PTR records of gateways on the Internet

7thson@slcs.slb.com (Chris Garrigues) (01/10/91)

I was recently trying to map out some of the internet.  I was doing this
by identifying the IP address of gateways with low TTL pings and looking
at the from address of the returning TTL-exceeded packets.  I then tried
to use IN-ADDR.ARPA reverse mappings to map these into names and from
there, I tried to find the other interfaces of the gateways by finding
the A records for those names.

Needless to say, in the process, I discovered that some administrators
appear to have rather bizzare ideas of how to set up these records.

a) I found PTR records that pointed to names that weren't in the DNS.

b) I found PTR records that pointed to names that mapped back to
different addresses.

c) Many of these addresses mapped into names which only had one address.
This either means that no entry was made for the other name or the two
names are entirely unlinked.

Does anybody besides me think that a RFC that clarified what a domain
administrator MAY, SHOULD, and MUST do would be useful to point at when
stumbling over things like these.  Examples might be:

    The name referenced by a PTR record MUST have an A record containing the
    address corresponding to the PTR record.
    
    If a host or gateways has multiple addresses, these addresses SHOULD
    have PTR records pointing either to the same name OR to names with CNAME
    records pointing to a common name.


Chris Garrigues,
Schlumberger Laboratory for Computer Science

ckd@cs.bu.edu (Christopher Davis) (01/10/91)

Chris> == 7thson@slcs.slb.com (Chris Garrigues) writes:

Chris> I was recently trying to map out some of the internet. [...]

Chris> a) I found PTR records that pointed to names that weren't in the DNS.

Chris> b) I found PTR records that pointed to names that mapped back to
Chris> different addresses.

And one of the big offenders here?  The NSFNET NSSes!

Chris> c) Many of these addresses mapped into names which only had one address.
Chris> This either means that no entry was made for the other name or the two
Chris> names are entirely unlinked.

And, once again, the biggest offender?  *.NSS.NSF.NET!

How to you expect the regionals and campus networks to get this right
when the folks who pass the long haul stuff don't seem to be bothering?

(No, Chris, I'm not berating you.  I'm displeased with these results too.)
--
   [ Christopher Davis - <ckd@cs.bu.edu> - <..!bu.edu!cs.bu.edu!ckd> ]
    A message destined for delivery in *your* domain is fair game for
  anything you may want to do, up to and including translating the entire
 message, header and all, into Swahili. -- chip@tct.uucp (Chip Salzenberg)

rickert@mp.cs.niu.edu (Neil Rickert) (01/10/91)

In article <1991Jan9.195641.17628@slcs.slb.com> 7thson@slcs.slb.com (Chris Garrigues) writes:
>(...)
>Needless to say, in the process, I discovered that some administrators
>appear to have rather bizzare ideas of how to set up these records.
>
>a) I found PTR records that pointed to names that weren't in the DNS.
>
 What, if anything, is wrong with that?  If a system makes outbound
telnet/ftp etc connections, good Internet manners requires that the
system identify itself.  If the same system refuses all inbound connections
there is no reason for it to have an A-record.  Indeed such a record might
even be undesirable.  Perhaps a case could be made that it should have
an HINFO record.  Or perhaps it should have a CNAME record identifying
a system whose administrator manages the indicated system.

 For example what do you do with a PC which is not always turned on, which
is not running TCP software except when making outbound calls.

 Or what do you do with 'dial SL/IP' where different hosts can share
a common Internet address?

>b) I found PTR records that pointed to names that mapped back to
>different addresses.

 This is exactly what you would expect in the suggested example above
if the name on the PTR were a CNAME for another system with the same
administrator.

>c) Many of these addresses mapped into names which only had one address.
>This either means that no entry was made for the other name or the two
>names are entirely unlinked.

 Perhaps they are administratively linked.

 You might start by looking at an example I brought up (with no satisfactory
response) in the bind mailing list.  Specifically the samples that come
with the bind software suggest you use a PTR to map 127.0.0.1 to
'localhost', and that you have an A-record mapping 'localhost.your.domain'
to '127.0.0.1'.  Isn't this the type of inconsistency you are complaining
about?

>Does anybody besides me think that a RFC that clarified what a domain
>administrator MAY, SHOULD, and MUST do would be useful to point at when
>stumbling over things like these.  Examples might be:
>
 While I agree some clarification is needed, it cannot be a precise as you
would like.  The Internet has evolved in ways probably not envisioned
when 'bind' was designed.

 Personally I am much more troubled by the cases where the different name
servers for a domain have mutually inconsistent data - presumably reflecting
an intermural dispute within the domain. (In at least one case I know this
is not just a matter of delayed updating, unless the TTLs are 1 year or
more).

-- 
=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
  Neil W. Rickert, Computer Science               <rickert@cs.niu.edu>
  Northern Illinois Univ.
  DeKalb, IL 60115                                   +1-815-753-6940

kwe@bu-it.bu.edu (Kent England) (01/11/91)

In article <CKD.91Jan9220223@bucsd.bu.edu>,
 ckd@cs.bu.edu (Christopher Davis) writes:
> 
> Chris> b) I found PTR records that pointed to names that mapped back to
> Chris> different addresses.
> 
> And one of the big offenders here?  The NSFNET NSSes!
> 
> How to you expect the regionals and campus networks to get this right
> when the folks who pass the long haul stuff don't seem to be bothering?
> 
	One of the nicest features of the inverse mapping of the
backbone IP addresses is that traceroute will give you a nice name for
the NSS interface as you traverse the Internet.  You will be able to
figure out where your path goes.  It is an excellent argument for
having intelligible gateway interface names throughout the Internet.

	For those who run the backbone, one of the nicest features of
the lack of an A record for that name is that there is less likelihood
that people will pour pings, telnet, ftp, and mail messages at the
gateways.  They still can, but it must be to an IP address and not a
name.

	All in all a nice compromise, in my opinion.

	--Kent

ckd@cs.bu.edu (Christopher Davis) (01/11/91)

 Kent> == Kent England <kwe@bu-it.bu.edu> 

 Kent> 	One of the nicest features of the inverse mapping of the
 Kent> backbone IP addresses is that traceroute will give you a nice
 Kent> name for the NSS interface as you traverse the Internet.  You
 Kent> will be able to figure out where your path goes.  It is an
 Kent> excellent argument for having intelligible gateway interface
 Kent> names throughout the Internet.

 Kent> 	For those who run the backbone, one of the nicest features of
 Kent> the lack of an A record for that name is that there is less
 Kent> likelihood that people will pour pings, telnet, ftp, and mail
 Kent> messages at the gateways.  They still can, but it must be to an
 Kent> IP address and not a name.

 Kent> 	All in all a nice compromise, in my opinion.

Except that (1) SunOS 4.1's gethostbyaddr wants an A record for added
security against DNS spoofing (admirable, but non-optimal when you just
want whatever PTRs are out there...), and (2) there ARE A records out
there, for the other interfaces.  Example:

; <<>> DiG 2.0 <<>> Ann_Arbor.MI.NSS.NSF.NET 
;; [...]
;;	Ann_Arbor.MI.NSS.NSF.NET, type = A, class = IN

;; ANSWERS:
Ann_Arbor.MI.NSS.NSF.NET.	14400	A	35.1.1.50

but...

; <<>> DiG 2.0 <<>> -x 
;; [...]
;;	8.81.140.129.in-addr.arpa, type = ANY, class = IN

;; ANSWERS:
8.81.140.129.in-addr.arpa.	9726	PTR	Ann_Arbor.MI.NSS.NSF.NET.
[...]

In other words, neither half of the compromise is being served.  The NSF
isn't "secured" from people pounding on the NSSes, and I don't get
symbolic names from traceroute without compiling with a different
-lresolv (read: not Sun's).

I'm not sure both sides *can* be served given the situation, but "They"
should definitely choose one or the other...

(Aside: doing a PTR lookup on the A record returned for
"Ann_Arbor.MI.NSS.NSF.NET" gets me... "nss17.merit.edu".  Consistency in
the backbone does not seem to be a particular priority...
--
   [ Christopher Davis - <ckd@cs.bu.edu> - <..!bu.edu!cs.bu.edu!ckd> ]
    A message destined for delivery in *your* domain is fair game for
  anything you may want to do, up to and including translating the entire
 message, header and all, into Swahili. -- chip@tct.uucp (Chip Salzenberg)

lars@spectrum.CMC.COM (Lars Poulsen) (01/11/91)

In article <1991Jan9.195641.17628@slcs.slb.com> 7thson@slcs.slb.com (Chris Garrigues) writes:
Chris> I discovered that some administrators appear to have rather
Chris> bizzare ideas of how to set up [DNS in-addr.arpa PTR] records.

I, too, have been bothered by these. And I, too, have found *.NSF.NET
to be a major violator.

Chris> a) I found PTR records that pointed to names that weren't in the DNS.

In article <1991Jan10.051543.8831@mp.cs.niu.edu> rickert@mp.cs.niu.edu
   (Neil Rickert) writes:
Neil>  What, if anything, is wrong with that?
Neil>  If a system makes outbound telnet/ftp etc connections, good 
Neil>  Internet manners requires that the system identify itself.
Neil>  If the same system refuses all inbound connections there 
Neil>  is no reason for it to have an A-record.
Neil>  Indeed such a record might even be undesirable.

All systems have some form of outgoing traffic. Even a "dumb router"
will send ICMP messages. It is important for network troubleshooting to
be able to identify the origin of this traffic.

Suppose I find that one of my users complains that he cannot get mail
to "friend@foo-bar.com". One of the first steps in problem determination
will be a traceroute:

traceroute to foo-bar.com (123.246.0.159), 30 hops max, 38 byte packets
 1  hinge.cmc.com (131.143.18.97)  0 ms  0 ms  0 ms
 2  local.gateway.net (131.143.18.98)  60 ms  60 ms  60 ms
 3  128.111.253.10 (128.111.253.10)  60 ms  60 ms  40 ms
 4  ucla-ucsb.cerf.net (134.24.107.104)  60 ms  80 ms  80 ms
 5  sdsc-ucla.cerf.net (134.24.101.100)  100 ms  80 ms  100 ms
 6  nss.sdsc.edu (132.249.16.10)  80 ms  180 ms  100 ms
 7  129.140.75.6 (129.140.75.6)  140 ms  300 ms  140 ms
 8  129.140.73.11 (129.140.73.11)  180 ms  180 ms  200 ms
 9  129.140.72.9 (129.140.72.9)  260 ms  240 ms  260 ms
10  * * *
11  * * *
12  * * *
13  * * *

At this point, I will be VERY interested in knowing where 129.140.72.9
is located, and who might be operating it. As it happens, there is in
fact a PTR record for it,
	Name: Princeton.NJ.NSS.NSF.NET
	Address: 129.140.72.9
			  and if I know this, I can take steps to
contact the NSFnet N.O.C. to find out more.

Neil>  Perhaps a case could be made that it should have an HINFO record. 

It will not help me much to know that the IP address belongs to a CISCO
AGS/2 running software revision 8.1(2) ??

Neil>  Or perhaps it should have a CNAME record identifying
Neil>  a system whose administrator manages the indicated system.

It would in fact be helpful if we defined a HADMIN RR yielding a mailbox
for the host administrator. The current DNS does not, however, provide
such an RR. And the name returned by a *.IN_ADDR PTR RR should always be
the canonical name.

Neil>   For example what do you do with a PC which is not always turned on,
Neil>   which is not running TCP software except when making outbound calls.

Even a system which is not always available, generally has an identity.

Neil>   Or what do you do with 'dial SL/IP' where different hosts can share
Neil>  a common Internet address?

This is a legitimate problem. But such hosts are typically end nodes,
not intermediate systems. The best solution would probably be to have
the PTR yield a name such as "PORT-15.SLIP-GW-2.FOO.BAZ".

Chris> b) I found PTR records that pointed to names that mapped back to
Chris> different addresses.

And indeed, this is the case with the above example, and that is why
TRACEROUTE is unable to resolve the name:

    princeton.nj.nss.nsf.net	13265 IN	A	128.121.54.1

There is code in (at least Sun's) "gethostbyaddr()" to trap this type
of data inconsistency and produce a syslog message:

    syslog: gethostbyaddr: Princeton.NJ.NSS.NSF.NET != 129.140.72.9

Obviously the implementors of gethostbyname() believed this to be
illegal.

Chris> c) Many of these addresses mapped into names which only had one address.
Chris> This either means that no entry was made for the other name or the two
Chris> names are entirely unlinked.

I think this is true for ALL the *.NSS.NSF.NET routers.

Neil>  the samples that come with the bind software suggest you use a PTR
Neil>  to map 127.0.0.1 to 'localhost', and that you have an A-record
Neil>  mapping 'localhost.your.domain' to '127.0.0.1'.
Neil>  Isn't this the type of inconsistency you are complaining about?

In fact his is entirely consistent. 127.0.0.1 -> localhost.my.domain;
localhost.my.domain -> 127.0.0.1

Chris> Does anybody besides me think that a RFC that clarified what a domain
Chris> administrator MAY, SHOULD, and MUST do would be useful to point at when
Chris> stumbling over things like these.

RFC-1033 (Nov-87) "Domain Operations Guide" already covers this. Quoth:

[page 11] "Adding a host ...
		Add an entry for EACH address of the host ...
		Add the reverse IN-ADDR entry for each host address in
		the appropriate zone files for each network the host is
		on."

[and] "Adding gateways.
		Follow instructions for adding a host.
		Add the gateway location PTR records for each network
		the gateway is on."

This RFC is remarkably clear, and is remarkably overlooked. Let me quote
from page 12:

RFC> COMPLAINTS
RFC> 
RFC>    These are the suggested steps you should take if you are having
RFC>    problems that you believe are caused by someone else's name server:
RFC> 
RFC> 
RFC>    1.  Complain privately to the responsible person for the domain.
RFC>    You can find their mailing address in the SOA record for the
RFC>    domain.
RFC> 
RFC>    2.  Complain publicly to the responsible person for the domain.
RFC> 
RFC>    3.  Ask the NIC for the administrative person responsible for the
RFC>    domain.  Complain.  You can also find domain contacts on the NIC in
RFC>    the file NETINFO:DOMAIN-CONTACTS.TXT
RFC> 
RFC>    4.  Complain to the parent domain authorities.
RFC> 
RFC>    5.  Ask the parent authorities to excommunicate the domain.

I guess we are now at step 2 :-) :-)
I see little chance of succeeding with step 5 !!
-- 
/ Lars Poulsen, SMTS Software Engineer
  CMC Rockwell  lars@CMC.COM

rickert@mp.cs.niu.edu (Neil Rickert) (01/11/91)

In article <1991Jan10.230440.25431@spectrum.CMC.COM> lars@spectrum.CMC.COM (Lars Poulsen) writes:
>
>All systems have some form of outgoing traffic. Even a "dumb router"
>will send ICMP messages. It is important for network troubleshooting to
>be able to identify the origin of this traffic.
>
 This is why it is appropriate to have PTR records, even when it is not
appropriate to have A records mapping the name back to the address.

>And indeed, this is the case with the above example, and that is why
>TRACEROUTE is unable to resolve the name:
>
>    princeton.nj.nss.nsf.net	13265 IN	A	128.121.54.1
>
>There is code in (at least Sun's) "gethostbyaddr()" to trap this type
>of data inconsistency and produce a syslog message:

 Just because Sun's 'gethostbyaddr()' is broken, there is no reason to
complain about the way domains are set up.

>Obviously the implementors of gethostbyname() believed this to be
>illegal.
>
 The public BSD sources do not have this defect.

 The DNS is a directory service, not an authentication service.  The
extra checking you describe in Sun gethostbyname() is an attempt to use
it as an authentication service.  This is WRONG behavior for
gethostbyaddr().  It may make sense to add this type of authentication
to some specific uses (say in rlogind, when checking hosts.equiv).  But
it does not make sense in general.

 To use an admittely imperfect analogy, just because I announce who I am
when I initiate a telephone call, this does not mean I may not have an
unlisted number.

>Neil>  the samples that come with the bind software suggest you use a PTR
>Neil>  to map 127.0.0.1 to 'localhost', and that you have an A-record
>Neil>  mapping 'localhost.your.domain' to '127.0.0.1'.
>Neil>  Isn't this the type of inconsistency you are complaining about?
>
>In fact his is entirely consistent. 127.0.0.1 -> localhost.my.domain;
>localhost.my.domain -> 127.0.0.1
>
 Look again at the samples.  They mostly map 127.0.0.1 to 'localhost',
and NOT to 'localhost.your.domain', and for good reason.


-- 
=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
  Neil W. Rickert, Computer Science               <rickert@cs.niu.edu>
  Northern Illinois Univ.
  DeKalb, IL 60115                                   +1-815-753-6940

mdb@ESD.3Com.COM (Mark D. Baushke) (01/11/91)

On 10 Jan 91 20:38:58 GMT, ckd@cs.bu.edu (Christopher Davis) said:

[...]
ckd> ;; ANSWERS:
ckd> Ann_Arbor.MI.NSS.NSF.NET.	14400	A	35.1.1.50
[...]
ckd> ;; ANSWERS:
ckd> 8.81.140.129.in-addr.arpa.	9726	PTR	Ann_Arbor.MI.NSS.NSF.NET.
[...]

Very interesting... I do not believe that any of the RFCs have
extended the name syntax to allow an underscore (_) character in a
name. I know that RFC 1123 section 2.1 allowed such names to begin
with a digit (so 3Com.COM became legal), but I believe that the name
Ann_Arbor.MI.NSS.NSF.NET voilates the syntax in the RFCs.

As far as I know, RFC 952 together with the relaxation in RFC 1123 say
that a "name" is a text string drawn from the alphabet (A-Za-z),
digits (0-9), minus sign (-), and period (.).

It looks to me like the NSSes have more than one problem with their entries.

	-- Mark
	mdb@ESD.3Com.COM

ejm@ejmmips.NOC.Vitalink.COM (Erik J. Murrey) (01/12/91)

In article <CKD.91Jan10153858@bucsd.bu.edu>, ckd@cs.bu.edu (Christopher
Davis) writes:

> Except that (1) SunOS 4.1's gethostbyaddr wants an A record for added
> security against DNS spoofing (admirable, but non-optimal when you just
> want whatever PTRs are out there...), and (2) there ARE A records out
> there, for the other interfaces.  Example:
> 

I think this may be overkill on  the part of Sun.  I agree that for
semi-secure applications, a reverse check is necessary to insure that
the DNS admins aren't faking host names.  (i.e. the rexec and
rcmdservices + rlogin benifiit from this check)

However, for other applications such as mail, finger, traceroute, etc,
this double-check is unecessary.  Sun should have done more research
into the impact of this unexpected change before shipping it with a
major release of software.

----
Erik Murrey
Vitalink Communications NOC
ejm@NOC.Vitalink.COM,  uunet!vitam6!noc.vitalink.com!ejm

medin@nsipo.arc.nasa.gov (Milo S. Medin) (01/13/91)

In article <1991Jan11.004226.24988@mp.cs.niu.edu> rickert@mp.cs.niu.edu (Neil Rickert) writes:

>>
>>TRACEROUTE is unable to resolve the name:
>>
>>    princeton.nj.nss.nsf.net	13265 IN	A	128.121.54.1
>>
>>There is code in (at least Sun's) "gethostbyaddr()" to trap this type
>>of data inconsistency and produce a syslog message:
>
> Just because Sun's 'gethostbyaddr()' is broken, there is no reason to
>complain about the way domains are set up.
>
>>Obviously the implementors of gethostbyname() believed this to be
>>illegal.
>>
> The public BSD sources do not have this defect.
>
> The DNS is a directory service, not an authentication service.  The

This is not broken, nor is it a defect, and nor is it limited to SUN's.  We
at Ames came up with this mod to the resolver code after having been burned 
by internet DNS spoofing.  If your resolver doesn't have this capability,
your site is open to a lot of security problems.  We have BSD systems here
which had the mod made to the resolver and had network utilities rebuilt.  


We turned this bug into Sun, and posted it on comp.bugs.4bsd.  Many sites use
this since they consider security marginally important.  If you don't, that's
fine, and more power to you, but don't berate the efforts of a vendor who is
concerned with improving the state of security.  If you don't like it, 
then rebuild the resolver library from BSD source (available from a
number of places), and install a new shared library.  You can convienently 
rewrite some of the other troublesome features (like wasting time doing a 
gethostbyaddr on inbound login connections, maybe get rid of all utmp 
host information) at the same time!  How about just having gethostbyname 
return a hardwired answer like not-me.yourdomain.edu. ?  This way you
wouldn't have to wait for that pesky DNS to figure out where you are logging
in from to timeout when you botch the DNS configuration!  What a plus!
After all, not all sites require knowing where people log in from.  Why should
everyone have to put up with these silly delays because a few paranoids out
there worry all the time!

>extra checking you describe in Sun gethostbyname() is an attempt to use
>it as an authentication service.  This is WRONG behavior for
>gethostbyaddr().  It may make sense to add this type of authentication
>to some specific uses (say in rlogind, when checking hosts.equiv).  But
>it does not make sense in general.
>

Bull.  The DNS system is a distributed database.  Are you saying that you
don't care how valid the information is as long as it tells you something??
If you can tell someone has misconfigured things or is trying to spoof your 
system, that's pretty useful info for me.  

As for using it in only things that require .rhosts type of files, well, I'm
sure you'd be rather annoyed when someone breaks into your machine from the
Internet and spoofs the PTR information so that when you try and contact
the system admin. of the host that connected to you, you get nowhere.  Ah, but
then you don't care about security!  I'm sorry I forgot...  If the info is
wrong, it shouldn't be shoved into utmp.  

I can't believe all this garbage blaming the resolver code!!!  If you
have a problem with the NSS's not doing this, call MERIT and complain.  I notice
most other people seem to get this right.  Don't blame the resolver for doing
the right thing.  If this REALLY annoys you, why not just relink traceroute
with the straight BSD resolver?  Sigh...


							Thanks,
							   Milo


PS Usual disclaimers apply...

rickert@mp.cs.niu.edu (Neil Rickert) (01/13/91)

In article <1991Jan13.054040.21009@riacs.edu> medin@cincsac.arc.nasa.gov (Milo S. Medin) writes:
>
>Bull.  The DNS system is a distributed database.  Are you saying that you
>don't care how valid the information is as long as it tells you something??
>If you can tell someone has misconfigured things or is trying to spoof your 
>system, that's pretty useful info for me.  
>
 I am not saying this.  I am saying that when you have a distributed database
with widely distributed control, you can NEVER guarantee that the data is
valid or consistent.  But just because there may be invalid data, that is no
reason to break your software so that it can't even read the data.  Put
your consistency checks in those few packages (rlogind, etc) that need it.
And don't assume that even these consistency checks guarantee security.
Real security would require rlogind and other such software to limit access
to a prescribed set of networks or subnets which are known to be well
managed and secure.  If this were done the PTR record spoofing would become
unimportant.

>As for using it in only things that require .rhosts type of files, well, I'm
>sure you'd be rather annoyed when someone breaks into your machine from the
>Internet and spoofs the PTR information so that when you try and contact
>the system admin. of the host that connected to you, you get nowhere.  Ah, but

 If someone spoofs the PTR info, what makes you think the sysadmin would
be helpful anyway.  Either the whole domain isn't administered, or the 
admin is involved, if the DNS records are incorrect.  If this security
checking is done in rlogind, rather than gethostbyaddr() you still can
be just as effective in reducing the security exposures.  If someone can
break in with telnet, they can probably break in with a telephone and a
modem.

>I can't believe all this garbage blaming the resolver code!!!  If you
>have a problem with the NSS's not doing this, call MERIT and complain.  I notice
>most other people seem to get this right.  Don't blame the resolver for doing
>the right thing.  If this REALLY annoys you, why not just relink traceroute
>with the straight BSD resolver?  Sigh...

 This subject line started with a complaint that there are PTR records for
which the corresponding A-records do not exist.  The point is this:  It
would be possible to set standards requiring that where a PTR record exists
the corresping A record must also exist.  The net effect will be the removal
of many PTR records from the DNS, and this will be a net loss of information.
If this removal of PTR records is what you want, you have no reason to
complain for your modified gethostbyaddr() is effectively removing these PTR
records anyway.
 You may think your complaint will get you back the info, but at best it will
cause the rest of the Internet to also lose the information.  If administrators
don't want to advertise an A-record for whatever reason, they won't.  They
place the PTR records there to give some additional identification information,
but can quite easily remove them if push comes to shove.

-- 
=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
  Neil W. Rickert, Computer Science               <rickert@cs.niu.edu>
  Northern Illinois Univ.
  DeKalb, IL 60115                                   +1-815-753-6940

thorinn@DIKU.DK (Lars Henrik Mathiesen) (01/14/91)

   From: medin@nsipo.arc.nasa.gov  (Milo S. Medin)

   rickert@mp.cs.niu.edu (Neil Rickert) writes:
   > Just because Sun's 'gethostbyaddr()' is broken, there is no reason to
   >complain about the way domains are set up.
   >
   > The public BSD sources do not have this defect.

   This is not broken, nor is it a defect, and nor is it limited to SUN's.  We
   at Ames came up with this mod to the resolver code after having been burned 
   by internet DNS spoofing.  If your resolver doesn't have this capability,
   your site is open to a lot of security problems.

Any system with the original BSD resolver library has this capability:
Follow the gethostbyaddr with a gethostbyname and check if the
original address appears in the address list. Sun and Ames evidently
didn't want to spend the time needed to change the programs needing
this (very weak) authentication, and implemented it in gethostbyaddr
instead. Berkeley implemented it in the network daemons with the tahoe
release (at least Mt. Xinu did in their version; it's 26 lines of
boilerplate code in each program).

Now Ames are free to decide if they want to live with the consequences
of making gethostbyaddr ``safe'', but for Sun it is a clear case of
lessened utility: There is now no library routine that will give the
name of a host regardless of A records. Since there are programs that
make good use of precisely such a routine, users of such programs are
entitled to complain about Sun's move.

I'm not saying that Sun shouldn't have put in the check, but that it
was a bad place to put it. By the way, I think the article that Milo
came down so hard on said much the same.

--
Lars Mathiesen, DIKU, U of Copenhagen, Denmark      [uunet!]mcsun!diku!thorinn
Institute of Datalogy -- we're scientists, not engineers.      thorinn@diku.dk



   We turned this bug into Sun, and posted it on comp.bugs.4bsd.  Many sites use
   this since they consider security marginally important.  If you don't, that's
   fine, and more power to you, but don't berate the efforts of a vendor who is
   concerned with improving the state of security.  If you don't like it, 
   then rebuild the resolver library from BSD source (available from a
   number of places), and install a new shared library.  You can convienently 
   rewrite some of the other troublesome features (like wasting time doing a 
   gethostbyaddr on inbound login connections, maybe get rid of all utmp 
   host information) at the same time!  How about just having gethostbyname 
   return a hardwired answer like not-me.yourdomain.edu. ?  This way you
   wouldn't have to wait for that pesky DNS to figure out where you are logging
   in from to timeout when you botch the DNS configuration!  What a plus!
   After all, not all sites require knowing where people log in from.  Why should
   everyone have to put up with these silly delays because a few paranoids out
   there worry all the time!

   >extra checking you describe in Sun gethostbyname() is an attempt to use
   >it as an authentication service.  This is WRONG behavior for
   >gethostbyaddr().  It may make sense to add this type of authentication
   >to some specific uses (say in rlogind, when checking hosts.equiv).  But
   >it does not make sense in general.
   >

   Bull.  The DNS system is a distributed database.  Are you saying that you
   don't care how valid the information is as long as it tells you something??
   If you can tell someone has misconfigured things or is trying to spoof your 
   system, that's pretty useful info for me.  

   As for using it in only things that require .rhosts type of files, well, I'm
   sure you'd be rather annoyed when someone breaks into your machine from the
   Internet and spoofs the PTR information so that when you try and contact
   the system admin. of the host that connected to you, you get nowhere.  Ah, but
   then you don't care about security!  I'm sorry I forgot...  If the info is
   wrong, it shouldn't be shoved into utmp.  

   I can't believe all this garbage blaming the resolver code!!!  If you
   have a problem with the NSS's not doing this, call MERIT and complain.  I notice
   most other people seem to get this right.  Don't blame the resolver for doing
   the right thing.  If this REALLY annoys you, why not just relink traceroute
   with the straight BSD resolver?  Sigh...


							   Thanks,
							      Milo


   PS Usual disclaimers apply...

huntting@csn.org (01/14/91)

7thson@slcs.slb.com (Chris Garrigues) writes:

>    If a host or gateways has multiple addresses, these addresses SHOULD
>    have PTR records pointing either to the same name OR to names with CNAME
>    records pointing to a common name.

Wait a sec...  Are you advocating the following:

glarp.x.		in	a	128.1.1.1
glarp.x.		in	a	128.1.2.2

glarp-intf1.x.		in	cname	glarp.x.
glarp-intf2.x.		in	cname	glarp.x.

1.1.1.128.in-addr.arpa.	in	ptr	glarp-intf1.x.
2.2.1.128.in-addr.arpa.	in	ptr	glarp-intf2.x.

My understanding was that only canonical names should be referenced in
RR's.  In the above example, the names `glarp-intf[12].x' are not
canonical, and so should not be refered to in ptr records (or any other
records for that matter).  What should gethostbyaddr(128.1.1.1) return
in such a case?  `glarp-intf1.x' or `glarp.x'?  BIND4.8.2 will (I
believe) return `glarp-intf1.x'.

Is a nameserver supposed to do cname lookups only at the begining of a
queary and not bother after it has found data?  Is this written down
somewhere?

Consider a similar case:

foo.x.			in	mx 10	foo.x.
			in	mx 20	mhub.x.
mhub.x.			in	cname	glarp.x.

Someone at my site recently did this.  And hosed themselves pretty
good.  `Glarp' was supposed to spool mail `foo''s mail when `foo' was
down.  Insted it was trying to contact `mhub', and was getting confused
whilest "talking to itself".  All this basically because the resolver
was expecting a canonical name and got `mhub'.

The machines ruleset 0 was smart enough to deliver mail for `mhub'
locally.  I suppose we might have been able to solve this by forcing
the name `mhub' into the $=w macro in sendmail.cf.  Insted we just
changed the mx 20 record to point go `glarp' directly.

brad
	huntting@csn.org
	huntting@colorado.edu

  <<  Caps Lock?  Caps Lock?  We Dont need no Stinking CAPS LOCK! >>

vjs@rhyolite.wpd.sgi.com (Vernon Schryver) (01/15/91)

In article <1991Jan13.054040.21009@riacs.edu>, medin@nsipo.arc.nasa.gov (Milo S. Medin) writes:
> 
> We turned this bug into Sun, and posted it on comp.bugs.4bsd.  Many sites use
> this since they consider security marginally important.  If you don't, that's
> fine, and more power to you, but don't berate the efforts of a vendor who is
> concerned with improving the state of security.  If you don't like it, 
> then rebuild the resolver library from BSD source (available from a
> number of places), and install a new shared library....

> As for using it in only things that require .rhosts type of files, well, I'm
> sure you'd be rather annoyed when someone breaks into your machine from the
> Internet and spoofs the PTR information so that when you try and contact
> the system admin. of the host that connected to you, you get nowhere.  Ah, but
> then you don't care about security!  I'm sorry I forgot...  If the info is
> wrong, it shouldn't be shoved into utmp.  ....


This is a reasonable reasonse at a large end-user site connected to the
Internet and with a healthy concern for security.

However, if the extra check is made in the few places that change /etc/*tmp
based on gethostbyaddr(), such as rlogind and ftpd, then only the "right"
information will be shoved into utmp.

For one vendor, my employer, changing gethostbyaddr() to always do the
check and choke on glitches is a bad idea.  Making the reverse lookup in
one place would break too many things to justify saving the time required
to make and maintain the same check in about 5 places.  It's reasonable to
expect large Internet sites like NASA Ames to get their DNS databases
right.  It would be silly to expect, not to mention require, as much on
smaller nets not connected to anything.

There is also a better way to implement the check.  Let 
"safe_gethostbyaddr()" return either the obvious struct hostent or a
synthetic one with a "hostname" that is the ASCII string in the familiar
dotted notation, representing the target IP address.  If you do this, you
need not care if the other end of the circuit has their DNS together or is
an evil spoofer.  Innocents will find that traceroute and even rlogin work,
while malefactors will be disappointed.



Vernon Schryver,   Silicon Graphics,  vjs@sgi.com