home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / ckscripts / codered < prev    next >
Text File  |  2020-01-01  |  3KB  |  69 lines

  1. ; c o d e r e d  --  Absorb and log attacks on TCP Port 80.
  2. ;
  3. ; Works for any HTTP (TCP port 80) attack: Code Red, Nimba, etc.
  4. ; Requires privilege in UNIX but not in Windows, and also requires
  5. ; that no other process is listening on por 80.
  6. ;
  7. ; F. da Cruz, Columbia University, August 2001.
  8. ; Requires C-Kermit 8.0 Beta.03 or later or concurrent K95 version.
  9. ;
  10. .truncate := 0                          ; 1 = truncate log records at 79 cols.
  11. .\%n = 0                                ; Event count
  12. .start := \fcvtdate()                   ; Start date-time
  13.  
  14. if < \v(version) 800200 exit 1 Fatal - C-Kermit 8.0 required.
  15.  
  16. define ON_CTRLC {                       ; Ctrl-C trap
  17.     echo Connections: \%n in \fdiffdate(now,\m(start))
  18. }
  19.  
  20. if K-95 {                               ; K95: Appropriate window color
  21.     set command color white red
  22.     cls
  23. }
  24.  
  25. set input echo off                      ; Input is logged to a file
  26. set tcp reverse-dns off                 ; For accurate source reporting
  27. while true {
  28.     echo "-----------------"
  29.     .stamp := \fcvtdate()
  30.     xecho \m(stamp)...        
  31.     set host * 80                       ; Wait for incoming HTTP connection
  32.     if fail {
  33.         echo Net Open Failure: \v(errstring)
  34.         if ( = \v(errno) 13 || = \v(errno) 48 ) exit 1
  35.         hangup
  36.         continue
  37.     }
  38.     clear input                         ; Capture the attack string
  39.     input 8 \10                         ; (terminate at linefeed = ASCII 10)
  40.     increment \%n                                 ; Count this probe
  41.     echo \flpad(\%n,4). \m(stamp): \v(line)       ; Log to screen
  42.     if ( = 0 \fverify(0123456789.,\v(line)) ) {   ; Have IP address
  43.     .addr := \v(line)
  44.     .name := \faddr2name(\m(addr))            ; Lookup name in DNS
  45.     } else {                                      ; Have IP name
  46.     .name := \v(line)
  47.     .addr := \fname2addr(\m(name))            ; Get its address
  48.     }
  49.     hangup                                        ; Close connection quickly
  50.  
  51.     .record := \m(stamp): \m(name) [\m(addr)] "\ftrim(\v(input))"
  52.     if \m(truncate) if > \flen(\m(record)) 79 .record := \s(record[1:76]).."
  53.  
  54.     set flag off
  55.     for \%i 1 3 1 {                               ; Write to log
  56.         fopen /append \%c codered.log             ; It might be busy
  57.         if fail {
  58.             echo LOG APPEND FAILURE: \f_errmsg()
  59.             sleep \%i
  60.             continue
  61.         }
  62.         fwrite /line \%c \m(record)
  63.         if success set flag on
  64.         fclose \%c
  65.         if flag break
  66.     }
  67.     if not flag echo RECORD LOST: \m(record)        
  68. }
  69.