Som en pentester för en konsultbyrå är det en del av vårt jobb att "undvika" antivirus efter att ha fått kodkörning på informationssystem. Det är verkligen nödvändigt att bevisa utnyttjande av sårbarheter, i motsats till att bara rapportera dem. Om en AV upptäcker de verktyg vi använder kommer kunder ofta att bortse från sårbarheten eftersom de inte är övertygade om risken det orsakar.
Vi märkte att Windows Defender upptäcker metsrv.dll från Metasploit Framework i minnet och dödar. vårt skal. Detekteringen görs av mpengine.dll och görs antingen genom någon form av kriterier på den emulerade binära eller är ett mönster av byte i DLL.
Nu när frågan är klar är här den faktiska frågan: hur kan jag fortsätta att peka ut exakt vad signaturen för den här filen är?
Innan du svarar här är de slutsatser jag redan har kommit till: p>
- Windows Defenders skannmotor upptäcker metsrv.dll från Metasploit när den laddas in i minnet.
- Jag kan använda Tavisos loadlibrary för att återge detektionen statiskt på GNU / Linux med följande kommando:
- Jag har minskat provstorleken ner från 200 kb till 13 kb med GNU split verktyg och en "binär sökning" -metod: provet är uppdelat i två delar , matas båda till Windows Defender och den del som detekteras delas sedan upp i ytterligare två delar. Upprepa tills det är möjligt för att minimera testfallet.
- Demontering av mpengine.dll är inte särskilt användbart, eftersom det finns mer än 30 000 funktioner som IDA Pro hittar i det.
- Kodtäckningsanalys med Pin gör det möjligt att minska denna uppsättning till 3k-funktioner, vilket fortfarande är för mycket att analysera statiskt.
- mpengine.dll kan felsökas i gdb. Jag satte en vaktpunkt på strängen "Win64 / Meterpreter.A! Dll" för att se om jag kunde hitta en intressant funktion som skulle läsa på den här platsen, kanske vid en tidpunkt nära domens tid. Fortfarande förlorat på grund av kodens storlek, även om övervakningspunkten utlöses två gånger.
- Ett skript på GitHub som heter avwhy.py gör det möjligt att avleda signaturer från AV-enheter genom att ändra en byte åt gången och memorera de som påverkar AV: s dom. Efter att ha kört mer än 16 timmar returnerade verktyget mig hela filen som en del av signaturen, vilket ser ut som ett felresultat: det är osannolikt att jag har hittat den exakta signaturen med hjälp av delningsverktyget, eftersom jag förväntar mig att antingen ha för mycket byte eller att ha tagit bort användbara byte från signaturen.
Som ni kan se har jag lagt ner många timmar på detta. Målet är att hitta den exakta signaturen , inte att undvika den genom att tillämpa någon form av transformation på metsrv.dll . Jag tycker att det är en rolig reverse engineering-utmaning men jag sitter fast för nu.
Vilka är stegen som jag behöver ta för att uppnå mitt mål?
Redigera: För att klargöra vad jag försöker göra , här är ett självpublicerat papper från Tavis Ormandy: Sophail: En kritisk analys av Sophos Antivirus
På sidan 3 visar han signaturen för filen "Attention 629". Jag försöker uppnå samma resultat. Naturligtvis kan jag attackera 3k-funktionerna och arbeta härifrån, men jag antar att Tavis hade ett mer intelligent tillvägagångssätt, och det är den typ av svar jag letar efter.