SourceFiles.org - Use the Source, Luke
Home | Register | News | Forums | Guide | MyLinks | Bookmark

Related Sites

Latest News
  General News
  Reviews
  Press Releases
  Software
  Hardware
  Security
  Tutorials
  Off Topic


Back to files

deceptive defense - wear down the attackers and all their port scanners and so forth

Copyright (c), 1998, Fred Cohen - All Right Reserved

NOTICE: By taking this copy, you agree that all updates and modifications will be reported back to us, that you will only use it to defend systems and not to figure out how to attack them, that we retain all right to the software provided to you and any revisions, enhancements, or derivitive works that may result from it, that you will retain all copyright notices on all copies you distribute elsewhere, and that anyone you give it to will also agree to these terms.

Configuring, installing, and otherwise setting up DTK is described in the download.html file that comes with DTK.

dtk - Deception TooKit

Level 1:

At the outer edges, place sterile male bees to catch the honey hunters

        A program on every port that:
                emulates the legitimate service without providing it
                is secure against attacks including denial
                gives the appearance of success for a little while
                provides indications and warnings information and logs attempts

                Example: tftp
                        responds to get /etc/passwd with a fake password
                        file - when decrypted via Crack, either yields
                        complex passwords that don't work - OR
                        passwords that tell the attacker they have been had
                        sends details of all attack attempts to a log file
                        alerts system/network admins to activities

                Example: sendmail
                        responds to all known sendmail attacks by imitating the
                        fault while actually providing no such service. The
                        users uses POP to get things from a remote server.
                        sends details of all access attempts to a log file
                        alerts system/network admins to activities

Level 2:

        Within the system, every repaired flaw generates a detection routing which
        also cuts off the attacker (or places them in a chroot environment)

                Example: buffer overrun protected by a wrapper - if the
                        wrapper input size limit is exceeded, it generates a
                        log of the attempt and puts the user into a chroot
                        play world from now until they talk to the admin
                        alert admins to attempt

Level 3: Within a business function, reports cross between related

        computers at high(er) frequency that unrelated systems and response
        reflects the current threat environment.

RESTPONSE FILES file names:

        23.response     to respond to telnet
        nnn.response    to respond to port nnn

formats for response files:

tab separated fields as follows:

Comments

# anything in a line starting with a # is a comment

Orders

! variable value comments sets $variable=value in program for timeout, maxloops, debug

State machine:

        # anything is ignored as a comment
        State   !       Nextstate Continue Operation Stimulus Response  Match STIMULUS -> response
        State   !O      Nextstate Continue Operation Response           Match One Time Password -> response
        State   !A      Nextstate Continue Operation Response           Match Algorithmic Identification -> response
        State   M!patternmatch! Nextstate Continue Operation Response   Match patternmatch -> response
        State   /patternmatch/  Nextstate Continue Operation Response   Match patternmatch -> response
        State   word    Nextstate Continue Operation Response           Match first word -> response

        State   Input   NexStat Continue        Operation       Response

        State:          name of state (I use 0, 1, etc. but strings are allowed. Always start at 0

        Input:          all lower case EXCEPT for START, ERROR, NIL, NOTICE, and ! which are special cases

        Next State:      name of the state to go to after doing this output

        Continue:       0 for exit - 1 for remain operating

        Operation:      default = print the response with no trailing <crlf>,
                        1       = print the response and adds a <crlf>,
                        cat     = output from the file specified in the response field
                        -echo   = echo response and turn off echo
                        +echo   = echo <CRLF>response and turn on echo
                        @       = start new response profile from next field
                        exec    = exec a process (login for example)
                        infocon = List the Infocon states and times
                        special = special coding for altered states
                                for example, special in.telnetd allow   allows telnet from the current IP
                                for example, special in.telnetd deny    denies telnet from the current IP
                                for example, special all        deny    denies all from the current IP

        Response:       the output

        Exceptions:     State NOTICE program-name arguments
                                runs program-name with arguments to notify administrators of events
                                unlike everything else, this is done upon entry into state - before input

                        State ! NexStat Exit lf/file match-for action
                                if match-for appears anywhere in the input line, do the rest

                        State /reg-exp/ NexStat Exit lf/file action
                                if the reg-exp regular expression matches anything in this liput, trigger

A mild example comes from a fake port 25 program:

# State Input NexStat Exit lf/file output/filename comment lines start with the pound sign () # we are faking sendmail version 8.1.2/8.1.3

!       timeout         30      # 30 second timeout per command
!       maxloops        15      # 15 commands at most
0       START   0       1       1       220 all.net ESMTP Sendmail 8.1.2/8.1.3;
0       ERROR   0       1       1       500 Command unrecognized - please say "Helo"
0       help    0       1       1       214-No help available
# if they say helo, we acknowledge and go to state 2
0       helo    1       1       1       250 all.net, pleased to meet you
0       quit    0       0       1       221 all.net closing connection
# if you don't get anything - just ignore it and wait
0       nil     0       1       0

# we got a Helo request
# it contained something with /etc/passwd in it - let's simulate a big hole 1 ! 4 1 cat /etc/passwd @fake.passwd # this regular expression matched something in the input line - let's simulate a big hole

1       /cat\spasswd/   4       1       2       @fake.passwd
1       mail    2       1       1       250 proceed
1       rcpt    1       1       1       500 Must say "HELO" first
1       help    1       1       1       214-No help available
1       quit    1       0       1       221 all.net closing connection
1       nil     1       1       0       
1       ERROR   1       0       1       500 Server Configuration Error - all.net closing connection
# even a rcpt - this guy's good!!!
2       rcpt    3       1       1       250 proceed end with a '.'
2       help    2       1       1       214-No help available.
2       quit    2       0       1       221 all.net closing connection
2       nil     2       1       0       
2       ERROR   2       0       1       500 Server Configuration Error - all.net closing connection
# getting mail - what do I do?!?!?
3       nil     1       1       1       500 Mailbox full - please start again
3       ERROR   3       0       0       500 Server Configuration Error - all.net closing connection
# I sent them a password file - better notify the authorities
4       NOTICE  /dtk/notify.pl  Email   fc@all.net Just sent a password file to an attacker - sendmail exploit
4       NIL     0       1       1       214-Unknown configuration error
4       ERROR   0       0       0       500 Server Configuration Error - all.net closing connection

HOSTSERV FILE

The HostServ file specifies actions associated with ports for IP addresses in a similar way to how TCP-wrappers operates.

HostServ file format:

Service Host-Spec Action

        Service:= Port number of the affected service[s]
                specified as a series of comma-separated reular expressions
                        regex,regex,regex,...

        Host-Spec:=IP address(es) of the affected host[s]
                specified as a series of comma-separated reular expressions
                regex,regex,regex,...

        Action:=What to do if this case occurs to wit:
                DTK             run default DTK service for port (nnn.response)
                /etc/in.telnetd run /etc/in.telnetd (anything starting with '/')
                nnn.response    run DTK responder for port nnn

         Comment lines start with ''

        The following line is appended to whatever file you provide:
                .      .      DTK
                which implements DTK on all ports for all IP addresses

An example may be helpful:

# This is a sample HostServ file for DTK

#Service Host-Spec Action

# incoming email from 1.2.3. EXCEPT 1.2.3.4 runs sendmail - others get deception # 4.3.2.2 gets telnet deception on incoming email port (a bit strange)

25                      1.2.3.4                         DTK
25                      1.2.3.                         /var/adm/sendmail
25                      4.3.2.2 23.response
25                      .*                              DTK

# allow 1.2.3.4 and 4.3.2.1 to use telnet, others get deception

23                      1.2.3.4                         /var/bin/in.telnetd -s
23                      4.3.2.1                         /var/bin/in.telnetd -s
23                      .*                              DTK

# all previously unspecified services from 1.2.3.4 or 101.202.303.404 run /dtk/deception

.                      101.202.303.404                 /dtk/deception
.                      1.2.3.4                         /dtk/deception

The HostServ file is loaded at the startup of each deception port's daemon. This means that if you change the HostServ file you need to restart the daemon for any affected ports before those changes will take effect on those ports. In implementation, the HostServ file is read once at startup, lines not relating to the port this daemon is running are thrown out, and aech time an incoming port causes a process to be forked, the HostServ table is checked sequentially to decide what to do.


Other Sites

Discussion Groups
  Beginners
  Distributions
  Networking / Security
  Software
  PDAs

About | FAQ | Privacy | Awards | Contact
Comments to the webmaster are welcome.
Copyright 2006 Sourcefiles.org All rights reserved.