]> git.wincent.com - bansshee.git/blob - NOTES
Initial import
[bansshee.git] / NOTES
1 IMPLEMENTATION NOTES:
2
3 Banshee implements a simple two-threaded design; in short:
4
5 * The main thread watches the /var/log/secure file for changes, blocking IP addresses as appropriate
6
7 * The background thread periodically unbans IPs after a user-definable period
8
9 OTHER IMPLEMENTATIONS:
10
11 http://www.cpan.org/authors/id/D/DR/DRAGOS/sshwatch-0.01.pl
12 http://fail2ban.sourceforge.net/
13 http://denyhosts.sourceforge.net/
14
15 IPTABLES NOTES:
16
17 Based on: http://www.the-art-of-web.com/system/fail2ban/
18
19 # (0): Listing
20
21 # list all rules
22 iptables -L
23
24 # list rules in the INPUT chain
25 iptables -L INPUT
26
27 # list rules in the BANSSHEE custom chain
28 iptables -L BANSSHEE
29
30 # (1): Setup
31
32 # create a "NEW" chain called "bansshee"
33 iptables -N BANSSHEE
34
35 # "APPEND" a "RETURN" command to the end of the bansshee chain (returns back to INPUT chain); strictly speaking this line is not necessary
36 iptables -A BANSSHEE -j RETURN
37
38 # "INSERT" a rule at the start of the built-in "INPUT" chain that redirects all ssh traffic to the bansshee chain
39 iptables -I INPUT -p tcp --dport ssh -j BANSSHEE
40
41 # same done using an "APPEND"
42 iptables -A INPUT -p tcp --dport ssh -j BANSSHEE
43
44 # (2): Banning
45
46 # insert rule at line 1 of bansshee chain causing all packets from IP address to be DROPped
47 iptables -I bansshee -s 192.168.0.10 -j DROP
48
49 # (3): Unbanning
50
51 # delete rule for IP address
52 iptables -D bansshee -s 192.168.0.10 -j DROP
53
54 # (4): Breakdown
55
56 # remove JUMP command
57 iptables -D INPUT -p tcp --dport ssh -j bansshee
58
59 # FLUSH (deletes all rules from chain)
60 iptables -F bansshee
61
62 # DELETE
63 iptables -X bansshee
64
65
66 LOG FILE PARSING NOTES:
67
68 On Red Hat Enterprise Linux ES release 3:
69
70 In /var/log/messages:
71
72 Unknown user:
73
74 Apr  9 05:19:54 s69819 sshd(pam_unix)[11498]: check pass; user unknown
75 Apr  9 05:19:54 s69819 sshd(pam_unix)[11498]: authentication failure; logname= uid=0 euid=0 tty=NODEVssh ruser= rhost=66.90.73.172
76
77 Note that it will do a DNS lookup and show the hostname instead if found:
78
79 Apr  9 23:40:13 s69819 sshd(pam_unix)[4481]: check pass; user unknown
80 Apr  9 23:40:13 s69819 sshd(pam_unix)[4481]: authentication failure; logname= uid=0 euid=0 tty=NODEVssh ruser= rhost=tpxonline.com 
81
82 Known user but invalid password:
83
84 Apr  9 05:44:01 s69819 sshd(pam_unix)[12862]: authentication failure; logname= uid=0 euid=0 tty=NODEVssh ruser= rhost=66.90.73.172  user=postgres
85
86 In /var/log/secure:
87
88 Unknown user:
89
90 Apr  9 05:19:47 s69819 sshd[11465]: Illegal user amanda from 66.90.73.172
91 Apr  9 05:19:49 s69819 sshd[11465]: Failed password for illegal user amanda from 66.90.73.172 port 46447 ssh2
92
93 Known user, invalid password:
94
95 Apr  9 05:19:49 s69819 sshd[11467]: Failed password for root from 66.90.73.172 port 46562 ssh2
96
97 Note that in this log file no reverse-DNS lookup is done (compare with the tpxonline.com entry above):
98
99 Apr  9 23:40:13 s69819 sshd[4481]: Illegal user test02 from 66.223.110.96
100 Apr  9 23:40:15 s69819 sshd[4481]: Failed password for illegal user test02 from 66.223.110.96 port 60458 ssh2
101
102 Other possibly problematic attempts:
103
104 Apr 11 17:59:36 s69819 sshd[5104]: Did not receive identification string from 132.248.80.196
105
106 Regular expressions:
107
108 /sshd\[\d+\]: Failed password for illegal user \S+ from (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}) port \d+ ssh/
109
110 /sshd\[\d+\]: Failed password for \S+ from (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}) port \d+ ssh/
111
112 BANSSHEE IN ACTION:
113
114 Here we see an intrusion attempt beginning at 11:32:28. In the following 39 seconds the attacker tries to break in using 9 
115 different user names. Notice that there is a delay of 34 seconds between the attack starting and Bansshee's initial 
116 response. This is because the File::Tail module used by Bansshee to efficiently monitor the log file does not continuously 
117 poll the log file looking for changes; rather, it adjusts its rate of checking in accordance with the amount of log file 
118 activity. The more often the log file changes, the quicker Bansshee will "see" it. In the log excerpt you can see the 
119 messages produced by the sshd process itself during the attack, as well as Bansshee's response.
120
121 Apr 14 11:32:28 s69819 sshd[19636]: Illegal user staff from 125.7.193.160
122 Apr 14 11:32:30 s69819 sshd[19636]: Failed password for illegal user staff from 125.7.193.160 port 41866 ssh2
123 Apr 14 11:32:32 s69819 sshd[19638]: Illegal user sales from 125.7.193.160
124 Apr 14 11:32:34 s69819 sshd[19638]: Failed password for illegal user sales from 125.7.193.160 port 41977 ssh2
125 Apr 14 11:32:36 s69819 sshd[19640]: Illegal user recruit from 125.7.193.160
126 Apr 14 11:32:38 s69819 sshd[19640]: Failed password for illegal user recruit from 125.7.193.160 port 42086 ssh2
127 Apr 14 11:32:39 s69819 sshd[19642]: Illegal user alias from 125.7.193.160
128 Apr 14 11:32:42 s69819 sshd[19642]: Failed password for illegal user alias from 125.7.193.160 port 42199 ssh2
129 Apr 14 11:32:43 s69819 sshd[19644]: Illegal user office from 125.7.193.160
130 Apr 14 11:32:46 s69819 sshd[19644]: Failed password for illegal user office from 125.7.193.160 port 42308 ssh2
131 Apr 14 11:32:47 s69819 sshd[19646]: Illegal user samba from 125.7.193.160
132 Apr 14 11:32:50 s69819 sshd[19646]: Failed password for illegal user samba from 125.7.193.160 port 42413 ssh2
133 Apr 14 11:32:51 s69819 sshd[19648]: Illegal user tomcat from 125.7.193.160
134 Apr 14 11:32:54 s69819 sshd[19648]: Failed password for illegal user tomcat from 125.7.193.160 port 42523 ssh2
135 Apr 14 11:32:55 s69819 sshd[19651]: Illegal user webadmin from 125.7.193.160
136 Apr 14 11:33:02 s69819 bansshee[1798]: Attempted connection with illegal user (staff) from IP 125.7.193.160 (1 attempt(s) so 
137 far). 
138 Apr 14 11:33:03 s69819 sshd[19651]: Failed password for illegal user webadmin from 125.7.193.160 port 42629 ssh2
139 Apr 14 11:33:04 s69819 sshd[19653]: Illegal user spam from 125.7.193.160
140 Apr 14 11:33:05 s69819 bansshee[1798]: Attempted connection with illegal user (sales) from IP 125.7.193.160 (2 attempt(s) so 
141 far). 
142 Apr 14 11:33:05 s69819 bansshee[1798]: Attempted connection with illegal user (recruit) from IP 125.7.193.160 (3 attempt(s) 
143 so far). 
144 Apr 14 11:33:05 s69819 bansshee[1798]: Attempted connection with illegal user (alias) from IP 125.7.193.160 (4 attempt(s) so 
145 far). 
146 Apr 14 11:33:05 s69819 bansshee[1798]: Attempted connection with illegal user (office) from IP 125.7.193.160 (5 attempt(s) 
147 so far). 
148 Apr 14 11:33:05 s69819 bansshee[1798]: Adding IP 125.7.193.160 to blocklist. 
149 Apr 14 11:33:05 s69819 bansshee[1798]: Attempted connection with illegal user (samba) from IP 125.7.193.160 (6 attempt(s) so 
150 far). 
151 Apr 14 11:33:05 s69819 bansshee[1798]: Attempted connection with illegal user (tomcat) from IP 125.7.193.160 (7 attempt(s) 
152 so far). 
153 Apr 14 11:33:06 s69819 bansshee[1798]: Attempted connection with illegal user (webadmin) from IP 125.7.193.160 (8 attempt(s) 
154 so far). 
155 Apr 14 11:33:07 s69819 sshd[19653]: Failed password for illegal user spam from 125.7.193.160 port 42862 ssh2
156 Apr 14 11:33:07 s69819 bansshee[1798]: Attempted connection with illegal user (spam) from IP 125.7.193.160 (9 attempt(s) so 
157 far). 
158 Apr 14 11:33:46 s69819 bansshee[1798]: Performing periodic check of blocked IPs list. 
159
160 36 seconds after the attack begins Bansshee adds the offending IP to its blocklist and any subsequent attempts are stopped. 
161 Checking the iptables from the command line shows the block put in place by Bansshee causing all subsequent packets from the 
162 attacker to be silently dropped. The attacker sees no rejected packets but instead wastes time waiting for reply packets 
163 that it will never receive.
164
165 $ sudo iptables -L BANSSHEE
166 Chain BANSSHEE (1 references)
167 target     prot opt source               destination         
168 DROP       all  --  125.7.193.160        anywhere
169
170 Approximately one hour later Bansshee removes the attacker's IP from the blocklist during one of its periodic checks:
171
172 Apr 14 12:33:46 s69819 bansshee[1798]: Performing periodic check of blocked IPs list. 
173 Apr 14 12:33:46 s69819 bansshee[1798]: Removing IP 125.7.193.160 from blocklist. 
174
175 This can be confirmed by checking the iptables from the command line:
176
177 $ sudo iptables -L BANSSHEE
178 Password:
179 Chain BANSSHEE (1 references)
180 target     prot opt source               destination    
181
182 Further monitoring of the log files show that the attacker has given up; no more intrusion attempts originate from the 
183 attacker's IP. If the attacker were to resume his or her dictionary attack Bansshee would quickly step in and put the IP 
184 back on the blocklist thus removing the "force" from the "brute force" attack and rendering it ineffective, as well as 
185 minimizing the risk of denial of service problems for legitimate users trying to connect via SSH.
186
187 The LogWatch report for that day shows this:
188
189  --------------------- Bansshee (secure-log) Begin ------------------------ 
190
191 Failed password attempts: 7 time(s).
192
193 Illegal user attempts: 10 time(s).
194
195 IPs added to blocklist:
196     125.7.193.160 : 1 time(s).
197     210.34.88.222.in-addr.arpa [222.88.34.210] : 1 time(s).
198
199  ---------------------- Bansshee (secure-log) End ------------------------- 
200
201 Here we see that in addition to the attack from 125.7.193.160 an attack from 222.88.34.210 was also stopped.