File: READTHIS

package info (click to toggle)
thp 0.4.6-9
  • links: PTS
  • area: main
  • in suites: wheezy
  • size: 260 kB
  • sloc: perl: 1,088; sh: 154; makefile: 56
file content (212 lines) | stat: -rw-r--r-- 10,173 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
thp - the tiny honeypot

# version 0.4.6
# Copyright George Bakos - alpinista@bigfoot.com
# May 2003
# This is free software, released under the tems of the GNU General 
# Public License avaiable at http://www.gnu.org


INTRODUCTION
------------
I threw this together and started capturing pretty good poop, so a few
friends thought I should make it available.  Here it is. If you think
it's lame, that's fine.  I wasn't going to put it out, anyway.  You may find
it worthwile if you have only one ip address, and don't want to DNAT
everything incoming to an internal dedicated honeypot. I run it on several
machines that are in regular daily use.


DISCLAIMER
----------
This is a neat toy.  That's all it is.  You can learn from your toys
if you use them responsibly, or you can leave them lying around on 
the floor, trip on them, and break your neck. Don't come crying to me
because you thought my toys didn't break.  That's stupid. When it breaks,
grab a little glue and fix it, or throw it away; I don't care.
Have fun, learn something, help others learn, but don't whine because
you were told that this was foolproof.  It isn't.  Fools will always
provide the proof.


CONCEPT
-------
The concept is simple:  listen and record.  The only problem is that the
badguys can't speak until after a connection comes up.  So we give them one.
On any port they want.  Period. Upon connecting, they are presented with a
greeting (I use fortune) and a root prompt.  W00p! They are leet. If you 
prefer a silent listener (no greeting or prompt), that's cool, too. See the
section xinetd.d/inetd, below. Script kiddeez are your best entertainment value!

xinetd is used to open a single port.  New connections to it get handed off
to a simple Perl script that builds two files: a running connection tracker,
and a unique session file, into which we merely capture all data. That's also
where the root prompt comes from. Keystrokes, autorooter scripts, exploit
reconnects, whatever. (If you want other services emulated, you add another
xinetd.d file & change the commandline param & port)

iptables REDIRECT is used to pass all incoming connection requests, regardless
of destination port, to that xinetd listener, unless we make an exception.
Portmap is one such exception.

In order for the intruder-to-be to know what port rpc.cmsd (or any other rpc 
service) is listening on, she needs to ask the target system's portmapper.
So we fire up a portmapper, and feed it bogus mappings for every service we 
can.  Sort of like building a static arp table, only more funnerer.

Now, all of this port redirect tomfoolery is TCP only, but that's ok.  UDP 
is connectionless; once the attacker believes she knows what port to use,
off it flies.  And we capture it, even if there is no service at the near 
end. I personally use Snort & SHADOW to alert me & capture everything, you
go ahead and roll your own solution.  Mine accommodates a pretty busy DSL 
that serves my family, while still grabbing every bit of nastiness that is 
sent to it. There are also several large sites running this on much busier
production systems/networks with no noticeable impact on performance.

INSTALLATION
------------
I'm going to assume that you have a fully functioning IDS of some sort
up and running.  If not, you probably should put down the keyboard and
step away from the computer. Do not pass go, do not install this hpot.

.......... OK, now that they are out of the room, let's party. 

Keep your IDS sigs up to date, folks.  I use Snort for grabbing full binaries 
of anything that fires a sig, as well as SHADOW to have a complete header log.  
With SHADOW, I get logging even if I get hit with an 0-day that Snort misses. 
It's nice to be able to replay the progression of events, too. (plug, plug, 
plug)

I highly asvise you read through this file,as well as all of the comments in the
thp.conf and iptables.rules files, but if you don't care about the details, and 
just want to put this thing up as quickly as possible, here's the straight poop:

cd /usr/local
zcat <tgz file> | tar -xvf -
ln -s thp-0.x.x thp
mkdir /var/log/hpot
chown nobody:nobody /var/log/hpot
chmod 700 /var/log/hpot
cp ./thp/xinetd.d/* /etc/xinetd.d
edit xinetd files to change to :"disable = no"
make any path & preferences adjustements in thp.conf & iptables.rules
./thp/iptables.rules
/etc/rc.d/init.d/portmap start
pmap_set < ./thp/fakerpc
/etc/rc.d/init.d/xinetd start
come back here and read.

thp.conf
--------
You may want to read through this file & make some adjustments, although for
most folks, this will fly fine just as it is.  Read the comments & go. 
One new feature for 0.4.4 you MAY wish to turn on is "logtype". From thp.conf:
# Log format - "single" or "multi".  Single line format is easier to parse, but
# does not make any entry into the capture log until the session is complete.
# Multiline gives you separate "start" & "end" lines, but is a pain in the 
# toches to do anything with.
This means that if an intruder is actively in the pot, you WON'T see a log
entry. Sure, you'll still see it in netstat, iptables, xinetd, sid logs, etc., 
but thp won't summarize it in the captures log until the session ends. If you
depend on tailing the captures log for some kind of alert, it might be a good
idea to leave the logtype as "multi".

In thp.conf, there are a number of paths specified. If you don't like them, 
change them. You will need to create a log location. The default is 
/var/log/hpot. Go ahead and mkdir, chown nobody & chmod 700 it. 

logthis
-------
The file "logthis" is the main script of the lot.  It will create the master
log entries in /var/log/hpot/captures, and call the necessary input handler(s)
from thpfunc.pl.

thpfunc.pl
----------
This is most of the meat & potato(e?)s. If you want to extend thp's 
functionality, please put your handler in here & call it from logthis based on 
xinetd server_args. I am beginning to think this would be better as individual
files, rather than one big kahuna. I can't make major changes like that without 
pissing some folks off, so let's be democratic about it. All in favor, say aye.
The ayes have it. Expect individual files on your local supermarket shelves 
soon.

A couple of notes on SIDs:  
-------------------------
The session IDs (session filenames, as well) are derived from the start time of
the intruder's data, not his connection.  There may be a gap of a second or more
if the attack is not automated. Please remember this when correlating firewall
& IDS logs against SID files.
New for v0.4.2 is a better sub gettime() in thpfunc.pl.  There are two methods
of creating SIDs, depending on how cool your Perl is. If your Perl has 
syscall.ph built, then you will have microsecond-unique SIDs. If not, then
thp falls back on the old method of one SID per second.
The old method can, and will, result in multiple sessions logging to the same
file, if they both initiate within a second of each other. If you don't want
this, and your Perl isn't quite l33t 3NuF, take a look at h2ph(1) and make it 
happen. Yes, I know there is a very nice CPAN module available, but more folks
have C headers already on their boxes. To generate syscall.ph on my Linux:

# cd /usr/include
# h2ph * ./sys/* ./bits/*

xinetd/inetd
------------
Some inted type super-server needs to be installed. I prefer xinetd, but good 
ol' /sbin/inetd is ok, too; you'll just lose alot of flexibility, including the
ability to limit concurrent sessions.  Use the inetd.conf line here:

6635     stream  tcp     nowait  nobody    /usr/local/thp/logthis    logthis

From the xinted.d directory, copy the xinetd configure file "hpot" into your
system /etc/xinetd.d directory, and be sure to re-enable it by editing. Don't 
ask me why I used port 6635 for the catch-all, my head just happenned to fall on
those keys, then I woke up.

If you need it, xinetd is available from http://www.synack.net/xinetd/. Some 
folks will prefer a different listener; go for it.

If you are going to use any of the thpfunc.pl services (currently only ftp and a
really rudimentary http is in there), then the appropriate thp-<svc> file must 
also appear in the xinetd.d directory.  The only difference between these are 
the commandline param, serive name & port number.  The cmdline parameter tells 
the logthis script which subroutine to call from thpfunc.pl.

If you prefer any service to be a "silent listener", i.e. no response, no 
prompt, no nothin' except logging of input, comment out the "server_args" line 
in the appropriate xinetd.d file.

portmap
-------
I wanted to register every service imaginable with the portmapper, but didn't 
like the idea of actually running the daemons necessary and relying on the 
firewall to keep the beasties at bay (some dweeb's voice in my ear kept saying, 
"defense in depth.")  I was going to bang on the sources to portmapper and 
hardcode everything from /etc/rpc into there, but after I pulled the tarball 
down, I started reading and saw that pmap_dump and pmap_set would do it all.  
Cool.  Thanks Wietse.

The fakerpc here is derived from RedHat Linux 7.1, Irix 5.3, and Solaris 8's 
/etc/rpc files, and then built to include lines for versions 1-4 of each rpc 
program, via both udp and tcp. Start portmapper as normal, but instead of firing
up rpc programs, just execute:
		"pmap_set < /usr/local/thp/fakerpc".
There's a 1:1 chance that this will break your existing legit rpc services. If 
you are running rpc services on your firewall/hpot, you should go hang out with 
those non-IDS types above.

iptables
--------
I'll write this section later, or not.  For now, read the comments in the 
iptables.thp and edit as necessary, or incorporate the essential bits into your 
own ruleset. If you have an existing firewall script & aren't comfortable
modifying it yourself, feel free to ask.  I may have time to help.

I'm going to yell for a minute.  Stop reading if you are going to be offended.
WARNING! DANGER WILL ROBINSON! THIS WILL BREAK YOUR EXISTING IPTABLES FIREWALL.
Any questions? Read the disclaimer again.

Hey, Dan, when are you going to give us your /etc/pf.conf?

George
alpinista@bigfoot.com