Changeset 428

Show
Ignore:
Timestamp:
03/26/06 01:05:12 (3 years ago)
Author:
common
Message:

shellcode-signatures
- namespace bindshell
- namespace connectback
added

- sch_namespace_xor works now (the debug statements stay for now, i need them)

seems like most shellcode mappings in the signature file are broken :\ ...

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • nepenthes/trunk/modules/shellcode-signatures/Makefile.am

    r424 r428  
    1616shellcodesignatures_la_SOURCES += shellcode-signatures.cpp shellcode-signatures.hpp  
    1717shellcodesignatures_la_SOURCES += sch_namespace_xor.cpp sch_namespace_xor.hpp 
    18  
     18shellcodesignatures_la_SOURCES += sch_namespace_bindshell.cpp sch_namespace_bindshell.hpp 
     19shellcodesignatures_la_SOURCES += sch_namespace_connectbackshell.cpp sch_namespace_connectbackshell.hpp 
    1920 
    2021shellcodesignatures_la_LDFLAGS = -module -no-undefined -avoid-version 
  • nepenthes/trunk/modules/shellcode-signatures/parser.h

    r426 r428  
    3030        sc_pcre, 
    3131        sc_pre, 
    32         sc_post 
     32        sc_post, 
     33        sc_none 
    3334}; 
    3435 
  • nepenthes/trunk/modules/shellcode-signatures/parser.l

    r426 r428  
    6464"pcre"                        { return SC_PCRE; } 
    6565"pre"                         { return SC_PRELOAD; } 
    66 "post"                         { return SC_PRELOAD; } 
     66"post"                         { return SC_POSTLOAD; } 
     67 
    6768 
    6869{LETTER}({LETTER}|{DIGIT}|"_")*         { string_append(yytext, strlen(yytext)); return SC_ID; } 
  • nepenthes/trunk/modules/shellcode-signatures/parser.y

    r426 r428  
    5151        { 
    5252                int i; 
    53                
     53/*             
    5454                printf("shellcode:\n"); 
    5555 
     
    6666 
    6767                printf("\n\n"); 
    68  
     68*/ 
    6969                /* prepare for the next one */ 
    7070                init_shellcode(); 
     
    217217   { 
    218218           shellcodes->map[shellcodes->map_items++] = sc_post; 
     219        } 
     220        | SC_NONE 
     221   { 
     222           shellcodes->map[shellcodes->map_items++] = sc_none; 
    219223        } 
    220224 
     
    288292                  "pcre", 
    289293                  "pre", 
    290                   "post" 
     294                  "post", 
     295                  "none" 
    291296                }; 
    292297                if ( num > sizeof(mapmapping)/sizeof(char *) ) 
  • nepenthes/trunk/modules/shellcode-signatures/sch_namespace_xor.cpp

    r427 r428  
    3232#include "Nepenthes.hpp" 
    3333#include "Message.hpp" 
    34 #include "Message.cpp" 
     34 
    3535#include "LogManager.hpp" 
    3636#include "Utilities.hpp" 
     
    126126        if ( (matchCount = pcre_exec(m_Pcre, 0, (char *) shellcode, len, 0, 0, (int *)ovec, sizeof(ovec)/sizeof(int32_t))) > 0 ) 
    127127        { 
    128                 logCrit("MATCH %s\n",m_ShellcodeHandlerName.c_str()); 
     128                logCrit("MATCH %s  matchCount %i map_items %i \n",m_ShellcodeHandlerName.c_str(), matchCount, m_Shellcode->map_items); 
    129129                int32_t i; 
    130                 for ( i=0; i== m_Shellcode->map_items; i++ ) 
     130                for ( i=0; i < m_Shellcode->map_items; i++ ) 
    131131                { 
     132                        if (m_Shellcode->map[i] == sc_none) 
     133                                        continue; 
     134 
     135                        logInfo(" i = %i map_items %i , map = %s\n",i,m_Shellcode->map_items, sc_get_mapping_by_numeric(m_Shellcode->map[i])); 
    132136                        const char *match = NULL; 
    133137                        int matchSize = pcre_get_substring((char *) shellcode, (int *)ovec, (int)matchCount, i, &match); 
     
    135139                        switch ( m_Shellcode->map[i] ) 
    136140                        { 
    137                          
     141 
    138142                        case sc_pre: 
    139143                                preMatch = match; 
    140144                                preSize = matchSize; 
     145                                logSpam("sc_pre %i\n",matchSize); 
    141146                                break; 
    142147 
     
    144149                                decoderMatch = match; 
    145150                                decoderSize = matchSize; 
     151                                logSpam("sc_pcre %i\n",matchSize); 
    146152                                break; 
    147153 
     
    149155                        case sc_size: 
    150156                                sizeMatch = match; 
     157                                logSpam("sc_size %i\n",matchSize); 
    151158                                switch ( matchSize ) 
    152159                                { 
    153160                                case 4: 
    154161                                        codeSize = (uint32_t)*((uint32_t *)match); 
    155                                        break; 
     162                    break; 
    156163 
    157164                                case 2: 
    158165                                        codeSize = (uint32_t)*((uint16_t *)match); 
     166                                        break; 
    159167 
    160168                                case 1: 
     
    162170                                        break; 
    163171                                } 
     172                                logSpam("\tnumeric %i\n",codeSize); 
    164173                                break; 
    165174 
    166175 
    167176                        case sc_sizeinvert: 
     177                                logSpam("sc_sizeinvert %i\n",matchSize); 
    168178                                sizeMatch = match; 
    169179                                switch ( matchSize ) 
     
    177187                                        break; 
    178188                                } 
     189                                logSpam("\tnumeric %i\n",codeSize); 
    179190                                break; 
    180191 
    181192                        case sc_key: 
     193                                logSpam("sc_key %i\n",matchSize); 
    182194                                keyMatch = match; 
    183195                                keySize = matchSize; 
     
    186198                                case 1: 
    187199                                        byteKey = *((byte *)match); 
     200                                        logSpam("\tnumeric %1x\n",(unsigned int)byteKey); 
    188201                                        break; 
    189202 
    190203                                case 4: 
    191                                         intKey = *((uint32_t *)match); 
     204                    intKey = *((uint32_t *)match); 
     205                                        logSpam("\tnumeric %x\n",(unsigned int)intKey); 
    192206                                        break; 
    193207 
     
    196210 
    197211                        case sc_post: 
     212                                logSpam("sc_post %i\n",matchSize); 
    198213                                postMatch = match; 
    199214                                postSize = matchSize; 
    200215                                break; 
    201216 
     217 
    202218                        default: 
    203                                 logCrit("not used mapping %s\n",sc_get_mapping_by_numeric(m_Shellcode->map[i])); 
     219                                logCrit("%s not used mapping %s\n",m_ShellcodeHandlerName.c_str(), sc_get_mapping_by_numeric(m_Shellcode->map[i])); 
    204220                        } 
    205221                } 
     222 
    206223 
    207224// create buffer for decoding part of the message 
     
    242259                memcpy(newshellcode+preSize+decoderSize     ,decodedMessage ,postSize); 
    243260 
     261                g_Nepenthes->getUtilities()->hexdump(l_crit,(byte *)newshellcode, len);                  
     262 
    244263                Message *newMessage = new Message((char *)newshellcode, len, (*msg)->getLocalPort(), (*msg)->getRemotePort(), 
    245264                                                                                  (*msg)->getLocalHost(), (*msg)->getRemoteHost(), (*msg)->getResponder(), (*msg)->getSocket()); 
  • nepenthes/trunk/modules/shellcode-signatures/shellcode-signatures.cpp

    r426 r428  
    4040 
    4141#include "sch_namespace_xor.hpp" 
     42#include "sch_namespace_bindshell.hpp" 
     43#include "sch_namespace_connectbackshell.hpp" 
    4244 
    4345#include "ShellcodeManager.hpp" 
    4446#include "Nepenthes.hpp" 
    4547#include "LogManager.hpp" 
     48 
     49#include "Message.cpp" 
    4650 
    4751#ifdef STDTAGS  
     
    137141 
    138142                case sc_connectbackshell: 
     143                        sch = new NamespaceConnectbackShell(sc); 
    139144                        break; 
    140145 
     
    143148 
    144149                case sc_bindshell: 
     150                        sch = new NamespaceBindShell(sc); 
    145151                        break; 
    146152 
  • nepenthes/trunk/modules/shellcode-signatures/shellcode-signatures.sc

    r425 r428  
    4343        "(.*)(\\xEB\\x02\\xEB\\x05\\xE8\\xF9\\xFF\\xFF\\xFF\\x5B\\x31\\xC9\\x66\\xB9(.)" 
    4444        "\\xFF\\x80\\x73\\x0E(.)\\x43\\xE2\\xF9)(.*)$"; 
    45         mapping (pre,pcre,key,size,post); 
     45        mapping (none,pre,pcre,size,key,post); 
    4646}; 
    4747 
     
    5353        "(.*)(\\xEB\\x02\\xEB\\x05\\xE8\\xF9\\xFF\\xFF\\xFF\\x5B\\x31\\xC9\\xB1(.)\\x80" 
    5454        "\\x73\\x0C(.)\\x43\\xE2\\xF9)(.*)$"; 
    55         mapping (pre,pcre,key,size,post); 
     55        mapping (none,pre,pcre,size,key,post); 
    5656}; 
    5757 
     
    6161        "(.*)(\\xEB\\x10\\x5A\\x4A\\x33\\xC9\\x66\\xB9(..)\\x80\\x34\\x0A(.)\\xE2\\xFA" 
    6262        "\\xEB\\x05\\xE8\\xEB\\xFF\\xFF\\xFF)(.*)$"; 
    63         mapping (pre,pcre,key,size,post); 
     63        mapping (none,pre,pcre,size,key,post); 
    6464}; 
    6565 
     
    6969        "(.*)(\\xEB\\x02\\xEB\\x05\\xE8\\xF9\\xFF\\xFF\\xFF\\x5B\\x31\\xC9\\x66\\xB9(..)" 
    7070        "\\x80\\x73\\x0E(.)\\x43\\xE2\\xF9)(.*)$"; 
    71         mapping (pre,pcre,key,size,post); 
     71        mapping (none,pre,pcre,size,key,post); 
    7272}; 
    7373 
     
    7878        "(.*)(\\xEB\\x19\\x5E\\x31\\xC9\\x81\\xE9(....)\\x81\\x36(....)\\x81\\xEE\\xFC" 
    7979        "\\xFF\\xFF\\xFF\\xE2\\xF2\\xEB\\x05\\xE8\\xE2\\xFF\\xFF\\xFF)(.*)$"; 
    80         mapping (pre,pcre,key,sizeinvert,post); 
     80        mapping (none,pre,pcre,sizeinvert,key,post); 
    8181}; 
    8282 
     
    8888        "(.*)(\\xEB\\x03\\x5D\\xEB\\x05\\xE8\\xF8\\xFF\\xFF\\xFF\\x8B\\xC5\\x83\\xC0\\x11" 
    8989        "\\x33\\xC9\\x66\\xB9(..)\\x80\\x30(.)\\x40\\xE2\\xFA)(.*)$"; 
    90         mapping (pre,pcre,key,size,post); 
     90        mapping (none,pre,pcre,size,key,post); 
    9191}; 
    9292 
     
    9696        "(.*)(\\xEB\\x10\\x5A\\x4A\\x31\\xC9\\x66\\xB9\(..)\\x80\\x34\\x0A(.)\\xE2\\xFA" 
    9797        "\\xEB\\x05\\xE8\\xEB\\xFF\\xFF\\xFF)(.*)$"; 
    98         mapping (pre,pcre,key,size,post);  
     98        mapping (none,pre,pcre,size,key,post);  
    9999}; 
    100100 
     
    105105        "(.*)(\\xEB\\x0F\\x5B\\x33\\xC9\\x66\\xB9(..)\\x80\\x33(.)\\x43\\xE2\\xFA\\xEB" 
    106106        "\\x05\\xE8\\xEC\\xFF\\xFF\\xFF)(.*)$"; 
    107         mapping (pre,pcre,key,size,post);      
     107        mapping (none,pre,pcre,size,key,post);      
    108108}; 
    109109 
     
    113113        "(.*)(\\xEB\\x03\\x5D\\xEB\\x05\\xE8\\xF8\\xFF\\xFF\\xFF\\x83\\xC5\\x15\\x90\\x90" 
    114114        "\\x90\\x8B\\xC5\\x33\\xC9\\x66\\xB9(..)\\x50\\x80\\x30(.)\\x40\\xE2\\xFA)(.*)$"; 
    115         mapping (pre,pcre,key,size,post); 
     115        mapping (none,pre,pcre,size,key,post); 
    116116};   
    117117 
     
    121121        "(.*)(\\x31\\xC9\\x83\\xE9(.)\\xD9\\xEE\\xD9\\x74\\x24\\xF4\\x5B\\x81\\x73\\x13(....)" 
    122122        "\\x83\\xEB\\xFC\\xE2\\xF4)(.*)$"; 
    123         mapping (pre,pcre,key,sizeinvert,post); 
     123        mapping (none,pre,pcre,key,sizeinvert,post); 
    124124}; 
    125125 
     
    129129        "(.*)(\\x33\\xC0\\xF7\\xD0\\x8B\\xFC\\xF2\\xAF\\x57\\x33\\xC9\\xB1(.)\\x90\\x90\\x90" 
    130130        "\\x90\\x80\\x37(.)\\x47\\xE2\\xFA.*\\xFF\\xFF\\xFF\\xFF)(.*)$"; 
    131         mapping (pre,pcre,key,size,post); 
     131        mapping (none,pre,pcre,size,key,post); 
    132132}; 
    133133 
     
    137137        "(.*)(\\xEB\\x0F\\x8B\\x34\\x24\\x33\\xC9\\x80\\xC1(.)\\x80\\x36(.)\\x46\\xE2\\xFA" 
    138138        "\\xC3\\xE8\\xEC\\xFF\\xFF\\xFF)(.*)$"; 
    139         mapping (pre,pcre,key,size,post);  
     139        mapping (none,pre,pcre,size,key,post);  
    140140}; 
    141141 
     
    147147        "\\x01\\xFC\\xFF\\xFF\\x83\\xE4\\xFC\\x8B\\xEC\\x33\\xC9\\x66\\xB9(..)\\x80\\x30(.)" 
    148148        "\\x40\\xE2\\xFA)(.*)$"; 
    149         mapping (pre,pcre,key,size,post);  
     149        mapping (none,pre,pcre,size,key,post);  
    150150}; 
    151151 
     
    155155        "(.*)(\\xC9\\x83\\xE9(.)\\xD9\\xEE\\xD9\\x74\\x24\\xF4\\x5B\\x81\\x73\\x13(....)\\x83" 
    156156        "\\xEB\\xFC\\xE2\\xF4)(.*)$"; 
    157         mapping (pre,pcre,key,sizeinvert,post); 
     157        mapping (none,pre,pcre,key,sizeinvert,post); 
    158158}; 
    159159 
     
    164164        "(.*)(\\x2B\\xC9\\x83\\xE9(.)\\xE8\\xFF\\xFF\\xFF\\xFF\\xC0\\x5E\\x81\\x76\\x0E(....)" 
    165165        "\\x83\\xEE\\xFC\\xE2\\xF4)(.*)$"; 
    166         mapping (pre,pcre,key,sizeinvert,post); 
     166        mapping (none,pre,pcre,sizeinvert,key,post); 
    167167}; 
    168168 
     
    173173        "(.*)(\\xEB\\x0E\\x5B\\x4B\\x33\\xC9\\xB1(.)\\x80\\x34\\x0B(.)\\xE2\\xFA\\xEB\\x05\\xE8" 
    174174        "\\xED\\xFF\\xFF\\xFF)(.*)$"; 
    175         mapping (pre,pcre,key,size,post);  
     175        mapping (none,pre,pcre,size,key,post);  
    176176}; 
    177177 
     
    180180        pattern 
    181181        "(.*)(\\xEB.\\xEB.\\xE8.*\\xB1(.).*\\x80..(.).*\\xE2.)(.*)$"; 
    182         mapping (pre,pcre,key,size,post); 
     182        mapping (none,pre,pcre,size,key,post); 
    183183}; 
    184184 
     
    248248{ 
    249249        pattern  
     250 
     251"\\x83\\xEC\\x34\\x8B\\xF4\\xE8\\x47\\x01\\x00\\x00\\x89\\x06\\xFF\\x36\\x68\\x8E\\x4E\\x0E" 
     252"\\xEC\\xE8\\x61\\x01\\x00\\x00\\x89\\x46\\x08\\xFF\\x36\\x68\\xAD\\xD9\\x05\\xCE\\xE8\\x52" 
     253"\\x01\\x00\\x00\\x89\\x46\\x0C\\x68\\x6C\\x6C\\x00\\x00\\x68\\x33\\x32\\x2E\\x64\\x68\\x77" 
     254"\\x73\\x32\\x5F\\x54\\xFF\\x56\\x08\\x89\\x46\\x04\\xFF\\x36\\x68\\x72\\xFE\\xB3\\x16\\xE8" 
     255"\\x2D\\x01\\x00\\x00\\x89\\x46\\x10\\xFF\\x36\\x68\\x7E\\xD8\\xE2\\x73\\xE8\\x1E\\x01\\x00" 
     256"\\x00\\x89\\x46\\x14\\xFF\\x76\\x04\\x68\\xCB\\xED\\xFC\\x3B\\xE8\\x0E\\x01\\x00\\x00\\x89" 
     257"\\x46\\x18\\xFF\\x76\\x04\\x68\\xD9\\x09\\xF5\\xAD\\xE8\\xFE\\x00\\x00\\x00\\x89\\x46\\x1C" 
     258"\\xFF\\x76\\x04\\x68\\xA4\\x1A\\x70\\xC7\\xE8\\xEE\\x00\\x00\\x00\\x89\\x46\\x20\\xFF\\x76" 
     259"\\x04\\x68\\xA4\\xAD\\x2E\\xE9\\xE8\\xDE\\x00\\x00\\x00\\x89\\x46\\x24\\xFF\\x76\\x04\\x68" 
     260"\\xE5\\x49\\x86\\x49\\xE8\\xCE\\x00\\x00\\x00\\x89\\x46\\x28\\xFF\\x76\\x04\\x68\\xE7\\x79" 
     261"\\xC6\\x79\\xE8\\xBE\\x00\\x00\\x00\\x89\\x46\\x2C\\x33\\xFF\\x81\\xEC\\x90\\x01\\x00\\x00" 
     262"\\x54\\x68\\x01\\x01\\x00\\x00\\xFF\\x56\\x18\\x50\\x50\\x50\\x50\\x40\\x50\\x40\\x50\\xFF" 
     263"\\x56\\x1C\\x8B\\xD8\\x57\\x57\\x68\\x02\\x00(..)\\x8B\\xCC\\x6A\\x16\\x51\\x53\\xFF\\x56" 
     264"\\x20\\x57\\x53\\xFF\\x56\\x24\\x57\\x51\\x53\\xFF\\x56\\x28\\x8B\\xD0\\x68\\x65\\x78\\x65" 
     265"\\x00\\x68\\x63\\x6D\\x64\\x2E\\x89\\x66\\x30\\x83\\xEC\\x54\\x8D\\x3C\\x24\\x33\\xC0"; 
     266 
     267 
     268/* 
    250269        "\\x83\\xEC\\x34\\x8B\\xF4\\xE8\\x47\\x01\\x00\\x00\\x89\\x06\\xFF\\x36\\x68\\x8E\\x4E\\x0E\\xEC\\xE8" 
    251270        "\\x61\\x01\\x00\\x00\\x89\\x46\\x08\\xFF\\x36\\x68\\xAD\\xD9\\x05\\xCE\\xE8\\x52\\x01\\x00\\x00\\x89" 
     
    262281        "\\x57\\x51\\x53\\xFF\\x56\\x28\\x8B\\xD0\\x68\\x65\\x78\\x65\\x00\\x68\\x63\\x6D\\x64\\x2E\\x89\\x66" 
    263282        "\\x30\\x83\\xEC\\x54\\x8D\\x3C\\x24\\x33\\xC0"; 
    264  
     283*/ 
    265284        mapping (port); 
    266285};